From 6b7b099a82266bd5714ca049f9fba3d426d70504 Mon Sep 17 00:00:00 2001 From: "Ron B. Yeh" Date: Mon, 9 Jan 2023 16:41:54 -0800 Subject: [PATCH] Remove build/ after releasing version 4.2.0-beta.2 to npm and GitHub. --- build/cjs/vexflow-bravura.js | 7 - build/cjs/vexflow-bravura.js.map | 1 - build/cjs/vexflow-core.js | 7 - build/cjs/vexflow-core.js.map | 1 - build/cjs/vexflow-debug-with-tests.js | 56534 ---------------- build/cjs/vexflow-debug-with-tests.js.map | 1 - build/cjs/vexflow-debug.js | 38107 ----------- build/cjs/vexflow-debug.js.map | 1 - build/cjs/vexflow-font-bravura.js | 2 - build/cjs/vexflow-font-bravura.js.map | 1 - build/cjs/vexflow-font-custom.js | 2 - build/cjs/vexflow-font-custom.js.map | 1 - build/cjs/vexflow-font-gonville.js | 2 - build/cjs/vexflow-font-gonville.js.map | 1 - build/cjs/vexflow-font-leland.js | 2 - build/cjs/vexflow-font-leland.js.map | 1 - build/cjs/vexflow-font-petaluma.js | 2 - build/cjs/vexflow-font-petaluma.js.map | 1 - build/cjs/vexflow-gonville.js | 7 - build/cjs/vexflow-gonville.js.map | 1 - build/cjs/vexflow-leland.js | 7 - build/cjs/vexflow-leland.js.map | 1 - build/cjs/vexflow-petaluma.js | 7 - build/cjs/vexflow-petaluma.js.map | 1 - build/cjs/vexflow.js | 7 - build/cjs/vexflow.js.map | 1 - build/esm/entry/vexflow-bravura.js | 10 - build/esm/entry/vexflow-core.js | 54 - build/esm/entry/vexflow-debug-with-tests.js | 11 - build/esm/entry/vexflow-debug.js | 8 - build/esm/entry/vexflow-font-bravura.js | 7 - build/esm/entry/vexflow-font-custom.js | 7 - build/esm/entry/vexflow-font-gonville.js | 7 - build/esm/entry/vexflow-font-leland.js | 7 - build/esm/entry/vexflow-font-petaluma.js | 7 - build/esm/entry/vexflow-gonville.js | 10 - build/esm/entry/vexflow-leland.js | 10 - build/esm/entry/vexflow-petaluma.js | 10 - build/esm/entry/vexflow.js | 8 - build/esm/package.json | 3 - build/esm/src/accidental.js | 348 - build/esm/src/annotation.js | 238 - build/esm/src/articulation.js | 278 - build/esm/src/barnote.js | 56 - build/esm/src/beam.js | 642 - build/esm/src/bend.js | 202 - build/esm/src/boundingbox.js | 59 - build/esm/src/boundingboxcomputation.js | 107 - build/esm/src/canvascontext.js | 202 - build/esm/src/chordsymbol.js | 607 - build/esm/src/clef.js | 145 - build/esm/src/clefnote.js | 51 - build/esm/src/crescendo.js | 77 - build/esm/src/curve.js | 118 - build/esm/src/dot.js | 137 - build/esm/src/easyscore.js | 374 - build/esm/src/element.js | 245 - build/esm/src/factory.js | 466 - build/esm/src/flow.js | 300 - build/esm/src/font.js | 262 - build/esm/src/fonts/bravura_glyphs.js | 3535 - build/esm/src/fonts/bravura_metrics.js | 520 - build/esm/src/fonts/custom_glyphs.js | 90 - build/esm/src/fonts/custom_metrics.js | 5 - build/esm/src/fonts/gonville_glyphs.js | 1103 - build/esm/src/fonts/gonville_metrics.js | 482 - build/esm/src/fonts/leland_glyphs.js | 1183 - build/esm/src/fonts/leland_metrics.js | 520 - build/esm/src/fonts/load_all.js | 12 - build/esm/src/fonts/load_bravura.js | 6 - build/esm/src/fonts/load_custom.js | 6 - build/esm/src/fonts/load_gonville.js | 6 - build/esm/src/fonts/load_leland.js | 6 - build/esm/src/fonts/load_petaluma.js | 6 - build/esm/src/fonts/petaluma_glyphs.js | 1631 - build/esm/src/fonts/petaluma_metrics.js | 542 - build/esm/src/fonts/petalumascript_glyphs.js | 863 - build/esm/src/fonts/robotoslab_glyphs.js | 863 - build/esm/src/fonts/sans_bold_text_metrics.js | 862 - build/esm/src/fonts/sans_text_metrics.js | 870 - build/esm/src/fonts/serif_text_metrics.js | 870 - build/esm/src/fonts/textfonts.js | 104 - build/esm/src/formatter.js | 620 - build/esm/src/fraction.js | 171 - build/esm/src/frethandfinger.js | 156 - build/esm/src/ghostnote.js | 50 - build/esm/src/glyph.js | 340 - build/esm/src/glyphnote.js | 56 - build/esm/src/gracenote.js | 133 - build/esm/src/gracenotegroup.js | 129 - build/esm/src/gracetabnote.js | 12 - build/esm/src/index.js | 89 - build/esm/src/keymanager.js | 99 - build/esm/src/keysignature.js | 257 - build/esm/src/keysignote.js | 28 - build/esm/src/modifier.js | 128 - build/esm/src/modifiercontext.js | 110 - build/esm/src/multimeasurerest.js | 173 - build/esm/src/music.js | 322 - build/esm/src/note.js | 366 - build/esm/src/notehead.js | 171 - build/esm/src/notesubgroup.js | 59 - build/esm/src/ornament.js | 214 - build/esm/src/parenthesis.js | 76 - build/esm/src/parser.js | 164 - build/esm/src/pedalmarking.js | 192 - build/esm/src/registry.js | 81 - build/esm/src/rendercontext.js | 24 - build/esm/src/renderer.js | 112 - build/esm/src/repeatnote.js | 21 - build/esm/src/stave.js | 607 - build/esm/src/stavebarline.js | 186 - build/esm/src/staveconnector.js | 199 - build/esm/src/stavehairpin.js | 120 - build/esm/src/staveline.js | 215 - build/esm/src/stavemodifier.js | 77 - build/esm/src/stavenote.js | 887 - build/esm/src/staverepetition.js | 155 - build/esm/src/stavesection.js | 62 - build/esm/src/stavetempo.js | 94 - build/esm/src/stavetext.js | 82 - build/esm/src/stavetie.js | 146 - build/esm/src/stavevolta.js | 67 - build/esm/src/stem.js | 133 - build/esm/src/stemmablenote.js | 195 - build/esm/src/stringnumber.js | 244 - build/esm/src/strokes.js | 200 - build/esm/src/svgcontext.js | 465 - build/esm/src/system.js | 161 - build/esm/src/tables.js | 1213 - build/esm/src/tabnote.js | 302 - build/esm/src/tabslide.js | 76 - build/esm/src/tabstave.js | 17 - build/esm/src/tabtie.js | 19 - build/esm/src/textbracket.js | 144 - build/esm/src/textdynamics.js | 81 - build/esm/src/textformatter.js | 218 - build/esm/src/textnote.js | 180 - build/esm/src/tickable.js | 214 - build/esm/src/tickcontext.js | 170 - build/esm/src/timesigglyph.js | 85 - build/esm/src/timesignature.js | 121 - build/esm/src/timesignote.js | 32 - build/esm/src/tremolo.js | 47 - build/esm/src/tuning.js | 55 - build/esm/src/tuplet.js | 243 - build/esm/src/typeguard.js | 30 - build/esm/src/util.js | 61 - build/esm/src/version.js | 3 - build/esm/src/vex.js | 51 - build/esm/src/vibrato.js | 100 - build/esm/src/vibratobracket.js | 50 - build/esm/src/voice.js | 191 - build/esm/src/web.js | 15 - build/esm/tests/accidental_tests.js | 974 - build/esm/tests/annotation_tests.js | 372 - build/esm/tests/articulation_tests.js | 424 - build/esm/tests/auto_beam_formatting_tests.js | 551 - build/esm/tests/bach_tests.js | 335 - build/esm/tests/barline_tests.js | 52 - build/esm/tests/beam_tests.js | 651 - build/esm/tests/bend_tests.js | 209 - build/esm/tests/boundingbox_tests.js | 53 - .../esm/tests/boundingboxcomputation_tests.js | 183 - build/esm/tests/chordsymbol_tests.js | 387 - build/esm/tests/clef_tests.js | 131 - build/esm/tests/crossbeam_tests.js | 306 - build/esm/tests/curve_tests.js | 118 - build/esm/tests/dot_tests.js | 119 - build/esm/tests/easyscore_tests.js | 488 - build/esm/tests/factory_tests.js | 44 - build/esm/tests/font_tests.js | 135 - build/esm/tests/formatter/framestack.js | 61 - build/esm/tests/formatter/tests.js | 203 - build/esm/tests/formatter_tests.js | 721 - build/esm/tests/fraction_tests.js | 72 - build/esm/tests/ghostnote_tests.js | 77 - build/esm/tests/glyphnote_tests.js | 113 - build/esm/tests/gracenote_tests.js | 413 - build/esm/tests/gracetabnote_tests.js | 79 - build/esm/tests/index.js | 69 - build/esm/tests/key_clef_tests.js | 106 - build/esm/tests/keymanager_tests.js | 68 - build/esm/tests/keysignature_tests.js | 308 - build/esm/tests/mocks.js | 71 - build/esm/tests/modifier_tests.js | 24 - build/esm/tests/multimeasurerest_tests.js | 141 - build/esm/tests/music_tests.js | 161 - build/esm/tests/notehead_tests.js | 221 - build/esm/tests/notesubgroup_tests.js | 149 - build/esm/tests/offscreencanvas_tests.js | 47 - build/esm/tests/ornament_tests.js | 300 - build/esm/tests/parser_tests.js | 122 - build/esm/tests/pedalmarking_tests.js | 64 - build/esm/tests/percussion_tests.js | 180 - build/esm/tests/registry_tests.js | 64 - build/esm/tests/renderer_tests.js | 113 - build/esm/tests/rests_tests.js | 260 - build/esm/tests/rhythm_tests.js | 357 - build/esm/tests/stave_tests.js | 560 - build/esm/tests/staveconnector_tests.js | 402 - build/esm/tests/stavehairpin_tests.js | 90 - build/esm/tests/staveline_tests.js | 122 - build/esm/tests/stavemodifier_tests.js | 51 - build/esm/tests/stavenote_tests.js | 928 - build/esm/tests/stavetie_tests.js | 108 - build/esm/tests/stringnumber_tests.js | 264 - build/esm/tests/strokes_tests.js | 275 - build/esm/tests/style_tests.js | 96 - build/esm/tests/support/qunit.js | 2765 - build/esm/tests/tabnote_tests.js | 474 - build/esm/tests/tabslide_tests.js | 133 - build/esm/tests/tabstave_tests.js | 23 - build/esm/tests/tabtie_tests.js | 171 - build/esm/tests/textbracket_tests.js | 100 - build/esm/tests/textformatter_tests.js | 134 - build/esm/tests/textnote_tests.js | 217 - build/esm/tests/threevoice_tests.js | 132 - build/esm/tests/tickcontext_tests.js | 36 - build/esm/tests/timesignature_tests.js | 143 - build/esm/tests/tremolo_tests.js | 75 - build/esm/tests/tuning_tests.js | 56 - build/esm/tests/tuplet_tests.js | 450 - build/esm/tests/typeguard_tests.js | 82 - build/esm/tests/vexflow_test_helpers.js | 295 - build/esm/tests/vf_prefix_tests.js | 115 - build/esm/tests/vibrato_tests.js | 86 - build/esm/tests/vibratobracket_tests.js | 45 - build/esm/tests/voice_tests.js | 69 - build/types/entry/vexflow-bravura.d.ts | 2 - build/types/entry/vexflow-core.d.ts | 2 - build/types/entry/vexflow-debug.d.ts | 2 - build/types/entry/vexflow-font-bravura.d.ts | 4058 -- build/types/entry/vexflow-font-custom.d.ts | 98 - build/types/entry/vexflow-font-gonville.d.ts | 1588 - build/types/entry/vexflow-font-leland.d.ts | 1706 - build/types/entry/vexflow-font-petaluma.d.ts | 2176 - build/types/entry/vexflow-gonville.d.ts | 2 - build/types/entry/vexflow-leland.d.ts | 2 - build/types/entry/vexflow-petaluma.d.ts | 2 - build/types/entry/vexflow.d.ts | 2 - build/types/src/accidental.d.ts | 66 - build/types/src/annotation.d.ts | 61 - build/types/src/articulation.d.ts | 68 - build/types/src/barnote.d.ts | 29 - build/types/src/beam.d.ts | 153 - build/types/src/bend.d.ts | 73 - build/types/src/boundingbox.d.ts | 42 - build/types/src/boundingboxcomputation.d.ts | 33 - build/types/src/canvascontext.d.ts | 89 - build/types/src/chordsymbol.d.ts | 167 - build/types/src/clef.d.ts | 60 - build/types/src/clefnote.d.ts | 18 - build/types/src/crescendo.d.ts | 27 - build/types/src/curve.d.ts | 41 - build/types/src/dot.d.ts | 20 - build/types/src/easyscore.d.ts | 152 - build/types/src/element.d.ts | 229 - build/types/src/factory.d.ts | 279 - build/types/src/flow.d.ts | 264 - build/types/src/font.d.ts | 202 - build/types/src/fonts/bravura_glyphs.d.ts | 3535 - build/types/src/fonts/bravura_metrics.d.ts | 524 - build/types/src/fonts/custom_glyphs.d.ts | 90 - build/types/src/fonts/custom_metrics.d.ts | 5 - build/types/src/fonts/gonville_glyphs.d.ts | 1103 - build/types/src/fonts/gonville_metrics.d.ts | 486 - build/types/src/fonts/leland_glyphs.d.ts | 1183 - build/types/src/fonts/leland_metrics.d.ts | 520 - build/types/src/fonts/load_all.d.ts | 1 - build/types/src/fonts/load_bravura.d.ts | 1 - build/types/src/fonts/load_custom.d.ts | 1 - build/types/src/fonts/load_gonville.d.ts | 1 - build/types/src/fonts/load_leland.d.ts | 1 - build/types/src/fonts/load_petaluma.d.ts | 1 - build/types/src/fonts/petaluma_glyphs.d.ts | 1631 - build/types/src/fonts/petaluma_metrics.d.ts | 546 - .../src/fonts/petalumascript_glyphs.d.ts | 863 - build/types/src/fonts/robotoslab_glyphs.d.ts | 863 - .../src/fonts/sans_bold_text_metrics.d.ts | 862 - build/types/src/fonts/sans_text_metrics.d.ts | 870 - build/types/src/fonts/serif_text_metrics.d.ts | 870 - build/types/src/fonts/textfonts.d.ts | 1 - build/types/src/formatter.d.ts | 215 - build/types/src/fraction.d.ts | 62 - build/types/src/frethandfinger.d.ts | 22 - build/types/src/ghostnote.d.ts | 16 - build/types/src/glyph.d.ts | 140 - build/types/src/glyphnote.d.ts | 20 - build/types/src/gracenote.d.ts | 19 - build/types/src/gracenotegroup.d.ts | 33 - build/types/src/gracetabnote.d.ts | 5 - build/types/src/index.d.ts | 89 - build/types/src/keymanager.d.ts | 25 - build/types/src/keysignature.d.ts | 54 - build/types/src/keysignote.d.ts | 11 - build/types/src/modifier.d.ts | 97 - build/types/src/modifiercontext.d.ts | 48 - build/types/src/multimeasurerest.d.ts | 61 - build/types/src/music.d.ts | 91 - build/types/src/note.d.ts | 236 - build/types/src/notehead.d.ts | 71 - build/types/src/notesubgroup.d.ts | 18 - build/types/src/ornament.d.ts | 83 - build/types/src/parenthesis.d.ts | 22 - build/types/src/parser.d.ts | 45 - build/types/src/pedalmarking.d.ts | 69 - build/types/src/registry.d.ts | 40 - build/types/src/rendercontext.d.ts | 64 - build/types/src/renderer.d.ts | 35 - build/types/src/repeatnote.d.ts | 6 - build/types/src/stave.d.ts | 194 - build/types/src/stavebarline.d.ts | 28 - build/types/src/staveconnector.d.ts | 65 - build/types/src/stavehairpin.d.ts | 56 - build/types/src/staveline.d.ts | 54 - build/types/src/stavemodifier.d.ts | 53 - build/types/src/stavenote.d.ts | 154 - build/types/src/staverepetition.d.ts | 32 - build/types/src/stavesection.d.ts | 16 - build/types/src/stavetempo.d.ts | 25 - build/types/src/stavetext.d.ts | 25 - build/types/src/stavetie.d.ts | 63 - build/types/src/stavevolta.d.ts | 21 - build/types/src/stem.d.ts | 58 - build/types/src/stemmablenote.d.ts | 39 - build/types/src/stringnumber.d.ts | 35 - build/types/src/strokes.d.ts | 33 - build/types/src/svgcontext.d.ts | 142 - build/types/src/system.d.ts | 118 - build/types/src/tables.d.ts | 96 - build/types/src/tabnote.d.ts | 44 - build/types/src/tabslide.d.ts | 34 - build/types/src/tabstave.d.ts | 7 - build/types/src/tabtie.d.ts | 18 - build/types/src/textbracket.d.ts | 55 - build/types/src/textdynamics.d.ts | 39 - build/types/src/textformatter.d.ts | 123 - build/types/src/textnote.d.ts | 55 - build/types/src/tickable.d.ts | 140 - build/types/src/tickcontext.d.ts | 82 - build/types/src/timesigglyph.d.ts | 14 - build/types/src/timesignature.d.ts | 91 - build/types/src/timesignote.d.ts | 11 - build/types/src/tremolo.d.ts | 17 - build/types/src/tuning.d.ts | 23 - build/types/src/tuplet.d.ts | 111 - build/types/src/typeguard.d.ts | 99 - build/types/src/util.d.ts | 31 - build/types/src/version.d.ts | 3 - build/types/src/vex.d.ts | 18 - build/types/src/vibrato.d.ts | 29 - build/types/src/vibratobracket.d.ts | 33 - build/types/src/voice.d.ts | 109 - build/types/src/web.d.ts | 2 - 355 files changed, 174686 deletions(-) delete mode 100644 build/cjs/vexflow-bravura.js delete mode 100644 build/cjs/vexflow-bravura.js.map delete mode 100644 build/cjs/vexflow-core.js delete mode 100644 build/cjs/vexflow-core.js.map delete mode 100644 build/cjs/vexflow-debug-with-tests.js delete mode 100644 build/cjs/vexflow-debug-with-tests.js.map delete mode 100644 build/cjs/vexflow-debug.js delete mode 100644 build/cjs/vexflow-debug.js.map delete mode 100644 build/cjs/vexflow-font-bravura.js delete mode 100644 build/cjs/vexflow-font-bravura.js.map delete mode 100644 build/cjs/vexflow-font-custom.js delete mode 100644 build/cjs/vexflow-font-custom.js.map delete mode 100644 build/cjs/vexflow-font-gonville.js delete mode 100644 build/cjs/vexflow-font-gonville.js.map delete mode 100644 build/cjs/vexflow-font-leland.js delete mode 100644 build/cjs/vexflow-font-leland.js.map delete mode 100644 build/cjs/vexflow-font-petaluma.js delete mode 100644 build/cjs/vexflow-font-petaluma.js.map delete mode 100644 build/cjs/vexflow-gonville.js delete mode 100644 build/cjs/vexflow-gonville.js.map delete mode 100644 build/cjs/vexflow-leland.js delete mode 100644 build/cjs/vexflow-leland.js.map delete mode 100644 build/cjs/vexflow-petaluma.js delete mode 100644 build/cjs/vexflow-petaluma.js.map delete mode 100644 build/cjs/vexflow.js delete mode 100644 build/cjs/vexflow.js.map delete mode 100644 build/esm/entry/vexflow-bravura.js delete mode 100644 build/esm/entry/vexflow-core.js delete mode 100644 build/esm/entry/vexflow-debug-with-tests.js delete mode 100644 build/esm/entry/vexflow-debug.js delete mode 100644 build/esm/entry/vexflow-font-bravura.js delete mode 100644 build/esm/entry/vexflow-font-custom.js delete mode 100644 build/esm/entry/vexflow-font-gonville.js delete mode 100644 build/esm/entry/vexflow-font-leland.js delete mode 100644 build/esm/entry/vexflow-font-petaluma.js delete mode 100644 build/esm/entry/vexflow-gonville.js delete mode 100644 build/esm/entry/vexflow-leland.js delete mode 100644 build/esm/entry/vexflow-petaluma.js delete mode 100644 build/esm/entry/vexflow.js delete mode 100644 build/esm/package.json delete mode 100644 build/esm/src/accidental.js delete mode 100644 build/esm/src/annotation.js delete mode 100644 build/esm/src/articulation.js delete mode 100644 build/esm/src/barnote.js delete mode 100644 build/esm/src/beam.js delete mode 100644 build/esm/src/bend.js delete mode 100644 build/esm/src/boundingbox.js delete mode 100644 build/esm/src/boundingboxcomputation.js delete mode 100644 build/esm/src/canvascontext.js delete mode 100644 build/esm/src/chordsymbol.js delete mode 100644 build/esm/src/clef.js delete mode 100644 build/esm/src/clefnote.js delete mode 100644 build/esm/src/crescendo.js delete mode 100644 build/esm/src/curve.js delete mode 100644 build/esm/src/dot.js delete mode 100644 build/esm/src/easyscore.js delete mode 100644 build/esm/src/element.js delete mode 100644 build/esm/src/factory.js delete mode 100644 build/esm/src/flow.js delete mode 100644 build/esm/src/font.js delete mode 100644 build/esm/src/fonts/bravura_glyphs.js delete mode 100644 build/esm/src/fonts/bravura_metrics.js delete mode 100644 build/esm/src/fonts/custom_glyphs.js delete mode 100644 build/esm/src/fonts/custom_metrics.js delete mode 100644 build/esm/src/fonts/gonville_glyphs.js delete mode 100644 build/esm/src/fonts/gonville_metrics.js delete mode 100644 build/esm/src/fonts/leland_glyphs.js delete mode 100644 build/esm/src/fonts/leland_metrics.js delete mode 100644 build/esm/src/fonts/load_all.js delete mode 100644 build/esm/src/fonts/load_bravura.js delete mode 100644 build/esm/src/fonts/load_custom.js delete mode 100644 build/esm/src/fonts/load_gonville.js delete mode 100644 build/esm/src/fonts/load_leland.js delete mode 100644 build/esm/src/fonts/load_petaluma.js delete mode 100644 build/esm/src/fonts/petaluma_glyphs.js delete mode 100644 build/esm/src/fonts/petaluma_metrics.js delete mode 100644 build/esm/src/fonts/petalumascript_glyphs.js delete mode 100644 build/esm/src/fonts/robotoslab_glyphs.js delete mode 100644 build/esm/src/fonts/sans_bold_text_metrics.js delete mode 100644 build/esm/src/fonts/sans_text_metrics.js delete mode 100644 build/esm/src/fonts/serif_text_metrics.js delete mode 100644 build/esm/src/fonts/textfonts.js delete mode 100644 build/esm/src/formatter.js delete mode 100644 build/esm/src/fraction.js delete mode 100644 build/esm/src/frethandfinger.js delete mode 100644 build/esm/src/ghostnote.js delete mode 100644 build/esm/src/glyph.js delete mode 100644 build/esm/src/glyphnote.js delete mode 100644 build/esm/src/gracenote.js delete mode 100644 build/esm/src/gracenotegroup.js delete mode 100644 build/esm/src/gracetabnote.js delete mode 100644 build/esm/src/index.js delete mode 100644 build/esm/src/keymanager.js delete mode 100644 build/esm/src/keysignature.js delete mode 100644 build/esm/src/keysignote.js delete mode 100644 build/esm/src/modifier.js delete mode 100644 build/esm/src/modifiercontext.js delete mode 100644 build/esm/src/multimeasurerest.js delete mode 100644 build/esm/src/music.js delete mode 100644 build/esm/src/note.js delete mode 100644 build/esm/src/notehead.js delete mode 100644 build/esm/src/notesubgroup.js delete mode 100644 build/esm/src/ornament.js delete mode 100644 build/esm/src/parenthesis.js delete mode 100644 build/esm/src/parser.js delete mode 100644 build/esm/src/pedalmarking.js delete mode 100644 build/esm/src/registry.js delete mode 100644 build/esm/src/rendercontext.js delete mode 100644 build/esm/src/renderer.js delete mode 100644 build/esm/src/repeatnote.js delete mode 100644 build/esm/src/stave.js delete mode 100644 build/esm/src/stavebarline.js delete mode 100644 build/esm/src/staveconnector.js delete mode 100644 build/esm/src/stavehairpin.js delete mode 100644 build/esm/src/staveline.js delete mode 100644 build/esm/src/stavemodifier.js delete mode 100644 build/esm/src/stavenote.js delete mode 100644 build/esm/src/staverepetition.js delete mode 100644 build/esm/src/stavesection.js delete mode 100644 build/esm/src/stavetempo.js delete mode 100644 build/esm/src/stavetext.js delete mode 100644 build/esm/src/stavetie.js delete mode 100644 build/esm/src/stavevolta.js delete mode 100644 build/esm/src/stem.js delete mode 100644 build/esm/src/stemmablenote.js delete mode 100644 build/esm/src/stringnumber.js delete mode 100644 build/esm/src/strokes.js delete mode 100644 build/esm/src/svgcontext.js delete mode 100644 build/esm/src/system.js delete mode 100644 build/esm/src/tables.js delete mode 100644 build/esm/src/tabnote.js delete mode 100644 build/esm/src/tabslide.js delete mode 100644 build/esm/src/tabstave.js delete mode 100644 build/esm/src/tabtie.js delete mode 100644 build/esm/src/textbracket.js delete mode 100644 build/esm/src/textdynamics.js delete mode 100644 build/esm/src/textformatter.js delete mode 100644 build/esm/src/textnote.js delete mode 100644 build/esm/src/tickable.js delete mode 100644 build/esm/src/tickcontext.js delete mode 100644 build/esm/src/timesigglyph.js delete mode 100644 build/esm/src/timesignature.js delete mode 100644 build/esm/src/timesignote.js delete mode 100644 build/esm/src/tremolo.js delete mode 100644 build/esm/src/tuning.js delete mode 100644 build/esm/src/tuplet.js delete mode 100644 build/esm/src/typeguard.js delete mode 100644 build/esm/src/util.js delete mode 100644 build/esm/src/version.js delete mode 100644 build/esm/src/vex.js delete mode 100644 build/esm/src/vibrato.js delete mode 100644 build/esm/src/vibratobracket.js delete mode 100644 build/esm/src/voice.js delete mode 100644 build/esm/src/web.js delete mode 100644 build/esm/tests/accidental_tests.js delete mode 100644 build/esm/tests/annotation_tests.js delete mode 100644 build/esm/tests/articulation_tests.js delete mode 100644 build/esm/tests/auto_beam_formatting_tests.js delete mode 100644 build/esm/tests/bach_tests.js delete mode 100644 build/esm/tests/barline_tests.js delete mode 100644 build/esm/tests/beam_tests.js delete mode 100644 build/esm/tests/bend_tests.js delete mode 100644 build/esm/tests/boundingbox_tests.js delete mode 100644 build/esm/tests/boundingboxcomputation_tests.js delete mode 100644 build/esm/tests/chordsymbol_tests.js delete mode 100644 build/esm/tests/clef_tests.js delete mode 100644 build/esm/tests/crossbeam_tests.js delete mode 100644 build/esm/tests/curve_tests.js delete mode 100644 build/esm/tests/dot_tests.js delete mode 100644 build/esm/tests/easyscore_tests.js delete mode 100644 build/esm/tests/factory_tests.js delete mode 100644 build/esm/tests/font_tests.js delete mode 100644 build/esm/tests/formatter/framestack.js delete mode 100644 build/esm/tests/formatter/tests.js delete mode 100644 build/esm/tests/formatter_tests.js delete mode 100644 build/esm/tests/fraction_tests.js delete mode 100644 build/esm/tests/ghostnote_tests.js delete mode 100644 build/esm/tests/glyphnote_tests.js delete mode 100644 build/esm/tests/gracenote_tests.js delete mode 100644 build/esm/tests/gracetabnote_tests.js delete mode 100644 build/esm/tests/index.js delete mode 100644 build/esm/tests/key_clef_tests.js delete mode 100644 build/esm/tests/keymanager_tests.js delete mode 100644 build/esm/tests/keysignature_tests.js delete mode 100644 build/esm/tests/mocks.js delete mode 100644 build/esm/tests/modifier_tests.js delete mode 100644 build/esm/tests/multimeasurerest_tests.js delete mode 100644 build/esm/tests/music_tests.js delete mode 100644 build/esm/tests/notehead_tests.js delete mode 100644 build/esm/tests/notesubgroup_tests.js delete mode 100644 build/esm/tests/offscreencanvas_tests.js delete mode 100644 build/esm/tests/ornament_tests.js delete mode 100644 build/esm/tests/parser_tests.js delete mode 100644 build/esm/tests/pedalmarking_tests.js delete mode 100644 build/esm/tests/percussion_tests.js delete mode 100644 build/esm/tests/registry_tests.js delete mode 100644 build/esm/tests/renderer_tests.js delete mode 100644 build/esm/tests/rests_tests.js delete mode 100644 build/esm/tests/rhythm_tests.js delete mode 100644 build/esm/tests/stave_tests.js delete mode 100644 build/esm/tests/staveconnector_tests.js delete mode 100644 build/esm/tests/stavehairpin_tests.js delete mode 100644 build/esm/tests/staveline_tests.js delete mode 100644 build/esm/tests/stavemodifier_tests.js delete mode 100644 build/esm/tests/stavenote_tests.js delete mode 100644 build/esm/tests/stavetie_tests.js delete mode 100644 build/esm/tests/stringnumber_tests.js delete mode 100644 build/esm/tests/strokes_tests.js delete mode 100644 build/esm/tests/style_tests.js delete mode 100644 build/esm/tests/support/qunit.js delete mode 100644 build/esm/tests/tabnote_tests.js delete mode 100644 build/esm/tests/tabslide_tests.js delete mode 100644 build/esm/tests/tabstave_tests.js delete mode 100644 build/esm/tests/tabtie_tests.js delete mode 100644 build/esm/tests/textbracket_tests.js delete mode 100644 build/esm/tests/textformatter_tests.js delete mode 100644 build/esm/tests/textnote_tests.js delete mode 100644 build/esm/tests/threevoice_tests.js delete mode 100644 build/esm/tests/tickcontext_tests.js delete mode 100644 build/esm/tests/timesignature_tests.js delete mode 100644 build/esm/tests/tremolo_tests.js delete mode 100644 build/esm/tests/tuning_tests.js delete mode 100644 build/esm/tests/tuplet_tests.js delete mode 100644 build/esm/tests/typeguard_tests.js delete mode 100644 build/esm/tests/vexflow_test_helpers.js delete mode 100644 build/esm/tests/vf_prefix_tests.js delete mode 100644 build/esm/tests/vibrato_tests.js delete mode 100644 build/esm/tests/vibratobracket_tests.js delete mode 100644 build/esm/tests/voice_tests.js delete mode 100644 build/types/entry/vexflow-bravura.d.ts delete mode 100644 build/types/entry/vexflow-core.d.ts delete mode 100644 build/types/entry/vexflow-debug.d.ts delete mode 100644 build/types/entry/vexflow-font-bravura.d.ts delete mode 100644 build/types/entry/vexflow-font-custom.d.ts delete mode 100644 build/types/entry/vexflow-font-gonville.d.ts delete mode 100644 build/types/entry/vexflow-font-leland.d.ts delete mode 100644 build/types/entry/vexflow-font-petaluma.d.ts delete mode 100644 build/types/entry/vexflow-gonville.d.ts delete mode 100644 build/types/entry/vexflow-leland.d.ts delete mode 100644 build/types/entry/vexflow-petaluma.d.ts delete mode 100644 build/types/entry/vexflow.d.ts delete mode 100644 build/types/src/accidental.d.ts delete mode 100644 build/types/src/annotation.d.ts delete mode 100644 build/types/src/articulation.d.ts delete mode 100644 build/types/src/barnote.d.ts delete mode 100644 build/types/src/beam.d.ts delete mode 100644 build/types/src/bend.d.ts delete mode 100644 build/types/src/boundingbox.d.ts delete mode 100644 build/types/src/boundingboxcomputation.d.ts delete mode 100644 build/types/src/canvascontext.d.ts delete mode 100644 build/types/src/chordsymbol.d.ts delete mode 100644 build/types/src/clef.d.ts delete mode 100644 build/types/src/clefnote.d.ts delete mode 100644 build/types/src/crescendo.d.ts delete mode 100644 build/types/src/curve.d.ts delete mode 100644 build/types/src/dot.d.ts delete mode 100644 build/types/src/easyscore.d.ts delete mode 100644 build/types/src/element.d.ts delete mode 100644 build/types/src/factory.d.ts delete mode 100644 build/types/src/flow.d.ts delete mode 100644 build/types/src/font.d.ts delete mode 100644 build/types/src/fonts/bravura_glyphs.d.ts delete mode 100644 build/types/src/fonts/bravura_metrics.d.ts delete mode 100644 build/types/src/fonts/custom_glyphs.d.ts delete mode 100644 build/types/src/fonts/custom_metrics.d.ts delete mode 100644 build/types/src/fonts/gonville_glyphs.d.ts delete mode 100644 build/types/src/fonts/gonville_metrics.d.ts delete mode 100644 build/types/src/fonts/leland_glyphs.d.ts delete mode 100644 build/types/src/fonts/leland_metrics.d.ts delete mode 100644 build/types/src/fonts/load_all.d.ts delete mode 100644 build/types/src/fonts/load_bravura.d.ts delete mode 100644 build/types/src/fonts/load_custom.d.ts delete mode 100644 build/types/src/fonts/load_gonville.d.ts delete mode 100644 build/types/src/fonts/load_leland.d.ts delete mode 100644 build/types/src/fonts/load_petaluma.d.ts delete mode 100644 build/types/src/fonts/petaluma_glyphs.d.ts delete mode 100644 build/types/src/fonts/petaluma_metrics.d.ts delete mode 100644 build/types/src/fonts/petalumascript_glyphs.d.ts delete mode 100644 build/types/src/fonts/robotoslab_glyphs.d.ts delete mode 100644 build/types/src/fonts/sans_bold_text_metrics.d.ts delete mode 100644 build/types/src/fonts/sans_text_metrics.d.ts delete mode 100644 build/types/src/fonts/serif_text_metrics.d.ts delete mode 100644 build/types/src/fonts/textfonts.d.ts delete mode 100644 build/types/src/formatter.d.ts delete mode 100644 build/types/src/fraction.d.ts delete mode 100644 build/types/src/frethandfinger.d.ts delete mode 100644 build/types/src/ghostnote.d.ts delete mode 100644 build/types/src/glyph.d.ts delete mode 100644 build/types/src/glyphnote.d.ts delete mode 100644 build/types/src/gracenote.d.ts delete mode 100644 build/types/src/gracenotegroup.d.ts delete mode 100644 build/types/src/gracetabnote.d.ts delete mode 100644 build/types/src/index.d.ts delete mode 100644 build/types/src/keymanager.d.ts delete mode 100644 build/types/src/keysignature.d.ts delete mode 100644 build/types/src/keysignote.d.ts delete mode 100644 build/types/src/modifier.d.ts delete mode 100644 build/types/src/modifiercontext.d.ts delete mode 100644 build/types/src/multimeasurerest.d.ts delete mode 100644 build/types/src/music.d.ts delete mode 100644 build/types/src/note.d.ts delete mode 100644 build/types/src/notehead.d.ts delete mode 100644 build/types/src/notesubgroup.d.ts delete mode 100644 build/types/src/ornament.d.ts delete mode 100644 build/types/src/parenthesis.d.ts delete mode 100644 build/types/src/parser.d.ts delete mode 100644 build/types/src/pedalmarking.d.ts delete mode 100644 build/types/src/registry.d.ts delete mode 100644 build/types/src/rendercontext.d.ts delete mode 100644 build/types/src/renderer.d.ts delete mode 100644 build/types/src/repeatnote.d.ts delete mode 100644 build/types/src/stave.d.ts delete mode 100644 build/types/src/stavebarline.d.ts delete mode 100644 build/types/src/staveconnector.d.ts delete mode 100644 build/types/src/stavehairpin.d.ts delete mode 100644 build/types/src/staveline.d.ts delete mode 100644 build/types/src/stavemodifier.d.ts delete mode 100644 build/types/src/stavenote.d.ts delete mode 100644 build/types/src/staverepetition.d.ts delete mode 100644 build/types/src/stavesection.d.ts delete mode 100644 build/types/src/stavetempo.d.ts delete mode 100644 build/types/src/stavetext.d.ts delete mode 100644 build/types/src/stavetie.d.ts delete mode 100644 build/types/src/stavevolta.d.ts delete mode 100644 build/types/src/stem.d.ts delete mode 100644 build/types/src/stemmablenote.d.ts delete mode 100644 build/types/src/stringnumber.d.ts delete mode 100644 build/types/src/strokes.d.ts delete mode 100644 build/types/src/svgcontext.d.ts delete mode 100644 build/types/src/system.d.ts delete mode 100644 build/types/src/tables.d.ts delete mode 100644 build/types/src/tabnote.d.ts delete mode 100644 build/types/src/tabslide.d.ts delete mode 100644 build/types/src/tabstave.d.ts delete mode 100644 build/types/src/tabtie.d.ts delete mode 100644 build/types/src/textbracket.d.ts delete mode 100644 build/types/src/textdynamics.d.ts delete mode 100644 build/types/src/textformatter.d.ts delete mode 100644 build/types/src/textnote.d.ts delete mode 100644 build/types/src/tickable.d.ts delete mode 100644 build/types/src/tickcontext.d.ts delete mode 100644 build/types/src/timesigglyph.d.ts delete mode 100644 build/types/src/timesignature.d.ts delete mode 100644 build/types/src/timesignote.d.ts delete mode 100644 build/types/src/tremolo.d.ts delete mode 100644 build/types/src/tuning.d.ts delete mode 100644 build/types/src/tuplet.d.ts delete mode 100644 build/types/src/typeguard.d.ts delete mode 100644 build/types/src/util.d.ts delete mode 100644 build/types/src/version.d.ts delete mode 100644 build/types/src/vex.d.ts delete mode 100644 build/types/src/vibrato.d.ts delete mode 100644 build/types/src/vibratobracket.d.ts delete mode 100644 build/types/src/voice.d.ts delete mode 100644 build/types/src/web.d.ts diff --git a/build/cjs/vexflow-bravura.js b/build/cjs/vexflow-bravura.js deleted file mode 100644 index 76fa9c4409..0000000000 --- a/build/cjs/vexflow-bravura.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var a in i)t.o(i,a)&&!t.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:i[a]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function a(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let a=t.constructor;if(i){for(;null!==t;){if(a=t.constructor,"CATEGORY"in a&&a.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in a&&a.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>at,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>yt,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Me,BEAM_RIGHT:()=>Re,BarNote:()=>At,Barline:()=>Ft,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Nt,BoundingBox:()=>C,BoundingBoxComputation:()=>E,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>x,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Dt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>_e,ClefNote:()=>Le,Crescendo:()=>ze,Curve:()=>Ue,CurvePosition:()=>Ie,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>Ti,Flow:()=>Fi,Font:()=>M,FontStyle:()=>k,FontWeight:()=>P,Formatter:()=>ke,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>ai,KeySignature:()=>xe,Modifier:()=>tt,ModifierContext:()=>be,ModifierPosition:()=>J,MultiMeasureRest:()=>si,Music:()=>et,Note:()=>Tt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>ft,Renderer:()=>re,RendererBackends:()=>ne,RendererLineEndType:()=>se,RepeatNote:()=>hi,Repetition:()=>ge,RuntimeError:()=>g,SVGContext:()=>ae,Stave:()=>De,StaveConnector:()=>Ee,StaveHairpin:()=>Di,StaveLine:()=>di,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>pe,StaveTempo:()=>ue,StaveText:()=>fe,StaveTie:()=>Gt,Stem:()=>nt,StemmableNote:()=>zt,StringNumber:()=>he,Stroke:()=>ce,SymbolModifiers:()=>Pt,SymbolTypes:()=>Et,System:()=>mi,TabNote:()=>bi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>Yt,TextBracket:()=>pi,TextBracketPosition:()=>gi,TextDynamics:()=>yi,TextFormatter:()=>ht,TextJustification:()=>oe,TextNote:()=>ye,TickContext:()=>Kt,Tickable:()=>vt,TimeSigNote:()=>fi,TimeSignature:()=>Te,TimeSignatureGlyph:()=>ve,Tremolo:()=>Ei,Tuning:()=>Pi,Tuplet:()=>Ae,TupletLocation:()=>Fe,Vex:()=>Ui,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>le,defined:()=>u,drawDot:()=>St,globalObject:()=>p,isAccidental:()=>n,isAnnotation:()=>s,isBarline:()=>o,isCategory:()=>a,isDot:()=>l,isGraceNote:()=>r,isGraceNoteGroup:()=>h,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>b,isTabNote:()=>_,log:()=>y,midLine:()=>S,normalizeAngle:()=>T,prefix:()=>v,sumArray:()=>w,warn:()=>f});const n=t=>a(t,x.Accidental),s=t=>a(t,x.Annotation),o=t=>a(t,x.Barline),l=t=>a(t,x.Dot),r=t=>a(t,x.GraceNote),h=t=>a(t,x.GraceNoteGroup),c=t=>a(t,x.Note),d=t=>a(t,x.RenderContext),m=t=>a(t,x.StaveNote),b=t=>a(t,x.StemmableNote),_=t=>a(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function p(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function u(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function y(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");p().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;p().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var a,n;return i%2>0&&(i=((a=10*i)%(n=5)>=n/2?parseInt(""+a/n,10)*n+n:parseInt(""+a/n,10)*n)/10),i}function v(t){return`vf-${t}`}function T(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,a]=D(t,e),n=B.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s+i*o;return this.set(l,n)}subtract(t=0,e=1){const[i,a]=D(t,e),n=B.LCM(this.denominator,a),s=n/this.denominator,o=n/a,l=this.numerator*s-i*o;return this.set(l,n)}multiply(t=1,e=1){const[i,a]=D(t,e);return this.set(this.numerator*i,this.denominator*a)}divide(t=1,e=1){const[i,a]=D(t,e);return this.set(this.numerator*a,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),a=e[1]?parseInt(e[1],10):1;return this.set(i,a)}}function D(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,a){this.x=t,this.y=e,this.w=i,this.h=a}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,a,n,s){this.addPoint(t,e),this.addPoint(n,s);const o=i-t;let l=o-(n-i);if(0!=l){const e=o/l;if(e>0&&e<1){const a=1-e;this.addX(a*a*t+2*a*e*i+e*e*n)}}const r=a-e;if(l=r-(s-a),0!=l){const t=r/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*a+t*t*s)}}}addBezierCurve(t,e,i,a,n,s,o,l){const r=[t,e],h=[i,a],c=[n,s],d=[o,l];let m;this.addPoint(r[0],r[1]),this.addPoint(d[0],d[1]);const b=(t,e)=>Math.pow(1-t,3)*r[e]+3*Math.pow(1-t,2)*t*h[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*r[m]-12*h[m]+6*c[m],e=-3*r[m]+9*h[m]-9*c[m]+3*d[m],i=3*h[m]-3*r[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return F(this,void 0,void 0,(function*(){const a=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield a.load(),document.fonts.add(a),a}))}static loadWebFonts(){return F(this,void 0,void 0,(function*(){const t=M.WEB_FONT_HOST,e=M.WEB_FONT_FILES;for(const i in e){const a=e[i];M.loadWebFont(i,t+a)}}))}static load(t,e,i){let a=N[t];return a||(a=new M(t),N[t]=a),e&&a.setData(e),i&&a.setMetrics(i),a}constructor(t){this.name=t}getName(){return this.name}getData(){return u(this.data,"FontError","Missing font data")}getMetrics(){return u(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let a=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return x.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const a=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return a&&(a.splice(a.indexOf(t)),this.attrs.class=a.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=v(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const a=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:a,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return u(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return M.toCSSString(this.textFont)}setFont(t,e,i,a){const n=this.constructor.TEXT_FONT,s="object"==typeof t,o="string"==typeof t,l=void 0===t,r=void 0===e&&void 0===i&&void 0===a;return this.textFont=s?Object.assign(Object.assign({},n),t):o&&r?M.fromCSSString(t):l&&r?Object.assign({},n):M.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=a?a:n.style),this}getFont(){return this.textFont||this.resetFont(),M.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return M.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return M.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.NORMAL,style:k.NORMAL};const L=16384,z={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},I={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},G={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in G))throw new g("BadArgument","Invalid clef: "+t);return G[t]}static keyProperties(t,e="treble",i){let a={octave_shift:0,duration:"4"};"object"==typeof i&&(a=Object.assign(Object.assign({},a),i));const n=V.sanitizeDuration(a.duration),s=t.split("/");if(s.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=s[0].toUpperCase(),l=Y[o];if(!l)throw new g("BadArguments","Invalid key name: "+o);l.octave&&(s[1]=l.octave.toString());let r=parseInt(s[1],10);r+=-1*a.octave_shift;let h=(7*r-28+l.index)/2;h+=V.clefProperties(e).line_shift;let c=0;h<=0&&2*h%2==0&&(c=1),h>=6&&2*h%2==0&&(c=-1);const d=void 0!==l.int_val?12*r+l.int_val:void 0,m=l.code,b=l.shift_right;let _={};if(s.length>2&&s[2]){const t=s[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:r,line:h,int_value:d,accidental:l.accidental,code:m,stroke:c,shift_right:b,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,a=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");a=t.width,n=-t.height/2}else a=V.textWidth(t);return{text:t,code:i,getWidth:()=>a*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],a=[];for(let t=0;tZ.getWidth(s,t)}),a)}}V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,a){this.outline=t,this.originX=e,this.originY=i,this.scale=a,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let a=0;for(;a{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(s)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let a=i[3];return a||(a="M"),{root:t,accidental:e,type:a}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let a=(t+i*e)%et.NUM_TONES;return a<0&&(a+=et.NUM_TONES),a}getRelativeNoteName(t,e){const i=this.getNoteParts(t),a=this.getNoteValue(i.root);let n=e-a;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const s=(e+1+(a+1))%et.NUM_TONES*i;if(Math.abs(s)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);n=s}if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let s=i.root;if(n>0)for(let t=1;t<=n;++t)s+="#";else if(n<0)for(let t=-1;t>=n;--t)s+="b";return s}getScaleTones(t,e){const i=[t];let a=t;for(let n=0;ne.line-t.line));const c=[];let d,m=0;for(let t=0;tm?e.shift:m,d=e.line}let b=0;for(let t=0;tc[i+t],s=t=>t.map(n),o=(t,e)=>{const[i,a]=s([t,e]).map((t=>t.line));return i-a},l=(...t)=>t.map(s).every((([t,e])=>!this.checkCollision(t,e))),r=a-i+1;let h,d,m=this.checkCollision(c[i],c[a])?"a":"b";switch(r){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:l([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&l([1,3])&&(m="spaced_out_pentachord",l([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(r>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?b:d}else for(h=t;h<=a;h++)d=V.accidentalColumnsTable[r][m][h-t],c[h].column=d,b=b>d?b:d;t=a}const _=[],x=[];for(let t=0;t<=b;t++)_[t]=0,x[t]=0;_[0]=m+n,x[0]=m+n,c.forEach((t=>{t.width>_[t.column]&&(_[t.column]=t.width)}));for(let t=1;t<_.length;t++)x[t]=_[t]+x[t-1];const g=x[x.length-1];let p=0;c.forEach((t=>{let e=0;const i=p+t.numAcc;for(;p0?(a=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(a=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=a[e.value()];n?n.push(t):(i.push(e.value()),a[e.value()]=[t]),e.add(t.getTicks())}))}));const s=new et;e||(e="C");const o=s.createScaleMap(e),l={};i.forEach((t=>{const e=a[t],i=[],r=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,a)=>{const r=s.getNoteParts(t.split("/")[0]),h=t.split("/")[1],c=r.accidental||"n",d=r.root+c;l[r.root+h]||(l[r.root+h]=o[r.root]);const m=l[r.root+h]===d,b=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==a&&e.getModifiers().splice(i,1)})),!m||m&&b){l[r.root+h]=d;const n=new at(c);e.addModifier(n,a),i.push(t)}})),e.getModifiers().forEach((t=>{h(t)&&t.getGraceNotes().forEach(r)}))};e.forEach(r)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),u(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=u(this.parenLeft),e=u(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return u(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,r(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:a,x_shift:n,y_shift:s,glyph:o,render_options:{parenLeftPadding:l,parenRightPadding:r}}=this,h=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const b=d.y+s;if(it("Rendering: ",t,m,b),a){const t=u(this.parenLeft),e=u(this.parenRight);e.render(h,m,b),m-=e.getMetrics().width,m-=r,m-=this.accidental.parenRightPaddingAdjustment,o.render(h,m,b),m-=o.getMetrics().width,m-=l,t.render(h,m,b)}else o.render(h,m,b)}}at.DEBUG=!1;class nt extends W{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,a=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:a+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const a=this.stem_direction;let n=0;a===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const s=this.getHeight();!function(...t){nt.DEBUG&&y("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?s-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-s-this.renderHeightAdjustment*a),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function st(...t){ht.DEBUG&&y("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},lt={},rt={};class ht{static getFontFamilies(){const t=[];for(const e in rt){const i=rt[e];t.push(Object.assign({},i))}return t}static create(t={}){st("create: ",t),t.family||(t.family=M.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in rt)i.startsWith(t)&&e.push(rt[i]);if(e.length>0)break}let a;if(0===e.length)a=new ht(Object.values(rt)[0]);else if(1===e.length)a=new ht(e[0]);else{const i=M.isBold(t.weight),n=M.isItalic(t.style),s=e.find((t=>t.bold===i&&t.italic===n));if(s)a=new ht(s);else{const t=e.find((t=>t.italic===n||t.bold===i));a=new ht(t||e[0])}}const n=t.size;if(void 0!==n){const t=M.convertSizeToPointValue(n);a.setFontSize(t)}return a}static getInfo(t){return rt[t]}static registerInfo(t,e=!1){st("registerInfo: ",t,e);const i=t.family;(void 0===rt[i]||e)&&(rt[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,a=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${a}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},a=e[t];if(void 0!==a)return a;for(let e=0;et>e?t:e)),r+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(r=Math.max(r,h.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;r=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){r=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=h.topY=1}function pt(t,e){return gt(t,e)?e===bt?Math.ceil:Math.floor:Math.round}const ut=t=>m(t)||r(t);class yt extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const a=(t,e,i)=>xt(pt(e,i),u(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let s=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let l=0;if(b(n)){const t=n.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const r=n.getStave();if(r&&(s=r.getNumLines()),t.getPosition()===bt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=l);let r=a(t,e.top_text_line,bt);const h=i+e.top_text_line+.5;!t.articulation.between_lines&&ht.getWidth())).reduce(((t,e)=>Math.max(e,t))),s=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=s/2,e.right_shift+=s/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const a={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:a[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=bt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=bt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===bt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),u(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(u(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:a,glyph:n,text_line:s}=this,o=this.articulation.between_lines,l=e.checkStave(),r=l.getSpacingBetweenLines(),h=_(e),{x:c}=e.getModifierStartXY(a,i),d=!o||h,m=function(t,e){const i=e===bt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return ut(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,a),b=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let x={[bt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?a:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?a:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)-(s+m)*r;return d?Math.min(l.getYForTopText(yt.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:a,baseY:n}=t.getStemExtents();if(ut(t))return t.hasStem()?i===nt.UP?n:a:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):a:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,s)+(s+m)*r;return d?Math.max(l.getYForBottomText(yt.INITIAL_OFFSET),t):t}}[a]();if(!h){const t=a===bt?-1:1,s=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/r+Number(s),h=function(t,e,i,a){const n=xt(pt(e,i),e);if(t&>(n,i)&&n%1==0)return n+.5*-a;return n}(o,l,a,t);gt(h,a)&&n.setOrigin(.5,.5),x+=Math.abs(h-l)*r*t+b*t}!function(...t){yt.DEBUG&&y("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${x})`),n.render(t,c,x)}}yt.DEBUG=!1,yt.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,a="#F55"){t.save(),t.setFillStyle(a),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class vt extends W{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return u(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const a=this.tupletStack.indexOf(t);return-1!==a&&(this.tupletStack.splice(a,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const a=_.space.deviation,n=a>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(a),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=Tt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const a=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");a[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const s=t.dots?t.dots:e.dots;if("number"!=typeof s)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return u(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Dt,Ct,Et,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends W{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,a=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+a)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class Ft extends kt{static get CATEGORY(){return x.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Ft.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();i&&a.fillRect(e-3,n,1,s-n),a.fillRect(e,n,1,s-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,a,1,n-a),i.fillRect(e-2,a,3,n-a)}drawRepeatBar(t,e,i){const a=t.checkContext(),n=t.getTopLineTopY(),s=t.getBottomLineBottomY();let o=3;i||(o=-5),a.fillRect(e+o,n,1,s-n),a.fillRect(e-2,n,3,s-n);i?o+=4:o-=4;const l=e+o+1;let r=(t.getNumLines()-1)*t.getSpacingBetweenLines();r=r/2-t.getSpacingBetweenLines()/2;let h=n+r+1;a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill(),h+=t.getSpacingBetweenLines(),a.beginPath(),a.arc(l,h,2,0,2*Math.PI,!1),a.fill()}}class At extends Tt{static get CATEGORY(){return x.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Ft.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){At.DEBUG&&y("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new Ft(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}At.DEBUG=!1;class Nt extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let a=0;at{const s=t+a,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(s,o,t+a,n),e.stroke(),e.restore()},c=(t,i,a,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+a,n,t+a,i),e.stroke(),e.restore()},d=(t,i,a)=>{const n=i+4*a;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const a=t-e.measureText(i).width/2;e.fillText(i,a,r),e.restore()};let b,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=h.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=a)}s&&n>0&&(g=!0,e.xShift=e.xShift+(n-a),a=n,n=0,h.setEnableKerning(!1)),i||s||(n=0),e.vAlign=g,a+=e.width,_=a}if(h.updateKerningAdjustments(),h.updateOverBarAdjustments(),h.getVertical()===Ct.TOP?(h.setTextLine(e.top_text_line),e.top_text_line+=x):(h.setTextLine(e.text_line+1),e.text_line+=x+1),h.getReportWidth()&&b(m)){const t=m.getGlyphProps().getWidth();h.getHorizontal()===Dt.LEFT?(l=Math.max(t,l),s=Math.max(s,_)+Rt.minPadding):h.getHorizontal()===Dt.RIGHT?(r=Math.max(t,r),o=Math.max(o,_)):(s=Math.max(s,_/2)+Rt.minPadding,o=Math.max(o,_/2),l=Math.max(t/2,l),r=Math.max(t/2,r))}a=0}const h=Math.min(Math.max(o-r,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(s-l,0),Math.max(s-e.left_shift,0));return e.left_shift+=c,e.right_shift+=h,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Dt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Et.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let a=0;for(;a0?this.symbolBlocks[t-1]:void 0;let a=0;e.symbolType===Et.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(a+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Et.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(a+=i.glyph.metrics.x_shift);let n=!1,s=!1;void 0!==i&&i.symbolType===Et.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),s=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===Pt.SUPERSCRIPT&&(a+=o),s&&e.symbolType===Et.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(a+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(a+=o/2)),a}getSymbolBlock(t={}){var e,i,a;const n=null!==(e=t.symbolType)&&void 0!==e?e:Et.TEXT,s={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(a=t.symbolModifier)&&void 0!==a?a:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Et.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;s.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Et.TEXT?s.width=this.textFormatter.getWidthForTextInEm(s.text):n===Et.LINE&&(s.width=t.width);return s}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Et.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Et.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Et.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Et.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Et.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let a=0;a0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Et.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,a){return super.setFont(t,e,i,a),this.textFormatter=ht.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,a=0;for(a=0;a0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let a;t.setFont(this.textFont);const n=e.hasStem(),s=e.checkStave();if(this.vertical===Ct.BOTTOM){if(a=s.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;a=Math.max(a,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(a=Math.min(s.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=s.getSpacingBetweenLines();a=Math.min(a,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Dt.LEFT?i.x:this.horizontal===Dt.RIGHT?i.x+this.getWidth():this.horizontal===Dt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Mt("Rendering ChordSymbol: ",this.textFormatter,o,a),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let s=a;if(Mt("shift was ",e.xShift,e.yShift),Mt("curY pre sub ",s),i&&(s+=this.superscriptOffset),n&&(s+=this.subscriptOffset),Mt("curY sup/sub ",s),e.symbolType===Et.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:a,style:n}=this.textFont,s=M.scaleSize(i,Rt.superSubRatio);t.setFont(e,s,a,n)}Mt("Rendering Text: ",e.text,o+e.xShift,s+e.yShift),t.fillText(e.text,o+e.xShift,s+e.yShift),(i||n)&&t.restore()}else e.symbolType===Et.GLYPH&&e.glyph?(s+=e.yShift,Mt("Rendering Glyph: ",e.glyph.code,o+e.xShift,s),e.glyph.render(t,o+e.xShift,s)):e.symbolType===Et.LINE&&(Mt("Rendering Line : ",e.width,o,s),t.beginPath(),t.setLineWidth(1),t.moveTo(o,a),t.lineTo(o+e.width,s),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Dt,Rt.HorizontalJustifyString={left:Dt.LEFT,right:Dt.RIGHT,center:Dt.CENTER,centerStem:Dt.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Et,Rt.symbolModifiers=Pt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let s=i,o=0,l=null,r=null,h=null,c=0;for(let t=0;to?s:o,l=m,r=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,r(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),a=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(a.y=e.getStemExtents().baseY);const n=a.x+this.x_shift+this.width-this.radius,s=a.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,s,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:a}=e;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let r=0;re.line-t.line));let r=0,h=0,c=0,d=0,m=null,b=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(h),e=l+u,d=e>d?e:d),m=x,b=s}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),a={number:e[0]};return e[1]&&(a.position=e[1]),i.getFactory().Fingering(a)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:a-=4,n-=12;break;case tt.Position.BELOW:a-=2,n+=10;break;case tt.Position.LEFT:a-=this.width;break;case tt.Position.RIGHT:a+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,a,n),t.restore()}}Wt.TEXT_FONT={family:M.SANS_SERIF,size:9,weight:P.BOLD,style:k.NORMAL};class Lt extends Tt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),a=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+a+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&y("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const a=this.stem_direction,n=this.render_options.glyph_font_scale,s=`${this.glyph_code}Stem${a===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,a,n,s){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,a+s),t.lineTo(i,a+1),t.lineTo(i+o,a-s),t.lineTo(i+o,a),t.lineTo(i,a+s),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;n2&&i++,2===V.durationToNumber(s.note.duration)?e++:V.durationToNumber(s.note.duration)>2&&i++,2!==e&&2!==i||a.note.getModifiersByType(x.Dot).length!==s.note.getModifiersByType(x.Dot).length||t<1&&t>0?(h=r+2,a.stemDirection===s.stemDirection?a.note.setXShift(h):s.note.setXShift(h)):a.note.voice!==s.note.voice&&a.stemDirection===s.stemDirection&&(a.line!=s.line?(h=r+2,a.note.setXShift(h)):1===s.stemDirection&&(s.stemDirection=-1,s.note.setStemDirection(-1)))}else t<1?(h=r+2,a.stemDirection===s.stemDirection?a.note.setXShift(h):s.note.setXShift(h)):a.note.hasStem()?(a.stemDirection=-a.note.getStemDirection(),a.note.setStemDirection(a.stemDirection)):s.note.hasStem()&&(s.stemDirection=-s.note.getStemDirection(),s.note.setStemDirection(s.stemDirection))}return e.right_shift+=h,!0}if(!n)throw new g("InvalidState","noteM not defined.");if(n.isrest&&!a.isrest&&!s.isrest&&(a.minLine<=n.maxLine||n.minLine<=s.maxLine)){return n.maxLine-n.minLinet.postFormat())),!0)}constructor(t){var e,i,a;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),u(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(a=t.stem_direction)&&void 0!==a?a:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const a=t[i];a&&e.setStyle(a)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,a,n,s,o,l=!1;t===nt.UP?(n=0,s=e.length,o=1):(n=e.length-1,s=-1,o=-1);for(let e=n;e!==s;e+=o){const n=this.sortedKeyProps[e].keyProps,s=n.line;void 0===i?i=s:(a=Math.abs(i-s),0===a||.5===a?l=!l:(l=!1,this.use_default_head_x=!0)),i=s;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=s,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:a,leftDisplacedHeadPx:n}=this.getMetrics(),s=this.getAbsoluteX()-a-n;let o=0,l=0;const r=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,h=2*r;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-r,l=t+r):(o=t-this.glyphProps.line_above*h,l=t+this.glyphProps.line_below*h)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=r*this.getStemDirection(),o=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{o=0,l=0;for(let t=0;te&&(e=a):a1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var a,n;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:s,BELOW:o,LEFT:l,RIGHT:r}=tt.Position;let h=0;return t===l?h=-2:t===r?(h=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(h+=null!==(n=null===(a=null==this?void 0:this.flag)||void 0===a?void 0:a.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==s||(h=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+h,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,a,n=1/0,s=-1/0,o=this.checkStave().getNumLines(),l=1,r=o,h=l;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),s=Math.max(m,s),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),l=Math.min(d,l),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),a=void 0===a?d:Math.min(d,a)):(r=Math.max(d,r),h=Math.min(d,h))}),this),{y_top:n,y_bottom:s,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:a,highest_non_displaced_line:r,lowest_non_displaced_line:h}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,a=this.checkContext(),n=e.getWidth()+2*i,s=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!a)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:l,highest_displaced_line:r,highest_non_displaced_line:h,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:b}=this.getNoteHeadBounds();if(o<6&&l>0)return;const _=Math.min(null!=m?m:0,null!=b?b:0),x=(t,e,o)=>{let l;l=o&&e?_-i:e?(null!=b?b:0)-i:(null!=m?m:0)-i;const r=e&&o?s:n;a.beginPath(),a.moveTo(l,t),a.lineTo(l+r,t),a.stroke()},p=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(a,p);for(let e=6;e<=o;++e){const i=void 0!==b&&e<=h,a=void 0!==r&&e<=r;x(t.getYForNote(e),i,a)}for(let e=0;e>=l;--e){const i=void 0!==b&&e>=d,a=void 0!==c&&e>=c;x(t.getYForNote(e),i,a)}this.restoreStyle(a,p)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const a=i-3.5;if(a<=0)return t;const n=this.getStave();let s=10;return null!=n&&(s=n.getSpacingBetweenLines()),t+a*s}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&y("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Gt extends W{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,a=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,a=8);const n=this.render_options.first_x_shift,s=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,l=this.notes.first_indices,r=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let h=0;hMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return u(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let a=0;a1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&y("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),a=i?Gt:Yt;this.slur=new a({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:a,rightDisplacedHeadPx:n,modLeftPx:s,modRightPx:o,totalLeftPx:l,totalRightPx:r}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(l.x_shift+=a+2),$t.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=n+2),l.reportedWidth&&l.x_shift<0?n+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?a+=l.reportedWidth+$t.minPadding:i=Math.max(l.getWidth(),i),$t.ornamentArticulation.indexOf(l.type)>=0){u(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=r,l.y_shift+=s,s-=l.glyph.bbox.getH()):(e.text_line+=r,l.y_shift+=s,s+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=r):(l.setTextLine(e.text_line),e.text_line+=r)}return e.left_shift=n+i/2,e.right_shift=a+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),a=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let s=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(s=a.getYForTopText(this.text_line)):s=a.getYForTopText(this.text_line));const o=i===nt.DOWN,l=a.getSpacingBetweenLines();let r=1;!o&&e.hasBeam()&&(r+=.5);const h=s-l*(this.text_line+r),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(a.getYForTopText(this.text_line),h);if(m+=this.y_shift,this.delayed){let t=0;const i=d-(a.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(a.getX()+a.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&y("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,m),this.accidentalLower&&(this.accidentalLower.render(t,d,m),m-=this.accidentalLower.getMetrics().height,m-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(m+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;tr+n.width?a:r+n.width),o===J.LEFT&&(r=s.getLeftParenthesisPx(l),i=i>r+n.width?i:r+n.width),n.setXShift(r)}return e.left_shift+=i,e.right_shift+=a,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),r(t)&&(this.point=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),a=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,a+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,a-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=p();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,a=p().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*a,e*a),t=t/a|0,e=e/a|0,i.width=t*a,i.height=e*a,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(a,a)}rect(t,e,i,a){return this.context2D.rect(t,e,i,a),this}fillRect(t,e,i,a){return this.context2D.fillRect(t,e,i,a),this}clearRect(t,e,i,a){return this.context2D.clearRect(t,e,i,a),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,a,n,s){return this.context2D.bezierCurveTo(t,e,i,a,n,s),this}quadraticCurveTo(t,e,i,a){return this.context2D.quadraticCurveTo(t,e,i,a),this}arc(t,e,i,a,n,s){return this.context2D.arc(t,e,i,a,n,s),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,a=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,a=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,a=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:a}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,a){const n=M.validate(t,e,i,a);return this.context2D.font=M.toCSSString(n),this.textHeight=M.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class ae extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":M.SANS_SERIF,"font-size":M.SIZE+"pt","font-weight":P.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const a=this.create("g");return this.groups.push(a),this.parent.appendChild(a),this.parent=a,t&&a.setAttribute("class",v(t)),e&&a.setAttribute("id",v(e)),i&&i.pointerBBox&&a.setAttribute("pointer-events","bounding-box"),this.applyAttributes(a,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),a}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,a=this.height/this.state.scaleY;return this.setViewBox(0,0,i,a),this}setViewBox(t,e,i,a){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+a;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const a in e)i&&i[a]||!e[a]||0!=this.groupAttributes.length&&e[a]==this.groupAttributes[this.groupAttributes.length-1][a]||t.setAttributeNS(null,a,e[a]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,a,n){a<0&&(e+=a,a*=-1);const s=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.applyAttributes(s,Object.assign({x:t,y:e,width:i,height:a},n)),this.add(s),this}fillRect(t,e,i,a){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,a,n),this}clearRect(t,e,i,a){return this.rect(t,e,i,a,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,a,n,s){return n=this.round(n),s=this.round(s),t=this.round(t),e=this.round(e),i=this.round(i),a=this.round(a),this.path+="C"+t+" "+e+","+i+" "+a+","+n+" "+s,this.pen.x=n,this.pen.y=s,this}quadraticCurveTo(t,e,i,a){return i=this.round(i),a=this.round(a),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+a,this.pen.x=i,this.pen.y=a,this}arc(t,e,i,a,n,s){let o=t+i*Math.cos(a),l=e+i*Math.sin(a);o=this.round(o),l=this.round(l);const r=T(a),h=T(n);if(!s&&n-a>=ie||s&&a-n>=ie||r===h){let n=t+i*Math.cos(a+Math.PI),s=e+i*Math.sin(a+Math.PI);n=this.round(n),s=this.round(s),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 0 0 ${n} ${s} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${l}`,this.pen.x=o,this.pen.y=l}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);a=r,n=h,c=Math.abs(n-a)n&&(c=!c);const b=!s;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${l} A${i} ${i} 0 ${+c} ${+b} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return ae.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const a=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,a),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,a){const n=M.validate(t,e,i,a);this.fontCSSString=M.toCSSString(n);const s={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),s),this.state=Object.assign(Object.assign({},this.state),s),this}getFont(){return this.fontCSSString}}var ne,se,oe,le;ae.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let a=this.cache[t];void 0===a&&(a={},this.cache[t]=a);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let s=a[n];return void 0===s&&(s=this.measureImpl(t,e,i),a[n]=s),s}measureImpl(t,e,i){let a=this.txt;a||(a=document.createElementNS(ee,"text"),this.txt=a),a.textContent=t,i["font-family"]&&a.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&a.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&a.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&a.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(a);const n=a.getBBox();return e.removeChild(a),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(se||(se={}));class re{static buildContext(t,e,i,a,n="#FFF"){const s=new re(t,e);i&&a&&s.resize(i,a);const o=s.getContext();return o.setBackgroundFillStyle(n),re.lastContext=o,o}static getCanvasContext(t,e,i,a){return re.buildContext(t,re.Backends.CANVAS,e,i,a)}static getSVGContext(t,e,i,a){return re.buildContext(t,re.Backends.SVG,e,i,a)}static drawDashedLine(t,e,i,a,n,s){t.beginPath();const o=a-e,l=n-i,r=Math.atan2(l,o);let h=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?h<=a:h>=a)||!(l<0?c<=n:c>=n);){const e=s[d++%s.length],i=h+Math.cos(r)*e;h=o<0?Math.max(a,i):Math.min(a,i);const b=c+Math.sin(r)*e;c=l<0?Math.max(n,b):Math.min(n,b),m?t.lineTo(h,c):t.moveTo(h,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let a;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);a=e}else a=t;if(i===re.Backends.CANVAS){if(!qt(a))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=a.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==re.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!Qt(a))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new ae(a)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}re.Backends=ne,re.LineEndType=se,re.lastContext=void 0;class he extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,a=e.right_shift;if(!t||0===t.length)return!1;const n=[];let s=null,o=0,l=0;for(let r=0;re.line-t.line));let r=0,h=0,c=0,d=null,b=null;for(let t=0;th?e:h):l===tt.Position.RIGHT&&(m.setXShift(r),e+=g,c=e>c?e:c),d=_,b=s}return e.left_shift+=h,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=re.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=re.LineEndType.NONE&&t<=re.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),a=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,s={};e.hasStem()&&(s=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&a==nt.DOWN&&(o=s.topY-he.metrics.stemPadding),o+=this.radius+he.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+he.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+he.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,o+4.5);const r=this.last_note;if(b(r)){const i=r.getStemX()-e.getX()+5;let a,s;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?re.drawDashedLine(t,n+10,o,n+i,o,[3,3]):re.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case re.LineEndType.UP:a=-10,s=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+a,s);break;case re.LineEndType.DOWN:a=10,s=this.dashed?[3,3]:[3,0],re.drawDashedLine(t,n+i,o,n+i,o+a,s)}}t.restore()}}he.TEXT_FONT={family:M.SANS_SERIF,size:M.SIZE,weight:P.BOLD,style:k.NORMAL};class ce extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const a=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:a}=e.getKeyProps()[i];return{line:a,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:a}=e.getPositions()[i];return{line:a,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),n=i,s=a.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=s,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let a=e.getYs(),n=i.y,s=i.y;const o=i.x-5,l=e.checkStave().getSpacingBetweenLines(),r=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){a-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(a,this.checkStave(),t.line),this.glyphs.push(a);const s=this.xPositions[this.xPositions.length-1],o=a.getMetrics().width+n;this.xPositions.push(s+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,a=i?e.length:e.length-this.accList.length;if(a<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let a;if(this.cancelKeySpec&&(a=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();a&&this.convertAccLines(n,a.type,a.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":a=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":a=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+a,this.timeSignature.point);this.topGlyphs.push(n),l+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0}let r=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const a=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=a[0])&&void 0!==e?e:"",null!==(i=a[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new ve(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(u(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[Ft.CATEGORY]:0,[_e.CATEGORY]:1,[xe.CATEGORY]:2,[Te.CATEGORY]:3},Be={[Te.CATEGORY]:0,[xe.CATEGORY]:1,[Ft.CATEGORY]:2,[_e.CATEGORY]:3};class De extends W{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,a){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},a),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new Ft(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new Ft(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new ge(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,a,n=!0){const s=new pe(t,this.x+i,e,n);return a&&s.setFontSize(a),this.modifiers.push(s),this}setTempo(t,e){return this.modifiers.push(new ue(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+t*i+a*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return(t-this.y)/i-a}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,a=e.space_above_staff_ln;return this.y+a*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:a}=Bt;return t!==e&&t!==i&&t!==a||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,a){void 0===a&&(a=wt.BEGIN),a===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(a,_e.CATEGORY);return 0===n.length?this.addClef(t,e,i,a):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,xe.CATEGORY);return 0===a.length?this.addKeySignature(t,e,i):a[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const a=this.getModifiers(i,Te.CATEGORY);return 0===a.length?this.addTimeSignature(t,e,i):a[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new xe(t,e).setPosition(i),i),this}addClef(t,e,i,a){return void 0===a||a===wt.BEGIN?this.clef=t:a===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),a),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new Te(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,a=void 0===e;return i&&a?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):a?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let a=0;ae[t[a+1].getCategory()]){const e=t[a];t[a]=t[a+1],t[a+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),a=this.getModifiers(wt.END);let n,s,l;this.sortByCategory(i,we),this.sortByCategory(a,Be),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new Ft(Bt.SINGLE))),a.indexOf(e)>0&&a.splice(0,0,new Ft(Bt.NONE));let r=0,h=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const a=t.getModifiers(wt.BEGIN,e);a.length>0&&a[0].getX()>i&&(i=a[0].getX())}));let a=0;t.forEach((t=>{a=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>a&&(a=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let s=!1;n.forEach((t=>{t.getCategory()===e&&(s=!0),s&&a>0&&t.setX(t.getX()+a)})),t.setNoteStartX(t.getNoteStartX()+a)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,a,n){if(e!==Ee.type.BOLD_DOUBLE_LEFT&&e!==Ee.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let s=3,o=3.5;e===Ee.type.BOLD_DOUBLE_RIGHT&&(s=-5,o=3),t.fillRect(i+s,a,1,n-a),t.fillRect(i-2,a,o,n-a)}De.TEXT_FONT={family:M.SANS_SERIF,size:8,weight:P.NORMAL,style:k.NORMAL};class Ee extends W{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ee.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ee.typeString[t]:t;return Object.values(Ee.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,a=this.width,n=this.top_stave.getX();(this.type===Ee.type.SINGLE_RIGHT||this.type===Ee.type.BOLD_DOUBLE_RIGHT||this.type===Ee.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let s=i-e;switch(this.type){case Ee.type.SINGLE:case Ee.type.SINGLE_LEFT:case Ee.type.SINGLE_RIGHT:a=1;break;case Ee.type.DOUBLE:n-=this.width+2,e-=this.thickness,s+=.5;break;case Ee.type.BRACE:{a=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,l=n,r=i,h=n-a,c=o+s/2,d=h-.9*a,m=o+.2*s,b=n+1.1*a,_=c-.135*s,x=b,g=c+.135*s,p=d,u=r-.2*s,y=h-a,f=u,S=n+.4*a,v=c+.135*s,T=S,w=c-.135*s,B=y,D=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,b,_,h,c),t.bezierCurveTo(x,g,p,u,l,r),t.bezierCurveTo(y,f,S,v,h,c),t.bezierCurveTo(T,w,B,D,n,o),t.fill(),t.stroke();break}case Ee.type.BRACKET:e-=6,i+=6,s=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Ee.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Ee.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Ee.type.THIN_DOUBLE:a=1,s-=this.thickness;break;case Ee.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ee.type.BRACE&&this.type!==Ee.type.BOLD_DOUBLE_LEFT&&this.type!==Ee.type.BOLD_DOUBLE_RIGHT&&this.type!==Ee.type.NONE&&t.fillRect(n,e,a,s),this.type===Ee.type.THIN_DOUBLE&&t.fillRect(n-3,e,a,s),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new be);const a=(new Kt).addTickable(e).preFormat(),n=a.getMetrics();return a.setX(t+n.totalLeftPx),t+a.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,a,n,s){const o=i+(s=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},s)).stavePadding,l=e.contextGaps;t.save(),t.setFont(M.SANS_SERIF,8),l.gaps.forEach((e=>{var i,s,l;i=o+e.x1,s=o+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,a,Math.max(s-i,0),n-a),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,a){let n={auto_beam:!1,align_rests:!1};"object"==typeof a?n=Object.assign(Object.assign({},n),a):"boolean"==typeof a&&(n.auto_beam=a);const s=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?We.applyAndGetBeams(s):[];return(new ke).joinVoices([s]).formatToStave([s],e,{align_rests:n.align_rests,stave:e}),s.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),s.getBoundingBox()}static FormatAndDrawTab(t,e,i,a,n,s,o){let l={auto_beam:s,align_rests:!1};"object"==typeof o?l=Object.assign(Object.assign({},l),o):"boolean"==typeof o&&(l.auto_beam=o);const r=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(a),c=l.auto_beam?We.applyAndGetBeams(r):[];(new ke).joinVoices([r]).joinVoices([h]).formatToStave([r,h],i,{align_rests:l.align_rests}),r.draw(t,i),h.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Ee(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((a,n)=>{if(m(a)&&a.isRest()){if(a.getTuplet()&&!i)return;const s=a.getGlyphProps().position.toUpperCase();if("R/4"!==s&&"B/4"!==s)return;if(e||a.getBeam()){const e=a.getKeyProps()[0];if(0===n)e.line=Pe(t,e.line,n,!1);else if(n>0&&nke.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,a=0,n=0;const s=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:r}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=r[e];l.preFormat(),l.getTickables().length{a+=t.getMetrics().width,n+=t.getTicks().value(),s.push(t.getMetrics().width),o.push(t.getTicks().value())}));const h=l.getWidth();this.minTotalWidth+=h})),this.hasMinTotalWidth=!0;const h=a>0?a/s.length:1/s.length,c=w(s.map((t=>Math.pow(t-h,2)))),d=Math.pow(c/s.length,.5)/h,m=n/o.length,b=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(b/o.length,.5)/m,x=Math.max(_,d)*l.length*e,p=e*i;return this.minTotalWidth+Math.max(p,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,a=[];t.forEach((t=>{const n=new B(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let s=i.get(t.getStave());if(s||(i.set(t.getStave(),{}),s=i.get(t.getStave())),!(s?s[e]:void 0)){const t=new be;a.push(t),s[e]=t}t.addToModifierContext(s[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:a,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const a={},n=[],s=[],o=ke.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const r=new B(0,o);t.getTickables().forEach((t=>{const o=r.numerator;if(!a[o]){const t=e({tickID:o});s.push(t),a[o]=t,n.push(o)}i(t,a[o],l),r.add(t.getTicks())}))})),{map:a,array:s,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,a){const n=this.tickContexts;if(!n)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:s,map:o}=n;this.lossHistory=[],i&&a&&i.forEach((t=>t.setStave(a).preFormat()));let l=0,r=0;this.minTotalWidth=0;let h=0;s.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const a=e.getMaxTicks().value();h+=a;const n=e.getMetrics();l=l+r+n.totalLeftPx,e.setX(l),r=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,b=w(s.map((t=>Math.pow(d,o[t].getMaxTicks().value()/h))));if(this.minTotalWidth=l+r,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[s[0]],x=o[s[s.length-1]];function p(t){return s.map(((e,i)=>{const a=o[e],n=a.getTickablesByVoice();let l;if(i>0){const e=o[s[i-1]];for(let r=i-1;r>=0;r--){const i=o[s[r]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let s=0,o=1/0,r=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>s&&(l=i[t],s=e);const a=n[t],r=a.getX()-(a.getMetrics().modLeftPx+a.getMetrics().leftDisplacedHeadPx),h=i[t].getMetrics(),c=i[t].getX()+h.notePx+h.modRightPx+h.rightDisplacedHeadPx;o=Math.min(o,r-c)})),o=Math.min(o,a.getX()-(e.getX()+.05*t)),c){const e=h;r=Math.pow(d,s/e)/b*t}else void 0!==l&&(r=l.getVoice().softmax(s)*t);return{expectedDistance:r,maxNegativeShiftPx:o,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function y(t){const e=f/2;let i=0;return s.forEach(((a,n)=>{const s=o[a];if(n>0){const e=s.getX(),a=t[n],o=u(a.fromTickable).getX()+a.expectedDistance-(e+i);let l=0;o>0?i+=o:o<0&&(l=Math.min(a.maxNegativeShiftPx,Math.abs(o)),i+=-l),s.setX(e+i)}s.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-s.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),v=S.lookupMetric("stave.endPaddingMin"),T=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let D=f;const C=p(D);let E=y(C);if(1===s.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const a=i.getVoice();if(a.getTicksUsed().value()>a.getTotalTicks().value())return 2*TN&&M>0||E+F1;)D-=E-N,F=k(D),A=F-(T-v),E=y(p(D)),M--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const a=t.list[i-1],n=t.map[a],s=t.map[e],o=n.getMetrics(),l=s.getMetrics(),r=n.getX()+o.notePx+o.totalRightPx,h=s.getX()-l.totalLeftPx,c=h-r;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:r,x2:h}),s.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,a,n)=>{const s=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),l=t.getFormatterMetrics(),r=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let h=0;if(a{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,a+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(a),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const a=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,s)=>{const o=i.map[t],l=e>0?i.map[s[e-1]]:void 0,r=et.getFormatterMetrics().space.deviation)));h>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(h)):h<0&&(n=r?Math.min(r.getFormatterMetrics().freedom.right,Math.abs(h)):0),n*=a,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const a=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,a.align_rests),this.createTickContexts(t),this.preFormat(e,a.context,t,a.stave),a.stave&&this.postFormat(),this}formatToStave(t,e,i){const a=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-De.defaultPadding;return function(...t){ke.DEBUG&&y("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,a)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Fe;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Fe||(Fe={}));class Ae extends W{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return Fe.TOP}static get LOCATION_BOTTOM(){return Fe.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=V.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ae.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),a=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const s=n(e,t);i=s>i?s:i,a=s0&&(a=Math.min(s,a))}}}else{let t=Ae.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),a=i.checkStave().getYForLine(t)+Ae.metrics.noteHeadOffset;for(let t=0;ta&&(a=e)}}return a+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const a=(t,e)=>t+u(e.getMetrics().width);let n=this.numerator_glyphs.reduce(a,0);this.ratioed&&(n=this.denom_glyphs.reduce(a,n),n+=.32*this.point);const s=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ae.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)})),this.ratioed){const e=s+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,s+l,this.y_pos+this.point/3-2+o),l+=u(e.getMetrics().width)}))}}}function Ne(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Me="L",Re="R",Oe="B";class We extends W{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),a=t;let n=0,s=[],o=[];function l(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new B(0,1);a.forEach((a=>{if(t=[],a.shouldIgnoreTicks())return s.push(o),void(o=t);o.push(a);const r=i[n].clone(),h=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var c;const d=V.durationToNumber(a.getDuration())<8;if(d&&a.getTuplet()&&(r.numerator*=2),h.greaterThan(r)){if(!d){const e=o.pop();e&&t.push(e)}s.push(o);do{e=h.subtract(i[n]),l()}while(e.greaterThanEquals(i[n]));o=t}else h.equals(r)&&(s.push(o),e=new B(0,1),o=t,l())})),o.length>0&&s.push(o)}(),function(){const t=[];s.forEach((i=>{let a=[];i.forEach(((i,n,s)=>{const o=0===n||n===s.length-1,l=s[n-1],r=!e.beam_rests&&i.isRest(),h=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;r||h||c||d?(a.length>0&&t.push(a),a=c?[i]:[]):a.push(i)})),a.length>0&&t.push(a)})),s=t}(),s.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const r=s.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),h=function(){const t=[];return s.forEach((e=>{let i;e.forEach((e=>{const a=e.getTuplet();a&&i!==a&&(i=a,t.push(i))}))})),t}(),c=[];return r.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),h.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Fe.BOTTOM:Fe.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,a;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Ne(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,a){return i+(t-e)*a}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:a,slope_iterations:n,slope_cost:s}}=this,o=t[0],l=function(t,e){const i=t.getStemExtents().topY,a=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-a)}(o,t[t.length-1]),r=(i-a)/n;let h=Number.MAX_VALUE,c=0,d=0;for(let n=a;n<=i;n+=r){let i=0,a=0;for(let s=1;sn)&&(r=n,o=Math.min(...a.getYs()),l=a.getBeamCount())}let h=s/t.length;const c=a+l*(1.5*i),d=o+c*-e;e===nt.DOWN&&hd&&(h=o-c),n?(e===nt.DOWN&&h>n||e===nt.UP&&h=8&&(c=-1!==this.break_on_indices.indexOf(r),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,c=!0));const d=h.getIntrinsicTicks(){const i=e.getStem();if(i){const a=e.getStemX();i.setNoteHeadXBounds(a,a),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let a=this.getBeamYToDraw();const n=i.getStemX(),s=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=a),o?this.matchSuccess():this.matchFail(a),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ge("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ge(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const a=[];return e.matches=a,e.results&&e.results.forEach((t=>a.push(Ye(t)))),i.run&&e.success&&i.run({matches:a}),e}}function je(...t){Qe.DEBUG&&y("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=u(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),a=u(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:s,dots:o,type:l}=this.piece,r=et.accidentals,h=n.map((t=>{var e;return t.key+(r.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:s,dots:o}):t.StaveNote({keys:h,duration:s,dots:o,type:l,clef:a,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const a=e.accid;if("string"==typeof a){const e=t.Accidental({type:a});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const a=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(a);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,yt.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:a,builder:n}),this.factory=a,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends zt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,a=!1;this.notes.forEach(((n,s,o)=>{a=!a;const l=n.getAbsoluteX(),r=n.checkStave().getYForBottomText(this.line+3);if(l{e=!e;const a=i.checkStave(),n=i.getAbsoluteX(),s=a.getYForBottomText(this.line+3),o=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let l=0;e?this.custom_depress_text?(l=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-l/2,s)):oi("pedal_depress",t,n,s,o):this.custom_release_text?(l=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-l/2,s)):oi("pedal_release",t,n,s,o)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&y("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:M.SERIF,size:12,weight:P.BOLD,style:k.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const ri={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class hi extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(ri[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,a,n,s,o){t.beginPath(),t.moveTo(e,i),t.lineTo(a,n),t.lineTo(s,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends W{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const a=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,s=e.y,o=i.x,l=i.y,r=Math.sqrt((o-n)*(o-n)+(l-s)*(l-s)),h=(r-this.render_options.arrowhead_length/3)/r;let c,d,m,b;this.render_options.draw_end_arrow||a?(c=Math.round(n+(o-n)*h),d=Math.round(s+(l-s)*h)):(c=o,d=l),this.render_options.draw_start_arrow||a?(m=n+(o-n)*(1-h),b=s+(l-s)*(1-h)):(m=n,b=s),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,b),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(l-s,o-n),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,p,u,y,f,S;(this.render_options.draw_end_arrow||a)&&(g=_+Math.PI+this.render_options.arrowhead_angle,u=o+Math.cos(g)*x,y=l+Math.sin(g)*x,p=_+Math.PI-this.render_options.arrowhead_angle,f=o+Math.cos(p)*x,S=l+Math.sin(p)*x,ci(t,u,y,o,l,f,S)),(this.render_options.draw_start_arrow||a)&&(g=_+this.render_options.arrowhead_angle,u=n+Math.cos(g)*x,y=s+Math.sin(g)*x,p=_-this.render_options.arrowhead_angle,f=n+Math.cos(p)*x,S=s+Math.sin(p)*x,ci(t,u,y,n,s,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,a=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},s={x:0,y:0};this.first_indices.forEach(((o,l)=>{const r=this.last_indices[l];n=e.getModifierStartXY(2,o),s=i.getModifierStartXY(1,r);const h=n.y>s.y;n.x+=e.getMetrics().modRightPx+a.padding_left,s.x-=i.getMetrics().modLeftPx+a.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+a.padding_left);i.getKeyProps()[r].displaced&&-1===i.getStemDirection()&&(s.x-=c+a.padding_right),n.y+=h?-3:1,s.y+=h?2:0,this.drawArrowLine(t,n,s)})),t.restore();const o=t.measureText(this.text).width,l=a.text_justification;let r=0;if(l===di.TextJustification.LEFT)r=n.x;else if(l===di.TextJustification.CENTER){r=(s.x-n.x)/2+n.x-o/2}else l===di.TextJustification.RIGHT&&(r=s.x-o);let h=0;const c=a.text_position_vertical;return c===di.TextVerticalPosition.TOP?h=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(h=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,r,h),t.restore(),this}}di.TEXT_FONT=Object.assign({},W.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class mi extends W{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),a=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),s=this.getContext();return n.voices.forEach((t=>{t.setContext(s).setStave(a).getTickables().forEach((t=>t.setStave(a))),this.partVoices.push(t)})),this.partStaves.push(a),this.partStaveInfos.push(n),a}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let a=this.options.y,n=0;const s=[];this.partStaves.forEach(((t,e)=>{a+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(a),a+=t.space(this.partStaveInfos[e].spaceBelow),a+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(s.push({y:a,stave:t}),a+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+De.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-De.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&Tt.plotMetrics(t,i,e.y)}))}))}))}}class bi extends zt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:a}}=this,n=this.checkContext(),s=null==e&&a;if(i.flag&&s){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),a=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(a&&n){const a=function(t,e,i,a){const n=1!==a,s=-1!==a,o=i.getSpacingBetweenLines(),l=i.getNumLines(),r=[];return e.forEach((e=>{const h=e.indexOf(l)>-1,c=e.indexOf(1)>-1;if(n&&c||s&&h)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,s)=>{const r=1===e,h=e===l;let c=i.getYForLine(e-1);0!==n||r?n!==s.length-1||h||(c+=o/2-1):c-=o/2-1,d.push(c),1===a&&r?d.push(t-2):-1===a&&h&&d.push(t+2)})),r.push(d.sort(((t,e)=>t-e)))})),r}(e,function(t,e){const i=[];let a=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(a),a=[]):a.push(n);return a.length>0&&i.push(a),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),a.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),a=this.ys;for(let n=0;n{const i=yi.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const a=u(this.render_options.glyph_font_size),n=new Z(i.code,a,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);ui("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,a)=>{const n=this.sequence[a];t.render(this.checkContext(),i,e),i+=yi.GLYPHS[n].width}))}}yi.DEBUG=!1;class fi extends Tt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new Te(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,a=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=a-i,function(...t){Si.DEBUG&&y("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",a,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function vi(...t){Ti.DEBUG&&y("Vex.Flow.Factory",t)}Si.DEBUG=!1;class Ti{static newFromElementId(t,e=500,i=200){return new Ti({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){vi("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:Ti.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:a}=this.options.renderer;if(null==t)return;if(""==t)throw vi(this),new g("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?re.Backends.CANVAS:re.Backends.SVG}this.context=re.buildContext(t,n,e,i,a)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),a=new De(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),a=new _i(i.x,i.y,i.width,i.options);return this.staves.push(a),a.setContext(this.context),this.stave=a,a}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const a=new ei(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}RepeatNote(t,e,i){const a=new hi(t,e,i);return this.stave&&a.setStave(this.stave),a.setContext(this.context),this.renderQ.push(a),a}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ye(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new At(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new ai(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new bi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new at(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new yt(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),a=new $t(t);return a.setPosition(i.position),i.upperAccidental&&a.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&a.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&a.setDelayed(i.delayed),a.setContext(this.context),a}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new yi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new he(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new be}MultiMeasureRest(t){const e=u(t.number_of_measures,"NoNumberOfMeasures"),i=new si(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ee(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ae(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,a,n,s;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(a=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==a?a:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(s=t.options)||void 0===s?void 0:s.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Gt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const a=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&a.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&a.setFont(t.options.font),a.setContext(this.context),this.renderQ.push(a),a}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new pi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}Ti.DEBUG=!1,Ti.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends bi{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${M.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;ea?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,a=t.first_ys,n=t.last_x_px,s=t.direction;if(s!==Ci.SLIDE_UP&&s!==Ci.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),a=Number(t);if(a<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+a}getNoteForFret(t,e){const i=this.getValueForFret(t,e),a=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${a}`}}var ki=function(t,e,i,a){return new(i||(i=Promise))((function(n,s){function o(t){try{r(a.next(t))}catch(t){s(t)}}function l(t){try{r(a.throw(t))}catch(t){s(t)}}function r(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}r((a=a.apply(t,e||[])).next())}))};class Fi{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>M.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Fi.Accidental=at,Fi.Annotation=mt,Fi.Articulation=yt,Fi.Barline=Ft,Fi.BarNote=At,Fi.Beam=We,Fi.Bend=Nt,Fi.BoundingBox=C,Fi.BoundingBoxComputation=E,Fi.CanvasContext=Zt,Fi.ChordSymbol=Rt,Fi.Clef=_e,Fi.ClefNote=Le,Fi.Crescendo=ze,Fi.Curve=Ue,Fi.Dot=Ot,Fi.EasyScore=Qe,Fi.Element=W,Fi.Factory=Ti,Fi.Font=M,Fi.Formatter=ke,Fi.Fraction=B,Fi.FretHandFinger=Wt,Fi.GhostNote=ti,Fi.Glyph=Z,Fi.GlyphNote=ei,Fi.GraceNote=ii,Fi.GraceNoteGroup=Xt,Fi.GraceTabNote=wi,Fi.KeyManager=Bi,Fi.KeySignature=xe,Fi.KeySigNote=ai,Fi.Modifier=tt,Fi.ModifierContext=be,Fi.MultiMeasureRest=si,Fi.Music=et,Fi.Note=Tt,Fi.NoteHead=Lt,Fi.NoteSubGroup=Vt,Fi.Ornament=$t,Fi.Parenthesis=Jt,Fi.Parser=He,Fi.PedalMarking=li,Fi.Registry=O,Fi.RenderContext=ft,Fi.Renderer=re,Fi.RepeatNote=hi,Fi.Repetition=ge,Fi.Stave=De,Fi.StaveConnector=Ee,Fi.StaveHairpin=Di,Fi.StaveLine=di,Fi.StaveModifier=kt,Fi.StaveNote=Ut,Fi.StaveTempo=ue,Fi.StaveText=fe,Fi.StaveTie=Gt,Fi.Stem=nt,Fi.StringNumber=he,Fi.Stroke=ce,Fi.SVGContext=ae,Fi.System=mi,Fi.TabNote=bi,Fi.TabSlide=Ci,Fi.TabStave=_i,Fi.TabTie=Yt,Fi.TextBracket=pi,Fi.TextDynamics=yi,Fi.TextFormatter=ht,Fi.TextNote=ye,Fi.TickContext=Kt,Fi.TimeSignature=Te,Fi.TimeSigNote=fi,Fi.Tremolo=Ei,Fi.Tuning=Pi,Fi.Tuplet=Ae,Fi.Vibrato=de,Fi.VibratoBracket=Si,Fi.Voice=jt,Fi.Volta=Se,Fi.AnnotationHorizontalJustify=ct,Fi.AnnotationVerticalJustify=dt,Fi.ChordSymbolHorizontalJustify=Dt,Fi.ChordSymbolVerticalJustify=Ct,Fi.SymbolTypes=Et,Fi.SymbolModifiers=Pt,Fi.CurvePosition=Ie,Fi.FontWeight=P,Fi.FontStyle=k,Fi.ModifierPosition=J,Fi.RendererBackends=ne,Fi.RendererLineEndType=se,Fi.BarlineType=Bt,Fi.StaveModifierPosition=wt,Fi.VoltaType=le,Fi.TextBracketPosition=gi,Fi.TextJustification=oe,Fi.VoiceMode=Ht;const Ai={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Ni={name:"Bravura",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}};const Mi={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},Ri={name:"VexFlowCustom",smufl:!1,glyphs:{}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},zi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Ii={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Ui{static sortAndUnique(t,e,i){if(t.length>1){const a=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","/**\n * The Bravura font was created by Daniel Spreadbury @ Steinberg.\n * https://github.com/steinbergmedia/bravura/\n */\nexport const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature object\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { BravuraMetrics } from './bravura_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, BravuraMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-bravura.ts is the entry point for vexflow-bravura.js.\n// This version bundles the Bravura music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadBravura } from '../src/fonts/load_bravura';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadBravura();\nloadCustom();\nFlow.setMusicFont('Bravura', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n// ADD_MUSIC_FONT\n// To make a vexflow-xxx.js build that ONLY loads your new music font, copy this file and name it vexflow-xxx.ts.\n// Replace these lines:\n// import { loadXXX } from '../src/fonts/load_xxx';\n// loadXXX();\n// Flow.setMusicFont('XXX', 'Custom');\n// Feel free to remove references to Custom if you are not using those glyphs.\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","BravuraMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","restQuarterStemUp","restQuarterStemDown","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","CustomMetrics","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-core.js b/build/cjs/vexflow-core.js deleted file mode 100644 index bd38933d94..0000000000 --- a/build/cjs/vexflow-core.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>mt,AnnotationHorizontalJustify:()=>dt,AnnotationVerticalJustify:()=>lt,Articulation:()=>yt,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Re,BarNote:()=>Dt,Barline:()=>At,BarlineType:()=>Et,Beam:()=>Le,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>_,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ue,ClefNote:()=>We,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Ve,Element:()=>L,Factory:()=>bi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>N,FontWeight:()=>k,Formatter:()=>Ne,Fraction:()=>E,FretHandFinger:()=>Lt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Vt,GraceTabNote:()=>wi,KeyManager:()=>Ei,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>ge,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>bt,NoteHead:()=>Wt,NoteSubGroup:()=>zt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>je,PedalMarking:()=>ri,Piece:()=>ze,Registry:()=>O,RenderContext:()=>St,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>ci,Repetition:()=>pe,RuntimeError:()=>p,SVGContext:()=>se,Stave:()=>Be,StaveConnector:()=>Pe,StaveHairpin:()=>Bi,StaveLine:()=>li,StaveModifier:()=>Nt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>xe,StaveTempo:()=>fe,StaveText:()=>Se,StaveTie:()=>Ht,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>ce,Stroke:()=>de,SymbolModifiers:()=>kt,SymbolTypes:()=>Pt,System:()=>mi,TabNote:()=>gi,TabSlide:()=>Ci,TabStave:()=>ui,TabTie:()=>Yt,TextBracket:()=>xi,TextBracketPosition:()=>pi,TextDynamics:()=>yi,TextFormatter:()=>ct,TextJustification:()=>oe,TextNote:()=>ye,TickContext:()=>Kt,Tickable:()=>vt,TimeSigNote:()=>Si,TimeSignature:()=>be,TimeSignatureGlyph:()=>ve,Tremolo:()=>Pi,Tuning:()=>ki,Tuplet:()=>De,TupletLocation:()=>Ae,Vex:()=>Li,Vibrato:()=>le,VibratoBracket:()=>Ti,Voice:()=>Xt,VoiceMode:()=>jt,Volta:()=>Te,VoltaType:()=>re,defined:()=>f,drawDot:()=>Tt,globalObject:()=>x,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>c,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>d,isRenderContext:()=>l,isStaveNote:()=>m,isStemmableNote:()=>g,isTabNote:()=>u,log:()=>y,midLine:()=>T,normalizeAngle:()=>b,prefix:()=>v,sumArray:()=>w,warn:()=>S});const n=t=>s(t,_.Accidental),a=t=>s(t,_.Annotation),o=t=>s(t,_.Barline),r=t=>s(t,_.Dot),h=t=>s(t,_.GraceNote),c=t=>s(t,_.GraceNoteGroup),d=t=>s(t,_.Note),l=t=>s(t,_.RenderContext),m=t=>s(t,_.StaveNote),g=t=>s(t,_.StemmableNote),u=t=>s(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class p extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function x(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function f(t,e="undefined",i=""){if(void 0===t)throw new p(e,i);return t}function y(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");x().console.log(t+": "+i)}function S(...t){const e=t.join(" "),i=new Error;x().console.log("Warning: ",e,i.stack)}function T(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function v(t){return`vf-${t}`}function b(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class E{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new p("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/E.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?E.LCM(t[0],t[1]):E.LCM(t.shift(),E.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=E.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=B(t,e),n=E.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=B(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=E.__staticFractionA.copy(t).simplify(),i=E.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=E.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new E(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return E.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=E.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}E.__staticFractionA=new E,E.__staticFractionB=new E,E.__staticFractionTmp=new E;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],c=[i,s],d=[n,a],l=[o,r];let m;this.addPoint(h[0],h[1]),this.addPoint(l[0],l[1]);const g=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*c[e]+3*(1-t)*Math.pow(t,2)*d[e]+Math.pow(t,3)*l[e];for(m=0;m<=1;m++){const t=6*h[m]-12*c[m]+6*d[m],e=-3*h[m]+9*c[m]-9*d[m]+3*l[m],i=3*c[m]-3*h[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===N.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return f(this.data,"FontError","Missing font data")}getMetrics(){return f(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class L{static get CATEGORY(){return _.Element}static newID(){return"auto"+L.ID++}constructor(){var t;this.children=[],this.attrs={id:L.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=v(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return f(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}L.ID=1e3,L.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.NORMAL,style:N.NORMAL};const W=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},H={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},j={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},X={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},V={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class z{static currentMusicFont(){if(0===z.MUSIC_FONT_STACK.length)throw new p("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return z.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in H))throw new p("BadArgument","Invalid clef: "+t);return H[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=z.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new p("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new p("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let c=(7*h-28+r.index)/2;c+=z.clefProperties(e).line_shift;let d=0;c<=0&&2*c%2==0&&(d=1),c>=6&&2*c%2==0&&(d=-1);const l=void 0!==r.int_val?12*h+r.int_val:void 0,m=r.code,g=r.shift_right;let u={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();u={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:c,int_value:l,accidental:r.accidental,code:m,stroke:d,shift_right:g,displaced:!1},u)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new p("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new p("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",z.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new p("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=z.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return X[t]}static accidentalCodes(t){return j[t]}static ornamentCodes(t){return V[t]}static keySignature(t){const e=U[t];if(!e)throw new p("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}z.SOFTMAX_FACTOR=10,z.STEM_WIDTH=1.5,z.STEM_HEIGHT=35,z.STAVE_LINE_THICKNESS=1,z.RENDER_PRECISION_PLACES=3,z.RESOLUTION=W,z.MUSIC_FONT_STACK=[],z.NOTATION_FONT_SCALE=39,z.TABLATURE_FONT_SCALE=39,z.SLASH_NOTEHEAD_WIDTH=15,z.STAVE_LINE_DISTANCE=10,z.TEXT_HEIGHT_OFFSET_HACK=1,z.accidentalMap=j,z.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},z.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},z.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},z.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-z.STEM_HEIGHT,stem_down_extension:-z.STEM_HEIGHT,tabnote_stem_up_extension:-z.STEM_HEIGHT,tabnote_stem_down_extension:-z.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>z.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new p("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new p("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new p("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new p("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new p("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new p("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new p("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new p("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new p("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new p("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const d=[];let l,m=0;for(let t=0;tm?e.shift:m,l=e.line}let g=0;for(let t=0;td[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let c,l,m=this.checkCollision(d[i],d[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+el?g:l}else for(c=t;c<=s;c++)l=z.accidentalColumnsTable[h][m][c-t],d[c].column=l,g=g>l?g:l;t=s}const u=[],_=[];for(let t=0;t<=g;t++)u[t]=0,_[t]=0;u[0]=m+n,_[0]=m+n,d.forEach((t=>{t.width>u[t.column]&&(u[t.column]=t.width)}));for(let t=1;t{let e=0;const i=x+t.numAcc;for(;x0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new E(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),c=t.split("/")[1],d=h.accidental||"n",l=h.root+d;r[h.root+c]||(r[h.root+c]=o[h.root]);const m=r[h.root+c]===l,g=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==d&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!m||m&&g){r[h.root+c]=l;const n=new st(d);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{c(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=z.accidentalCodes(this.type),f(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(z.accidentalCodes("{").code,t),this.parenRight=new Z(z.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=f(this.parenLeft),e=f(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return f(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,c=this.checkContext(),d=this.checkAttachedNote();this.setRendered();const l=d.getModifierStartXY(e,i);let m=l.x+n;const g=l.y+a;if(it("Rendering: ",t,m,g),s){const t=f(this.parenLeft),e=f(this.parenRight);e.render(c,m,g),m-=e.getMetrics().width,m-=h,m-=this.accidental.parenRightPaddingAdjustment,o.render(c,m,g),m-=o.getMetrics().width,m-=r,t.render(c,m,g)}else o.render(c,m,g)}}st.DEBUG=!1;class nt extends L{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return z.STEM_WIDTH}static get HEIGHT(){return z.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new p("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=z.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&y("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){ct.DEBUG&&y("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class ct{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new ct(Object.values(ht)[0]);else if(1===e.length)s=new ct(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new ct(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new ct(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?k.BOLD:k.NORMAL,s=this.italic?N.ITALIC:N.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*z.STAVE_LINE_DISTANCE+o,l&&i===nt.DOWN&&(h=Math.max(h,c.topY+o+d*this.text_line))}else if(this.verticalJustification===lt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===lt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*z.STAVE_LINE_DISTANCE,l&&i===nt.UP&&(d=c.topY=1}function xt(t,e){return pt(t,e)?e===gt?Math.ceil:Math.floor:Math.round}const ft=t=>m(t)||h(t);class yt extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>_t(xt(e,i),f(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(g(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/z.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===gt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,gt);const c=i+e.top_text_line+.5;!t.articulation.between_lines&&ct.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=gt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=z.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=gt),this.type.endsWith("Below")&&(this.position=ut));const t=(this.position===gt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),f(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(f(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),c=u(e),{x:d}=e.getModifierStartXY(s,i),l=!o||c,m=function(t,e){const i=e===gt&&t.getStemDirection()===nt.UP||e===ut&&t.getStemDirection()===nt.DOWN;return ft(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),g=z.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let _={[gt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(u(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+m)*h;return l?Math.min(r.getYForTopText(yt.INITIAL_OFFSET),t):t},[ut]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(ft(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(u(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new p("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+m)*h;return l?Math.max(r.getYForBottomText(yt.INITIAL_OFFSET),t):t}}[s]();if(!c){const t=s===gt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),c=function(t,e,i,s){const n=_t(xt(e,i),e);if(t&&pt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);pt(c,s)&&n.setOrigin(.5,.5),_+=Math.abs(c-r)*h*t+g*t}!function(...t){yt.DEBUG&&y("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${d}, y: ${_})`),n.render(t,d,_)}}yt.DEBUG=!1,yt.INITIAL_OFFSET=-.5;class St{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function Tt(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class vt extends L{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new E(0,1),this.intrinsicTicks=0,this.tickMultiplier=new E(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new p("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return f(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=u.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=bt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!z.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=z.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tz.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new p("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new p("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return f(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new p("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=z.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new p("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+z.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new p("NoStem","No stem attached to this note.")}getStemExtents(){throw new p("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Et,Bt,Ct,Pt,kt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Nt extends L{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Et||(Et={}));class At extends Nt{static get CATEGORY(){return _.Barline}static get type(){return Et}static get typeString(){return{single:Et.SINGLE,double:Et.DOUBLE,end:Et.END,repeatBegin:Et.REPEAT_BEGIN,repeatEnd:Et.REPEAT_END,repeatBoth:Et.REPEAT_BOTH,none:Et.NONE}}constructor(t){super(),this.thickness=z.STAVE_LINE_THICKNESS;const e=Et;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Et.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Et.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Et.END:this.drawVerticalEndBar(t,this.x);break;case Et.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Et.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Et.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let c=n+h+1;s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill(),c+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,c,2,0,2*Math.PI,!1),s.fill()}}class Dt extends bt{static get CATEGORY(){return _.BarNote}constructor(t=Et.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Et;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Dt.DEBUG&&y("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new At(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Dt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},d=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},l=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let g,u=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=c.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(p=!0,e.xShift=e.xShift+(n-s),s=n,n=0,c.setEnableKerning(!1)),i||a||(n=0),e.vAlign=p,s+=e.width,u=s}if(c.updateKerningAdjustments(),c.updateOverBarAdjustments(),c.getVertical()===Ct.TOP?(c.setTextLine(e.top_text_line),e.top_text_line+=_):(c.setTextLine(e.text_line+1),e.text_line+=_+1),c.getReportWidth()&&g(m)){const t=m.getGlyphProps().getWidth();c.getHorizontal()===Bt.LEFT?(r=Math.max(t,r),a=Math.max(a,u)+Rt.minPadding):c.getHorizontal()===Bt.RIGHT?(h=Math.max(t,h),o=Math.max(o,u)):(a=Math.max(a,u/2)+Rt.minPadding,o=Math.max(o,u/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const c=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),d=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=d,e.right_shift+=c,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===z.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:k.NORMAL,style:N.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===kt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:kt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=kt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=kt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=kt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=ct.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+z.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Bt,Rt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Pt,Rt.symbolModifiers=kt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,c=null,d=0;for(let t=0;to?a:o,r=m,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});u(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Lt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,c=0,d=0,l=0,m=null,g=null;for(let t=0;td?e:d):o===tt.Position.RIGHT&&(u.setXShift(c),e=r+f,l=e>l?e:l),m=_,g=a}return e.left_shift+=d,e.right_shift+=l,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new p("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Lt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:k.BOLD,style:N.NORMAL};class Wt extends bt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=z.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){if(!this.preFormatted)throw new p("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&y("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=z.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(z.STEM_WIDTH);let r=!1;if(z.durationToNumber(e)>2&&(r=!0),r||(i-=z.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),z.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;n2&&i++,2===z.durationToNumber(a.note.duration)?e++:z.durationToNumber(a.note.duration)>2&&i++,2!==e&&2!==i||s.note.getModifiersByType(_.Dot).length!==a.note.getModifiersByType(_.Dot).length||t<1&&t>0?(c=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(c):a.note.setXShift(c)):s.note.voice!==a.note.voice&&s.stemDirection===a.stemDirection&&(s.line!=a.line?(c=h+2,s.note.setXShift(c)):1===a.stemDirection&&(a.stemDirection=-1,a.note.setStemDirection(-1)))}else t<1?(c=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(c):a.note.setXShift(c)):s.note.hasStem()?(s.stemDirection=-s.note.getStemDirection(),s.note.setStemDirection(s.stemDirection)):a.note.hasStem()&&(a.stemDirection=-a.note.getStemDirection(),a.note.setStemDirection(a.stemDirection))}return e.right_shift+=c,!0}if(!n)throw new p("InvalidState","noteM not defined.");if(n.isrest&&!s.isrest&&!a.isrest&&(s.minLine<=n.maxLine||n.minLine<=a.maxLine)){return n.maxLine-n.minLinet.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=z.getGlyphProps(this.duration,this.noteType),f(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||z.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Wt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new p("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,c=2*h;if(this.isRest()){const t=this.ys[0],e=z.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*c,r=t+this.glyphProps.line_below*c)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=T(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let c=0;return t===r?c=-2:t===h?(c=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(c+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(c=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+c,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,c=r;return this._noteHeads.forEach((d=>{const l=d.getLine(),m=d.getY();n=Math.min(m,n),a=Math.max(m,a),void 0===e&&d.isDisplaced()&&(e=d.getAbsoluteX()),void 0!==t||d.isDisplaced()||(t=d.getAbsoluteX()),o=Math.max(l,o),r=Math.min(l,r),d.isDisplaced()?(i=void 0===i?l:Math.max(l,i),s=void 0===s?l:Math.min(l,s)):(h=Math.max(l,h),c=Math.min(l,c))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:c}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new p("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:c,lowest_displaced_line:d,lowest_non_displaced_line:l,displaced_x:m,non_displaced_x:g}=this.getNoteHeadBounds();if(o<6&&r>0)return;const u=Math.min(null!=m?m:0,null!=g?g:0),_=(t,e,o)=>{let r;r=o&&e?u-i:e?(null!=g?g:0)-i:(null!=m?m:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},x=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,x);for(let e=6;e<=o;++e){const i=void 0!==g&&e<=c,s=void 0!==h&&e<=h;_(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==g&&e>=l,s=void 0!==d&&e>=d;_(t.getYForNote(e),i,s)}this.restoreStyle(s,x)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new p("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&y("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Ht extends L{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let c=0;cMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===jt.STRICT||this.mode===jt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new p("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return f(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new Le(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Vt.DEBUG&&y("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),s=i?Ht:Yt;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Vt.DEBUG=!1;class zt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new Ne,this.voice=new Xt({num_beats:4,beat_value:4,resolution:z.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new p("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){f(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=z.currentMusicFont().getMetrics().ornament;if(!t)throw new p("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=z.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new p("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(z.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(z.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;u(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const c=a-r*(this.text_line+h),d=e.getModifierStartXY(this.position,this.index);let l=d.x,m=this.ornamentAlignWithNoteHead?d.y:Math.min(s.getYForTopText(this.text_line),c);if(m+=this.y_shift,this.delayed){let t=0;const i=l-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}l+=t}!function(...t){$t.DEBUG&&y("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,l,m),this.accidentalLower&&(this.accidentalLower.render(t,l,m),m-=this.accidentalLower.getMetrics().height,m-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(m+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,l+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,l,m)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=z.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=z.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=z.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(z.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=x();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends St{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(S("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,s=x().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,i.width=t*s,i.height=e*s,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends St{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,z.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":k.NORMAL,"font-style":N.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",v(t)),e&&s.setAttribute("id",v(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new p("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=b(s),c=b(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===c){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let d,l=t+i*Math.cos(n),m=e+i*Math.sin(n);s=h,n=c,d=Math.abs(n-s)n&&(d=!d);const g=!a;l=this.round(l),m=this.round(m),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+d} ${+g} ${l} ${m}`,this.pen.x=l,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let c=e,d=i;t.moveTo(e,i);let l=0,m=!0;for(;!(o<0?c<=s:c>=s)||!(r<0?d<=n:d>=n);){const e=a[l++%a.length],i=c+Math.cos(h)*e;c=o<0?Math.max(s,i):Math.min(s,i);const g=d+Math.sin(h)*e;d=r<0?Math.max(n,g):Math.min(n,g),m?t.lineTo(c,d):t.moveTo(c,d),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(l(t))this.ctx=t;else{if(void 0===e)throw new p("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new p("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new p("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new p("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new p("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new p("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class ce extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=z.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,c=0,d=0,l=null,g=null;for(let t=0;tc?e:c):r===tt.Position.RIGHT&&(m.setXShift(h),e+=p,d=e>d?e:d),l=u,g=a}return e.left_shift+=c,e.right_shift+=d,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-ce.metrics.stemPadding),o+=this.radius+ce.metrics.verticalPadding+this.text_line*z.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+ce.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+ce.metrics.rightPadding;break;default:throw new p("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(g(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}ce.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.BOLD,style:N.NORMAL};class de extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(u(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new p("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/z.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=z.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0}let h=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new p("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new ve(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(f(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[At.CATEGORY]:0,[ue.CATEGORY]:1,[_e.CATEGORY]:2,[be.CATEGORY]:3},Ee={[be.CATEGORY]:0,[_e.CATEGORY]:1,[At.CATEGORY]:2,[ue.CATEGORY]:3};class Be extends L{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=z.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return z.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:z.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Et.SINGLE:Et.NONE)),this.addEndModifier(new At(this.options.right_bar?Et.SINGLE:Et.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new pe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Te(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new xe(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new fe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new Se(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Et;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Et.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,ue.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,be.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new ue(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new be(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Ee),i.length>1&&t.getType()===Et.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Et.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new At(Et.NONE));let h=0,c=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new p("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new p("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new p("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new p("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Et.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new p("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Be.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:k.NORMAL,style:N.NORMAL};class Pe extends L{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=z.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new p("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,c=n-s,d=o+a/2,l=c-.9*s,m=o+.2*a,g=n+1.1*s,u=d-.135*a,_=g,p=d+.135*a,x=l,f=h-.2*a,y=c-s,S=f,T=n+.4*s,v=d+.135*a,b=T,w=d-.135*a,E=y,B=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(l,m,g,u,c,d),t.bezierCurveTo(_,p,x,f,r,h),t.bezierCurveTo(y,S,T,v,c,d),t.bezierCurveTo(b,w,E,B,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new p("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new ge);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:z.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(i),o=n.auto_beam?Le.applyAndGetBeams(a):[];return(new Ne).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(n),c=new Xt(z.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(s),d=r.auto_beam?Le.applyAndGetBeams(h):[];(new Ne).joinVoices([h]).joinVoices([c]).formatToStave([h,c],i,{align_rests:r.align_rests}),h.draw(t,i),c.draw(t,e),d.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(m(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=ke(t,e.line,n,!1);else if(n>0&&nNe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=z.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new p("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const c=r.getWidth();this.minTotalWidth+=c})),this.hasMinTotalWidth=!0;const c=s>0?s/a.length:1/a.length,d=w(a.map((t=>Math.pow(t-c,2)))),l=Math.pow(d/a.length,.5)/c,m=n/o.length,g=w(o.map((t=>Math.pow(t-m,2)))),u=Math.pow(g/o.length,.5)/m,_=Math.max(u,l)*r.length*e,x=e*i;return this.minTotalWidth+Math.max(x,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new p("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new p("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new p("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===Xt.Mode.STRICT&&!i.isComplete())throw new p("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,E.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=Ne.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new E(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new ge;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=Ne.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new E(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new p("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let c=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();c+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:d,softmaxFactor:l,maxIterations:m}=this.formatterOptions,g=w(a.map((t=>Math.pow(l,o[t].getMaxTicks().value()/c))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const u=o[a[0]],_=o[a[a.length-1]];function x(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let a=0,o=1/0,h=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),c=i[t].getMetrics(),d=i[t].getX()+c.notePx+c.modRightPx+c.rightDisplacedHeadPx;o=Math.min(o,h-d)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),d){const e=c;h=Math.pow(l,a/e)/g*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function y(t){const e=S/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=f(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-u.getX()}const S=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-u.getMetrics().totalLeftPx,T=z.currentMusicFont(),v=T.lookupMetric("stave.endPaddingMin"),b=T.lookupMetric("stave.endPaddingMax"),E=T.lookupMetric("stave.padding");let B=S;const C=x(B);let P=y(C);if(1===a.length)return 0;const k=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*bM&&F>0||P+A1;)B-=P-M,A=N(B),D=A-(b-v),P=y(x(B)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,c=a.getX()-r.totalLeftPx,d=c-h;this.contextGaps.total+=d,this.contextGaps.gaps.push({x1:h,x2:c}),a.getFormatterMetrics().freedom.left=d,n.getFormatterMetrics().freedom.right=d})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let c=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));c>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(c)):c<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(c)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){Ne.DEBUG&&y("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;Ne.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class De extends L{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=z.currentMusicFont().getMetrics().tuplet;if(!t)throw new p("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new p("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=z.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||De.LOCATION_TOP),Ne.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=De.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+De.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+f(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===De.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=z.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=f(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Re="R",Oe="B";class Le extends L{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new E).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new E(3,i)];if(i>4)return[new E(2,i)];if(i<=4)return[new E(1,i)]}return[new E(1,4)]}static applyAndGetBeams(t,e,i){return Le.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new E(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new p("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(z.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new E(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),c=(d=o,d.reduce(((t,e)=>e.getTicks().clone().add(t)),new E(0,1))).add(e);var d;const l=z.durationToNumber(s.getDuration())<8;if(l&&s.getTuplet()&&(h.numerator*=2),c.greaterThan(h)){if(!l){const e=o.pop();e&&t.push(e)}a.push(o);do{e=c.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else c.equals(h)&&(a.push(o),e=new E(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),c=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let d=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();d=i.getStemDirection()!==t}const l=parseInt(i.getDuration(),10)<8;h||c||d||l?(s.length>0&&t.push(s),s=d?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=z.durationToTicks("4")&&(e=!1)})),e}return!1})),c=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),d=[];return h.forEach((t=>{const i=new Le(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=z.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),d.push(i)})),c.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=z.durationToTicks("4"))throw new p("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Me(t);else if(e&&u(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let c=Number.MAX_VALUE,d=0,l=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let c=a/t.length;const d=s+r*(1.5*i),l=o+d*-e;e===nt.DOWN&&cl&&(c=o-d),n?(e===nt.DOWN&&c>n||e===nt.UP&&c=8&&(d=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,d=!0));const l=c.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(He("Evaluating rule function:",t),!t)throw new p("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw He(i),new p("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(Ye(t)))),i.run&&e.success&&i.run({matches:s}),e}}function Xe(...t){Qe.DEBUG&&y("Vex.Flow.EasyScore",t)}je.DEBUG=!1;class Ve{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class ze{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){Xe("resetPiece"),this.piece=new ze(this.rollingDuration)}setNoteDots(t){Xe("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){Xe("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){Xe("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){Xe("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){Xe("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){Xe("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){Xe("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),Xe("endChord")}commitPiece(){Xe("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=f(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=f(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,c=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),d="auto"===i,l="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:c,duration:a,dots:o,type:r,clef:s,auto_stem:d});d||l.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});l.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,l,this))),this.elements.notes.push(l),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,yt.easyScoreHook,Lt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Ve(this.builder),this.parser=new je(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw Xe(i),new p("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new p("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new p("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{s=!s;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{e=!e;const s=i.checkStave(),n=i.getAbsoluteX(),a=s.getYForBottomText(this.line+3),o=z.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-r/2,a)):oi("pedal_depress",t,n,a,o):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-r/2,a)):oi("pedal_release",t,n,a,o)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&y("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:k.BOLD,style:N.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ci extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",z.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function di(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class li extends L{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:li.TextVerticalPosition.TOP,text_justification:li.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new p("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new p("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),c=(h-this.render_options.arrowhead_length/3)/h;let d,l,m,g;this.render_options.draw_end_arrow||s?(d=Math.round(n+(o-n)*c),l=Math.round(a+(r-a)*c)):(d=o,l=r),this.render_options.draw_start_arrow||s?(m=n+(o-n)*(1-c),g=a+(r-a)*(1-c)):(m=n,g=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,g),t.lineTo(d,l),t.stroke(),t.closePath();const u=Math.atan2(r-a,o-n),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let p,x,f,y,S,T;(this.render_options.draw_end_arrow||s)&&(p=u+Math.PI+this.render_options.arrowhead_angle,f=o+Math.cos(p)*_,y=r+Math.sin(p)*_,x=u+Math.PI-this.render_options.arrowhead_angle,S=o+Math.cos(x)*_,T=r+Math.sin(x)*_,di(t,f,y,o,r,S,T)),(this.render_options.draw_start_arrow||s)&&(p=u+this.render_options.arrowhead_angle,f=n+Math.cos(p)*_,y=a+Math.sin(p)*_,x=u-this.render_options.arrowhead_angle,S=n+Math.cos(x)*_,T=a+Math.sin(x)*_,di(t,f,y,n,a,S,T))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const c=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const d=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=d+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=d+s.padding_right),n.y+=c?-3:1,a.y+=c?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===li.TextJustification.LEFT)h=n.x;else if(r===li.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===li.TextJustification.RIGHT&&(h=a.x-o);let c=0;const d=s.text_position_vertical;return d===li.TextVerticalPosition.TOP?c=e.checkStave().getYForTopText():d===li.TextVerticalPosition.BOTTOM&&(c=e.checkStave().getYForBottomText(z.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,c),t.restore(),this}}li.TEXT_FONT=Object.assign({},L.TEXT_FONT),li.TextVerticalPosition={TOP:1,BOTTOM:2},li.TextJustification=oe;class mi extends L{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new p("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new Ne(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&bt.plotMetrics(t,i,e.y)}))}))}))}}class gi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new p("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new p("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const c=e.indexOf(r)>-1,d=e.indexOf(1)>-1;if(n&&d||a&&c)return;1===e.length&&e.push(e[0]);const l=[];e.forEach(((e,n,a)=>{const h=1===e,c=e===r;let d=i.getYForLine(e-1);0!==n||h?n!==a.length-1||c||(d+=o/2-1):d-=o/2-1,l.push(d),1===s&&h?l.push(t-2):-1===s&&c&&l.push(t+2)})),h.push(l.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=yi.GLYPHS[e];if(!i)throw new p("Invalid dynamics character: "+e);const s=f(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);fi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=yi.GLYPHS[n].width}))}}yi.DEBUG=!1;class Si extends bt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new be(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Ti extends L{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Ti.DEBUG&&y("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),le.renderVibrato(t,i,e,this.render_options)}}function vi(...t){bi.DEBUG&&y("Vex.Flow.Factory",t)}Ti.DEBUG=!1;class bi{static newFromElementId(t,e=500,i=200){return new bi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){vi("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:bi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw vi(this),new p("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Be(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new ui(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new ci(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ye(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Dt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new Si(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new gi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Vt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:dt.CENTER,vJustify:lt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new yt(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new yi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Lt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new ce(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new ge}MultiMeasureRest(t){const e=f(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new Xt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new Ne(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new De(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new Le(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ht({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new li({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Ti({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new xi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new zt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}bi.DEBUG=!1,bi.TEXT_FONT=Object.assign({},L.TEXT_FONT);class wi extends gi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Ei{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new p("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new p("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new p("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new p("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new p("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${z.integerToNote(n)}/${s}`}}var Ni=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return z.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Ni(this,void 0,void 0,(function*(){}))}static getMusicFont(){return z.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return z.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){z.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return z.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){z.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return z.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){z.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return z.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){z.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return z.RESOLUTION}static set RESOLUTION(t){z.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return z.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){z.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return z.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){z.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return z.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){z.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return z.STEM_HEIGHT}static set STEM_HEIGHT(t){z.STEM_HEIGHT=t}static get STEM_WIDTH(){return z.STEM_WIDTH}static set STEM_WIDTH(t){z.STEM_WIDTH=t}static get TIME4_4(){return z.TIME4_4}static get accidentalMap(){return z.accidentalMap}static get unicode(){return z.unicode}static keySignature(t){return z.keySignature(t)}static hasKeySignature(t){return z.hasKeySignature(t)}static getKeySignatures(){return z.getKeySignatures()}static clefProperties(t){return z.clefProperties(t)}static keyProperties(t,e,i){return z.keyProperties(t,e,i)}static durationToTicks(t){return z.durationToTicks(t)}}Ai.Accidental=st,Ai.Annotation=mt,Ai.Articulation=yt,Ai.Barline=At,Ai.BarNote=Dt,Ai.Beam=Le,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Zt,Ai.ChordSymbol=Rt,Ai.Clef=ue,Ai.ClefNote=We,Ai.Crescendo=Ie,Ai.Curve=Ue,Ai.Dot=Ot,Ai.EasyScore=Qe,Ai.Element=L,Ai.Factory=bi,Ai.Font=F,Ai.Formatter=Ne,Ai.Fraction=E,Ai.FretHandFinger=Lt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Vt,Ai.GraceTabNote=wi,Ai.KeyManager=Ei,Ai.KeySignature=_e,Ai.KeySigNote=si,Ai.Modifier=tt,Ai.ModifierContext=ge,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=bt,Ai.NoteHead=Wt,Ai.NoteSubGroup=zt,Ai.Ornament=$t,Ai.Parenthesis=Jt,Ai.Parser=je,Ai.PedalMarking=ri,Ai.Registry=O,Ai.RenderContext=St,Ai.Renderer=he,Ai.RepeatNote=ci,Ai.Repetition=pe,Ai.Stave=Be,Ai.StaveConnector=Pe,Ai.StaveHairpin=Bi,Ai.StaveLine=li,Ai.StaveModifier=Nt,Ai.StaveNote=Ut,Ai.StaveTempo=fe,Ai.StaveText=Se,Ai.StaveTie=Ht,Ai.Stem=nt,Ai.StringNumber=ce,Ai.Stroke=de,Ai.SVGContext=se,Ai.System=mi,Ai.TabNote=gi,Ai.TabSlide=Ci,Ai.TabStave=ui,Ai.TabTie=Yt,Ai.TextBracket=xi,Ai.TextDynamics=yi,Ai.TextFormatter=ct,Ai.TextNote=ye,Ai.TickContext=Kt,Ai.TimeSignature=be,Ai.TimeSigNote=Si,Ai.Tremolo=Pi,Ai.Tuning=ki,Ai.Tuplet=De,Ai.Vibrato=le,Ai.VibratoBracket=Ti,Ai.Voice=Xt,Ai.Volta=Te,Ai.AnnotationHorizontalJustify=dt,Ai.AnnotationVerticalJustify=lt,Ai.ChordSymbolHorizontalJustify=Bt,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=kt,Ai.CurvePosition=Ge,Ai.FontWeight=k,Ai.FontStyle=N,Ai.ModifierPosition=J,Ai.RendererBackends=ne,Ai.RendererLineEndType=ae,Ai.BarlineType=Et,Ai.StaveModifierPosition=wt,Ai.VoltaType=re,Ai.TextBracketPosition=pi,Ai.TextJustification=oe,Ai.VoiceMode=jt;const Di={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Mi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Fi={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ri={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Oi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Li{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;eWi(void 0,void 0,void 0,(function*(){const i=F.load(t);if(i.hasData())return;if(!e){if(!(t in Ii))throw new p("UnknownFont",`Music font ${t} does not exist.`);e=Ii[t]}let s;if("string"==typeof e){const i=yield import(e),n=x().VexFlowFont;s=void 0!==n&&void 0!==n[t]?n[t]:i.Font}else s=e;i.setData(s.data),i.setMetrics(s.metrics)})),function(){{const t=Fi,{fontFamily:e,resolution:i,glyphs:s}=t;F.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!0,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Ri,{fontFamily:e,resolution:i,glyphs:s}=t;F.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Generic SANS font"})}{const t=Oi,{fontFamily:e,resolution:i,glyphs:s}=t;F.load(e,t);const n="@";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Generic SERIF font"})}{const t=Mi,{fontFamily:e,resolution:i,glyphs:s}=t;F.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!0,description:"Text font to pair with the Bravura / Gonville music fonts."})}{const t=Di,{fontFamily:e,resolution:i,glyphs:s}=t;F.load(e,t);const n="b";ct.registerInfo({family:e,resolution:i,glyphs:s,maxSizeGlyph:n,monospaced:!1,bold:!1,italic:!1,superscriptOffset:.66,subscriptOffset:.66,serifs:!1,description:"Text font to pair with the Petaluma music font."})}}(),e=e.default})())); -//# sourceMappingURL=vexflow-core.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-core.js.map b/build/cjs/vexflow-core.js.map deleted file mode 100644 index 1addceaa14..0000000000 --- a/build/cjs/vexflow-core.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-core.js","mappings":";;;;;CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,GACf,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,IACrG,M,aCTA,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,GCNDF,EAAoBQ,EAAI,WACvB,GAA0B,iBAAfV,WAAyB,OAAOA,WAC3C,IACC,OAAOC,MAAQ,IAAIU,SAAS,cAAb,EAGhB,CAFE,MAAOC,GACR,GAAsB,iBAAXb,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBG,EAAoBG,EAAI,CAACQ,EAAKC,IAAUR,OAAOS,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFZ,EAAoBgB,EAAKvB,IACH,oBAAXwB,QAA0BA,OAAOC,aAC1Cd,OAAOC,eAAeZ,EAASwB,OAAOC,YAAa,CAAEC,MAAO,WAE7Df,OAAOC,eAAeZ,EAAS,aAAc,CAAE0B,OAAO,GAAO,E,yCCOvD,SAASC,EAAWT,EAAKU,EAAUC,GAAiB,GAEvD,GAAmB,iBAARX,GAA4B,OAARA,EAC3B,OAAO,EAIX,IAAIY,EAAiBZ,EAAIa,YAEzB,GAAIF,EAAgB,CAEhB,KAAe,OAARX,GAAc,CAEjB,GADAY,EAAiBZ,EAAIa,YACjB,aAAcD,GAAkBA,EAAeE,WAAaJ,EAC5D,OAAO,EAEXV,EAAMP,OAAOsB,eAAef,EAChC,CACA,OAAO,CACX,CAGI,MAAO,aAAcY,GAAkBA,EAAeE,WAAaJ,CAE3E,C,s7EACO,MAAMM,EAAgBhB,GAAQS,EAAWT,EAAKiB,EAASC,YACjDC,EAAgBnB,GAAQS,EAAWT,EAAKiB,EAASG,YACjDC,EAAarB,GAAQS,EAAWT,EAAKiB,EAASK,SAC9CC,EAASvB,GAAQS,EAAWT,EAAKiB,EAASO,KAC1CC,EAAezB,GAAQS,EAAWT,EAAKiB,EAASS,WAChDC,EAAoB3B,GAAQS,EAAWT,EAAKiB,EAASW,gBACrDC,EAAU7B,GAAQS,EAAWT,EAAKiB,EAASa,MAC3CC,EAAmB/B,GAAQS,EAAWT,EAAKiB,EAASe,eACpDC,EAAejC,GAAQS,EAAWT,EAAKiB,EAASiB,WAChDC,EAAmBnC,GAAQS,EAAWT,EAAKiB,EAASmB,eACpDC,EAAarC,GAAQS,EAAWT,EAAKiB,EAASqB,SAGpD,IAAIrB,GACX,SAAWA,GACPA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAuB,aAAI,eAC3BA,EAAkB,QAAI,UACtBA,EAAkB,QAAI,UACtBA,EAAe,KAAI,OACnBA,EAAe,KAAI,OACnBA,EAAsB,YAAI,cAC1BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAc,IAAI,MAClBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAyB,eAAI,iBAC7BA,EAAoB,UAAI,YACxBA,EAAgB,MAAI,QACpBA,EAAoB,UAAI,YACxBA,EAAoB,UAAI,YACxBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAmB,SAAI,WACvBA,EAA2B,iBAAI,mBAC/BA,EAAe,KAAI,OACnBA,EAAmB,SAAI,WACvBA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAwB,cAAI,gBAC5BA,EAAqB,WAAI,aACzBA,EAAqB,WAAI,aACzBA,EAAgB,MAAI,QACpBA,EAAyB,eAAI,iBAC7BA,EAAuB,aAAI,eAC3BA,EAAoB,UAAI,YACxBA,EAAwB,cAAI,gBAC5BA,EAAoB,UAAI,YACxBA,EAAuB,aAAI,eAC3BA,EAAqB,WAAI,aACzBA,EAAoB,UAAI,YACxBA,EAAmB,SAAI,WACvBA,EAAe,KAAI,OACnBA,EAAwB,cAAI,gBAC5BA,EAAuB,aAAI,eAC3BA,EAAiB,OAAI,SACrBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAiB,OAAI,SACrBA,EAAsB,YAAI,cAC1BA,EAAuB,aAAI,eAC3BA,EAAmB,SAAI,WACvBA,EAAmB,SAAI,WACvBA,EAAwB,cAAI,gBAC5BA,EAAsB,YAAI,cAC1BA,EAAkB,QAAI,UACtBA,EAAiB,OAAI,SACrBA,EAAkB,QAAI,UACtBA,EAAyB,eAAI,iBAC7BA,EAAgB,MAAI,QACpBA,EAAgB,MAAI,OACvB,CAnED,CAmEGA,IAAaA,EAAW,CAAC,IClHrB,MAAMsB,UAAqBC,MAC9B3B,YAAY4B,EAAMC,EAAU,IACxBC,MAAM,kBAAoBF,EAAO,KAAOC,GACxCtD,KAAKqD,KAAOA,CAChB,EAIG,SAASG,IACZ,MAA0B,oBAAfzD,WACAA,WAES,oBAAT0D,KACAA,KAEW,oBAAX3D,OACAA,YAEW,IAAX,EAAAW,EACA,EAAAA,EAEJC,SAAS,cAATA,EACX,CAKO,SAASgD,EAAQC,EAAGN,EAAO,YAAaC,EAAU,IACrD,QAAUM,IAAND,EACA,MAAM,IAAIR,EAAaE,EAAMC,GAEjC,OAAOK,CACX,CAGO,SAASE,EAAIC,KAAUC,GAC1B,IAAKA,EACD,OACJ,MAAMC,EAAOC,MAAMnD,UAAUoD,MAAMlD,KAAK+C,GAAMI,KAAK,KACnDX,IAAeY,QAAQP,IAAIC,EAAQ,KAAOE,EAC9C,CAGO,SAASK,KAAQN,GACpB,MAAMC,EAAOD,EAAKI,KAAK,KACjBG,EAAM,IAAIlB,MAChBI,IAAeY,QAAQP,IAAI,YAAaG,EAAMM,EAAIC,MACtD,CAMO,SAASC,EAAQC,EAAGC,GACvB,IAAIC,EAAWD,GAAKD,EAAIC,GAAK,EALjC,IAAgBf,EAAGiB,EASf,OAHID,EAAW,EAAI,IACfA,IAPQhB,EAOqB,GAAXgB,IAPPC,EAOsB,IANrBA,EAAI,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,EAAIA,EAAIC,SAAS,GAAGlB,EAAIiB,EAAK,IAAMA,GAM5C,IAEnCD,CACX,CAKO,SAASG,EAAOC,GACnB,MAAO,MAAMA,GACjB,CAIO,SAASC,EAAeP,GAK3B,OAJAA,GAAS,EAAIQ,KAAKC,IACV,IACJT,GAAK,EAAIQ,KAAKC,IAEXT,CACX,CAIO,SAASU,EAASC,GACrB,OAAOA,EAAIC,QAAO,CAACZ,EAAGC,IAAMD,EAAIC,GAAG,EACvC,CC9EO,MAAMY,EACE5D,sBACP,OAAOG,EAASyD,QACpB,CAKAC,WAAWd,EAAGC,GACV,GAAiB,iBAAND,GAAkBe,OAAOC,MAAMhB,IAAmB,iBAANC,GAAkBc,OAAOC,MAAMf,GAClF,MAAM,IAAIvB,EAAa,cAAe,oBAAoBsB,MAAMC,KAEpE,IAAIgB,EACJ,KAAa,IAANhB,GACHgB,EAAIhB,EACJA,EAAID,EAAIC,EACRD,EAAIiB,EAER,OAAOjB,CACX,CAEAc,WAAWd,EAAGC,GACV,OAAQD,EAAIC,EAAKY,EAASK,IAAIlB,EAAGC,EACrC,CAEAa,YAAYxB,GACR,OAAoB,IAAhBA,EAAK6B,OACE,EAEc,IAAhB7B,EAAK6B,OACH7B,EAAK,GAES,IAAhBA,EAAK6B,OACHN,EAASO,IAAI9B,EAAK,GAAIA,EAAK,IAK3BuB,EAASO,IAAI9B,EAAK+B,QAASR,EAASS,KAAKhC,GAExD,CAEAtC,YAAYuE,EAAWC,GACnBjG,KAAKgG,UAAY,EACjBhG,KAAKiG,YAAc,EACnBjG,KAAKkG,IAAIF,EAAWC,EACxB,CAEAC,IAAIF,EAAY,EAAGC,EAAc,GAG7B,OAFAjG,KAAKgG,UAAYA,EACjBhG,KAAKiG,YAAcA,EACZjG,IACX,CAEAoB,QACI,OAAOpB,KAAKgG,UAAYhG,KAAKiG,WACjC,CAEAE,WACI,IAAIC,EAAIpG,KAAKgG,UACTK,EAAIrG,KAAKiG,YACb,MAAMK,EAAMhB,EAASK,IAAIS,EAAGC,GAO5B,OANAD,GAAKE,EACLD,GAAKC,EACDD,EAAI,IACJA,GAAKA,EACLD,GAAKA,GAEFpG,KAAKkG,IAAIE,EAAGC,EACvB,CAEAE,IAAIC,EAAS,EAAGC,EAAS,GACrB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMvB,EAASO,IAAI7F,KAAKiG,YAAaU,GACrClC,EAAIoC,EAAM7G,KAAKiG,YACfvB,EAAImC,EAAMF,EACVP,EAAIpG,KAAKgG,UAAYvB,EAAIiC,EAAiBhC,EAChD,OAAO1E,KAAKkG,IAAIE,EAAGS,EACvB,CAEAC,SAASN,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GACxEI,EAAMvB,EAASO,IAAI7F,KAAKiG,YAAaU,GACrClC,EAAIoC,EAAM7G,KAAKiG,YACfvB,EAAImC,EAAMF,EACVP,EAAIpG,KAAKgG,UAAYvB,EAAIiC,EAAiBhC,EAChD,OAAO1E,KAAKkG,IAAIE,EAAGS,EACvB,CAEAE,SAASP,EAAS,EAAGC,EAAS,GAC1B,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOzG,KAAKkG,IAAIlG,KAAKgG,UAAYU,EAAgB1G,KAAKiG,YAAcU,EACxE,CAEAK,OAAOR,EAAS,EAAGC,EAAS,GACxB,MAAOC,EAAgBC,GAAoBC,EAA2BJ,EAAQC,GAC9E,OAAOzG,KAAKkG,IAAIlG,KAAKgG,UAAYW,EAAkB3G,KAAKiG,YAAcS,EAC1E,CAEAO,OAAOC,GACH,MAAMzC,EAAIa,EAAS6B,kBAAkBC,KAAKF,GAASf,WAC7CzB,EAAIY,EAAS+B,kBAAkBD,KAAKpH,MAAMmG,WAChD,OAAO1B,EAAEuB,YAActB,EAAEsB,WAAavB,EAAEwB,cAAgBvB,EAAEuB,WAC9D,CAEAqB,YAAYJ,GACR,MAAMzC,EAAIa,EAAS+B,kBAAkBD,KAAKpH,MAE1C,OADAyE,EAAEqC,SAASI,GACJzC,EAAEuB,UAAY,CACzB,CAEAuB,kBAAkBL,GACd,MAAMzC,EAAIa,EAAS+B,kBAAkBD,KAAKpH,MAE1C,OADAyE,EAAEqC,SAASI,GACJzC,EAAEuB,WAAa,CAC1B,CAEAwB,SAASN,GACL,OAAQlH,KAAKuH,kBAAkBL,EACnC,CAEAO,eAAeP,GACX,OAAQlH,KAAKsH,YAAYJ,EAC7B,CAEAQ,QACI,OAAO,IAAIpC,EAAStF,KAAKgG,UAAWhG,KAAKiG,YAC7C,CAEAmB,KAAKO,GACD,MAAqB,iBAAVA,EACA3H,KAAKkG,IAAIyB,EAAO,GAGhB3H,KAAKkG,IAAIyB,EAAM3B,UAAW2B,EAAM1B,YAE/C,CAEA2B,WACI,OAAO3C,KAAK4C,MAAM7H,KAAKgG,UAAYhG,KAAKiG,YAC5C,CAEA6B,YACI,OAAO9H,KAAKgG,UAAYhG,KAAKiG,WACjC,CAEA8B,UAGI,OAFA/H,KAAKiG,YAAchB,KAAK+C,IAAIhI,KAAKiG,aACjCjG,KAAKgG,UAAYf,KAAK+C,IAAIhI,KAAKgG,WACxBhG,IACX,CAEAiI,WACI,MAAO,GAAGjI,KAAKgG,aAAahG,KAAKiG,aACrC,CAEAiC,qBACI,OAAO5C,EAAS6C,oBAAoBf,KAAKpH,MAAMmG,WAAW8B,UAC9D,CAEAG,gBACI,IAAIC,EAAI,GACR,MAAMC,EAAItI,KAAK4H,WACTW,EAAIjD,EAAS6C,oBAAoBf,KAAKpH,MAgB5C,OAfIsI,EAAI,GACJC,EAAER,UAEI,IAANO,GACAD,GAAKC,EACe,IAAhBC,EAAEvC,YACFqC,GAAK,IAAIE,EAAEL,yBAIfG,EADqB,IAAhBE,EAAEvC,UACH,IAGAuC,EAAEL,qBAEHG,CACX,CAEAG,MAAMC,GACF,MAAMC,EAAID,EAAIE,MAAM,KACd/D,EAAIC,SAAS6D,EAAE,GAAI,IACnBrC,EAAIqC,EAAE,GAAK7D,SAAS6D,EAAE,GAAI,IAAM,EACtC,OAAO1I,KAAKkG,IAAItB,EAAGyB,EACvB,EAOJ,SAASO,EAA2BhC,EAAGyB,EAAI,GACvC,MAAiB,iBAANzB,EAEA,CAACA,EAAGyB,GAIJ,CAACzB,EAAEoB,UAAWpB,EAAEqB,YAE/B,CAbAX,EAAS6B,kBAAoB,IAAI7B,EACjCA,EAAS+B,kBAAoB,IAAI/B,EACjCA,EAAS6C,oBAAsB,IAAI7C,ECtM5B,MAAMsD,EAITrD,YAAYsD,GACR,OAAO,IAAID,EAAYC,EAAKlF,EAAGkF,EAAKC,EAAGD,EAAKE,EAAGF,EAAKG,EACxD,CACAvH,YAAYkC,EAAGmF,EAAGC,EAAGC,GACjBhJ,KAAK2D,EAAIA,EACT3D,KAAK8I,EAAIA,EACT9I,KAAK+I,EAAIA,EACT/I,KAAKgJ,EAAIA,CACb,CAEAC,OACI,OAAOjJ,KAAK2D,CAChB,CAEAuF,OACI,OAAOlJ,KAAK8I,CAChB,CAEAK,OACI,OAAOnJ,KAAK+I,CAChB,CAEAK,OACI,OAAOpJ,KAAKgJ,CAChB,CAEAK,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEAsJ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CAEAuJ,KAAKR,GAED,OADA/I,KAAK+I,EAAIA,EACF/I,IACX,CAEAwJ,KAAKR,GAED,OADAhJ,KAAKgJ,EAAIA,EACFhJ,IACX,CAEAyJ,KAAK9F,EAAGmF,GAGJ,OAFA9I,KAAK2D,GAAKA,EACV3D,KAAK8I,GAAKA,EACH9I,IACX,CAEA0H,QACI,OAAOkB,EAAYxB,KAAKpH,KAC5B,CAKA0J,UAAUC,GACN,MAAMd,EAAOc,EACPC,EAAQ5J,KAAK2D,EAAIkF,EAAKlF,EAAI3D,KAAK2D,EAAIkF,EAAKlF,EACxCkG,EAAQ7J,KAAK8I,EAAID,EAAKC,EAAI9I,KAAK8I,EAAID,EAAKC,EACxCgB,EAAQ7E,KAAK8E,IAAI/J,KAAK2D,EAAI3D,KAAK+I,EAAGF,EAAKlF,EAAIkF,EAAKE,GAAKa,EACrDI,EAAQ/E,KAAK8E,IAAI/J,KAAK8I,EAAI9I,KAAKgJ,EAAGH,EAAKC,EAAID,EAAKG,GAAKa,EAK3D,OAJA7J,KAAK2D,EAAIiG,EACT5J,KAAK8I,EAAIe,EACT7J,KAAK+I,EAAIe,EACT9J,KAAKgJ,EAAIgB,EACFhK,IACX,ECjEG,MAAMiK,EACTxI,cACIzB,KAAKkK,GAAK1E,OAAO2E,IACjBnK,KAAKoK,GAAK5E,OAAO2E,IACjBnK,KAAKqK,GAAK7E,OAAO2E,IACjBnK,KAAKsK,GAAK9E,OAAO2E,GACrB,CAEAI,QACI,OAAOvK,KAAKkK,EAChB,CAEAM,QACI,OAAOxK,KAAKoK,EAChB,CAEAK,QACI,OAAOzK,KAAKqK,GAAKrK,KAAKkK,EAC1B,CAEAQ,SACI,OAAO1K,KAAKsK,GAAKtK,KAAKoK,EAC1B,CAEAO,SAAShH,EAAGmF,IACJrD,MAAMzF,KAAKkK,KAAOvG,EAAI3D,KAAKkK,MAC3BlK,KAAKkK,GAAKvG,IACV8B,MAAMzF,KAAKqK,KAAO1G,EAAI3D,KAAKqK,MAC3BrK,KAAKqK,GAAK1G,IACV8B,MAAMzF,KAAKoK,KAAOtB,EAAI9I,KAAKoK,MAC3BpK,KAAKoK,GAAKtB,IACVrD,MAAMzF,KAAKsK,KAAOxB,EAAI9I,KAAKsK,MAC3BtK,KAAKsK,GAAKxB,EAClB,CAEA8B,KAAKjH,GACD3D,KAAK2K,SAAShH,EAAG3D,KAAKoK,GAC1B,CAEAS,KAAK/B,GACD9I,KAAK2K,SAAS3K,KAAKkK,GAAIpB,EAC3B,CAEAgC,kBAAkBC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GACvCpL,KAAK2K,SAASI,EAAKC,GACnBhL,KAAK2K,SAASQ,EAAKC,GACnB,MAAMC,EAAOJ,EAAMF,EAEnB,IAAIO,EAAQD,GADCF,EAAMF,GAEnB,GAAa,GAATK,EAAY,CACZ,MAAM5F,EAAI2F,EAAOC,EACjB,GAAI5F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM6F,EAAK,EAAI7F,EACf1F,KAAK4K,KAAKW,EAAKA,EAAKR,EAAM,EAAIQ,EAAK7F,EAAIuF,EAAMvF,EAAIA,EAAIyF,EACzD,CACJ,CACA,MAAMK,EAAON,EAAMF,EAGnB,GADAM,EAAQE,GADKJ,EAAMF,GAEN,GAATI,EAAY,CACZ,MAAM5F,EAAI8F,EAAOF,EACjB,GAAI5F,EAAI,GAAKA,EAAI,EAAG,CAChB,MAAM6F,EAAK,EAAI7F,EACf1F,KAAK6K,KAAKU,EAAKA,EAAKP,EAAM,EAAIO,EAAK7F,EAAIwF,EAAMxF,EAAIA,EAAI0F,EACzD,CACJ,CACJ,CAEAK,eAAeV,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKM,EAAKC,GAE9C,MAAMC,EAAK,CAACb,EAAKC,GACXa,EAAK,CAACZ,EAAKC,GACXY,EAAK,CAACX,EAAKC,GACXW,EAAK,CAACL,EAAKC,GACjB,IAAIjD,EACJ1I,KAAK2K,SAASiB,EAAG,GAAIA,EAAG,IACxB5L,KAAK2K,SAASoB,EAAG,GAAIA,EAAG,IACxB,MAAMxD,EAAI,CAAC7C,EAAGgD,IAAMzD,KAAK+G,IAAI,EAAItG,EAAG,GAAKkG,EAAGlD,GACxC,EAAIzD,KAAK+G,IAAI,EAAItG,EAAG,GAAKA,EAAImG,EAAGnD,GAChC,GAAK,EAAIhD,GAAKT,KAAK+G,IAAItG,EAAG,GAAKoG,EAAGpD,GAClCzD,KAAK+G,IAAItG,EAAG,GAAKqG,EAAGrD,GACxB,IAAKA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CACrB,MAAMhE,EAAI,EAAIkH,EAAGlD,GAAK,GAAKmD,EAAGnD,GAAK,EAAIoD,EAAGpD,GACpCjE,GAAK,EAAImH,EAAGlD,GAAK,EAAImD,EAAGnD,GAAK,EAAIoD,EAAGpD,GAAK,EAAIqD,EAAGrD,GAChDuD,EAAI,EAAIJ,EAAGnD,GAAK,EAAIkD,EAAGlD,GAC7B,GAAU,IAANjE,EAAS,CACT,GAAU,IAANC,EACA,SACJ,MAAMgB,GAAKuG,EAAIvH,EACX,EAAIgB,GAAKA,EAAI,IACH,IAANgD,GACA1I,KAAK4K,KAAKrC,EAAE7C,EAAGgD,IACT,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE7C,EAAGgD,KAEvB,QACJ,CACA,MAAMwD,EAAOjH,KAAK+G,IAAItH,EAAG,GAAK,EAAIuH,EAAIxH,EACtC,GAAIyH,EAAO,EACP,SACJ,MAAMC,IAAOzH,EAAIO,KAAKmH,KAAKF,KAAU,EAAIzH,GACrC,EAAI0H,GAAMA,EAAK,IACL,IAANzD,GACA1I,KAAK4K,KAAKrC,EAAE4D,EAAIzD,IACV,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE4D,EAAIzD,KAExB,MAAM2D,IAAO3H,EAAIO,KAAKmH,KAAKF,KAAU,EAAIzH,GACrC,EAAI4H,GAAMA,EAAK,IACL,IAAN3D,GACA1I,KAAK4K,KAAKrC,EAAE8D,EAAI3D,IACV,IAANA,GACA1I,KAAK6K,KAAKtC,EAAE8D,EAAI3D,IAE5B,CACJ,EC9HJ,IAUW4D,EAKAC,EAfPC,EAAwC,SAAUC,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAaA,IAAIM,GAVJ,SAAWlB,GACPA,EAAmB,OAAI,SACvBA,EAAiB,KAAI,MACxB,CAHD,CAGGA,IAAeA,EAAa,CAAC,IAEhC,SAAWC,GACPA,EAAkB,OAAI,SACtBA,EAAkB,OAAI,QACzB,CAHD,CAGGA,IAAcA,EAAY,CAAC,IAG9B,MAAMkB,EAAQ,CAAC,EACR,MAAMC,EAOTnI,+BAA+BoI,EAAWD,EAAKE,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAAWD,EAAKI,cAAcC,GAEpC,CACD,MAAM3M,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,GADsD,QAAnCyM,EAAKH,EAAKI,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,EAE9F,CACJ,CAOAtI,+BAA+BoI,EAAWD,EAAKE,MAC3C,IAAIC,EACJ,GAAwB,iBAAbF,EAEP,OAAOA,EAEN,CACD,MAAMvM,EAAQ4M,WAAWL,GACzB,GAAIlI,MAAMrE,GACN,OAAO,EAEX,MAAM6M,EAAON,EAASO,QAAQ,WAAY,IAAIC,cAE9C,OAAO/M,IADuD,QAAnCyM,EAAKH,EAAKI,cAAcG,UAA0B,IAAPJ,EAAgBA,EAAK,GAAKH,EAAKI,cAAcC,GAEvH,CACJ,CAQAxI,gBAAgBgD,EAAG6F,EAAMC,EAAQC,GAG7B,GAAiB,iBAAN/F,QAA2B3E,IAATwK,QAAiCxK,IAAXyK,QAAkCzK,IAAV0K,EACvE,OAAOZ,EAAKa,cAAchG,GAE9B,IAAIiG,EA+BJ,MA9BiB,iBAANjG,GAEPiG,EAASjG,EAAEiG,OACXJ,EAAO7F,EAAE6F,KACTC,EAAS9F,EAAE8F,OACXC,EAAQ/F,EAAE+F,OAIVE,EAASjG,EAEbiG,EAASA,QAAuCA,EAASd,EAAKe,WAC9DL,EAAOA,QAAmCA,EAAOV,EAAKE,KAAO,KAC7DS,EAASA,QAAuCA,EAAS/B,EAAWoC,OACpEJ,EAAQA,QAAqCA,EAAQ/B,EAAUmC,OAChD,KAAXL,IACAA,EAAS/B,EAAWoC,QAEV,KAAVJ,IACAA,EAAQ/B,EAAUmC,QAGF,iBAATN,IACPA,EAAO,GAAGA,OAGQ,iBAAXC,IACPA,EAASA,EAAOpG,YAGb,CAAEuG,SAAQJ,OAAMC,SAAQC,QACnC,CAIA/I,qBAAqBoJ,GAIZnB,IACDA,EAAaoB,SAASC,cAAc,SAExCrB,EAAWc,MAAMQ,KAAOH,EACxB,MAAM,WAAEI,EAAU,SAAEpB,EAAQ,WAAEqB,EAAU,UAAEC,GAAczB,EAAWc,MACnE,MAAO,CAAEE,OAAQO,EAAYX,KAAMT,EAAUU,OAAQW,EAAYV,MAAOW,EAC5E,CAIA1J,mBAAmB2J,GACf,IAAIrB,EACJ,IAAKqB,EACD,MAAO,GAEX,IAAIZ,EACJ,MAAMa,EAAKD,EAASZ,MAOpB,IAAID,EALAC,EADAa,IAAO5C,EAAUmC,QAAiB,KAAPS,QAAoBvL,IAAPuL,EAChC,GAGAA,EAAGC,OAAS,IAGxB,MAAMC,EAAKH,EAASb,OAUpB,IAAID,EARAC,EADAgB,IAAO/C,EAAWoC,QAAiB,KAAPW,QAAoBzL,IAAPyL,EAChC,GAEU,iBAAPA,EACHA,EAAK,IAGLA,EAAGD,OAAS,IAGzB,MAAME,EAAKJ,EAASd,KAEhBA,OADOxK,IAAP0L,EACO5B,EAAKE,KAAO,MAEA,iBAAP0B,EACLA,EAAK,MAILA,EAAGF,OAAS,IAGvB,MAAO,GAAGd,IAAQD,IAASD,IADe,QAA1BP,EAAKqB,EAASV,cAA2B,IAAPX,EAAgBA,EAAKH,EAAKe,YAEhF,CAQAlJ,iBAAiBoI,EAAU4B,GACvB,GAAwB,iBAAb5B,EACP,OAAQA,EAAW4B,EAKnB,MAAO,GAFOvB,WAAWL,GAEP4B,IADL5B,EAASO,QAAQ,WAAY,KAGlD,CAKA3I,cAAc8I,GACV,GAAKA,EAGA,IAAsB,iBAAXA,EACZ,OAAOA,GAAU,IAEhB,CAED,MAAMmB,EAAe3K,SAASwJ,EAAQ,IACtC,OAAI5I,MAAM+J,GAC0B,SAAzBnB,EAAOF,cAGPqB,GAAgB,GAE/B,EAdI,OAAO,CAef,CAKAjK,gBAAgB+I,GACZ,QAAKA,GAIMA,EAAMH,gBAAkB5B,EAAUkD,MAEjD,CAUAlK,mBAAmBmK,EAAUC,EAASC,GAAe,GACjD,OAAOpD,EAAUxM,UAAM,OAAQ,GAAQ,YACnC,MAKM6P,EAAW,IAAIC,SAASJ,GALbE,EAAe,OAAOD,wBAAgC,IACtD,OAAOA,qBASxB,aAJME,EAASE,OAGfnB,SAASoB,MAAMzJ,IAAIsJ,GACZA,CACX,GACJ,CAYAtK,sBACI,OAAOiH,EAAUxM,UAAM,OAAQ,GAAQ,YACnC,MAAMiQ,EAAOvC,EAAKwC,cACZC,EAAQzC,EAAK0C,eACnB,IAAK,MAAMV,KAAYS,EAAO,CAC1B,MAAME,EAAWF,EAAMT,GACvBhC,EAAK4C,YAAYZ,EAAUO,EAAOI,EACtC,CACJ,GACJ,CAUA9K,YAAYmK,EAAUa,EAAMC,GACxB,IAAI1B,EAAOrB,EAAMiC,GAWjB,OAVKZ,IACDA,EAAO,IAAIpB,EAAKgC,GAChBjC,EAAMiC,GAAYZ,GAElByB,GACAzB,EAAK2B,QAAQF,GAEbC,GACA1B,EAAK4B,WAAWF,GAEb1B,CACX,CAKArN,YAAYiO,GACR1P,KAAK2Q,KAAOjB,CAChB,CACAkB,UACI,OAAO5Q,KAAK2Q,IAChB,CACAE,UACI,OAAOnN,EAAQ1D,KAAKuQ,KAAM,YAAa,oBAC3C,CACAO,aACI,OAAOpN,EAAQ1D,KAAKwQ,QAAS,YAAa,kBAC9C,CACAC,QAAQF,GACJvQ,KAAKuQ,KAAOA,CAChB,CACAG,WAAWF,GACPxQ,KAAKwQ,QAAUA,CACnB,CACAO,UACI,YAAqBnN,IAAd5D,KAAKuQ,IAChB,CACAS,gBACI,OAAOhR,KAAK6Q,UAAUI,UAC1B,CACAC,YACI,OAAOlR,KAAK6Q,UAAUM,MAC1B,CAQAC,aAAajR,EAAKkR,GACd,MAAMC,EAAWnR,EAAIwI,MAAM,KAE3B,IAAI4I,EAAUvR,KAAK8Q,aACnB,IAAK,IAAIpI,EAAI,EAAGA,EAAI4I,EAAS1L,OAAQ8C,IAAK,CACtC,MACMtH,EAAQmQ,EADED,EAAS5I,IAEzB,QAAc9E,IAAVxC,EAEA,OAAOiQ,EAGXE,EAAUnQ,CACd,CAEA,OAAOmQ,CACX,CAEAtJ,WACI,MAAO,IAAMjI,KAAK2Q,KAAO,QAC7B,EAKJjD,EAAKe,WAAa,oBAElBf,EAAK8D,MAAQ,yBAEb9D,EAAKE,KAAO,GAGZF,EAAKI,cAAgB,CACjBC,GAAI,EAAI,EACR0D,GAAI,EACJC,GAAI,GACJ,IAAK,IACLC,GAAI,GACJC,GAAI,GAAK,KACTC,GAAI,GAAK,MAObnE,EAAKwC,cAAgB,yCAMrBxC,EAAK0C,eAAiB,CAClB,cAAe,0CACf0B,eAAgB,wCCvWpB,MAAMC,EACFtQ,cACIzB,KAAKgS,GAAK,CAAC,EACXhS,KAAKiS,KAAO,CAAC,EACbjS,KAAKkS,MAAQ,CAAC,CAClB,EAEG,MAAMC,EACT5M,4BACI,OAAO4M,EAASC,eACpB,CAGA7M,6BAA6B8M,GACzBF,EAASC,gBAAkBC,CAC/B,CACA9M,gCACI4M,EAASC,qBAAkBxO,CAC/B,CACAnC,cACIzB,KAAKsS,MAAQ,IAAIP,CACrB,CACAQ,QAEI,OADAvS,KAAKsS,MAAQ,IAAIP,EACV/R,IACX,CACAwS,cAAc7B,EAAMvP,EAAO4Q,EAAIS,GAC3B,MAAMH,EAAQtS,KAAKsS,MACdA,EAAM3B,GAAMvP,KACbkR,EAAM3B,GAAMvP,GAAS,CAAC,GAE1BkR,EAAM3B,GAAMvP,GAAO4Q,GAAMS,CAC7B,CAGAC,aAAY,GAAEV,EAAE,KAAErB,EAAI,MAAEvP,EAAK,SAAEuR,IAC3B,MAAMF,EAAOzS,KAAK4S,eAAeZ,QAChBpO,IAAb+O,GAA0B3S,KAAKsS,MAAM3B,GAAMgC,WACpC3S,KAAKsS,MAAM3B,GAAMgC,GAAUX,GAElC5Q,GAASqR,GACTzS,KAAKwS,cAAc7B,EAAMvP,EAAOqR,EAAKI,aAAa,MAAOJ,EAEjE,CAQAK,SAASL,EAAMT,GAEX,KADAA,EAAKA,GAAMS,EAAKI,aAAa,OAEzB,MAAM,IAAI1P,EAAa,wDAO3B,OAJAsP,EAAKM,aAAa,KAAMf,GACxBhS,KAAKwS,cAAc,KAAMR,EAAIA,EAAIS,GACjCzS,KAAK0S,YAAY,CAAEV,KAAIrB,KAAM,OAAQvP,MAAOqR,EAAKI,aAAa,QAASF,cAAU/O,IACjF6O,EAAKO,WAAWhT,MACTA,IACX,CACA4S,eAAeZ,GACX,IAAInE,EAAIoF,EACR,OAAmF,QAA3EA,EAA8B,QAAxBpF,EAAK7N,KAAKsS,MAAMN,UAAuB,IAAPnE,OAAgB,EAASA,EAAGmE,UAAwB,IAAPiB,OAAgB,EAASA,EAAGjB,EAC3H,CACAkB,uBAAuBC,EAAW/R,GAC9B,MAAMgS,EAAapT,KAAKsS,MAAMa,GAC9B,GAAIC,EAAY,CACZ,MAAMC,EAAiBD,EAAWhS,GAClC,GAAIiS,EAAgB,CAEhB,OADahT,OAAOiT,KAAKD,GACbE,KAAKC,GAAMH,EAAeG,IAC1C,CACJ,CACA,MAAO,EACX,CACAC,kBAAkBxB,GACd,OAAOjS,KAAKkT,uBAAuB,OAAQjB,EAC/C,CACAyB,mBAAmBC,GACf,OAAO3T,KAAKkT,uBAAuB,QAASS,EAChD,CAGAC,SAASC,GAKL,MAJqB,CAAC,KAAM,OAAQ,SACnBC,SAASD,EAAKlD,OAC3B3Q,KAAK0S,YAAYmB,GAEd7T,IACX,EClGG,MAAM+T,EACErS,sBACP,OAAOG,EAASkS,OACpB,CACAxO,eACI,MAAO,OAAOwO,EAAQC,IAC1B,CACAvS,cACI,IAAIoM,EAGJ7N,KAAKiU,SAAW,GAChBjU,KAAKkU,MAAQ,CACTlC,GAAI+B,EAAQI,QACZlC,KAAMjS,KAAKoU,cACXlC,MAAO,IAEXlS,KAAKqU,UAAW,EAEyB,QAAxCxG,EAAKsE,EAASmC,4BAAyC,IAAPzG,GAAyBA,EAAGiF,SAAS9S,KAC1F,CAUAuU,gBAAgBC,GAEZ,OADAxU,KAAKiU,SAASQ,KAAKD,GACZxU,IACX,CACAoU,cACI,OAAOpU,KAAKyB,YAAYC,QAC5B,CAuBAgT,SAASpG,GAEL,OADAtO,KAAKsO,MAAQA,EACNtO,IACX,CAEA2U,cAAcrG,GAGV,OAFAtO,KAAKsO,MAAQA,EACbtO,KAAKiU,SAASW,SAASJ,GAAUA,EAAMG,cAAcrG,KAC9CtO,IACX,CAEA6U,WACI,OAAO7U,KAAKsO,KAChB,CAEAwG,WAAWC,EAAU/U,KAAK+U,QAASzG,EAAQtO,KAAK6U,YAC5C,OAAKvG,GAEAyG,GAELA,EAAQC,OACJ1G,EAAM2G,aACNF,EAAQG,eAAe5G,EAAM2G,aAC7B3G,EAAM6G,YACNJ,EAAQK,cAAc9G,EAAM6G,YAC5B7G,EAAM+G,WACNN,EAAQO,aAAahH,EAAM+G,WAC3B/G,EAAMiH,aACNR,EAAQS,eAAelH,EAAMiH,aAC7BjH,EAAMmH,WACNV,EAAQW,aAAapH,EAAMmH,WACxBzV,MAdIA,IAef,CAEA2V,aAAaZ,EAAU/U,KAAK+U,QAASzG,EAAQtO,KAAK6U,YAC9C,OAAKvG,GAEAyG,GAELA,EAAQa,UACD5V,MAJIA,IAKf,CAKA6V,gBACI7V,KAAK8V,eACL9V,KAAK8U,aACL9U,KAAK+V,OACL/V,KAAK2V,cACT,CAEAK,SAASrC,GACL,IAAI9F,EACJ,QAAK7N,KAAKkU,MAAMhC,QAE2F,IAAvE,QAA3BrE,EAAK7N,KAAKkU,MAAMhC,aAA0B,IAAPrE,OAAgB,EAASA,EAAGlF,MAAM,KAAKsN,QAAQtC,GAC/F,CAEAuC,SAASvC,GACL,IAAI9F,EACJ,OAAI7N,KAAKgW,SAASrC,KAEb3T,KAAKkU,MAAMhC,MAGZlS,KAAKkU,MAAMhC,MAAQ,GAAGlS,KAAKkU,MAAMhC,SAASyB,IAF1C3T,KAAKkU,MAAMhC,MAAQ,GAAGyB,IAGD,QAAxB9F,EAAK7N,KAAKqS,gBAA6B,IAAPxE,GAAyBA,EAAG+F,SAAS,CAClE5B,GAAIhS,KAAKkU,MAAMlC,GACfrB,KAAM,QACNvP,MAAOuS,EACPhB,cAAU/O,KATH5D,IAYf,CAEAmW,YAAYxC,GACR,IAAI9F,EAAIoF,EACR,IAAKjT,KAAKgW,SAASrC,GACf,OAAO3T,KACX,MAAMoF,EAAkC,QAA3ByI,EAAK7N,KAAKkU,MAAMhC,aAA0B,IAAPrE,OAAgB,EAASA,EAAGlF,MAAM,KAWlF,OAVIvD,IACAA,EAAIgR,OAAOhR,EAAI6Q,QAAQtC,IACvB3T,KAAKkU,MAAMhC,MAAQ9M,EAAIjB,KAAK,MAEP,QAAxB8O,EAAKjT,KAAKqS,gBAA6B,IAAPY,GAAyBA,EAAGW,SAAS,CAClE5B,GAAIhS,KAAKkU,MAAMlC,GACfrB,KAAM,QACNvP,WAAOwC,EACP+O,SAAUgB,IAEP3T,IACX,CAEAgT,WAAWX,GAEP,OADArS,KAAKqS,SAAWA,EACTrS,IACX,CAEAqW,aACI,OAAOrW,KAAKqU,QAChB,CAEAiC,YAAYjC,GAAW,GAEnB,OADArU,KAAKqU,SAAWA,EACTrU,IACX,CAEAuW,gBACI,OAAOvW,KAAKkU,KAChB,CAGArB,aAAalC,GACT,OAAO3Q,KAAKkU,MAAMvD,EACtB,CAEA6F,cAAcC,EAAS,IACnB,MAAMzE,EAAKlN,EAAO9E,KAAKkU,MAAMlC,GAAKyE,GAC5BC,EAAU9H,SAASgE,eAAeZ,GACxC,GAAI0E,EACA,OAAOA,CACf,CAEA3D,aAAapC,EAAMvP,GACf,IAAIyM,EACJ,MAAM8I,EAAQ3W,KAAKkU,MAAMlC,GACnBW,EAAW3S,KAAKkU,MAAMvD,GAI5B,OAHA3Q,KAAKkU,MAAMvD,GAAQvP,EAEM,QAAxByM,EAAK7N,KAAKqS,gBAA6B,IAAPxE,GAAyBA,EAAG+F,SAAS,CAAE5B,GAAI2E,EAAOhG,OAAMvP,QAAOuR,aACzF3S,IACX,CAEA4W,iBACI,OAAO5W,KAAK2J,WAChB,CAEAkN,aACI,OAAO7W,KAAK+U,OAChB,CAEA+B,WAAW/B,GAEP,OADA/U,KAAK+U,QAAUA,EACR/U,IACX,CAEA8V,eACI,OAAOpS,EAAQ1D,KAAK+U,QAAS,YAAa,6CAC9C,CAOIjG,SAAKvG,GACLvI,KAAK+W,QAAQxO,EACjB,CAEIuG,WACA,OAAOpB,EAAKsJ,YAAYhX,KAAKiX,SACjC,CAgBAF,QAAQjI,EAAMV,EAAMC,EAAQC,GAExB,MAAM4I,EAAkBlX,KAAKyB,YAAY0V,UACnCC,EAA+B,iBAATtI,EACtBuI,EAA+B,iBAATvI,EACtBwI,OAA2B1T,IAATkL,EAClByI,OAAuC3T,IAATwK,QAAiCxK,IAAXyK,QAAkCzK,IAAV0K,EAuBlF,OApBItO,KAAKiX,SAFLG,EAEgB/W,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGN,GAAkBpI,GAE7DuI,GAAgBE,EAEL7J,EAAKa,cAAcO,GAE9BwI,GAAmBC,EAKRlX,OAAOmX,OAAO,CAAC,EAAGN,GAOlBxJ,EAAK+J,SAAS3I,QAAmCA,EAAOoI,EAAgB1I,OAAQJ,QAAmCA,EAAO8I,EAAgB9I,KAAMC,QAAuCA,EAAS6I,EAAgB7I,OAAQC,QAAqCA,EAAQ4I,EAAgB5I,OAElStO,IACX,CAKA0X,UAII,OAHK1X,KAAKiX,UACNjX,KAAK2X,YAEFjK,EAAKsJ,YAAYhX,KAAKiX,SACjC,CAKAU,YACI3X,KAAK+W,SACT,CAEI7H,eAMA,OALKlP,KAAKiX,UACNjX,KAAK2X,YAIFtX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKiX,SAClC,CACI/H,aAASA,GACTlP,KAAK+W,QAAQ7H,EACjB,CAEA0I,YAAYxJ,GACR,MAAMc,EAAWlP,KAAKkP,SAEtB,OADAlP,KAAK+W,QAAQ7H,EAASV,OAAQJ,EAAMc,EAASb,OAAQa,EAASZ,OACvDtO,IACX,CAKA6X,cACI,OAAO7X,KAAK2N,QAChB,CAKIA,aAASS,GACTpO,KAAK4X,YAAYxJ,EACrB,CAIIT,eACA,IAAIS,EAAOpO,KAAKkP,SAASd,KAIzB,MAHoB,iBAATA,IACPA,EAAO,GAAGA,OAEPA,CACX,CAII0J,uBACA,OAAOpK,EAAKqK,wBAAwB/X,KAAK2N,SAC7C,CAIIqK,uBACA,OAAOtK,EAAKuK,wBAAwBjY,KAAK2N,SAC7C,CAIIsB,gBACA,OAAOjP,KAAKkP,SAASZ,KACzB,CACIW,cAAUX,GACV,MAAMY,EAAWlP,KAAKkP,SACtBlP,KAAK+W,QAAQ7H,EAASV,OAAQU,EAASd,KAAMc,EAASb,OAAQC,EAClE,CAKIU,iBACA,OAAOhP,KAAKkP,SAASb,OAAS,EAClC,CACIW,eAAWX,GACX,MAAMa,EAAWlP,KAAKkP,SACtBlP,KAAK+W,QAAQ7H,EAASV,OAAQU,EAASd,KAAMC,EAAQa,EAASZ,MAClE,EAEJyF,EAAQC,GAAK,IAKbD,EAAQoD,UAAY,CAChB3I,OAAQd,EAAKe,WACbL,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QC/XrB,MAAMwJ,EAAa,MAKbC,EAAY,CACd,MAAOD,MACP,EAAGA,MACH,EAAGA,KACH,EAAGA,KACH,EAAGA,KACH,GAAIA,KACJ,GAAIA,IACJ,GAAIA,IACJ,IAAKA,IACL,IAAKA,IAEHE,EAAkB,CACpBrP,EAAG,IACHC,EAAG,IACHV,EAAG,IAIH5D,EAAG,OAED2T,EAAgB,CAClBC,EAAG,CAAEC,IAAK,GACVC,GAAI,CAAED,IAAK,GACXE,EAAG,CAAEC,IAAK,IAAKH,IAAK,GACpBI,GAAI,CAAED,IAAK,IAAKH,IAAK,GACrBK,GAAI,CAAEF,IAAK,IAAKH,IAAK,GACrBM,GAAI,CAAEH,IAAK,IAAKH,IAAK,GACrBO,GAAI,CAAEJ,IAAK,IAAKH,IAAK,GACrBQ,GAAI,CAAEL,IAAK,IAAKH,IAAK,GACrBS,GAAI,CAAEN,IAAK,IAAKH,IAAK,GACrBU,GAAI,CAAEP,IAAK,IAAKH,IAAK,GACrBW,GAAI,CAAER,IAAK,IAAKH,IAAK,GACrBY,IAAK,CAAET,IAAK,IAAKH,IAAK,GACtBa,GAAI,CAAEV,IAAK,IAAKH,IAAK,GACrBc,IAAK,CAAEX,IAAK,IAAKH,IAAK,GACtBe,GAAI,CAAEZ,IAAK,IAAKH,IAAK,GACrBgB,IAAK,CAAEb,IAAK,IAAKH,IAAK,GACtBiB,EAAG,CAAEd,IAAK,IAAKH,IAAK,GACpBkB,GAAI,CAAEf,IAAK,IAAKH,IAAK,GACrBmB,EAAG,CAAEhB,IAAK,IAAKH,IAAK,GACpBoB,GAAI,CAAEjB,IAAK,IAAKH,IAAK,GACrBqB,EAAG,CAAElB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBsB,EAAG,CAAEnB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxBuB,EAAG,CAAEpB,IAAK,IAAKH,IAAK,GACpB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,GACxB,KAAM,CAAEG,IAAK,IAAKH,IAAK,GACvB,MAAO,CAAEG,IAAK,IAAKH,IAAK,IAEtBwB,EAAQ,CACVC,OAAQ,CAAEC,WAAY,GACtBC,KAAM,CAAED,WAAY,GACpBE,MAAO,CAAEF,WAAY,GACrBG,KAAM,CAAEH,WAAY,GACpBI,QAAS,CAAEJ,WAAY,GACvBK,WAAY,CAAEL,WAAY,GAC1B,gBAAiB,CAAEA,WAAY,GAC/B,aAAc,CAAEA,WAAY,GAC5B,aAAc,CAAEA,WAAY,GAC5BM,QAAS,CAAEN,WAAY,GACvBO,OAAQ,CAAEP,YAAa,IAErBQ,EAAY,CACdnC,EAAG,CAAEhG,MAAO,EAAGoI,QAAS,GACxBC,GAAI,CAAErI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CC,GAAI,CAAEvI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzCE,IAAK,CAAExI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC1ClB,EAAG,CAAEpH,MAAO,EAAGoI,QAAS,GACxBK,GAAI,CAAEzI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CI,GAAI,CAAE1I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCK,IAAK,CAAE3I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCf,EAAG,CAAEvH,MAAO,EAAGoI,QAAS,GACxBQ,GAAI,CAAE5I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CO,GAAI,CAAE7I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCQ,IAAK,CAAE9I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCnC,EAAG,CAAEnG,MAAO,EAAGoI,QAAS,GACxBW,GAAI,CAAE/I,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3CU,GAAI,CAAEhJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCW,IAAK,CAAEjJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCpB,EAAG,CAAElH,MAAO,EAAGoI,QAAS,GACxBc,GAAI,CAAElJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KAC1C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MAC3Ca,GAAI,CAAEnJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCc,IAAK,CAAEpJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzChB,EAAG,CAAEtH,MAAO,EAAGoI,QAAS,GACxBiB,GAAI,CAAErJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC5CgB,GAAI,CAAEtJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,KACxCiB,IAAK,CAAEvJ,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCd,EAAG,CAAExH,MAAO,EAAGoI,QAAS,IACxBoB,GAAI,CAAExJ,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzC,KAAM,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KAC3C,MAAO,CAAEtI,MAAO,EAAGoI,QAAS,GAAIE,WAAY,MAC5CmB,GAAI,CAAEzJ,MAAO,EAAGoI,QAAS,GAAIE,WAAY,KACzCoB,IAAK,CAAE1J,MAAO,EAAGoI,QAAS,EAAGE,WAAY,MACzCqB,EAAG,CAAE3J,MAAO,EAAG4J,MAAM,GACrBC,EAAG,CACC7J,MAAO,EACPsI,WAAY,GACZwB,OAAQ,EACR/Y,KAAM,iBACNgZ,YAAa,MAoBfC,EAAc,CAChB,IAAK,CAAEjZ,KAAM,kBAAmBkZ,6BAA8B,GAC9D,KAAM,CAAElZ,KAAM,wBAAyBkZ,6BAA8B,GACrE7X,EAAG,CAAErB,KAAM,iBAAkBkZ,6BAA8B,GAC3DC,GAAI,CAAEnZ,KAAM,uBAAwBkZ,6BAA8B,GAClE3X,EAAG,CAAEvB,KAAM,oBAAqBkZ,6BAA8B,GAC9D,IAAK,CAAElZ,KAAM,uBAAwBkZ,6BAA8B,GACnE,IAAK,CAAElZ,KAAM,wBAAyBkZ,6BAA8B,GACpEE,GAAI,CAAEpZ,KAAM,4CAA6CkZ,6BAA8B,GACvFlW,EAAG,CAAEhD,KAAM,iCAAkCkZ,4BAA6B,GAC1E,KAAM,CAAElZ,KAAM,wCAAyCkZ,6BAA8B,GACrF,IAAK,CAAElZ,KAAM,kCAAmCkZ,6BAA8B,GAC9E,KAAM,CAAElZ,KAAM,+BAAgCkZ,6BAA8B,GAC5EG,GAAI,CAAErZ,KAAM,uBAAwBkZ,6BAA8B,GAClEI,IAAK,CAAEtZ,KAAM,8BAA+BkZ,6BAA8B,GAC1Enc,EAAG,CAAEiD,KAAM,iBAAkBkZ,6BAA8B,GAC3D/I,EAAG,CAAEnQ,KAAM,kBAAmBkZ,6BAA8B,GAC5DK,IAAK,CAAEvZ,KAAM,2BAA4BkZ,6BAA8B,GACvE,MAAO,CAAElZ,KAAM,2BAA4BkZ,6BAA8B,GACzEM,KAAM,CAAExZ,KAAM,2BAA4BkZ,6BAA8B,GACxEO,KAAM,CAAEzZ,KAAM,2BAA4BkZ,6BAA8B,GACxEQ,wBAAyB,CAAE1Z,KAAM,0BAA2BkZ,6BAA8B,GAC1FS,0BAA2B,CAAE3Z,KAAM,4BAA6BkZ,6BAA8B,GAC9FU,oBAAqB,CAAE5Z,KAAM,sBAAuBkZ,6BAA8B,GAClFW,sBAAuB,CAAE7Z,KAAM,wBAAyBkZ,6BAA8B,GACtFY,oBAAqB,CAAE9Z,KAAM,sBAAuBkZ,6BAA8B,GAClFa,sBAAuB,CAAE/Z,KAAM,wBAAyBkZ,6BAA8B,GACtFc,2BAA4B,CAAEha,KAAM,6BAA8BkZ,6BAA8B,GAChGe,6BAA8B,CAAEja,KAAM,+BAAgCkZ,6BAA8B,GACpGgB,4BAA6B,CAAEla,KAAM,8BAA+BkZ,6BAA8B,GAClGiB,8BAA+B,CAAEna,KAAM,gCAAiCkZ,6BAA8B,GACtGkB,4BAA6B,CAAEpa,KAAM,8BAA+BkZ,6BAA8B,GAClGmB,8BAA+B,CAAEra,KAAM,gCAAiCkZ,6BAA8B,GACtGoB,2BAA4B,CAAEta,KAAM,6BAA8BkZ,6BAA8B,GAChGqB,6BAA8B,CAAEva,KAAM,+BAAgCkZ,6BAA8B,GACpGsB,2BAA4B,CAAExa,KAAM,6BAA8BkZ,6BAA8B,GAChGuB,6BAA8B,CAAEza,KAAM,+BAAgCkZ,6BAA8B,GACpGwB,wBAAyB,CAAE1a,KAAM,0BAA2BkZ,6BAA8B,GAC1FyB,qBAAsB,CAAE3a,KAAM,uBAAwBkZ,6BAA8B,GACpF0B,uBAAwB,CAAE5a,KAAM,yBAA0BkZ,6BAA8B,GACxF2B,oBAAqB,CAAE7a,KAAM,sBAAuBkZ,6BAA8B,GAClF4B,uBAAwB,CAAE9a,KAAM,yBAA0BkZ,6BAA8B,GACxF6B,oBAAqB,CAAE/a,KAAM,sBAAuBkZ,6BAA8B,GAClF8B,yBAA0B,CAAEhb,KAAM,2BAA4BkZ,6BAA8B,GAC5F+B,sBAAuB,CAAEjb,KAAM,wBAAyBkZ,6BAA8B,GACtFgC,iBAAkB,CAAElb,KAAM,mBAAoBkZ,6BAA8B,GAC5EiC,gBAAiB,CAAEnb,KAAM,kBAAmBkZ,6BAA8B,GAC1EkC,uBAAwB,CAAEpb,KAAM,yBAA0BkZ,6BAA8B,GACxFmC,wBAAyB,CAAErb,KAAM,0BAA2BkZ,6BAA8B,GAC1FoC,qBAAsB,CAAEtb,KAAM,uBAAwBkZ,6BAA8B,GACpFqC,sBAAuB,CAAEvb,KAAM,wBAAyBkZ,6BAA8B,GACtFsC,qBAAsB,CAAExb,KAAM,uBAAwBkZ,6BAA8B,GACpFuC,sBAAuB,CAAEzb,KAAM,wBAAyBkZ,6BAA8B,GACtFwC,sBAAuB,CAAE1b,KAAM,wBAAyBkZ,6BAA8B,GACtFyC,uBAAwB,CAAE3b,KAAM,yBAA0BkZ,6BAA8B,GACxF0C,sBAAuB,CAAE5b,KAAM,wBAAyBkZ,6BAA8B,GACtF2C,uBAAwB,CAAE7b,KAAM,yBAA0BkZ,6BAA8B,GACxF4C,sBAAuB,CAAE9b,KAAM,wBAAyBkZ,6BAA8B,GACtF6C,uBAAwB,CAAE/b,KAAM,yBAA0BkZ,6BAA8B,GACxF8C,sBAAuB,CAAEhc,KAAM,wBAAyBkZ,6BAA8B,GACtF+C,uBAAwB,CAAEjc,KAAM,yBAA0BkZ,6BAA8B,GACxFgD,sBAAuB,CAAElc,KAAM,wBAAyBkZ,6BAA8B,GACtFiD,uBAAwB,CAAEnc,KAAM,yBAA0BkZ,6BAA8B,GACxFkD,8BAA+B,CAAEpc,KAAM,gCAAiCkZ,6BAA8B,GACtGmD,2BAA4B,CAAErc,KAAM,6BAA8BkZ,6BAA8B,GAChGoD,6BAA8B,CAAEtc,KAAM,+BAAgCkZ,6BAA8B,GACpGqD,0BAA2B,CAAEvc,KAAM,4BAA6BkZ,6BAA8B,GAC9FsD,6BAA8B,CAAExc,KAAM,+BAAgCkZ,6BAA8B,GACpGuD,0BAA2B,CAAEzc,KAAM,4BAA6BkZ,6BAA8B,GAC9FwD,+BAAgC,CAAE1c,KAAM,iCAAkCkZ,6BAA8B,GACxGyD,4BAA6B,CAAE3c,KAAM,8BAA+BkZ,6BAA8B,GAClG0D,uBAAwB,CAAE5c,KAAM,yBAA0BkZ,6BAA8B,GACxF2D,sBAAuB,CAAE7c,KAAM,wBAAyBkZ,6BAA8B,GACtF4D,yBAA0B,CAAE9c,KAAM,2BAA4BkZ,6BAA8B,GAC5F6D,2BAA4B,CAAE/c,KAAM,6BAA8BkZ,6BAA8B,GAChG8D,qBAAsB,CAAEhd,KAAM,uBAAwBkZ,6BAA8B,GACpF+D,uBAAwB,CAAEjd,KAAM,yBAA0BkZ,6BAA8B,GACxFgE,qBAAsB,CAAEld,KAAM,uBAAwBkZ,6BAA8B,GACpFiE,uBAAwB,CAAEnd,KAAM,yBAA0BkZ,6BAA8B,GACxFkE,uBAAwB,CAAEpd,KAAM,yBAA0BkZ,6BAA8B,GACxFmE,yBAA0B,CAAErd,KAAM,2BAA4BkZ,6BAA8B,GAC5FoE,6BAA8B,CAAEtd,KAAM,+BAAgCkZ,6BAA8B,GACpGqE,+BAAgC,CAAEvd,KAAM,iCAAkCkZ,6BAA8B,GACxGsE,0BAA2B,CAAExd,KAAM,4BAA6BkZ,6BAA8B,GAC9FuE,uBAAwB,CAAEzd,KAAM,yBAA0BkZ,6BAA8B,GACxFwE,0BAA2B,CAAE1d,KAAM,4BAA6BkZ,6BAA8B,GAC9FyE,uBAAwB,CAAE3d,KAAM,yBAA0BkZ,6BAA8B,GACxF0E,wBAAyB,CAAE5d,KAAM,0BAA2BkZ,6BAA8B,GAC1F2E,qBAAsB,CAAE7d,KAAM,uBAAwBkZ,6BAA8B,GACpF4E,wBAAyB,CAAE9d,KAAM,0BAA2BkZ,6BAA8B,GAC1F6E,qBAAsB,CAAE/d,KAAM,uBAAwBkZ,6BAA8B,GACpF8E,0BAA2B,CAAEhe,KAAM,4BAA6BkZ,6BAA8B,GAC9F+E,uBAAwB,CAAEje,KAAM,yBAA0BkZ,6BAA8B,GACxFgF,wBAAyB,CAAEle,KAAM,0BAA2BkZ,6BAA8B,GAC1FiF,yBAA0B,CAAEne,KAAM,2BAA4BkZ,6BAA8B,GAC5FkF,sBAAuB,CAAEpe,KAAM,wBAAyBkZ,6BAA8B,GACtFmF,uBAAwB,CAAEre,KAAM,yBAA0BkZ,6BAA8B,GACxFoF,sBAAuB,CAAEte,KAAM,wBAAyBkZ,6BAA8B,GACtFqF,uBAAwB,CAAEve,KAAM,yBAA0BkZ,6BAA8B,GACxFsF,wBAAyB,CAAExe,KAAM,0BAA2BkZ,6BAA8B,GAC1FuF,yBAA0B,CAAEze,KAAM,2BAA4BkZ,6BAA8B,GAC5FwF,wBAAyB,CAAE1e,KAAM,0BAA2BkZ,6BAA8B,GAC1FyF,yBAA0B,CAAE3e,KAAM,2BAA4BkZ,6BAA8B,GAC5F0F,gCAAiC,CAAE5e,KAAM,kCAAmCkZ,6BAA8B,GAC1G2F,6BAA8B,CAAE7e,KAAM,+BAAgCkZ,6BAA8B,GACpG4F,gCAAiC,CAAE9e,KAAM,kCAAmCkZ,6BAA8B,GAC1G6F,6BAA8B,CAAE/e,KAAM,+BAAgCkZ,6BAA8B,GACpG8F,8BAA+B,CAAEhf,KAAM,gCAAiCkZ,6BAA8B,GACtG+F,2BAA4B,CAAEjf,KAAM,6BAA8BkZ,6BAA8B,GAChGgG,8BAA+B,CAAElf,KAAM,gCAAiCkZ,6BAA8B,GACtGiG,2BAA4B,CAAEnf,KAAM,6BAA8BkZ,6BAA8B,GAChGkG,gCAAiC,CAAEpf,KAAM,kCAAmCkZ,6BAA8B,GAC1GmG,6BAA8B,CAAErf,KAAM,+BAAgCkZ,6BAA8B,GACpGoG,qBAAsB,CAAEtf,KAAM,uBAAwBkZ,6BAA8B,GACpFqG,uBAAwB,CAAEvf,KAAM,yBAA0BkZ,6BAA8B,GACxFsG,uBAAwB,CAAExf,KAAM,yBAA0BkZ,6BAA8B,GACxFuG,yBAA0B,CAAEzf,KAAM,2BAA4BkZ,6BAA8B,GAC5FwG,6BAA8B,CAAE1f,KAAM,+BAAgCkZ,6BAA8B,GACpGyG,+BAAgC,CAAE3f,KAAM,iCAAkCkZ,6BAA8B,GACxG0G,0BAA2B,CAAE5f,KAAM,4BAA6BkZ,6BAA8B,GAC9F2G,uBAAwB,CAAE7f,KAAM,yBAA0BkZ,6BAA8B,GACxF4G,0BAA2B,CAAE9f,KAAM,4BAA6BkZ,6BAA8B,GAC9F6G,uBAAwB,CAAE/f,KAAM,yBAA0BkZ,6BAA8B,GACxF8G,wBAAyB,CAAEhgB,KAAM,0BAA2BkZ,6BAA8B,GAC1F+G,qBAAsB,CAAEjgB,KAAM,uBAAwBkZ,6BAA8B,GACpFgH,sBAAuB,CAAElgB,KAAM,wBAAyBkZ,6BAA8B,GACtFiH,uBAAwB,CAAEngB,KAAM,yBAA0BkZ,6BAA8B,GACxFkH,wBAAyB,CAAEpgB,KAAM,0BAA2BkZ,6BAA8B,GAC1FmH,yBAA0B,CAAErgB,KAAM,2BAA4BkZ,6BAA8B,GAC5FoH,wBAAyB,CAAEtgB,KAAM,0BAA2BkZ,6BAA8B,GAC1FqH,yBAA0B,CAAEvgB,KAAM,2BAA4BkZ,6BAA8B,GAC5FsH,gCAAiC,CAAExgB,KAAM,kCAAmCkZ,6BAA8B,GAC1GuH,6BAA8B,CAAEzgB,KAAM,+BAAgCkZ,6BAA8B,GACpGwH,gCAAiC,CAAE1gB,KAAM,kCAAmCkZ,6BAA8B,GAC1GyH,6BAA8B,CAAE3gB,KAAM,+BAAgCkZ,6BAA8B,GACpG0H,8BAA+B,CAAE5gB,KAAM,gCAAiCkZ,6BAA8B,GACtG2H,2BAA4B,CAAE7gB,KAAM,6BAA8BkZ,6BAA8B,GAChG4H,uBAAwB,CAAE9gB,KAAM,yBAA0BkZ,6BAA8B,GACxF6H,yBAA0B,CAAE/gB,KAAM,2BAA4BkZ,6BAA8B,GAC5F8H,uBAAwB,CAAEhhB,KAAM,yBAA0BkZ,6BAA8B,GACxF+H,yBAA0B,CAAEjhB,KAAM,2BAA4BkZ,6BAA8B,GAC5FgI,sBAAuB,CAAElhB,KAAM,wBAAyBkZ,6BAA8B,GACtFiI,wBAAyB,CAAEnhB,KAAM,0BAA2BkZ,6BAA8B,GAC1FkI,wBAAyB,CAAEphB,KAAM,0BAA2BkZ,6BAA8B,GAC1FmI,0BAA2B,CAAErhB,KAAM,4BAA6BkZ,6BAA8B,GAC9FoI,qBAAsB,CAAEthB,KAAM,uBAAwBkZ,6BAA8B,GACpFqI,uBAAwB,CAAEvhB,KAAM,yBAA0BkZ,6BAA8B,GACxFsI,uBAAwB,CAAExhB,KAAM,yBAA0BkZ,6BAA8B,GACxFuI,yBAA0B,CAAEzhB,KAAM,2BAA4BkZ,6BAA8B,GAC5FwI,2BAA4B,CAAE1hB,KAAM,6BAA8BkZ,6BAA8B,GAChGyI,6BAA8B,CAAE3hB,KAAM,+BAAgCkZ,6BAA8B,GACpG0I,2BAA4B,CAAE5hB,KAAM,6BAA8BkZ,6BAA8B,GAChG2I,6BAA8B,CAAE7hB,KAAM,+BAAgCkZ,6BAA8B,GACpG4I,8BAA+B,CAAE9hB,KAAM,gCAAiCkZ,6BAA8B,GACtG6I,gCAAiC,CAAE/hB,KAAM,kCAAmCkZ,6BAA8B,GAC1G8I,+BAAgC,CAAEhiB,KAAM,iCAAkCkZ,6BAA8B,GACxG+I,iCAAkC,CAAEjiB,KAAM,mCAAoCkZ,6BAA8B,GAC5GgJ,4BAA6B,CAAEliB,KAAM,8BAA+BkZ,6BAA8B,GAClGiJ,8BAA+B,CAAEniB,KAAM,gCAAiCkZ,6BAA8B,GACtGkJ,8BAA+B,CAAEpiB,KAAM,gCAAiCkZ,6BAA8B,GACtGmJ,gCAAiC,CAAEriB,KAAM,kCAAmCkZ,6BAA8B,GAC1GoJ,2BAA4B,CAAEtiB,KAAM,6BAA8BkZ,6BAA8B,GAChGqJ,6BAA8B,CAAEviB,KAAM,+BAAgCkZ,6BAA8B,GACpGsJ,8BAA+B,CAAExiB,KAAM,gCAAiCkZ,6BAA8B,GACtGuJ,gCAAiC,CAAEziB,KAAM,kCAAmCkZ,6BAA8B,GAC1GwJ,6BAA8B,CAAE1iB,KAAM,+BAAgCkZ,6BAA8B,GACpGyJ,+BAAgC,CAAE3iB,KAAM,iCAAkCkZ,6BAA8B,GACxG0J,wBAAyB,CAAE5iB,KAAM,0BAA2BkZ,6BAA8B,GAC1F2J,qBAAsB,CAAE7iB,KAAM,uBAAwBkZ,6BAA8B,GACpF4J,wBAAyB,CAAE9iB,KAAM,0BAA2BkZ,6BAA8B,GAC1F6J,qBAAsB,CAAE/iB,KAAM,uBAAwBkZ,6BAA8B,GACpF8J,0BAA2B,CAAEhjB,KAAM,4BAA6BkZ,6BAA8B,GAC9F+J,uBAAwB,CAAEjjB,KAAM,yBAA0BkZ,6BAA8B,GACxFgK,wBAAyB,CAAEljB,KAAM,0BAA2BkZ,6BAA8B,GAC1FiK,qBAAsB,CAAEnjB,KAAM,uBAAwBkZ,6BAA8B,GACpFkK,2BAA4B,CAAEpjB,KAAM,6BAA8BkZ,6BAA8B,GAChGmK,wBAAyB,CAAErjB,KAAM,0BAA2BkZ,6BAA8B,GAC1FoK,yBAA0B,CAAEtjB,KAAM,2BAA4BkZ,6BAA8B,GAC5FqK,sBAAuB,CAAEvjB,KAAM,wBAAyBkZ,6BAA8B,GACtFsK,wBAAyB,CAAExjB,KAAM,0BAA2BkZ,6BAA8B,GAC1FuK,qBAAsB,CAAEzjB,KAAM,uBAAwBkZ,6BAA8B,GACpFwK,wBAAyB,CAAE1jB,KAAM,0BAA2BkZ,6BAA8B,GAC1FyK,qBAAsB,CAAE3jB,KAAM,uBAAwBkZ,6BAA8B,GACpF0K,sBAAuB,CAAE5jB,KAAM,wBAAyBkZ,6BAA8B,GACtF2K,uBAAwB,CAAE7jB,KAAM,yBAA0BkZ,6BAA8B,GACxF4K,sBAAuB,CAAE9jB,KAAM,wBAAyBkZ,6BAA8B,GACtF6K,uBAAwB,CAAE/jB,KAAM,yBAA0BkZ,6BAA8B,GACxF8K,uBAAwB,CAAEhkB,KAAM,yBAA0BkZ,6BAA8B,GACxF+K,wBAAyB,CAAEjkB,KAAM,0BAA2BkZ,6BAA8B,GAC1FgL,yBAA0B,CAAElkB,KAAM,2BAA4BkZ,6BAA8B,GAC5FiL,0BAA2B,CAAEnkB,KAAM,4BAA6BkZ,6BAA8B,GAC9FkL,sBAAuB,CAAEpkB,KAAM,wBAAyBkZ,6BAA8B,GACtFmL,uBAAwB,CAAErkB,KAAM,yBAA0BkZ,6BAA8B,GACxFoL,wBAAyB,CAAEtkB,KAAM,0BAA2BkZ,6BAA8B,GAC1FqL,yBAA0B,CAAEvkB,KAAM,2BAA4BkZ,6BAA8B,GAC5FsL,sBAAuB,CAAExkB,KAAM,wBAAyBkZ,6BAA8B,GACtFuL,uBAAwB,CAAEzkB,KAAM,yBAA0BkZ,6BAA8B,GACxFwL,sBAAuB,CAAE1kB,KAAM,wBAAyBkZ,6BAA8B,GACtFyL,uBAAwB,CAAE3kB,KAAM,yBAA0BkZ,6BAA8B,GACxF0L,wBAAyB,CAAE5kB,KAAM,0BAA2BkZ,6BAA8B,GAC1F2L,yBAA0B,CAAE7kB,KAAM,2BAA4BkZ,6BAA8B,GAC5F4L,yBAA0B,CAAE9kB,KAAM,2BAA4BkZ,6BAA8B,GAC5F6L,0BAA2B,CAAE/kB,KAAM,4BAA6BkZ,6BAA8B,GAC9F8L,sBAAuB,CAAEhlB,KAAM,wBAAyBkZ,6BAA8B,GACtF+L,uBAAwB,CAAEjlB,KAAM,yBAA0BkZ,6BAA8B,GACxFgM,wBAAyB,CAAEllB,KAAM,0BAA2BkZ,6BAA8B,GAC1FiM,yBAA0B,CAAEnlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FkM,sBAAuB,CAAEplB,KAAM,wBAAyBkZ,6BAA8B,GACtFmM,uBAAwB,CAAErlB,KAAM,yBAA0BkZ,6BAA8B,GACxFoM,yBAA0B,CAAEtlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FqM,0BAA2B,CAAEvlB,KAAM,4BAA6BkZ,6BAA8B,GAC9FsM,wBAAyB,CAAExlB,KAAM,0BAA2BkZ,6BAA8B,GAC1FuM,yBAA0B,CAAEzlB,KAAM,2BAA4BkZ,6BAA8B,GAC5FwM,8BAA+B,CAAE1lB,KAAM,gCAAiCkZ,6BAA8B,GACtGyM,2BAA4B,CAAE3lB,KAAM,6BAA8BkZ,6BAA8B,GAChG0M,8BAA+B,CAAE5lB,KAAM,gCAAiCkZ,6BAA8B,GACtG2M,2BAA4B,CAAE7lB,KAAM,6BAA8BkZ,6BAA8B,GAChG4M,gCAAiC,CAAE9lB,KAAM,kCAAmCkZ,6BAA8B,GAC1G6M,6BAA8B,CAAE/lB,KAAM,+BAAgCkZ,6BAA8B,GACpG8M,8BAA+B,CAAEhmB,KAAM,gCAAiCkZ,6BAA8B,GACtG+M,2BAA4B,CAAEjmB,KAAM,6BAA8BkZ,6BAA8B,GAChGgN,iCAAkC,CAAElmB,KAAM,mCAAoCkZ,6BAA8B,GAC5GiN,8BAA+B,CAAEnmB,KAAM,gCAAiCkZ,6BAA8B,GACtGkN,+BAAgC,CAAEpmB,KAAM,iCAAkCkZ,6BAA8B,GACxGmN,4BAA6B,CAAErmB,KAAM,8BAA+BkZ,6BAA8B,GAClGoN,8BAA+B,CAAEtmB,KAAM,gCAAiCkZ,6BAA8B,GACtGqN,2BAA4B,CAAEvmB,KAAM,6BAA8BkZ,6BAA8B,GAChGsN,8BAA+B,CAAExmB,KAAM,gCAAiCkZ,6BAA8B,GACtGuN,2BAA4B,CAAEzmB,KAAM,6BAA8BkZ,6BAA8B,GAChGwN,mBAAoB,CAAE1mB,KAAM,qBAAsBkZ,6BAA8B,GAChFyN,qBAAsB,CAAE3mB,KAAM,uBAAwBkZ,6BAA8B,GACpF0N,iBAAkB,CAAE5mB,KAAM,mBAAoBkZ,6BAA8B,GAC5E2N,iBAAkB,CAAE7mB,KAAM,mBAAoBkZ,6BAA8B,GAC5E4N,mBAAoB,CAAE9mB,KAAM,qBAAsBkZ,6BAA8B,GAChF6N,qBAAsB,CAAE/mB,KAAM,uBAAwBkZ,6BAA8B,GACpF8N,oBAAqB,CAAEhnB,KAAM,sBAAuBkZ,6BAA8B,GAClF+N,sBAAuB,CAAEjnB,KAAM,wBAAyBkZ,6BAA8B,GACtFgO,mBAAoB,CAAElnB,KAAM,qBAAsBkZ,6BAA8B,GAChFiO,qBAAsB,CAAEnnB,KAAM,uBAAwBkZ,6BAA8B,GACpFkO,oBAAqB,CAAEpnB,KAAM,sBAAuBkZ,6BAA8B,GAClFmO,sBAAuB,CAAErnB,KAAM,wBAAyBkZ,6BAA8B,GACtFoO,oBAAqB,CAAEtnB,KAAM,sBAAuBkZ,6BAA8B,GAClFqO,sBAAuB,CAAEvnB,KAAM,wBAAyBkZ,6BAA8B,GACtFsO,oBAAqB,CAAExnB,KAAM,sBAAuBkZ,6BAA8B,GAClFuO,sBAAuB,CAAEznB,KAAM,wBAAyBkZ,6BAA8B,GACtFwO,oBAAqB,CAAE1nB,KAAM,sBAAuBkZ,6BAA8B,GAClFyO,sBAAuB,CAAE3nB,KAAM,wBAAyBkZ,6BAA8B,GACtF0O,oBAAqB,CAAE5nB,KAAM,sBAAuBkZ,6BAA8B,GAClF2O,sBAAuB,CAAE7nB,KAAM,wBAAyBkZ,6BAA8B,GACtF4O,oBAAqB,CAAE9nB,KAAM,sBAAuBkZ,6BAA8B,GAClF6O,sBAAuB,CAAE/nB,KAAM,wBAAyBkZ,6BAA8B,GACtF8O,oBAAqB,CAAEhoB,KAAM,sBAAuBkZ,6BAA8B,GAClF+O,sBAAuB,CAAEjoB,KAAM,wBAAyBkZ,6BAA8B,GACtFgP,oBAAqB,CAAEloB,KAAM,sBAAuBkZ,6BAA8B,GAClFiP,sBAAuB,CAAEnoB,KAAM,wBAAyBkZ,6BAA8B,GACtFkP,4BAA6B,CAAEpoB,KAAM,8BAA+BkZ,6BAA8B,GAClGmP,8BAA+B,CAAEroB,KAAM,gCAAiCkZ,6BAA8B,GACtGoP,6BAA8B,CAAEtoB,KAAM,+BAAgCkZ,6BAA8B,GACpGqP,oCAAqC,CACjCvoB,KAAM,sCACNkZ,6BAA8B,GAElCsP,qBAAsB,CAAExoB,KAAM,uBAAwBkZ,6BAA8B,GACpFuP,sBAAuB,CAAEzoB,KAAM,wBAAyBkZ,6BAA8B,IAkCpFwP,EAAgB,CAClB,KAAM,CAAE1oB,KAAM,kBAAmB2oB,eAAe,GAChDC,GAAI,CACAC,UAAW,0BACXC,UAAW,0BACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,mBACXC,UAAW,mBACXH,eAAe,GAEnB,KAAM,CACFE,UAAW,oBACXC,UAAW,oBACXH,eAAe,GAEnB,KAAM,CAAE3oB,KAAM,2BAA4B2oB,eAAe,GACzDI,GAAI,CACAF,UAAW,4BACXC,UAAW,4BACXH,eAAe,GAEnBK,GAAI,CAAEhpB,KAAM,kBAAmB2oB,eAAe,GAC9C,KAAM,CAAEE,UAAW,eAAgBC,UAAW,eAAgBH,eAAe,GAC7E,MAAO,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC9C,MAAO,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC9C,MAAO,CAAEE,UAAW,oBAAqBC,UAAW,oBAAqBH,eAAe,GACxF,OAAQ,CAAE3oB,KAAM,oBAAqB2oB,eAAe,GACpD,OAAQ,CAAE3oB,KAAM,oBAAqB2oB,eAAe,GACpD,MAAO,CAAEE,UAAW,mBAAoBC,UAAW,mBAAoBH,eAAe,GACtF,OAAQ,CAAE3oB,KAAM,mBAAoB2oB,eAAe,GACnD,OAAQ,CAAE3oB,KAAM,mBAAoB2oB,eAAe,GACnD,OAAQ,CAAEE,UAAW,uBAAwBC,UAAW,uBAAwBH,eAAe,GAC/F,QAAS,CAAE3oB,KAAM,uBAAwB2oB,eAAe,GACxD,QAAS,CAAE3oB,KAAM,uBAAwB2oB,eAAe,GACxD,KAAM,CAAE3oB,KAAM,eAAgB2oB,eAAe,GAC7CM,GAAI,CAAEjpB,KAAM,iBAAkB2oB,eAAe,GAC7C,KAAM,CAAE3oB,KAAM,kBAAmB2oB,eAAe,IAE9CO,EAAY,CACdC,QAAS,CAAEnpB,KAAM,sBACjBopB,iBAAkB,CAAEppB,KAAM,mBAC1BqpB,KAAM,CAAErpB,KAAM,gBACdspB,cAAe,CAAEtpB,KAAM,qBACvBupB,GAAI,CAAEvpB,KAAM,iBACZwpB,QAAS,CAAExpB,KAAM,uCACjBypB,UAAW,CAAEzpB,KAAM,2CACnB0pB,QAAS,CAAE1pB,KAAM,sCACjB2pB,UAAW,CAAE3pB,KAAM,mCACnB4pB,UAAW,CAAE5pB,KAAM,iCACnB6pB,YAAa,CAAE7pB,KAAM,+CACrB8pB,UAAW,CAAE9pB,KAAM,8BACnB+pB,WAAY,CAAE/pB,KAAM,uBACpBgqB,MAAO,CAAEhqB,KAAM,cACfiqB,KAAM,CAAEjqB,KAAM,mBACdkqB,KAAM,CAAElqB,KAAM,qBACdmqB,SAAU,CAAEnqB,KAAM,mBAClBoqB,SAAU,CAAEpqB,KAAM,wBAClBqqB,KAAM,CAAErqB,KAAM,aACdsqB,cAAe,CAAEtqB,KAAM,mBACvBuqB,YAAa,CAAEvqB,KAAM,iBACrBwqB,KAAM,CAAExqB,KAAM,aACdyqB,SAAU,CAAEzqB,KAAM,iBAClB0qB,MAAO,CAAE1qB,KAAM,eAEZ,MAAM2qB,EAITzoB,0BACI,GAAuC,IAAnCyoB,EAAOC,iBAAiBroB,OACxB,MAAM,IAAIzC,EAAa,UAAW,yFAGlC,OAAO6qB,EAAOC,iBAAiB,EAEvC,CACA1oB,sBAAsB2oB,GAClB,IAAKA,KAAUA,KAAQnU,GACnB,MAAM,IAAI5W,EAAa,cAAe,iBAAmB+qB,GAC7D,OAAOnU,EAAMmU,EACjB,CAOA3oB,qBAAqB4oB,EAAgBD,EAAO,SAAUE,GAClD,IAAIC,EAAU,CAAEC,aAAc,EAAGC,SAAU,KACrB,iBAAXH,IACPC,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG6W,GAAUD,IAExD,MAAMG,EAAWP,EAAOQ,iBAAiBH,EAAQE,UAC3CE,EAASN,EAAexlB,MAAM,KACpC,GAAI8lB,EAAO7oB,OAAS,EAChB,MAAM,IAAIzC,EAAa,eAAgB,iEAAiEgrB,KAE5G,MAAMhuB,EAAMsuB,EAAO,GAAGC,cAChBttB,EAAQqZ,EAAUta,GACxB,IAAKiB,EACD,MAAM,IAAI+B,EAAa,eAAgB,qBAAuBhD,GAC9DiB,EAAMgb,SACNqS,EAAO,GAAKrtB,EAAMgb,OAAOnU,YAC7B,IAAImU,EAASvX,SAAS4pB,EAAO,GAAI,IAEjCrS,IAAW,EAAIiS,EAAQC,aAEvB,IAAItqB,GADuB,EAAToY,EAAa,GACPhb,EAAMkR,OAAS,EACvCtO,GAAQgqB,EAAOW,eAAeT,GAAMjU,WACpC,IAAI2U,EAAS,EACT5qB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChC4qB,EAAS,GACT5qB,GAAQ,GAAa,EAAPA,EAAY,GAAM,IAChC4qB,GAAU,GAEd,MAAMC,OAAqC,IAAlBztB,EAAMsZ,QAAmC,GAAT0B,EAAchb,EAAMsZ,aAAU9W,EAEjFP,EAAOjC,EAAMiC,KACbgZ,EAAcjb,EAAMib,YAC1B,IAAIyS,EAAsB,CAAC,EAC3B,GAAIL,EAAO7oB,OAAS,GAAK6oB,EAAO,GAAI,CAChC,MAAMM,EAAYN,EAAO,GAAGC,cAC5BI,EAAsB,CAAEzrB,KAAMrD,KAAKgvB,aAAaD,EAAWR,KAAe,CAAC,CAC/E,CACA,OAAOluB,OAAOmX,OAAO,CAAErX,MACnBic,SACApY,OACA6qB,YAAWjU,WAAYxZ,EAAMwZ,WAAYvX,OACzCurB,SACAvS,cAAa4S,WAAW,GAASH,EACzC,CACAvpB,qBAAqB2pB,GACjB,QAAuB,IAAZA,GAA2BA,EAAU,GAAKA,EAAU,GAC3D,MAAM,IAAI/rB,EAAa,eAAgB,6DAA6D+rB,KAExG,MAcMC,EAdQ,CACV,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,EAAG,KACH,EAAG,IACH,GAAI,KACJ,GAAI,KAEgBD,GACxB,IAAKC,EACD,MAAM,IAAIhsB,EAAa,eAAgB,mCAAmC+rB,KAE9E,OAAOC,CACX,CACA5pB,uBAAuB6pB,EAAMC,EAAQ,GACjC,IAAIC,EACA7kB,EAAQ,EACR8kB,EAAU,EACd,GAA2B,MAAvBH,EAAKV,cAAuB,CAC5B,MAAMc,EAAe,IAAIC,EAAM,wBAAyBzB,EAAO0B,sBAAsB5e,aAErF,GADAwe,EAAQ,wBACkB1rB,MAAtB4rB,EAAa/kB,OAA6C7G,MAAvB4rB,EAAa9kB,OAChD,MAAM,IAAIvH,EAAa,iBAAkB,6BAC7CsH,EAAQ+kB,EAAa/kB,MACrB8kB,GAAWC,EAAa9kB,OAAS,CACrC,MAEID,EAAQujB,EAAO2B,UAAUP,GAE7B,MAAO,CACHrqB,KAAMqqB,EACN/rB,KAAMisB,EACNM,SAAU,IAAMnlB,EAAQ4kB,EACxBE,UAER,CAGAhqB,iBAAiBR,GACb,OAAO,EAAIA,EAAKkD,WAAWrC,MAC/B,CACAL,yBAAyBsqB,GACrB,OAAO9D,EAAc8D,EACzB,CACAtqB,uBAAuBmT,GACnB,OAAO4D,EAAY5D,EACvB,CACAnT,qBAAqBmT,GACjB,OAAO6T,EAAU7T,EACrB,CACAnT,oBAAoBuqB,GAChB,MAAMC,EAAU1X,EAAcyX,GAC9B,IAAKC,EACD,MAAM,IAAI5sB,EAAa,kBAAmB,4BAA4B2sB,MAE1E,IAAKC,EAAQrX,IACT,MAAO,GAEX,MAIMsX,EAJiB,CACnBtrB,EAAG,CAAC,EAAG,GAAK,IAAK,EAAG,EAAG,IAAK,KAC5B,IAAK,CAAC,EAAG,KAAM,GAAK,EAAG,IAAK,GAAK,IAERqrB,EAAQrX,KAC/BuX,EAAW,GACjB,IAAK,IAAIvnB,EAAI,EAAGA,EAAIqnB,EAAQxX,MAAO7P,EAAG,CAClC,MAAM1E,EAAOgsB,EAAMtnB,GACnBunB,EAASxb,KAAK,CAAExC,KAAM8d,EAAQrX,IAAK1U,QACvC,CACA,OAAOisB,CACX,CACA1qB,0BACI,OAAO8S,CACX,CACA9S,uBAAuBuqB,GACnB,OAAOA,KAAQzX,CACnB,CAOA9S,wBAAwBgpB,GACpB,MAAM2B,EAAiB9X,EAAgBmW,GAIvC,QAHuB3qB,IAAnBssB,IACA3B,EAAW2B,QAEatsB,IAAxBuU,EAAUoW,GACV,MAAM,IAAIprB,EAAa,eAAgB,uCAAuCorB,KAElF,OAAOA,CACX,CAEAhpB,0BAA0BgpB,GACtB,OAAO,IAAIjpB,GAAWkD,MAAMwlB,EAAOQ,iBAAiBD,GACxD,CAEAhpB,wBAAwBgpB,GACpB,OAAOP,EAAOmC,mBAAmB5B,GAAUntB,OAC/C,CAEAmE,uBAAuBgpB,GACnBA,EAAWP,EAAOQ,iBAAiBD,GACnC,MAAM6B,EAAQjY,EAAUoW,GACxB,QAAc3qB,IAAVwsB,EACA,MAAM,IAAIjtB,EAAa,mBAE3B,OAAOitB,CACX,CACA7qB,oBAAoB0M,EAAMsc,GACtB,IAAIlrB,EAAO,GACX,OAAQ4O,GAEJ,IAAK,KACD5O,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KAGL,IAAK,KAiDL,IAAK,KACDA,EAAO,uBACP,MA/CJ,IAAK,KACDA,EAAO,0BACP,MACJ,IAAK,KACDA,EAAO,yBACP,MACJ,IAAK,KAGL,IAAK,KA8BL,IAAK,KACDA,EAAO,0BACP,MA5BJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,gBACP,MACJ,IAAK,KACDA,EAAO,iBACP,MACJ,IAAK,KACDA,EAAO,kBACP,MAEJ,IAAK,KACDA,EAAO,sBACP,MACJ,IAAK,KA4BL,IAAK,KACDA,EAAO,sBACP,MA1BJ,IAAK,KACDA,EAAO,uBACP,MACJ,IAAK,KACDA,EAAO,uBACP,MAIJ,IAAK,KACDA,EAAO,oBACP,MAIJ,IAAK,KACDA,EAAO,4BACP,MACJ,IAAK,OACDA,EAAO,6BACP,MACJ,IAAK,KACDA,EAAO,gBACP,MAIJ,IAAK,KACDA,EAAO,iCACP,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,sBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,IAAK,IACDA,EAAO,eACP,MACJ,QACIA,EAAO,gBAGf,MACJ,IAAK,IACL,IAAK,IACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,iBACP,MACJ,IAAK,IACDA,EAAO,gBACP,MACJ,QACIA,EAAO,iBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,kBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,6BACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,uBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,4BACP,MACJ,IAAK,IAGL,IAAK,IACDA,EAAO,sBACP,MACJ,QACIA,EAAO,sBAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,gCACP,MACJ,IAAK,IACDA,EAAO,0BACP,MACJ,IAAK,IACDA,EAAO,yBACP,MACJ,QACIA,EAAO,0BAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,kCACP,MACJ,IAAK,IACDA,EAAO,4BACP,MACJ,IAAK,IACDA,EAAO,2BACP,MACJ,QACIA,EAAO,4BAGf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,wBAEf,MACJ,IAAK,KACD,OAAQkrB,GACJ,IAAK,MACDlrB,EAAO,8BACP,MACJ,IAAK,IACDA,EAAO,wBACP,MACJ,IAAK,IACDA,EAAO,uBACP,MACJ,QACIA,EAAO,yBAIvB,OAAOA,CACX,CAGAkC,qBAAqBgpB,EAAUtc,EAAO,KAClCsc,EAAWP,EAAOQ,iBAAiBD,GAEnC,IAAIlrB,EAAOgtB,EAAc9B,QACZ3qB,IAATP,IACAA,EAAOgtB,EAAc,IAGzB,IAAIC,EAAsBjtB,EAAK4O,GAE/B,MAAM+c,EAAehB,EAAOgB,aAAa/c,EAAKyc,cAAeH,GACzC,IAAhBS,IACAsB,EAAsBjwB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG8Y,GAAsB,CAAEC,UAAWvB,EAAc3rB,KAAM2rB,KACjH,MAAMuB,EAAYD,EAAoBC,UAKtC,OAAOlwB,OAAOmX,OAAOnX,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGnU,EAAKmtB,QAAS,CAAEZ,SAFpD,CAACP,EAAQrB,EAAOyC,sBAAwBhB,EAAMG,SAASW,EAAWlB,KAESiB,EAChG,EAEJtC,EAAO0C,eAAiB,GACxB1C,EAAO2C,WAAa,IACpB3C,EAAO4C,YAAc,GACrB5C,EAAO6C,qBAAuB,EAC9B7C,EAAO8C,wBAA0B,EACjC9C,EAAO9V,WAAaA,EAIpB8V,EAAOC,iBAAmB,GAC1BD,EAAOyC,oBAAsB,GAC7BzC,EAAO0B,qBAAuB,GAC9B1B,EAAO+C,qBAAuB,GAC9B/C,EAAOgD,oBAAsB,GAQ7BhD,EAAOiD,wBAA0B,EACjCjD,EAAOkD,cAAgB5U,EACvB0R,EAAOmD,uBAlkBmB,CACtB,EAAG,CACC1sB,EAAG,CAAC,GACJC,EAAG,CAAC,IAER,EAAG,CACCD,EAAG,CAAC,EAAG,IAEX,EAAG,CACCA,EAAG,CAAC,EAAG,EAAG,GACVC,EAAG,CAAC,EAAG,EAAG,GACV0sB,iBAAkB,CAAC,EAAG,EAAG,IAE7B,EAAG,CACC3sB,EAAG,CAAC,EAAG,EAAG,EAAG,GACbC,EAAG,CAAC,EAAG,EAAG,EAAG,GACb2sB,sBAAuB,CAAC,EAAG,EAAG,EAAG,IAErC,EAAG,CACC5sB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,GAChB4sB,sBAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,GACpCC,2BAA4B,CAAC,EAAG,EAAG,EAAG,EAAG,IAE7C,EAAG,CACC9sB,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnBC,EAAG,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB8sB,qBAAsB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACtCC,0BAA2B,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAuiBnDzD,EAAO0D,QAAU,CAEbC,MAAOC,OAAOC,aAAa,MAE3BC,KAAMF,OAAOC,aAAa,MAE1BE,QAASH,OAAOC,aAAa,MAE7BG,SAAUJ,OAAOC,aAAa,MAE9B,eAAgBD,OAAOC,aAAa,KAEpCI,QAASL,OAAOC,aAAa,KAE7BK,OAAQN,OAAOC,aAAa,OAGhC7D,EAAOmE,WA/2BgB,CACnBvtB,EAAG,CAAE+L,KAAM,QACX1P,EAAG,CAAE0P,KAAM,QACX3H,EAAG,CAAE2H,KAAM,YACXyhB,EAAG,CAAEzhB,KAAM,SACXtI,EAAG,CAAEsI,KAAM,SACXlQ,EAAG,CAAEkQ,KAAM,SACXtK,EAAG,CAAEsK,KAAM,WACXhN,EAAG,CAAEgN,KAAM,KACX0hB,GAAI,CAAE1hB,KAAM,WACZ2hB,GAAI,CAAE3hB,KAAM,YACZ4hB,GAAI,CAAE5hB,KAAM,WACZ6hB,GAAI,CAAE7hB,KAAM,oBACZ8hB,GAAI,CAAE9hB,KAAM,UACZ+hB,GAAI,CAAE/hB,KAAM,eACZgiB,GAAI,CAAEhiB,KAAM,kBAk2BhBqd,EAAO4E,QAAU,CACbC,UAAW,EACXC,WAAY,EACZ7hB,WAAYiH,GAMhB,MAAMmY,EAAgB,CAClB,MAAO,CACHG,OAAQ,CACJD,UAAW,GACXwC,MAAM,EACNC,MAAM,EACNC,mBAAoBjF,EAAO4C,YAC3BsC,qBAAsBlF,EAAO4C,YAC7BuC,2BAA4BnF,EAAO4C,YACnCwC,6BAA8BpF,EAAO4C,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,kBACXrU,MAAM,EACNsX,SAAU,MACVH,WAAY,IAEhBhrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,EAAG,CACChD,OAAQ,CACJD,UAAW,GACXwC,MAAM,EACNC,MAAM,EACNC,mBAAoBjF,EAAO4C,YAC3BsC,qBAAsBlF,EAAO4C,YAC7BuC,2BAA4BnF,EAAO4C,YACnCwC,6BAA8BpF,EAAO4C,YACrCyC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,YACXkD,iBAAkB,qBAClBvX,MAAM,EACNsX,SAAU,MACVH,WAAY,IAEhBhrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,EAAG,CACChD,OAAQ,CACJD,UAAW,GACXwC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,WACXkD,iBAAkB,oBAClBV,MAAM,EACN7W,MAAM,EACNsX,SAAU,MACVH,YAAa,IAEjBhrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,EAAG,CACChD,OAAQ,CACJD,UAAW,GACXwC,MAAM,EACNC,MAAM,EACNC,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,cACXwC,MAAM,EACN7W,MAAM,EACNsX,SAAU,MACVH,YAAa,GACbC,WAAY,IACZC,WAAY,KAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,EAAG,CACChD,OAAQ,CACJD,UAAW,GACXwC,MAAM,EACNC,MAAM,EACNU,WAAY,EACZC,oBAAqB,EACrBC,iBAAkB,YAClBC,mBAAoB,cACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,UACXwC,MAAM,EACNC,MAAM,EACN9W,MAAM,EACNsX,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,GAAI,CACAhD,OAAQ,CACJD,UAAW,GACXmD,WAAY,EACZC,oBAAqB,EACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,WACXwC,MAAM,EACNC,MAAM,EACN9W,MAAM,EACNsX,SAAU,MACVH,YAAa,GACbC,WAAY,EACZC,WAAY,GAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,GAAI,CACAhD,OAAQ,CACJD,UAAW,GACXmD,WAAY,EACZC,oBAAqB,IACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,EACnBC,oBAAqB,EACrBC,0BAA2B,EAC3BC,4BAA6B,EAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,WACXwC,MAAM,EACNC,MAAM,EACN9W,MAAM,EACNsX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,GAAI,CACAhD,OAAQ,CACJD,UAAW,GACXmD,WAAY,EACZC,oBAAqB,GACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,aAClBC,mBAAoB,eACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,WACXwC,MAAM,EACNC,MAAM,EACN9W,MAAM,EACNsX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,QAGlB,IAAK,CACDhD,OAAQ,CACJD,UAAW,GACXmD,WAAY,EACZC,oBAAqB,KACrBZ,MAAM,EACNC,MAAM,EACNY,iBAAkB,cAClBC,mBAAoB,gBACpBZ,kBAAmB,GACnBC,oBAAqB,GACrBC,0BAA2B,GAC3BC,4BAA6B,GAC7BC,WAAY,EACZC,WAAY,EACZC,WAAY,GAEhBtyB,EAAG,CAECsvB,UAAW,YACXwC,MAAM,EACNC,MAAM,EACN9W,MAAM,EACNsX,SAAU,MACVH,YAAa,IACbC,WAAY,EACZC,WAAY,GAEhBlrB,EAAG,CAGCunB,SAAU,IAAM5B,EAAO+C,qBACvByC,SAAU,SChxCf,IAAIM,ECHAC,GDIX,SAAWD,GACPA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAuB,UAAI,GAAK,YAC5CA,EAAYA,EAAoB,OAAI,GAAK,QAC5C,CALD,CAKGA,IAAgBA,EAAc,CAAC,IAClC,MAAME,EACFvyB,YAAYwyB,EAAW5wB,EAAM/B,GACzBtB,KAAKk0B,OAAS,EACdl0B,KAAKwQ,QAAUif,EAAM0E,YAAYF,EAAW5wB,EAAM/B,GAClDtB,KAAKo0B,KAAO3E,EAAM4E,sBAAsBr0B,KAAKwQ,QAAQ8jB,QAASt0B,KAAKwQ,QAAQ6e,MAAOrvB,KAAKwQ,QAAQ+jB,QAASv0B,KAAKwQ,QAAQgkB,SACjHlzB,IACAtB,KAAKk0B,MAAQzE,EAAMgF,iBAAiBz0B,KAAKwQ,QAAQ1B,KAAMxN,EAAU+B,EAAM,SAAU,GAEzF,EAqBJ,MAAMqxB,EACFjzB,YAAY6yB,EAASK,EAASC,EAASvF,GACnCrvB,KAAKs0B,QAAUA,EACft0B,KAAK20B,QAAUA,EACf30B,KAAK40B,QAAUA,EACf50B,KAAKqvB,MAAQA,EACbrvB,KAAK0I,EAAI,EACT1I,KAAK60B,UAAY,EAEjB70B,KAAK60B,UAAY5vB,KAAK+G,IAAI,GAAIgiB,EAAO8C,wBACzC,CACAzjB,OACI,OAAOrN,KAAK0I,GAAK1I,KAAKs0B,QAAQ1uB,MAClC,CACAsH,OACI,OAAOjI,KAAK6vB,MAAO90B,KAAKs0B,QAAQt0B,KAAK0I,KAAO1I,KAAK60B,UAAa70B,KAAK60B,UACvE,CACAE,QACI,OAAO9vB,KAAK6vB,OAAO90B,KAAK20B,QAAU30B,KAAKs0B,QAAQt0B,KAAK0I,KAAO1I,KAAKqvB,OAASrvB,KAAK60B,WAAa70B,KAAK60B,SACpG,CACAG,QACI,OAAO/vB,KAAK6vB,OAAO90B,KAAK40B,QAAU50B,KAAKs0B,QAAQt0B,KAAK0I,KAAO1I,KAAKqvB,OAASrvB,KAAK60B,WAAa70B,KAAK60B,SACpG,CACAtvB,aAAakD,GACT,MAAM2E,EAAS,GACT6nB,EAAQxsB,EAAIE,MAAM,KACxB,IAAID,EAAI,EACR,KAAOA,EAAIusB,EAAMrvB,QACb,OAAQqvB,EAAMvsB,MACV,IAAK,IACD0E,EAAOqH,KAAKqf,EAAYoB,KAAMrwB,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,OACnE,MACJ,IAAK,IACD0E,EAAOqH,KAAKqf,EAAYqB,KAAMtwB,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,OACnE,MACJ,IAAK,IACD0E,EAAOqH,KAAKqf,EAAYsB,UAAWvwB,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,OACpH,MACJ,IAAK,IACD0E,EAAOqH,KAAKqf,EAAYuB,OAAQxwB,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,MAAO7D,SAASowB,EAAMvsB,OAIzK,OAAO0E,CACX,EAEG,MAAMqiB,UAAc1b,EAGZrS,sBACP,OAAOG,EAAS4tB,KACpB,CAWAlqB,wBAAwBuJ,EAAMxN,EAAU+B,EAAMlD,EAAKkR,GAC/C,IAAIjQ,EAAQ0N,EAAKsC,aAAa,UAAU9P,KAAY+B,KAAQlD,SAAOyD,GAKnE,YAJcA,IAAVxC,IAEAA,EAAQ0N,EAAKsC,aAAa,UAAU9P,KAAYnB,IAAOkR,IAEpDjQ,CACX,CACAmE,mBAAmB0uB,EAAW5wB,GAE1B,IAAIisB,EACAxgB,EAFJpL,EAAQuwB,EAAW,eAAgB,+BAGnC,IAAK,IAAIvrB,EAAI,EAAGA,EAAIurB,EAAUruB,OAAQ8C,IAGlC,GAFAoG,EAAOmlB,EAAUvrB,GACjB4mB,EAAQxgB,EAAKoC,YAAY7N,GACrBisB,EACA,MAAO,CAAEA,QAAOxgB,QAExB,MAAM,IAAI3L,EAAa,WAAY,SAASE,4BAChD,CACAkC,mBAAmB0uB,EAAW5wB,EAAM/B,GAChC,MAAM,MAAEguB,EAAK,KAAExgB,GAAS2gB,EAAM6F,YAAYrB,EAAW5wB,GACrD,IAAKisB,EAAMlvB,EACP,MAAM,IAAI+C,EAAa,WAAY,SAASE,6BAChD,IAAIkxB,EAAU,EACVC,EAAU,EACVnF,EAAQ,EACR/tB,GAAYwN,IACZylB,EAAU9E,EAAMgF,iBAAiB3lB,EAAMxN,EAAU+B,EAAM,SAAU,GACjEmxB,EAAU/E,EAAMgF,iBAAiB3lB,EAAMxN,EAAU+B,EAAM,SAAU,GACjEgsB,EAAQI,EAAMgF,iBAAiB3lB,EAAMxN,EAAU+B,EAAM,QAAS,IAElE,MAAMkyB,EAAQjG,EAAMiG,MACdC,EAAQlG,EAAMkG,MACdC,EAAKnG,EAAMmG,GAIjB,OAHKnG,EAAMoG,iBACPpG,EAAMoG,eAAiBhB,EAAalsB,MAAM8mB,EAAMlvB,IAE7C,CACHm1B,QACAC,QACAjB,UACAC,UACAnF,QACAoG,KACAnB,QAAShF,EAAMoG,eACf5mB,OACArE,MAAO+qB,EAAQD,EACf7qB,OAAQ+qB,EAEhB,CAYAlwB,mBAAmBowB,EAAKC,EAAOC,EAAO3B,EAAO7wB,EAAMgrB,GAC/C,IAAIxgB,EACJ,MAAM0C,EAAOkf,EAAMqG,MAAMC,OAAO1yB,EAAMgrB,aAAyC,EAASA,EAAQ/sB,UAC1FkP,EAAUD,EAAKC,SACF,GAAfD,EAAK2jB,QACLA,EAAQ3jB,EAAK2jB,OAEjB,MAAM8B,EAAyF,QAA1EnoB,EAAKwgB,aAAyC,EAASA,EAAQgB,aAA0B,IAAPxhB,EAAgBA,EAAK,EACtHwhB,EAAkB,GAAR6E,GAAgD,IAA/B1jB,EAAQ1B,KAAKkC,iBAA4BR,EAAQ6e,MAAQ2G,EAE1F,OADAvG,EAAMwG,cAAcN,EAAKnlB,EAAQ8jB,QAASjF,EAAOuG,EAAQplB,EAAQ+jB,QAAUyB,EAAaH,EAAQrlB,EAAQgkB,QAAUwB,GAC3GxlB,CACX,CACAjL,qBAAqBowB,EAAKrB,EAASjF,EAAOuG,EAAOC,GAC7C,MAAMK,EAAK,IAAIxB,EAAaJ,EAASsB,EAAOC,EAAOxG,GAEnD,IAAI1rB,EAAGmF,EACP,IAFA6sB,EAAIQ,aAEID,EAAG7oB,QACP,OAAQ6oB,EAAGhpB,QACP,KAAK4mB,EAAYoB,KACbS,EAAIS,OAAOF,EAAGnB,QAASmB,EAAGlB,SAC1B,MACJ,KAAKlB,EAAYqB,KACbQ,EAAIU,OAAOH,EAAGnB,QAASmB,EAAGlB,SAC1B,MACJ,KAAKlB,EAAYsB,UACbzxB,EAAIuyB,EAAGnB,QACPjsB,EAAIotB,EAAGlB,QACPW,EAAIW,iBAAiBJ,EAAGnB,QAASmB,EAAGlB,QAASrxB,EAAGmF,GAChD,MACJ,KAAKgrB,EAAYuB,OACb1xB,EAAIuyB,EAAGnB,QACPjsB,EAAIotB,EAAGlB,QACPW,EAAIY,cAAcL,EAAGnB,QAASmB,EAAGlB,QAASkB,EAAGnB,QAASmB,EAAGlB,QAASrxB,EAAGmF,GAIjF6sB,EAAIa,MACR,CACAjxB,6BAA6B+uB,EAASjF,EAAOuG,EAAOC,GAChD,MAAMK,EAAK,IAAIxB,EAAaJ,EAASsB,EAAOC,EAAOxG,GAC7CoH,EAAW,IAAIxsB,EAErB,IAEItG,EAAGmF,EAFH4tB,EAAOd,EACPe,EAAOd,EAEX,MAAQK,EAAG7oB,QACP,OAAQ6oB,EAAGhpB,QACP,KAAK4mB,EAAYoB,KAEbwB,EAAOR,EAAGnB,QACV4B,EAAOT,EAAGlB,QACV,MACJ,KAAKlB,EAAYqB,KACbsB,EAAS9rB,SAAS+rB,EAAMC,GACxBD,EAAOR,EAAGnB,QACV4B,EAAOT,EAAGlB,QACVyB,EAAS9rB,SAAS+rB,EAAMC,GACxB,MACJ,KAAK7C,EAAYsB,UACbzxB,EAAIuyB,EAAGnB,QACPjsB,EAAIotB,EAAGlB,QACPyB,EAAS3rB,kBAAkB4rB,EAAMC,EAAMT,EAAGnB,QAASmB,EAAGlB,QAASrxB,EAAGmF,GAClE4tB,EAAO/yB,EACPgzB,EAAO7tB,EACP,MACJ,KAAKgrB,EAAYuB,OACb1xB,EAAIuyB,EAAGnB,QACPjsB,EAAIotB,EAAGlB,QACPyB,EAAShrB,eAAeirB,EAAMC,EAAMT,EAAGnB,QAASmB,EAAGlB,QAASkB,EAAGnB,QAASmB,EAAGlB,QAASrxB,EAAGmF,GACvF4tB,EAAO/yB,EACPgzB,EAAO7tB,EAInB,OAAO,IAAIF,EAAY6tB,EAASlsB,QAASksB,EAASjsB,QAASisB,EAAShsB,QAASgsB,EAAS/rB,SAC1F,CACAnF,gBAAgBlC,EAAM6wB,EAAO5yB,GACzB,MAAMiP,EAAOkf,EAAMqG,MAAMC,OAAO1yB,EAAM/B,IACnB,GAAfiP,EAAK2jB,QACLA,EAAQ3jB,EAAK2jB,OAEjB,MAAM7E,EAAiB,GAAR6E,GAAmD,IAApC3jB,EAAKC,QAAQ1B,KAAKkC,iBAChD,OAAOT,EAAK6jB,KAAKjrB,OAASkmB,CAC9B,CAMA5tB,YAAY4B,EAAM6wB,EAAO7F,GACrB9qB,QAGAvD,KAAKo0B,KAAO,IAAIxrB,EAAY,EAAG,EAAG,EAAG,GACrC5I,KAAK42B,UAAY,GACjB52B,KAAK62B,UAAY,GACjB72B,KAAKquB,QAAU,CAAC,EAChBruB,KAAKqvB,MAAQ,EACbrvB,KAAKqD,KAAOA,EACZrD,KAAKk0B,MAAQA,EACbl0B,KAAK82B,YAAc,CAAEnzB,EAAG,EAAGmF,EAAG,GAC9B9I,KAAKu0B,QAAU,EACfv0B,KAAKw0B,QAAU,EACXnG,EACAruB,KAAK+2B,WAAW1I,GAGhBruB,KAAKg3B,OAEb,CAEAjhB,QAAQhS,GAER,CACAkzB,UACI,OAAOj3B,KAAKqD,IAChB,CAEA0zB,WAAW1I,GACPruB,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUA,GAC9DruB,KAAKg3B,OACT,CACAE,SAAShD,GAEL,OADAl0B,KAAKk0B,MAAQA,EACNl0B,IACX,CACAm3B,SAASC,GAEL,OADAp3B,KAAKo3B,MAAQA,EACNp3B,IACX,CACAq3B,YACI,OAAOr3B,KAAKu0B,OAChB,CACA+C,UAAU/C,GAEN,OADAv0B,KAAKu0B,QAAUA,EACRv0B,IACX,CACAu3B,YACI,OAAOv3B,KAAKw0B,OAChB,CACAgD,UAAUhD,GAEN,OADAx0B,KAAKw0B,QAAUA,EACRx0B,IACX,CACAg3B,QACI,MAAMzmB,EAAOkf,EAAMqG,MAAMC,OAAO/1B,KAAKqD,KAAMrD,KAAKquB,QAAQ/sB,UACxDtB,KAAKwQ,QAAUD,EAAKC,SAED,GAAfD,EAAK2jB,QACLl0B,KAAKk0B,MAAQ3jB,EAAK2jB,OAEtBl0B,KAAKqvB,MAAsB,GAAbrvB,KAAKk0B,OAAmD,IAApCl0B,KAAKwQ,QAAQ1B,KAAKkC,iBACpDhR,KAAKo0B,KAAO,IAAIxrB,EAAY2H,EAAK6jB,KAAKnrB,OAASjJ,KAAKqvB,MAAO9e,EAAK6jB,KAAKlrB,OAASlJ,KAAKqvB,MAAO9e,EAAK6jB,KAAKjrB,OAASnJ,KAAKqvB,MAAO9e,EAAK6jB,KAAKhrB,OAASpJ,KAAKqvB,MACrJ,CACAoI,eACI,OAAO/zB,EAAQ1D,KAAKwQ,QAAS,WAAY,SAASxQ,KAAKqD,2BAC3D,CACAyN,aACI,MAAMN,EAAUxQ,KAAKy3B,eACfC,EAAelnB,EAAQ6e,MAC7B,MAAO,CACHkG,MAAO/kB,EAAQ+kB,MAAQv1B,KAAKqvB,MAAQqI,EACpClC,MAAOhlB,EAAQglB,MAAQx1B,KAAKqvB,MAAQqI,EACpCjtB,MAAOzK,KAAKo0B,KAAKjrB,OACjBuB,OAAQ1K,KAAKo0B,KAAKhrB,OAClBimB,MAAOrvB,KAAKqvB,MAAQqI,EACpBnD,QAAS/jB,EAAQ+jB,QACjBC,QAAShkB,EAAQgkB,QACjBF,QAAS9jB,EAAQ8jB,QACjBxlB,KAAM0B,EAAQ1B,KACd2mB,GAAIjlB,EAAQilB,GAEpB,CACAkC,WAAWh0B,GACP,MAAM,KAAEywB,GAASp0B,KAEX43B,GAAUj0B,EADAsB,KAAK+C,IAAIosB,EAAKnrB,OAASmrB,EAAKjrB,SACbirB,EAAKjrB,OACpCnJ,KAAK82B,YAAYnzB,GAAKi0B,CAC1B,CACAC,WAAW/uB,GACP,MAAM,KAAEsrB,GAASp0B,KAEX83B,GAAUhvB,EADA7D,KAAK+C,IAAIosB,EAAKlrB,OAASkrB,EAAKhrB,SACbgrB,EAAKhrB,OACpCpJ,KAAK82B,YAAYhuB,GAAKgvB,CAC1B,CACAC,UAAUp0B,EAAGmF,GACT9I,KAAK23B,WAAWh0B,GAChB3D,KAAK63B,WAAW/uB,EACpB,CACAkvB,OAAOrC,EAAKhyB,EAAGmF,GACX,MAAM0H,EAAUxQ,KAAKy3B,eACfnD,EAAU9jB,EAAQ8jB,QAClBjF,EAAQrvB,KAAKqvB,MAAQ7e,EAAQ6e,MACnCrvB,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChB,MAAMsC,EAAOt0B,EAAI3D,KAAK82B,YAAYnzB,EAAI6M,EAAQ+jB,QACxC2D,EAAOpvB,EAAI9I,KAAK82B,YAAYhuB,EAAI0H,EAAQgkB,QAC9C/E,EAAMwG,cAAcN,EAAKrB,EAASjF,EAAO4I,EAAMC,GAC/Cl4B,KAAK2V,aAAaggB,EACtB,CACAwC,aACI,OAAOz0B,EAAQ1D,KAAKo3B,MAAO,UAAW,iCAC1C,CACAgB,cAAcz0B,GACV,MAAMoR,EAAU/U,KAAK8V,eACftF,EAAUxQ,KAAKy3B,eACfL,EAAQp3B,KAAKm4B,aACb7D,EAAU9jB,EAAQ8jB,QAClBjF,EAAQrvB,KAAKqvB,MAAQ7e,EAAQ6e,MACnCrvB,KAAKsW,cACLtW,KAAK8U,aACL,MAAMmjB,EAAOt0B,EAAI3D,KAAKu0B,QAAU/jB,EAAQ+jB,QAClC2D,EAAOd,EAAMiB,gBAAkBr4B,KAAKw0B,QAAUhkB,EAAQgkB,QAC5D/E,EAAMwG,cAAclhB,EAASuf,EAASjF,EAAO4I,EAAMC,GACnDl4B,KAAK2V,cACT,EAEJ8Z,EAAMqG,MAAQ,IAxWd,MACIr0B,cACIzB,KAAK81B,MAAQ,IAAIwC,GACrB,CACAvC,OAAO1yB,EAAM/B,GACT,IAAIi3B,EAAUv4B,KAAK81B,MAAMt1B,IAAIivB,EAAM+I,wBACnB50B,IAAZ20B,IACAA,EAAU,CAAC,EACXv4B,KAAK81B,MAAM5vB,IAAIupB,EAAM+I,kBAAmBD,IAE5C,MAAMp4B,EAAMmB,EAAW,GAAG+B,KAAQ/B,IAAa+B,EAC/C,IAAIo1B,EAAQF,EAAQp4B,GAKpB,YAJcyD,IAAV60B,IACAA,EAAQ,IAAIzE,EAAgBvE,EAAMxB,iBAAkB5qB,EAAM/B,GAC1Di3B,EAAQp4B,GAAOs4B,GAEZA,CACX,GA2VJhJ,EAAM+I,kBAAoB,GAG1B/I,EAAMxB,iBAAmB,GClYzB,SAAW8F,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAuB,KAAI,GAAK,OACjDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,QAClDA,EAAiBA,EAAwB,MAAI,GAAK,OACrD,CAND,CAMGA,IAAqBA,EAAmB,CAAC,IAerC,MAAM2E,WAAiB3kB,EAKfrS,sBACP,OAAOG,EAAS62B,QACpB,CAEWC,sBACP,OAAO5E,CACX,CACW6E,4BACP,MAAO,CACHC,OAAQ9E,EAAiB+E,OACzBC,MAAOhF,EAAiBiF,MACxBC,MAAOlF,EAAiBmF,MACxBC,KAAMpF,EAAiBqF,KACvBC,MAAOtF,EAAiBuF,MAEhC,CACA73B,cACI8B,QACAvD,KAAKyK,MAAQ,EAEbzK,KAAKu5B,UAAY,EACjBv5B,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAKu0B,QAAU,EACfv0B,KAAKw0B,QAAU,EACfx0B,KAAKw5B,wBAA0B,CACnC,CAEAxC,QAEA,CAEApH,WACI,OAAO5vB,KAAKyK,KAChB,CAEAgvB,SAAShvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CAEA05B,UACI,OAAOh2B,EAAQ1D,KAAK25B,KAAM,SAAU,wBACxC,CAKAC,oBACI,MAAMt4B,EAAWtB,KAAKoU,cAEtB,OADA1Q,EAAQ1D,KAAKsS,MAAO,UAAW,cAAchR,uBACtCoC,EAAQ1D,KAAK25B,KAAM,SAAU,cAAcr4B,oBACtD,CAKAu4B,QAAQF,GAEJ,OADA35B,KAAK25B,KAAOA,EACL35B,IACX,CAEA85B,WACI,OAAO95B,KAAKsS,KAChB,CAEAynB,aACI,OAAOr2B,EAAQ1D,KAAKsS,MAAO,UAAW,iCAC1C,CAEA0nB,SAAS1nB,GAEL,OADAtS,KAAKsS,MAAQA,EACNtS,IACX,CAEAi6B,qBACI,OAAOj6B,KAAKk6B,eAChB,CAEAC,uBACI,OAAOz2B,EAAQ1D,KAAKk6B,gBAAiB,oBAAqB,4BAC9D,CAEAE,mBAAmBnuB,GAEf,OADAjM,KAAKk6B,gBAAkBjuB,EAChBjM,IACX,CAEAq6B,cACI,OAAOr6B,KAAKwzB,QAChB,CAKA8G,YAAY9G,GAGR,OAFAxzB,KAAKwzB,SAA+B,iBAAbA,EAAwBkF,GAASE,eAAepF,GAAYA,EACnFxzB,KAAKg3B,QACEh3B,IACX,CAEAu6B,YAAYv2B,GAER,OADAhE,KAAKu5B,UAAYv1B,EACVhE,IACX,CAEAw3B,UAAU1uB,GAEN,OADA9I,KAAKw0B,QAAU1rB,EACR9I,IACX,CAEAw6B,2BAA2B72B,GACvB3D,KAAKw5B,wBAA0B71B,CACnC,CAEA82B,6BACI,OAAOz6B,KAAKw5B,uBAChB,CAKAlC,UAAU3zB,GAQN,OAPA3D,KAAKu0B,QAAU,EACXv0B,KAAKwzB,WAAakF,GAASC,SAASS,KACpCp5B,KAAKu0B,SAAW5wB,EAGhB3D,KAAKu0B,SAAW5wB,EAEb3D,IACX,CAEAq3B,YACI,OAAOr3B,KAAKu0B,OAChB,CAEAxe,OAEI,MADA/V,KAAK8V,eACC,IAAI3S,EAAa,iBAAkB,4CAC7C,CAEAu3B,sBAAsBC,EAAUhB,GAE5B,MAAMiB,EAAcjB,EAAKkB,iBACnBrqB,EAAUoqB,EAAY9pB,aACtBsmB,EAAQuC,EAAKmB,WACbC,EAAiBH,EAAY3xB,OAASuH,EAAQwqB,UAAYxqB,EAAQyqB,WAAaj7B,KAAKy6B,6BAC1FE,EAAS/lB,SAASsmB,IACd,MAAMC,EAAiBD,EAAQL,iBAC3BzD,GACA8D,EAAQ/D,SAASC,GACrB+D,EAAeC,WAAWL,EAAe,GAEjD,ECrLG,MAAMM,GAEEC,uBACP,OAAOt7B,KAAKu7B,gBAAgB31B,MAChC,CAEW41B,mBACP,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC1C,CAEWC,yBACP,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC9B,CAEWC,0BACP,MAAO,CACHzvB,EAAG,EACH5F,EAAG,EACH1F,EAAG,EACH4H,EAAG,EACH9H,EAAG,EACHgE,EAAG,EACHC,EAAG,EAEX,CAEW62B,6BACP,MAAO,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IACxE,CAEWI,gCACP,MAAO,CAAC,SAAU,KAAM,KAAM,KAAM,KAAM,KAAM,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,SAC1F,CAEWC,kCACP,MAAO,CACHC,OAAQ,CAAElC,KAAM,EAAG/e,WAAY,GAC/BkhB,GAAI,CAAEnC,KAAM,EAAG/e,YAAa,GAC5BmhB,GAAI,CAAEpC,KAAM,EAAG/e,WAAY,GAC3BohB,GAAI,CAAErC,KAAM,EAAG/e,YAAa,GAC5BqhB,GAAI,CAAEtC,KAAM,EAAG/e,WAAY,GAC3BshB,GAAI,CAAEvC,KAAM,EAAG/e,WAAY,GAC3BuhB,KAAM,CAAExC,KAAM,EAAG/e,YAAa,GAC9BwhB,GAAI,CAAEzC,KAAM,EAAG/e,WAAY,GAC3ByhB,GAAI,CAAE1C,KAAM,EAAG/e,YAAa,GAC5B0hB,GAAI,CAAE3C,KAAM,EAAG/e,WAAY,GAC3B2hB,GAAI,CAAE5C,KAAM,EAAG/e,YAAa,GAC5B4hB,GAAI,CAAE7C,KAAM,EAAG/e,WAAY,GAC3BwB,OAAQ,CAAEud,KAAM,EAAG/e,WAAY,GAEvC,CAEW6hB,uBACP,MAAO,CACHr2B,EAAG,EACHy1B,OAAQ,EACRC,GAAI,EACJY,GAAI,EACJC,KAAM,EACNC,EAAG,EACHC,EAAG,EACH,EAAG,EACHd,GAAI,EACJe,KAAM,EACNC,EAAG,EACHC,EAAG,EACHhB,GAAI,EACJiB,GAAI,EACJC,KAAM,EACNjB,GAAI,EACJ,EAAG,EACHkB,KAAM,EACN,EAAG,EACHjB,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACNlB,KAAM,EACN,EAAG,EACHC,GAAI,EACJ,KAAM,EACNkB,GAAI,EACJC,KAAM,EACN,EAAG,EACHjB,GAAI,EACJkB,KAAM,EACNjB,GAAI,GACJkB,GAAI,GACJC,KAAM,GACNC,KAAM,GACNnB,GAAI,GACJoB,KAAM,GACN,EAAG,GACHxhB,OAAQ,GAEhB,CAEWyhB,oBACP,MAAO,CACHC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC1BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,SAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7BC,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC3BC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5BC,QAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEpC,CAEWC,wBACP,MAAO,CACHC,EAAGnD,GAAMwC,OAAOC,MAChB1L,EAAGiJ,GAAMwC,OAAOE,MAExB,CAEWzhB,yBACP,MAAO,CAAC,KAAM,IAAK,IAAK,IAAK,KACjC,CAEWmiB,wBACP,MAAO,CACHxyB,EAAG,CAAEyyB,WAAY,EAAGhkB,QAAS,GAC7BikB,GAAI,CAAED,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjCkkB,GAAI,CAAEF,WAAY,EAAGhkB,QAAS,IAC9BmkB,IAAK,CAAEH,WAAY,EAAGhkB,QAAS,IAC/BrU,EAAG,CAAEq4B,WAAY,EAAGhkB,QAAS,GAC7BokB,GAAI,CAAEJ,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjC+B,GAAI,CAAEiiB,WAAY,EAAGhkB,QAAS,GAC9BqkB,IAAK,CAAEL,WAAY,EAAGhkB,QAAS,GAC/B/Z,EAAG,CAAE+9B,WAAY,EAAGhkB,QAAS,GAC7BskB,GAAI,CAAEN,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjCukB,GAAI,CAAEP,WAAY,EAAGhkB,QAAS,GAC9BwkB,IAAK,CAAER,WAAY,EAAGhkB,QAAS,GAC/BnS,EAAG,CAAEm2B,WAAY,EAAGhkB,QAAS,GAC7BykB,GAAI,CAAET,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjC0kB,GAAI,CAAEV,WAAY,EAAGhkB,QAAS,GAC9B2kB,IAAK,CAAEX,WAAY,EAAGhkB,QAAS,GAC/Bja,EAAG,CAAEi+B,WAAY,EAAGhkB,QAAS,GAC7B4kB,GAAI,CAAEZ,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjC6kB,GAAI,CAAEb,WAAY,EAAGhkB,QAAS,GAC9B8kB,IAAK,CAAEd,WAAY,EAAGhkB,QAAS,GAC/BjW,EAAG,CAAEi6B,WAAY,EAAGhkB,QAAS,GAC7B+kB,GAAI,CAAEf,WAAY,EAAGhkB,QAAS,GAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,IAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,IACjCglB,GAAI,CAAEhB,WAAY,EAAGhkB,QAAS,GAC9BilB,IAAK,CAAEjB,WAAY,EAAGhkB,QAAS,GAC/BhW,EAAG,CAAEg6B,WAAY,EAAGhkB,QAAS,IAC7BklB,GAAI,CAAElB,WAAY,EAAGhkB,QAAS,IAC9B,KAAM,CAAEgkB,WAAY,EAAGhkB,QAAS,GAChC,MAAO,CAAEgkB,WAAY,EAAGhkB,QAAS,GACjC8B,GAAI,CAAEkiB,WAAY,EAAGhkB,QAAS,IAC9BmlB,IAAK,CAAEnB,WAAY,EAAGhkB,QAAS,GAEvC,CACAolB,iBAAiBnG,GACb,OAAOA,GAAQ,GAAKA,EAAO0B,GAAME,gBAAgB31B,MACrD,CACAm6B,qBAAqBC,GACjB,OAAOA,GAAY,GAAKA,EAAW3E,GAAMM,mBAAmB/1B,MAChE,CAEAq6B,aAAaC,GACT,IAAKA,GAAcA,EAAWt6B,OAAS,EACnC,MAAM,IAAIzC,EAAa,eAAgB,sBAAwB+8B,GAEnE,GAAIA,EAAWt6B,OAAS,EACpB,MAAM,IAAIzC,EAAa,eAAgB,sBAAwB+8B,GAEnE,MAAMvG,EAAOuG,EAAW/xB,cAElBgyB,EADQ,8BACMC,KAAKzG,GACzB,GAAc,OAAVwG,EAAgB,CAGhB,MAAO,CACH3gC,KAHS2gC,EAAM,GAIfvlB,WAHeulB,EAAM,GAK7B,CAEI,MAAM,IAAIh9B,EAAa,eAAgB,sBAAwB+8B,EAEvE,CAEAG,YAAYC,GACR,IAAKA,GAAaA,EAAU16B,OAAS,EACjC,MAAM,IAAIzC,EAAa,eAAgB,gBAAkBm9B,GAE7D,MAAMngC,EAAMmgC,EAAUnyB,cAGhBgyB,EADQ,qCACMC,KAAKjgC,GACzB,GAAc,OAAVggC,EAAgB,CAChB,MAAM3gC,EAAO2gC,EAAM,GACbvlB,EAAaulB,EAAM,GACzB,IAAIluB,EAAOkuB,EAAM,GAIjB,OAFKluB,IACDA,EAAO,KACJ,CACHzS,OACAob,aACA3I,OAER,CAEI,MAAM,IAAI9O,EAAa,eAAgB,gBAAgBm9B,IAE/D,CAEAC,aAAaL,GACT,MAAM9+B,EAAQi6B,GAAMoD,WAAWyB,GAC/B,QAAct8B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,sBAAsB+8B,KAEjE,OAAO9+B,EAAMsZ,OACjB,CAEA8lB,iBAAiBC,GACb,MAAMr/B,EAAQi6B,GAAMoB,UAAUgE,GAC9B,QAAc78B,IAAVxC,EACA,MAAM,IAAI+B,EAAa,eAAgB,0BAA0Bs9B,KAErE,OAAOr/B,CACX,CAEAs/B,qBAAqBvR,GACjB,IAAKnvB,KAAK8/B,iBAAiB3Q,GACvB,MAAM,IAAIhsB,EAAa,eAAgB,uBAAuBgsB,KAElE,OAAOkM,GAAME,gBAAgBpM,EACjC,CAEAwR,yBAAyBC,GACrB,IAAK5gC,KAAK+/B,qBAAqBa,GAC3B,MAAM,IAAIz9B,EAAa,eAAgB,2BAA2By9B,KAEtE,OAAOvF,GAAMM,mBAAmBiF,EACpC,CAIAC,qBAAqB1R,EAAWyR,EAAeE,EAAY,GACvD,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI39B,EAAa,eAAgB,sBAAsB29B,KAEjE,IAAIC,GAAO5R,EAAY2R,EAAYF,GAAiBvF,GAAMC,UAG1D,OAFIyF,EAAM,IACNA,GAAO1F,GAAMC,WACVyF,CACX,CAIAC,oBAAoBxhC,EAAM2vB,GACtB,MAAM8F,EAAQj1B,KAAKigC,aAAazgC,GAC1ByhC,EAAYjhC,KAAKugC,aAAatL,EAAMz1B,MAC1C,IAAIwgC,EAAW7Q,EAAY8R,EAC3B,GAAIh8B,KAAK+C,IAAIg4B,GAAY3E,GAAMC,UAAY,EAAG,CAC1C,IAAI4F,EAAa,EACblB,EAAW,IACXkB,GAAc,GAElB,MAAMC,GAAqBhS,EAAY,GAAK8R,EAAY,IAAM5F,GAAMC,UAAa4F,EACjF,GAAIj8B,KAAK+C,IAAIm5B,GAAoB,EAC7B,MAAM,IAAIh+B,EAAa,eAAgB,sBAAsB3D,MAAS2vB,MAGtE6Q,EAAWmB,CAEnB,CACA,GAAIl8B,KAAK+C,IAAIg4B,GAAY,EACrB,MAAM,IAAI78B,EAAa,eAAgB,sBAAsB3D,MAAS2vB,MAE1E,IAAIiS,EAAmBnM,EAAMz1B,KAC7B,GAAIwgC,EAAW,EACX,IAAK,IAAIt3B,EAAI,EAAGA,GAAKs3B,IAAYt3B,EAC7B04B,GAAoB,SAGvB,GAAIpB,EAAW,EAChB,IAAK,IAAIt3B,GAAK,EAAGA,GAAKs3B,IAAYt3B,EAC9B04B,GAAoB,IAG5B,OAAOA,CACX,CAUAC,cAAclhC,EAAKs8B,GACf,MAAM6E,EAAQ,CAACnhC,GACf,IAAIohC,EAAWphC,EACf,IAAK,IAAIuI,EAAI,EAAGA,EAAI+zB,EAAU72B,OAAQ8C,IAClC64B,EAAWvhC,KAAK6gC,qBAAqBU,EAAU9E,EAAU/zB,IACrD64B,IAAaphC,GACbmhC,EAAM7sB,KAAK8sB,GAEnB,OAAOD,CACX,CAKAE,mBAAmBC,EAAOC,EAAOZ,EAAY,GACzC,GAAkB,IAAdA,IAAkC,IAAfA,EACnB,MAAM,IAAI39B,EAAa,eAAgB,sBAAsB29B,KAEjE,IAAK9gC,KAAK8/B,iBAAiB2B,KAAWzhC,KAAK8/B,iBAAiB4B,GACxD,MAAM,IAAIv+B,EAAa,eAAgB,kBAAkBs+B,MAAUC,KAEvE,IAAIC,EAA2B,IAAdb,EAAkBY,EAAQD,EAAQA,EAAQC,EAG3D,OAFIC,EAAa,IACbA,GAActG,GAAMC,WACjBqG,CACX,CAOAC,eAAeC,GACX,MAAMC,EAAc9hC,KAAKqgC,YAAYwB,GACrC,IAAKC,EAAY7vB,KACb,MAAM,IAAI9O,EAAa,eAAgB,mCAC3C,MAAM4+B,EAAY1G,GAAMkD,WAAWuD,EAAY7vB,MAC/C,IAAI+vB,EAAeF,EAAYtiC,KAG/B,GAFIsiC,EAAYlnB,aACZonB,GAAgBF,EAAYlnB,aAC3BmnB,EACD,MAAM,IAAI5+B,EAAa,eAAgB,yBAA2B0+B,GACtE,MAAMxS,EAAQrvB,KAAKqhC,cAAcrhC,KAAKugC,aAAayB,GAAeD,GAC5DE,EAAe5G,GAAMK,aAAaoG,EAAYtiC,MAC9C0iC,EAAW,CAAC,EAClB,IAAK,IAAIx5B,EAAI,EAAGA,EAAI2yB,GAAMG,MAAM51B,SAAU8C,EAAG,CACzC,MAAM4J,GAAS2vB,EAAev5B,GAAK2yB,GAAMG,MAAM51B,OACzCu8B,EAAW9G,GAAMG,MAAMlpB,GAC7B,IAAI8vB,EAAWpiC,KAAKghC,oBAAoBmB,EAAU9S,EAAM3mB,IAChC,IAApB05B,EAASx8B,SACTw8B,GAAY,KAEhBF,EAASC,GAAYC,CACzB,CACA,OAAOF,CACX,ECrWJ,SAASG,MAAKt+B,GACNjC,GAAWwgC,OACXz+B,EAAI,sBAAuBE,EACnC,CAQO,MAAMjC,WAAmB42B,GAEjBh3B,sBACP,OAAOG,EAASC,UACpB,CAEAyD,cAAc+W,EAAaimB,GAEvB,IAAKjmB,GAAsC,IAAvBA,EAAY1W,OAC5B,OACJ,MAAM48B,EAAYxU,EAAOyU,mBACnBC,EAA4BF,EAAUpxB,aAAa,wCACnDuxB,EAAYJ,EAAMK,WAAaF,EAC/BG,EAAoBL,EAAUpxB,aAAa,gCAC3C0xB,EAAoBN,EAAUpxB,aAAa,0BAC3C2xB,EAAU,GAChB,IAAIC,EACAC,EAAS,EAEb,IAAK,IAAIv6B,EAAI,EAAGA,EAAI4T,EAAY1W,SAAU8C,EAAG,CACzC,MAAMgQ,EAAM4D,EAAY5T,GAClBixB,EAAOjhB,EAAIghB,UACXtC,EAAQuC,EAAKmB,WACbxoB,EAAQoG,EAAIqhB,aACZmJ,EAAQvJ,EAAKwJ,cAAc7wB,GACjC,GAAIqnB,IAASqJ,EAAU,CAEnB,IAAK,IAAIp+B,EAAI,EAAGA,EAAI+0B,EAAKrmB,KAAK1N,SAAUhB,EACpCq+B,EAASh+B,KAAK8E,IAAI4vB,EAAKyJ,yBAA2BzJ,EAAKtC,YAAa4L,GAExED,EAAWrJ,CACf,CACA,GAAIvC,EAAO,CACP,MAAMiM,EAAYjM,EAAMkM,yBAClBx6B,EAAIsuB,EAAMmM,YAAYL,EAAMl/B,MAC5Bw/B,EAAUv+B,KAAK6vB,MAAOhsB,EAAIu6B,EAAa,GAAK,EAClDN,EAAQtuB,KAAK,CAAE3L,IAAG9E,KAAMw/B,EAAS19B,MAAOm9B,EAAQvqB,MAAK2qB,aACzD,MAEIN,EAAQtuB,KAAK,CAAEzQ,KAAMk/B,EAAMl/B,KAAM8B,MAAOm9B,EAAQvqB,OAExD,CAEAqqB,EAAQU,MAAK,CAACh/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OAGlC,MAAM0/B,EAAW,GAGjB,IACIC,EADAC,EAAW,EAGf,IAAK,IAAIl7B,EAAI,EAAGA,EAAIq6B,EAAQn9B,OAAQ8C,IAAK,CACrC,MAAMgQ,EAAMqqB,EAAQr6B,QAEC9E,IAAjB+/B,GAA8BA,IAAiBjrB,EAAI1U,MACnD0/B,EAASjvB,KAAK,CACVzQ,KAAM0U,EAAI1U,KACV6/B,UAAU,EACVC,cAAc,EACdC,OAAQ,EACRt5B,MAAO,EACPu5B,OAAQ,IAMK,MAAjBtrB,EAAIA,IAAIzG,MAAiC,OAAjByG,EAAIA,IAAIzG,OAChCyxB,EAASA,EAAS99B,OAAS,GAAGi+B,UAAW,GAGxB,OAAjBnrB,EAAIA,IAAIzG,OACRyxB,EAASA,EAAS99B,OAAS,GAAGk+B,cAAe,GAGjDJ,EAASA,EAAS99B,OAAS,GAAGm+B,SAI9BL,EAASA,EAAS99B,OAAS,GAAG6E,OAASiO,EAAIA,IAAIkX,WAAaiT,EAE5De,EAAWlrB,EAAI5S,MAAQ89B,EAAWlrB,EAAI5S,MAAQ89B,EAC9CD,EAAejrB,EAAI1U,IACvB,CAkBA,IAAIigC,EAAe,EAEnB,IAAK,IAAIv7B,EAAI,EAAGA,EAAIg7B,EAAS99B,OAAQ8C,IAAK,CACtC,IAAIw7B,GAAqB,EACzB,MAAMC,EAAaz7B,EACnB,IAAI07B,EAAW17B,EACf,KAAO07B,EAAW,EAAIV,EAAS99B,SAAWs+B,GAElClkC,KAAKqkC,eAAeX,EAASU,GAAWV,EAASU,EAAW,IAE5DA,IAGAF,GAAqB,EAI7B,MAAMI,EAAgBhyB,GAAUoxB,EAASS,EAAa7xB,GAChDiyB,EAAiBC,GAAYA,EAAQjxB,IAAI+wB,GACzCG,EAAiB,CAACC,EAAQC,KAC5B,MAAOlgC,EAAGC,GAAK6/B,EAAc,CAACG,EAAQC,IAASpxB,KAAKqxB,GAASA,EAAK5gC,OAClE,OAAOS,EAAIC,CAAC,EAEVmgC,EAAe,IAAIC,IAAeA,EAAWvxB,IAAIgxB,GAAeQ,OAAM,EAAEC,EAAOC,MAAYjlC,KAAKqkC,eAAeW,EAAOC,KAEtHC,EAAcd,EAAWD,EAAa,EAE5C,IA+BIgB,EACAnB,EAhCAoB,EAAUplC,KAAKqkC,eAAeX,EAASS,GAAaT,EAASU,IAAa,IAAM,IACpF,OAAQc,GACJ,KAAK,EACe,MAAZE,GAA4C,KAAzBX,EAAe,EAAG,IAAuC,KAAzBA,EAAe,EAAG,KACrEW,EAAU,oBAEd,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,yBAEd,MACJ,KAAK,EACe,MAAZA,GAAmBP,EAAa,CAAC,EAAG,MACpCO,EAAU,wBACNP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,MACzBO,EAAU,+BAGlB,MACJ,KAAK,EACGP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACjCO,EAAU,wBAEVP,EAAa,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,GAAI,CAAC,EAAG,MACzCO,EAAU,6BAUtB,GAAIF,GAAe,EAAG,CAElB,IAAIG,EAAgB,EAChBC,GAAoB,EACxB,MAA6B,IAAtBA,GAA4B,CAC/BA,GAAoB,EACpB,IAAK,IAAIthC,EAAO,EAAGA,EAAOqhC,EAAgB3B,EAAS99B,OAAQ5B,IACvD,GAAIhE,KAAKqkC,eAAeX,EAAS1/B,GAAO0/B,EAAS1/B,EAAOqhC,IAAiB,CACrEC,GAAoB,EACpBD,IACA,KACJ,CAER,CAEA,IAAKF,EAAcz8B,EAAGy8B,GAAef,EAAUe,IAC3CnB,GAAWmB,EAAcz8B,GAAK28B,EAAiB,EAC/C3B,EAASyB,GAAanB,OAASA,EAC/BC,EAAeA,EAAeD,EAASC,EAAeD,CAE9D,MAII,IAAKmB,EAAcz8B,EAAGy8B,GAAef,EAAUe,IAC3CnB,EAAShW,EAAOmD,uBAAuB+T,GAAaE,GAASD,EAAcz8B,GAC3Eg7B,EAASyB,GAAanB,OAASA,EAC/BC,EAAeA,EAAeD,EAASC,EAAeD,EAK9Dt7B,EAAI07B,CACR,CAaA,MAAMmB,EAAe,GACfC,EAAiB,GACvB,IAAK,IAAI98B,EAAI,EAAGA,GAAKu7B,EAAcv7B,IAC/B68B,EAAa78B,GAAK,EAClB88B,EAAe98B,GAAK,EAExB68B,EAAa,GAAK3B,EAAWjB,EAC7B6C,EAAe,GAAK5B,EAAWjB,EAG/Be,EAAS9uB,SAAS5Q,IACVA,EAAKyG,MAAQ86B,EAAavhC,EAAKggC,UAC/BuB,EAAavhC,EAAKggC,QAAUhgC,EAAKyG,MAAK,IAE9C,IAAK,IAAI/B,EAAI,EAAGA,EAAI68B,EAAa3/B,OAAQ8C,IAErC88B,EAAe98B,GAAK68B,EAAa78B,GAAK88B,EAAe98B,EAAI,GAE7D,MAAM+8B,EAAaD,EAAeA,EAAe5/B,OAAS,GAE1D,IAAI8/B,EAAW,EACfhC,EAAS9uB,SAAS5Q,IACd,IAAIyR,EAAY,EAChB,MAAMkwB,EAAgBD,EAAW1hC,EAAK+/B,OAEtC,KAAe2B,EAAWC,EAAeD,IAAY,CACjD,MAAM9N,EAAS4N,EAAexhC,EAAKggC,OAAS,GAAKvuB,EACjDstB,EAAQ2C,GAAUhtB,IAAI4e,UAAUM,GAGhCniB,GAAastB,EAAQ2C,GAAUhtB,IAAIkX,WAAaiT,EAChDR,GAAE,0BAA2Br+B,EAAKA,KAAM0hC,EAAU9N,EACtD,KAGJ2K,EAAMK,YAAc6C,EAAa3C,CACrC,CAEAv9B,sBAAsBy/B,EAAOC,GACzB,IAAIW,EAAYX,EAAMjhC,KAAOghC,EAAMhhC,KAC/B6hC,EAAoB,EAEpBD,EAAY,GAEZC,EAAoBZ,EAAMpB,UAAYoB,EAAMnB,aAAe,IAAM,EAC7DkB,EAAMlB,eACN8B,GAAa,MAIjBC,EAAoBb,EAAMnB,UAAYmB,EAAMlB,aAAe,IAAM,EAC7DmB,EAAMnB,eACN8B,GAAa,KAErB,MAAME,EAAY7gC,KAAK+C,IAAI49B,GAAaC,EAExC,OADAxD,GAAE,8BAA+B2C,EAAMhhC,KAAMihC,EAAMjhC,KAAM8hC,GAClDA,CACX,CAMAvgC,wBAAwBwgC,EAAQlE,GAC5B,MAAMmE,EAAgB,GAChBC,EAAc,CAAC,EAErBF,EAAOnxB,SAASsxB,IACZ,MAAMC,EAAe,IAAI7gC,EAAS,EAAG,GACpB4gC,EAAME,eACdxxB,SAASlP,IACd,GAAIA,EAAE2gC,oBACF,OACJ,MAAMC,EAAkBL,EAAYE,EAAa/kC,SAC5CklC,EAKDA,EAAgB7xB,KAAK/O,IAJrBsgC,EAAcvxB,KAAK0xB,EAAa/kC,SAChC6kC,EAAYE,EAAa/kC,SAAW,CAACsE,IAKzCygC,EAAa5/B,IAAIb,EAAE6gC,WAAW,GAChC,IAEN,MAAMC,EAAQ,IAAInL,GAEbwG,IACDA,EAAe,KAEnB,MAAM4E,EAAcD,EAAM5E,eAAeC,GACnCK,EAAW,CAAC,EAClB8D,EAAcpxB,SAAS8xB,IACnB,MAAMC,EAAYV,EAAYS,GAGxBE,EAAkB,GAClBC,EAAenhC,IAEjB,IAAK7C,EAAY6C,IAAMA,EAAEohC,UAAYphC,EAAE2gC,oBACnC,OAGJ,MAAMU,EAAYrhC,EAClBqhC,EAAUzzB,KAAKsB,SAAQ,CAAC0rB,EAAW0G,KAC/B,MAAM7mC,EAAMqmC,EAAMvG,aAAaK,EAAU33B,MAAM,KAAK,IAC9CyT,EAASkkB,EAAU33B,MAAM,KAAK,GAE9Bs+B,EAAmB9mC,EAAIya,YAAc,IACrCssB,EAAQ/mC,EAAIX,KAAOynC,EAGpB/E,EAAS/hC,EAAIX,KAAO4c,KACrB8lB,EAAS/hC,EAAIX,KAAO4c,GAAUqqB,EAAYtmC,EAAIX,OAClD,MAAM2nC,EAAiBjF,EAAS/hC,EAAIX,KAAO4c,KAAY8qB,EAGjDE,EAAqBR,EAAgB3wB,QAAQqqB,IAAc,EAQjE,GANAyG,EAAUM,eAAezyB,SAAQ,CAAC0yB,EAAUh1B,KACpC1Q,EAAa0lC,IAAaA,EAASr1B,MAAQg1B,GAAoBK,EAASxN,YAAckN,GACtFD,EAAUM,eAAejxB,OAAO9D,EAAO,EAC3C,KAGC60B,GAAmBA,GAAkBC,EAAqB,CAG3DlF,EAAS/hC,EAAIX,KAAO4c,GAAU8qB,EAE9B,MAAMtsB,EAAa,IAAI9Y,GAAWmlC,GAElCF,EAAUQ,YAAY3sB,EAAYosB,GAElCJ,EAAgBnyB,KAAK6rB,EACzB,KAGJyG,EAAUM,eAAezyB,SAAS0yB,IAC1B/kC,EAAiB+kC,IACjBA,EAASE,gBAAgB5yB,QAAQiyB,EACrC,GACF,EAENF,EAAU/xB,QAAQiyB,EAAY,GAEtC,CAMAplC,YAAYwQ,GACR1O,QACA8+B,GAAE,mBAAoBpwB,GACtBjS,KAAKiS,KAAOA,EACZjS,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAKynC,eAAiB,CAElBC,WAAY,GAEZC,iBAAkB,EAClBC,kBAAmB,GAEvB5nC,KAAK4a,WAAaoT,EAAO6Z,gBAAgB7nC,KAAKiS,MAC9CvO,EAAQ1D,KAAK4a,WAAY,gBAAiB,4BAA4B3I,KAEtEjS,KAAK8nC,YAAa,EAClB9nC,KAAKg3B,OACT,CACAA,QACI,MAAM+Q,EAAY/nC,KAAKynC,eAAeC,WACtC1nC,KAAKsvB,MAAQ,IAAIG,EAAMzvB,KAAK4a,WAAWvX,KAAM0kC,GAC7C/nC,KAAKsvB,MAAMqI,WAAW,GAClB33B,KAAK8nC,aACL9nC,KAAKgoC,UAAY,IAAIvY,EAAMzB,EAAO6Z,gBAAgB,KAAKxkC,KAAM0kC,GAC7D/nC,KAAKioC,WAAa,IAAIxY,EAAMzB,EAAO6Z,gBAAgB,KAAKxkC,KAAM0kC,GAC9D/nC,KAAKgoC,UAAUrQ,WAAW,GAC1B33B,KAAKioC,WAAWtQ,WAAW,GAEnC,CAEA/H,WACI,GAAI5vB,KAAK8nC,WAAY,CACjB,MAAME,EAAYtkC,EAAQ1D,KAAKgoC,WACzBC,EAAavkC,EAAQ1D,KAAKioC,YAC1BC,EAAaF,EAAUl3B,aAAarG,MACtCw9B,EAAWn3B,aAAarG,MACxBzK,KAAKynC,eAAeE,iBACpB3nC,KAAKynC,eAAeG,kBACxB,OAAO5nC,KAAKsvB,MAAMxe,aAAarG,MAAQy9B,CAC3C,CAEI,OAAOloC,KAAKsvB,MAAMxe,aAAarG,KAEvC,CAEAovB,QAAQF,GAQJ,OAPAj2B,EAAQi2B,EAAM,gBAAiB,mBAAmBA,KAClD35B,KAAK25B,KAAOA,EAERt3B,EAAYs3B,KACZ35B,KAAKynC,eAAeC,WAAa,GACjC1nC,KAAKg3B,SAEFh3B,IACX,CAEAmoC,kBAII,OAHAnoC,KAAK8nC,YAAa,EAClB9nC,KAAKynC,eAAeC,WAAa,GACjC1nC,KAAKg3B,QACEh3B,IACX,CAEA+V,OACI,MAAM,KAAE9D,EAAI,SAAEuhB,EAAQ,MAAElhB,EAAK,WAAEw1B,EAAU,QAAEvT,EAAO,QAAEC,EAAO,MAAElF,EAAOmY,gBAAgB,iBAAEE,EAAgB,kBAAEC,IAAyB5nC,KAC3H21B,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cAEL,MAAM8xB,EAAQzO,EAAK0O,mBAAmB7U,EAAUlhB,GAChD,IAAIg2B,EAAOF,EAAMzkC,EAAI4wB,EACrB,MAAMgU,EAAOH,EAAMt/B,EAAI0rB,EAEvB,GADA6N,GAAE,cAAepwB,EAAMq2B,EAAMC,GACxBT,EAGA,CACD,MAAME,EAAYtkC,EAAQ1D,KAAKgoC,WACzBC,EAAavkC,EAAQ1D,KAAKioC,YAEhCA,EAAWjQ,OAAOrC,EAAK2S,EAAMC,GAC7BD,GAAQL,EAAWn3B,aAAarG,MAChC69B,GAAQV,EACRU,GAAQtoC,KAAK4a,WAAW2B,4BACxB+S,EAAM0I,OAAOrC,EAAK2S,EAAMC,GACxBD,GAAQhZ,EAAMxe,aAAarG,MAC3B69B,GAAQX,EACRK,EAAUhQ,OAAOrC,EAAK2S,EAAMC,EAChC,MAdIjZ,EAAM0I,OAAOrC,EAAK2S,EAAMC,EAehC,EAGJzmC,GAAWwgC,OAAQ,EC9cZ,MAAMkG,WAAaz0B,EACXrS,sBACP,OAAOG,EAAS2mC,IACpB,CAEWC,gBACP,OAAO,CACX,CACWC,kBACP,OAAQ,CACZ,CAEWC,mBACP,OAAO3a,EAAO2C,UAClB,CACWiY,oBACP,OAAO5a,EAAO4C,WAClB,CACAnvB,YAAY4sB,GACR9qB,QACAvD,KAAK6oC,iBAAmB,EACxB7oC,KAAK8oC,mBAAqB,EAC1B9oC,KAAK+oC,sBAAwB,EAC7B/oC,KAAKgpC,wBAA0B,EAE/BhpC,KAAKipC,SAAW5a,aAAyC,EAASA,EAAQ4a,UAAY,EACtFjpC,KAAKkpC,OAAS7a,aAAyC,EAASA,EAAQ6a,QAAU,EAElFlpC,KAAKmpC,OAAS9a,aAAyC,EAASA,EAAQ8a,QAAU,EAClFnpC,KAAKopC,UAAY/a,aAAyC,EAASA,EAAQ+a,WAAa,EAExFppC,KAAKqpC,gBAAkBhb,aAAyC,EAASA,EAAQgb,iBAAmB,EAEpGrpC,KAAKspC,gBAAkBjb,aAAyC,EAASA,EAAQib,iBAAmB,EAEpGtpC,KAAKupC,MAAQlb,aAAyC,EAASA,EAAQkb,QAAS,EAChFvpC,KAAKwpC,WAAanb,aAAyC,EAASA,EAAQmb,aAAc,EAC1FxpC,KAAKypC,eAAiBpb,aAAyC,EAASA,EAAQob,gBAAkB,EAGlGzpC,KAAK0pC,uBAAyB,EAC9B1pC,KAAK+2B,WAAW1I,EACpB,CACA0I,WAAW1I,GAEPruB,KAAK6oC,kBAAoBxa,aAAyC,EAASA,EAAQwa,mBAAqB,EACxG7oC,KAAK8oC,oBAAsBza,aAAyC,EAASA,EAAQya,qBAAuB,EAC5G9oC,KAAK+oC,uBAAyB1a,aAAyC,EAASA,EAAQ0a,wBAA0B,EAClH/oC,KAAKgpC,yBAA2B3a,aAAyC,EAASA,EAAQ2a,0BAA4B,CAC1H,CAEAW,mBAAmBV,EAASC,GAGxB,OAFAlpC,KAAKipC,QAAUA,EACfjpC,KAAKkpC,MAAQA,EACNlpC,IACX,CAEA4pC,aAAa9I,GACT9gC,KAAKspC,eAAiBxI,CAC1B,CAEA+I,aAAaC,GACT9pC,KAAKqpC,eAAiBS,CAC1B,CACAC,eACI,OAAO/pC,KAAKqpC,cAChB,CAEAW,WAAWb,EAAOC,GACdppC,KAAKmpC,MAAQA,EACbnpC,KAAKopC,SAAWA,CACpB,CAEAa,YACI,MAAMC,EAAWlqC,KAAKspC,iBAAmBd,GAAKC,GAAKzoC,KAAK6oC,iBAAmB7oC,KAAK8oC,mBAEhF,OADwB9oC,KAAKopC,SAAWppC,KAAKmpC,OAASX,GAAKI,OAASsB,EAAWlqC,KAAKqpC,iBAC3DrpC,KAAKspC,cAClC,CACA1yB,iBACI,MAAM,IAAIzT,EAAa,iBAAkB,oCAC7C,CAGAgnC,aACI,MAAMC,EAAWpqC,KAAKspC,iBAAmBd,GAAKC,GACxC4B,EAAK,CAACrqC,KAAKmpC,MAAOnpC,KAAKopC,UACvBkB,EAAa9B,GAAKI,OAAS5oC,KAAKqpC,eAChCkB,GAAsBH,EAAWnlC,KAAKulC,IAAMvlC,KAAK8E,QAAQsgC,GACzDI,GAAsBL,EAAWnlC,KAAK8E,IAAM9E,KAAKulC,QAAQH,GAE/D,MAAO,CAAEK,KADQH,EAAqBD,GAActqC,KAAKspC,eAChCqB,MAAOF,EACpC,CACAG,cAAcC,GAEV,OADA7qC,KAAKupC,MAAQsB,EACN7qC,IACX,CACA8qC,WAAWtB,EAAWC,GAGlB,OAFAzpC,KAAKwpC,UAAYA,EACjBxpC,KAAKypC,cAAgBA,EACdzpC,IACX,CACA+qC,sBACI/qC,KAAK0pC,uBAAyB1b,EAAOyU,mBAAmBrxB,aAAa,gCAAiC,EAC1G,CACA45B,sBACIhrC,KAAK0pC,wBAA0BlB,GAAKG,MAAQ,CAChD,CAEA5yB,OAEI,GADA/V,KAAKsW,cACDtW,KAAKupC,KACL,OACJ,MAAM5T,EAAM31B,KAAK8V,eACjB,IAAIm1B,EACAC,EACJ,MAAM5B,EAAiBtpC,KAAKspC,eAC5B,IAAI6B,EAAgB,EAChB7B,IAAmBd,GAAKE,MAExBuC,EAASjrC,KAAKipC,QACdiC,EAASlrC,KAAKmpC,MAAQnpC,KAAK8oC,mBAC3BqC,EAAgBnrC,KAAKgpC,0BAIrBiC,EAASjrC,KAAKkpC,MACdgC,EAASlrC,KAAKopC,SAAWppC,KAAK6oC,iBAC9BsC,EAAgBnrC,KAAK+oC,uBAEzB,MAAMuB,EAAatqC,KAAKiqC,aArIhC,YAAclmC,GACNykC,GAAKlG,OACLz+B,EAAI,gBAAiBE,EAC7B,CAmIQ,CAAE,oBAAqB,UAAW/D,KAAKmpC,MAAO,aAAcnpC,KAAKopC,UAEjE,MAAMgC,EAAiBprC,KAAKwpC,UAAYc,EAAatqC,KAAKypC,cAAgBzpC,KAAKspC,eAAiB,EAEhG3T,EAAI3gB,OACJhV,KAAK8U,aACL6gB,EAAI0V,UAAU,OAAQrrC,KAAK6S,aAAa,MAAO,CAAEy4B,aAAa,IAC9D3V,EAAIQ,YACJR,EAAIjgB,aAAa8yB,GAAKG,OACtBhT,EAAIS,OAAO6U,EAAQC,EAASE,EAAiBD,GAC7CxV,EAAIU,OAAO4U,EAAQC,EAASZ,EAAatqC,KAAK0pC,uBAAyBJ,GACvE3T,EAAI/G,SACJ+G,EAAI4V,aACJvrC,KAAK2V,eACLggB,EAAI/f,SACR,EC1JJ,SAAS,MAAK7R,GACNynC,GAAclJ,OACdz+B,EAAI,yBAA0BE,EACtC,CD0JAykC,GAAKlG,OAAQ,EC9Ib,MAAMmJ,GAAiB,CAAC,EAClBC,GAAkB,CAAC,EAKnBr5B,GAAW,CAAC,EACX,MAAMm5B,GAITjmC,yBACI,MAAMomC,EAAkB,GACxB,IAAK,MAAM58B,KAAcsD,GAAU,CAC/B,MAAMu5B,EAAgBv5B,GAAStD,GAC/B48B,EAAgBl3B,KAAKpU,OAAOmX,OAAO,CAAC,EAAGo0B,GAC3C,CACA,OAAOD,CACX,CAQApmC,cAAcsmC,EAAgB,CAAC,GAC3B,GAAE,WAAYA,GACTA,EAAcr9B,SACfq9B,EAAcr9B,OAASd,EAAKe,YAKhC,MAAMq9B,EAAa,GAGbC,EAAoBF,EAAcr9B,OAAO7F,MAAM,WACrD,IAAK,MAAMqjC,KAAmBD,EAAmB,CAC7C,IAAK,MAAMh9B,KAAcsD,GAGjBtD,EAAWk9B,WAAWD,IACtBF,EAAWr3B,KAAKpC,GAAStD,IAGjC,GAAI+8B,EAAWlmC,OAAS,EACpB,KAER,CACA,IAAIsmC,EACJ,GAA0B,IAAtBJ,EAAWlmC,OAEXsmC,EAAY,IAAIV,GAAcnrC,OAAO8rC,OAAO95B,IAAU,SAErD,GAA0B,IAAtBy5B,EAAWlmC,OAChBsmC,EAAY,IAAIV,GAAcM,EAAW,QAExC,CACD,MAAMM,EAAO1+B,EAAK2+B,OAAOR,EAAcx9B,QACjCi+B,EAAS5+B,EAAK6+B,SAASV,EAAcv9B,OACrCk+B,EAAeV,EAAWW,MAAMlkC,GAAMA,EAAE6jC,OAASA,GAAQ7jC,EAAE+jC,SAAWA,IAC5E,GAAIE,EACAN,EAAY,IAAIV,GAAcgB,OAE7B,CACD,MAAME,EAAeZ,EAAWW,MAAMlkC,GAAMA,EAAE+jC,SAAWA,GAAU/jC,EAAE6jC,OAASA,IAE1EF,EAAY,IAAIV,GADhBkB,GAI8BZ,EAAW,GAEjD,CACJ,CACA,MAAMn+B,EAAWk+B,EAAcz9B,KAC/B,QAAwB,IAAbT,EAA0B,CACjC,MAAMg/B,EAAej/B,EAAKqK,wBAAwBpK,GAClDu+B,EAAUt0B,YAAY+0B,EAC1B,CACA,OAAOT,CACX,CAKA3mC,eAAewJ,GACX,OAAOsD,GAAStD,EACpB,CASAxJ,oBAAoBsO,EAAM+4B,GAAY,GAClC,GAAE,iBAAkB/4B,EAAM+4B,GAC1B,MAAM79B,EAAa8E,EAAKrF,aAEH5K,IADAyO,GAAStD,IACI69B,KAC9Bv6B,GAAStD,GAAc8E,EAE/B,CAKApS,YAAYmqC,GAER5rC,KAAKwO,OAAS,GAEdxO,KAAKoO,KAAO,GAEZpO,KAAKiR,WAAa,IAgBlBjR,KAAKmR,OAAS,CAAC,EACfnR,KAAK6sC,QAAS,EACd7sC,KAAK8sC,YAAa,EAClB9sC,KAAKssC,QAAS,EACdtsC,KAAKosC,MAAO,EACZpsC,KAAK+sC,kBAAoB,EACzB/sC,KAAKgtC,gBAAkB,EACvBhtC,KAAKitC,aAAe,IAEpBjtC,KAAKktC,SAAW,GAChBltC,KAAKmtC,aAAavB,EACtB,CACIwB,uBACA,IAAIv/B,EAIJ,YAHuCjK,IAAnC8nC,GAAgB1rC,KAAKktC,YACrBxB,GAAgB1rC,KAAKktC,UAAY,CAAC,GAEW,QAAzCr/B,EAAK69B,GAAgB1rC,KAAKktC,iBAA8B,IAAPr/B,EAAgBA,EAAK,CAAC,CACnF,CACAs/B,aAAa/e,GACLA,EAAO5f,SACPxO,KAAKwO,OAAS4f,EAAO5f,QACrB4f,EAAOnd,aACPjR,KAAKiR,WAAamd,EAAOnd,YACzBmd,EAAOjd,SACPnR,KAAKmR,OAASid,EAAOjd,QACrBid,EAAOye,SACP7sC,KAAK6sC,OAASze,EAAOye,QACrBze,EAAO0e,aACP9sC,KAAK8sC,WAAa1e,EAAO0e,YACzB1e,EAAOke,SACPtsC,KAAKssC,OAASle,EAAOke,QACrBle,EAAOge,OACPpsC,KAAKosC,KAAOhe,EAAOge,MACnBhe,EAAO6e,eACPjtC,KAAKitC,aAAe7e,EAAO6e,cAC3B7e,EAAO2e,oBACP/sC,KAAK+sC,kBAAoB3e,EAAO2e,mBAChC3e,EAAO4e,kBACPhtC,KAAKgtC,gBAAkB5e,EAAO4e,iBAClChtC,KAAKqtC,gBACT,CAEAA,iBACI,MAAM7+B,EAASxO,KAAKwO,OAAON,QAAQ,OAAQ,KACrCE,EAAOpO,KAAKoO,KACZC,EAASrO,KAAKosC,KAAO9/B,EAAWghC,KAAOhhC,EAAWoC,OAClDJ,EAAQtO,KAAKssC,OAAS//B,EAAUkD,OAASlD,EAAUmC,OAEzD1O,KAAKktC,SAAW,GAAG1+B,KAAUJ,KAAQC,KAAUC,GACnD,CAKAi/B,gBAAgBC,GACZ,OAAIxtC,KAAKmR,OAAOq8B,GACLxtC,KAAKmR,OAAOq8B,GAGZxtC,KAAKmR,OAAOnR,KAAKitC,aAEhC,CACIQ,gBAEA,OADgBztC,KAAKutC,gBAAgBvtC,KAAKitC,cAC1BxX,GAAKz1B,KAAKiR,WAAcjR,KAAKgY,gBACjD,CAOA01B,yBAAyBzhC,GACrB,IAAI4B,EACJ,MAAM2C,EAAUxQ,KAAKutC,gBAAgBthC,GACrC,GAAKuE,EAIA,CAED,OADqD,QAA/B3C,EAAK2C,EAAQm9B,oBAAiC,IAAP9/B,EAAgBA,EAAK,GAC5D7N,KAAKiR,UAC/B,CALI,MAAO,GAMf,CAIA28B,qBAAqB3hC,GACjB,MAAMuE,EAAUxQ,KAAKutC,gBAAgBthC,GAC/B4hC,EAAK,CAAEC,KAAM,EAAGC,KAAM/tC,KAAKytC,UAAW/iC,OAAQ1K,KAAKytC,WACzD,OAAKj9B,GAI4B,iBAAlBA,EAAQw9B,QACfH,EAAGC,KAAQt9B,EAAQw9B,MAAQhuC,KAAKiR,WAAcjR,KAAKgY,kBAE1B,iBAAlBxH,EAAQy9B,QACfJ,EAAGE,KAAQv9B,EAAQy9B,MAAQjuC,KAAKiR,WAAcjR,KAAKgY,kBAEvD61B,EAAGnjC,OAASmjC,EAAGE,KAAOF,EAAGC,KAClBD,GAVAA,CAYf,CACAK,kBAAkBzlC,GACd,MAAMgwB,EAAQz4B,KAAKotC,iBACbe,EAAS,CAAEL,KAAM,EAAGC,KAAM/tC,KAAKytC,UAAW/iC,OAAQ1K,KAAKytC,WACvD3X,EAAQ2C,EAAMhwB,GACpB,QAAc7E,IAAVkyB,EACA,OAAOA,EAEX,IAAK,IAAIptB,EAAI,EAAGA,EAAID,EAAI7C,SAAU8C,EAAG,CACjC,MAAM0lC,EAAOpuC,KAAK4tC,qBAAqBnlC,EAAIC,IAC3CylC,EAAOL,KAAO7oC,KAAKulC,IAAI2D,EAAOL,KAAMM,EAAKN,MACzCK,EAAOJ,KAAO9oC,KAAK8E,IAAIokC,EAAOJ,KAAMK,EAAKL,MACzCI,EAAOzjC,OAASyjC,EAAOJ,KAAOI,EAAOL,IACzC,CAEA,OADArV,EAAMhwB,GAAO0lC,EACNA,CACX,CAIAE,oBAAoBtpC,GAChB,MAAM5E,EAAMH,KAAKktC,SAGjB,IAAIoB,EAAe7C,GAAetrC,QACbyD,IAAjB0qC,IACAA,EAAe,CAAC,EAChB7C,GAAetrC,GAAOmuC,GAE1B,IAAI7jC,EAAQ6jC,EAAavpC,GACzB,QAAcnB,IAAV6G,EAAqB,CACrBA,EAAQ,EACR,IAAK,IAAI/B,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAC/B+B,GAASzK,KAAK0tC,yBAAyB3oC,EAAK2D,IAEhD4lC,EAAavpC,GAAQ0F,CACzB,CACA,OAAOA,CACX,CAEA8jC,oBAAoBxpC,GAChB,OAAO/E,KAAKquC,oBAAoBtpC,GAAQ/E,KAAKgY,gBACjD,CAIAJ,YAAYxJ,GAIR,OAHApO,KAAKoO,KAAOA,EAEZpO,KAAKqtC,iBACErtC,IACX,CAEIgY,uBACA,OAAOhY,KAAKoO,KAAOV,EAAKI,cAAcC,EAC1C,CACAiD,gBACI,OAAOhR,KAAKiR,UAChB,EC3SG,IAAIu9B,GAOAC,GDuSXjD,GAAclJ,OAAQ,EC7StB,SAAWkM,GACPA,EAA4BA,EAAkC,KAAI,GAAK,OACvEA,EAA4BA,EAAoC,OAAI,GAAK,SACzEA,EAA4BA,EAAmC,MAAI,GAAK,QACxEA,EAA4BA,EAAyC,YAAI,GAAK,aACjF,CALD,CAKGA,KAAgCA,GAA8B,CAAC,IAElE,SAAWC,GACPA,EAA0BA,EAA+B,IAAI,GAAK,MAClEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAkC,OAAI,GAAK,SACrEA,EAA0BA,EAAuC,YAAI,GAAK,aAC7E,CALD,CAKGA,KAA8BA,GAA4B,CAAC,IAOvD,MAAMzsC,WAAmB02B,GAEjBh3B,sBACP,OAAOG,EAASG,UACpB,CAGW0sC,kCAEP,OADkB1gB,EAAOyU,mBACRrxB,aAAa,sBAClC,CAEA7L,cAAcopC,EAAapM,GACvB,IAAKoM,GAAsC,IAAvBA,EAAY/oC,OAC5B,OAAO,EACX,IAAIgpC,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,IAAIrmC,EAAI,EAAGA,EAAIimC,EAAY/oC,SAAU8C,EAAG,CACzC,MAAMsmC,EAAaL,EAAYjmC,GACzBumC,EAAgBzD,GAAc0D,OAAOF,EAAW/3B,UAGtD,IAAIk4B,GADe,EAAIF,EAAcf,kBAAkBc,EAAWjqC,MAAM2F,QAAUsjB,EAAOgD,oBAEzF,MAAM2I,EAAOqV,EAAWpV,oBAClBwV,EAAazV,EAAK0V,gBAAgBzf,WAElCD,EAAYsf,EAAcV,oBAAoBS,EAAWjqC,MAC3DiqC,EAAWM,0BAA4Bd,GAA4BpV,MACnE0V,EAAoB7pC,KAAK8E,IAAIqlC,EAAYN,GACzCF,EAAY3pC,KAAK8E,IAAI6kC,EAAWjf,GAAa3tB,GAAW0sC,sBAEnDM,EAAWM,0BAA4Bd,GAA4BlV,OACxEyV,EAAqB9pC,KAAK8E,IAAIqlC,EAAYL,GAC1CF,EAAa5pC,KAAK8E,IAAI8kC,EAAYlf,KAGlCif,EAAY3pC,KAAK8E,IAAI6kC,EAAWjf,EAAY,GAAK3tB,GAAW0sC,qBAC5DG,EAAa5pC,KAAK8E,IAAI8kC,EAAYlf,EAAY,GAC9Cmf,EAAoB7pC,KAAK8E,IAAIqlC,EAAa,EAAGN,GAC7CC,EAAqB9pC,KAAK8E,IAAIqlC,EAAa,EAAGL,IAElD,MAAM3X,EAAQuC,EAAKmB,WACbyU,EAAgB5V,EAAK6V,UAAY7V,EAAK8V,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EACboF,EAAQ,EACZ,GAAIzsC,EAAU02B,GACV,GAAIA,EAAK8N,eAAekI,UAAW,CAC/B,MAAM5c,EAAO4G,EAAKiW,UACd7c,IACAuX,EAAarlC,KAAK+C,IAAI+qB,EAAKkX,aAAejc,EAAOgD,oBAEzD,MAEIsZ,EAAa,OAGhB,GAAIvnC,EAAgB42B,GAAO,CAC5B,MAAM5G,EAAO4G,EAAKiW,UACd7c,GAA+B,MAAvB4G,EAAKkW,gBACbvF,EAAarlC,KAAK+C,IAAI+qB,EAAKkX,aAAejc,EAAOgD,oBAEzD,CAIA,GAHIoG,IACAsY,EAAQtY,EAAM0Y,eAEdd,EAAWe,wBAA0B/vC,KAAKgwC,gBAAgBC,IAAK,CAC/D,IAAIC,EAAWvW,EAAKwW,eAAc,GAC9BltC,EAAU02B,KACVuW,EAAWR,GAAS/V,EAAKyW,cAAgB,KAEzCb,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAED4F,EAAW3N,EAAM8N,cAAgB,GACnCX,GACTV,EAAWzU,YAAYmV,EAAQQ,GAC/Bf,GAAuBO,EAAQQ,EAC/B3N,EAAM8N,cAAgBlB,IAGtBH,EAAWzU,YAAYgI,EAAM8N,eAC7B9N,EAAM8N,eAAiBlB,EAE/B,MACK,GAAIH,EAAWe,wBAA0B/vC,KAAKgwC,gBAAgBM,OAAQ,CACvE,IAAIJ,EAAWR,EAAQ/V,EAAKwW,gBACxBltC,EAAU02B,KACVuW,EAAWvW,EAAK4W,iBAAmB,GAEnChB,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,MAAMkG,EAAYN,EAAW3N,EAAMhJ,UAAY,EAC3CiX,EAAYd,GACZV,EAAWzU,YAAYmV,EAAQc,GAC/BrB,GAAuBO,EAAQc,EAC/BjO,EAAMhJ,UAAY4V,IAGlBH,EAAWzU,YAAYgI,EAAMhJ,WAC7BgJ,EAAMhJ,WAAa4V,EAE3B,MAEIH,EAAWzU,YAAYgI,EAAMhJ,UAErC,CACA,MAAMkX,EAAexrC,KAAKulC,IAAIvlC,KAAK8E,IAAI8kC,EAAaE,EAAoB,GAAI9pC,KAAK8E,IAAI8kC,EAAatM,EAAMmO,YAAa,IAC/GC,EAAc1rC,KAAKulC,IAAIvlC,KAAK8E,IAAI6kC,EAAYE,EAAmB,GAAI7pC,KAAK8E,IAAI6kC,EAAYrM,EAAMK,WAAY,IAGhH,OAFAL,EAAMK,YAAc+N,EACpBpO,EAAMmO,aAAeD,GACd,CACX,CAMAhvC,YAAYsD,GACRxB,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAKsvC,wBAA0Bd,GAA4B1V,OAG3D94B,KAAK+vC,sBAAwBtB,GAA0BwB,IACvDjwC,KAAK2X,YAEL3X,KAAKy5B,SAASzL,EAAO2B,UAAU5qB,GACnC,CAKA6rC,yBAAyBC,GAErB,OADA7wC,KAAK+vC,sBAAwC,iBAATc,EAAoB7uC,GAAW8uC,sBAAsBD,GAAQA,EAC1F7wC,IACX,CAIA+wC,mBACI,OAAO/wC,KAAKsvC,uBAChB,CAKA0B,iBAAiBH,GAEb,OADA7wC,KAAKsvC,wBAA0C,iBAATuB,EAAoB7uC,GAAWivC,wBAAwBJ,GAAQA,EAC9F7wC,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBACZ2V,EAAgB5V,EAAK6V,UAAY7V,EAAK8V,mBAAqBjH,GAAKC,GAChEwG,EAAgBzD,GAAc0D,OAAOlvC,KAAKiX,UAC1CmxB,EAAQzO,EAAK0O,mBAAmBtU,EAAiBiF,MAAOh5B,KAAKsS,OACnEtS,KAAKsW,cAELqf,EAAI3gB,OAIJhV,KAAK8U,aACL6gB,EAAI0V,UAAU,aAAcrrC,KAAK6S,aAAa,OAC9C8iB,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAMi6B,EAAajC,EAAcV,oBAAoBvuC,KAAK+E,MACpDosC,EAAclC,EAAcf,kBAAkBluC,KAAK+E,MAAM2F,OAC/D,IAAI/G,EACAmF,EAEAnF,EADA3D,KAAKsvC,0BAA4Bd,GAA4BpV,KACzDgP,EAAMzkC,EAEL3D,KAAKsvC,0BAA4Bd,GAA4BlV,MAC9D8O,EAAMzkC,EAAIutC,EAETlxC,KAAKsvC,0BAA4Bd,GAA4B1V,OAC9DsP,EAAMzkC,EAAIutC,EAAa,EAGvBvX,EAAKyX,WAAaF,EAAa,EAEvC,IAAIG,EAAW,CAAC,EACZC,EAAU,EACd,MAAMC,EAAW5X,EAAK6V,UAChBpY,EAAQuC,EAAKxB,aAOnB,GAJIoZ,IACAF,EAAW1X,EAAK6X,YAAYrH,aAC5BmH,EAAUla,EAAMkM,0BAEhBtjC,KAAK+vC,wBAA0BtB,GAA0B6B,OAAQ,CAGjExnC,EADW6wB,EAAK8X,QACTpsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCoE,IAAM9I,KAAKu5B,UAAY,GAAKvL,EAAOgD,oBAAsBmgB,EACrDI,GAAYhC,IAAkB/G,GAAKE,OACnC5/B,EAAI7D,KAAK8E,IAAIjB,EAAGuoC,EAAS3G,KAAOyG,EAAcG,EAAUtxC,KAAKu5B,WAErE,MACK,GAAIv5B,KAAK+vC,wBAA0BtB,GAA0B3V,OAAQ,CACtE,MAAM4Y,EAAK/X,EAAKgY,eAAe3xC,KAAKu5B,WAAa,EAEjDzwB,EAAI4oC,GADOta,EAAMwa,kBAAkB5xC,KAAKu5B,WACzBmY,GAAM,EAAIP,EAAc,CAC3C,MACK,GAAInxC,KAAK+vC,wBAA0BtB,GAA0BwB,IAAK,CAEnEnnC,EADa7D,KAAKulC,OAAO7Q,EAAK8X,UAClBzxC,KAAKu5B,UAAY,GAAKvL,EAAOgD,oBACrCugB,GAAYhC,IAAkB/G,GAAKC,KAGnC6I,EAAUD,EAAS3G,KAAOtT,EAAMya,iBAAmB7jB,EAAOgD,oBAAsBsgB,EAChFxoC,EAAI7D,KAAKulC,IAAI1hC,EAAGuoC,EAAS3G,KAAO4G,GAAWtxC,KAAKu5B,UAAY,IAEpE,KACK,CACD,MAAMuY,EAAUnY,EAAKoY,iBACrBjpC,EAAIgpC,EAAQpH,MAAQoH,EAAQnH,MAAQmH,EAAQpH,MAAQ,EAAIyG,EAAc,CAC1E,EAtPR,YAAcptC,GACN/B,GAAWsgC,OACXz+B,EAAI,sBAAuBE,EACnC,CAoPQ,CAAE,yBAA0B/D,KAAK+E,KAAMpB,EAAGmF,GAC1C6sB,EAAIqc,SAAShyC,KAAK+E,KAAMpB,EAAGmF,GAC3B6sB,EAAI4V,aACJvrC,KAAK2V,eACLggB,EAAI/f,SACR,EAGJ5T,GAAWsgC,OAAQ,EACnBtgC,GAAWmV,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WAEjDnV,GAAWiwC,kBAAoBzD,GAC/BxsC,GAAWivC,wBAA0B,CACjC9X,KAAMqV,GAA4BpV,KAClCC,MAAOmV,GAA4BlV,MACnCT,OAAQ2V,GAA4B1V,OACpCoZ,WAAY1D,GAA4B2D,aAE5CnwC,GAAWguC,gBAAkBvB,GAC7BzsC,GAAW8uC,sBAAwB,CAC/B/X,MAAO0V,GAA0BwB,IACjCmC,IAAK3D,GAA0BwB,IAC/BhX,MAAOwV,GAA0B6B,OACjC+B,OAAQ5D,GAA0B6B,OAClCzX,OAAQ4V,GAA0B3V,OAClCoZ,WAAYzD,GAA0B0D,aC5Q1C,MAAM,MAAEnZ,GAAK,MAAEE,IAAUR,GAASC,SAClC,SAAS2Z,GAAmBC,EAAQnxC,GAChC,MAA6B,GAAtBmxC,EAAOnxC,EAAQ,GAC1B,CAEA,SAASoxC,GAAcxuC,EAAMwvB,GACzB,OAAOA,IAAawF,GAAQh1B,GAAQ,EAAIA,GAAQ,CACpD,CACA,SAASyuC,GAAoBzuC,EAAMwvB,GAC/B,OAAIgf,GAAcxuC,EAAMwvB,GAChBA,IAAawF,GACN/zB,KAAKytC,KAGLztC,KAAK4C,MAIT5C,KAAK6vB,KAEpB,CAeA,MAAM6d,GAAsBhZ,GAAS92B,EAAY82B,IAASt3B,EAAYs3B,GA0G/D,MAAMiZ,WAAqBla,GAEnBh3B,sBACP,OAAOG,EAAS+wC,YACpB,CAmBArtC,cAAcwmB,EAAewW,GACzB,IAAKxW,GAA0C,IAAzBA,EAAcnmB,OAChC,OAAO,EAEX,IAAIitC,EAAgB,EACpB,MAAMC,EAAe,CAACC,EAAc/uC,EAAMwvB,IAAa8e,GAAmBG,GAAoBzuC,EAAMwvB,GAAW9vB,EAAQqvC,EAAazjB,MAAMxe,aAAapG,QAAU,GAFlJ,IAGfqhB,EAAcnX,SAASm+B,IACnB,MAAMpZ,EAAOoZ,EAAanZ,oBAC1BiZ,EAAgB5tC,KAAK8E,IAAI4vB,EAAK0V,gBAAgBzf,WAAYijB,GAC1D,IAAInD,EAAQ,EACZ,MAAMH,EAAgB5V,EAAK6V,UAAY7V,EAAK8V,mBAAqBjH,GAAKC,GACtE,IAAI6B,EAAa,EAEjB,GAAIvnC,EAAgB42B,GAAO,CACvB,MAAM5G,EAAO4G,EAAKiW,UACd7c,IACAuX,EAAarlC,KAAK+C,IAAI+qB,EAAKkX,aAAejc,EAAOgD,oBAEzD,CACA,MAAMoG,EAAQuC,EAAKmB,WAInB,GAHI1D,IACAsY,EAAQtY,EAAM0Y,eAEdiD,EAAa1Y,gBAAkBrB,GAAO,CACtC,IAAIkX,EAAWvW,EAAKwW,eAAc,GAC9BZ,IAAkB/G,GAAKC,KACvByH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAcxQ,EAAM8N,cAAerX,IAChE,MAAMia,EAAS/C,EAAW3N,EAAM8N,cAAgB,IAE3C0C,EAAaA,aAAa/mB,eAAiBinB,EAASvD,IACrDsD,GAAatD,EAAQuD,GAEzBF,EAAaxY,YAAYgI,EAAM8N,eAC/B9N,EAAM8N,eAAiB2C,CAC3B,MACK,GAAID,EAAa1Y,gBAAkBnB,GAAO,CAC3C,IAAIgX,EAAWjrC,KAAK8E,IAAI2lC,EAAQ/V,EAAKwW,gBAAiB,GAClDZ,IAAkB/G,GAAKE,OACvBwH,GAAY5F,GAEhB,IAAI0I,EAAYF,EAAaC,EAAcxQ,EAAMhJ,UAAWL,IAC5D,MAAMsX,EAAYN,EAAW3N,EAAMhJ,UAAY,IAE1CwZ,EAAaA,aAAa/mB,eAAiBwkB,EAAYd,IACxDsD,GAAatD,EAAQc,GAEzBuC,EAAaxY,YAAYgI,EAAMhJ,WAC/BgJ,EAAMhJ,WAAayZ,CACvB,KAEJ,MAAMvoC,EAAQshB,EACTxY,KAAKw/B,GAAiBA,EAAanjB,aACnCvqB,QAAO,CAAC6tC,EAAUC,IAAeluC,KAAK8E,IAAIopC,EAAYD,KACrDE,EAAUnuC,KAAKulC,IAAIvlC,KAAK8E,IAAIU,EAAQooC,EAAe,GAAI5tC,KAAK8E,IAAIU,GAAS83B,EAAMK,WAAaL,EAAMmO,aAAc,IAGtH,OAFAnO,EAAMK,YAAcwQ,EAAU,EAC9B7Q,EAAMmO,aAAe0C,EAAU,GACxB,CACX,CACA7tC,sBAAqB,cAAEwmB,GAAiB4N,EAAM0Z,GAC1C,IAAKtnB,EACD,OACJ,MAAMunB,EAAkB,CACpBC,SAAU,KACVC,OAAQ,KACRC,OAAQ,MAEZ1nB,EACKpjB,MAAM,KACN4K,KAAKmgC,GAAgBA,EAAYtkC,OAAOzG,MAAM,OAC9C4K,KAAI,EAAE5C,EAAM6iB,MACb,MAAM3D,EAAQ,CAAE5d,KAAMqhC,EAAgB3iC,IAGtC,OAFI6iB,IACA3D,EAAM2D,SAAWkF,GAASE,eAAepF,IACtC6f,EAAQM,aAAaf,aAAa/iB,EAAM,IAE9Ctc,KAAKsc,GAAU8J,EAAK4N,YAAY1X,EAAO,IAChD,CASApuB,YAAYwQ,GACR1O,QACAvD,KAAKiS,KAAOA,EACZjS,KAAKwzB,SAAWwF,GAChBh5B,KAAKynC,eAAiB,CAClBC,WAAY,IAEhB1nC,KAAKg3B,OACT,CACAA,QACIh3B,KAAK+yC,aAAe/kB,EAAO4lB,kBAAkB5zC,KAAKiS,MAE7CjS,KAAK+yC,eACN/yC,KAAK+yC,aAAe,CAAE1vC,KAAMrD,KAAKiS,KAAM+Z,eAAe,GAClDhsB,KAAKiS,KAAK4hC,SAAS,WACnB7zC,KAAKwzB,SAAWwF,IAChBh5B,KAAKiS,KAAK4hC,SAAS,WACnB7zC,KAAKwzB,SAAW0F,KAExB,MAAM71B,GAAQrD,KAAKwzB,WAAawF,GAAQh5B,KAAK+yC,aAAa7mB,UAAYlsB,KAAK+yC,aAAa5mB,YAAcnsB,KAAK+yC,aAAa1vC,KACxHrD,KAAKsvB,MAAQ,IAAIG,EAAMpsB,QAAmCA,EAAO,GAAIrD,KAAKynC,eAAeC,YACzFhkC,EAAQ1D,KAAKsvB,MAAO,gBAAiB,2BAA2BtvB,KAAKiS,QACrEjS,KAAKy5B,SAAS/1B,EAAQ1D,KAAKsvB,MAAMxe,aAAarG,OAClD,CAEAqpC,gBAAgBC,GAAe,GAE3B,OADA/zC,KAAK+yC,aAAa/mB,cAAgB+nB,EAC3B/zC,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAMhE,EAAQtS,KAAK+5B,cACb,SAAEvG,EAAQ,MAAElE,EAAOiK,UAAWya,GAAah0C,KAC3Ci0C,EAAqBj0C,KAAK+yC,aAAa/mB,cACvCoL,EAAQuC,EAAKxB,aACb+b,EAAa9c,EAAMkM,yBACnB6Q,EAAQlxC,EAAU02B,IAElB,EAAEh2B,GAAMg2B,EAAK0O,mBAAmB7U,EAAUlhB,GAC1C8hC,GAAyBH,GAAsBE,EAC/CE,EAtLd,SAA0B1a,EAAMnG,GAC5B,MAAM8gB,EAAe9gB,IAAawF,IAASW,EAAK8V,qBAAuBjH,GAAKC,IACvEjV,IAAa0F,IAASS,EAAK8V,qBAAuBjH,GAAKE,KAC5D,OAAIiK,GAAmBhZ,GACfA,EAAK6V,WAAa8E,EACX,GAKA,EAIP3a,EAAK6V,WAAa8E,EACX,EAGA,CAGnB,CAiK8BC,CAAiB5a,EAAMnG,GACvCghB,EAAUxmB,EAAOyU,mBAAmBrxB,aAAa,gBAAgBke,EAAM2H,oBAAqB,GAClG,IAAInuB,EAAI,CACJ,CAACkwB,IAAQ,KACL1J,EAAMyI,UAAU,GAAK,GACrB,MAAMjvB,EAvQtB,SAAiB6wB,EAAMqa,GACnB,MAAMzE,EAAgB5V,EAAK8V,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAc/a,EAAKoY,iBAClD,GAAIY,GAAmBhZ,GACnB,OAAIA,EAAK6V,UACDD,IAAkB/G,GAAKC,GAChBgM,EAGAC,EAIJzvC,KAAKulC,OAAO7Q,EAAK8X,SAG3B,GAAIxuC,EAAU02B,GACf,OAAIA,EAAK6V,WACDD,IAAkB/G,GAAKC,GAChBgM,EAOJ9a,EAAKxB,aAAawZ,eAAeqC,GAI5C,MAAM,IAAI7wC,EAAa,kBAAmB,gEAElD,CAuO0BwxC,CAAQhb,EAAMqa,IAAaA,EAAWK,GAAiBH,EACjE,OAAOE,EAAwBnvC,KAAKulC,IAAIpT,EAAMua,eAAeiB,GAAagC,gBAAiB9rC,GAAKA,CAAC,EAErG,CAACowB,IAAQ,KACL5J,EAAMyI,UAAU,GAAK,GACrB,MAAMjvB,EA3OtB,SAAoB6wB,EAAMqa,GACtB,MAAMzE,EAAgB5V,EAAK8V,oBACnB/E,KAAM+J,EAAU9J,MAAO+J,GAAc/a,EAAKoY,iBAClD,GAAIY,GAAmBhZ,GACnB,OAAIA,EAAK6V,UACDD,IAAkB/G,GAAKC,GAChBiM,EAGAD,EAIJxvC,KAAK8E,OAAO4vB,EAAK8X,SAG3B,GAAIxuC,EAAU02B,GACf,OAAIA,EAAK6V,UACDD,IAAkB/G,GAAKC,GAChB9O,EAAKxB,aAAayZ,kBAAkBoC,GAGpCS,EAIJ9a,EAAKxB,aAAayZ,kBAAkBoC,GAI/C,MAAM,IAAI7wC,EAAa,kBAAmB,gEAElD,CA2M0B0xC,CAAWlb,EAAMqa,IAAaA,EAAWK,GAAiBH,EACpE,OAAOE,EAAwBnvC,KAAK8E,IAAIqtB,EAAMwa,kBAAkBgB,GAAagC,gBAAiB9rC,GAAKA,CAAC,GAE1G0qB,KACF,IAAK2gB,EAAO,CACR,MAAMW,EAAkBthB,IAAawF,IAAS,EAAI,EAC5CkX,EAAWvW,EAAKwJ,cAAc7wB,GAAOtO,KAErC+wC,GADoBpb,EAAK8X,QAAQn/B,GAASxJ,GAAKorC,EAChB1uC,OAAO0qC,GACtC8E,EApSlB,SAAyBf,EAAoBjwC,EAAMwvB,EAAUshB,GAEzD,MAAME,EAAc1C,GAAmBG,GAAoBzuC,EAAMwvB,GAAWxvB,GAG5E,GAF4BiwC,GAAsBzB,GAAcwC,EAAaxhB,IACzDwhB,EAAc,GAAM,EAGpC,OAAOA,EADkB,IACgBF,EAGzC,OAAOE,CAEf,CAwRgCC,CAAgBhB,EAAoBc,EAAWvhB,EAAUshB,GACzEtC,GAAcwC,EAAaxhB,IAC3BlE,EAAMyI,UAAU,GAAK,IACzBjvB,GAAK7D,KAAK+C,IAAIgtC,EAAcD,GAAab,EAAaY,EAAkBN,EAAUM,CACtF,EAjUR,YAAc/wC,GACN6uC,GAAatQ,OACbz+B,EAAI,wBAAyBE,EACrC,CA+TQ,CAAE,iCAAiCJ,SAASmF,MAC5CwmB,EAAM0I,OAAOrC,EAAKhyB,EAAGmF,EACzB,EAGJ8pC,GAAatQ,OAAQ,EACrBsQ,GAAagC,gBAAkB,GC/UxB,MAAMhyC,GACElB,sBACP,OAAOG,EAASe,aACpB,CACIkM,SAAKvG,GACLvI,KAAK+W,QAAQxO,EACjB,CACIuG,WACA,OAAO9O,KAAK0X,SAChB,CAKAw9B,WAAW3sC,GAEP,OADAvI,KAAK+W,QAAQxO,GACNvI,IACX,EASG,SAASm1C,GAAQxf,EAAKhyB,EAAGmF,EAAGssC,EAAQ,QACvCzf,EAAI3gB,OACJ2gB,EAAIrgB,aAAa8/B,GAEjBzf,EAAIQ,YACJR,EAAI0f,IAAI1xC,EAAGmF,EAAG,EAAG,EAAa,EAAV7D,KAAKC,IAAQ,GACjCywB,EAAI2f,YACJ3f,EAAIa,OACJb,EAAI/f,SACR,CC3BO,MAAM2/B,WAAiBxhC,EACfrS,sBACP,OAAOG,EAAS0zC,QACpB,CACA9zC,cACI8B,QACAvD,KAAKw1C,eAAgB,EACrBx1C,KAAKy1C,gBAAiB,EAGtBz1C,KAAKowB,MAAQ,IAAI9qB,EAAS,EAAG,GAC7BtF,KAAK01C,eAAiB,EACtB11C,KAAK21C,eAAiB,IAAIrwC,EAAS,EAAG,GAEtCtF,KAAKyK,MAAQ,EACbzK,KAAKu0B,QAAU,EACfv0B,KAAK41C,UAAY,GACjB51C,KAAK61C,YAAc,GACnB71C,KAAK81C,cAAe,EACpB91C,KAAK+1C,eAAiB,EAGtB/1C,KAAKg2C,cAAe,EAGpBh2C,KAAKi2C,iBAAmB,CAIpBC,QAAS,CAAE/c,KAAM,EAAGE,MAAO,GAG3B9K,SAAU,GAEV4nB,WAAY,EAGZC,MAAO,CACHC,KAAM,EACNC,KAAM,EACNC,UAAW,GAGvB,CAEAvf,QACI,OAAOh3B,IACX,CAEAumC,WACI,OAAOvmC,KAAKowB,KAChB,CAEAiW,oBACI,OAAOrmC,KAAKg2C,YAChB,CAEAQ,eAAexjB,GAEX,OADAhzB,KAAKg2C,aAAehjB,EACbhzB,IACX,CAEAy5B,SAAShvB,GACLzK,KAAKyK,MAAQA,CACjB,CAEAmlB,WACI,IAAK5vB,KAAKw1C,cACN,MAAM,IAAIryC,EAAa,kBAAmB,+CAE9C,OAAOnD,KAAKyK,OAASzK,KAAKk6B,gBAAkBl6B,KAAKk6B,gBAAgBtK,WAAa,EAClF,CAEA0H,UAAU3zB,GAEN,OADA3D,KAAKu0B,QAAU5wB,EACR3D,IACX,CAEAq3B,YACI,OAAOr3B,KAAKu0B,OAChB,CAEAtrB,OAEI,OADoBjJ,KAAKy2C,iBAAiB,uCACvBxtC,OAASjJ,KAAKu0B,OACrC,CAEAmiB,sBACI,OAAO12C,KAAKi2C,gBAChB,CAEAU,kBACI,OAAI32C,KAAK42C,kBACE52C,KAAK+1C,eAET,CACX,CAEAc,gBAAgBC,GAEZ,OADA92C,KAAK+1C,eAAiBe,EACf92C,IACX,CAEA42C,kBACI,OAAO52C,KAAK81C,YAChB,CAEAiB,mBAAmBjB,GAEf,OADA91C,KAAK81C,aAAeA,EACb91C,IACX,CAKAg3C,WACI,OAAOtzC,EAAQ1D,KAAKkmC,MAAO,UAAW,yBAC1C,CAEA+Q,SAAS/Q,GACLlmC,KAAKkmC,MAAQA,CACjB,CAEAgR,YACI,OAAOl3C,KAAKm3C,MAChB,CAEAC,iBACI,OAAOp3C,KAAK61C,WAChB,CAMAwB,YAAYF,GACR,IAAIG,EACAC,EACJ,GAAIJ,EAAQ,CACR,MAAMzuC,EAAI1I,KAAK61C,YAAY5/B,QAAQkhC,GAQnC,OAPW,IAAPzuC,IACA1I,KAAK61C,YAAYz/B,OAAO1N,EAAG,GAC3B4uC,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAEvBz3C,KAAK03C,oBAAoBJ,EAAWC,IAEjCv3C,IACX,CACA,KAAOA,KAAK61C,YAAYjwC,QAEpB0xC,GADAH,EAASn3C,KAAK61C,YAAY8B,OACPH,eACnBD,EAAgBJ,EAAOM,mBAEvBz3C,KAAK03C,oBAAoBJ,EAAWC,GAExC,OAAOv3C,IACX,CAEA43C,UAAUT,GACN,GAAIA,EAAQ,CACRn3C,KAAK61C,YAAYphC,KAAK0iC,GACtB,MAAMG,EAAYH,EAAOK,eACnBD,EAAgBJ,EAAOM,mBAC7Bz3C,KAAK03C,oBAAoBH,EAAeD,EAC5C,CAEA,OADAt3C,KAAKm3C,OAASA,EACPn3C,IACX,CAMA63C,qBAAqBC,GACjB93C,KAAKk6B,gBAAkB4d,EACvB,IAAK,IAAIpvC,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,SAAU8C,EACzC1I,KAAKk6B,gBAAgB6d,UAAU/3C,KAAK41C,UAAUltC,IAIlD,OAFA1I,KAAKk6B,gBAAgB6d,UAAU/3C,MAC/BA,KAAKw1C,eAAgB,EACdx1C,IACX,CAMAunC,YAAYD,EAAUh1B,EAAQ,GAG1B,OAFAtS,KAAK41C,UAAUnhC,KAAK6yB,GACpBtnC,KAAKw1C,eAAgB,EACdx1C,IACX,CAEAqnC,eACI,OAAOrnC,KAAK41C,SAChB,CAEAoC,eAAeC,GACXj4C,KAAK46B,YAAcqd,EACnBj4C,KAAKw1C,eAAgB,CACzB,CACAiB,iBAAiBnzC,EAAU,iCACvB,OAAOI,EAAQ1D,KAAK46B,YAAa,gBAAiBt3B,EACtD,CAEA40C,YACQl4C,KAAKw1C,gBAETx1C,KAAKyK,MAAQ,EACTzK,KAAKk6B,kBACLl6B,KAAKk6B,gBAAgBge,YACrBl4C,KAAKyK,OAASzK,KAAKk6B,gBAAgBtK,YAE3C,CAEIuoB,iBAAa/2C,GACbpB,KAAKw1C,cAAgBp0C,CACzB,CACI+2C,mBACA,OAAOn4C,KAAKw1C,aAChB,CAEA4C,aACI,OAAIp4C,KAAKy1C,iBAETz1C,KAAKy1C,gBAAiB,GADXz1C,IAGf,CAEIq4C,kBAAcj3C,GACdpB,KAAKy1C,eAAiBr0C,CAC1B,CACIi3C,oBACA,OAAOr4C,KAAKy1C,cAChB,CAEA6C,oBACI,OAAOt4C,KAAK01C,cAChB,CAEA6C,kBAAkB7C,GACd11C,KAAK01C,eAAiBA,EACtB11C,KAAKowB,MAAQpwB,KAAK21C,eAAejuC,QAAQX,SAAS/G,KAAK01C,eAC3D,CAEA8C,oBACI,OAAOx4C,KAAK21C,cAChB,CAEA+B,oBAAoB1xC,EAAWC,GAC3BjG,KAAK21C,eAAe5uC,SAASf,EAAWC,GACxCjG,KAAKowB,MAAQpwB,KAAK21C,eAAejuC,QAAQX,SAAS/G,KAAK01C,eAC3D,CAEA+C,YAAYlqB,GACR,MAAM6B,EAAQ7B,EAASvoB,WAAagoB,EAAO9V,WAAaqW,EAAStoB,aACjEjG,KAAKowB,MAAQpwB,KAAK21C,eAAejuC,QAAQX,SAASqpB,GAClDpwB,KAAK01C,eAAiB11C,KAAKowB,MAAMhvB,OACrC,CACAs3C,eAEI,OADoB14C,KAAKy2C,iBAAiB,+CACvBxtC,MACvB,CAEAmxB,mBAAmB0d,GAEf,OADA93C,KAAKk6B,gBAAkB4d,EAChB93C,IACX,CAEAi6B,qBACI,OAAOj6B,KAAKk6B,eAChB,CAEAC,uBACI,OAAOz2B,EAAQ1D,KAAKk6B,gBAAiB,oBAAqB,iDAC9D,EC9QG,MAAMx3B,WAAa6yC,GAGX7zC,sBACP,OAAOG,EAASa,IACpB,CAEA6C,mBAAmBowB,EAAKgE,EAAMzB,GAC1B,MAAM1nB,EAAUmpB,EAAK7oB,aACf6nC,EAAShf,EAAK+e,eAAiBloC,EAAQwqB,UAAYxqB,EAAQooC,oBAC3DC,EAAQlf,EAAK+e,eAAiBloC,EAAQooC,oBACtCE,EAAOnf,EAAK+e,eACZK,EAASpf,EAAK+e,eAAiBloC,EAAQwoC,OACvCC,EAAStf,EAAK+e,eAAiBloC,EAAQwoC,OAASxoC,EAAQ0oC,qBACxDC,EAAOxf,EAAK+e,eAAiBloC,EAAQwoC,OAASxoC,EAAQ0oC,qBAAuB1oC,EAAQyqB,WACrFme,EAAgBD,GAAQxf,EAAK+c,sBAAsBR,QAAQ7c,OAAS,GACpEggB,EAASF,EAAOR,EACtBhjB,EAAI3gB,OACJ2gB,EAAI5e,QAAQrJ,EAAKe,WAAY,GAC7BknB,EAAIqc,SAAS/sC,KAAK6vB,MAAMukB,GAAU,KAAMV,EAAShf,EAAKtC,YAAaa,GACnE,MAAMpvB,EAAIovB,EAAO,EACjB,SAAStJ,EAAO1kB,EAAIG,EAAI+qC,EAAOkE,EAAKxwC,GAChC6sB,EAAIQ,YACJR,EAAIngB,eAAe4/B,GACnBzf,EAAIrgB,aAAa8/B,GACjBzf,EAAIjgB,aAAa,GACjBigB,EAAIS,OAAOlsB,EAAKyvB,EAAKtC,YAAaiiB,GAClC3jB,EAAIU,OAAOhsB,EAAKsvB,EAAKtC,YAAaiiB,GAClC3jB,EAAI/G,QACR,CACAA,EAAO+pB,EAAQE,EAAO,OACtBjqB,EAAOiqB,EAAOC,EAAM,QACpBlqB,EAAOkqB,EAAMC,EAAQ,SACrBnqB,EAAOmqB,EAAQE,EAAQ,QACvBrqB,EAAOqqB,EAAQE,EAAM,OACrBvqB,EAAOuqB,EAAMC,EAAe,QAC5BxqB,EAAO+pB,EAAShf,EAAKtC,YAAashB,EAAQ,QAC1CxD,GAAQxf,EAAKmjB,EAAOnf,EAAKtC,YAAavuB,EAAG,QACzC,MAAMmtC,EAAmBtc,EAAK+c,sBAC9B,GAAIT,EAAiBE,WAAa,EAAG,CACjC,MAAMoD,EAAiBtD,EAAiBG,MAAMG,UACxCzxC,EAASy0C,GAAkB,EAAI,IAAM,GAC3C5jB,EAAIrgB,aAAa,OACjBqgB,EAAIqc,SAASltC,EAASG,KAAK6vB,MAAMykB,GAAiBT,EAAOnf,EAAKtC,YAAaa,EAAO,GACtF,CACAvC,EAAI/f,SACR,CACArQ,qBAAqBi0C,GACjB,IAAKA,EACD,OAEJ,MACMpsC,EADS,mCACOgzB,KAAKoZ,GAC3B,IAAKpsC,EACD,OAKJ,MAAO,CAAEmhB,SAHQnhB,EAAO,GAGLqsC,KAFNrsC,EAAO,GAAGxH,OAEEqM,KADZ7E,EAAO,IAAM,IAE9B,CACA7H,uBAAuBm0C,GAEnB,MAAMC,EAAgBj3C,GAAKk3C,cAAcF,EAAWnrB,UACpD,IAAKorB,EACD,OAGJ,IAAI1nC,EAAOynC,EAAWznC,KACtB,GAAIA,IAAS+b,EAAOmE,WAAWlgB,GAC3B,OAGJ,MAAM4nC,EAAc,GACf5nC,IACDA,EAAO0nC,EAAc1nC,MAAQ,SAELrO,IAApB81C,EAAWpmC,MACXomC,EAAWpmC,KAAKsB,SAAQ,CAACpB,EAAG9K,KACxB,MAAM0E,EAASoG,EAAE7K,MAAM,KAEvBkxC,EAAYnxC,GAAM0E,GAA4B,IAAlBA,EAAOxH,OAAewH,EAAO,GAAK6E,CAAK,KAK/E,IAAIme,EAAQpC,EAAO8rB,gBAAgBH,EAAcprB,UACjD,IAAK6B,EACD,OAGJ,MAAMqpB,EAAOC,EAAWD,KAAOC,EAAWD,KAAOE,EAAcF,KAC/D,GAAoB,iBAATA,EACP,OAGJ,IAAIM,EAAe3pB,EACnB,IAAK,IAAI1nB,EAAI,EAAGA,EAAI+wC,EAAM/wC,IAAK,CAC3B,GAAIqxC,GAAgB,EAChB,OACJA,GAA8B,EAC9B3pB,GAAS2pB,CACb,CACA,MAAO,CACHxrB,SAAUorB,EAAcprB,SACxBtc,OACA4nC,cACAJ,OACArpB,QAER,CAOA3uB,YAAYi4C,GAER,GADAn2C,SACKm2C,EACD,MAAM,IAAIv2C,EAAa,eAAgB,2EAG3C,MAAM62C,EAAmBt3C,GAAKu3C,gBAAgBP,GAC9C,IAAKM,EACD,MAAM,IAAI72C,EAAa,eAAgB,uCAAuC+2C,KAAKC,UAAUT,MAGjG15C,KAAKsT,KAAOomC,EAAWpmC,MAAQ,GAE/BtT,KAAKo6C,SAAW,GAChBp6C,KAAKuuB,SAAWyrB,EAAiBzrB,SACjCvuB,KAAKq6C,SAAWL,EAAiB/nC,KACjCjS,KAAK65C,YAAcG,EAAiBH,YAChCH,EAAWY,kBAEXt6C,KAAKy4C,YAAYiB,EAAWY,mBAI5Bt6C,KAAKu4C,kBAAkByB,EAAiB5pB,OAE5CpwB,KAAK41C,UAAY,GAEjB51C,KAAKu6C,WAAavsB,EAAOqhB,cAAcrvC,KAAKuuB,SAAUvuB,KAAKq6C,UAC3Dr6C,KAAKw6C,aAAex6C,KAAK65C,YAAYtmC,KAAK7N,GAAMsoB,EAAOqhB,cAAcrvC,KAAKuuB,SAAU7oB,KAEpF1F,KAAKy6C,cAAW72C,EAEhB5D,KAAKg2C,cAAe,EAEpBh2C,KAAKyK,MAAQ,EACbzK,KAAK44C,oBAAsB,EAC3B54C,KAAKk5C,qBAAuB,EAC5Bl5C,KAAKu0B,QAAU,EACfv0B,KAAKqqC,GAAK,GAENqP,EAAW5D,cACX91C,KAAK+2C,mBAAmB2C,EAAW5D,cAGvC91C,KAAKynC,eAAiB,CAClBiT,mBAAoB,EACpBC,iBAAkB,EAClBC,UAAW,EACXvrB,MAAO,EACPvgB,KAAM,GACN0lB,QAAS,EAEjB,CAKAqmB,cACI,OAAO76C,KAAKy6C,QAChB,CAKAK,YAAYnhB,GAER,OADA35B,KAAKy6C,SAAW9gB,EACT35B,IACX,CAOA8mC,SACI,OAAO,CACX,CAEAiU,UAAUzoC,EAAOsc,GAKb,OAJAA,EAAOiL,QAAQ75B,MACf4uB,EAAOoL,SAAS1nB,GAChBtS,KAAK41C,UAAUnhC,KAAKma,GACpB5uB,KAAKm4C,cAAe,EACbn4C,IACX,CAEA86B,WACI,OAAO96B,KAAKo3B,KAChB,CAEAe,aACI,OAAOz0B,EAAQ1D,KAAKo3B,MAAO,UAAW,iCAC1C,CAEAD,SAASC,GAIL,OAHAp3B,KAAKo3B,MAAQA,EACbp3B,KAAKg7C,MAAM,CAAC5jB,EAAMmM,YAAY,KAC9BvjC,KAAK8W,WAAW9W,KAAKo3B,MAAMvgB,cACpB7W,IACX,CAEAojC,yBACI,OAAOpjC,KAAK44C,mBAChB,CAEAqC,0BACI,OAAOj7C,KAAKk5C,oBAChB,CAEAgC,uBAAuBv3C,GAEnB,OADA3D,KAAK44C,oBAAsBj1C,EACpB3D,IACX,CAEAm7C,wBAAwBx3C,GAEpB,OADA3D,KAAKk5C,qBAAuBv1C,EACrB3D,IACX,CAEAqmC,oBACI,OAAOrmC,KAAKg2C,YAChB,CAGA7F,cAAciL,GACV,OAAO,CACX,CAEAC,iBACI,OAAO,CACX,CAKAC,WACI,OAAOt7C,KAAKu6C,UAChB,CAEAlL,gBACI,OAAOrvC,KAAKu6C,UAChB,CAEAgB,gBACI,OAAOv7C,KAAKu6C,WAAW3qB,SAAS5vB,KAAKynC,eAAekT,iBACxD,CAKAK,MAAM3Q,GAEF,OADArqC,KAAKqqC,GAAKA,EACHrqC,IACX,CAKAyxC,QACI,GAAuB,IAAnBzxC,KAAKqqC,GAAGzkC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,OAAOnD,KAAKqqC,EAChB,CAKAsH,eAAepY,GACX,OAAOv5B,KAAKm4B,aAAawZ,eAAepY,EAC5C,CAEAyd,WACI,IAAKh3C,KAAKkmC,MACN,MAAM,IAAI/iC,EAAa,UAAW,sBACtC,OAAOnD,KAAKkmC,KAChB,CAEA+Q,SAAS/Q,GAGL,OAFAlmC,KAAKkmC,MAAQA,EACblmC,KAAKm4C,cAAe,EACbn4C,IACX,CAEA66B,iBACI,OAAO76B,KAAKy2C,kBAChB,CAEAuB,eAAeC,GAGX,OAFAj4C,KAAK46B,YAAcqd,EACnBj4C,KAAKm4C,cAAe,EACbn4C,IACX,CAEAw7C,cACI,OAAOx7C,KAAKuuB,QAChB,CAEAktB,WACI,OAAOz7C,KAAK07C,mBAAmB75C,EAASO,KAAKwD,OAAS,CAC1D,CAEA4pC,UACI,OAAO,CACX,CAEAK,cACI,OAAO7vC,KAAKq6C,QAChB,CAEAsB,UACI,OAAO37C,KAAK47C,IAChB,CAEAC,YACI,OAAOn4C,EAAQ1D,KAAK47C,KAAM,SAAU,+BACxC,CAEAE,UACI,OAAoBl4C,MAAb5D,KAAK47C,IAChB,CAEAG,QAAQH,GAEJ,OADA57C,KAAK47C,KAAOA,EACL57C,IACX,CAOAunC,YAAYD,EAAUh1B,EAAQ,GAC1B,MAAM0pC,EAAY,wDASlB,GAPqB,iBAAV1pC,IACPA,EAAQzN,SAASyN,GAEjBlO,QAAQC,KAAK23C,EAAY,2DAIL,iBAAb1U,GAA0C,iBAAVh1B,EACvC,MAAM,IAAInP,EAAa,cAAe,iCAAmC64C,EAAY,aAKzF,OAHA1U,EAASzN,QAAQ75B,MACjBsnC,EAAStN,SAAS1nB,GAClB/O,MAAMgkC,YAAYD,GACXtnC,IACX,CAEA07C,mBAAmBzpC,GACf,OAAOjS,KAAK41C,UAAUqG,QAAQ3U,GAAaA,EAASlzB,gBAAkBnC,GAC1E,CAGAo2B,mBAAmB7U,EAAUlhB,EAAO+b,GAChC,IAAKruB,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,wDAE9C,MAAO,CACHQ,EAAG3D,KAAK04C,eACR5vC,EAAG9I,KAAKqqC,GAAG,GAEnB,CACA6R,sBAAsB5pC,GAElB,OADctS,KAAKmjC,cAAc7wB,GACpB2c,UAAYjvB,KAAKi7C,0BAA4B,CAC9D,CACAkB,qBAAqB7pC,GAEjB,OADctS,KAAKmjC,cAAc7wB,GACpB2c,UAAYjvB,KAAKojC,yBAA2BpjC,KAAKu0B,SAAWv0B,KAAKu0B,OAClF,CACA6nB,gBACI,IAAI3qC,EAAKzR,KAAKi7C,0BAGd,OAFqE,IAAjEj7C,KAAKm6B,uBAAuBkiB,WAAW,eAAez2C,SACtD6L,GAAMuc,EAAOyU,mBAAmBrxB,aAAa,8BAC1CK,CACX,CAEAX,aACI,IAAK9Q,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,iDAE9C,MAAM63B,EAAYh7B,KAAKk6B,gBAAkBl6B,KAAKk6B,gBAAgBoiB,WAAW1Z,WAAa,EAChF3H,EAAaj7B,KAAKk6B,gBAAkBl6B,KAAKk6B,gBAAgBoiB,WAAW5L,YAAc,EAClFjmC,EAAQzK,KAAK4vB,WAQnB,MAAO,CACHnlB,QACA2kC,WATepvC,KAAKu7C,gBAUpBvC,OATWvuC,EACXuwB,EACAC,EACAj7B,KAAK44C,oBACL54C,KAAKk5C,qBAOLle,YACAC,aAEA2d,oBAAqB54C,KAAK44C,oBAC1BM,qBAAsBl5C,KAAKk5C,qBAC3BqD,QAAS,EAEjB,CAMA7D,eAGI,IAAI/0C,EAFgB3D,KAAKy2C,iBAAiB,+CAEtBxtC,OAOpB,OANIjJ,KAAKo3B,QACLzzB,GAAK3D,KAAKo3B,MAAMolB,gBAAkBxuB,EAAOyU,mBAAmBrxB,aAAa,kBAEzEpR,KAAK42C,oBACLjzC,GAAK3D,KAAK22C,mBAEPhzC,CACX,CAEA8rC,mBACI,MAAM,IAAItsC,EAAa,SAAU,iCACrC,CAEA4uC,iBACI,MAAM,IAAI5uC,EAAa,SAAU,iCACrC,CAEAs5C,eACI,IAAIC,EAAY18C,KAAK04C,eAIrB,OAFAgE,GADyB18C,KAAKu6C,WAAW3qB,WACT,EAChC8sB,IAAc18C,KAAKyK,MAAQ,EAAIzK,KAAKyK,MAAQ,EACrCiyC,CACX,CAEAC,cACI,IAAIC,EAAU58C,KAAK04C,eAInB,OAFAkE,GADyB58C,KAAKu6C,WAAW3qB,WACX,EAC9BgtB,GAAW58C,KAAKyK,MAAQ,EAAI,EACrBmyC,CACX,CAEAC,UACI,OAAO78C,KAAKsT,IAChB,CAEA6vB,cACI,OAAOnjC,KAAKo6C,QAChB,ECleG,IAAI0C,GCDAC,GCiBAC,GAOAC,GAKAC,GAMAC,IFjCX,SAAWL,GACPA,EAAsBA,EAA8B,OAAI,GAAK,SAC7DA,EAAsBA,EAA4B,KAAI,GAAK,OAC3DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA6B,MAAI,GAAK,QAC5DA,EAAsBA,EAA2B,IAAI,GAAK,KAC7D,CARD,CAQGA,KAA0BA,GAAwB,CAAC,IAC/C,MAAMM,WAAsBrpC,EACpBrS,sBACP,OAAOG,EAASu7C,aACpB,CACWzkB,sBACP,OAAOmkB,EACX,CACAr7C,cACI8B,QACAvD,KAAKyK,MAAQ,EACbzK,KAAK2D,EAAI,EACT3D,KAAKw0C,QAAU,GACfx0C,KAAKwzB,SAAWspB,GAAsB9jB,KAC1C,CACAqB,cACI,OAAOr6B,KAAKwzB,QAChB,CACA8G,YAAY9G,GAER,OADAxzB,KAAKwzB,SAAWA,EACTxzB,IACX,CACA86B,WACI,OAAO96B,KAAKo3B,KAChB,CACAe,aACI,OAAOz0B,EAAQ1D,KAAKo3B,MAAO,UAAW,iCAC1C,CACAD,SAASC,GAEL,OADAp3B,KAAKo3B,MAAQA,EACNp3B,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAgvB,SAAShvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACAiJ,OACI,OAAOjJ,KAAK2D,CAChB,CACA0F,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAUAq9C,iBAAiB/tB,EAAO8H,EAAOpzB,EAAMs5C,EAAc,GAC/ChuB,EAAMkI,UAAUJ,EAAMmM,YAAYv/B,QAAmCA,EAAO,GAAKozB,EAAMiB,gBAAkBilB,EAC7G,CACAC,WAAWjrC,GACP,YAAiB1O,IAAV0O,GAAuBA,EAAQ,EAAI,EAAItS,KAAKw0C,OACvD,CACAgJ,WAAWhJ,GAEP,OADAx0C,KAAKw0C,QAAUA,EACRx0C,IACX,CACAy9C,iBAAiBC,GAEb,OADA19C,KAAK09C,cAAgBA,EACd19C,IACX,CACA29C,mBACI,OAAO39C,KAAK09C,aAChB,CAEA3nC,QAAQhS,GAER,GCpFJ,SAAWg5C,GACPA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAoB,OAAI,GAAK,SACzCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAA0B,aAAI,GAAK,eAC/CA,EAAYA,EAAwB,WAAI,GAAK,aAC7CA,EAAYA,EAAyB,YAAI,GAAK,cAC9CA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CARD,CAQGA,KAAgBA,GAAc,CAAC,IAC3B,MAAM76C,WAAgBk7C,GACd17C,sBACP,OAAOG,EAASK,OACpB,CACW+P,kBACP,OAAO8qC,EACX,CACWa,wBACP,MAAO,CACHC,OAAQd,GAAYe,OACpBC,OAAQhB,GAAYiB,OACpBC,IAAKlB,GAAYmB,IACjBC,YAAapB,GAAYqB,aACzBC,UAAWtB,GAAYuB,WACvBC,WAAYxB,GAAYyB,YACxBC,KAAM1B,GAAY2B,KAE1B,CACAj9C,YAAYwQ,GACR1O,QACAvD,KAAK2+C,UAAY3wB,EAAO6C,qBACxB,MAAM+tB,EAAO7B,GACb/8C,KAAK6+C,OAAS,CAAC,EACf7+C,KAAK6+C,OAAOD,EAAKd,QAAU,EAC3B99C,KAAK6+C,OAAOD,EAAKZ,QAAU,EAC3Bh+C,KAAK6+C,OAAOD,EAAKV,KAAO,EACxBl+C,KAAK6+C,OAAOD,EAAKR,cAAgB,EACjCp+C,KAAK6+C,OAAOD,EAAKN,YAAc,EAC/Bt+C,KAAK6+C,OAAOD,EAAKJ,aAAe,EAChCx+C,KAAK6+C,OAAOD,EAAKF,MAAQ,EACzB1+C,KAAK8+C,SAAW,CAAC,EACjB9+C,KAAK8+C,SAASF,EAAKd,QAAU,EAC7B99C,KAAK8+C,SAASF,EAAKZ,QAAU,EAC7Bh+C,KAAK8+C,SAASF,EAAKV,KAAO,EAC1Bl+C,KAAK8+C,SAASF,EAAKR,cAAgB,GACnCp+C,KAAK8+C,SAASF,EAAKN,YAAc,GACjCt+C,KAAK8+C,SAASF,EAAKJ,aAAe,GAClCx+C,KAAK8+C,SAASF,EAAKF,MAAQ,EAC3B1+C,KAAK++C,iBAAmB,CAAC,EACzB/+C,KAAK++C,iBAAiBH,EAAKd,QAAU,CACjCkB,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKZ,QAAU,CACjCgB,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKV,KAAO,CAC9Bc,MAAO,EACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKN,YAAc,CACrCU,MAAO,GACPC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKR,cAAgB,CACvCY,MAAO,EACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKJ,aAAe,CACtCQ,MAAO,GACPC,KAAM,GACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAK++C,iBAAiBH,EAAKF,MAAQ,CAC/BM,KAAM,EACNC,KAAM,EACNC,YAAa,EACbC,aAAc,GAElBn/C,KAAKs6B,YAAYwiB,GAAsBsC,OACvCp/C,KAAKq/C,QAAQptC,EACjB,CACAqtC,UACI,OAAOt/C,KAAKiS,IAChB,CACAotC,QAAQptC,GAKJ,OAJAjS,KAAKiS,KAAuB,iBAATA,EAAoB/P,GAAQ07C,WAAW3rC,GAAQA,EAClEjS,KAAKy5B,SAASz5B,KAAK6+C,OAAO7+C,KAAKiS,OAC/BjS,KAAKw9C,WAAWx9C,KAAK8+C,SAAS9+C,KAAKiS,OACnCjS,KAAKy9C,iBAAiBz9C,KAAK++C,iBAAiB/+C,KAAKiS,OAC1CjS,IACX,CAEA+V,KAAKqhB,GACD,MAAMzB,EAAMyB,EAAMthB,eAIlB,OAHA9V,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChBA,EAAI0V,UAAU,eAAgBrrC,KAAK6S,aAAa,OACxC7S,KAAKiS,MACT,KAAK8qC,GAAYe,OACb99C,KAAKu/C,gBAAgBnoB,EAAOp3B,KAAK2D,GAAG,GACpC,MACJ,KAAKo5C,GAAYiB,OACbh+C,KAAKu/C,gBAAgBnoB,EAAOp3B,KAAK2D,GAAG,GACpC,MACJ,KAAKo5C,GAAYmB,IACbl+C,KAAKw/C,mBAAmBpoB,EAAOp3B,KAAK2D,GACpC,MACJ,KAAKo5C,GAAYqB,aAGbp+C,KAAKy/C,cAAcroB,EAAOp3B,KAAK2D,GAAG,GAC9ByzB,EAAMnuB,SAAWjJ,KAAK2D,GACtB3D,KAAKu/C,gBAAgBnoB,EAAOA,EAAMnuB,QAEtC,MACJ,KAAK8zC,GAAYuB,WACbt+C,KAAKy/C,cAAcroB,EAAOp3B,KAAK2D,GAAG,GAClC,MACJ,KAAKo5C,GAAYyB,YACbx+C,KAAKy/C,cAAcroB,EAAOp3B,KAAK2D,GAAG,GAClC3D,KAAKy/C,cAAcroB,EAAOp3B,KAAK2D,GAAG,GAM1CgyB,EAAI4V,aACJvrC,KAAK2V,aAAaggB,EACtB,CACA4pB,gBAAgBnoB,EAAOzzB,EAAG+7C,GACtB,MAAMC,EAAWvoB,EAAMthB,eACjB40B,EAAOtT,EAAMya,iBACb+N,EAAOxoB,EAAMyoB,uBACfH,GACAC,EAASG,SAASn8C,EAAI,EAAG+mC,EAAM,EAAGkV,EAAOlV,GAE7CiV,EAASG,SAASn8C,EAAG+mC,EAAM,EAAGkV,EAAOlV,EACzC,CACA8U,mBAAmBpoB,EAAOzzB,GACtB,MAAMg8C,EAAWvoB,EAAMthB,eACjB40B,EAAOtT,EAAMya,iBACb+N,EAAOxoB,EAAMyoB,uBACnBF,EAASG,SAASn8C,EAAI,EAAG+mC,EAAM,EAAGkV,EAAOlV,GACzCiV,EAASG,SAASn8C,EAAI,EAAG+mC,EAAM,EAAGkV,EAAOlV,EAC7C,CACA+U,cAAcroB,EAAOzzB,EAAGo8C,GACpB,MAAMJ,EAAWvoB,EAAMthB,eACjB40B,EAAOtT,EAAMya,iBACb+N,EAAOxoB,EAAMyoB,uBACnB,IAAItrB,EAAU,EACTwrB,IACDxrB,GAAW,GAEforB,EAASG,SAASn8C,EAAI4wB,EAASmW,EAAM,EAAGkV,EAAOlV,GAC/CiV,EAASG,SAASn8C,EAAI,EAAG+mC,EAAM,EAAGkV,EAAOlV,GAGrCqV,EACAxrB,GAAW,EAGXA,GAAW,EAEf,MAAMyrB,EAAQr8C,EAAI4wB,EAAU0rB,EAE5B,IAAI/V,GAAY9S,EAAM0Y,cAAgB,GAAK1Y,EAAMkM,yBACjD4G,EAAWA,EAAW,EAAI9S,EAAMkM,yBAA2B,EAC3D,IAAI4c,EAAQxV,EAAOR,EAAW+V,EAE9BN,EAASxpB,YACTwpB,EAAStK,IAAI2K,EAAOE,EAfD,EAeoB,EAAa,EAAVj7C,KAAKC,IAAQ,GACvDy6C,EAASnpB,OAET0pB,GAAS9oB,EAAMkM,yBACfqc,EAASxpB,YACTwpB,EAAStK,IAAI2K,EAAOE,EApBD,EAoBoB,EAAa,EAAVj7C,KAAKC,IAAQ,GACvDy6C,EAASnpB,MACb,EElLG,MAAM2pB,WAAgBz9C,GACdhB,sBACP,OAAOG,EAASs+C,OACpB,CACA1+C,YAAYwQ,EAAO8qC,GAAYe,QAC3Bv6C,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAKwQ,QAAU,CACXquC,OAAQ,CAAC,GAEb,MAAMD,EAAO7B,GACb/8C,KAAKwQ,QAAQquC,OAAS,CAClB,CAACD,EAAKd,QAAS,EACf,CAACc,EAAKZ,QAAS,GACf,CAACY,EAAKV,KAAM,GACZ,CAACU,EAAKR,cAAe,GACrB,CAACQ,EAAKN,YAAa,GACnB,CAACM,EAAKJ,aAAc,GACpB,CAACI,EAAKF,MAAO,GAGjB1+C,KAAKg2C,cAAe,EACpBh2C,KAAKq/C,QAAQptC,EACjB,CAEAqtC,UACI,OAAOt/C,KAAKiS,IAChB,CAEAotC,QAAQptC,GAIJ,OAHAjS,KAAKiS,KAAuB,iBAATA,EAAoB/P,GAAQ07C,WAAW3rC,GAAQA,EAElEjS,KAAKy5B,SAASz5B,KAAKwQ,QAAQquC,OAAO7+C,KAAKiS,OAChCjS,IACX,CAGA63C,qBAAqBC,GAEjB,OAAO93C,IACX,CAEAk4C,YAEI,OADAl4C,KAAKm4C,cAAe,EACbn4C,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,gBA1DzB,YAAc/R,GACNo8C,GAAQ7d,OACRz+B,EAAI,mBAAoBE,EAChC,CAwDQ,CAAE,0BAA2B/D,KAAK04C,gBAClC14C,KAAK8U,WAAW6gB,GAChB,MAAMyqB,EAAU,IAAIl+C,GAAQlC,KAAKiS,MACjCmuC,EAAQ/2C,KAAKrJ,KAAK04C,gBAClB0H,EAAQrqC,KAAK/V,KAAKm4B,cAClBn4B,KAAK2V,aAAaggB,GAClB31B,KAAKsW,aACT,EAGJ6pC,GAAQ7d,OAAQ,ECpET,MAAM+d,WAAa3nB,GACXh3B,sBACP,OAAOG,EAASw+C,IACpB,CACW5X,gBACP,OAAO,CACX,CACWC,kBACP,OAAO,CACX,CAEAnjC,cAAc+6C,EAAO/d,GACjB,IAAK+d,GAA0B,IAAjBA,EAAM16C,OAChB,OAAO,EACX,IAAI26C,EAAa,EAEjB,IAAK,IAAI73C,EAAI,EAAGA,EAAI43C,EAAM16C,SAAU8C,EAAG,CACnC,MAAMglB,EAAO4yB,EAAM53C,GACbixB,EAAOjM,EAAKkM,oBAClB,GAAI32B,EAAU02B,GAAO,CACjB,MAAM6mB,EAAY7mB,EAAKyW,cAAgB,EACnC7N,EAAM8N,cAAgBmQ,IACtBje,EAAM8N,cAAgBmQ,EAE9B,CACA9yB,EAAK4J,UAAUipB,GACfA,EAAa7yB,EAAKkC,WAClBlC,EAAK6M,YAAYgI,EAAM8N,cAC3B,CAGA,OAFA9N,EAAMmO,aAAe6P,EACrBhe,EAAM8N,eAAiB,GAChB,CACX,CAkCA5uC,YAAYsD,EAAM07C,GAAU,EAAOC,GAC/Bn9C,QACAvD,KAAK+E,KAAOA,EACZ/E,KAAKu0B,QAAU,EACfv0B,KAAKygD,QAAUA,EACfzgD,KAAK2gD,IAAM,GACX3gD,KAAK2X,YACL3X,KAAKynC,eAAiB,CAClBmZ,WAAY,IACZC,WAAY,UACZC,WAAY,EACZC,cAAe,GAEfL,EACA1gD,KAAK0gD,OAASA,GAId1gD,KAAK0gD,OAAS,CAAC,CAAEzuC,KAAMouC,GAAK5X,GAAI1jC,KAAM/E,KAAK+E,OACvC/E,KAAKygD,SACLzgD,KAAK0gD,OAAOjsC,KAAK,CAAExC,KAAMouC,GAAK3X,KAAM3jC,KAAM,MAElD/E,KAAKghD,aACT,CAEA1pB,UAAUl2B,GAGN,OAFApB,KAAKu0B,QAAUnzB,EACfpB,KAAKghD,cACEhhD,IACX,CACAihD,OAAO7/C,GAEH,OADApB,KAAK2gD,IAAMv/C,EACJpB,IACX,CAEAkhD,UACI,OAAOlhD,KAAK+E,IAChB,CACAo8C,gBAEI,OADsB3V,GAAc0D,OAAOlvC,KAAKiX,UAC3Bw2B,SACzB,CAEAuT,cACI,MAAM/R,EAAgBzD,GAAc0D,OAAOlvC,KAAKiX,UAIhD,IAAImqC,EAAa,EACjB,IAAK,IAAI14C,EAAI,EAAGA,EAAI1I,KAAK0gD,OAAO96C,SAAU8C,EAAG,CACzC,MAAMglB,EAAO1tB,KAAK0gD,OAAOh4C,GACzB,QAAmB9E,IAAf8pB,EAAKjjB,MACL22C,GAAc1zB,EAAKjjB,UAElB,CACD,MAAM42C,EAAmB3zB,EAAKzb,OAASouC,GAAK5X,GAAKzoC,KAAKynC,eAAeqZ,WAAa9gD,KAAKynC,eAAesZ,cACtGrzB,EAAKjjB,MAAQxF,KAAK8E,IAAIs3C,GAXTt8C,EAWuC2oB,EAAK3oB,KAVtDkqC,EAAcV,oBAAoBxpC,KAU6B,EAClE2oB,EAAK4zB,WAAa5zB,EAAKjjB,MAAQ,EAC/B22C,GAAc1zB,EAAKjjB,KACvB,CACJ,CAfoB,IAAC1F,EAiBrB,OADA/E,KAAKy5B,SAAS2nB,EAAaphD,KAAKu0B,SACzBv0B,IACX,CAEA+V,OACI,IAAIlI,EACJ,MAAM8nB,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAM8xB,EAAQzO,EAAK0O,mBAAmB3P,GAASC,SAASW,MAAOt5B,KAAKsS,OACpE81B,EAAMzkC,GAAK,EACXykC,EAAMt/B,GAAK,GACX,MAAMyrB,EAAUv0B,KAAKu0B,QAEf+c,EADQ3X,EAAKxB,aACGmL,yBAChBie,EAAU5nB,EAAK8X,QAAQpsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAErD88C,EAAcpZ,EAAMt/B,IAAM9I,KAAKu5B,UAAY,GAAK+X,EAAUlJ,EAAMt/B,EAAIy4C,GAAW,EAC/EE,EAAerZ,EAAMt/B,IAAM9I,KAAKu5B,UAAY,GAAK+X,EAAUlJ,EAAMt/B,EAAIy4C,GAAW,EAChFG,EAAa,CAAC/9C,EAAGmF,EAAG2B,EAAOC,KAC7B,MAAMi3C,EAAOh+C,EAAI8G,EACXm3C,EAAO94C,EACb6sB,EAAI3gB,OACJ2gB,EAAIQ,YACJR,EAAIjgB,aAAa1V,KAAKynC,eAAemZ,YACrCjrB,EAAIngB,eAAexV,KAAKynC,eAAeoZ,YACvClrB,EAAIrgB,aAAatV,KAAKynC,eAAeoZ,YACrClrB,EAAIS,OAAOzyB,EAAGmF,GACd6sB,EAAIW,iBAAiBqrB,EAAMC,EAAMj+C,EAAI8G,EAAOC,GAC5CirB,EAAI/G,SACJ+G,EAAI/f,SAAS,EAEXisC,EAAgB,CAACl+C,EAAGmF,EAAG2B,EAAOC,KAChCirB,EAAI3gB,OACJ2gB,EAAIQ,YACJR,EAAIjgB,aAAa1V,KAAKynC,eAAemZ,YACrCjrB,EAAIngB,eAAexV,KAAKynC,eAAeoZ,YACvClrB,EAAIrgB,aAAatV,KAAKynC,eAAeoZ,YACrClrB,EAAIS,OAAOzyB,EAAG+G,GACdirB,EAAIW,iBAAiB3yB,EAAI8G,EAAOC,EAAQ/G,EAAI8G,EAAO3B,GACnD6sB,EAAI/G,SACJ+G,EAAI/f,SAAS,EAEXksC,EAAkB,CAACn+C,EAAGmF,EAAGg4B,KAC3B,MACMihB,EAAQj5C,EADA,EACYg4B,EAC1BnL,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAGmF,GACd6sB,EAAIU,OAAO1yB,EAJG,EAIQo+C,GACtBpsB,EAAIU,OAAO1yB,EALG,EAKQo+C,GACtBpsB,EAAI2f,YACJ3f,EAAIa,MAAM,EAERwrB,EAAa,CAACr+C,EAAGoB,KACnB4wB,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAMgrC,EAAWt+C,EAAIgyB,EAAIusB,YAAYn9C,GAAM0F,MAAQ,EACnDkrB,EAAIqc,SAASjtC,EAAMk9C,EAAUR,GAC7B9rB,EAAI/f,SAAS,EAEjB,IAAIusC,EACAC,EAAuB,EACvBC,EAAmB,EACvB,GAAwB,QAAnBx0C,EAAK7N,KAAK2gD,WAAwB,IAAP9yC,OAAgB,EAASA,EAAGjI,OAAQ,CAEhEo8C,EADiBroB,EAAK0O,mBAAmB3P,GAASC,SAASG,OAAQ94B,KAAKsS,OACpD3O,EAAG3D,KAAK2gD,IAChC,CACA,IAAK,IAAIj4C,EAAI,EAAGA,EAAI1I,KAAK0gD,OAAO96C,SAAU8C,EAAG,CACzC,MAAMglB,EAAO1tB,KAAK0gD,OAAOh4C,GACpBglB,EAAK4zB,aACN5zB,EAAK4zB,WAAa,GACZ,IAAN54C,IACAglB,EAAK4zB,YAAc/sB,GACvB8tB,EAAmB30B,EAAK4zB,WAAac,GAA8B,IAAN15C,EAAU6rB,EAAU,GAC7E7G,EAAKzb,OAASouC,GAAK5X,KACf0Z,GAAaA,EAAUlwC,OAASouC,GAAK5X,IACrCqZ,EAAgB1Z,EAAMzkC,EAAG69C,EAAa,GAE1CE,EAAWtZ,EAAMzkC,EAAGykC,EAAMt/B,EAAGu5C,EAAkBb,IAE/C9zB,EAAKzb,OAASouC,GAAK3X,OACfyZ,GAAaA,EAAUlwC,OAASouC,GAAK5X,IACrCoZ,EAAczZ,EAAMzkC,EAAGykC,EAAMt/B,EAAGu5C,EAAkBb,GAElDW,GAAaA,EAAUlwC,OAASouC,GAAK3X,OACrCoZ,EAAgB1Z,EAAMzkC,EAAGykC,EAAMt/B,GAAI,GACnC+4C,EAAczZ,EAAMzkC,EAAGykC,EAAMt/B,EAAGu5C,EAAkBb,IAEjDW,IACDE,EAAmB30B,EAAK4zB,WACxBO,EAAczZ,EAAMzkC,EAAGykC,EAAMt/B,EAAGu5C,EAAkBb,KAG1DQ,EAAW5Z,EAAMzkC,EAAI0+C,EAAkB30B,EAAK3oB,MAC5Co9C,EAAYz0B,EACZ00B,EAAuB10B,EAAK4zB,WAC5Ba,EAAUx+C,EAAIykC,EAAMzkC,EACpBykC,EAAMzkC,GAAK0+C,CACf,CACA,IAAKF,GAA4Bv+C,MAAfu+C,EAAUx+C,EACxB,MAAM,IAAIR,EAAa,oBAAqB,mBAG5Cg/C,EAAUlwC,OAASouC,GAAK5X,GACxBqZ,EAAgBK,EAAUx+C,EAAI0+C,EAAkBb,EAAa,GAExDW,EAAUlwC,OAASouC,GAAK3X,MAC7BoZ,EAAgBK,EAAUx+C,EAAI0+C,EAAkBja,EAAMt/B,GAAI,EAElE,EFjOJ,SAAS,MAAK/E,GACNu+C,GAAYhgB,OACZz+B,EAAI,uBAAwBE,EACpC,CEiOAs8C,GAAKlpC,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WF/N3C,SAAW6lC,GACPA,EAA6BA,EAAmC,KAAI,GAAK,OACzEA,EAA6BA,EAAqC,OAAI,GAAK,SAC3EA,EAA6BA,EAAoC,MAAI,GAAK,QAC1EA,EAA6BA,EAA0C,YAAI,GAAK,aACnF,CALD,CAKGA,KAAiCA,GAA+B,CAAC,IAEpE,SAAWC,GACPA,EAA2BA,EAAgC,IAAI,GAAK,MACpEA,EAA2BA,EAAmC,OAAI,GAAK,QAC1E,CAHD,CAGGA,KAA+BA,GAA6B,CAAC,IAEhE,SAAWC,GACPA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAkB,KAAI,GAAK,MAC1C,CAJD,CAIGA,KAAgBA,GAAc,CAAC,IAElC,SAAWC,GACPA,EAAgBA,EAAsB,KAAI,GAAK,OAC/CA,EAAgBA,EAA2B,UAAI,GAAK,YACpDA,EAAgBA,EAA6B,YAAI,GAAK,aACzD,CAJD,CAIGA,KAAoBA,GAAkB,CAAC,IAKnC,MAAMmF,WAAoB5pB,GAClBh3B,sBACP,OAAOG,EAASygD,WACpB,CACWC,2BACP,OAAOD,GAAY9xC,QAAQgyC,OAAOD,aACtC,CAEWE,0BAAeC,GACtBJ,GAAYK,SAAWD,CAC3B,CACWD,4BACP,OAAOH,GAAYK,QACvB,CACAp9C,yBAAyBq9C,GACrB,GAAIN,GAAY9xC,QAAQW,OAAOyxC,GAC3B,OAAON,GAAY9xC,QAAQW,OAAOyxC,EAG1C,CACWC,qCACP,OAAO70B,EAAOyU,mBAAmBzxB,eACrC,CACW8xC,kCACP,OAAOR,GAAY9xC,QAAQgyC,OAAOlR,QAAUgR,GAAYO,uBAC5D,CACAt9C,wBAAwB+pB,GACpB,MAAMyzB,EAAST,GAAYU,kBAAkB1zB,EAAMjsB,MACnD,OAAK0/C,EAGEA,EAAOpV,aAAe2U,GAAYO,wBAF9B,GAGf,CACAt9C,yBAAyB+pB,GACrB,MAAMyzB,EAAST,GAAYU,kBAAkB1zB,EAAMjsB,MACnD,OAAK0/C,EAGEA,EAAOE,QAAUX,GAAYO,wBAFzB,CAGf,CACAt9C,yBAAyB+pB,GACrB,MAAMyzB,EAAST,GAAYU,kBAAkB1zB,EAAMjsB,MACnD,OAAK0/C,GAGI,EAAIA,EAAOG,gBAAmBZ,GAAYO,wBAFxC,CAGf,CACW9V,+BACP,OAAOuV,GAAY9xC,QAAQgyC,OAAOzV,kBAAoBuV,GAAYO,uBACtE,CACW7V,6BACP,OAAOsV,GAAY9xC,QAAQgyC,OAAOxV,gBAAkBsV,GAAYO,uBACpE,CACWM,2BACP,OAAOb,GAAY9xC,QAAQgyC,OAAOW,cAAgBb,GAAYO,uBAClE,CACWryC,qBACP,MAAM4yC,EAAcp1B,EAAOyU,mBAAmB3xB,aAAasyC,YAC3D,IAAKA,EACD,MAAM,IAAIjgD,EAAa,aAAc,uBACzC,OAAOigD,CACX,CACWC,8BAIP,OAAOf,GAAY9xC,QAAQgyC,OAAOa,gBACtC,CACWC,8BACP,OAAOhB,GAAY9xC,QAAQgyC,OAAOc,gBACtC,CACA/9C,qBAAqBzB,GACjB,YAAgCF,IAAzBE,EAAMy/C,gBAAgCz/C,EAAMy/C,iBAAmBpG,GAAgBqG,WAC1F,CACAj+C,mBAAmBzB,GACf,YAAgCF,IAAzBE,EAAMy/C,gBAAgCz/C,EAAMy/C,iBAAmBpG,GAAgBsG,SAC1F,CACWC,wBAEP,OADkB11B,EAAOyU,mBACRrxB,aAAa,sBAClC,CAKA7L,cAAco+C,EAASphB,GACnB,IAAI10B,EACJ,IAAK81C,GAA8B,IAAnBA,EAAQ/9C,OACpB,OAAO,EACX,IAAI6E,EAAQ,EACRm5C,EAAgB,EAChBhV,EAAY,EACZC,EAAa,EACbC,EAAoB,EACpBC,EAAqB,EACzB,IAAK,MAAM8U,KAAUF,EAAS,CAC1B,MAAMh2C,EAAWD,EAAKqK,wBAAmD,QAA1BlK,EAAKg2C,EAAO5sC,gBAA6B,IAAPpJ,OAAgB,EAASA,EAAGO,MACvG01C,EAAUp2C,EAAKq2C,UAAUp2C,EAAU,KACnCq2C,EAAqB,EAAVF,EACXnqB,EAAOkqB,EAAOjqB,oBACpB,IAAIqqB,EAAc,EACdC,EAAa,EACbC,GAAS,EACb,IAAK,IAAIC,EAAI,EAAGA,EAAIP,EAAOQ,aAAaz+C,SAAUw+C,EAAG,CACjD,MAAMtgD,EAAQ+/C,EAAOQ,aAAaD,GAC5BE,EAAMhC,GAAYiC,cAAczgD,GAChC0gD,EAAMlC,GAAYmC,YAAY3gD,GAC9B4gD,EAAgBJ,GAAOE,EAAMlC,GAAYC,cAAgB,EACzDoC,EAAM7gD,EAAM8gD,aAAe1H,GAAY2H,MAAQb,EAAWU,EAAgBZ,EAAUY,GAGtFJ,GAAOE,KACPN,EAAa,GAIjB,MAAMv2C,EAAWk2C,EAAO5U,cAAcj3B,iBAChC8sC,EAAmBn3C,EAAW+2C,EAmBpC,GAlBI5gD,EAAM8gD,aAAe1H,GAAY2H,YAAyBjhD,IAAhBE,EAAMwrB,OAChDxrB,EAAM2G,MAAQ63C,GAAYyC,iBAAiBjhD,EAAMwrB,OAASw1B,EAC1DhhD,EAAMg0B,QAAUwqB,GAAY0C,kBAAkBlhD,EAAMwrB,OAASw1B,EAC7DhhD,EAAM8zB,QAAU0qB,GAAY2C,kBAAkBnhD,EAAMwrB,OAASw1B,EAC7DhhD,EAAMwrB,MAAMD,MAAQvrB,EAAMwrB,MAAMD,MAAQs1B,GAEnC7gD,EAAM8gD,aAAe1H,GAAYgI,OACtCphD,EAAM2G,MAAQ3G,EAAM2G,MAAQq6C,EAC5BhhD,EAAMg0B,QAAU+rB,EAAOsB,kBAAkBrhD,EAAMiB,MAAQ4/C,GAEvD7gD,EAAM8gD,aAAe1H,GAAY2H,YACjBjhD,IAAhBE,EAAMwrB,OACNxrB,EAAMwrB,MAAMjsB,OAASi/C,GAAYnxC,OAAOi0C,KAAK/hD,OAC7C6gD,EAAa,GAEjBpgD,EAAM2G,OAAS63C,GAAYQ,qBAAuBn1C,EAAW+2C,EAGzDJ,GAAOF,EAAI,EAAG,CACd,MAAMiB,EAAOxB,EAAOQ,aAAaD,EAAI,GAChC9B,GAAYiC,cAAcc,KAC3BzB,EAAgBn5C,EAExB,CACI+5C,GAAOZ,EAAgB,IACvBO,GAAS,EAETrgD,EAAM8zB,OAAS9zB,EAAM8zB,QAAUgsB,EAAgBn5C,GAC/CA,EAAQm5C,EACRA,EAAgB,EAEhBC,EAAOyB,kBAAiB,IAEvBhB,GAAQE,IACTZ,EAAgB,GAEpB9/C,EAAMqgD,OAASA,EACf15C,GAAS3G,EAAM2G,MACfw5C,EAAcx5C,CAClB,CAYA,GAVAo5C,EAAO0B,2BACP1B,EAAO2B,2BACH3B,EAAO4B,gBAAkBxI,GAA2BhN,KACpD4T,EAAOtpB,YAAYgI,EAAM8N,eACzB9N,EAAM8N,eAAiB6T,IAGvBL,EAAOtpB,YAAYgI,EAAMhJ,UAAY,GACrCgJ,EAAMhJ,WAAa2qB,EAAa,GAEhCL,EAAO6B,kBAAoB3iD,EAAgB42B,GAAO,CAClD,MAAMyV,EAAazV,EAAK0V,gBAAgBzf,WACpCi0B,EAAO8B,kBAAoB3I,GAA6B5jB,MACxD0V,EAAoB7pC,KAAK8E,IAAIqlC,EAAYN,GACzCF,EAAY3pC,KAAK8E,IAAI6kC,EAAWqV,GAAe3B,GAAYoB,YAEtDG,EAAO8B,kBAAoB3I,GAA6B1jB,OAC7DyV,EAAqB9pC,KAAK8E,IAAIqlC,EAAYL,GAC1CF,EAAa5pC,KAAK8E,IAAI8kC,EAAYoV,KAGlCrV,EAAY3pC,KAAK8E,IAAI6kC,EAAWqV,EAAc,GAAK3B,GAAYoB,WAC/D7U,EAAa5pC,KAAK8E,IAAI8kC,EAAYoV,EAAc,GAChDnV,EAAoB7pC,KAAK8E,IAAIqlC,EAAa,EAAGN,GAC7CC,EAAqB9pC,KAAK8E,IAAIqlC,EAAa,EAAGL,GAEtD,CACAtkC,EAAQ,CACZ,CACA,MAAMgmC,EAAexrC,KAAKulC,IAAIvlC,KAAK8E,IAAI8kC,EAAaE,EAAoB,GAAI9pC,KAAK8E,IAAI8kC,EAAatM,EAAMmO,YAAa,IAC/GC,EAAc1rC,KAAKulC,IAAIvlC,KAAK8E,IAAI6kC,EAAYE,EAAmB,GAAI7pC,KAAK8E,IAAI6kC,EAAYrM,EAAMK,WAAY,IAGhH,OAFAL,EAAMK,YAAc+N,EACpBpO,EAAMmO,aAAeD,GACd,CACX,CACAhvC,cACI8B,QACAvD,KAAKqkD,aAAe,GACpBrkD,KAAK4lD,WAAa5I,GAA6B5jB,KAC/Cp5B,KAAK6lD,SAAW5I,GAA2BhN,IAC3CjwC,KAAK8lD,YAAa,EAClB9lD,KAAK+lD,aAAc,EACnB/lD,KAAK2X,WACT,CAMWR,uBACP,IAAI3I,EAAS,4BAKb,MAJ4C,aAAxCwf,EAAOyU,mBAAmB7xB,YAE1BpC,EAAS,qCAEN,CACHA,SACAJ,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,OAEzB,CAIIq+B,wBACA,OAAOuV,GAAYvV,kBAAoB/sC,KAAKivC,cAAcj3B,gBAC9D,CACIg1B,sBACA,OAAOsV,GAAYtV,gBAAkBhtC,KAAKivC,cAAcj3B,gBAC5D,CACAguC,eAAe5kD,GAEX,OADApB,KAAK+lD,YAAc3kD,EACZpB,IACX,CACA0lD,iBACI,OAAO1lD,KAAK+lD,WAChB,CACAP,2BACI,MAAMS,EAAWjmD,KAAKqkD,aAAa6B,WAAU,EAAGtB,aAAYt1B,WAAYs1B,IAAe1H,GAAY2H,YAAmBjhD,IAAV0rB,GAAsC,iCAAfA,EAAMjsB,OACzI,GAAI4iD,EAAW,EACX,OAEJ,MACME,EADMnmD,KAAKqkD,aAAa4B,GACbx7C,MAAQ,EACnB27C,EAAO,IAAOpmD,KAAKivC,cAAcj3B,iBACvC,IAAIquC,EAAW,EACf,KAAqBA,EAAWJ,IAAYI,EAAU,CAClD,MAAMxC,EAAS7jD,KAAKqkD,aAAagC,GACjCxC,EAAOjsB,OAASisB,EAAOjsB,OAASuuB,EAChCtC,EAAO/rB,OAAS+rB,EAAO/rB,OAASsuB,CACpC,CACA,IAAKC,EAAWJ,EAAW,EAAGI,EAAWrmD,KAAKqkD,aAAaz+C,SAAUygD,EAAU,CAC3E,MAAMxC,EAAS7jD,KAAKqkD,aAAagC,GACjCxC,EAAOjsB,OAASisB,EAAOjsB,OAASuuB,EAChCtC,EAAO/rB,OAAS+rB,EAAO/rB,OAASsuB,CACpC,CACJ,CACAb,2BACI,IAAIe,EAAQ,EACZ,IAAK,IAAIlC,EAAI,EAAGA,EAAIpkD,KAAKqkD,aAAaz+C,SAAUw+C,EAAG,CAC/C,MAAMP,EAAS7jD,KAAKqkD,aAAaD,GACjCkC,GAAStmD,KAAKumD,qBAAqBnC,GACnCP,EAAOjsB,QAAU0uB,CACrB,CACJ,CAEAC,qBAAqBnC,GACjB,IAAKpkD,KAAK8lD,WACN,OAAO,EAEX,MAAMU,EAAaxmD,KAAKqkD,aAAaD,GAC/BqC,EAAarC,EAAI,EAAIpkD,KAAKqkD,aAAaD,EAAI,QAAKxgD,EACtD,IAAI8iD,EAAa,EAEbF,EAAW5B,aAAe1H,GAAY2H,YACjBjhD,IAArB4iD,EAAWl3B,OACXk3B,EAAWl3B,MAAMjsB,OAASi/C,GAAYnxC,OAAOi0C,KAAK/hD,OAClDqjD,GAAcF,EAAWl3B,MAAM9e,QAAQ+jB,cAExB3wB,IAAf6iD,GACAA,EAAW7B,aAAe1H,GAAY2H,YACjBjhD,IAArB6iD,EAAWn3B,OACXm3B,EAAWn3B,MAAMjsB,OAASi/C,GAAYnxC,OAAOi0C,KAAK/hD,OAClDqjD,GAAcD,EAAWn3B,MAAM9e,QAAQ+jB,SAG3C,IAAIoyB,GAAe,EACfC,GAAe,OACAhjD,IAAf6iD,GAA4BA,EAAW7B,aAAe1H,GAAYgI,OAClEyB,EAAerE,GAAYgB,iBAAiBuD,MAAMC,GAAOA,IAAOL,EAAW1hD,KAAK0hD,EAAW1hD,KAAKa,OAAS,KACzGghD,EAAetE,GAAYe,iBAAiBwD,MAAMC,GAAOA,IAAOL,EAAW1hD,KAAK0hD,EAAW1hD,KAAKa,OAAS,MAE7G,MAAMmhD,EAAsBzE,GAAYa,cAAgBnjD,KAAKivC,cAAcj3B,iBAc3E,OAXI2uC,GAAgBH,EAAWjD,iBAAmBpG,GAAgBqG,cAC9DkD,GAAcK,GAEdH,GAAgBJ,EAAW5B,aAAe1H,GAAYgI,OAClDsB,EAAWzhD,KAAK,IAAM,KAAOyhD,EAAWzhD,KAAK,IAAM,MACnD2hD,GAAcK,EAAsB,GAEpCzE,GAAYgB,iBAAiBuD,MAAMC,GAAOA,KAAQL,aAA+C,EAASA,EAAW1hD,KAAK0hD,EAAW1hD,KAAKa,OAAS,QACnJ8gD,GAAcK,EAAsB,IAGrCL,CACX,CAMAM,eAAe54B,EAAS,CAAC,GACrB,IAAIvgB,EAAIoF,EAAIg0C,EACZ,MAAMrC,EAA0C,QAA5B/2C,EAAKugB,EAAOw2B,kBAA+B,IAAP/2C,EAAgBA,EAAKqvC,GAAYgI,KACnFgC,EAAc,CAChBniD,KAA6B,QAAtBkO,EAAKmb,EAAOrpB,YAAyB,IAAPkO,EAAgBA,EAAK,GAC1D2xC,aACArB,eAAiD,QAAhC0D,EAAK74B,EAAOm1B,sBAAmC,IAAP0D,EAAgBA,EAAK9J,GAAgBuB,KAC9F9mB,OAAQ,EACRE,OAAQ,EACRqsB,QAAQ,EACR15C,MAAO,GAIX,GAAIm6C,IAAe1H,GAAY2H,OAAiC,iBAAjBz2B,EAAOkB,MAAoB,CACtE,MAAM63B,EAAY7E,GAAYnxC,OAAOid,EAAOkB,OACtC83B,EAAc,GACpBF,EAAY53B,MAAQ,IAAIG,EAAM03B,EAAU9jD,KAAM+jD,EAAa,CAAE9lD,SAAU,eAK3E,MACSsjD,IAAe1H,GAAYgI,KAChCgC,EAAYz8C,MAAQzK,KAAKivC,cAAcZ,oBAAoB6Y,EAAYniD,MAElE6/C,IAAe1H,GAAY/nB,OAChC+xB,EAAYz8C,MAAQ2jB,EAAO3jB,OAE/B,OAAOy8C,CACX,CAGAG,eAAeC,GAEX,OADAtnD,KAAKqkD,aAAa5vC,KAAKzU,KAAKgnD,eAAeM,IACpCtnD,IACX,CAIAunD,QAAQxiD,EAAMuiD,EAAa,CAAC,GACxB,MAAM1C,EAAa1H,GAAYgI,KAC/B,OAAOllD,KAAKqnD,eAAehnD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG8vC,GAAa,CAAEviD,OAAM6/C,eACpF,CAEA4C,mBAAmBziD,GACf,MAAM6/C,EAAa1H,GAAYgI,KACzB3B,EAAiBpG,GAAgBqG,YACvC,OAAOxjD,KAAKqnD,eAAe,CAAEtiD,OAAM6/C,aAAYrB,kBACnD,CAEAkE,iBAAiB1iD,GACb,MAAM6/C,EAAa1H,GAAYgI,KACzB3B,EAAiBpG,GAAgBsG,UACvC,OAAOzjD,KAAKqnD,eAAe,CAAEtiD,OAAM6/C,aAAYrB,kBACnD,CAEAmE,oBAAoBp4B,GAChB,MAAMs1B,EAAa1H,GAAY2H,MACzBtB,EAAiBpG,GAAgBqG,YACvC,OAAOxjD,KAAKqnD,eAAe,CAAE/3B,QAAOs1B,aAAYrB,kBACpD,CAGAoE,SAASr4B,EAAOlB,EAAS,CAAC,GACtB,MAAMw2B,EAAa1H,GAAY2H,MAC/B,OAAO7kD,KAAKqnD,eAAehnD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG4W,GAAS,CAAEkB,QAAOs1B,eACjF,CAMAgD,eAAe7iD,EAAMqpB,EAAS,CAAC,GAC3B,IAAI3lB,EAAM,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAAG,CAClC,MAAMm/C,EAAO9iD,EAAK2D,GACd45C,GAAYnxC,OAAO02C,IACfp/C,EAAI7C,OAAS,IACb5F,KAAKunD,QAAQ9+C,EAAK2lB,GAClB3lB,EAAM,IAEVzI,KAAK2nD,SAASE,EAAMz5B,IAIpB3lB,GAAOo/C,CAEf,CAIA,OAHIp/C,EAAI7C,OAAS,GACb5F,KAAKunD,QAAQ9+C,EAAK2lB,GAEfpuB,IACX,CAGA8nD,QAAQr9C,EAAO2jB,EAAS,CAAC,GACrB,MAAMw2B,EAAa1H,GAAY/nB,KAC/B,OAAOn1B,KAAKqnD,eAAehnD,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG4W,GAAS,CAAEw2B,aAAYn6C,UACtF,CAaAsM,QAAQxO,EAAG6F,EAAMC,EAAQC,GAGrB,OAFA/K,MAAMwT,QAAQxO,EAAG6F,EAAMC,EAAQC,GAC/BtO,KAAKivC,cAAgBzD,GAAc0D,OAAOlvC,KAAKiX,UACxCjX,IACX,CACAslD,iBAAiB5C,GAEb,OADA1iD,KAAK8lD,WAAapD,EACX1iD,IACX,CAEA+nD,YAAYC,GAER,OADAhoD,KAAK6lD,SAAyB,iBAAPmC,EAAkB1F,GAAYxR,sBAAsBkX,GAAMA,EAC1EhoD,IACX,CACAylD,cACI,OAAOzlD,KAAK6lD,QAChB,CAEAoC,cAAcC,GAEV,OADAloD,KAAK4lD,WAA2B,iBAAPsC,EAAkB5F,GAAYrR,wBAAwBiX,GAAMA,EAC9EloD,IACX,CACA2lD,gBACI,OAAO3lD,KAAK4lD,UAChB,CACAh2B,WACI,IAAInlB,EAAQ,EAIZ,OAHAzK,KAAKqkD,aAAazvC,SAASivC,IACvBp5C,GAASo5C,EAAOM,OAAS,EAAIN,EAAOp5C,KAAK,IAEtCA,CACX,CACA06C,kBAAkBpgD,GACd,IAAI8I,EACJ,IAAI6K,EAAM,EACNhQ,EAAI,EACR,IAAKA,EAAI,EAAGA,EAAI3D,EAAKa,SAAU8C,EAAG,CAC9B,MAAM8H,EAAUxQ,KAAKivC,cAAc1B,gBAAgBxoC,EAAK2D,IACxD,GAAI8H,EAAS,CACT,MAAMu9B,EAAgC,QAAxBlgC,EAAK2C,EAAQy9B,aAA0B,IAAPpgC,EAAgBA,EAAK,EACnE6K,EAAMq1B,EAAOr1B,EAAMq1B,EAAOr1B,CAC9B,CACJ,CACA,MAAMzH,EAAajR,KAAKivC,cAAcj+B,gBACtC,OAAOtI,EAAI,EAAUgQ,EAAMzH,GAAX,EAAyB,CAC7C,CAEA8E,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cAELqf,EAAI3gB,OACJhV,KAAK8U,aACL6gB,EAAI0V,UAAU,cAAerrC,KAAK6S,aAAa,OAC/C,MAAMu1B,EAAQzO,EAAK0O,mBAAmB3P,GAASC,SAASK,MAAOh5B,KAAKsS,OAEpE,IAAIxJ,EADJ6sB,EAAI5e,QAAQ/W,KAAKiX,UAIjB,MAAMu4B,EAAU7V,EAAK6V,UACfpY,EAAQuC,EAAKxB,aACnB,GAAIn4B,KAAK6lD,WAAa5I,GAA2B3M,QAG7C,GADAxnC,EAAIsuB,EAAMwa,kBAAkB5xC,KAAKu5B,UAAYvL,EAAOiD,yBAChDue,EAAS,CACT,MAAM6B,EAAW1X,EAAK6X,YAAYrH,aAC5BmH,EAAUla,EAAMkM,yBAChB6kB,EAAwC,IAA5BxuB,EAAK8V,mBAA2B4B,EAAS1G,MAAQ0G,EAAS3G,KAC5E5hC,EAAI7D,KAAK8E,IAAIjB,EAAGq/C,EAAY7W,GAAWtxC,KAAKu5B,UAAY,GAC5D,MAEC,CAED,MAAMmR,EAAOzlC,KAAKulC,OAAO7Q,EAAK8X,SAE9B,GADA3oC,EAAI7D,KAAKulC,IAAIpT,EAAMua,eAAe3xC,KAAKu5B,WAAYmR,EAAO,IACtD8E,EAAS,CACT,MAAM6B,EAAW1X,EAAK6X,YAAYrH,aAC5BmH,EAAUla,EAAMkM,yBACtBx6B,EAAI7D,KAAKulC,IAAI1hC,EAAGuoC,EAAS3G,KAAO,EAAI4G,EAAUtxC,KAAKu5B,UACvD,CACJ,CACA,IAAI51B,EAAIykC,EAAMzkC,EAEVA,EADA3D,KAAK4lD,aAAe5I,GAA6B5jB,KAC7CgP,EAAMzkC,EAEL3D,KAAK4lD,aAAe5I,GAA6B1jB,MAClD8O,EAAMzkC,EAAI3D,KAAK4vB,WAEd5vB,KAAK4lD,aAAe5I,GAA6BlkB,OAClDsP,EAAMzkC,EAAI3D,KAAK4vB,WAAa,EAI5B+J,EAAKyX,WAAapxC,KAAK4vB,WAAa,EAE5C,GAAE,0BAA2B5vB,KAAKivC,cAAetrC,EAAGmF,GACpD9I,KAAKqkD,aAAazvC,SAASivC,IACvB,MAAMuE,EAAU9F,GAAYiC,cAAcV,GACpCwE,EAAQ/F,GAAYmC,YAAYZ,GACtC,IAAIzV,EAAOtlC,EAUX,GATA,GAAE,aAAc+6C,EAAOjsB,OAAQisB,EAAO/rB,QACtC,GAAE,gBAAiBsW,GACfga,IACAha,GAAQpuC,KAAK+sC,mBAEbsb,IACAja,GAAQpuC,KAAKgtC,iBAEjB,GAAE,gBAAiBoB,GACfyV,EAAOe,aAAe1H,GAAYgI,KAAM,CACxC,IAAIkD,GAAWC,KACX1yB,EAAI3gB,OACAhV,KAAKiX,UAAU,CACf,MAAM,OAAEzI,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SACvCqxC,EAAkB56C,EAAKq2C,UAAU31C,EAAMk0C,GAAYC,eACzD5sB,EAAI5e,QAAQvI,EAAQ85C,EAAiBj6C,EAAQC,EACjD,CAMJ,GAAE,mBAAoBu1C,EAAO9+C,KAAMpB,EAAIkgD,EAAOjsB,OAAQwW,EAAOyV,EAAO/rB,QACpEnC,EAAIqc,SAAS6R,EAAO9+C,KAAMpB,EAAIkgD,EAAOjsB,OAAQwW,EAAOyV,EAAO/rB,SACvDswB,GAAWC,IACX1yB,EAAI/f,SAEZ,MACSiuC,EAAOe,aAAe1H,GAAY2H,OAAShB,EAAOv0B,OACvD8e,GAAQyV,EAAO/rB,OACf,GAAE,oBAAqB+rB,EAAOv0B,MAAMjsB,KAAMM,EAAIkgD,EAAOjsB,OAAQwW,GAC7DyV,EAAOv0B,MAAM0I,OAAOrC,EAAKhyB,EAAIkgD,EAAOjsB,OAAQwW,IAEvCyV,EAAOe,aAAe1H,GAAY/nB,OACvC,GAAE,oBAAqB0uB,EAAOp5C,MAAO9G,EAAGyqC,GACxCzY,EAAIQ,YACJR,EAAIjgB,aAAa,GACjBigB,EAAIS,OAAOzyB,EAAGmF,GACd6sB,EAAIU,OAAO1yB,EAAIkgD,EAAOp5C,MAAO2jC,GAC7BzY,EAAI/G,UAERjrB,GAAKkgD,EAAOp5C,MACRo5C,EAAOM,SACPxgD,GAAKkgD,EAAOjsB,OAChB,IAEJjC,EAAI4V,aACJvrC,KAAK2V,eACLggB,EAAI/f,SACR,EAEJ0sC,GAAYhgB,OAAQ,EAEpBggB,GAAYrQ,kBAAoB+K,GAChCsF,GAAYrR,wBAA0B,CAClC9X,KAAM6jB,GAA6B5jB,KACnCC,MAAO2jB,GAA6B1jB,MACpCT,OAAQmkB,GAA6BlkB,OACrCoZ,WAAY8K,GAA6B7K,aAE7CmQ,GAAYtS,gBAAkBiN,GAC9BqF,GAAYxR,sBAAwB,CAChCsB,IAAK6K,GAA2BhN,IAChClX,MAAOkkB,GAA2BhN,IAClChX,MAAOgkB,GAA2B3M,OAClC+B,OAAQ4K,GAA2B3M,QAGvCgS,GAAYnxC,OAAS,CACjBo3C,WAAY,CACRllD,KAAM,kBAEVmlD,IAAK,CACDnlD,KAAM,kBAEVolD,eAAgB,CACZplD,KAAM,sBAEV,IAAK,CACDA,KAAM,iBAEVqlD,UAAW,CACPrlD,KAAM,iBAEVslD,aAAc,CACVtlD,KAAM,oBAEV06B,MAAO,CACH16B,KAAM,aAEV,IAAK,CACDA,KAAM,aAEV,IAAK,CACDA,KAAM,sBAEVulD,UAAW,CACPvlD,KAAM,sBAEV,IAAK,CACDA,KAAM,uBAEVwlD,WAAY,CACRxlD,KAAM,uBAEVylD,YAAa,CACTzlD,KAAM,uBAEV0lD,aAAc,CACV1lD,KAAM,wBAEV2lD,cAAe,CACX3lD,KAAM,0BAEV4lD,eAAgB,CACZ5lD,KAAM,2BAEV,IAAK,CACDA,KAAM,gCAEV+hD,KAAM,CACF/hD,KAAM,gCAEV,IAAK,CACDA,KAAM,mBAEVqB,EAAG,CACCrB,KAAM,mBAGdi/C,GAAY4G,YAAchM,GAC1BoF,GAAY6G,gBAAkBhM,GAE9BmF,GAAYK,UAAW,EG/rBhB,MAAMvgD,WAAYs2B,GACVh3B,sBACP,OAAOG,EAASO,GACpB,CAEAmD,eAAeo0B,GACX,OAAOA,EAAK+hB,mBAAmBt5C,GAAIV,SACvC,CAEA6D,sBAAsByqB,EAAO3B,GACzB,IAAK,MAAMsL,KAAQ3J,EACf,GAAI3B,aAAyC,EAASA,EAAQ+6B,IAC1D,IAAK,IAAI1gD,EAAI,EAAGA,EAAIixB,EAAKrmB,KAAK1N,OAAQ8C,IAAK,CACvC,MAAM2gD,EAAM,IAAIjnD,GAChBinD,EAAIC,aAAa3vB,EAAK4gB,WAAWlnB,YACjCsG,EAAK4N,YAAY8hB,EAAK3gD,EAC1B,MAEC,GAAyE9E,OAApEyqB,aAAyC,EAASA,EAAQ/b,OAAqB,CACrF,MAAM+2C,EAAM,IAAIjnD,GAChBinD,EAAIC,aAAa3vB,EAAK4gB,WAAWlnB,YACjCsG,EAAK4N,YAAY8hB,EAAKh7B,aAAyC,EAASA,EAAQ/b,MACpF,KACK,CACD,MAAM+2C,EAAM,IAAIjnD,GAChBinD,EAAIC,aAAa3vB,EAAK4gB,WAAWlnB,YACjCsG,EAAK4N,YAAY8hB,EAAK,EAC1B,CAER,CAEA9jD,cAAck0C,EAAMlX,GAChB,MAAMmO,EAAcnO,EAAMmO,YAE1B,IAAK+I,GAAwB,IAAhBA,EAAK7zC,OACd,OAAO,EACX,MAAM2jD,EAAW,GACXC,EAAgB,CAAC,EACvB,IAAK,IAAI9gD,EAAI,EAAGA,EAAI+wC,EAAK7zC,SAAU8C,EAAG,CAClC,MAAM2gD,EAAM5P,EAAK/wC,GACXixB,EAAO0vB,EAAI3vB,UACjB,IAAIwJ,EACAp9B,EACJ,GAAIjD,EAAY82B,GAAO,CACnB,MAAMrnB,EAAQ+2C,EAAItvB,aAClBmJ,EAAQvJ,EAAKwJ,cAAc7wB,GAE3BxM,EAAQ6zB,EAAKyiB,eACjB,KACK,KAAIn5C,EAAU02B,GAMf,MAAM,IAAIx2B,EAAa,WAAY,wBALnC+/B,EAAQ,CAAEl/B,KAAM,IAChB8B,EAAQ4qC,CAKZ,CACA,MAAM+Y,EAAU9vB,EAAK9mB,aAAa,MAClC02C,EAAS90C,KAAK,CAAEzQ,KAAMk/B,EAAMl/B,KAAM21B,OAAM8vB,UAASJ,QACjDG,EAAcC,GAAWxkD,KAAK8E,IAAIy/C,EAAcC,IAAY3jD,EAAOA,EACvE,CAEAyjD,EAAS9lB,MAAK,CAACh/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACnC,IAAI0lD,EAAYhZ,EACZiZ,EAAU,EACVC,EAAY,KACZC,EAAY,KACZC,EAAoB,KACpBC,EAAc,EAClB,IAAK,IAAIrhD,EAAI,EAAGA,EAAI6gD,EAAS3jD,SAAU8C,EAAG,CACtC,MAAM,IAAE2gD,EAAG,KAAE1vB,EAAI,QAAE8vB,EAAO,KAAEzlD,GAASulD,EAAS7gD,GAE1C1E,IAAS4lD,GAAajwB,IAASkwB,IAC/BH,EAAYF,EAAcC,IAEzB9vB,EAAKmN,UAAY9iC,IAAS4lD,IACA,KAAvB3kD,KAAK+C,IAAIhE,EAAO,GAEhB+lD,EAAc,GAIdA,EAAc,GACG,MAAbF,GAAsBA,EAAU/iB,UAAyB,MAAb8iB,GAAqBA,EAAY5lD,GAAS,GAIjFA,EAAO+lD,IAAgBD,IAE5BC,GAAe,IAJfA,GAAe,KASvBpwB,EAAKmN,SACLuiB,EAAIh2B,aAAe02B,EAGnBV,EAAIh2B,YAAc02B,EAEtBD,EAAoB9lD,EAAO+lD,EAC3BV,EAAI/xB,UAAUoyB,GACdA,GAAaL,EAAIz5B,WArED,EAsEhB+5B,EAAUD,EAAYC,EAAUD,EAAYC,EAC5CC,EAAY5lD,EACZ6lD,EAAYlwB,CAChB,CAGA,OADA4I,EAAMmO,aAAeiZ,GACd,CACX,CACAloD,cACI8B,QACAvD,KAAKwzB,SAAWkF,GAASC,SAASW,MAClCt5B,KAAKgqD,OAAS,EACdhqD,KAAKy5B,SAAS,GACdz5B,KAAKqzB,WAAa,CACtB,CACAwG,QAAQF,GAMJ,OALA35B,KAAK25B,KAAOA,EACRt3B,EAAYs3B,KACZ35B,KAAKgqD,QAAU,GACfhqD,KAAKy5B,SAAS,IAEXz5B,IACX,CACAspD,aAAaxgD,GAET,OADA9I,KAAKqzB,WAAavqB,EACX9I,IACX,CACA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MACM+sB,EADQ1J,EAAKxB,aACKmL,yBAClB8E,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,MAAO,CAAE23C,gBAAgB,IAE/EhnD,EAAU02B,KACVyO,EAAMt/B,EAAI6wB,EAAKoY,iBAAiBpH,OAEpC,MAAMhnC,EAAIykC,EAAMzkC,EAAI3D,KAAKu0B,QAAUv0B,KAAKyK,MAAQzK,KAAKgqD,OAC/ClhD,EAAIs/B,EAAMt/B,EAAI9I,KAAKw0B,QAAUx0B,KAAKqzB,WAAagQ,EACrD1N,EAAIQ,YACJR,EAAI0f,IAAI1xC,EAAGmF,EAAG9I,KAAKgqD,OAAQ,EAAa,EAAV/kD,KAAKC,IAAQ,GAC3CywB,EAAIa,MACR,EC/IG,MAAM0zB,WAAuBxxB,GACrBh3B,sBACP,OAAOG,EAASqoD,cACpB,CAEA3kD,cAAc4kD,EAAM5nB,GAChB,MAAM,WAAEK,EAAU,YAAE8N,GAAgBnO,EAEpC,IAAK4nB,GAAwB,IAAhBA,EAAKvkD,OACd,OAAO,EACX,MAAMwkD,EAAY,GAClB,IAAIC,EAAY,KACZC,EAAY,EACZC,EAAa,EACjB,IAAK,IAAI7hD,EAAI,EAAGA,EAAIyhD,EAAKvkD,SAAU8C,EAAG,CAClC,MAAM6P,EAAM4xC,EAAKzhD,GACXixB,EAAOphB,EAAImhB,UACX8wB,EAAMjyC,EAAI8hB,cACV/nB,EAAQiG,EAAIwhB,aACZmJ,EAAQvJ,EAAKwJ,cAAc7wB,GAE3Bm4C,EADgBjf,GAAc0D,OAAO32B,EAAItB,UACdw2B,UAOjC,GANIl1B,EAAIib,WAAaO,EAAiBiF,QAClCuJ,EAAM8N,eAAiBoa,EAAaz8B,EAAOgD,oBAAsB,IAEjEzY,EAAIib,WAAaO,EAAiBmF,QAClCqJ,EAAMhJ,WAAakxB,EAAaz8B,EAAOgD,oBAAsB,IAE7D2I,IAAS0wB,EAAW,CACpB,IAAK,IAAIzlD,EAAI,EAAGA,EAAI+0B,EAAKrmB,KAAK1N,SAAUhB,EACjB,IAAfg+B,IACA0nB,EAAYrlD,KAAK8E,IAAI4vB,EAAKyJ,yBAA0BknB,IAEpC,IAAhB5Z,IACA6Z,EAAatlD,KAAK8E,IAAI4vB,EAAKshB,0BAA2BsP,IAG9DF,EAAY1wB,CAChB,CACAywB,EAAU31C,KAAK,CACXklB,OACAphB,MACAiyC,MACAxmD,KAAMk/B,EAAMl/B,KACZi/B,OAAQqnB,EACRI,OAAQH,GAEhB,CAEAH,EAAU3mB,MAAK,CAACh/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAI2mD,EAAY,EACZC,EAAY,EACZC,EAAU,EACVC,EAAU,EACVC,EAAW,KACXC,EAAW,KACf,IAAK,IAAItiD,EAAI,EAAGA,EAAI0hD,EAAUxkD,SAAU8C,EAAG,CACvC,IAAIuiD,EAAY,EAChB,MAAM,KAAEtxB,EAAI,IAAE6wB,EAAG,IAAEjyC,EAAG,KAAEvU,EAAI,OAAEi/B,EAAM,OAAEynB,GAAWN,EAAU1hD,GAEvD1E,IAAS+mD,GAAYpxB,IAASqxB,IAC9BL,EAAY/nB,EAAaK,EACzB2nB,EAAYla,EAAcga,GAE9B,MAAMQ,EAAW3yC,EAAIqX,WAzDL,EA0DZ46B,IAAQ9xB,GAASC,SAASS,MAC1B7gB,EAAI+e,UAAUsL,EAAa+nB,GAC3BM,EAAYroB,EAAasoB,EACzBL,EAAUI,EAAYJ,EAAUI,EAAYJ,GAEvCL,IAAQ9xB,GAASC,SAASW,QAC/B/gB,EAAI+e,UAAUszB,GACdK,EAAYV,EAAaW,EACzBJ,EAAUG,EAAYH,EAAUG,EAAYH,GAEhDC,EAAW/mD,EACXgnD,EAAWrxB,CACf,CAGA,OAFA4I,EAAMK,YAAcioB,EACpBtoB,EAAMmO,aAAeoa,GACd,CACX,CACAvlD,sBAAqB,WAAE4lD,GAAe,CAAC,EAAGxxB,EAAM0Z,GAC5C8X,SAAwDA,EAAWxiD,MAAM,KAAK4K,KAAK63C,IAC/E,MAAMziD,EAAQyiD,EAAgBh8C,OAAOzG,MAAM,KACrCylB,EAAS,CAAEi9B,OAAQ1iD,EAAM,IAG/B,OAFIA,EAAM,KACNylB,EAAOoF,SAAW7qB,EAAM,IACrB0qC,EAAQM,aAAa2X,UAAUl9B,EAAO,IAC9C7a,KAAI,CAACg4C,EAAWj5C,IAAUqnB,EAAK4N,YAAYgkB,EAAWj5C,IAC7D,CACA7Q,YAAY+pD,GACRjoD,QACAvD,KAAKwrD,OAASA,EACdxrD,KAAKyK,MAAQ,EACbzK,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAKu0B,QAAU,EACfv0B,KAAKw0B,QAAU,EACfx0B,KAAKyrD,SAAW,EAChBzrD,KAAKkqC,SAAW,EAChBlqC,KAAK2X,WACT,CACA+zC,kBAAkBF,GAEd,OADAxrD,KAAKwrD,OAASA,EACPxrD,IACX,CACA2rD,oBACI,OAAO3rD,KAAKwrD,MAChB,CACAI,WAAWjoD,GAEP,OADA3D,KAAKyrD,SAAW9nD,EACT3D,IACX,CACA6rD,WAAW/iD,GAEP,OADA9I,KAAKkqC,SAAWphC,EACT9I,IACX,CACA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAM8xB,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,OAC1D,IAAI0tC,EAAQ5X,EAAMzkC,EAAI3D,KAAKu0B,QAAUv0B,KAAKyrD,SACtCvL,EAAQ9X,EAAMt/B,EAAI9I,KAAKw0B,QAAUx0B,KAAKkqC,SAAW,EACrD,OAAQlqC,KAAKwzB,UACT,KAAKkF,GAASC,SAASK,MACnBgnB,GAAS,EACTE,GAAS,GACT,MACJ,KAAKxnB,GAASC,SAASO,MACnB8mB,GAAS,EACTE,GAAS,GACT,MACJ,KAAKxnB,GAASC,SAASS,KACnB4mB,GAAShgD,KAAKyK,MACd,MACJ,KAAKiuB,GAASC,SAASW,MACnB0mB,GAAS,EACT,MACJ,QACI,MAAM,IAAI78C,EAAa,kBAAmB,gBAAgBnD,KAAKwzB,2BAEvEmC,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAAS,GAAKhyC,KAAKwrD,OAAQxL,EAAOE,GACtCvqB,EAAI/f,SACR,EAEJs0C,GAAe/yC,UAAY,CACvB3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QCpGd,MAAMo9C,WAAiBppD,GACfhB,sBACP,OAAOG,EAASiqD,QACpB,CACArqD,YAAYi4C,GACRn2C,MAAMm2C,GACN15C,KAAK+rD,cAAe,EACpB/rD,KAAKgsD,iBAAmB,EACxBhsD,KAAKisD,mBAAqB,EAC1BjsD,KAAKsS,MAAQonC,EAAWpnC,MACxBtS,KAAK2D,EAAI+1C,EAAW/1C,GAAK,EACzB3D,KAAK8I,EAAI4wC,EAAW5wC,GAAK,EACrB4wC,EAAWwS,YACXlsD,KAAKq6C,SAAWX,EAAWwS,WAC/BlsD,KAAKivB,UAAYyqB,EAAWzqB,YAAa,EACzCjvB,KAAKspC,eAAiBoQ,EAAWpQ,gBAAkBd,GAAKC,GACxDzoC,KAAKgE,KAAO01C,EAAW11C,MAAQ,EAG/BhE,KAAKu6C,WAAavsB,EAAOqhB,cAAcrvC,KAAKuuB,SAAUvuB,KAAKq6C,UAC3D32C,EAAQ1D,KAAKu6C,WAAY,eAAgB,gCAAgCv6C,KAAKuuB,uBAAuBvuB,KAAKq6C,cAErGr6C,KAAKgE,KAAO,GAAKhE,KAAKgE,KAAO,IAAMhE,KAAKu6C,WAAW9mB,mBACpDzzB,KAAKu6C,WAAWhqB,UAAYvwB,KAAKu6C,WAAW9mB,kBAEhDzzB,KAAKmsD,WAAansD,KAAKu6C,WAAWhqB,UAClCvwB,KAAKu0B,QAAUmlB,EAAWnlB,SAAW,EACjCmlB,EAAW0S,oBACXpsD,KAAK+rD,cAAe,EACpB/rD,KAAKmsD,WAAazS,EAAW0S,kBAC7BpsD,KAAKgsD,iBAAmBtS,EAAWsS,kBAAoB,EACvDhsD,KAAKisD,mBAAqBvS,EAAWuS,oBAAsB,GAE/DjsD,KAAK0U,SAASglC,EAAWprC,OACzBtO,KAAKqsD,QAAU3S,EAAW2S,UAAW,EACrCrsD,KAAKynC,eAAiBpnC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKynC,gBAAiB,CAExEkT,iBAAkBjB,EAAWiB,kBAAoB3sB,EAAOyC,sBAC5DzwB,KAAKy5B,UAASz5B,KAAK+rD,cACd/rD,KAAKmsD,WAAWlgB,WAAW,oBAC3BjsC,KAAKmsD,WAAWlgB,WAAW,mBAE1BjsC,KAAKu6C,WAAW3qB,SAAS5vB,KAAKynC,eAAekT,kBAD7ClrB,EAAMG,SAAS5vB,KAAKmsD,WAAYnsD,KAAKynC,eAAekT,kBAE9D,CAEA/qB,WACI,OAAO5vB,KAAKyK,KAChB,CAEA6hD,cACI,OAA0B,IAAnBtsD,KAAKivB,SAChB,CAEA5lB,KAAK1F,GAED,OADA3D,KAAK2D,EAAIA,EACF3D,IACX,CAEAkJ,OACI,OAAOlJ,KAAK8I,CAChB,CAEAQ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CAEAusD,UACI,OAAOvsD,KAAKgE,IAChB,CAEAwoD,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA04C,eAII,MAAM/0C,EAAK3D,KAAKm4C,aAAwB50C,MAAMm1C,eAAf14C,KAAK2D,EAG9B8oD,EAA6BjkB,GAAKG,MAAQ,EAC1CnG,EAAYxU,EAAOyU,mBACnBiqB,EAAYlqB,EAAUpxB,aAAa,kBAAmB,GAAKpR,KAAKspC,eAChEqjB,EAAqBnqB,EAAUpxB,aAAa,2BAA4B,GAAKpR,KAAKspC,eACxF,OAAQ3lC,EACJ+oD,GACC1sD,KAAKivB,WAAajvB,KAAKyK,MAAQgiD,GAA8BzsD,KAAKspC,eAAiBqjB,EAAqB,EACjH,CAEA/1C,iBACI,IAAK5W,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,qDAE9C,MAAMmuC,EAAUtxC,KAAKm4B,aAAamL,yBAC5BspB,EAAetb,EAAU,EACzBub,EAAQ7sD,KAAK8I,EAAI8jD,EACvB,OAAO,IAAIhkD,EAAY5I,KAAK04C,eAAgBmU,EAAO7sD,KAAKyK,MAAO6mC,EACnE,CAEAna,SAASC,GACL,MAAMpzB,EAAOhE,KAAKusD,UAMlB,OALAvsD,KAAKo3B,MAAQA,EACTp3B,KAAKo3B,QACLp3B,KAAKsJ,KAAKtJ,KAAKo3B,MAAM01B,YAAY9oD,IACjChE,KAAK8W,WAAW9W,KAAKo3B,MAAMvgB,eAExB7W,IACX,CAEAk4C,YACI,GAAIl4C,KAAKm4C,aACL,OAAOn4C,KACX,MAAMyK,EAAQzK,KAAK4vB,WAAa5vB,KAAK44C,oBAAsB54C,KAAKk5C,qBAGhE,OAFAl5C,KAAKy5B,SAAShvB,GACdzK,KAAKm4C,cAAe,EACbn4C,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAIy2C,EAAS/sD,KAAK04C,eACd14C,KAAK+rD,eAELgB,GACI/sD,KAAKspC,iBAAmBd,GAAKC,GACvBzoC,KAAKgsD,kBACFhsD,KAAKu6C,WAAWxnB,KAAO/yB,KAAKu6C,WAAW3qB,SAAS5vB,KAAKynC,eAAekT,kBAAoB36C,KAAKyK,MAAQ,GACxGzK,KAAKisD,oBAEnB,MAAMnjD,EAAI9I,KAAK8I,GAzLvB,YAAc/E,GACN+nD,GAASxpB,OACTz+B,EAAI,oBAAqBE,EACjC,CAuLQ,CAAE,sBAAuB/D,KAAKq6C,SAAUr6C,KAAKuuB,SAAU,OAAQw+B,EAAQjkD,GAEvE,MAAMwgC,EAAiBtpC,KAAKspC,eACtBqR,EAAmB36C,KAAKynC,eAAekT,iBACvCqS,EAAiB,GAAGhtD,KAAKmsD,iBAAiB7iB,IAAmBd,GAAKC,GAAK,KAAO,SACpF,GAAsB,MAAlBzoC,KAAKq6C,SAAkB,CACvB,MAAM4S,EAAajtD,KAAKm4B,aAAamL,0BApLjD,SAA2B3N,EAAKpH,EAAU5qB,EAAGmF,EAAGwgC,EAAgB2jB,GAC5D,MAAMxiD,EAAQujB,EAAO+C,qBACrB4E,EAAI3gB,OACJ2gB,EAAIjgB,aAAasY,EAAO2C,YACxB,IAAI6F,GAAO,EAmBX,GAlBIxI,EAAOk/B,iBAAiB3+B,GAAY,IACpCiI,GAAO,GAENA,IACD7yB,GAAMqqB,EAAO2C,WAAa,EAAK2Y,GACnC3T,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAGmF,EAAImkD,GAClBt3B,EAAIU,OAAO1yB,EAAGmF,EAAI,GAClB6sB,EAAIU,OAAO1yB,EAAI8G,EAAO3B,EAAImkD,GAC1Bt3B,EAAIU,OAAO1yB,EAAI8G,EAAO3B,GACtB6sB,EAAIU,OAAO1yB,EAAGmF,EAAImkD,GAClBt3B,EAAI2f,YACA9e,EACAb,EAAIa,OAGJb,EAAI/G,SAEJZ,EAAOmC,mBAAmB5B,GAAUtnB,OAAO,IAAM,CACjD,MAAMkmD,EAAc,EAAE,GAAI,EAAG1iD,EAAQ,EAAGA,EAAQ,GAChD,IAAK,IAAI/B,EAAI,EAAGA,EAAIykD,EAAYvnD,OAAQ8C,IACpCitB,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAIwpD,EAAYzkD,GAAII,EAAI,IACnC6sB,EAAIU,OAAO1yB,EAAIwpD,EAAYzkD,GAAII,EAAI,IACnC6sB,EAAI/G,QAEZ,CACA+G,EAAI/f,SACR,CAoJYw3C,CAAkBz3B,EAAK31B,KAAKuuB,SAAUw+B,EAAQjkD,EAAGwgC,EAAgB2jB,EACrE,MAEIx9B,EAAM49B,YAAY13B,EAAKo3B,EAAQjkD,EAAG6xC,EAAkB36C,KAAKmsD,WAAY,CACjE7qD,SAAU,YAAY0rD,KAGlC,EAGJlB,GAASxpB,OAAQ,EC1MV,MAAMt/B,WAAsBN,GACpBhB,sBACP,OAAOG,EAASmB,aACpB,CACAvB,YAAYi4C,GACRn2C,MAAMm2C,EACV,CAEA9J,UACI,OAAO5vC,KAAK+yB,IAChB,CACAye,YACI,IAAKxxC,KAAK+yB,KACN,MAAM,IAAI5vB,EAAa,SAAU,gCAErC,OAAOnD,KAAK+yB,IAChB,CACAu6B,QAAQv6B,GAGJ,OAFA/yB,KAAK+yB,KAAOA,EACZ/yB,KAAKuU,gBAAgBwe,GACd/yB,IACX,CAEAutD,YACI,MAAMx6B,EAAO,IAAIyV,GAEjB,OADAxoC,KAAKstD,QAAQv6B,GACN/yB,IACX,CACAwtD,UAAUlsD,EAAW,QACjB,MAAM,WAAEi5C,GAAev6C,KACvB,GAAIA,KAAKytD,UAAW,CAChB,MAAMC,EAAW1tD,KAAKyvC,qBAAuBjH,GAAKE,KAAO6R,EAAW1mB,mBAAqB0mB,EAAW3mB,iBAChG85B,IACA1tD,KAAKgzB,KAAO,IAAIvD,EAAMi+B,EAAU1tD,KAAKynC,eAAekT,iBAAkB,CAAEr5C,aAChF,CACJ,CAEAqsD,kCACI,OAAI3tD,KAAKyvC,qBAAuBjH,GAAKE,KAC1B1oC,KAAKw6C,aAAax6C,KAAKw6C,aAAa50C,OAAS,GAG7C5F,KAAKw6C,aAAa,EAEjC,CAEAoT,gBACI,OAAOplB,GAAKI,OAAS5oC,KAAK6tD,kBAC9B,CAEAC,eACI,MAAMvT,EAAav6C,KAAKqvC,gBACxB,OAAIkL,EACOA,EAAW7mB,WAGX,CAEf,CAEAq6B,uBAEI,IAAInoD,EADSooB,EAAOmC,mBAAmBnwB,KAAKuuB,UAC1BntB,SAAW,EAAI,EAAI,GAErC,OAAQpB,KAAKuuB,UACT,IAAK,IACgB3qB,MAAb5D,KAAK47C,OACLh2C,EAAS,IACb,MACJ,IAAK,KACDA,EAAsBhC,MAAb5D,KAAK47C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDh2C,EAAsBhC,MAAb5D,KAAK47C,KAAoB,GAAK,GACvC,MACJ,IAAK,KACDh2C,EAAsBhC,MAAb5D,KAAK47C,KAAoB,GAAK,GACvC,MACJ,IAAK,MACDh2C,EAAsBhC,MAAb5D,KAAK47C,KAAoB,GAAK,GAK/C,OAAOh2C,CACX,CAEA6pC,mBACI,IAAKzvC,KAAKspC,eACN,MAAM,IAAInmC,EAAa,SAAU,kCACrC,OAAOnD,KAAKspC,cAChB,CACA0kB,iBAAiBltB,GAGb,GAFKA,IACDA,EAAY0H,GAAKC,IACjB3H,IAAc0H,GAAKC,IAAM3H,IAAc0H,GAAKE,KAC5C,MAAM,IAAIvlC,EAAa,cAAe,2BAA2B29B,KASrE,GAPA9gC,KAAKspC,eAAiBxI,EAEtB9gC,KAAKg3B,QACDh3B,KAAKytD,WACLztD,KAAKwtD,YAETxtD,KAAK47C,UAAOh4C,EACR5D,KAAK+yB,KAAM,CACX/yB,KAAK+yB,KAAK6W,aAAa9I,GACvB9gC,KAAK+yB,KAAK8W,aAAa7pC,KAAK6tD,oBAG5B,MAAMtT,EAAav6C,KAAK2tD,mCAAqC3tD,KAAKqvC,gBAE5D4e,EAAUjgC,EAAOyU,mBAAmBrxB,aAAa,iBAAiBmpC,EAAWhqB,YAAa,CAC5F29B,kBAAmB,EACnBC,iBAAkB,EAClBC,oBAAqB,EACrBC,mBAAoB,IAGxBruD,KAAK+yB,KAAKgE,WAAW,CACjB8R,iBAAkBolB,EAAQE,iBAC1BrlB,mBAAoBmlB,EAAQI,mBAC5BtlB,sBAAuBklB,EAAQC,kBAC/BllB,wBAAyBilB,EAAQG,qBAEzC,CAIA,OAHIpuD,KAAKm4C,cACLn4C,KAAKk4C,YAEFl4C,IACX,CAEAoxC,WACI,MAAMnI,EAAUjpC,KAAK04C,eAAiB14C,KAAKu0B,QACrC2U,EAAQlpC,KAAK04C,eAAiB14C,KAAKu0B,QAAUv0B,KAAKu7C,gBAExD,OADev7C,KAAKspC,iBAAmBd,GAAKE,KAAOO,EAAUC,CAEjE,CAGAolB,kBACI,OAAOtuD,KAAK04C,eAAiB14C,KAAKu0B,QAAUv0B,KAAKu7C,gBAAkB,CACvE,CAEAsS,mBACI,MAAMtT,EAAav6C,KAAKqvC,gBACxB,OAAoCzrC,MAAhC5D,KAAKuuD,wBACEvuD,KAAKuuD,wBAGZvuD,KAAK47C,KACErB,EAAW5mB,oBAElB4mB,EACOv6C,KAAKyvC,qBAAuBjH,GAAKC,GAAK8R,EAAWtnB,kBAAoBsnB,EAAWrnB,oBAEpF,CACX,CAEAs7B,cAAc9jD,GAEV,OADA1K,KAAKuuD,wBAA0B7jD,EAAS89B,GAAKI,OACtC5oC,IACX,CAEA+xC,iBACI,IAAK/xC,KAAK+yB,KACN,MAAM,IAAI5vB,EAAa,SAAU,kCACrC,OAAOnD,KAAK+yB,KAAKoX,YACrB,CAEAwH,eAAeqC,GACX,MAAM5c,EAAQp3B,KAAKm4B,aACnB,GAAIn4B,KAAKwvC,UAAW,CAChB,MAAMsC,EAAU9xC,KAAK+xC,iBACrB,IAAKD,EACD,MAAM,IAAI3uC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAKulC,IAAIpT,EAAMua,eAAeqC,GAAWlC,EAAQpH,KAAO1qC,KAAKynC,eAAeiT,oBAAsB1G,EAAW,GACxH,CAEI,OAAO5c,EAAMua,eAAeqC,EAEpC,CAEApC,kBAAkBoC,GACd,MAAM5c,EAAQp3B,KAAKm4B,aACnB,GAAIn4B,KAAKwvC,UAAW,CAChB,MAAMsC,EAAU9xC,KAAK+xC,iBACrB,IAAKD,EACD,MAAM,IAAI3uC,EAAa,eAAgB,+BAC3C,OAAO8B,KAAK8E,IAAIqtB,EAAMua,eAAeqC,GAAWlC,EAAQnH,MAAQ3qC,KAAKynC,eAAeiT,mBAAqB1G,EAC7G,CAEI,OAAO5c,EAAMwa,kBAAkBoC,EAEvC,CACAyZ,UACI,OAAmD,GAA5Cz/B,EAAOqhB,cAAcrvC,KAAKuuB,UAAUyE,OAAiBhzB,KAAK47C,IACrE,CAEAxD,aACI,IAAIvqC,EAGJ,OAFqB,QAApBA,EAAK7N,KAAK47C,YAAyB,IAAP/tC,GAAyBA,EAAGuqC,aACzDp4C,KAAKq4C,eAAgB,EACdr4C,IACX,CAEAyuD,SAASC,GACL,IAAI7gD,EACJ7N,KAAK8V,eACL9V,KAAKsW,cACLtW,KAAKstD,QAAQ,IAAI9kB,GAAKkmB,IACD,QAApB7gD,EAAK7N,KAAK+yB,YAAyB,IAAPllB,GAAyBA,EAAGiJ,WAAW9W,KAAK6W,cAAcd,MAC3F,EClMJ,SAAS44C,GAAkBzyC,EAAMyd,EAAMi1B,GACnC,MAAMC,EAAQD,EACd1yC,EAAKlY,MAAQ6qD,EACb3yC,EAAK4yC,SAAWD,EAChB3yC,EAAK6yC,SAAWF,EAChB3yC,EAAKyd,KAAKq1B,WAAW,EAAG9yC,EAAKyd,KAAKs1B,WAAW,GAAKJ,EACtD,CASO,MAAM/rD,WAAkBE,GAChBtB,sBACP,OAAOG,EAASiB,SACpB,CAIWosD,qBACP,OAAO1mB,GAAKC,EAChB,CAIW0mB,uBACP,OAAO3mB,GAAKE,IAChB,CACW0mB,gCACP,OAAO,CACX,CACWC,gCAEP,OADkBrhC,EAAOyU,mBACRrxB,aAAa,sBAClC,CAEA7L,cAAcyqB,EAAOuS,GACjB,IAAKvS,GAASA,EAAMpqB,OAAS,EACzB,OAAO,EACX,MAAM0pD,EAAY,GAClB,IAAK,IAAI5mD,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CAEnC,MAAMw6B,EAAQlT,EAAMtnB,GAAG6mD,eACjBvrD,EAAOk/B,EAAM,GAAGkX,SAASp2C,KAC/B,IAAIwrD,EAAOtsB,EAAMA,EAAMt9B,OAAS,GAAGw0C,SAASp2C,KAC5C,MAAMurC,EAAgBvf,EAAMtnB,GAAG+mC,mBACzBggB,EAAUz/B,EAAMtnB,GAAGklD,gBAAkB,GACrC8B,EAAU1/B,EAAMtnB,GAAGqlD,uBAAyB,GAClD,IAAI4B,EACA3/B,EAAMtnB,GAAGo+B,UACT6oB,EAAO3rD,EAAOgsB,EAAMtnB,GAAG6xC,WAAWjnB,WAClCk8B,EAAOxrD,EAAOgsB,EAAMtnB,GAAG6xC,WAAWhnB,aAGlCo8B,EACsB,IAAlBpgB,EAAsBrM,EAAMA,EAAMt9B,OAAS,GAAGw0C,SAASp2C,KAAOyrD,EAAUvsB,EAAMA,EAAMt9B,OAAS,GAAGw0C,SAASp2C,KAC7GwrD,EAAyB,IAAlBjgB,EAAsBrM,EAAM,GAAGkX,SAASp2C,KAAOk/B,EAAM,GAAGkX,SAASp2C,KAAOyrD,GAEnFH,EAAU76C,KAAK,CACXzQ,KAAMk/B,EAAM,GAAGkX,SAASp2C,KACxB8qD,QAASa,EACTZ,QAASS,EACTI,OAAQ5/B,EAAMtnB,GAAGo+B,SACjByI,cAAeA,EACfkgB,UACAC,UACAG,YAAa7/B,EAAMtnB,GAAGonD,qBACtBC,aAAc//B,EAAMtnB,GAAG4jD,cACvB3yB,KAAM3J,EAAMtnB,IAEpB,CACA,IACIsnD,EACAC,EACAC,EAHAnqB,EAAS,EAIb,MAAMhwB,EAAO,EAAC,GAAO,GAAO,GAC5B,IAAK,IAAIrN,EAAI,EAAGA,EAAI4mD,EAAU1pD,OAAQ8C,IAClCqN,EAAKrN,GAA8C,GAAzC4mD,EAAU5mD,GAAGixB,KAAK8N,eAAe1xB,KAE/C,GAAIA,EAAK,IAAMA,EAAK,IAAMA,EAAK,GAE3BgwB,EAAS,EACTiqB,EAAQV,EAAU,GAClBW,EAAQX,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAIv5C,EAAK,IAAMA,EAAK,GAErBgwB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,QAEjB,GAAIv5C,EAAK,IAAMA,EAAK,GAErBgwB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,OAEjB,KAAIv5C,EAAK,KAAMA,EAAK,GAQrB,OAAO,EANPgwB,EAAS,EACTiqB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,EAKtB,CAGe,IAAXvpB,IAAyC,IAAzBiqB,EAAMzgB,eAAgD,IAAxB2gB,EAAM3gB,gBACpDygB,EAAQV,EAAU,GAClBY,EAAQZ,EAAU,IAEtB,MAAMa,EAAclrD,KAAK8E,IAAIimD,EAAMH,YAAaK,EAAML,aACtD,IAAIj4B,EAAS,EAEb,GAAe,IAAXmO,EAAc,CACd,MAAMqqB,EAAcJ,EAAMr2B,KAAK6V,WAAa0gB,EAAMv2B,KAAK6V,WAAawgB,EAAMzgB,gBAAkB2gB,EAAM3gB,cAAgB,EAAM,GACxH,GAAI2gB,EAAMN,QAAUI,EAAMJ,QAAUI,EAAMr2B,KAAKpL,WAAa2hC,EAAMv2B,KAAKpL,SACnE2hC,EAAMv2B,KAAK8N,eAAe1xB,MAAO,OAEhC,GAAIi6C,EAAMjB,SAAWmB,EAAMpB,QAAUsB,EACtC,GAAIJ,EAAMJ,OAENjB,GAAkBqB,EAAOE,EAAO,QAE/B,GAAIA,EAAMN,OAEXjB,GAAkBuB,EAAOF,GAAQ,OAEhC,CAID,MAAMK,EAAWprD,KAAK+C,IAAIgoD,EAAMhsD,KAAOksD,EAAMlsD,MAC7C,GAAIgsD,EAAMr2B,KAAK6V,WAAa0gB,EAAMv2B,KAAK6V,UAAW,CAG9C,IAAI8gB,EAAqB,EACrBC,EAAqB,EAC4B,IAAjDviC,EAAOk/B,iBAAiB8C,EAAMr2B,KAAKpL,UACnC+hC,IAEKtiC,EAAOk/B,iBAAiB8C,EAAMr2B,KAAKpL,UAAY,GACpDgiC,IAEiD,IAAjDviC,EAAOk/B,iBAAiBgD,EAAMv2B,KAAKpL,UACnC+hC,IAEKtiC,EAAOk/B,iBAAiBgD,EAAMv2B,KAAKpL,UAAY,GACpDgiC,IAEwB,IAAvBD,GAAmD,IAAvBC,GAC7BP,EAAMr2B,KAAK+hB,mBAAmB75C,EAASO,KAAKwD,SAAWsqD,EAAMv2B,KAAK+hB,mBAAmB75C,EAASO,KAAKwD,QAW9FyqD,EAAW,GAAKA,EAAW,GAVhCz4B,EAASu4B,EAAc,EACnBH,EAAMzgB,gBAAkB2gB,EAAM3gB,cAE9BygB,EAAMr2B,KAAKrC,UAAUM,GAIrBs4B,EAAMv2B,KAAKrC,UAAUM,IAepBo4B,EAAMr2B,KAAKuM,QAAUgqB,EAAMv2B,KAAKuM,OAEjC8pB,EAAMzgB,gBAAkB2gB,EAAM3gB,gBAC1BygB,EAAMhsD,MAAQksD,EAAMlsD,MACpB4zB,EAASu4B,EAAc,EACvBH,EAAMr2B,KAAKrC,UAAUM,IAIO,IAAxBs4B,EAAM3gB,gBACN2gB,EAAM3gB,eAAiB,EACvB2gB,EAAMv2B,KAAKq0B,kBAAkB,IAKjD,MACSqC,EAAW,GAChBz4B,EAASu4B,EAAc,EACnBH,EAAMzgB,gBAAkB2gB,EAAM3gB,cAE9BygB,EAAMr2B,KAAKrC,UAAUM,GAIrBs4B,EAAMv2B,KAAKrC,UAAUM,IAGpBo4B,EAAMr2B,KAAK6V,WAChBwgB,EAAMzgB,eAAiBygB,EAAMr2B,KAAK8V,mBAClCugB,EAAMr2B,KAAKq0B,iBAAiBgC,EAAMzgB,gBAE7B2gB,EAAMv2B,KAAK6V,YAChB0gB,EAAM3gB,eAAiB2gB,EAAMv2B,KAAK8V,mBAClCygB,EAAMv2B,KAAKq0B,iBAAiBkC,EAAM3gB,eAE1C,CAIJ,OADAhN,EAAMmO,aAAe9Y,GACd,CACX,CACA,IAAKq4B,EACD,MAAM,IAAI9sD,EAAa,eAAgB,sBAK3C,GAAI8sD,EAAML,SAAWI,EAAMJ,SAAWM,EAAMN,SACpCI,EAAMjB,SAAWkB,EAAMnB,SAAWmB,EAAMlB,SAAWmB,EAAMpB,SAAS,CAqBlE,OApBmBmB,EAAMnB,QAAUmB,EAAMlB,QAC3BiB,EAAMjB,QAAUmB,EAAMpB,QA/NpD,SAAoB5yC,EAAM8zC,EAAOE,GAC7B,MAAMrB,EAAQ3yC,EAAKlY,KAAOQ,EAAQwrD,EAAMjB,QAASmB,EAAMpB,SACvD5yC,EAAKyd,KAAKq1B,WAAW,EAAG9yC,EAAKyd,KAAKs1B,WAAW,GAAKJ,GAClD3yC,EAAKlY,MAAQ6qD,EACb3yC,EAAK4yC,SAAWD,EAChB3yC,EAAK6yC,SAAWF,CACpB,CA4NoB2B,CAAWP,EAAOD,EAAOE,IAGzBt4B,EAASu4B,EAAc,EACvBF,EAAMt2B,KAAKrC,UAAUM,IACQ,IAAzBs4B,EAAMv2B,KAAKmiB,YACXoU,EAAM3gB,eAAiB,EACvB2gB,EAAMv2B,KAAKq0B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAMr2B,KAAKmiB,YAC7CkU,EAAMzgB,cAAgB,EACtBygB,EAAMr2B,KAAKq0B,iBAAiB,KAIpCzrB,EAAMmO,aAAe9Y,GACd,CACX,CAGJ,OAAIo4B,EAAMJ,QAAUK,EAAML,QAAUM,EAAMN,QAEtCI,EAAMr2B,KAAK8N,eAAe1xB,MAAO,EAEjCm6C,EAAMv2B,KAAK8N,eAAe1xB,MAAO,EAEjCwsB,EAAMmO,aAAe9Y,GACd,IAGPq4B,EAAML,QAAUI,EAAMJ,QAAUK,EAAMlB,SAAWmB,EAAMpB,UAEvDmB,EAAMt2B,KAAK8N,eAAe1xB,MAAO,GAEjCk6C,EAAML,QAAUM,EAAMN,QAAUI,EAAMjB,SAAWkB,EAAMnB,UAEvDmB,EAAMt2B,KAAK8N,eAAe1xB,MAAO,GAEjCi6C,EAAMJ,QAAUI,EAAMjB,SAAWkB,EAAMnB,SAEvCH,GAAkBqB,EAAOC,EAAO,GAEhCC,EAAMN,QAAUK,EAAMlB,SAAWmB,EAAMpB,SAEvCH,GAAkBuB,EAAOD,GAAQ,IAGjCD,EAAMjB,SAAWkB,EAAMnB,QAAU,IAAOmB,EAAMlB,SAAWmB,EAAMpB,WAE/Dl3B,EAASu4B,EAAc,EACvBF,EAAMt2B,KAAKrC,UAAUM,IACQ,IAAzBs4B,EAAMv2B,KAAKmiB,YACXoU,EAAM3gB,eAAiB,EACvB2gB,EAAMv2B,KAAKq0B,kBAAkB,IAE7BgC,EAAMjB,SAAWmB,EAAMpB,UAAoC,IAAzBkB,EAAMr2B,KAAKmiB,YAC7CkU,EAAMzgB,cAAgB,EACtBygB,EAAMr2B,KAAKq0B,iBAAiB,KAGpCzrB,EAAMmO,aAAe9Y,GACd,EACX,CACAryB,kBAAkByqB,GACd,QAAKA,IAELA,EAAMpb,SAAS+kB,GAASA,EAAKye,gBACtB,EACX,CACA32C,YAAYi4C,GACR,IAAI7rC,EAAIoF,EAAIg0C,EACZ1jD,MAAMm2C,GAGN15C,KAAK+uD,QAAU,EACf/uD,KAAK8uD,QAAU,EAEf9uD,KAAKuvD,eAAiB,GACtBvvD,KAAKywD,gBAAkB,CAAC,EACxBzwD,KAAKkuB,KAAkC,QAA1BrgB,EAAK6rC,EAAWxrB,YAAyB,IAAPrgB,EAAgBA,EAAK,SACpE7N,KAAKsuB,aAAkD,QAAlCrb,EAAKymC,EAAWprB,oBAAiC,IAAPrb,EAAgBA,EAAK,EAEpFjT,KAAKu6C,WAAavsB,EAAOqhB,cAAcrvC,KAAKuuB,SAAUvuB,KAAKq6C,UAC3D32C,EAAQ1D,KAAKu6C,WAAY,eAAgB,gCAAgCv6C,KAAKuuB,uBAAuBvuB,KAAKq6C,aAE1Gr6C,KAAKivB,WAAY,EACjBjvB,KAAKqzB,WAAa,EAElBrzB,KAAK0wD,oBAAqB,EAE1B1wD,KAAK2wD,WAAa,GAClB3wD,KAAK41C,UAAY,GACjB51C,KAAKynC,eAAiBpnC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKynC,gBAAiB,CAExEkT,iBAAkBjB,EAAWiB,kBAAoB3sB,EAAOyC,oBAExDmqB,UAAWlB,EAAWkB,WAAa93C,GAAUssD,qBACjDpvD,KAAK4wD,oBACL5wD,KAAKutD,YAED7T,EAAWmX,UACX7wD,KAAK8wD,WAGL9wD,KAAKguD,iBAAsD,QAApC/G,EAAKvN,EAAWpQ,sBAAmC,IAAP2d,EAAgBA,EAAKze,GAAKC,IAEjGzoC,KAAKg3B,QACLh3B,KAAKwtD,WACT,CACAx2B,QACIzzB,MAAMyzB,QAEN,MAAM+5B,EAAiB/wD,KAAK2wD,WAAWp9C,KAAKy9C,GAAaA,EAASn8C,aAClE7U,KAAKixD,iBACLjxD,KAAK2wD,WAAW/7C,SAAQ,CAACo8C,EAAU1+C,KAC/B,MAAM4+C,EAAgBH,EAAez+C,GACjC4+C,GACAF,EAASt8C,SAASw8C,EAAc,IAExC,MAAM95B,EAAQp3B,KAAKo3B,MAKnB,OAJIA,GACAp3B,KAAK2wD,WAAW/7C,SAASu8C,GAASA,EAAKh6B,SAASC,KAEpDp3B,KAAKoxD,wBACEpxD,IACX,CACA+7C,QAAQH,GAOJ,OANA57C,KAAK47C,KAAOA,EACZ57C,KAAKoxD,wBAEDpxD,KAAK+yB,MACL/yB,KAAK+yB,KAAK8W,aAAa7pC,KAAK6tD,oBAEzB7tD,IACX,CAEAutD,YAEI,OADAvtD,KAAKstD,QAAQ,IAAI9kB,GAAK,CAAEe,OAAQvpC,KAAK8mC,YAC9B9mC,IACX,CAEAixD,iBACIjxD,KAAK2wD,WAAa,GAClB,MAAMphB,EAAgBvvC,KAAKyvC,mBACrBn8B,EAAOtT,KAAK68C,UAClB,IAAIkO,EACAsF,EAIAjoB,EACA6V,EACAhxC,EALAgiB,GAAY,EAMZsgB,IAAkB/G,GAAKC,IACvBL,EAAQ,EACR6V,EAAM3qC,EAAK1N,OACXqH,EAAO,IAGPm7B,EAAQ90B,EAAK1N,OAAS,EACtBq4C,GAAO,EACPhxC,GAAQ,GAEZ,IAAK,IAAIvE,EAAI0/B,EAAO1/B,IAAMu1C,EAAKv1C,GAAKuE,EAAM,CAEtC,MAAMokD,EAAYrxD,KAAKuvD,eAAe7mD,GAAG0xC,SACnCp2C,EAAOqtD,EAAUrtD,UAGNJ,IAAbmnD,EACAA,EAAW/mD,GAGXqsD,EAAWprD,KAAK+C,IAAI+iD,EAAW/mD,GACd,IAAbqsD,GAA+B,KAAbA,EAClBphC,GAAaA,GAGbA,GAAY,EACZjvB,KAAK0wD,oBAAqB,IAGlC3F,EAAW/mD,EACX,MAAMstD,EAAW,IAAIxF,GAAS,CAC1Bv9B,SAAUvuB,KAAKuuB,SACf29B,UAAWlsD,KAAKq6C,SAChBprB,YACAqa,eAAgBiG,EAChB6c,kBAAmBiF,EAAUhuD,KAC7Bs3C,iBAAkB36C,KAAKynC,eAAekT,iBACtCpmB,QAAS88B,EAAUh1C,YACnB2vC,iBAAkBqF,EAAUrF,iBAC5BC,mBAAoBoF,EAAUpF,mBAC9BjoD,KAAMqtD,EAAUrtD,OAEpBhE,KAAKuU,gBAAgB+8C,GACrBtxD,KAAK2wD,WAAW3wD,KAAKuvD,eAAe7mD,GAAG4J,OAASg/C,CACpD,CACJ,CAEAR,WACI9wD,KAAKguD,iBAAiBhuD,KAAKuxD,gCAC/B,CACAA,gCAGIvxD,KAAK+uD,QAAU/uD,KAAKuvD,eAAe,GAAGnV,SAASp2C,KAC/ChE,KAAK8uD,QAAU9uD,KAAKuvD,eAAevvD,KAAKo6C,SAASx0C,OAAS,GAAGw0C,SAASp2C,KAItE,OAFiBhE,KAAK+uD,QAAU/uD,KAAK8uD,SAAW,EAD5B,EAE0BtmB,GAAKC,GAAKD,GAAKE,IAEjE,CAEAkoB,oBACI,IAAI7F,EACJ,IAAK,IAAIriD,EAAI,EAAGA,EAAI1I,KAAKsT,KAAK1N,SAAU8C,EAAG,CACvC,MAAMvI,EAAMH,KAAKsT,KAAK5K,GAGlB1I,KAAKu6C,WAAWr+B,OAChBlc,KAAKu6C,WAAW/mB,SAAWrzB,GAC/B,MAAMkuB,EAAU,CAAEC,aAActuB,KAAKsuB,cAAgB,EAAGC,SAAUvuB,KAAKuuB,UACjE2U,EAAQlV,EAAOwjC,cAAcrxD,EAAKH,KAAKkuB,KAAMG,GACnD,IAAK6U,EACD,MAAM,IAAI//B,EAAa,eAAgB,oCAAoChD,KAG7D,MAAd+iC,EAAM/iC,MACgB,MAAlBH,KAAKuuB,UAAsC,MAAlBvuB,KAAKuuB,SAC9B2U,EAAMl/B,KAAO,EAGbk/B,EAAMl/B,KAAO,GAIrB,MAAMA,EAAOk/B,EAAMl/B,KACHJ,MAAZmnD,EACAA,EAAW/mD,EAGuB,KAA9BiB,KAAK+C,IAAI+iD,EAAW/mD,KACpBhE,KAAKivB,WAAY,EACjBiU,EAAMjU,WAAY,EAGdjvB,KAAKo6C,SAASx0C,OAAS,IACvB5F,KAAKo6C,SAAS1xC,EAAI,GAAGumB,WAAY,IAI7C87B,EAAW/mD,EACXhE,KAAKo6C,SAAS3lC,KAAKyuB,EACvB,CAGAljC,KAAKo6C,SAASxlC,SAAQ,CAACwlC,EAAU9nC,KAC7BtS,KAAKuvD,eAAe96C,KAAK,CAAE2lC,WAAU9nC,SAAQ,IAEjDtS,KAAKuvD,eAAe9rB,MAAK,CAACh/B,EAAGC,IAAMD,EAAE21C,SAASp2C,KAAOU,EAAE01C,SAASp2C,MACpE,CAEA4S,iBACI,IAAI/I,EAAIoF,EACR,IAAKjT,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,qDAE9C,MAAQsH,MAAO1B,EAAC,UAAEiyB,EAAS,oBAAE4d,GAAwB54C,KAAK8Q,aACpDnN,EAAI3D,KAAK04C,eAAiB1d,EAAY4d,EAC5C,IAAI6Y,EAAO,EACPC,EAAO,EACX,MAAMC,GAAsH,QAAlG1+C,EAAgC,QAA1BpF,EAAK7N,KAAK86B,kBAA+B,IAAPjtB,OAAgB,EAASA,EAAGy1B,gCAA6C,IAAPrwB,EAAgBA,EAAK,GAAK,EACxJm9C,EAAgC,EAAlBuB,EACpB,GAAI3xD,KAAK8mC,SAAU,CACf,MAAMh+B,EAAI9I,KAAKqqC,GAAG,GACZunB,EAAO5jC,EAAOmC,mBAAmBnwB,KAAKuuB,UACxCqjC,EAAK3qD,OAAO,IAAM2qD,EAAK3qD,OAAO,IAC9BwqD,EAAO3oD,EAAI6oD,EACXD,EAAO5oD,EAAI6oD,IAGXF,EAAO3oD,EAAI9I,KAAKu6C,WAAWjnB,WAAa88B,EACxCsB,EAAO5oD,EAAI9I,KAAKu6C,WAAWhnB,WAAa68B,EAEhD,MACK,GAAIpwD,KAAKu6C,WAAWxnB,KAAM,CAC3B,MAAMsX,EAAKrqC,KAAK+xC,iBAChB1H,EAAGM,OAASgnB,EAAkB3xD,KAAKyvC,mBACnCgiB,EAAOxsD,KAAKulC,IAAIH,EAAGK,KAAML,EAAGM,OAC5B+mB,EAAOzsD,KAAK8E,IAAIsgC,EAAGK,KAAML,EAAGM,MAChC,KACK,CACD8mB,EAAO,EACPC,EAAO,EACP,IAAK,IAAIhpD,EAAI,EAAGA,EAAI1I,KAAKqqC,GAAGzkC,SAAU8C,EAAG,CACrC,MAAM4wC,EAAKt5C,KAAKqqC,GAAG3hC,GACT,IAANA,GACA+oD,EAAOnY,EACPoY,EAAOpY,IAGPmY,EAAOxsD,KAAKulC,IAAI8O,EAAImY,GACpBC,EAAOzsD,KAAK8E,IAAIuvC,EAAIoY,GAE5B,CACAD,GAAQE,EACRD,GAAQC,CACZ,CACA,OAAO,IAAI/oD,EAAYjF,EAAG8tD,EAAM1oD,EAAG2oD,EAAOD,EAC9C,CAGAthB,cAAciL,GACV,IAAKp7C,KAAKo6C,SAASx0C,OACf,MAAM,IAAIzC,EAAa,aAAc,yEAEzC,IAAI0uD,EAAa7xD,KAAKo6C,SAAS,GAAGp2C,KAElC,IAAK,IAAI0E,EAAI,EAAGA,EAAI1I,KAAKo6C,SAASx0C,OAAQ8C,IAAK,CAC3C,MAAMopD,EAAW9xD,KAAKo6C,SAAS1xC,GAAG1E,KAC9Bo3C,EACI0W,EAAWD,IACXA,EAAaC,GAGbA,EAAWD,IACXA,EAAaC,EAEzB,CACA,OAAOD,CACX,CAIA/qB,SACI,OAAO9mC,KAAKu6C,WAAWr+B,IAC3B,CAEA61C,UACI,OAAQ/xD,KAAK8mC,UAAY9mC,KAAKsT,KAAK1N,OAAS,CAChD,CAEA4pC,UACI,OAAOxvC,KAAKu6C,WAAWxnB,IAC3B,CACA06B,UACI,OAAOlqD,MAAMkqD,YAAcztD,KAAK8mC,QACpC,CACAsK,WACI,MAAsB,MAAlBpxC,KAAKq6C,SACEr6C,KAAKsuD,kBAKL/qD,MAAM6tC,YAAcpxC,KAAKspC,eAAiBd,GAAKG,OAAS,GAAK3oC,KAAKspC,gBAAkB,EAEnG,CAGAqI,eAAeqC,GACX,MAAMlC,EAAU9xC,KAAK+xC,iBACrB,OAAO9sC,KAAKulC,IAAIxqC,KAAKm4B,aAAawZ,eAAeqC,GAAWlC,EAAQpH,KAAO1qC,KAAKynC,eAAeiT,oBAAsB1G,EAAW,GACpI,CACApC,kBAAkBoC,GACd,MAAMlC,EAAU9xC,KAAK+xC,iBACrB,OAAO9sC,KAAK8E,IAAI/J,KAAKm4B,aAAawZ,eAAeqC,GAAWlC,EAAQnH,MAAQ3qC,KAAKynC,eAAeiT,mBAAqB1G,EACzH,CAGA7c,SAASC,GACL7zB,MAAM4zB,SAASC,GACf,MAAMiT,EAAKrqC,KAAK2wD,WAAWp9C,KAAK+9C,IAC5BA,EAASn6B,SAASC,GACXk6B,EAASpoD,UAGpB,GADAlJ,KAAKg7C,MAAM3Q,GACPrqC,KAAK+yB,KAAM,CACX,MAAM,MAAEoW,EAAK,SAAEC,GAAappC,KAAKgyD,oBACjChyD,KAAK+yB,KAAKiX,WAAWb,EAAOC,EAChC,CACA,OAAOppC,IACX,CAEAssD,cACI,OAAOtsD,KAAKivB,SAChB,CAEAgjC,iBAAiBhjC,GAEb,OADAjvB,KAAKivB,UAAYA,EACVjvB,IACX,CAEAy8C,eACI,IAAIC,EAAY18C,KAAK04C,eAIrB,OAHAgE,GAAa18C,KAAKu7C,gBAAkBv7C,KAAKu0B,QAAUv0B,KAAKk5C,qBACpDl5C,KAAKk6B,kBACLwiB,GAAa18C,KAAKk6B,gBAAgBg4B,iBAC/BxV,CACX,CAEAC,cACI,IAAIC,EAAU58C,KAAK04C,eAEnB,OADAkE,GAAW58C,KAAKu0B,QAAUv0B,KAAK44C,oBACxBgE,CACX,CAEAvB,iBACI,IAAI8W,EAAWnyD,KAAKo6C,SAAS,GAAGp2C,KAChC,GAAIhE,KAAKo6C,SAASx0C,OAAS,EAAG,CAC1B,MAAMmlD,EAAW/qD,KAAKo6C,SAASp6C,KAAKo6C,SAASx0C,OAAS,GAAG5B,KAGzDmuD,EAAW3tD,EAFCS,KAAK8E,IAAIooD,EAAUpH,GACnB9lD,KAAKulC,IAAI2nB,EAAUpH,GAEnC,CACA,OAAOoH,CACX,CAGA9pB,mBAAmB7U,EAAUlhB,EAAO+b,EAAU,CAAC,GAC3C,IAAIxgB,EAAIoF,EACR,IAAKjT,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAKqqC,GAAGzkC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,MAAM,MAAE61B,EAAK,MAAEE,EAAK,KAAEE,EAAI,MAAEE,GAAUZ,GAASC,SAC/C,IAAIh1B,EAAI,EAiBR,OAhBI6vB,IAAa4F,EAEbz1B,GAAI,EAEC6vB,IAAa8F,GAElB31B,EAAI3D,KAAKu7C,gBAAkBv7C,KAAKu0B,QAAU,EACtCv0B,KAAKspC,iBAAmBd,GAAKC,IAC7BzoC,KAAKytD,YACJp/B,EAAQ47B,gBAnqBA,EAACtwB,EAAMrnB,IAAUA,KAAWqnB,EAAK8V,qBAAuBjH,GAAKC,GAAK9O,EAAKygB,SAASx0C,OAAS,EAAI,GAmqB3EwsD,CAAiBpyD,KAAMsS,MAClD3O,GAAwI,QAAlIsP,EAAsE,QAAhEpF,EAAK7N,gBAAmC,EAASA,KAAKgzB,YAAyB,IAAPnlB,OAAgB,EAASA,EAAGiD,aAAarG,aAA0B,IAAPwI,EAAgBA,EAAK,IAGpKugB,IAAa0F,GAAS1F,IAAawF,IACxCr1B,EAAI3D,KAAKu7C,gBAAkB,GAExB,CACH53C,EAAG3D,KAAK04C,eAAiB/0C,EACzBmF,EAAG9I,KAAKqqC,GAAG/3B,GAEnB,CAGAoC,SAASpG,GACL,OAAO/K,MAAMoR,cAAcrG,EAC/B,CACA+jD,aAAa/jD,GACT,MAAMykB,EAAO/yB,KAAK4vC,UAGlB,OAFI7c,GACAA,EAAKre,SAASpG,GACXtO,IACX,CACAsyD,eACI,IAAIzkD,EACJ,OAA4B,QAApBA,EAAK7N,KAAK+yB,YAAyB,IAAPllB,OAAgB,EAASA,EAAGgH,UACpE,CACA09C,mBAAmBjkD,GACftO,KAAKywD,gBAAkBniD,CAC3B,CACAkkD,qBACI,OAAOxyD,KAAKywD,eAChB,CACAgC,aAAankD,GACT,IAAIT,EACiB,QAApBA,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,GAAyBA,EAAG6G,SAASpG,EACtE,CACAokD,eACI,IAAI7kD,EACJ,OAA4B,QAApBA,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,OAAgB,EAASA,EAAGgH,UACpE,CAKA89C,YAAYrgD,EAAOhE,GAEf,OADAtO,KAAK2wD,WAAWr+C,GAAOoC,SAASpG,GACzBtO,IACX,CACAgvD,WAAW18C,EAAOtO,GAGd,OAFAhE,KAAKo6C,SAAS9nC,GAAOtO,KAAOA,EAC5BhE,KAAKg3B,QACEh3B,IACX,CACAivD,WAAW38C,GACP,OAAOtS,KAAKo6C,SAAS9nC,GAAOtO,IAChC,CAGA8rD,qBAEI,OAAO9vD,KAAKu7C,iBAAmBv7C,KAAKivB,UAAY,EAAI,EACxD,CAGAmiC,wBACIpxD,KAAKk7C,uBAAuBl7C,KAAKivB,WAAajvB,KAAKspC,iBAAmBd,GAAKE,KAAO1oC,KAAKu7C,gBAAkB,GAGzGv7C,KAAKm7C,yBAAyBn7C,KAAKytD,WAAaztD,KAAKivB,WAAajvB,KAAKspC,iBAAmBd,GAAKC,GAAKzoC,KAAKu7C,gBAAkB,EAC/H,CAEArD,YACI,GAAIl4C,KAAKm4C,aACL,OACJ,IAAIya,EAAkB,EAClB5yD,KAAKk6B,kBACLl6B,KAAKk6B,gBAAgBge,YAGmB,IAApCl4C,KAAKk6B,gBAAgBtK,aACrBgjC,EAAkB9vD,GAAUusD,qBAGpC,IAAI5kD,EAAQzK,KAAKu7C,gBAAkBv7C,KAAK44C,oBAAsB54C,KAAKk5C,qBAAuB0Z,EAEtF5yD,KAAK6yD,kBAAoB7yD,KAAKspC,iBAAmBd,GAAKC,KACtDh+B,GAASzK,KAAKu7C,iBAGlBv7C,KAAKy5B,SAAShvB,GACdzK,KAAKm4C,cAAe,CACxB,CAoBA6Z,oBAEI,IAEIc,EACAC,EAGAC,EACAC,EAPAC,EAAQC,IACRC,GAAWD,IAGXE,EAAcrzD,KAAKm4B,aAAa2X,cAChCwjB,EAAa,EAGbC,EAA0BF,EAC1BG,EAAyBF,EAuB7B,OAtBAtzD,KAAK2wD,WAAW/7C,SAAS08C,IACrB,MAAMttD,EAAOstD,EAAS/E,UAChBzjD,EAAIwoD,EAASpoD,OACnBgqD,EAAOjuD,KAAKulC,IAAI1hC,EAAGoqD,GACnBE,EAAUnuD,KAAK8E,IAAIjB,EAAGsqD,QACHxvD,IAAfmvD,GAA4BzB,EAAShF,gBACrCyG,EAAazB,EAAS5Y,qBAEJ90C,IAAlBkvD,GAAgCxB,EAAShF,gBACzCwG,EAAgBxB,EAAS5Y,gBAE7B2a,EAAcpuD,KAAK8E,IAAI/F,EAAMqvD,GAC7BC,EAAaruD,KAAKulC,IAAIxmC,EAAMsvD,GACxBhC,EAAShF,eACT0G,OAAgDpvD,IAAzBovD,EAAqChvD,EAAOiB,KAAK8E,IAAI/F,EAAMgvD,GAClFC,OAA8CrvD,IAAxBqvD,EAAoCjvD,EAAOiB,KAAKulC,IAAIxmC,EAAMivD,KAGhFM,EAA0BtuD,KAAK8E,IAAI/F,EAAMuvD,GACzCC,EAAyBvuD,KAAKulC,IAAIxmC,EAAMwvD,GAC5C,GACDxzD,MACI,CACHmpC,MAAO+pB,EACP9pB,SAAUgqB,EACVK,YAAaV,EACbW,gBAAiBZ,EACjBa,aAAcN,EACdO,YAAaN,EACbO,uBAAwBb,EACxBc,sBAAuBb,EACvBc,2BAA4BR,EAC5BS,0BAA2BR,EAEnC,CAEAS,oBACI,OAAOj0D,KAAK04C,eAAiB14C,KAAKu0B,OACtC,CAEA2/B,kBAEI,OADel0D,KAAKi0D,oBACJj0D,KAAKu7C,eACzB,CACI4Y,gBACA,OAAOn0D,KAAK2wD,WAAWzsD,OAC3B,CAEIkwD,iBAEA,OAz1BJhwD,QAAQC,KAAK,uEAAwE,iDAy1B1ErE,KAAKm0D,SAChB,CAEAE,kBACI,MAAMj9B,EAAQp3B,KAAKm4B,cACb,WAAEoiB,EAAY9S,gBAAgB,UAAEmT,IAAiB56C,KACjD21B,EAAM31B,KAAK8V,eACXrL,EAAQ8vC,EAAW3qB,WAAyB,EAAZgrB,EAChC0Z,EAAc,GAAK/Z,EAAW3qB,WAAagrB,GAAapS,GAAKG,MAAQ,EAC3E,GAAI3oC,KAAK8mC,SACL,OACJ,IAAKnR,EACD,MAAM,IAAIxyB,EAAa,kBAAmB,wCAE9C,MAAM,aAAEwwD,EAAY,YAAEC,EAAW,uBAAEC,EAAsB,2BAAEE,EAA0B,sBAAED,EAAqB,0BAAEE,EAAyB,YAAEP,EAAW,gBAAEC,GAAqB1zD,KAAKgyD,oBAEhL,GAAI2B,EAAe,GAAKC,EAAc,EAClC,OACJ,MAAMW,EAAQtvD,KAAKulC,IAAIipB,QAAiDA,EAAc,EAAGC,QAAyDA,EAAkB,GAC9Jc,EAAiB,CAAC1rD,EAAG2rD,EAAQxlC,KAC/B,IAAItrB,EAEAA,EADAsrB,GAAawlC,EACTF,EAAQ3Z,EACP6Z,GACAf,QAAyDA,EAAkB,GAAK9Y,GAEhF6Y,QAAiDA,EAAc,GAAK7Y,EAC7E,MAAM8Z,EAAcD,GAAUxlC,EAAYqlC,EAAc7pD,EACxDkrB,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAGmF,GACd6sB,EAAIU,OAAO1yB,EAAI+wD,EAAa5rD,GAC5B6sB,EAAI/G,QAAQ,EAEVtgB,EAAQjO,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG4f,EAAMu9B,6BAA8B30D,KAAKwyD,sBACvFxyD,KAAK8U,WAAW6gB,EAAKrnB,GAErB,IAAK,IAAItK,EAAO,EAAGA,GAAQ2vD,IAAgB3vD,EAAM,CAC7C,MAAMywD,OAA6B7wD,IAApB8vD,GAAiC1vD,GAAQ+vD,EAClD9kC,OAAuCrrB,IAA3BiwD,GAAwC7vD,GAAQ6vD,EAClEW,EAAep9B,EAAM01B,YAAY9oD,GAAOywD,EAAQxlC,EACpD,CAEA,IAAK,IAAIjrB,EAAO,EAAGA,GAAQ4vD,IAAe5vD,EAAM,CAC5C,MAAMywD,OAA6B7wD,IAApB8vD,GAAiC1vD,GAAQgwD,EAClD/kC,OAAsCrrB,IAA1BkwD,GAAuC9vD,GAAQ8vD,EACjEU,EAAep9B,EAAM01B,YAAY9oD,GAAOywD,EAAQxlC,EACpD,CACAjvB,KAAK2V,aAAaggB,EAAKrnB,EAC3B,CAEAsmD,cAAcC,GACV,MAAMl/B,EAAM31B,KAAK8V,eACjB,IAAK,IAAIpN,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,OAAQ8C,IAAK,CAC5C,MAAM4+B,EAAWtnC,KAAK41C,UAAUltC,GAC1B4J,EAAQg1B,EAASvN,aACjBu3B,EAAWtxD,KAAK2wD,WAAWr+C,GACjC,GAAIg/C,GAAYuD,EAAe,CAC3B,MAAMC,EAAgBxD,EAASz8C,WAC/By8C,EAASx8C,WAAW6gB,EAAKm/B,GACzBxtB,EAASxwB,WAAW6e,GACpB2R,EAASzxB,gBACTy7C,EAAS37C,aAAaggB,EAAKm/B,EAC/B,CACJ,CACJ,CACAjC,iBACI,MAAMrjB,OAAwB5rC,IAAd5D,KAAK+yB,KACf06B,EAAkC,GAAxBztD,KAAKu6C,WAAWvnB,KAC1B+hC,OAA0BnxD,IAAd5D,KAAK47C,KACvB,OAAOpM,GAAWie,GAAWsH,CACjC,CAEAC,WACI,IAAInnD,EAAIoF,EAAIg0C,EAAIgO,EAAIC,EACpB,MAAMv/B,EAAM31B,KAAK8V,eACjB,IAAK6f,EACD,MAAM,IAAIxyB,EAAa,kBAAmB,wCAE9C,GAAInD,KAAK6yD,iBAAkB,CACvB,MAAM,MAAE1pB,EAAK,SAAEC,GAAappC,KAAKgyD,oBAE3BmD,EAAiBn1D,KAAK+yB,KAAKkX,YAC3BmrB,EAAQp1D,KAAKoxC,WAKbikB,EAAQr1D,KAAKyvC,qBAAuBjH,GAAKE,KAEvCS,EACIgsB,EACA,GACCn1D,KAAKu6C,WAAav6C,KAAKu6C,WAAWrnB,oBAAsB,GAAKlzB,KAAKs1D,qBACuB,QAAxFriD,EAA0B,QAApBpF,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,OAAgB,EAASA,EAAGiD,aAAa0jB,eAA4B,IAAPvhB,EAAgBA,EAAK,IAAM,EAAIjT,KAAKs1D,qBAE1IlsB,EACI+rB,EACA,GACCn1D,KAAKu6C,WAAav6C,KAAKu6C,WAAWtnB,kBAAoB,GAAKjzB,KAAKs1D,qBACyB,QAAxFL,EAA0B,QAApBhO,EAAKjnD,KAAKgzB,YAAyB,IAAPi0B,OAAgB,EAASA,EAAGn2C,aAAa0jB,eAA4B,IAAPygC,EAAgBA,EAAK,IAAM,EAAIj1D,KAAKs1D,qBAE7H,QAApBJ,EAAKl1D,KAAKgzB,YAAyB,IAAPkiC,GAAyBA,EAAGl9B,OAAOrC,EAAKy/B,EAAOC,EAChF,CACJ,CAEAE,gBACI,MAAM5/B,EAAM31B,KAAK8V,eACjB9V,KAAK2wD,WAAW/7C,SAAS08C,IACrBA,EAASx8C,WAAW6gB,GACpBA,EAAI0V,UAAU,WAAYimB,EAASz+C,aAAa,MAAO,CAAEy4B,aAAa,IACtEgmB,EAASx6C,WAAW6e,GAAK5f,OACzB/V,KAAK40D,cAActD,GACnB37B,EAAI4V,aACJ+lB,EAAS37C,aAAaggB,EAAI,GAElC,CACA84B,SAASC,GAIL,MAAM/4B,EAAM31B,KAAK8V,eACb44C,GACA1uD,KAAKstD,QAAQ,IAAI9kB,GAAKkmB,IAItB1uD,KAAK6yD,kBAAoB7yD,KAAK+yB,MAC9B/yB,KAAK+yB,KAAKgY,sBAEV/qC,KAAK+yB,MACL/yB,KAAK+yB,KAAKjc,WAAW6e,GAAK5f,MAElC,CAEAu/C,oBACI,OAAO,CACX,CAIAzH,mBACI,MAAM2H,EAAuBjyD,MAAMsqD,mBACnC,IAAK7tD,KAAKu6C,WAAWxnB,KACjB,OAAOyiC,EAEX,MAAMlsB,EAAiBtpC,KAAKyvC,mBAC5B,GAAInG,IAAmBtpC,KAAKuxD,gCACxB,OAAOiE,EAEX,IAAIC,EAUAA,EARAnsB,IAAmBd,GAAKC,GADR,EASkBzoC,KAAK8uD,QAGnB9uD,KAAK+uD,QAZT,EAepB,MAAM2G,EAAkCD,EAAoB,IAC5D,GAAIC,GAAmC,EACnC,OAAOF,EAEX,MAAMp+B,EAAQp3B,KAAK86B,WACnB,IAAI66B,EAAwB,GAI5B,OAHa/xD,MAATwzB,IACAu+B,EAAwBv+B,EAAMkM,0BAE3BkyB,EAAuBE,EAAkCC,CACpE,CAEA5/C,OACI,IAAiC,IAA7B/V,KAAKynC,eAAe1xB,KACpB,OACJ,GAAuB,IAAnB/V,KAAKqqC,GAAGzkC,OACR,MAAM,IAAIzC,EAAa,YAAa,qCAExC,MAAMwyB,EAAM31B,KAAK8V,eACX8/C,EAAS51D,KAAKi0D,oBACd4B,EAAmB71D,KAAKwvC,YAAcxvC,KAAK47C,KAGjD,GADA57C,KAAK2wD,WAAW/7C,SAAS08C,GAAaA,EAASjoD,KAAKusD,KAChD51D,KAAK+yB,KAAM,CAEX,MAAM+iC,EAAQ91D,KAAKoxC,WACnBpxC,KAAK+yB,KAAK4W,mBAAmBmsB,EAAOA,EACxC,EArhCR,YAAc/xD,GACNjB,GAAUw/B,OACVz+B,EAAI,qBAAsBE,EAClC,CAmhCQ,CAAE,aAAc/D,KAAK+xD,UAAY,UAAY,SAAU/xD,KAAKsT,MAE5DtT,KAAK8U,aACL6gB,EAAI0V,UAAU,YAAarrC,KAAK6S,aAAa,OAC7C7S,KAAKq0D,kBACDwB,GACA71D,KAAKyuD,WACTzuD,KAAKu1D,gBACLv1D,KAAKg1D,WACLr/B,EAAI4V,aACJvrC,KAAK2V,eACL3V,KAAKsW,aACT,EAEJxT,GAAUw/B,OAAQ,ECpjCX,MAAMyzB,WAAiBhiD,EACfrS,sBACP,OAAOG,EAASk0D,QACpB,CAaAt0D,YAAYuuB,EAAOjrB,GACfxB,QACAvD,KAAKg2D,SAAShmC,GACdhwB,KAAK+E,KAAOA,EACZ/E,KAAKynC,eAAiB,CAClBwuB,IAAK,EACLC,IAAK,GACLC,aAAc,EACdC,cAAe,EACfC,aAAc,EACd7hC,QAAS,EACT8hC,YAAa,GAEjBt2D,KAAK2X,WACT,CACAiyB,aAAa9I,GAET,OADA9gC,KAAK8gC,UAAYA,EACV9gC,IACX,CAMAg2D,SAAShmC,GACL,IAAKA,EAAMumC,aAAevmC,EAAM65B,UAC5B,MAAM,IAAI1mD,EAAa,eAAgB,yDAQ3C,GANK6sB,EAAMwmC,gBACPxmC,EAAMwmC,cAAgB,CAAC,IAEtBxmC,EAAMymC,eACPzmC,EAAMymC,aAAe,CAAC,IAEtBzmC,EAAMwmC,cAAc5wD,SAAWoqB,EAAMymC,aAAa7wD,OAClD,MAAM,IAAIzC,EAAa,eAAgB,gDAG3C,OADAnD,KAAKgwB,MAAQA,EACNhwB,IACX,CAIA02D,YACI,OAAQ12D,KAAKgwB,MAAMumC,aAAev2D,KAAKgwB,MAAM65B,SACjD,CACA8M,UAAUvoC,GACN,GAA+B,IAA3BA,EAAOwoC,SAAShxD,QAA0C,IAA1BwoB,EAAOyoC,QAAQjxD,OAC/C,MAAM,IAAIzC,EAAa,eAAgB,yBAE3C,MAAMwyB,EAAM31B,KAAK8V,eACjB,IAAImgD,EAAMj2D,KAAKynC,eAAewuB,IAC1BC,EAAMl2D,KAAKynC,eAAeyuB,IAC1BjxD,KAAK+C,IAAIomB,EAAO0oC,UAAY1oC,EAAO2oC,YAAc,KACjDd,EAAM,EACNC,EAAM,GAEV,MAAME,EAAgBp2D,KAAKynC,eAAe2uB,cACpCC,EAAer2D,KAAKynC,eAAe4uB,aACnC7hC,EAAUx0B,KAAKynC,eAAejT,QAAUpG,EAAO0S,UAI/C01B,EAAgBx2D,KAAKgwB,MAAMwmC,cAE3BC,EAAez2D,KAAKgwB,MAAMymC,aAChCz2D,KAAK8U,aACL6gB,EAAI0V,UAAU,WAAYrrC,KAAK6S,aAAa,OAC5C,IAAK,IAAInK,EAAI,EAAGA,EAAI8tD,EAAc5wD,SAAU8C,EAAG,CAC3C,MAAMi5C,GAAQvzB,EAAO0oC,UAAYT,GAAgBjoC,EAAO2oC,WAAaX,IAAkB,EACjFY,EAAa5oC,EAAOwoC,SAASJ,EAAc9tD,IAAM8rB,EACjDyiC,EAAY7oC,EAAOyoC,QAAQJ,EAAa/tD,IAAM8rB,EACpD,GAAI/uB,MAAMuxD,IAAevxD,MAAMwxD,GAC3B,MAAM,IAAI9zD,EAAa,eAAgB,kCAE3C,MAAM+zD,GAAYF,EAAaC,GAAa,EAAIhB,EAAM7nC,EAAO0S,UACvDq2B,GAAeH,EAAaC,GAAa,EAAIf,EAAM9nC,EAAO0S,UAChEnL,EAAIQ,YACJR,EAAIS,OAAOhI,EAAO2oC,WAAaX,EAAeY,GAC9CrhC,EAAIW,iBAAiBqrB,EAAMuV,EAAU9oC,EAAO0oC,UAAYT,EAAcY,GACtEthC,EAAIW,iBAAiBqrB,EAAMwV,EAAa/oC,EAAO2oC,WAAaX,EAAeY,GAC3ErhC,EAAI2f,YACJ3f,EAAIa,MACR,CACAb,EAAI4V,aACJvrC,KAAK2V,cACT,CACAqsC,WAAW+U,EAAYD,GACnB,IAAIjpD,EAAIoF,EAAIg0C,EACZ,IAAKjnD,KAAK+E,KACN,OACJ,MAAM4wB,EAAM31B,KAAK8V,eACjB,IAAIshD,GAAYL,EAAaD,GAAa,EAC1CM,GAAYzhC,EAAIusB,YAAYliD,KAAK+E,MAAM0F,MAAQ,EAC/C,MAAM2sB,EAAqG,QAA5FnkB,EAAsC,QAAhCpF,EAAK7N,KAAKgwB,MAAMumC,kBAA+B,IAAP1oD,OAAgB,EAASA,EAAGsqB,oBAAiC,IAAPllB,EAAgBA,EAAqC,QAA/Bg0C,EAAKjnD,KAAKgwB,MAAM65B,iBAA8B,IAAP5C,OAAgB,EAASA,EAAG9uB,aACxMf,IACAzB,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAAShyC,KAAK+E,KAAMqyD,EAAWp3D,KAAKynC,eAAe0uB,aAAc/+B,EAAMua,iBAAmB,GAC9Fhc,EAAI/f,UAEZ,CAIAyhD,WACI,OAAOr3D,KAAKgwB,KAChB,CACAja,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMigD,EAAav2D,KAAKgwB,MAAMumC,WACxB1M,EAAY7pD,KAAKgwB,MAAM65B,UAE7B,IAAIkN,EAAa,EACbD,EAAY,EACZF,EAAW,CAAC,GACZC,EAAU,CAAC,GACXvtB,EAAiB,EACrB,GAAIitB,EACAQ,EAAaR,EAAW9Z,eAAiBz8C,KAAKynC,eAAe6uB,YAC7DhtB,EAAiBitB,EAAW9mB,mBAC5BmnB,EAAWL,EAAW9kB,aAErB,GAAIoY,EAAW,CAEhBkN,EADclN,EAAU1xB,aACLm/B,eACnBV,EAAW/M,EAAUpY,QACrBzxC,KAAKgwB,MAAMwmC,cAAgBx2D,KAAKgwB,MAAMymC,YAC1C,CACA,GAAI5M,EACAiN,EAAYjN,EAAUlN,cAAgB38C,KAAKynC,eAAe6uB,YAC1DhtB,EAAiBugB,EAAUpa,mBAC3BonB,EAAUhN,EAAUpY,aAEnB,GAAI8kB,EAAY,CAEjBO,EADcP,EAAWp+B,aACPo/B,aAClBV,EAAUN,EAAW9kB,QACrBzxC,KAAKgwB,MAAMymC,aAAez2D,KAAKgwB,MAAMwmC,aACzC,CAYA,OAXIx2D,KAAK8gC,YACLwI,EAAiBtpC,KAAK8gC,WAE1B9gC,KAAK22D,UAAU,CACXI,aACAD,YACAF,WACAC,UACA/1B,UAAWwI,IAEftpC,KAAKgiD,WAAW+U,EAAYD,IACrB,CACX,EAGJf,GAAS5+C,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WC5KxC,MAAMqgD,WAAezB,GACbr0D,sBACP,OAAOG,EAAS21D,MACpB,CACAjyD,sBAAsByqB,GAClB,OAAO,IAAIwnC,GAAOxnC,EAAO,IAC7B,CACAzqB,qBAAqByqB,GACjB,OAAO,IAAIwnC,GAAOxnC,EAAO,IAC7B,CAYAvuB,YAAYuuB,EAAOjrB,GACfxB,MAAMysB,EAAOjrB,GACb/E,KAAKynC,eAAewuB,IAAM,EAC1Bj2D,KAAKynC,eAAeyuB,IAAM,GAC1Bl2D,KAAKynC,eAAejT,QAAU,EAC9Bx0B,KAAK8gC,WAAa,CACtB,EC3BG,IAAI22B,IACX,SAAWA,GACPA,EAAUA,EAAkB,OAAI,GAAK,SACrCA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAgB,KAAI,GAAK,MACtC,CAJD,CAIGA,KAAcA,GAAY,CAAC,IAIvB,MAAMC,WAAc3jD,EACZrS,sBACP,OAAOG,EAAS61D,KACpB,CAOWC,kBACP,OAAOF,EACX,CACAh2D,YAAYm2D,GAYR,IAAIC,EACJ,GAZAt0D,QACAvD,KAAK83D,qBAAuB,EAC5B93D,KAAK+3D,KAAON,GAAUO,OACtBh4D,KAAKm4C,cAAe,EACpBn4C,KAAKi4D,UAAY,IAAI3yD,EAAS,EAAG,GACjCtF,KAAKk4D,iBAAmB,EACxBl4D,KAAK2mC,UAAY,GACjB3mC,KAAKquB,QAAU,CACX8pC,cAAenqC,EAAO0C,gBAIN,iBAATknC,EAAmB,CAE1B,MAAMz3B,EAAQy3B,EAAKz3B,MAAM,gBACrBA,IACA03B,EAAY,CACRhlC,UAAWhuB,SAASs7B,EAAM,IAC1BrN,WAAYjuB,SAASs7B,EAAM,KAGvC,MAEI03B,EAAYD,EAGhB53D,KAAK43D,KAAOv3D,OAAOmX,OAAO,CAAEqb,UAAW,EAAGC,WAAY,EAAG7hB,WAAY+c,EAAO9V,YAAc2/C,GAE1F73D,KAAKo4D,WAAa,IAAI9yD,EAAStF,KAAK43D,KAAK/kC,WAAa7yB,KAAK43D,KAAK3mD,WAAajR,KAAK43D,KAAK9kC,YAAa,GAEpG9yB,KAAKq4D,kBAAoBr4D,KAAKo4D,WAAW1wD,OAC7C,CAEA4wD,gBACI,OAAOt4D,KAAKo4D,UAChB,CAEAG,eACI,OAAOv4D,KAAKi4D,SAChB,CAEAO,sBACI,OAAOx4D,KAAKk4D,gBAChB,CAEAO,uBACI,OAAOz4D,KAAKq4D,iBAChB,CAEAjyB,eACI,OAAOpmC,KAAK2mC,SAChB,CAEA+xB,UACI,OAAO14D,KAAK+3D,IAChB,CAKAY,QAAQZ,GAEJ,OADA/3D,KAAK+3D,KAAOA,EACL/3D,IACX,CAEA44D,0BACI,OAAO54D,KAAK83D,oBAChB,CAEAe,sBACI,OAAO74D,KAAK83D,qBAAuB93D,KAAK43D,KAAK3mD,UACjD,CAEAkmB,SAASC,GAIL,OAHAp3B,KAAKo3B,MAAQA,EAEbp3B,KAAK2J,iBAAc/F,EACZ5D,IACX,CACA86B,WACI,OAAO96B,KAAKo3B,KAChB,CAEAxgB,iBACI,IAAK5W,KAAK2J,YAAa,CACnB,MAAMytB,EAAQp3B,KAAKm4B,aACnB,IAAIxuB,EACJ,IAAK,IAAIjB,EAAI,EAAGA,EAAI1I,KAAK2mC,UAAU/gC,SAAU8C,EAAG,CAC5C,MAAMowD,EAAW94D,KAAK2mC,UAAUj+B,GAC3BowD,EAASh+B,YACVg+B,EAAS3hC,SAASC,GACtB,MAAM5a,EAAKs8C,EAASliD,iBAChB4F,IACA7S,EAAcA,EAAcA,EAAYD,UAAU8S,GAAMA,EAEhE,CACAxc,KAAK2J,YAAcA,CACvB,CACA,OAAO3J,KAAK2J,WAChB,CAEAovD,UAAUC,GAEN,OADAh5D,KAAK+3D,KAAOiB,EAASvB,GAAUO,OAASP,GAAUwB,KAC3Cj5D,IACX,CAEAk5D,aACI,OAAIl5D,KAAK+3D,OAASN,GAAUO,QAAUh4D,KAAK+3D,OAASN,GAAU0B,MACnDn5D,KAAKi4D,UAAUhxD,OAAOjH,KAAKo4D,WAK1C,CAQAgB,iBAAiBC,GAGb,OAFAr5D,KAAKquB,QAAQ8pC,cAAgBkB,EAC7Br5D,KAAKs5D,aAAe,EACbt5D,IACX,CAQAu5D,0BACI,MAAMnB,EAAap4D,KAAKi4D,UAAU72D,QAGlC,OADApB,KAAKs5D,aAAen0D,EAASnF,KAAK2mC,UAAUpzB,KAD/BulD,GAAa7zD,KAAK+G,IAAIhM,KAAKquB,QAAQ8pC,cAAeW,EAASvyB,WAAWnlC,QAAUg3D,MAEtFp4D,KAAKs5D,YAChB,CAEAE,QAAQC,GACCz5D,KAAKs5D,eACNt5D,KAAKs5D,aAAet5D,KAAKu5D,2BAE7B,MAAMnB,EAAap4D,KAAKi4D,UAAU72D,QAGlC,MAFY,CAACs4D,GAAMz0D,KAAK+G,IAAIhM,KAAKquB,QAAQ8pC,cAAeuB,EAAItB,GACjDuB,CAAIF,GAAaz5D,KAAKs5D,YAErC,CAEAM,YAAYd,GACR,IAAKA,EAASzyB,oBAAqB,CAC/B,MAAMjW,EAAQ0oC,EAASvyB,WAIvB,GAFAvmC,KAAKi4D,UAAU1xD,IAAI6pB,GACnBpwB,KAAKs5D,aAAe,GACft5D,KAAK+3D,OAASN,GAAUO,QAAUh4D,KAAK+3D,OAASN,GAAU0B,OAC3Dn5D,KAAKi4D,UAAU3wD,YAAYtH,KAAKo4D,YAEhC,MADAp4D,KAAKi4D,UAAUnxD,SAASspB,GAClB,IAAIjtB,EAAa,cAAe,mBAGtCitB,EAAM5oB,SAASxH,KAAKq4D,qBACpBr4D,KAAKq4D,kBAAoBjoC,EAAM1oB,SAEnC1H,KAAK83D,qBAAuB93D,KAAKi4D,UAAUhyD,YAE3CjG,KAAKo4D,WAAW7xD,IAAI,EAAGvG,KAAKi4D,UAAUhyD,YAC1C,CAIA,OAFAjG,KAAK2mC,UAAUlyB,KAAKqkD,GACpBA,EAAS7hB,SAASj3C,MACXA,IACX,CAEA65D,aAAalzB,GACT,IAAK,IAAIj+B,EAAI,EAAGA,EAAIi+B,EAAU/gC,SAAU8C,EACpC1I,KAAK45D,YAAYjzB,EAAUj+B,IAE/B,OAAO1I,IACX,CAEAk4C,YACI,GAAIl4C,KAAKm4C,aACL,OAAOn4C,KACX,MAAMo3B,EAAQp3B,KAAKm4B,aAOnB,OANAn4B,KAAK2mC,UAAU/xB,SAASkkD,IACfA,EAASh+B,YACVg+B,EAAS3hC,SAASC,EACtB,IAEJp3B,KAAKm4C,cAAe,EACbn4C,IACX,CACAm4B,aACI,OAAOz0B,EAAQ1D,KAAKo3B,MAAO,UAAW,iCAC1C,CASArhB,KAAKhB,EAAU/U,KAAK8V,eAAgBshB,GAGhC,IAAIztB,EAFJytB,EAAQA,QAAqCA,EAAQp3B,KAAKo3B,MAC1Dp3B,KAAKsW,cAEL,IAAK,IAAI5N,EAAI,EAAGA,EAAI1I,KAAK2mC,UAAU/gC,SAAU8C,EAAG,CAC5C,MAAMowD,EAAW94D,KAAK2mC,UAAUj+B,GAE5B0uB,GACA0hC,EAAS3hC,SAASC,GAEtB1zB,EAAQo1D,EAASh+B,WAAY,eAAgB,mDAC7C,MAAMte,EAAKs8C,EAASliD,iBAChB4F,IACA7S,EAAcA,EAAcA,EAAYD,UAAU8S,GAAMA,GAE5Ds8C,EAAShiD,WAAW/B,GACpB+jD,EAASjjD,eACb,CACA7V,KAAK2J,YAAcA,CACvB,ECvOG,MAAMnH,WAAuBk2B,GACrBh3B,sBACP,OAAOG,EAASW,cACpB,CAEA+C,cAAcu0D,EAAkBv3B,GAG5B,IAAKu3B,GAAgD,IAA5BA,EAAiBl0D,OACtC,OAAO,EACX,MAAMm0D,EAAa,GACnB,IAAI1P,EAAY,KACZpnB,EAAS,EACb,IAAK,IAAIv6B,EAAI,EAAGA,EAAIoxD,EAAiBl0D,SAAU8C,EAAG,CAC9C,MAAMsxD,EAAkBF,EAAiBpxD,GACnCixB,EAAOqgC,EAAgBtgC,UACvBugC,EAAep3D,EAAY82B,GAC3B2X,EAAU2oB,EAXQ,EACF,EAWtB,GAAIA,GAAgBtgC,IAAS0wB,EAAW,CAEpC,IAAK,IAAIzlD,EAAI,EAAGA,EAAI+0B,EAAKrmB,KAAK1N,SAAUhB,EACpCq+B,EAASh+B,KAAK8E,IAAI4vB,EAAKyJ,yBAA0BH,GAErDonB,EAAY1wB,CAChB,CACAogC,EAAWtlD,KAAK,CAAE3O,MAAOm9B,EAAQ+2B,kBAAiB1oB,WACtD,CAEA,IACI4oB,EADAC,EAAcJ,EAAW,GAAGj0D,MAEhC,IAAK,IAAI4C,EAAI,EAAGA,EAAIqxD,EAAWn0D,SAAU8C,EAAG,CACxC,MAAMsxD,EAAkBD,EAAWrxD,GAAGsxD,gBACtCA,EAAgB9hB,YAChBgiB,EAAcF,EAAgBpqC,WAAamqC,EAAWrxD,GAAG4oC,QACzD6oB,EAAcl1D,KAAK8E,IAAImwD,EAAaC,EACxC,CACA,IAAK,IAAIzxD,EAAI,EAAGA,EAAIqxD,EAAWn0D,SAAU8C,EAAG,CACxC,MAAMsxD,EAAkBD,EAAWrxD,GAAGsxD,gBACtCE,EAAcF,EAAgBpqC,WAAamqC,EAAWrxD,GAAG4oC,QACzD0oB,EAAgBx/B,2BAA2B2/B,EAAcl1D,KAAKulC,IAAI0vB,EAAaC,GAAer3D,GAAUusD,mBAC5G,CAEA,OADA9sB,EAAMK,YAAcu3B,GACb,CACX,CAEA14D,YAAY24D,EAAaC,GAkBrB,OAjBA92D,QACAvD,KAAKm4C,cAAe,EACpBn4C,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAKo6D,YAAcA,EACnBp6D,KAAKyK,MAAQ,EACbzK,KAAKq6D,UAAYA,EACjBr6D,KAAKs6D,UAAO12D,EACZ5D,KAAKkmC,MAAQ,IAAIwxB,GAAM,CACnB7kC,UAAW,EACXC,WAAY,EACZ7hB,WAAY+c,EAAO9V,aACpB6gD,WAAU,GACb/4D,KAAKynC,eAAiB,CAClB8yB,aAAc,GAElBv6D,KAAKw6D,MAAQ,GACbx6D,KAAKkmC,MAAM2zB,aAAa75D,KAAKo6D,aACtBp6D,IACX,CACAk4C,YACQl4C,KAAKm4C,eAEJn4C,KAAKksC,YACNlsC,KAAKksC,UAAY,IAAIuuB,IAEzBz6D,KAAKksC,UAAUwuB,WAAW,CAAC16D,KAAKkmC,QAAQy0B,OAAO,CAAC36D,KAAKkmC,OAAQ,EAAG,CAAC,GACjElmC,KAAKy5B,SAASz5B,KAAKksC,UAAU0uB,oBAC7B56D,KAAKm4C,cAAe,EACxB,CACA0iB,UAAUT,GAEN,IADAA,EAAcA,GAAep6D,KAAKo6D,aAClBx0D,OAAS,EAAG,CACxB,MAAMg2C,EAAO,IAAIkf,GAAKV,GACtBxe,EAAKnU,eAAeszB,WAAa,EACjCnf,EAAKnU,eAAeuzB,oBAAsB,EAC1Ch7D,KAAKw6D,MAAM/lD,KAAKmnC,EACpB,CACA,OAAO57C,IACX,CACAy5B,SAAShvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,MAAQ3H,GAAUusD,kBAClC,CACA7nB,gBACI,OAAOxnC,KAAKo6D,WAChB,CACArkD,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAQlB,GAPA55B,KAAKsW,cAvGb,YAAcvS,GACNvB,GAAe8/B,OACfz+B,EAAI,0BAA2BE,EACvC,CAqGQ,CAAE,gCAAiC41B,GACnC35B,KAAK06B,sBAAsB16B,KAAKwnC,gBAAiB7N,GAEjD35B,KAAKo6D,YAAYxlD,SAASqmD,GAAcA,EAAUnkD,WAAW6e,GAAK5f,SAElE/V,KAAKw6D,MAAM5lD,SAASgnC,GAASA,EAAK9kC,WAAW6e,GAAK5f,SAC9C/V,KAAKq6D,UAAW,CAEhB,MAAMJ,EAAep3D,EAAY82B,GAC3BuhC,EAAWjB,EAAelE,GAAWyB,GAC3Cx3D,KAAKs6D,KAAO,IAAIY,EAAS,CACrBrR,UAAW7pD,KAAKo6D,YAAY,GAC5B7D,WAAY58B,EACZ68B,cAAe,CAAC,GAChBC,aAAc,CAAC,KAEnBz2D,KAAKs6D,KAAK7yB,eAAeyuB,IAAM,GAC/Bl2D,KAAKs6D,KAAK7yB,eAAejT,SAAWylC,EAAe,EAAI,GAAKj6D,KAAKynC,eAAe8yB,aAChFv6D,KAAKs6D,KAAKxjD,WAAW6e,GAAK5f,MAC9B,CACJ,EAEJvT,GAAe8/B,OAAQ,ECnIhB,MAAM64B,WAAqBziC,GACnBh3B,sBACP,OAAOG,EAASs5D,YACpB,CAEA51D,cAAc61D,EAAQ74B,GAClB,IAAK64B,GAA4B,IAAlBA,EAAOx1D,OAClB,OAAO,EACX,IAAI6E,EAAQ,EACZ,IAAK,IAAI/B,EAAI,EAAGA,EAAI0yD,EAAOx1D,SAAU8C,EAAG,CACpC,MAAM2yD,EAAQD,EAAO1yD,GACrB2yD,EAAMnjB,YACNztC,GAAS4wD,EAAMzrC,UACnB,CAEA,OADA2S,EAAMK,YAAcn4B,GACb,CACX,CACAhJ,YAAYk5B,GACRp3B,QACAvD,KAAKm4C,cAAe,EACpBn4C,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAK26B,SAAWA,EAChB36B,KAAK26B,SAAS/lB,SAASsmB,IACnBA,EAAQsb,gBAAe,EAAM,IAEjCx2C,KAAKyK,MAAQ,EACbzK,KAAKksC,UAAY,IAAIuuB,GACrBz6D,KAAKkmC,MAAQ,IAAIwxB,GAAM,CACnB7kC,UAAW,EACXC,WAAY,EACZ7hB,WAAY+c,EAAO9V,aACpB6gD,WAAU,GACb/4D,KAAKkmC,MAAM2zB,aAAa75D,KAAK26B,SACjC,CACAud,YACQl4C,KAAKm4C,eAETn4C,KAAKksC,UAAUwuB,WAAW,CAAC16D,KAAKkmC,QAAQy0B,OAAO,CAAC36D,KAAKkmC,OAAQ,GAC7DlmC,KAAKy5B,SAASz5B,KAAKksC,UAAU0uB,oBAC7B56D,KAAKm4C,cAAe,EACxB,CACA1e,SAAShvB,GAEL,OADAzK,KAAKyK,MAAQA,EACNzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAsL,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACLtW,KAAK06B,sBAAsB16B,KAAK26B,SAAUhB,GAC1C35B,KAAK26B,SAAS/lB,SAASsmB,GAAYA,EAAQpkB,WAAW6e,GAAK9f,iBAC/D,ECzDG,MAAMylD,GACT/1D,sBAAsBg2D,GAClB,MAAMC,EAAWD,EAASE,UACpBnpD,EAAQkpD,EAASvlD,QAAQslD,GAC/B,GAAIjpD,EAAQ,EAAIkpD,EAAS51D,OACrB,OAAO41D,EAASlpD,EAAQ,EAChC,CACA7Q,YAAY4sB,GACRruB,KAAKm4C,cAAe,EACpBn4C,KAAKq4C,eAAgB,EACrBr4C,KAAK07D,OAASrtC,GAAWA,EAAQqtC,OAASrtC,EAAQqtC,OAAS,EAC3D17D,KAAK27D,YAAc,IAAIr2D,EAAS,EAAG,GACnCtF,KAAK47D,SAAW,IAAIt2D,EAAS,EAAG,GAChCtF,KAAK67D,iBAAcj4D,EACnB5D,KAAK87D,cAAWl4D,EAChB5D,KAAK+7D,iBAAcn4D,EACnB5D,KAAKw0C,QAAU,EACfx0C,KAAK2D,EAAI,EACT3D,KAAKg8D,MAAQ,EACbh8D,KAAKi8D,QAAU,EACfj8D,KAAK2mC,UAAY,GACjB3mC,KAAKk8D,iBAAmB,CAAC,EAEzBl8D,KAAKg5C,OAAS,EACdh5C,KAAKu8C,QAAU,EACfv8C,KAAK44C,oBAAsB,EAC3B54C,KAAKk5C,qBAAuB,EAC5Bl5C,KAAKg7B,UAAY,EACjBh7B,KAAKi7B,WAAa,EAClBj7B,KAAKm8D,YAAc,EACnBn8D,KAAKo8D,aAAe,EACpBp8D,KAAKy7D,UAAY,GACjBz7D,KAAKyK,MAAQ,EACbzK,KAAKi2C,iBAAmB,CAIpBC,QAAS,CAAE/c,KAAM,EAAGE,MAAO,GAEnC,CACAgjC,YACI,OAAOr8D,KAAK07D,MAChB,CACAzyD,OACI,OAAOjJ,KAAK2D,CAChB,CACA0F,KAAK1F,GAID,OAHA3D,KAAK2D,EAAIA,EACT3D,KAAKg8D,MAAQr4D,EACb3D,KAAKi8D,QAAU,EACRj8D,IACX,CACAs8D,WACI,OAAOt8D,KAAKg8D,KAChB,CACAO,SAASP,GACLh8D,KAAKg8D,MAAQA,EACbh8D,KAAK2D,EAAIq4D,EAAQh8D,KAAKi8D,OAC1B,CACAO,aACI,OAAOx8D,KAAKi8D,OAChB,CACA7gC,WAAW6gC,GACPj8D,KAAKi8D,QAAUA,EACfj8D,KAAK2D,EAAI3D,KAAKg8D,MAAQC,CAC1B,CACArsC,WACI,OAAO5vB,KAAKyK,MAAuB,EAAfzK,KAAKw0C,OAC7B,CACAgJ,WAAWhJ,GAEP,OADAx0C,KAAKw0C,QAAUA,EACRx0C,IACX,CACAy8D,cACI,OAAOz8D,KAAK47D,QAChB,CACAc,cACI,OAAO18D,KAAK87D,QAChB,CACAa,iBACI,OAAO38D,KAAK67D,WAChB,CACAe,iBACI,OAAO58D,KAAK+7D,WAChB,CACA31B,eACI,OAAOpmC,KAAK2mC,SAChB,CAMAk2B,oBAAoBC,GAChB,OAAO98D,KAAKk8D,iBAAiBY,EACjC,CACAC,sBACI,OAAO/8D,KAAKk8D,gBAChB,CACAc,4BACI,OAAOh9D,KAAK2mC,UAAUsV,QAAQ6c,GAAaA,EAASliB,mBACxD,CAEA9lC,aACI,MAAM,MAAErG,EAAK,QAAE8xC,EAAO,OAAEvD,EAAM,oBAAEJ,EAAmB,qBAAEM,EAAoB,UAAEle,EAAS,WAAEC,EAAU,YAAEkhC,EAAW,aAAEC,GAAkBp8D,KACjI,MAAO,CACHyK,QACA8xC,UACAvD,SACAJ,sBACAM,uBACAle,YACAC,aACAkhC,cACAC,eAER,CACAa,iBACI,OAAOj9D,KAAK27D,WAChB,CACAuB,eAAeC,GACXn9D,KAAK27D,YAAcwB,EACnBn9D,KAAKm4C,cAAe,CACxB,CACAyhB,YAAYd,EAAUgE,GAClB,IAAKhE,EACD,MAAM,IAAI31D,EAAa,cAAe,2BAE1C,IAAK21D,EAASzyB,oBAAqB,CAC/B,MAAMjW,EAAQ0oC,EAASvyB,WACnBnW,EAAM9oB,YAAYtH,KAAK47D,YACvB57D,KAAK47D,SAAWxrC,EAAM1oB,QACtB1H,KAAK67D,YAAc/C,IAEF,MAAjB94D,KAAK87D,UAIA1rC,EAAM5oB,SAASxH,KAAK87D,aAHzB97D,KAAK87D,SAAW1rC,EAAM1oB,QACtB1H,KAAK+7D,YAAcjD,EAM3B,CAKA,OAJAA,EAAS9gB,eAAeh4C,MACxBA,KAAK2mC,UAAUlyB,KAAKqkD,GACpB94D,KAAKk8D,iBAAiBY,GAAc,GAAKhE,EACzC94D,KAAKm4C,cAAe,EACbn4C,IACX,CACAk4C,YACI,GAAIl4C,KAAKm4C,aACL,OAAOn4C,KACX,IAAK,IAAI0I,EAAI,EAAGA,EAAI1I,KAAK2mC,UAAU/gC,SAAU8C,EAAG,CAC5C,MAAMowD,EAAW94D,KAAK2mC,UAAUj+B,GAChCowD,EAAS5gB,YACT,MAAM1nC,EAAUsoD,EAAShoD,aAEzB9Q,KAAK44C,oBAAsB3zC,KAAK8E,IAAI/J,KAAK44C,oBAAqBpoC,EAAQooC,qBACtE54C,KAAKk5C,qBAAuBj0C,KAAK8E,IAAI/J,KAAKk5C,qBAAsB1oC,EAAQ0oC,sBAExEl5C,KAAKg5C,OAAS/zC,KAAK8E,IAAI/J,KAAKg5C,OAAQxoC,EAAQwoC,QAE5Ch5C,KAAKu8C,QAAUt3C,KAAK8E,IAAI/J,KAAKu8C,QAAS/rC,EAAQ4+B,YAAc,GAE5DpvC,KAAKg7B,UAAY/1B,KAAK8E,IAAI/J,KAAKg7B,UAAWxqB,EAAQwqB,WAClDh7B,KAAKi7B,WAAah2B,KAAK8E,IAAI/J,KAAKi7B,WAAYzqB,EAAQyqB,YAEpDj7B,KAAKm8D,YAAcl3D,KAAK8E,IAAI/J,KAAKm8D,YAAa3rD,EAAQwqB,UAAYxqB,EAAQooC,qBAC1E54C,KAAKo8D,aAAen3D,KAAK8E,IAAI/J,KAAKo8D,aAAc5rD,EAAQyqB,WAAazqB,EAAQ0oC,sBAE7El5C,KAAKyK,MAAQzK,KAAKg5C,OAASh5C,KAAKm8D,YAAcn8D,KAAKo8D,YACvD,CACA,OAAOp8D,IACX,CACAo4C,aACI,OAAIp4C,KAAKq4C,gBAETr4C,KAAKq4C,eAAgB,GADVr4C,IAGf,CACA02C,sBACI,OAAO12C,KAAKi2C,gBAChB,EC1KG,MAAMmnB,WAAiB1kC,GAEfh3B,sBACP,OAAOG,EAASu7D,QACpB,CACW1Z,wBAEP,OADkB11B,EAAOyU,mBACRrxB,aAAa,sBAClC,CAEA7L,cAAcgnB,EAAWgW,GACrB,IAAKhW,GAAkC,IAArBA,EAAU3mB,OACxB,OAAO,EACX,IAAI6E,EAAQ,EACRimC,EAAcnO,EAAMmO,YACpB9N,EAAaL,EAAMK,WACnBqgB,EAAU,EACd,IAAK,IAAIv6C,EAAI,EAAGA,EAAI6jB,EAAU3mB,SAAU8C,EAAG,CACvC,MAAM20D,EAAW9wC,EAAU7jB,GACrBsqC,EAAY,EAiBlB,GAhBIoqB,GAASE,gBAAgBrnD,QAAQonD,EAASprD,OAAS,IACnDorD,EAAS9oC,SAAWmc,EAAc,GAElC0sB,GAASG,eAAetnD,QAAQonD,EAASprD,OAAS,IAClDorD,EAAS9oC,SAAWqO,EAAa,GAEjCy6B,EAASG,eAAiBH,EAAS9oC,QAAU,EAC7CqO,GAAcy6B,EAASG,cAElBH,EAASG,eAAiBH,EAAS9oC,SAAW,EACnDmc,GAAe2sB,EAASG,cAAgBJ,GAAS1Z,WAGjDj5C,EAAQxF,KAAK8E,IAAIszD,EAASztC,WAAYnlB,GAGtC2yD,GAASK,qBAAqBxnD,QAAQonD,EAASprD,OAAS,EAAG,CAGtCvO,EAAQ25D,EAAS1jC,KAAM,kBAC3BwW,iBAAmB,GAAKktB,EAAShjC,gBAAkB3B,GAASC,SAASK,OAClFuJ,EAAM8N,eAAiB2C,EACvBqqB,EAAS7oC,SAAWyuB,EACpBA,GAAWoa,EAAS/tC,MAAM8E,KAAKhrB,SAG/Bm5B,EAAMhJ,WAAayZ,EACnBqqB,EAAS7oC,SAAWyuB,EACpBA,GAAWoa,EAAS/tC,MAAM8E,KAAKhrB,OAEvC,MAEQi0D,EAAShjC,gBAAkB3B,GAASC,SAASK,OAC7CqkC,EAAS9iC,YAAYgI,EAAM8N,eAC3B9N,EAAM8N,eAAiB2C,IAGvBqqB,EAAS9iC,YAAYgI,EAAMhJ,WAC3BgJ,EAAMhJ,WAAayZ,EAG/B,CAKA,OAFAzQ,EAAMK,WAAaA,EAAan4B,EAAQ,EACxC83B,EAAMmO,YAAcA,EAAcjmC,EAAQ,GACnC,CACX,CAKWizD,oCACP,MAAO,CAAC,OAAQ,WAAY,QAChC,CAKWH,4BACP,MAAO,CAAC,QACZ,CAKWI,uCACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,OAAQ,gBAAiB,cAAe,QAC5F,CAKWL,6BACP,MAAO,CAAC,OAAQ,OAAQ,WAAY,WAAY,WAAY,QAAS,OACzE,CAEWG,kCACP,MAAO,CAAC,OAAQ,gBAAiB,cACrC,CAKA3sD,aACI,MAAM8sD,EAAkB5vC,EAAOyU,mBAAmB3xB,aAAausD,SAC/D,IAAKO,EACD,MAAM,IAAIz6D,EAAa,aAAc,oBACzC,OAAOy6D,EAAgB59D,KAAKq9D,SAASh6D,KACzC,CAKA5B,YAAYwQ,GACR1O,QACAvD,KAAKiS,KAAOA,EACZjS,KAAK69D,SAAU,EACf79D,KAAKynC,eAAiB,CAClBC,WAAY,GACZo2B,uBAAwB,EACxBC,uBAAwB,GAE5B/9D,KAAKq9D,SAAWrvC,EAAOgwC,cAAch+D,KAAKiS,MAI1C,MAAMzB,EAAUxQ,KAAK8Q,aAQrB,GANA9Q,KAAKi+D,wBAAyB,EAG9Bj+D,KAAKw9D,cAAgBhtD,GAAWA,EAAQgtD,cAAgBhtD,EAAQgtD,cAAgB,EAChFx9D,KAAKk+D,cAAgB1tD,GAAWA,EAAQ0tD,cAAgB1tD,EAAQ0tD,cAAgB,EAChFl+D,KAAK29D,0BAA4BP,GAASO,0BAA0B1nD,QAAQjW,KAAKiS,OAAS,GACrFjS,KAAKq9D,SACN,MAAM,IAAIl6D,EAAa,gBAAiB,wBAAwBnD,KAAKiS,SAEzEjS,KAAKu0B,QAAU/jB,EAAUA,EAAQyrD,QAAU,EAC3Cj8D,KAAKw0B,QAAUhkB,EAAUA,EAAQyyC,QAAU,EAC3CjjD,KAAKsvB,MAAQ,IAAIG,EAAMzvB,KAAKq9D,SAASh6D,KAAMrD,KAAKynC,eAAeC,WAAY,CACvEpmC,SAAU,YAAYtB,KAAKq9D,SAASh6D,SAGpC+5D,GAASM,uBAAuBznD,QAAQjW,KAAKiS,OAAS,IACtDjS,KAAK69D,SAAU,GAIdrtD,GACDxQ,KAAKsvB,MAAMyI,UAAU,GAAK,EAElC,CAEAomC,WAAWN,GAEP,OADA79D,KAAK69D,QAAUA,EACR79D,IACX,CAEAo+D,mBAAmBC,GACf,MAAMhvC,EAAQrvB,KAAKynC,eAAeC,WAAa,IAG/C,OAFA1nC,KAAKs+D,gBAAkB,IAAI7uC,EAAMzB,EAAO6Z,gBAAgBw2B,GAAOh7D,KAAMgsB,GACrErvB,KAAKs+D,gBAAgBvmC,UAAU,GAAK,GAC7B/3B,IACX,CAEAu+D,mBAAmBF,GACf,MAAMhvC,EAAQrvB,KAAKynC,eAAeC,WAAa,IAG/C,OAFA1nC,KAAKw+D,gBAAkB,IAAI/uC,EAAMzB,EAAO6Z,gBAAgBw2B,GAAOh7D,KAAMgsB,GACrErvB,KAAKw+D,gBAAgBzmC,UAAU,GAAK,GAC7B/3B,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAMmoD,EAAU9kC,EAAK8V,mBACfrY,EAAQuC,EAAKxB,aACnBn4B,KAAK8U,aACL6gB,EAAI0V,UAAU,WAAYrrC,KAAK6S,aAAa,OAE5C,MAAM6rD,EAAc/kC,EAAK6X,YAAYrH,aACrC,IAAIrhC,EAAI21D,IAAYj2B,GAAKE,KAAOg2B,EAAY/zB,MAAQ+zB,EAAYh0B,KAE5DznC,EAAU02B,KACNA,EAAK6V,UACDivB,IAAYj2B,GAAKE,OACjB5/B,EAAIsuB,EAAMua,eAAe3xC,KAAKu5B,YAKlCzwB,EAAIsuB,EAAMua,eAAe3xC,KAAKu5B,YAGtC,MAAMolC,EAAyBF,IAAYj2B,GAAKE,KAC1C4I,EAAUla,EAAMkM,yBACtB,IAAI8sB,EAAc,GAEbuO,GAA0BhlC,EAAKmiB,YAChCsU,GAAe,IAEnB,MACMwO,EAAqB91D,EADNwoC,GAAWtxC,KAAKu5B,UAAY62B,GAG3ChoB,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,OAC1D,IAAIusD,EAASz2B,EAAMzkC,EAGfm7D,EAAS9+D,KAAK29D,0BACZv1B,EAAMt/B,EACN7D,KAAKulC,IAAIpT,EAAMua,eAAe3xC,KAAKu5B,WAAYqlC,GAGrD,GAFAE,GAAU9+D,KAAKw0B,QAEXx0B,KAAK69D,QAAS,CACd,IAAIkB,EAAc,EAClB,MAAMC,EAASH,GAAUznC,EAAMnuB,OAAS,IACxC,QAAyBrF,IAArB5D,KAAK++D,YACLA,EAAc/+D,KAAK++D,gBAElB,CACDA,GAAe/+D,KAAKsvB,MAAMxe,aAAarG,MAAQ,EAC/C,MAAMw0D,EAAc3D,GAAY4D,eAAevlC,EAAKkB,kBAEhDkkC,GADAE,EAC+C,IAA/BA,EAAYh2D,OAAS+1D,GAGuB,IAA5C5nC,EAAMnuB,OAASmuB,EAAMxH,WAAaovC,GAEtDh/D,KAAK++D,YAAcA,CACvB,CACAF,GAAUE,CACd,EApPR,YAAch7D,GACNq5D,GAAS96B,OACTz+B,EAAI,oBAAqBE,EACjC,CAkPQ,CAAE,uBAAwB/D,KAAKq9D,SAAUwB,EAAQC,GAC7C9+D,KAAKw+D,kBACLx+D,KAAKw+D,gBAAgBxmC,OAAOrC,EAAKkpC,EAAQC,GACzCA,GAAU9+D,KAAKw+D,gBAAgB1tD,aAAapG,OAC5Co0D,GAAU9+D,KAAKynC,eAAeq2B,wBAE9B99D,KAAKk+D,eAAiBvkC,EAAK6V,WAAyC,IAA5B7V,EAAK8V,qBAC7CqvB,GAAU9+D,KAAKk+D,eAEfvkC,EAAKwW,gBAAkB,GAAKitB,GAASM,uBAAuBznD,QAAQjW,KAAKiS,OAAS,IAClF6sD,EAASnlC,EAAKxB,aAAavhB,iBAAiB1N,OAAS,IAEzDlJ,KAAKsvB,MAAM0I,OAAOrC,EAAKkpC,EAAS7+D,KAAKu0B,QAASuqC,GAC1C9+D,KAAKs+D,kBACLQ,GAAU9+D,KAAKsvB,MAAMxe,aAAapG,OAAS1K,KAAKynC,eAAes2B,uBAC/D/9D,KAAKs+D,gBAAgBtmC,OAAOrC,EAAKkpC,EAAQC,IAE7CnpC,EAAI4V,aACJvrC,KAAK2V,cACT,EAGJynD,GAAS96B,OAAQ,EC9QV,MAAM68B,WAAoBzmC,GAClBh3B,sBACP,OAAOG,EAASs9D,WACpB,CAEA55D,sBAAsByqB,GAClB,IAAK,MAAM2J,KAAQ3J,EACf,IAAK,IAAItnB,EAAI,EAAGA,EAAIixB,EAAKrmB,KAAK1N,OAAQ8C,IAClCixB,EAAK4N,YAAY,IAAI43B,GAAYprC,EAAiBqF,MAAO1wB,GACzDixB,EAAK4N,YAAY,IAAI43B,GAAYprC,EAAiBuF,OAAQ5wB,EAGtE,CAEAnD,cAAc65D,EAAa78B,GACvB,IAAK68B,GAAsC,IAAvBA,EAAYx5D,OAC5B,OAAO,EACX,IAAIy5D,EAAW,EACXC,EAAW,EACf,IAAK,IAAI52D,EAAI,EAAGA,EAAI02D,EAAYx5D,SAAU8C,EAAG,CACzC,MAAM62D,EAAcH,EAAY12D,GAC1BixB,EAAO4lC,EAAY7lC,UACnB8wB,EAAM+U,EAAYllC,cAClB/nB,EAAQitD,EAAYxlC,aAC1B,IAAIj0B,EAAQ,EACR0kD,IAAQz2B,EAAiBuF,QACzBxzB,EAAQ6zB,EAAKuiB,sBAAsB5pC,GACnCgtD,EAAWA,EAAWx5D,EAAQy5D,EAAY90D,MAAQ60D,EAAWx5D,EAAQy5D,EAAY90D,OAEjF+/C,IAAQz2B,EAAiBqF,OACzBtzB,EAAQ6zB,EAAKwiB,qBAAqB7pC,GAClC+sD,EAAWA,EAAWv5D,EAAQy5D,EAAY90D,MAAQ40D,EAAWv5D,EAAQy5D,EAAY90D,OAErF80D,EAAYjoC,UAAUxxB,EAC1B,CAGA,OAFAy8B,EAAMK,YAAcy8B,EACpB98B,EAAMmO,aAAe4uB,GACd,CACX,CAMA79D,YAAY+xB,GACRjwB,QACAvD,KAAKwzB,SAAWA,QAA2CA,EAAWkF,GAASC,SAASS,KACxFp5B,KAAKk0B,MAAQlG,EAAOyU,mBAAmBrxB,aAAa,6BACpDpR,KAAKy5B,SAASzL,EAAOyU,mBAAmBrxB,aAAa,6BACzD,CAEAyoB,QAAQF,GAQJ,OAPA35B,KAAK25B,KAAOA,EACZ35B,KAAKk0B,MAAQlG,EAAOyU,mBAAmBrxB,aAAa,6BACpDpR,KAAKy5B,SAASzL,EAAOyU,mBAAmBrxB,aAAa,8BACjD/O,EAAYs3B,KACZ35B,KAAKk0B,MAAQlG,EAAOyU,mBAAmBrxB,aAAa,+BACpDpR,KAAKy5B,SAASzL,EAAOyU,mBAAmBrxB,aAAa,iCAElDpR,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAM8xB,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,MAAO,CAAE23C,gBAAgB,IAC7EtmD,EAAIykC,EAAMzkC,EAAI3D,KAAKu0B,QACnBzrB,EAAIs/B,EAAMt/B,EAAI9I,KAAKw0B,QACrBx0B,KAAKwzB,UAAYkF,GAASC,SAASW,MACnC7J,EAAM49B,YAAY13B,EAAKhyB,EAAI,EAAGmF,EAAG9I,KAAKk0B,MAAO,2BAA4B,CACrE5yB,SAAU,+CAGTtB,KAAKwzB,UAAYkF,GAASC,SAASS,MACxC3J,EAAM49B,YAAY13B,EAAKhyB,EAAI,EAAGmF,EAAG9I,KAAKk0B,MAAO,0BAA2B,CACpE5yB,SAAU,6CAGtB,EC/EG,SAASk+D,GAAa9oD,GACzB,IAAKA,EACD,OAAO,EACX,MAAM8rC,EAASh/C,IACf,MAEqC,mBAA7Bg/C,EAAOid,mBAAoC/oD,aAAmB8rC,EAAOid,mBAG1C,mBAAvB/oD,EAAQG,YAA0D,mBAAtBH,EAAQgpD,SACpE,CAEO,SAASC,GAAUjpD,GACtB,IAAKA,EACD,OAAO,EACX,MAAM8rC,EAASh/C,IACf,MAEkC,mBAA1Bg/C,EAAOod,gBAAiClpD,aAAmB8rC,EAAOod,gBAEtC,mBAAxBlpD,EAAQmpD,aAAuD,iBAAlBnpD,EAAQpI,KACrE,CCnBO,MAAMwxD,WAAsBl9D,GACpB+lC,mBACP,OAAO,GACX,CACWC,oBACP,OAAO,GACX,CACWm3B,uCACP,OAAO,KACX,CAKAx6D,0BAA0BkF,EAAOC,GAC7B,MAAMs1D,EAAQhgE,KAAK+/D,0BAUnB,OATI96D,KAAK8E,IAAIU,EAAOC,GAAUs1D,IAC1B37D,EAAK,uDAAyD27D,GAC1Dv1D,EAAQu1D,IACRv1D,EAAQu1D,GAERt1D,EAASs1D,IACTt1D,EAASs1D,IAGV,CAACv1D,EAAOC,EACnB,CACAjJ,YAAYsT,GACRxR,QAEAvD,KAAKyqD,WAAa,EAClBzqD,KAAKigE,UAAYlrD,EACZA,EAAQmrD,OAOTlgE,KAAKkgE,OAASnrD,EAAQmrD,OANtBlgE,KAAKkgE,OAAS,CACVz1D,MAAOq1D,GAAcn3B,MACrBj+B,OAAQo1D,GAAcl3B,OAMlC,CAIAr2B,QACIvS,KAAKigE,UAAUE,UAAU,EAAG,EAAGngE,KAAKkgE,OAAOz1D,MAAOzK,KAAKkgE,OAAOx1D,OAClE,CAEA2gC,UAAU+0B,EAAKpuD,EAAIkC,GAEnB,CACAq3B,aAEA,CAEAhlC,IAAIiO,GAEJ,CACAc,aAAahH,GAET,OADAtO,KAAKigE,UAAU5qD,UAAY/G,EACpBtO,IACX,CAGAqgE,uBAAuB/xD,GAEnB,OAAOtO,IACX,CACAwV,eAAelH,GAEX,OADAtO,KAAKigE,UAAU1qD,YAAcjH,EACtBtO,IACX,CACAkV,eAAekgC,GAEX,OADAp1C,KAAKigE,UAAUhrD,YAAcmgC,EACtBp1C,IACX,CACAoV,cAAckrD,GAKV,MAAM56D,EAAI1F,KAAKigE,UAAUM,eACnBlxC,EAAQpqB,KAAKmH,KAAK1G,EAAEjB,EAAIiB,EAAEjB,EAAIiB,EAAEhB,EAAIgB,EAAEhB,EAAIgB,EAAEuG,EAAIvG,EAAEuG,EAAIvG,EAAEW,EAAIX,EAAEW,GAEpE,OADArG,KAAKigE,UAAU9qD,WAAaka,EAAQixC,EAC7BtgE,IACX,CACA0V,aAAajL,GAET,OADAzK,KAAKigE,UAAUxqD,UAAYhL,EACpBzK,IACX,CACAwgE,WAAWC,GAEP,OADAzgE,KAAKigE,UAAUS,QAAUD,EAClBzgE,IACX,CACA2gE,YAAYC,GAER,OADA5gE,KAAKigE,UAAUU,YAAYC,GACpB5gE,IACX,CACAqvB,MAAM1rB,EAAGmF,GAEL,OADA9I,KAAKigE,UAAU5wC,MAAM1rB,EAAGmF,GACjB9I,IACX,CACA6gE,OAAOp2D,EAAOC,GACV,MAAMw1D,EAASlgE,KAAKigE,UAAUC,OACxBY,EAAmBt9D,IAAes9D,kBAAoB,EAc5D,OAZCr2D,EAAOC,GAAUo1D,GAAciB,mBAAmBt2D,EAAQq2D,EAAkBp2D,EAASo2D,GAEtFr2D,EAASA,EAAQq2D,EAAoB,EACrCp2D,EAAUA,EAASo2D,EAAoB,EACvCZ,EAAOz1D,MAAQA,EAAQq2D,EACvBZ,EAAOx1D,OAASA,EAASo2D,EAGrBtB,GAAaU,KACbA,EAAO5xD,MAAM7D,MAAQA,EAAQ,KAC7By1D,EAAO5xD,MAAM5D,OAASA,EAAS,MAE5B1K,KAAKqvB,MAAMyxC,EAAkBA,EACxC,CACAE,KAAKr9D,EAAGmF,EAAG2B,EAAOC,GAEd,OADA1K,KAAKigE,UAAUe,KAAKr9D,EAAGmF,EAAG2B,EAAOC,GAC1B1K,IACX,CACA8/C,SAASn8C,EAAGmF,EAAG2B,EAAOC,GAElB,OADA1K,KAAKigE,UAAUngB,SAASn8C,EAAGmF,EAAG2B,EAAOC,GAC9B1K,IACX,CAIAmgE,UAAUx8D,EAAGmF,EAAG2B,EAAOC,GAEnB,OADA1K,KAAKigE,UAAUE,UAAUx8D,EAAGmF,EAAG2B,EAAOC,GAC/B1K,IACX,CACAm2B,YAEI,OADAn2B,KAAKigE,UAAU9pC,YACRn2B,IACX,CACAo2B,OAAOzyB,EAAGmF,GAEN,OADA9I,KAAKigE,UAAU7pC,OAAOzyB,EAAGmF,GAClB9I,IACX,CACAq2B,OAAO1yB,EAAGmF,GAEN,OADA9I,KAAKigE,UAAU5pC,OAAO1yB,EAAGmF,GAClB9I,IACX,CACAu2B,cAAc0qC,EAAMC,EAAMC,EAAMC,EAAMz9D,EAAGmF,GAErC,OADA9I,KAAKigE,UAAU1pC,cAAc0qC,EAAMC,EAAMC,EAAMC,EAAMz9D,EAAGmF,GACjD9I,IACX,CACAs2B,iBAAiB+qC,EAAKC,EAAK39D,EAAGmF,GAE1B,OADA9I,KAAKigE,UAAU3pC,iBAAiB+qC,EAAKC,EAAK39D,EAAGmF,GACtC9I,IACX,CACAq1C,IAAI1xC,EAAGmF,EAAGkhD,EAAQuX,EAAYC,EAAUC,GAEpC,OADAzhE,KAAKigE,UAAU5qB,IAAI1xC,EAAGmF,EAAGkhD,EAAQuX,EAAYC,EAAUC,GAChDzhE,IACX,CACAw2B,OAEI,OADAx2B,KAAKigE,UAAUzpC,OACRx2B,IACX,CACA4uB,SAEI,OADA5uB,KAAKigE,UAAUrxC,SACR5uB,IACX,CACAs1C,YAEI,OADAt1C,KAAKigE,UAAU3qB,YACRt1C,IACX,CACAkiD,YAAYn9C,GACR,MAAMyL,EAAUxQ,KAAKigE,UAAU/d,YAAYn9C,GAC3C,IAAI+D,EAAI,EACJ4B,EAAS,EAUb,OATI8F,EAAQkxD,uBACR54D,GAAK0H,EAAQkxD,sBACbh3D,EAAS8F,EAAQmxD,uBAAyBnxD,EAAQkxD,wBAGlD54D,GAAK0H,EAAQoxD,wBACbl3D,EAAS8F,EAAQqxD,yBAA2BrxD,EAAQoxD,yBAGjD,CACHj+D,EAAG,EACHmF,EAAGA,EACH2B,MAAO+F,EAAQ/F,MACfC,OAAQA,EAEhB,CACAsnC,SAASjtC,EAAMpB,EAAGmF,GAEd,OADA9I,KAAKigE,UAAUjuB,SAASjtC,EAAMpB,EAAGmF,GAC1B9I,IACX,CACAgV,OAEI,OADAhV,KAAKigE,UAAUjrD,OACRhV,IACX,CACA4V,UAEI,OADA5V,KAAKigE,UAAUrqD,UACR5V,IACX,CACIqV,cAAU/G,GACVtO,KAAKigE,UAAU5qD,UAAY/G,CAC/B,CACI+G,gBACA,OAAOrV,KAAKigE,UAAU5qD,SAC1B,CACIE,gBAAYjH,GACZtO,KAAKigE,UAAU1qD,YAAcjH,CACjC,CACIiH,kBACA,OAAOvV,KAAKigE,UAAU1qD,WAC1B,CASAwB,QAAQxO,EAAG6F,EAAMC,EAAQC,GACrB,MAAMY,EAAWxB,EAAK+J,SAASlP,EAAG6F,EAAMC,EAAQC,GAGhD,OAFAtO,KAAKigE,UAAUnxD,KAAOpB,EAAKsJ,YAAY9H,GACvClP,KAAKyqD,WAAa/8C,EAAKuK,wBAAwB/I,EAASd,MACjDpO,IACX,CAEA0X,UACI,OAAO1X,KAAKigE,UAAUnxD,IAC1B,EC3OJ,MAAMgzD,GAAuB,CACzBC,KAAM,CACFp+D,GAAG,EACHmF,GAAG,EACH2B,OAAO,EACPC,QAAQ,EACR,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjBs2D,KAAM,CACF,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,GAEjBj8D,KAAM,CACF0F,OAAO,EACPC,QAAQ,IAIVs3D,GAAS,6BACTC,GAAS,EAAIh9D,KAAKC,GAmDjB,MAAMg9D,WAAmBt/D,GAC5BnB,YAAYiV,GACRnT,QACAvD,KAAKyK,MAAQ,EACbzK,KAAK0K,OAAS,EACd1K,KAAK60B,UAAY,EACjB70B,KAAKmiE,oBAAsB,QAE3BniE,KAAKoiE,cAAgB,GACrBpiE,KAAK0W,QAAUA,EACf1W,KAAK60B,UAAY5vB,KAAK+G,IAAI,GAAIgiB,EAAO8C,yBAErC,MAAMuxC,EAAMriE,KAAKkvC,OAAO,OACxBlvC,KAAK0W,QAAQmpD,YAAYwC,GACzBriE,KAAKqiE,IAAMA,EACXriE,KAAKsiE,OAAStiE,KAAKqiE,IACnBriE,KAAKo7D,OAAS,CAACp7D,KAAKqiE,KACpBriE,KAAK+hE,KAAO,GACZ/hE,KAAKuiE,IAAM,CAAE5+D,EAAGwG,IAAKrB,EAAGqB,KACxBnK,KAAKyV,UAAY,EACjB,MAAM+sD,EAAwB,CAC1B,cAAe90D,EAAKe,WACpB,YAAaf,EAAKE,KAAO,KACzB,cAAetB,EAAWoC,OAC1B,aAAcnC,EAAUmC,QAE5B1O,KAAKuiC,MAAQliC,OAAOmX,OAAO,CAAEirD,OAAQ,EAAGC,OAAQ,GAAKF,GACrDxiE,KAAK2iE,WAAatiE,OAAOmX,OAAO,CAAE,eAAgB,GAAK,mBAAoB,OAAQgf,KAAM,QAAS5H,OAAQ,SAAW4zC,GACrHxiE,KAAK4iE,gBAAkB,GACvB5iE,KAAK6iE,gBAAgBR,EAAKriE,KAAK2iE,YAC/B3iE,KAAK4iE,gBAAgBnuD,KAAKpU,OAAOmX,OAAO,CAAC,EAAGxX,KAAK2iE,aACjD3iE,KAAK8iE,kBAAoB,CACrBr4D,MAAO,EACP2qC,MAAO,SAEXp1C,KAAK+iE,YAAc,EACvB,CACAjuC,MAAMlwB,GACF,OAAOK,KAAK6vB,MAAMlwB,EAAI5E,KAAK60B,WAAa70B,KAAK60B,SACjD,CACAqa,OAAO8zB,GACH,OAAOp0D,SAASq0D,gBAAgBjB,GAAQgB,EAC5C,CAEA33B,UAAU+0B,EAAKpuD,EAAIkC,GACf,MAAMmnD,EAAQr7D,KAAKkvC,OAAO,KAa1B,OAZAlvC,KAAKo7D,OAAO3mD,KAAK4mD,GACjBr7D,KAAKsiE,OAAOzC,YAAYxE,GACxBr7D,KAAKsiE,OAASjH,EACV+E,GACA/E,EAAMtoD,aAAa,QAASjO,EAAOs7D,IACnCpuD,GACAqpD,EAAMtoD,aAAa,KAAMjO,EAAOkN,IAChCkC,GAASA,EAAMo3B,aACf+vB,EAAMtoD,aAAa,iBAAkB,gBAEzC/S,KAAK6iE,gBAAgBxH,EAAOr7D,KAAK2iE,YACjC3iE,KAAK4iE,gBAAgBnuD,KAAKpU,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK4iE,gBAAgB5iE,KAAK4iE,gBAAgBh9D,OAAS,IAAK5F,KAAK2iE,aAChHtH,CACX,CACA9vB,aACIvrC,KAAKo7D,OAAOzjB,MACZ33C,KAAK4iE,gBAAgBjrB,MACrB33C,KAAKsiE,OAAStiE,KAAKo7D,OAAOp7D,KAAKo7D,OAAOx1D,OAAS,EACnD,CACAW,IAAIkM,GACAzS,KAAKsiE,OAAOzC,YAAYptD,EAC5B,CACA6C,aAAahH,GAET,OADAtO,KAAK2iE,WAAWnsC,KAAOloB,EAChBtO,IACX,CAKAqgE,uBAAuB/xD,GAEnB,OADAtO,KAAKmiE,oBAAsB7zD,EACpBtO,IACX,CACAwV,eAAelH,GAEX,OADAtO,KAAK2iE,WAAW/zC,OAAStgB,EAClBtO,IACX,CACAkV,eAAekgC,GAEX,OADAp1C,KAAK8iE,kBAAkB1tB,MAAQA,EACxBp1C,IACX,CAMAoV,cAAckrD,GAEV,OADAtgE,KAAK8iE,kBAAkBr4D,MAAQ61D,EACxBtgE,IACX,CAKA0V,aAAajL,GAGT,OAFAzK,KAAK2iE,WAAW,gBAAkBl4D,EAClCzK,KAAKyV,UAAYhL,EACVzK,IACX,CAOA2gE,YAAYuC,GACR,GAAiD,mBAA7C7iE,OAAOS,UAAUmH,SAASjH,KAAKkiE,GAE/B,OADAljE,KAAK2iE,WAAW,oBAAsBO,EAAS/+D,KAAK,KAC7CnE,KAGP,MAAM,IAAImD,EAAa,gBAAiB,yCAEhD,CAKAq9D,WAAWC,GAEP,OADAzgE,KAAK2iE,WAAW,kBAAoBlC,EAC7BzgE,IACX,CAMA6gE,OAAOp2D,EAAOC,GACV1K,KAAKyK,MAAQA,EACbzK,KAAK0K,OAASA,EACd1K,KAAK0W,QAAQpI,MAAM7D,MAAQA,EAAMxC,WACjCjI,KAAKqiE,IAAI/zD,MAAM7D,MAAQA,EAAMxC,WAC7BjI,KAAKqiE,IAAI/zD,MAAM5D,OAASA,EAAOzC,WAC/B,MAAM06D,EAAa,CACfl4D,QACAC,UAIJ,OAFA1K,KAAK6iE,gBAAgB7iE,KAAKqiE,IAAKM,GAC/B3iE,KAAKqvB,MAAMrvB,KAAKuiC,MAAMkgC,OAAQziE,KAAKuiC,MAAMmgC,QAClC1iE,IACX,CACAqvB,MAAM1rB,EAAGmF,GAYL9I,KAAKuiC,MAAMkgC,OAASziE,KAAKuiC,MAAMkgC,OAASziE,KAAKuiC,MAAMkgC,OAAS9+D,EAAIA,EAChE3D,KAAKuiC,MAAMmgC,OAAS1iE,KAAKuiC,MAAMmgC,OAAS1iE,KAAKuiC,MAAMmgC,OAAS55D,EAAIA,EAChE,MAAMq6D,EAAenjE,KAAKyK,MAAQzK,KAAKuiC,MAAMkgC,OACvCW,EAAgBpjE,KAAK0K,OAAS1K,KAAKuiC,MAAMmgC,OAE/C,OADA1iE,KAAKqjE,WAAW,EAAG,EAAGF,EAAcC,GAC7BpjE,IACX,CAKAqjE,WAAWC,EAAiB7R,EAAMhnD,EAAOC,GACrC,GAA+B,iBAApB44D,EACPtjE,KAAKqiE,IAAItvD,aAAa,UAAWuwD,OAEhC,CACD,MAAMC,EAAgBD,EAAkB,IAAM7R,EAAO,IAAMhnD,EAAQ,IAAMC,EACzE1K,KAAKqiE,IAAItvD,aAAa,UAAWwwD,EACrC,CACJ,CAEAV,gBAAgBnsD,EAASisD,GACrB,MAAMa,EAAoB1B,GAAqBprD,EAAQ+sD,UACvD,IAAK,MAAMC,KAAYf,EACfa,GAAqBA,EAAkBE,KAGvCf,EAAWe,IACqB,GAA/B1jE,KAAK4iE,gBAAgBh9D,QAClB+8D,EAAWe,IAAa1jE,KAAK4iE,gBAAgB5iE,KAAK4iE,gBAAgBh9D,OAAS,GAAG89D,IAClFhtD,EAAQitD,eAAe,KAAMD,EAAUf,EAAWe,IAE1D,OAAOhtD,CACX,CAEAnE,QASI,KAAOvS,KAAKqiE,IAAIuB,WACZ5jE,KAAKqiE,IAAIwB,YAAY7jE,KAAKqiE,IAAIuB,WAGlC5jE,KAAKqvB,MAAMrvB,KAAKuiC,MAAMkgC,OAAQziE,KAAKuiC,MAAMmgC,OAC7C,CAEA1B,KAAKr9D,EAAGmF,EAAG2B,EAAOC,EAAQi4D,GAElBj4D,EAAS,IACT5B,GAAK4B,EACLA,IAAW,GAEf,MAAMo5D,EAAY9jE,KAAKkvC,OAAO,QAQ9B,OAPAyzB,EAAaA,QAA+CA,EAAa,CAAEnsC,KAAM,OAAQ,eAAgBx2B,KAAKyV,UAAWmZ,OAAQ,SACjIjrB,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACf2B,EAAQzK,KAAK80B,MAAMrqB,GACnBC,EAAS1K,KAAK80B,MAAMpqB,GACpB1K,KAAK6iE,gBAAgBiB,EAAWzjE,OAAOmX,OAAO,CAAE7T,IAAGmF,IAAG2B,QAAOC,UAAUi4D,IACvE3iE,KAAKuG,IAAIu9D,GACF9jE,IACX,CACA8/C,SAASn8C,EAAGmF,EAAG2B,EAAOC,GAClB,MAAMi4D,EAAa,CAAEnsC,KAAMx2B,KAAK2iE,WAAWnsC,KAAM5H,OAAQ,QAEzD,OADA5uB,KAAKghE,KAAKr9D,EAAGmF,EAAG2B,EAAOC,EAAQi4D,GACxB3iE,IACX,CACAmgE,UAAUx8D,EAAGmF,EAAG2B,EAAOC,GAQnB,OADA1K,KAAKghE,KAAKr9D,EAAGmF,EAAG2B,EAAOC,EAAQ,CAAE8rB,KAAMx2B,KAAKmiE,oBAAqBvzC,OAAQ,SAClE5uB,IACX,CAEAm2B,YAII,OAHAn2B,KAAK+hE,KAAO,GACZ/hE,KAAKuiE,IAAI5+D,EAAIwG,IACbnK,KAAKuiE,IAAIz5D,EAAIqB,IACNnK,IACX,CACAo2B,OAAOzyB,EAAGmF,GAMN,OALAnF,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACf9I,KAAK+hE,MAAQ,IAAMp+D,EAAI,IAAMmF,EAC7B9I,KAAKuiE,IAAI5+D,EAAIA,EACb3D,KAAKuiE,IAAIz5D,EAAIA,EACN9I,IACX,CACAq2B,OAAO1yB,EAAGmF,GAMN,OALAnF,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACf9I,KAAK+hE,MAAQ,IAAMp+D,EAAI,IAAMmF,EAC7B9I,KAAKuiE,IAAI5+D,EAAIA,EACb3D,KAAKuiE,IAAIz5D,EAAIA,EACN9I,IACX,CACAu2B,cAAcrsB,EAAIE,EAAIC,EAAIC,EAAI3G,EAAGmF,GAU7B,OATAnF,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACfoB,EAAKlK,KAAK80B,MAAM5qB,GAChBE,EAAKpK,KAAK80B,MAAM1qB,GAChBC,EAAKrK,KAAK80B,MAAMzqB,GAChBC,EAAKtK,KAAK80B,MAAMxqB,GAChBtK,KAAK+hE,MAAQ,IAAM73D,EAAK,IAAME,EAAK,IAAMC,EAAK,IAAMC,EAAK,IAAM3G,EAAI,IAAMmF,EACzE9I,KAAKuiE,IAAI5+D,EAAIA,EACb3D,KAAKuiE,IAAIz5D,EAAIA,EACN9I,IACX,CACAs2B,iBAAiBpsB,EAAIE,EAAIzG,EAAGmF,GAQxB,OAPAnF,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACfoB,EAAKlK,KAAK80B,MAAM5qB,GAChBE,EAAKpK,KAAK80B,MAAM1qB,GAChBpK,KAAK+hE,MAAQ,IAAM73D,EAAK,IAAME,EAAK,IAAMzG,EAAI,IAAMmF,EACnD9I,KAAKuiE,IAAI5+D,EAAIA,EACb3D,KAAKuiE,IAAIz5D,EAAIA,EACN9I,IACX,CACAq1C,IAAI1xC,EAAGmF,EAAGkhD,EAAQuX,EAAYC,EAAUC,GACpC,IAAIsC,EAAKpgE,EAAIqmD,EAAS/kD,KAAK++D,IAAIzC,GAC3B0C,EAAKn7D,EAAIkhD,EAAS/kD,KAAKi/D,IAAI3C,GAC/BwC,EAAK/jE,KAAK80B,MAAMivC,GAChBE,EAAKjkE,KAAK80B,MAAMmvC,GAGhB,MAAME,EAAen/D,EAAeu8D,GAC9B6C,EAAap/D,EAAew8D,GAClC,IAAMC,GAAoBD,EAAWD,GAAcU,IAC9CR,GAAoBF,EAAaC,GAAYS,IAC9CkC,IAAiBC,EAAY,CAC7B,IAAIl6D,EAAKvG,EAAIqmD,EAAS/kD,KAAK++D,IAAIzC,EAAat8D,KAAKC,IAC7CkF,EAAKtB,EAAIkhD,EAAS/kD,KAAKi/D,IAAI3C,EAAat8D,KAAKC,IAGjDgF,EAAKlK,KAAK80B,MAAM5qB,GAChBE,EAAKpK,KAAK80B,MAAM1qB,GAChB4/C,EAAShqD,KAAK80B,MAAMk1B,GACpBhqD,KAAK+hE,MAAQ,IAAIgC,KAAME,MAAOja,KAAUA,WAAgB9/C,KAAME,KAC9DpK,KAAK+hE,MAAQ,IAAI/X,KAAUA,WAAgB+Z,KAAME,IACjDjkE,KAAKuiE,IAAI5+D,EAAIogE,EACb/jE,KAAKuiE,IAAIz5D,EAAIm7D,CACjB,KACK,CACD,IAIII,EAJAn6D,EAAKvG,EAAIqmD,EAAS/kD,KAAK++D,IAAIxC,GAC3Bp3D,EAAKtB,EAAIkhD,EAAS/kD,KAAKi/D,IAAI1C,GAC/BD,EAAa4C,EACb3C,EAAW4C,EAGPC,EADAp/D,KAAK+C,IAAIw5D,EAAWD,GAAct8D,KAAKC,GAC/Bu8D,GAGCA,EAETF,EAAaC,IACb6C,GAASA,GAEb,MAAMC,GAAS7C,EACfv3D,EAAKlK,KAAK80B,MAAM5qB,GAChBE,EAAKpK,KAAK80B,MAAM1qB,GAChB4/C,EAAShqD,KAAK80B,MAAMk1B,GACpBhqD,KAAK+hE,MAAQ,IAAIgC,KAAME,MAAOja,KAAUA,QAAaqa,MAAUC,KAASp6D,KAAME,IAC9EpK,KAAKuiE,IAAI5+D,EAAIuG,EACblK,KAAKuiE,IAAIz5D,EAAIsB,CACjB,CACA,OAAOpK,IACX,CACAs1C,YAEI,OADAt1C,KAAK+hE,MAAQ,IACN/hE,IACX,CACAukE,iBACI,MAAMC,EAAKxkE,KAAK8iE,kBAIhB,MAAO,2BAA2B0B,EAAG/5D,MAAQ,SAAS+5D,EAAGpvB,QAC7D,CACA5e,KAAKmsC,GACD,MAAMZ,EAAO/hE,KAAKkvC,OAAO,QAUzB,YAT0B,IAAfyzB,IACPA,EAAatiE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK2iE,YAAa,CAAE/zC,OAAQ,UAE7E+zC,EAAWt8D,EAAIrG,KAAK+hE,KAChB/hE,KAAK8iE,kBAAkBr4D,MAAQ,IAC/Bk4D,EAAWr0D,MAAQtO,KAAKukE,kBAE5BvkE,KAAK6iE,gBAAgBd,EAAMY,GAC3B3iE,KAAKuG,IAAIw7D,GACF/hE,IACX,CACA4uB,SACI,MAAMmzC,EAAO/hE,KAAKkvC,OAAO,QACnByzB,EAAatiE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK2iE,YAAa,CAAEnsC,KAAM,OAAQ,eAAgBx2B,KAAKyV,UAAWpP,EAAGrG,KAAK+hE,OAM7H,OALI/hE,KAAK8iE,kBAAkBr4D,MAAQ,IAC/Bk4D,EAAWr0D,MAAQtO,KAAKukE,kBAE5BvkE,KAAK6iE,gBAAgBd,EAAMY,GAC3B3iE,KAAKuG,IAAIw7D,GACF/hE,IACX,CAEAkiD,YAAYn9C,GACR,OAAOm9D,GAAWuC,iBAAiB1uC,OAAOhxB,EAAM/E,KAAKqiE,IAAKriE,KAAK2iE,WACnE,CACA3wB,SAASjtC,EAAMpB,EAAGmF,GACd,IAAK/D,GAAQA,EAAKa,QAAU,EACxB,OAAO5F,KAEX2D,EAAI3D,KAAK80B,MAAMnxB,GACfmF,EAAI9I,KAAK80B,MAAMhsB,GACf,MAAM65D,EAAatiE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK2iE,YAAa,CAAE/zC,OAAQ,OAAQjrB,IACnFmF,MACE47D,EAAM1kE,KAAKkvC,OAAO,QAIxB,OAHAw1B,EAAIC,YAAc5/D,EAClB/E,KAAK6iE,gBAAgB6B,EAAK/B,GAC1B3iE,KAAKuG,IAAIm+D,GACF1kE,IACX,CAEAgV,OAyBI,OAxBAhV,KAAK+iE,YAAYtuD,KAAK,CAClB8tB,MAAO,CACH,cAAeviC,KAAKuiC,MAAM,eAC1B,cAAeviC,KAAKuiC,MAAM,eAC1B,aAAcviC,KAAKuiC,MAAM,cACzB,YAAaviC,KAAKuiC,MAAM,aACxBlT,MAAOrvB,KAAKuiC,MAAMlT,OAEtBszC,WAAY,CACR,cAAe3iE,KAAK2iE,WAAW,eAC/B,cAAe3iE,KAAK2iE,WAAW,eAC/B,aAAc3iE,KAAK2iE,WAAW,cAC9B,YAAa3iE,KAAK2iE,WAAW,aAC7BnsC,KAAMx2B,KAAK2iE,WAAWnsC,KACtB5H,OAAQ5uB,KAAK2iE,WAAW/zC,OACxB,eAAgB5uB,KAAK2iE,WAAW,gBAChC,mBAAoB3iE,KAAK2iE,WAAW,qBAExCG,kBAAmB,CACfr4D,MAAOzK,KAAK8iE,kBAAkBr4D,MAC9B2qC,MAAOp1C,KAAK8iE,kBAAkB1tB,OAElC3/B,UAAWzV,KAAKyV,YAEbzV,IACX,CAEA4V,UACI,MAAMgvD,EAAa5kE,KAAK+iE,YAAYprB,MACpC,GAAIitB,EAAY,CACZ,MAAMriC,EAAQqiC,EACd5kE,KAAKuiC,MAAM,eAAiBA,EAAMA,MAAM,eACxCviC,KAAKuiC,MAAM,eAAiBA,EAAMA,MAAM,eACxCviC,KAAKuiC,MAAM,cAAgBA,EAAMA,MAAM,cACvCviC,KAAKuiC,MAAM,aAAeA,EAAMA,MAAM,aACtCviC,KAAKuiC,MAAMlT,MAAQkT,EAAMA,MAAMlT,MAC/BrvB,KAAK2iE,WAAW,eAAiBpgC,EAAMogC,WAAW,eAClD3iE,KAAK2iE,WAAW,eAAiBpgC,EAAMogC,WAAW,eAClD3iE,KAAK2iE,WAAW,cAAgBpgC,EAAMogC,WAAW,cACjD3iE,KAAK2iE,WAAW,aAAepgC,EAAMogC,WAAW,aAChD3iE,KAAK2iE,WAAWnsC,KAAO+L,EAAMogC,WAAWnsC,KACxCx2B,KAAK2iE,WAAW/zC,OAAS2T,EAAMogC,WAAW/zC,OAC1C5uB,KAAK2iE,WAAW,gBAAkBpgC,EAAMogC,WAAW,gBACnD3iE,KAAK2iE,WAAW,oBAAsBpgC,EAAMogC,WAAW,oBACvD3iE,KAAK8iE,kBAAkBr4D,MAAQ83B,EAAMugC,kBAAkBr4D,MACvDzK,KAAK8iE,kBAAkB1tB,MAAQ7S,EAAMugC,kBAAkB1tB,MACvDp1C,KAAKyV,UAAY8sB,EAAM9sB,SAC3B,CACA,OAAOzV,IACX,CACIqV,cAAU/G,GACVtO,KAAKsV,aAAahH,EACtB,CACI+G,gBACA,OAAOrV,KAAK2iE,WAAWnsC,IAC3B,CACIjhB,gBAAYjH,GACZtO,KAAKwV,eAAelH,EACxB,CACIiH,kBACA,OAAOvV,KAAK2iE,WAAW/zC,MAC3B,CAWA7X,QAAQxO,EAAG6F,EAAMC,EAAQC,GACrB,MAAMY,EAAWxB,EAAK+J,SAASlP,EAAG6F,EAAMC,EAAQC,GAChDtO,KAAKoiE,cAAgB10D,EAAKsJ,YAAY9H,GACtC,MAAM21D,EAAiB,CACnB,cAAe31D,EAASV,OACxB,YAAaU,EAASd,KACtB,cAAec,EAASb,OACxB,aAAca,EAASZ,OAI3B,OAFAtO,KAAK2iE,WAAatiE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK2iE,YAAakC,GACpE7kE,KAAKuiC,MAAQliC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKuiC,OAAQsiC,GACnD7kE,IACX,CAEA0X,UACI,OAAO1X,KAAKoiE,aAChB,EC1iBG,IAAI0C,GAMAC,GCNAC,GCFAC,GH8iBX/C,GAAWuC,iBAAmB,IAlhB9B,MACIhjE,cAGIzB,KAAK81B,MAAQ,CAAC,CAClB,CACAC,OAAOhxB,EAAMs9D,EAAKM,GACd,IAAIpqC,EAAUv4B,KAAK81B,MAAM/wB,QACTnB,IAAZ20B,IACAA,EAAU,CAAC,EACXv4B,KAAK81B,MAAM/wB,GAAQwzB,GAEvB,MAIMp4B,EAAM,GAJGwiE,EAAW,kBACbA,EAAW,gBACTA,EAAW,kBACZA,EAAW,gBAEzB,IAAIlqC,EAAQF,EAAQp4B,GAKpB,YAJcyD,IAAV60B,IACAA,EAAQz4B,KAAKklE,YAAYngE,EAAMs9D,EAAKM,GACpCpqC,EAAQp4B,GAAOs4B,GAEZA,CACX,CACAysC,YAAYngE,EAAMs9D,EAAKM,GACnB,IAAI+B,EAAM1kE,KAAK0kE,IACVA,IAGDA,EAAM91D,SAASq0D,gBAAgBjB,GAAQ,QACvChiE,KAAK0kE,IAAMA,GAEfA,EAAIC,YAAc5/D,EACd49D,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAehB,EAAW,gBACnDA,EAAW,cACX+B,EAAIf,eAAe,KAAM,YAAa,GAAGhB,EAAW,gBACpDA,EAAW,eACX+B,EAAIf,eAAe,KAAM,aAAchB,EAAW,eAClDA,EAAW,gBACX+B,EAAIf,eAAe,KAAM,cAAe,GAAGhB,EAAW,kBAC1DN,EAAIxC,YAAY6E,GAChB,MAAMtwC,EAAOswC,EAAIS,UAEjB,OADA9C,EAAIwB,YAAYa,GACT,CAAE/gE,EAAGywB,EAAKzwB,EAAGmF,EAAGsrB,EAAKtrB,EAAG2B,MAAO2pB,EAAK3pB,MAAOC,OAAQ0pB,EAAK1pB,OACnE,GCtEJ,SAAWo6D,GACPA,EAAiBA,EAAyB,OAAI,GAAK,SACnDA,EAAiBA,EAAsB,IAAI,GAAK,KACnD,CAHD,CAGGA,KAAqBA,GAAmB,CAAC,IAG5C,SAAWC,GACPA,EAAoBA,EAA0B,KAAI,GAAK,OACvDA,EAAoBA,EAAwB,GAAI,GAAK,KACrDA,EAAoBA,EAA0B,KAAI,GAAK,MAC1D,CAJD,CAIGA,KAAwBA,GAAsB,CAAC,IAI3C,MAAMK,GACT7/D,oBAAoB8/D,EAAWC,EAAS76D,EAAOC,EAAQ66D,EAAa,QAChE,MAAMC,EAAW,IAAIJ,GAASC,EAAWC,GACrC76D,GAASC,GACT86D,EAAS3E,OAAOp2D,EAAOC,GAE3B,MAAMirB,EAAM6vC,EAAS3uD,aAGrB,OAFA8e,EAAI0qC,uBAAuBkF,GAC3BH,GAASK,YAAc9vC,EAChBA,CACX,CACApwB,wBAAwB8/D,EAAW56D,EAAOC,EAAQ66D,GAC9C,OAAOH,GAASM,aAAaL,EAAWD,GAASO,SAASC,OAAQn7D,EAAOC,EAAQ66D,EACrF,CACAhgE,qBAAqB8/D,EAAW56D,EAAOC,EAAQ66D,GAC3C,OAAOH,GAASM,aAAaL,EAAWD,GAASO,SAASE,IAAKp7D,EAAOC,EAAQ66D,EAClF,CAIAhgE,sBAAsBwP,EAAS+wD,EAAOC,EAAOC,EAAKC,EAAKC,GACnDnxD,EAAQohB,YACR,MAAMgwC,EAAKH,EAAMF,EACXM,EAAKH,EAAMF,EACXM,EAAQphE,KAAKqhE,MAAMF,EAAID,GAC7B,IAAIxiE,EAAImiE,EACJh9D,EAAIi9D,EACRhxD,EAAQqhB,OAAO0vC,EAAOC,GACtB,IAAIQ,EAAM,EACNxwD,GAAO,EACX,OAAUowD,EAAK,EAAIxiE,GAAKqiE,EAAMriE,GAAKqiE,MAASI,EAAK,EAAIt9D,GAAKm9D,EAAMn9D,GAAKm9D,IAAO,CACxE,MAAMO,EAAaN,EAAYK,IAAQL,EAAYtgE,QAC7C6gE,EAAK9iE,EAAIsB,KAAK++D,IAAIqC,GAASG,EACjC7iE,EAAIwiE,EAAK,EAAIlhE,KAAK8E,IAAIi8D,EAAKS,GAAMxhE,KAAKulC,IAAIw7B,EAAKS,GAC/C,MAAMC,EAAK59D,EAAI7D,KAAKi/D,IAAImC,GAASG,EACjC19D,EAAIs9D,EAAK,EAAInhE,KAAK8E,IAAIk8D,EAAKS,GAAMzhE,KAAKulC,IAAIy7B,EAAKS,GAC3C3wD,EACAhB,EAAQshB,OAAO1yB,EAAGmF,GAGlBiM,EAAQqhB,OAAOzyB,EAAGmF,GAEtBiN,GAAQA,CACZ,CACAhB,EAAQugC,YACRvgC,EAAQ6Z,QACZ,CACAntB,YAAYklE,EAAMC,GACd,GAAIjkE,EAAgBgkE,GAEhB3mE,KAAK21B,IAAMgxC,MAEV,CACD,QAAa/iE,IAATgjE,EAEA,MAAM,IAAIzjE,EAAa,kBAAmB,4BAE9C,MAAMmiE,EAAUsB,EAChB,IAAIlwD,EACJ,GAAmB,iBAARiwD,EAAkB,CACzB,MAAME,EAAej4D,SAASgE,eAAe+zD,GAC7C,IAAKE,EACD,MAAM,IAAI1jE,EAAa,eAAgB,+BAA+B0jE,MAE1EnwD,EAAUmwD,CACd,MAEInwD,EAAUiwD,EAGd,GAAIrB,IAAYF,GAASO,SAASC,OAAQ,CACtC,IAAKpG,GAAa9oD,GACd,MAAM,IAAIvT,EAAa,aAAc,iDAEzC,MAAM4R,EAAU2B,EAAQG,WAAW,KAAM,CAAEiwD,oBAAoB,IAC/D,IAAK/xD,EACD,MAAM,IAAI5R,EAAa,aAAc,4BAEzCnD,KAAK21B,IAAM,IAAImqC,GAAc/qD,EACjC,KACK,IAAIuwD,IAAYF,GAASO,SAASE,IAOnC,MAAM,IAAI1iE,EAAa,iBAAkB,2BAA2BmiE,KANpE,IAAK3F,GAAUjpD,GACX,MAAM,IAAIvT,EAAa,aAAc,2CAEzCnD,KAAK21B,IAAM,IAAIusC,GAAWxrD,EAI9B,CACJ,CACJ,CACAmqD,OAAOp2D,EAAOC,GAEV,OADA1K,KAAK21B,IAAIkrC,OAAOp2D,EAAOC,GAChB1K,IACX,CACA6W,aACI,OAAO7W,KAAK21B,GAChB,EAEJyvC,GAASO,SAAWb,GACpBM,GAAS2B,YAAchC,GAIvBK,GAASK,iBAAc7hE,EGlHhB,MAAMojE,WAAqBtuC,GACnBh3B,sBACP,OAAOG,EAASmlE,YACpB,CACWx2D,qBACP,IAAI3C,EACJ,OAAuE,QAA9DA,EAAKmgB,EAAOyU,mBAAmB3xB,aAAam2D,oBAAiC,IAAPp5D,EAAgBA,EAAK,CAChGq5D,gBAAiB,EACjBC,YAAa,EACbC,YAAa,EACbC,aAAc,EAEtB,CAGA9hE,cAAc4kD,EAAM5nB,GAChB,MAAMK,EAAaL,EAAMK,WACnB8N,EAAcnO,EAAMmO,YAE1B,IAAKyZ,GAAwB,IAAhBA,EAAKvkD,OACd,OAAO,EACX,MAAMwkD,EAAY,GAClB,IAAIC,EAAY,KACZid,EAAa,EACbjrD,EAAc,EAElB,IAAK,IAAI3T,EAAI,EAAGA,EAAIyhD,EAAKvkD,SAAU8C,EAAG,CAClC,MAAM6P,EAAM4xC,EAAKzhD,GACXixB,EAAOphB,EAAImhB,UACX8wB,EAAMjyC,EAAI8hB,cAChB,IAAKx3B,EAAY82B,GACb,MAAM,IAAIx2B,EAAa,eAE3B,MAAMmP,EAAQiG,EAAIwhB,aACZmJ,EAAQvJ,EAAKwJ,cAAc7wB,GAC3BwlC,EAAKne,EAAKM,qBACVkV,EAAoC,EAAb52B,EAAIyxC,OAAch8B,EAAOgD,oBAAsB,GAW5E,GAVI8mB,IACI0S,IAAQz2B,EAAiBiF,OACzBzgB,EAAIghB,UAAYue,EAAGwE,WAAWjM,cAC9B9N,EAAM8N,eAAiBlB,GAElBqb,IAAQz2B,EAAiBmF,QAC9B3gB,EAAIghB,UAAYue,EAAGwE,WAAW/iB,UAC9BgJ,EAAMhJ,WAAa4V,IAGvBxV,IAAS0wB,EAAW,CACpB,IAAK,IAAIzlD,EAAI,EAAGA,EAAI+0B,EAAKrmB,KAAK1N,SAAUhB,EACjB,IAAfg+B,IACA0kC,EAAariE,KAAK8E,IAAI4vB,EAAKyJ,yBAA0BkkC,IAErC,IAAhB52B,IACAr0B,EAAcpX,KAAK8E,IAAI4vB,EAAKshB,0BAA2B5+B,IAG/DguC,EAAY1wB,CAChB,CACA,MAAM4tC,EAA6BrkC,EAAMl/B,KACzComD,EAAU31C,KAAK,CACX+1C,MACA7wB,OACAphB,MACAvU,KAAMujE,EACNtkC,OAAQqkC,EACR5c,OAAQruC,GAEhB,CAEA+tC,EAAU3mB,MAAK,CAACh/B,EAAGC,IAAMA,EAAEV,KAAOS,EAAET,OACpC,IAAIwjE,EAAa,EACbnI,EAAW,EACXC,EAAW,EACX1V,EAAY,KACZC,EAAY,KAChB,IAAK,IAAInhD,EAAI,EAAGA,EAAI0hD,EAAUxkD,SAAU8C,EAAG,CACvC,IAAIuiD,EAAY,EAChB,MAAMtxB,EAAOywB,EAAU1hD,GAAGixB,KACpB6wB,EAAMJ,EAAU1hD,GAAG8hD,IACnBjyC,EAAM6xC,EAAU1hD,GAAG6P,IACnBvU,EAAOomD,EAAU1hD,GAAG1E,KACpB0mD,EAASN,EAAU1hD,GAAGgiD,OAExB1mD,IAAS4lD,GAAajwB,IAASkwB,IAC/B2d,EAAa92B,EAAcga,GAE/B,MAAM+c,EAAYlvD,EAAIqX,WApEN,EAqEZ46B,IAAQ9xB,GAASC,SAASS,MAC1B7gB,EAAI+e,UAAUsL,GACdqoB,EAAYqc,EAAaG,EACzBpI,EAAWpU,EAAYoU,EAAWpU,EAAYoU,GAEzC7U,IAAQ9xB,GAASC,SAASW,QAC/B/gB,EAAI+e,UAAUkwC,GACdvc,GAAawc,EACbnI,EAAWrU,EAAYqU,EAAWrU,EAAYqU,GAElD1V,EAAY5lD,EACZ6lD,EAAYlwB,CAChB,CAGA,OAFA4I,EAAMK,YAAcy8B,EACpB98B,EAAMmO,aAAe4uB,GACd,CACX,CACA79D,YAAY4pD,GACR9nD,QACAvD,KAAK0nE,cAAgBrc,EACrBrrD,KAAKwzB,SAAWkF,GAASC,SAASK,MAClCh5B,KAAKu0B,QAAU,EACfv0B,KAAKw0B,QAAU,EACfx0B,KAAKu5B,UAAY,EACjBv5B,KAAK2nE,YAAc,EACnB3nE,KAAKyrD,SAAW,EAChBzrD,KAAKkqC,SAAW,EAChBlqC,KAAK4nE,QAAS,EACd5nE,KAAK6nE,IAAMzC,GAAS2B,YAAYroB,KAChC1+C,KAAKgqD,OAAS,EACdhqD,KAAK8nE,YAAa,EAClB9nE,KAAKy5B,SAAuB,EAAdz5B,KAAKgqD,OAAa,GAChChqD,KAAK2X,WACT,CACAowD,eAAeF,GAIX,OAHIA,GAAOzC,GAAS2B,YAAYroB,MAAQmpB,GAAOzC,GAAS2B,YAAYr+B,OAChE1oC,KAAK6nE,IAAMA,GAER7nE,IACX,CACAgoE,gBAAgB3c,GAEZ,OADArrD,KAAK0nE,cAAgBrc,EACdrrD,IACX,CACA4rD,WAAWjoD,GAEP,OADA3D,KAAKyrD,SAAW9nD,EACT3D,IACX,CACA6rD,WAAW/iD,GAEP,OADA9I,KAAKkqC,SAAWphC,EACT9I,IACX,CACAioE,YAAYtuC,GAER,OADA35B,KAAK6pD,UAAYlwB,EACV35B,IACX,CACAkoE,UAAUN,GAEN,OADA5nE,KAAK4nE,OAASA,EACP5nE,IACX,CACAmoE,cAAcL,GAEV,OADA9nE,KAAK8nE,WAAaA,EACX9nE,IACX,CACA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAM8xB,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,OACpDi9B,EAAgB5V,EAAK6V,UAAY7V,EAAK8V,mBAAqBjH,GAAKC,GACtE,IAAIuX,EAAQ5X,EAAMzkC,EAAI3D,KAAKu0B,QAAUv0B,KAAKyrD,SACtCpa,EAAW,CAAC,EACZ1X,EAAK6V,YACL6B,EAAW1X,EAAK6X,YAAYrH,cAEhC,IAAI+V,EAAQ9X,EAAMt/B,EAAI9I,KAAKw0B,QAAUx0B,KAAKkqC,SAC1C,OAAQlqC,KAAKwzB,UACT,KAAKkF,GAASC,SAASK,MAGfknB,EADWvmB,EAAK8X,QACLpsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCi1B,EAAK6V,WAAaD,GAAiB/G,GAAKC,KACxCyX,EAAQ7O,EAAS3G,KAAOs8B,GAAax2D,QAAQ22D,aAEjDjnB,GAASlgD,KAAKgqD,OAASgd,GAAax2D,QAAQ02D,gBAAkBlnE,KAAKu5B,UAAYvL,EAAOgD,oBAE1F,MACJ,KAAK0H,GAASC,SAASO,MAGfgnB,EADWvmB,EAAK8X,QACLpsC,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IACrCi1B,EAAK6V,WAAaD,GAAiB/G,GAAKE,OACxCwX,EAAQ7O,EAAS3G,KAAOs8B,GAAax2D,QAAQ22D,aAEjDjnB,GAASlgD,KAAKgqD,OAASgd,GAAax2D,QAAQ02D,gBAAkBlnE,KAAKu5B,UAAYvL,EAAOgD,oBAE1F,MACJ,KAAK0H,GAASC,SAASS,KACnB4mB,GAAShgD,KAAKgqD,OAAS,EAAIgd,GAAax2D,QAAQ42D,YAChD,MACJ,KAAK1uC,GAASC,SAASW,MACnB0mB,GAAShgD,KAAKgqD,OAAS,EAAIgd,GAAax2D,QAAQ62D,aAChD,MACJ,QACI,MAAM,IAAIlkE,EAAa,kBAAmB,gBAAgBnD,KAAKwzB,uBAEvEmC,EAAI3gB,OACAhV,KAAK8nE,aACLnyC,EAAIQ,YACJR,EAAI0f,IAAI2K,EAAOE,EAAOlgD,KAAKgqD,OAAQ,EAAa,EAAV/kD,KAAKC,IAAQ,GACnDywB,EAAIjgB,aAAa,KACjBigB,EAAI/G,UAER+G,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAMtT,EAAIq8C,EAAQrqB,EAAIusB,YAAYliD,KAAK0nE,eAAej9D,MAAQ,EAC9DkrB,EAAIqc,SAAS,GAAKhyC,KAAK0nE,cAAe/jE,EAAGu8C,EAAQ,KACjD,MAAM8K,EAAWhrD,KAAK6pD,UACtB,GAAI9mD,EAAgBioD,GAAW,CAE3B,MAAM/M,EAAM+M,EAAS5Z,WAAazX,EAAK1wB,OAAS,EAUhD,IAAIm/D,EACAC,EACJ,OAXA1yC,EAAIngB,eAAe,WACnBmgB,EAAI6qC,WAAW,SACf7qC,EAAIjgB,aAAa,IACb1V,KAAK4nE,OACLxC,GAASkD,eAAe3yC,EAAKqqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAGxEklB,GAASkD,eAAe3yC,EAAKqqB,EAAQ,GAAIE,EAAOF,EAAQ/B,EAAKiC,EAAO,CAAC,EAAG,IAIpElgD,KAAK6nE,KACT,KAAKzC,GAAS2B,YAAYt+B,GACtB2/B,GAAO,GACPC,EAAUroE,KAAK4nE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrCxC,GAASkD,eAAe3yC,EAAKqqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQkoB,EAAKC,GAC3E,MACJ,KAAKjD,GAAS2B,YAAYr+B,KACtB0/B,EAAM,GACNC,EAAUroE,KAAK4nE,OAAS,CAAC,EAAG,GAAK,CAAC,EAAG,GACrCxC,GAASkD,eAAe3yC,EAAKqqB,EAAQ/B,EAAKiC,EAAOF,EAAQ/B,EAAKiC,EAAQkoB,EAAKC,GAKvF,CACA1yC,EAAI/f,SACR,EAEJoxD,GAAa7vD,UAAY,CACrB3I,OAAQd,EAAKe,WACbL,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QClPd,MAAM65D,WAAe7vC,GACbh3B,sBACP,OAAOG,EAAS0mE,MACpB,CAEAhjE,cAAcijE,EAASjmC,GACnB,MAAMK,EAAaL,EAAMK,WAEzB,IAAK4lC,GAA8B,IAAnBA,EAAQ5iE,OACpB,OAAO,EACX,MAAM6iE,EAAaD,EAAQj1D,KAAKqb,IAC5B,MAAM+K,EAAO/K,EAAO8K,UACdpnB,EAAQsc,EAAOmL,aACrB,GAAIl3B,EAAY82B,GAAO,CAEnB,MAAM,KAAE31B,GAAS21B,EAAKwJ,cAAc7wB,GAEpC,MAAO,CAAEtO,OAAM8B,MADD6zB,EAAKyJ,yBACGxU,SAC1B,CACK,GAAI3rB,EAAU02B,GAAO,CAEtB,MAAQlxB,IAAKigE,GAAW/uC,EAAKgvC,eAAer2D,GAC5C,MAAO,CAAEtO,KAAM0kE,EAAQ5iE,MAAO,EAAG8oB,SACrC,CAEI,MAAM,IAAIzrB,EAAa,WAAY,uBACvC,IAEEylE,EAAchmC,EAEdhL,EAAS6wC,EAAWpjE,QAAO,CAACuyB,GAAUhJ,SAAQ9oB,YAChD8oB,EAAO0I,UAAUsxC,EAAc9iE,GACxBb,KAAK8E,IAAI6kB,EAAOgB,WAzBJ,EAyBiCgI,KACrD,GAEH,OADA2K,EAAMK,YAAchL,GACb,CACX,CACAn2B,YAAYwQ,EAAMoc,GACd9qB,QACAvD,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEqxD,YAAY,GAAQx6C,GAEnDruB,KAAK6oE,WAAa7oE,KAAKquB,QAAQw6C,WAE/B7oE,KAAKiS,KAAOA,EACZjS,KAAKwzB,SAAWkF,GAASC,SAASS,KAClCp5B,KAAKynC,eAAiB,CAClBC,WAAY,IAEhB1nC,KAAK2X,YACL3X,KAAKs3B,UAAU,GACft3B,KAAKy5B,SAAS,GAClB,CACAY,cACI,OAAOr6B,KAAKwzB,QAChB,CACAs1C,WAAWnvC,GAEP,OADA35B,KAAK+oE,SAAWpvC,EACT35B,IACX,CACA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAM8xB,EAAQzO,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,OAC1D,IAAI+3B,EAAK1Q,EAAK8X,QACV/G,EAAOtC,EAAMt/B,EACb82C,EAAOxX,EAAMt/B,EACjB,MAAMnF,EAAIykC,EAAMzkC,EAAI,EACdqlE,EAAarvC,EAAKxB,aAAamL,yBAC/BtT,EAAQhwB,KAAKm6B,uBAAuBkiB,WAAW1iB,EAAKvlB,eAC1D,IAAK,IAAI1L,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CACnC,MAAMixB,EAAO3J,EAAMtnB,GACnB,GAAIjG,EAAOk3B,GAAO,CAGd0Q,EAAK1Q,EAAK8X,QACV,IAAK,IAAI7sC,EAAI,EAAGA,EAAIylC,EAAGzkC,OAAQhB,KACvB5E,KAAK25B,OAAS3J,EAAMtnB,IAAM1I,KAAK6oE,cAC/Bn+B,EAAOzlC,KAAKulC,IAAIE,EAAML,EAAGzlC,IACzBg7C,EAAO36C,KAAK8E,IAAI61C,EAAMvV,EAAGzlC,IAGrC,CACJ,CACA,IAAIqkE,EAAQ,GACRC,EAAgB,EAChBC,EAAU,EACVhT,EAAe,EACfiT,EAAS,EACb,OAAQppE,KAAKiS,MACT,KAAKs2D,GAAOc,KAAKC,WACbL,EAAQ,mBACRC,GAAiB,EACjBC,EAAUz+B,EAAOs+B,EAAa,EAAI,GAClCppB,GAAQopB,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKE,SACbN,EAAQ,qBACRC,EAAgB,GAChBC,EAAUvpB,EAAOopB,EAAa,EAC9Bt+B,GAAQs+B,EAAa,EACrB,MACJ,KAAKT,GAAOc,KAAKG,UACjB,KAAKjB,GAAOc,KAAKI,cACbR,EAAQ,mBACRC,GAAiB,EACjB/S,EAAen2D,KAAKu0B,QAAU20C,EAAgB,EAC1CrmE,EAAY82B,IACZ+Q,GAAQ,IAAMs+B,EAEVppB,IADCA,EAAOlV,GAAQ,GAAM,EACd,GAAMs+B,EAGNA,EAEZG,EAAUz+B,EAAOs+B,EACjBI,EAASxpB,EAAOopB,EAAa,IAG7Bt+B,GAAQ,IAAMs+B,EACdppB,GAAQopB,EACRG,EAAUz+B,EAAO,IAAOs+B,EACxBI,EAASxpB,EAAO,IAAOopB,GAE3B,MACJ,KAAKT,GAAOc,KAAKK,QACjB,KAAKnB,GAAOc,KAAKM,YACbV,EAAQ,qBACRC,GAAiB,EACjB/S,EAAen2D,KAAKu0B,QAAU20C,EAAgB,EAC1CrmE,EAAY82B,IACZwvC,EAAUH,EAAa,EACvBt+B,GAAQ,GAAMs+B,GACTppB,EAAOlV,GAAQ,GAAM,IACtBkV,GAAQopB,EAAa,GAEzBG,EAAUvpB,EAAO,GAAMopB,EACvBI,EAAS1+B,EAAO,KAAOs+B,IAGvBt+B,GAAQ,IAAOs+B,EACfppB,GAAQ,GAAMopB,EACdG,EAAUvpB,EAAO,IAAOopB,EACxBI,EAAS1+B,EAAOs+B,GAEpB,MACJ,KAAKT,GAAOc,KAAKO,uBACbl/B,GAAQ,GAAMs+B,EACdppB,GAAQopB,EACR,MACJ,QACI,MAAM,IAAI7lE,EAAa,cAAe,mBAAmBnD,KAAKiS,uBAEtE,IAAI43D,EAAa,WAEjB,GAAI7pE,KAAKiS,OAASs2D,GAAOc,KAAKC,YAActpE,KAAKiS,OAASs2D,GAAOc,KAAKE,SAClE5zC,EAAImqB,SAASn8C,EAAI3D,KAAKu0B,QAASmW,EAAM,EAAGkV,EAAOlV,QAI/C,GADAm/B,EAAa,SACThnE,EAAY82B,GACZ,IAAK,IAAIjxB,EAAIgiC,EAAMhiC,GAAKk3C,EAAMl3C,GAAKsgE,EAC/Bv5C,EAAM49B,YAAY13B,EAAKhyB,EAAI3D,KAAKu0B,QAAU,EAAG7rB,EAAG1I,KAAKynC,eAAeC,WAAY,2BAGnF,CACD,IAAIh/B,EACJ,IAAKA,EAAIgiC,EAAMhiC,GAAKk3C,EAAMl3C,GAAK,GAC3B+mB,EAAM49B,YAAY13B,EAAKhyB,EAAI3D,KAAKu0B,QAAU,EAAG7rB,EAAG1I,KAAKynC,eAAeC,WAAY,uBAEhF1nC,KAAKiS,OAASs2D,GAAOc,KAAKI,gBAC1BL,EAAS1gE,EAAI,IAAOsgE,EAE5B,CAEAhpE,KAAKiS,OAASs2D,GAAOc,KAAKO,yBAI9Bn6C,EAAM49B,YAAY13B,EAAKhyB,EAAI3D,KAAKu0B,QAAU20C,EAAeC,EAASnpE,KAAKynC,eAAeC,WAAYuhC,EAAO,CACrG3nE,SAAU,UAAUuoE,KAAcZ,MAGlCjpE,KAAKiS,OAASs2D,GAAOc,KAAKI,eAAiBzpE,KAAKiS,OAASs2D,GAAOc,KAAKM,cACrEh0C,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAAS,IAAKruC,EAAIwyD,EAAciT,GACpCzzC,EAAI/f,WAEZ,EAEJ2yD,GAAOc,KAAO,CACVC,WAAY,EACZC,SAAU,EACVC,UAAW,EACXE,QAAS,EACTD,cAAe,EACfE,YAAa,EACbC,uBAAwB,GAE5BrB,GAAOpxD,UAAY,CACf3I,OAAQd,EAAK8D,MACbpD,KAAMV,EAAKE,KACXS,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUkD,QC/Md,MAAMq6D,WAAgBpxC,GACdh3B,sBACP,OAAOG,EAASioE,OACpB,CAEAvkE,cAAcwkE,EAAUxnC,EAAOxtB,GAC3B,IAAKg1D,GAAgC,IAApBA,EAASnkE,OACtB,OAAO,EAEX,IAAI2zB,EAAYgJ,EAAM8N,cAClB5lC,EAAQ,EACR3E,EAAQy8B,EAAMmO,YAAc,EAEhC,MAAM4P,EAAQvrC,EAAQsnC,WAAWgE,GAAK3+C,UACtC,GAAI4+C,GAASA,EAAM16C,OAAS,EAAG,CAE3B2zB,GADmB+mB,EAAM/sC,KAAKiJ,GAAOA,EAAG2kC,kBAAiB97C,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAAMspB,EAAOgD,oBAC9D,CAC1C,MAEIuR,EAAM8N,eAAiB,EAG3B,IAAK,IAAI3nC,EAAI,EAAGA,EAAIqhE,EAASnkE,SAAU8C,EAAG,CACtC,MAAMshE,EAAUD,EAASrhE,GACzBshE,EAAQ1yC,UAAUxxB,GAClBkkE,EAAQzvC,YAAYhB,GACpB9uB,GAASu/D,EAAQp6C,WACjB9pB,GAAS2E,CACb,CAEA,OADA83B,EAAMmO,aAAejmC,GACd,CACX,CACAhJ,cACI8B,QACAvD,KAAKwzB,SAAWkF,GAASC,SAASW,MAClCt5B,KAAKynC,eAAiB,CAClBwiC,OAAO,EACPC,cAAe,GACfC,YAAa,EACbC,WAAY,EACZC,WAAY,GAEhBrqE,KAAKsqE,gBAAgBtqE,KAAKynC,eAAeyiC,cAC7C,CAEAK,SAASN,GAEL,OADAjqE,KAAKynC,eAAewiC,MAAQA,EACrBjqE,IACX,CAEAsqE,gBAAgB7/D,GAGZ,OAFAzK,KAAKynC,eAAeyiC,cAAgBz/D,EACpCzK,KAAKy5B,SAAShvB,GACPzK,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MACMk0D,EADQ7wC,EAAK0O,mBAAmB3P,GAASC,SAASW,MAAOt5B,KAAKsS,OACnD3O,EAAI3D,KAAKu0B,QACpBk2C,EAAK9wC,EAAKgY,eAAe3xC,KAAKu5B,WAAa,EACjDuwC,GAAQY,cAAc/0C,EAAK60C,EAAIC,EAAIzqE,KAAKynC,eAC5C,CAKAliC,qBAAqBowB,EAAKhyB,EAAGmF,EAAG6hE,GAC5B,MAAM,MAAEV,EAAK,cAAEC,EAAa,WAAEE,EAAU,WAAEC,EAAU,YAAEF,GAAgBQ,EAChEC,EAAYV,EAAgBE,EAElC,IAAI1hE,EACJ,GAFAitB,EAAIQ,YAEA8zC,EAAO,CAEP,IADAt0C,EAAIS,OAAOzyB,EAAGmF,EAAIuhE,EAAa,GAC1B3hE,EAAI,EAAGA,EAAIkiE,EAAY,IAAKliE,EAC7BitB,EAAIU,OAAO1yB,EAAIymE,EAAYthE,EAAIqhE,EAAc,GAC7CxmE,GAAKymE,EACLz0C,EAAIU,OAAO1yB,EAAIymE,EAAYthE,EAAIqhE,EAAc,GAC7CxmE,GAAKymE,EAET,IAAK1hE,EAAI,EAAGA,EAAIkiE,EAAY,IAAKliE,EAC7BitB,EAAIU,OAAO1yB,EAAIymE,EAAYthE,EAAIqhE,EAAc,EAAIE,EAAa,GAC9D1mE,GAAKymE,EACLz0C,EAAIU,OAAO1yB,EAAIymE,EAAYthE,EAAIqhE,EAAc,EAAIE,EAAa,GAC9D1mE,GAAKymE,EAETz0C,EAAIa,MACR,KACK,CAED,IADAb,EAAIS,OAAOzyB,EAAGmF,EAAIuhE,GACb3hE,EAAI,EAAGA,EAAIkiE,EAAY,IAAKliE,EAC7BitB,EAAIW,iBAAiB3yB,EAAIymE,EAAa,EAAGthE,EAAIqhE,EAAc,EAAGxmE,EAAIymE,EAAYthE,GAC9EnF,GAAKymE,EACLz0C,EAAIW,iBAAiB3yB,EAAIymE,EAAa,EAAGthE,EAAIqhE,EAAc,EAAGxmE,EAAIymE,EAAYthE,GAC9EnF,GAAKymE,EAET,IAAK1hE,EAAI,EAAGA,EAAIkiE,EAAY,IAAKliE,EAC7BitB,EAAIW,iBAAiB3yB,EAAIymE,EAAa,EAAGthE,EAAIqhE,EAAc,EAAIE,EAAY1mE,EAAIymE,EAAYthE,EAAIuhE,GAC/F1mE,GAAKymE,EACLz0C,EAAIW,iBAAiB3yB,EAAIymE,EAAa,EAAGthE,EAAIqhE,EAAc,EAAIE,EAAY1mE,EAAIymE,EAAYthE,EAAIuhE,GAC/F1mE,GAAKymE,EAETz0C,EAAIa,MACR,CACJ,ECnFJ,SAAS,MAAKzyB,GACN8mE,GAAgBvoC,OAChBz+B,EAAI,2BAA4BE,EACxC,CACO,MAAM8mE,GACTppE,cAEIzB,KAAKuiC,MAAQ,CACTK,WAAY,EACZ8N,YAAa,EACbnX,UAAW,EACX8W,cAAe,GAInBrwC,KAAK8qE,QAAU,CAAC,EAChB9qE,KAAKm4C,cAAe,EACpBn4C,KAAKq4C,eAAgB,EACrBr4C,KAAK+qE,WAAY,EACjB/qE,KAAKyK,MAAQ,EACbzK,KAAKsxC,QAAU,CACnB,CACA/J,YAAYyjC,GAER,OADA,GAAE,qDACKhrE,KAAK+3C,UAAUizB,EAC1B,CAOAjzB,UAAUizB,GACN,MAAM1pE,EAAW0pE,EAAO52D,cAOxB,OANKpU,KAAK8qE,QAAQxpE,KACdtB,KAAK8qE,QAAQxpE,GAAY,IAE7BtB,KAAK8qE,QAAQxpE,GAAUmT,KAAKu2D,GAC5BA,EAAO5wC,mBAAmBp6B,MAC1BA,KAAKm4C,cAAe,EACbn4C,IACX,CAIAqnC,aAAa/lC,GAET,OADA,GAAE,uDACKtB,KAAKq8C,WAAW/6C,EAC3B,CACA+6C,WAAW/6C,GACP,IAAIuM,EACJ,OAAyC,QAAjCA,EAAK7N,KAAK8qE,QAAQxpE,UAA8B,IAAPuM,EAAgBA,EAAK,EAC1E,CAIA+hB,WACI,OAAO5vB,KAAKyK,KAChB,CACAwgE,eACI,OAAOjrE,KAAKuiC,MAAMK,UACtB,CACAsvB,gBACI,OAAOlyD,KAAKuiC,MAAMmO,WACtB,CACA4L,WACI,OAAOt8C,KAAKuiC,KAChB,CACAzxB,aACI,IAAK9Q,KAAK+qE,UACN,MAAM,IAAI5nE,EAAa,oBAAqB,sCAEhD,MAAO,CACHsH,MAAOzK,KAAKuiC,MAAMK,WAAa5iC,KAAKuiC,MAAMmO,YAAc1wC,KAAKsxC,QAC7DA,QAAStxC,KAAKsxC,QAEtB,CACA4G,YACI,GAAIl4C,KAAKm4C,aACL,OACJ,GAAE,iCACF,MAAM5V,EAAQviC,KAAKuiC,MACbuoC,EAAU9qE,KAAK8qE,QAErBhoE,GAAU63D,OAAOmQ,EAAQjpE,EAASiB,WAAYy/B,GAC9C48B,GAAYxE,OAAOmQ,EAAQjpE,EAASs9D,aAAc58B,GAClDngC,GAAIu4D,OAAOmQ,EAAQjpE,EAASO,KAAMmgC,GAClC2nB,GAAeyQ,OAAOmQ,EAAQjpE,EAASqoD,gBAAiB3nB,GACxDzgC,GAAW64D,OAAOmQ,EAAQjpE,EAASC,YAAaygC,GAChDgmC,GAAO5N,OAAOmQ,EAAQjpE,EAAS0mE,QAAShmC,GACxC//B,GAAem4D,OAAOmQ,EAAQjpE,EAASW,gBAAiB+/B,GACxD44B,GAAaR,OAAOmQ,EAAQjpE,EAASs5D,cAAe54B,GACpDykC,GAAarM,OAAOmQ,EAAQjpE,EAASmlE,cAAezkC,GACpDqQ,GAAa+nB,OAAOmQ,EAAQjpE,EAAS+wC,cAAerQ,GACpD66B,GAASzC,OAAOmQ,EAAQjpE,EAASu7D,UAAW76B,GAC5CvgC,GAAW24D,OAAOmQ,EAAQjpE,EAASG,YAAaugC,GAChD+f,GAAYqY,OAAOmQ,EAAQjpE,EAASygD,aAAc/f,GAClD8d,GAAKsa,OAAOmQ,EAAQjpE,EAASw+C,MAAO9d,GACpCunC,GAAQnP,OAAOmQ,EAAQjpE,EAASioE,SAAUvnC,EAAOviC,MAEjDA,KAAKyK,MAAQ83B,EAAMK,WAAaL,EAAMmO,YACtC1wC,KAAKm4C,cAAe,CACxB,CACAC,aACQp4C,KAAKq4C,gBAET,GAAE,kCAEFv1C,GAAUs1C,WAAWp4C,KAAKq8C,WAAWx6C,EAASiB,YAClD,EAEJ+nE,GAAgBvoC,OAAQ,EC3HjB,MAAM4oC,WAAa9tB,GACX17C,sBACP,OAAOG,EAASqpE,IACpB,CAKWC,mBACP,MAAO,CACHnxD,OAAQ,CACJ3W,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEXha,KAAM,CACF7W,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX9Z,KAAM,CACF/W,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX/Z,MAAO,CACH9W,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX5Z,WAAY,CACRjX,KAAM,2BACNW,KAAM,EACNkwB,MAAO,GAEX7Z,QAAS,CACLhX,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX,gBAAiB,CACb7wB,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX,aAAc,CACV7wB,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX,aAAc,CACV7wB,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX3Z,QAAS,CACLlX,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEX1Z,OAAQ,CACJnX,KAAM,QACNW,KAAM,EACNkwB,MAAO,GAEXk3C,IAAK,CACD/nE,KAAM,iBACNW,KAAM,EACNkwB,MAAO,GAGnB,CACWm3C,6BACP,MAAO,CACH,MAAO,WACP,MAAO,WAEf,CAEA5pE,YAAYwQ,EAAM7D,EAAM4gC,GACpBzrC,QAKAvD,KAAKkuB,KAAOg9C,GAAKC,MAAc,OAC/BnrE,KAAKs6B,YAAYwiB,GAAsBsC,OACvCp/C,KAAKq/C,QAAQptC,EAAM7D,EAAM4gC,GACzBhvC,KAAKy5B,SAAShK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMrD,KAAKkuB,KAAKgG,MAAO,QAAQl0B,KAAKoO,SAjGnF,YAAcrK,GACNmnE,GAAK5oC,OACLz+B,EAAI,gBAAiBE,EAC7B,CA+FQ,CAAE,iBAAkBkO,EACxB,CAEAotC,QAAQptC,EAAM7D,EAAM4gC,GAChBhvC,KAAKiS,KAAOA,EACZjS,KAAKkuB,KAAOg9C,GAAKC,MAAMl5D,GAEnBjS,KAAKoO,UADIxK,IAATwK,EACY,UAGAA,EAEhB,MAAMo0B,EAAYxU,EAAOyU,mBAEzB,QAAmB7+B,IAAforC,EAA0B,CAC1B,MAAM3rC,EAAO6nE,GAAKG,gBAAgBr8B,GAC5B9a,EAAQsO,EAAUpxB,aAAa,QAAQpR,KAAKoO,oBAAoB4gC,WAChEhrC,EAAOw+B,EAAUpxB,aAAa,QAAQpR,KAAKoO,oBAAoB4gC,KAAchvC,KAAKiS,aAClFsiB,EAAUiO,EAAUpxB,aAAa,QAAQpR,KAAKoO,oBAAoB4gC,KAAchvC,KAAKiS,eAC3FjS,KAAKgvC,WAAa,CAAE3rC,OAAM6wB,QAAOlwB,OAAMuwB,WACvCv0B,KAAKsrE,WAAa,IAAI77C,EAAMzvB,KAAKgvC,WAAW3rC,KAAMrD,KAAKgvC,WAAW9a,OAClEl0B,KAAKsrE,WAAW96D,QAAQglB,MAAQ,EAChCx1B,KAAKsrE,WAAWh0C,UAAUt3B,KAAKgvC,WAAWza,QAC9C,MAEIv0B,KAAKgvC,gBAAaprC,EAEtB,OAAO5D,IACX,CAEA4vB,WAII,MAHkB,QAAd5vB,KAAKiS,MACLvO,EAAQ1D,KAAKo3B,MAAO,YAAa,kCAE9Bp3B,KAAKyK,KAChB,CAEA0sB,SAASC,GAEL,OADAp3B,KAAKo3B,MAAQA,EACNp3B,IACX,CAEA+V,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChBA,EAAI0V,UAAU,OAAQrrC,KAAK6S,aAAa,OACxC4c,EAAM49B,YAAY13B,EAAK31B,KAAK2D,EAAGyzB,EAAMmM,YAAYvjC,KAAKkuB,KAAKlqB,MAAOhE,KAAKkuB,KAAKgG,MAAOl0B,KAAKkuB,KAAK7qB,KAAM,CAC/F/B,SAAU,QAAQtB,KAAKoO,cAEHxK,IAApB5D,KAAKgvC,iBAAgDprC,IAApB5D,KAAKsrE,aACtCtrE,KAAKq9C,iBAAiBr9C,KAAKsrE,WAAYl0C,EAAOp3B,KAAKgvC,WAAWhrC,MAC9DhE,KAAKsrE,WAAWn0C,SAASC,GACzBp3B,KAAKsrE,WAAWx0D,WAAW6e,GAC3B31B,KAAKsrE,WAAWlzC,cAAcp4B,KAAK2D,IAEvCgyB,EAAI4V,aACJvrC,KAAK2V,aAAaggB,EACtB,EAGJu1C,GAAK5oC,OAAQ,EC7JN,MAAMipC,WAAqBnuB,GACnB17C,sBACP,OAAOG,EAAS0pE,YACpB,CAEA9pE,YAAYsuB,EAASy7C,EAAeC,GAChCloE,QACAvD,KAAK+iC,QAAU,GACf/iC,KAAK0rE,UAAU37C,EAASy7C,EAAeC,GACvCzrE,KAAKs6B,YAAYwiB,GAAsBsC,OACvCp/C,KAAK2rE,eAAiB,GACtB3rE,KAAKmR,OAAS,GACdnR,KAAK4rE,WAAa,GAClB5rE,KAAK6rE,eAAgB,CACzB,CAIAC,eAAepzD,EAAKqzD,GAChB,MAAMC,EAAeh+C,EAAO6Z,gBAAgBnvB,EAAIzG,MAC1Cqd,EAAQ,IAAIG,EAAMu8C,EAAa3oE,KAAMrD,KAAK2rE,gBAEhD,IAAIM,EAAa,EACjB,GAAiB,MAAbvzD,EAAIzG,MAAgB85D,EAAS,CAC7B,MAAMz6B,EAAUi6B,GAAa1oC,kBAAkBkpC,EAAQ95D,MACvD,GAAIq/B,EAAS,CAET26B,EADgBF,EAAQ/nE,MAAQ0U,EAAI1U,KACbstC,EAAQvY,MAAQuY,EAAQrY,KACnD,CACJ,CAEAj5B,KAAKq9C,iBAAiB/tB,EAAOtvB,KAAKm4B,aAAczf,EAAI1U,MACpDhE,KAAKmR,OAAOsD,KAAK6a,GACjB,MAAM48C,EAAYlsE,KAAK4rE,WAAW5rE,KAAK4rE,WAAWhmE,OAAS,GACrDwpC,EAAa9f,EAAMxe,aAAarG,MAAQwhE,EAE9CjsE,KAAK4rE,WAAWn3D,KAAKy3D,EAAY98B,GAEjCpvC,KAAKyK,OAAS2kC,CAClB,CAGA+8B,UAAUr8C,GAGN,OAFA9vB,KAAK+qE,WAAY,EACjB/qE,KAAKwrE,cAAgB17C,EACd9vB,IACX,CACAosE,uBAAuBt8C,GAEnB,MAAMu8C,EAAiBr+C,EAAO6T,aAAa/R,GAErCw8C,EAAkBtsE,KAAK+iC,QAAQn9B,OAAS,GAAKymE,EAAezmE,OAAS,GAAKymE,EAAe,GAAGp6D,OAASjS,KAAK+iC,QAAQ,GAAG9wB,KAErHs6D,EAAWD,EAAkBD,EAAezmE,OAASymE,EAAezmE,OAAS5F,KAAK+iC,QAAQn9B,OAEhG,GAAI2mE,EAAW,EACX,OAEJ,MAAMC,EAAY,GAClB,IAAK,IAAI9jE,EAAI,EAAGA,EAAI6jE,EAAU7jE,IAAK,CAC/B,IAAI4J,EAAQ5J,EACP4jE,IACDh6D,EAAQ+5D,EAAezmE,OAAS2mE,EAAW7jE,GAE/C,MAAMgQ,EAAM2zD,EAAe/5D,GAC3Bk6D,EAAU/3D,KAAK,CAAExC,KAAM,IAAKjO,KAAM0U,EAAI1U,MAC1C,CAGA,OADAhE,KAAK+iC,QAAUypC,EAAUC,OAAOzsE,KAAK+iC,SAC9B,CACHA,QAASypC,EACTv6D,KAAMo6D,EAAe,GAAGp6D,KAEhC,CAEAy6D,WAAWt1C,GAGP,OAFAp3B,KAAK6rE,eAAgB,EACrBz0C,EAAMmQ,YAAYvnC,MACXA,IACX,CAGA2sE,gBAAgBz+C,EAAMjc,EAAM8wB,EAAU/iC,KAAK+iC,SACvC,IACI6pC,EAuCAlkE,EAxCAmkE,EAAS,EAEb,OAAQ3+C,GAEJ,IAAK,UACY,MAATjc,EACA26D,EAAc,CAAC,IAAK,GAAK,EAAG,EAAG,KAAM,GAAK,GAE1CC,GAAU,EACd,MACJ,IAAK,gBACY,MAAT56D,EACA26D,EAAc,CAAC,EAAG,EAAG,GAAK,IAAK,EAAG,EAAG,KAErCC,EAAS,IACb,MACJ,IAAK,OACDA,EAAS,GACT,MACJ,IAAK,QACY,MAAT56D,EACA26D,EAAc,CAAC,EAAG,EAAG,IAAK,GAAK,EAAG,EAAG,KAErCC,GAAU,GACd,MACJ,IAAK,aACL,IAAK,aACY,MAAT56D,EACA26D,EAAc,CAAC,GAAK,IAAK,EAAG,EAAG,IAAK,IAAK,GAEzCC,EAAS,EACb,MACJ,IAAK,OACL,IAAK,SACDA,EAAS,EAOjB,QAA2B,IAAhBD,EACP,IAAKlkE,EAAI,EAAGA,EAAIq6B,EAAQn9B,SAAU8C,EAC9Bq6B,EAAQr6B,GAAG1E,KAAO4oE,EAAYlkE,QAGjC,GAAe,IAAXmkE,EACL,IAAKnkE,EAAI,EAAGA,EAAIq6B,EAAQn9B,SAAU8C,EAC9Bq6B,EAAQr6B,GAAG1E,MAAQ6oE,CAG/B,CACAtvB,WAAWjrC,GAGP,OAFKtS,KAAK+qE,WACN/qE,KAAK26D,SACqB,IAAvB36D,KAAKmR,OAAOvL,SAAkB5F,KAAK6rE,eAAiBv5D,EAAQ,EAAK,EAAItS,KAAKw0C,OACrF,CACA5kB,WAGI,OAFK5vB,KAAK+qE,WACN/qE,KAAK26D,SACF36D,KAAKyK,KAChB,CACAihE,UAAU37C,EAASy7C,EAAeC,GAK9B,OAJAzrE,KAAK+qE,WAAY,EACjB/qE,KAAK+vB,QAAUA,EACf/vB,KAAKwrE,cAAgBA,EACrBxrE,KAAKyrE,aAAeA,EACbzrE,IACX,CAIA8sE,SAASrB,GAGL,OAFAzrE,KAAK+qE,WAAY,EACjB/qE,KAAKyrE,aAAeA,EACbzrE,IACX,CACA+sE,sBAAsBtB,GAClB,MAAM1hE,EAAM9E,KAAKulC,IAAIihC,EAAa7lE,OAAQ5F,KAAK+iC,QAAQn9B,QACvD,IAAK,IAAI8C,EAAI,EAAGA,EAAIqB,IAAOrB,EACnB+iE,EAAa/iE,KACb1I,KAAK+iC,QAAQr6B,GAAGuJ,KAAOw5D,EAAa/iE,GAGhD,CACAiyD,SACI,MAAMvjC,EAAQp3B,KAAKm4B,aACnBn4B,KAAKyK,MAAQ,EACbzK,KAAKmR,OAAS,GACdnR,KAAK4rE,WAAa,CAAC,GACnB5rE,KAAK+iC,QAAU/U,EAAO6T,aAAan+B,EAAQ1D,KAAK+vB,UAChD,MAAMgT,EAAU/iC,KAAK+iC,QACfiqC,EAAsBjqC,EAAQn9B,OAAS,EAAIm9B,EAAQ,GAAG9wB,UAAOrO,EACnE,IAAIqpE,EAOJ,GANIjtE,KAAKwrE,gBACLyB,EAAgBjtE,KAAKosE,uBAAuBpsE,KAAKwrE,gBAEjDxrE,KAAKyrE,cACLzrE,KAAK+sE,sBAAsB/sE,KAAKyrE,cAEhCzrE,KAAK+iC,QAAQn9B,OAAS,EAAG,CACzB,MAAMsoB,GAAQluB,KAAKwzB,WAAaspB,GAAsBoB,IAAM9mB,EAAM81C,aAAe91C,EAAM+1C,YAAc/1C,EAAM+1C,UACvGF,GACAjtE,KAAK2sE,gBAAgBz+C,EAAM++C,EAAch7D,KAAMg7D,EAAclqC,SAEjE/iC,KAAK2sE,gBAAgBz+C,EAAM8+C,EAAqBjqC,GAChD,IAAK,IAAIr6B,EAAI,EAAGA,EAAI1I,KAAK+iC,QAAQn9B,SAAU8C,EACvC1I,KAAK8rE,eAAe9rE,KAAK+iC,QAAQr6B,GAAI1I,KAAK+iC,QAAQr6B,EAAI,GAE9D,CACA1I,KAAK+qE,WAAY,CACrB,CAIA75D,YAGI,OAFKlR,KAAK+qE,WACN/qE,KAAK26D,SACF36D,KAAKmR,MAChB,CACA4E,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAMyB,EAAMthB,eACb9V,KAAK+qE,WACN/qE,KAAK26D,SACT36D,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChBA,EAAI0V,UAAU,eAAgBrrC,KAAK6S,aAAa,OAChD,IAAK,IAAInK,EAAI,EAAGA,EAAI1I,KAAKmR,OAAOvL,OAAQ8C,IAAK,CACzC,MAAM4mB,EAAQtvB,KAAKmR,OAAOzI,GACpB/E,EAAI3D,KAAK2D,EAAI3D,KAAK4rE,WAAWljE,GACnC4mB,EAAM6H,SAASC,GACf9H,EAAMxY,WAAW6e,GACjBrG,EAAM8I,cAAcz0B,EACxB,CACAgyB,EAAI4V,aACJvrC,KAAK2V,aAAaggB,EACtB,EAIJ41C,GAAa1oC,kBAAoB,CAC7B,IAAK,CACD9J,MAAO,EACPE,MAAO,GAEXv0B,EAAG,CACCq0B,MAAO,EACPE,MAAO,GAEXr0B,EAAG,CACCm0B,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEXzc,GAAI,CACAuc,MAAO,EACPE,MAAO,GAEXxc,GAAI,CACAsc,MAAO,EACPE,MAAO,GAEX5yB,EAAG,CACC0yB,MAAO,EACPE,MAAO,GAEXrc,IAAK,CACDmc,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,IAAK,CACDF,MAAO,EACPE,MAAO,GAEX,KAAM,CACFF,MAAO,EACPE,MAAO,GAEX,MAAO,CACHF,MAAO,EACPE,MAAO,GAEXvc,GAAI,CACAqc,MAAO,EACPE,MAAO,IAEXtc,IAAK,CACDoc,MAAO,EACPE,MAAO,KC5RR,MAAMm0C,WAAmBhwB,GACjB17C,sBACP,OAAOG,EAASurE,UACpB,CACA3rE,YAAYwQ,EAAMtO,EAAG6wB,GACjBjxB,QACAvD,KAAKqtE,YAAcp7D,EACnBjS,KAAK2D,EAAIA,EACT3D,KAAKu0B,QAAU,EACfv0B,KAAKw0B,QAAUA,EACfx0B,KAAK2X,WACT,CACA21D,UAAU3pE,GAEN,OADA3D,KAAKu0B,QAAU5wB,EACR3D,IACX,CACAutE,UAAUzkE,GAEN,OADA9I,KAAKw0B,QAAU1rB,EACR9I,IACX,CACA+V,KAAKqhB,EAAOzzB,GAER,OADA3D,KAAKsW,cACGtW,KAAKqtE,aACT,KAAKD,GAAWn7D,KAAKu7D,WACjBxtE,KAAKytE,cAAcr2C,EAAOzzB,EAAIyzB,EAAMxH,YACpC,MACJ,KAAKw9C,GAAWn7D,KAAKy7D,UACjB1tE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,QAAQ,GACtC,MACJ,KAAKypE,GAAWn7D,KAAK27D,WACjB5tE,KAAK6tE,eAAez2C,EAAOzzB,GAC3B,MACJ,KAAKypE,GAAWn7D,KAAK67D,YACjB9tE,KAAK6tE,eAAez2C,EAAOzzB,EAAIyzB,EAAMxH,YACrC,MACJ,KAAKw9C,GAAWn7D,KAAK87D,GACjB/tE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,QAAQ,GACtC,MACJ,KAAKypE,GAAWn7D,KAAK+7D,WACjBhuE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,WAAW,GACzC,MACJ,KAAKypE,GAAWn7D,KAAKg8D,WACjBjuE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,gBAAgB,GAC9C,MACJ,KAAKypE,GAAWn7D,KAAKi8D,GACjBluE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,QAAQ,GACtC,MACJ,KAAKypE,GAAWn7D,KAAKk8D,WACjBnuE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,WAAW,GACzC,MACJ,KAAKypE,GAAWn7D,KAAKm8D,WACjBpuE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,gBAAgB,GAC9C,MACJ,KAAKypE,GAAWn7D,KAAKo8D,KACjBruE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,QAAQ,GACtC,MACJ,KAAKypE,GAAWn7D,KAAKq8D,QACjBtuE,KAAK2tE,eAAev2C,EAAOzzB,EAAG,MAAM,GAK5C,OAAO3D,IACX,CACAytE,cAAcr2C,EAAOzzB,GACjB,MAAMmF,EAAIsuB,EAAMua,eAAeva,EAAM0Y,eAAiB9vC,KAAKw0B,QAE3D,OADA/E,EAAM49B,YAAYj2B,EAAMthB,eAAgB9V,KAAK2D,EAAIA,EAAI3D,KAAKu0B,QAASzrB,EAAIklB,EAAOyU,mBAAmBrxB,aAAa,gCAAiC,GAAI,OAAQ,CAAE9P,SAAU,SAChKtB,IACX,CACA6tE,eAAez2C,EAAOzzB,GAClB,MAAMmF,EAAIsuB,EAAMua,eAAeva,EAAM0Y,eAAiB9vC,KAAKw0B,QAE3D,OADA/E,EAAM49B,YAAYj2B,EAAMthB,eAAgB9V,KAAK2D,EAAIA,EAAI3D,KAAKu0B,QAASzrB,EAAIklB,EAAOyU,mBAAmBrxB,aAAa,iCAAkC,GAAI,QAAS,CAAE9P,SAAU,UAClKtB,IACX,CACA2tE,eAAev2C,EAAOzzB,EAAGoB,EAAMwpE,GAC3B,MAAM54C,EAAMyB,EAAMthB,eAClB6f,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB,IAAIu3D,EAAS,EACTC,EAAW,EACf,MAAMC,EAAgBt3C,EAAMolB,gBAAkBx8C,KAAK2D,EACnD,OAAQ3D,KAAKqtE,aAET,KAAKD,GAAWn7D,KAAKy7D,UAEjBc,EAASxuE,KAAK2D,EAAIyzB,EAAMu3C,sBACxBF,EACID,EACI74C,EAAIusB,YAAYn9C,GAAM0F,MACtBujB,EAAOyU,mBAAmBrxB,aAAa,sCAC/C,MAEJ,KAAKg8D,GAAWn7D,KAAK87D,GACrB,KAAKX,GAAWn7D,KAAKg8D,WACrB,KAAKb,GAAWn7D,KAAKi8D,GACrB,KAAKd,GAAWn7D,KAAKm8D,WACrB,KAAKhB,GAAWn7D,KAAKo8D,KACjBG,EACIxuE,KAAK2D,EACDA,EACA3D,KAAKu0B,QACL6C,EAAMxH,WACN5B,EAAOyU,mBAAmBrxB,aAAa,sCACvCs9D,EACA/4C,EAAIusB,YAAYn9C,GAAM0F,MAC9B,MAEJ,QACI+jE,EACIxuE,KAAK2D,EACDA,EACA3D,KAAKu0B,QACL6C,EAAMxH,WACN5B,EAAOyU,mBAAmBrxB,aAAa,sCACvCs9D,EACA/4C,EAAIusB,YAAYn9C,GAAM0F,MACtBujB,EAAOyU,mBAAmBrxB,aAAa,sCAC/Cq9D,EACID,EACI74C,EAAIusB,YAAYn9C,GAAM0F,MACtBujB,EAAOyU,mBAAmBrxB,aAAa,sCAGvD,MAAMtI,EAAIsuB,EAAMua,eAAeva,EAAM0Y,eACjC9vC,KAAKw0B,QACLxG,EAAOyU,mBAAmBrxB,aAAa,sCAM3C,OALIm9D,GACA9+C,EAAM49B,YAAY13B,EAAK84C,EAAU3lE,EAAG,GAAI,OAAQ,CAAExH,SAAU,SAEhEq0B,EAAIqc,SAASjtC,EAAMypE,EAAQ1lE,EAAI,GAC/B6sB,EAAI/f,UACG5V,IACX,EAEJotE,GAAWj2D,UAAY,CACnB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QAErB0+D,GAAWn7D,KAAO,CACdysC,KAAM,EACNgvB,UAAW,EACXF,WAAY,EACZI,WAAY,EACZE,YAAa,EACbC,GAAI,EACJC,WAAY,EACZC,WAAY,EACZC,GAAI,EACJC,WAAY,GACZC,WAAY,GACZC,KAAM,GACNC,QAAS,IC1JN,MAAMM,WAAqBxxB,GACnB17C,sBACP,OAAOG,EAAS+sE,YACpB,CACAntE,YAAYotE,EAASlrE,EAAG4rB,EAASu/C,GAAW,GACxCvrE,QACAvD,KAAKy5B,SAAS,IACdz5B,KAAK6uE,QAAUA,EACf7uE,KAAK2D,EAAIA,EACT3D,KAAK+uE,QAAU,EACf/uE,KAAKuvB,QAAUA,EACfvvB,KAAK8uE,SAAWA,EAChB9uE,KAAK2X,WACT,CACAq3D,gBAAgBH,GAEZ,OADA7uE,KAAK6uE,QAAUA,EACR7uE,IACX,CACAstE,UAAU3pE,GAEN,OADA3D,KAAK+uE,QAAUprE,EACR3D,IACX,CACAutE,UAAUzkE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACA+V,KAAKqhB,EAAO23C,GACR,MAEMp5C,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACLqf,EAAI3gB,OACJ2gB,EAAIjgB,aALgB,GAMpBigB,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAMg4B,EAAgBzD,GAAc0D,OAAOlvC,KAAKiX,UAC1C0Y,EAAYsf,EAAcV,oBAAoBvuC,KAAK6uE,SACnDI,EAAQhgC,EAAcf,kBAAkBluC,KAAK6uE,SAC7CpkB,EAAawkB,EAAMvkE,OACnBwkE,GAAY,EAAID,EAAMnhC,KACtBrjC,EAAQklB,EAAY,EACpBjlB,EAAS+/C,EAAa,EAEtB3hD,EAAIsuB,EAAMua,eAAe,KAAO3xC,KAAKuvB,QACrC5rB,EAAI3D,KAAK2D,EAAIorE,EAQnB,OAPI/uE,KAAK8uE,WACLn5C,EAAIQ,YACJR,EAAIqrC,KAAKr9D,EAAGmF,EAAI4B,EAASwkE,EAAUzkE,EAAOC,GAC1CirB,EAAI/G,UAER+G,EAAIqc,SAAShyC,KAAK6uE,QAASlrE,EArBX,EAqBwBmF,EArBxB,GAsBhB6sB,EAAI/f,UACG5V,IACX,EAEJ4uE,GAAaz3D,UAAY,CACrB3I,OAAQd,EAAKe,WACbL,KAAM,GACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QCxDd,MAAMygE,WAAmB/xB,GACjB17C,sBACP,OAAOG,EAASstE,UACpB,CACA1tE,YAAY2tE,EAAOzrE,EAAG4rB,GAClBhsB,QAEAvD,KAAKynC,eAAiB,CAAEkT,iBAAkB,IAC1C36C,KAAKovE,MAAQA,EACbpvE,KAAKwzB,SAAWspB,GAAsB9jB,MACtCh5B,KAAK2D,EAAIA,EACT3D,KAAK+uE,QAAU,GACf/uE,KAAKuvB,QAAUA,EACfvvB,KAAK2X,WACT,CACA03D,SAASD,GAEL,OADApvE,KAAKovE,MAAQA,EACNpvE,IACX,CACAstE,UAAU3pE,GAEN,OADA3D,KAAK+uE,QAAUprE,EACR3D,IACX,CACAutE,UAAUzkE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACA+V,KAAKqhB,EAAO23C,GACR,MAAMp5C,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACL,MAAM+X,EAAUruB,KAAKynC,eAGfpY,EAAQhB,EAAQssB,iBAAmB,GACnChqC,EAAO3Q,KAAKovE,MAAMz+D,KAClB4d,EAAWvuB,KAAKovE,MAAM7gD,SACtBkrB,EAAOz5C,KAAKovE,MAAM31B,MAAQ,EAC1B61B,EAAMtvE,KAAKovE,MAAME,IACvB,IAAI3rE,EAAI3D,KAAK2D,EAAI3D,KAAK+uE,QAAUA,EAChC,MAAMjmE,EAAIsuB,EAAMua,eAAe,GAAK3xC,KAAKuvB,QACzCoG,EAAI3gB,OACJ,MAAMi6B,EAAgBzD,GAAc0D,OAAOlvC,KAAKiX,UAMhD,GALItG,IACAglB,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAASrhC,EAAMhN,EAAGmF,GACtBnF,GAAKsrC,EAAcV,oBAAoB59B,IAEvC4d,GAAY+gD,EAAK,CAEjB,MAAMC,EAAelvE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKiX,UAAW,CAAE5I,OAAQ,SAAUC,MAAO,WAChGqnB,EAAI5e,QAAQw4D,GACZ,MAAMC,EAAoBhkC,GAAc0D,OAAOqgC,GAC3C5+D,IACAhN,GAAK6rE,EAAkBjhC,oBAAoB,KAC3C5Y,EAAIqc,SAAS,IAAKruC,EAAGmF,GACrBnF,GAAK6rE,EAAkBjhC,oBAAoB,MAE/C,MAAMgM,EAAavsB,EAAOqhB,cAAc9gB,GAKxC,GAJA5qB,GAAK,EAAI0rB,EACTI,EAAM49B,YAAY13B,EAAKhyB,EAAGmF,EAAGulB,EAAQssB,iBAAkBJ,EAAWhqB,WAClE5sB,GAAK8rB,EAAMG,SAAS2qB,EAAWhqB,UAAWlC,EAAQssB,kBAE9CJ,EAAWxnB,KAAM,CACjB,IAAI08C,EAAc,GACdl1B,EAAW7mB,aACX+7C,GAAe,GAAKl1B,EAAW7mB,WAAa,IAChD+7C,GAAepgD,EACf,MAAM8Z,EAAQrgC,EAAI2mE,EAElB,GADA95C,EAAImqB,SAASn8C,EAAI0rB,EAAO8Z,EAAO9Z,EAAOogD,GAClCl1B,EAAWl3C,MAAQk3C,EAAW3mB,iBAAkB,CAChD,MAAM87C,EAAcjgD,EAAM49B,YAAY13B,EAAKhyB,EAAGwlC,EAAO9a,EAAQssB,iBAAkBJ,EAAW3mB,iBAAkB,CACxGtyB,SAAU,oBAEdqC,GAAM+rE,EAAYjlE,MAAQujB,EAAOyC,oBAAuBi/C,EAAY5gE,KAAK+B,UAAUI,UACvF,CACJ,CAEA,IAAK,IAAIvI,EAAI,EAAGA,EAAI+wC,EAAM/wC,IACtB/E,GAAK,EAAI0rB,EACTsG,EAAIQ,YACJR,EAAI0f,IAAI1xC,EAAGmF,EAAI,EAAIumB,EAAO,EAAIA,EAAO,EAAa,EAAVpqB,KAAKC,IAAQ,GACrDywB,EAAIa,OAERb,EAAIqc,SAAS,MAAQs9B,GAAO3+D,EAAO,IAAM,IAAKhN,EAAI,EAAI0rB,EAAOvmB,EACjE,CAEA,OADA6sB,EAAI/f,UACG5V,IACX,EAEJmvE,GAAWh4D,UAAY,CACnB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QV7FrB,SAAWs2D,GACPA,EAAkBA,EAAwB,KAAI,GAAK,OACnDA,EAAkBA,EAA0B,OAAI,GAAK,SACrDA,EAAkBA,EAAyB,MAAI,GAAK,OACvD,CAJD,CAIGA,KAAsBA,GAAoB,CAAC,IAOvC,MAAM2K,WAAiBjtE,GACfhB,sBACP,OAAOG,EAAS8tE,QACpB,CAEWC,oBACP,MAAO,CACHC,MAAO,CACHxsE,KAAM,SAEVupB,GAAI,CACAvpB,KAAM,iBAEVmpB,QAAS,CACLnpB,KAAM,mBAEVysE,cAAe,CACXzsE,KAAM,sBAEV0sE,cAAe,CACX1sE,KAAM,mBAEVkF,EAAG,CACClF,KAAM,gBAEV2sE,EAAG,CACC3sE,KAAM,gBAEV+uB,EAAG,CACC/uB,KAAM,gBAEVgF,EAAG,CACChF,KAAM,oBAEV4sE,EAAG,CACC5sE,KAAM,YAEV6sE,KAAM,CACF7sE,KAAM,QAEV8sE,WAAY,CACR9sE,KAAM,oBAEV+sE,YAAa,CACT/sE,KAAM,mBAEVgtE,iBAAkB,CACdhtE,KAAM,WAEVitE,eAAgB,CACZjtE,KAAM,iBAEVktE,OAAQ,CACJltE,KAAM,mBAEV85D,KAAM,CACF95D,KAAM,kBAEVqpB,KAAM,CACFrpB,KAAM,gBAEVspB,cAAe,CACXtpB,KAAM,qBAGlB,CACA5B,YAAYi4C,GAaR,GAZAn2C,MAAMm2C,GACN15C,KAAK+E,KAAO20C,EAAW30C,MAAQ,GAC/B/E,KAAKwwE,YAAc92B,EAAW82B,YAC9BxwE,KAAKywE,UAAY/2B,EAAW+2B,UAC5BzwE,KAAK+W,QAAQ2iC,EAAW5qC,MACxB9O,KAAKgE,KAAO01C,EAAW11C,MAAQ,EAC/BhE,KAAK0wE,OAASh3B,EAAWg3B,SAAU,EACnC1wE,KAAKg2C,aAAe0D,EAAW1D,eAAgB,EAC/Ch2C,KAAK2wE,cAAgB3L,GAAkB5rC,KAInCsgB,EAAWpqB,MAAO,CAClB,MAAMshD,EAASjB,GAASC,OAAOl2B,EAAWpqB,OAC1C,IAAKshD,EACD,MAAM,IAAIztE,EAAa,uBAAyBu2C,EAAWpqB,OAC/DtvB,KAAKsvB,MAAQ,IAAIG,EAAMmhD,EAAOvtE,KAAM,GAAI,CAAE/B,SAAU,aACpDtB,KAAKy5B,SAASz5B,KAAKsvB,MAAMxe,aAAarG,MAC1C,MAEIzK,KAAKsvB,WAAQ1rB,CAErB,CAEAotC,iBAAiBH,GAEb,OADA7wC,KAAK2wE,cAAgB9/B,EACd7wC,IACX,CAEAwsD,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAusD,UACI,OAAOvsD,KAAKgE,IAChB,CAEAk9C,UACI,OAAOlhD,KAAK+E,IAChB,CAEAmzC,YACI,GAAIl4C,KAAKm4C,aACL,OACJ,MAAMvd,EAAc56B,KAAKy2C,iBAAiB,0CAC1C,GAAIz2C,KAAK0wE,OACL1wE,KAAKy5B,SAAS,QAGd,GAAIz5B,KAAKsvB,WAGJ,CACD,MAAMqG,EAAM31B,KAAK8V,eACjB6f,EAAI5e,QAAQ/W,KAAKiX,UACjBjX,KAAKy5B,SAAS9D,EAAIusB,YAAYliD,KAAK+E,MAAM0F,MAC7C,CAEAzK,KAAK2wE,gBAAkB3L,GAAkBlsC,OACzC94B,KAAK44C,oBAAsB54C,KAAKyK,MAAQ,EAEnCzK,KAAK2wE,gBAAkB3L,GAAkB1rC,QAC9Ct5B,KAAK44C,oBAAsB54C,KAAKyK,OAGpCzK,KAAKk5C,qBAAuBte,EAAY9pB,aAAayrC,QAAU,EAC/Dv8C,KAAKm4C,cAAe,CACxB,CAKApiC,OACI,MAAM4f,EAAM31B,KAAK8V,eACXshB,EAAQp3B,KAAKm4B,aACbyC,EAAc56B,KAAKy2C,iBAAiB,qCAC1Cz2C,KAAKsW,cAEL,IAAI3S,EAAI3D,KAAK04C,eAAiB9d,EAAY9pB,aAAayrC,QAAU,EAEjE,MAAM9xC,EAAQzK,KAAK4vB,WAOnB,IAAI9mB,EACJ,GAPI9I,KAAK2wE,gBAAkB3L,GAAkBlsC,OACzCn1B,GAAK8G,EAAQ,EAERzK,KAAK2wE,gBAAkB3L,GAAkB1rC,QAC9C31B,GAAK8G,GAGLzK,KAAKsvB,MACLxmB,EAAIsuB,EAAMmM,YAAYvjC,KAAKgE,MAAQ,GACnChE,KAAKsvB,MAAM0I,OAAOrC,EAAKhyB,EAAGmF,OAEzB,CACDA,EAAIsuB,EAAMmM,YAAYvjC,KAAKgE,MAAQ,GACnChE,KAAK8U,WAAW6gB,GAChBA,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAAShyC,KAAK+E,KAAMpB,EAAGmF,GAC3B,MAAM4B,EAASirB,EAAIusB,YAAYliD,KAAK+E,MAAM2F,QAGpC,OAAE8D,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SAEvCqxC,EAAkB56C,EAAKq2C,UAAU31C,EAAM,SACzCpO,KAAKwwE,cACL76C,EAAI5e,QAAQvI,EAAQ85C,EAAiBj6C,EAAQC,GAC7CqnB,EAAIqc,SAAShyC,KAAKwwE,YAAa7sE,EAAI3D,KAAKyK,MAAQ,EAAG3B,EAAI4B,EAAS,MAEhE1K,KAAKywE,YACL96C,EAAI5e,QAAQvI,EAAQ85C,EAAiBj6C,EAAQC,GAC7CqnB,EAAIqc,SAAShyC,KAAKywE,UAAW9sE,EAAI3D,KAAKyK,MAAQ,EAAG3B,EAAI4B,EAAS,IAAM,IAExE1K,KAAK2V,aAAaggB,EACtB,CACJ,EAEJg6C,GAASx4D,UAAY,CACjB3I,OAAQd,EAAKe,WACbL,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QAErBihE,GAASkB,cAAgB7L,GWzMlB,MAAM8L,WAAkB1zB,GAChB17C,sBACP,OAAOG,EAASivE,SACpB,CACArvE,YAAYsD,EAAMyuB,EAAUnF,EAAU,CAAC,GACnC9qB,QACAvD,KAAKy5B,SAAS,IACdz5B,KAAK+E,KAAOA,EACZ/E,KAAKwzB,SAAWA,EAChBxzB,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEu3D,QAAS,EAAGx/C,QAAS,EAAGohD,cAAehB,GAASkB,cAAc/3C,QAAUzK,GACvGruB,KAAK2X,WACT,CACAo5D,aAAahsE,GAET,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACAstE,UAAU3pE,GAEN,OADA3D,KAAK+uE,QAAUprE,EACR3D,IACX,CACAutE,UAAUzkE,GAEN,OADA9I,KAAKuvB,QAAUzmB,EACR9I,IACX,CACAgxE,QAAQjsE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CACA+V,KAAKqhB,GACD,MAAMzB,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACLqf,EAAI3gB,OACJ2gB,EAAIjgB,aAAa,GACjBigB,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAMi6B,EAAavb,EAAIusB,YAAY,GAAKliD,KAAK+E,MAAM0F,MACnD,IAAI9G,EACAmF,EACJ,OAAQ9I,KAAKwzB,UACT,KAAKspB,GAAsB1jB,KAC3B,KAAK0jB,GAAsBxjB,MACvBxwB,GAAKsuB,EAAMmM,YAAY,GAAKnM,EAAM65C,kBAAoB,EAAIjxE,KAAKquB,QAAQkB,QAEnE5rB,EADA3D,KAAKwzB,WAAaspB,GAAsB1jB,KACpChC,EAAMnuB,OAASioC,EAAa,GAAKlxC,KAAKquB,QAAQ0gD,QAG9C33C,EAAMnuB,OAASmuB,EAAMxH,WAAa,GAAK5vB,KAAKquB,QAAQ0gD,QAE5D,MACJ,KAAKjyB,GAAsB9jB,MAC3B,KAAK8jB,GAAsB5jB,MACvBv1B,EAAIyzB,EAAMnuB,OAASjJ,KAAKquB,QAAQ0gD,QAC5B/uE,KAAKquB,QAAQsiD,gBAAkB3L,GAAkBlsC,OACjDn1B,GAAKyzB,EAAMxH,WAAa,EAAIshB,EAAa,EAEpClxC,KAAKquB,QAAQsiD,gBAAkB3L,GAAkB1rC,QACtD31B,GAAKyzB,EAAMxH,WAAashB,GAGxBpoC,EADA9I,KAAKwzB,WAAaspB,GAAsB9jB,MACpC5B,EAAMua,eAAe,GAAK3xC,KAAKquB,QAAQkB,QAGvC6H,EAAMwa,kBAAkB,GAAK5xC,KAAKquB,QAAQkB,QAElD,MACJ,QACI,MAAM,IAAIpsB,EAAa,kBAAmB,uCAIlD,OAFAwyB,EAAIqc,SAAS,GAAKhyC,KAAK+E,KAAMpB,EAAGmF,EAAI,GACpC6sB,EAAI/f,UACG5V,IACX,EAEJ8wE,GAAU35D,UAAY,CAClB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QV7ErB,SAAWu2D,GACPA,EAAUA,EAAgB,KAAI,GAAK,OACnCA,EAAUA,EAAiB,MAAI,GAAK,QACpCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAe,IAAI,GAAK,MAClCA,EAAUA,EAAqB,UAAI,GAAK,WAC3C,CAND,CAMGA,KAAcA,GAAY,CAAC,IACvB,MAAMiM,WAAc9zB,GACZ17C,sBACP,OAAOG,EAASqvE,KACpB,CACWj/D,kBACP,OAAOgzD,EACX,CACAxjE,YAAYwQ,EAAMo5C,EAAQ1nD,EAAG6wB,GACzBjxB,QACAvD,KAAKmxE,MAAQl/D,EACbjS,KAAK2D,EAAIA,EACT3D,KAAKw0B,QAAUA,EACfx0B,KAAKqrD,OAASA,EACdrrD,KAAK2X,WACT,CACA41D,UAAUzkE,GAEN,OADA9I,KAAKw0B,QAAU1rB,EACR9I,IACX,CACA+V,KAAKqhB,EAAOzzB,GACR,MAAMgyB,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACL,IAAI7L,EAAQ2sB,EAAMxH,WAAajsB,EAC/B,MAAMytE,EAAQh6C,EAAMua,eAAeva,EAAM0Y,eAAiB9vC,KAAKw0B,QACzD68C,EAAc,IAAMj6C,EAAMkM,yBAChC,OAAQtjC,KAAKmxE,OACT,KAAKlM,GAAU7lB,MACXzpB,EAAImqB,SAAS9/C,KAAK2D,EAAIA,EAAGytE,EAAO,EAAGC,GACnC,MACJ,KAAKpM,GAAU/mB,IACXzzC,GAAS,EACTkrB,EAAImqB,SAAS9/C,KAAK2D,EAAIA,EAAI8G,EAAO2mE,EAAO,EAAGC,GAC3C,MACJ,KAAKpM,GAAUqM,UACX7mE,GAAS,EACTkrB,EAAImqB,SAAS9/C,KAAK2D,EAAIA,EAAGytE,EAAO,EAAGC,GACnC17C,EAAImqB,SAAS9/C,KAAK2D,EAAIA,EAAI8G,EAAO2mE,EAAO,EAAGC,GAanD,OAPIrxE,KAAKmxE,QAAUlM,GAAU7lB,OAASp/C,KAAKmxE,QAAUlM,GAAUqM,YAC3D37C,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB0e,EAAIqc,SAAShyC,KAAKqrD,OAAQrrD,KAAK2D,EAAIA,EAAI,EAAGytE,EAAQ,IAClDz7C,EAAI/f,WAER+f,EAAImqB,SAAS9/C,KAAK2D,EAAIA,EAAGytE,EAAO3mE,EAAO,GAChCzK,IACX,EAEJkxE,GAAM/5D,UAAY,CACd3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUmC,QW9Dd,MAAM6iE,WAA2B9hD,EACpChuB,YAAY+vE,EAAeC,EAAWC,EAAWruE,EAAM6wB,EAAO7F,GAC1D,IAAIxgB,EACJtK,MAAMF,EAAM6wB,EAAO7F,GACnBruB,KAAKwxE,cAAgBA,EACrBxxE,KAAK42B,UAAY,GACjB52B,KAAK62B,UAAY,GACjB,IAAI86C,EAAW,EACf,IAAK,IAAIjpE,EAAI,EAAGA,EAAI+oE,EAAU7rE,SAAU8C,EAAG,CACvC,IAAIkpE,EAAcH,EAAU/oE,GAC5B,OAAQ+oE,EAAU/oE,IACd,IAAK,IACDkpE,EAAc,QACd,MACJ,IAAK,IACDA,EAAcF,EAAU9rE,OAAS,EAAI,YAAc,OACnD,MACJ,IAAK,IACDgsE,EAAcF,EAAU9rE,OAAS,EAAI,kBAAoB,aACzD,MACJ,IAAK,IACDgsE,EAAcF,EAAU9rE,OAAS,EAAI,mBAAqB,cAGlE,MAAMisE,EAAW,IAAIpiD,EAAM,UAAYmiD,EAAa5xE,KAAKwxE,cAAct9C,OACvEl0B,KAAK42B,UAAUniB,KAAKo9D,GACpBF,GAAmD,QAAtC9jE,EAAKgkE,EAAS/gE,aAAarG,aAA0B,IAAPoD,EAAgBA,EAAK,CACpF,CACA,IAAIikE,EAAW,EACf,IAAK,IAAIppE,EAAI,EAAGA,EAAIgpE,EAAU9rE,SAAU8C,EAAG,CACvC,IAAIkpE,EAAcF,EAAUhpE,GAC5B,OAAQgpE,EAAUhpE,IACd,IAAK,IACDkpE,EAAc,YACd,MACJ,IAAK,IACDA,EAAc,kBACd,MACJ,IAAK,IACDA,EAAc,mBAGtB,MAAMG,EAAW,IAAItiD,EAAM,UAAYmiD,EAAa5xE,KAAKwxE,cAAct9C,OACvEl0B,KAAK62B,UAAUpiB,KAAKs9D,GACpBD,GAAYpuE,EAAQquE,EAASjhE,aAAarG,MAC9C,CACAzK,KAAKyK,MAAQxF,KAAK8E,IAAI4nE,EAAUG,GAChC9xE,KAAKg/C,KAAOh/C,KAAK8Q,aAAaykB,MAC9Bv1B,KAAKgyE,WAAahyE,KAAKyK,MAAQknE,GAAY,EAC3C3xE,KAAKiyE,WAAajyE,KAAKyK,MAAQqnE,GAAY,EAC3C9xE,KAAKg3B,OACT,CACAlmB,aACI,MAAO,CACHykB,MAAOv1B,KAAKg/C,KACZxpB,MAAOx1B,KAAKg/C,KAAOh/C,KAAKyK,MACxBA,MAAOzK,KAAKyK,MAEpB,CACA2tB,cAAcz0B,GACV,MAAMyzB,EAAQp3B,KAAKm4B,aACbxC,EAAM31B,KAAK8V,eACjB,IAAIo8D,EAAUvuE,EAAI3D,KAAKgyE,UACnBlpE,EAAI,EAEJA,EADA9I,KAAK62B,UAAUjxB,OAAS,EACpBwxB,EAAMmM,YAAYvjC,KAAKwxE,cAAcW,UAEpC/6C,EAAMmM,YAAYvjC,KAAKwxE,cAAcW,SAAW/6C,EAAMmM,YAAYvjC,KAAKwxE,cAAcY,aAAe,EAC7G,IAAK,IAAI1pE,EAAI,EAAGA,EAAI1I,KAAK42B,UAAUhxB,SAAU8C,EAAG,CAC5C,MAAM4mB,EAAQtvB,KAAK42B,UAAUluB,GAC7B+mB,EAAMwG,cAAcN,EAAKrG,EAAMxe,aAAawjB,QAASt0B,KAAKqvB,MAAO6iD,EAAUlyE,KAAKu0B,QAASzrB,GACzFopE,GAAWxuE,EAAQ4rB,EAAMxe,aAAarG,MAC1C,CACAynE,EAAUvuE,EAAI3D,KAAKiyE,UACnBnpE,EAAIsuB,EAAMmM,YAAYvjC,KAAKwxE,cAAcY,YACzC,IAAK,IAAI1pE,EAAI,EAAGA,EAAI1I,KAAK62B,UAAUjxB,SAAU8C,EAAG,CAC5C,MAAM4mB,EAAQtvB,KAAK62B,UAAUnuB,GAC7B1I,KAAKwxE,cAAcn0B,iBAAiB/tB,EAAO8H,EAAOp3B,KAAKwxE,cAAcjlB,WACrE98B,EAAMwG,cAAcN,EAAKrG,EAAMxe,aAAawjB,QAASt0B,KAAKqvB,MAAO6iD,EAAU5iD,EAAMxe,aAAayjB,QAASzrB,GACvGopE,GAAWxuE,EAAQ4rB,EAAMxe,aAAarG,MAC1C,CACJ,EC3DG,MAAM4nE,WAAsBj1B,GACpB17C,sBACP,OAAOG,EAASwwE,aACpB,CACWlhE,oBACP,MAAO,CACHmH,EAAG,CACCjV,KAAM,gBACN6wB,MAAO,GACPlwB,KAAM,GAEV,KAAM,CACFX,KAAM,mBACN6wB,MAAO,GACPlwB,KAAM,GAGlB,CACAvC,YAAY6wE,EAAW,MAAOC,EAAgB,GAAIC,GAAgB,GAC9DjvE,QACAvD,KAAKsyE,SAAW,MAChBtyE,KAAKgE,KAAO,EACZhE,KAAKyyE,YAAa,EAClBzyE,KAAKwyE,cAAgBA,EACrB,MAAMh+B,EAAU+9B,EAEV/vC,EAAYxU,EAAOyU,mBACzBziC,KAAKk0B,MAAQsO,EAAUpxB,aAAa,gBACpC,MAAMshE,EAAgBlwC,EAAUpxB,aAAa,mBAAoB,GACjEpR,KAAKmyE,QAAU,EAAIO,EACnB1yE,KAAKoyE,WAAa,EAAIM,EACtB1yE,KAAKs6B,YAAYwiB,GAAsBsC,OACvCp/C,KAAK2yE,WAAWL,GAChBtyE,KAAKw9C,WAAWhJ,EACpB,CAMAo+B,cAAcN,GACV,IAAIzkE,EAAIoF,EACR,GAAiB,MAAbq/D,GAAiC,OAAbA,EAAmB,CACvC,MAAM,KAAEtuE,EAAI,KAAEX,EAAI,MAAE6wB,GAAUm+C,GAAclhE,OAAOmhE,GACnD,MAAO,CACHtuE,OACAuU,KAAK,EACL+W,MAAO,IAAIG,EAAMpsB,EAAM6wB,GAE/B,CACIl0B,KAAKwyE,eAnEY,CAACF,IAC1B,MAAMO,EAAUP,EAAS3pE,MAAM,KAC/B,GAAuB,IAAnBkqE,EAAQjtE,QAA+B,MAAfitE,EAAQ,IAA6B,MAAfA,EAAQ,GACtD,MAAM,IAAI1vE,EAAa,mBAAoB,sBAAsBmvE,sDAErEO,EAAQj+D,SAASy2C,IAEb,GAAoC,GAAhC,gBAAgBynB,KAAKznB,GACrB,MAAM,IAAIloD,EAAa,mBAAoB,sBAAsBmvE,oCACrE,GACF,EA0DMS,CAAqBT,GAEzB,MAAMr9C,EAAQq9C,EAAS3pE,MAAM,KAC7B,MAAO,CACH3E,KAAM,EACNuU,KAAK,EACL+W,MAAOtvB,KAAKgzE,uBAA2C,QAAnBnlE,EAAKonB,EAAM,UAAuB,IAAPpnB,EAAgBA,EAAK,GAAwB,QAAnBoF,EAAKgiB,EAAM,UAAuB,IAAPhiB,EAAgBA,EAAK,IAEjJ,CAKA+/D,uBAAuBvB,EAAWC,GAE9B,OAAO,IAAIH,GAAmBvxE,KAAMyxE,EAAWC,EAAW,WAAY1xE,KAAKk0B,MAC/E,CAKA++C,UACI,MAAM,KAAEjvE,EAAI,WAAEyuE,EAAU,MAAEnjD,GAAUtvB,KACpC,MAAO,CAAEgE,OAAMuU,IAAKk6D,EAAYnjD,QACpC,CAMAqjD,WAAWL,GACPtyE,KAAKsyE,SAAWA,EAChB,MAAMz+D,EAAO7T,KAAK4yE,cAAcN,GAIhC,OAHAtyE,KAAKkzE,SAASr/D,EAAKyb,OACnBtvB,KAAKyyE,WAAa5+D,EAAK0E,IACvBvY,KAAKgE,KAAO6P,EAAK7P,KACVhE,IACX,CAIAmzE,cACI,OAAOnzE,KAAKsyE,QAChB,CAKA/lB,UACI,OAAOvsD,KAAKgE,IAChB,CAMAwoD,QAAQxoD,GACJhE,KAAKgE,KAAOA,CAChB,CAKAs3C,WACI,OAAOt7C,KAAKsvB,KAChB,CAKA4jD,SAAS5jD,GACLtvB,KAAKsvB,MAAQA,EACbtvB,KAAKy5B,SAAS/1B,EAAQ1D,KAAKsvB,MAAMxe,aAAarG,OAClD,CAKA2oE,eACI,OAAOpzE,KAAKyyE,UAChB,CAIAY,aAAaC,GACTtzE,KAAKyyE,WAAaa,CACtB,CAKAv9D,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChBA,EAAI0V,UAAU,gBAAiBrrC,KAAK6S,aAAa,OACjD7S,KAAKsvB,MAAM6H,SAASC,GACpBp3B,KAAKsvB,MAAMxY,WAAW6e,GACtB31B,KAAKq9C,iBAAiBr9C,KAAKsvB,MAAO8H,EAAOp3B,KAAKgE,MAC9ChE,KAAKsvB,MAAM8I,cAAcp4B,KAAK2D,GAC9BgyB,EAAI4V,aACJvrC,KAAK2V,aAAaggB,EACtB,EClKJ,MAAM49C,GAA2B,CAC7B,CAACrxE,GAAQR,UAAW,EACpB,CAACwpE,GAAKxpE,UAAW,EACjB,CAAC6pE,GAAa7pE,UAAW,EACzB,CAAC2wE,GAAc3wE,UAAW,GAExB8xE,GAA2B,CAC7B,CAACnB,GAAc3wE,UAAW,EAC1B,CAAC6pE,GAAa7pE,UAAW,EACzB,CAACQ,GAAQR,UAAW,EACpB,CAACwpE,GAAKxpE,UAAW,GAEd,MAAM+xE,WAAc1/D,EACZrS,sBACP,OAAOG,EAAS4xE,KACpB,CAGWC,4BACP,MAAMlxC,EAAYxU,EAAOyU,mBACzB,OAAOD,EAAUpxB,aAAa,iBAAmBoxB,EAAUpxB,aAAa,sBAC5E,CAEWi2D,0BAEP,OADkBr5C,EAAOyU,mBACRrxB,aAAa,sBAClC,CACA3P,YAAYkC,EAAGmF,EAAG2B,EAAO4jB,GACrB9qB,QAEAvD,KAAK0K,OAAS,EACd1K,KAAK2D,EAAIA,EACT3D,KAAK8I,EAAIA,EACT9I,KAAKyK,MAAQA,EACbzK,KAAK+qE,WAAY,EACjB/qE,KAAKkyE,QAAUvuE,EAAI,EACnB3D,KAAK2zE,MAAQhwE,EAAI8G,EACjBzK,KAAK41C,UAAY,GACjB51C,KAAK4zE,QAAU,EACf5zE,KAAKkuB,KAAO,SACZluB,KAAK6zE,aAAUjwE,EACf5D,KAAK2X,YACL3X,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEs8D,mBAAoB,GAAIC,UAAW,EAAGC,WAAY,UAAWC,UAAU,EAAMC,WAAW,EAAMC,yBAA0BnmD,EAAOgD,oBAAqBojD,qBAAsB,EAAGC,qBAAsB,EAAGC,kBAAmB,EAAGC,qBAAsB,EAAGC,YAAa,IAAMnmD,GACvSruB,KAAKy0E,OAAS,CAAE9wE,EAAG3D,KAAK2D,EAAGmF,EAAG9I,KAAK8I,EAAGC,EAAG/I,KAAKyK,MAAOzB,EAAG,GACxDhJ,KAAK00E,uBAAyB,CAAEn/D,YAAa,OAAQE,UAAW,KAChEzV,KAAK20E,aAEL30E,KAAKunC,YAAY,IAAIrlC,GAAQlC,KAAKquB,QAAQ4lD,SAAWl3B,GAAYe,OAASf,GAAY2B,OAEtF1+C,KAAK40E,eAAe,IAAI1yE,GAAQlC,KAAKquB,QAAQ6lD,UAAYn3B,GAAYe,OAASf,GAAY2B,MAC9F,CAEAm2B,0BAA0BvmE,GACtBtO,KAAK00E,uBAAyBpmE,CAClC,CAEAqmD,4BACI,OAAOt0D,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK6U,YAAa7U,KAAK00E,uBAClE,CACAt+B,MAAM9E,GACF,OAAOtxC,KAAKquB,QAAQ8lD,yBAA2B7iC,CACnD,CACAqjC,aACI30E,KAAKquB,QAAQmmD,YAAc,GAC3B,IAAK,IAAI9rE,EAAI,EAAGA,EAAI1I,KAAKquB,QAAQ0lD,UAAWrrE,IACxC1I,KAAKquB,QAAQmmD,YAAY//D,KAAK,CAAEqgE,SAAS,IAE7C90E,KAAK0K,QAAU1K,KAAKquB,QAAQ0lD,UAAY/zE,KAAKquB,QAAQ+lD,sBAAwBp0E,KAAKquB,QAAQ8lD,yBAC1Fn0E,KAAKquB,QAAQkmD,qBAAuBv0E,KAAKquB,QAAQ0lD,SACrD,CACAgB,cAAcpxE,GAIV,OAHK3D,KAAK+qE,WACN/qE,KAAK26D,SACT36D,KAAKkyE,QAAUvuE,EACR3D,IACX,CACAw8C,gBAGI,OAFKx8C,KAAK+qE,WACN/qE,KAAK26D,SACF36D,KAAKkyE,OAChB,CACA8C,cAGI,OAFKh1E,KAAK+qE,WACN/qE,KAAK26D,SACF36D,KAAK2zE,KAChB,CACArc,eACI,OAAOt3D,KAAKkyE,OAChB,CACA3a,aACI,OAAOv3D,KAAK2zE,KAChB,CACA1qE,OACI,OAAOjJ,KAAK2D,CAChB,CACAmsC,cACI,OAAO9vC,KAAKquB,QAAQ0lD,SACxB,CACAkB,YAAYrwE,GAGR,OAFA5E,KAAKquB,QAAQ0lD,UAAYnvE,EACzB5E,KAAK20E,aACE30E,IACX,CACAsJ,KAAKR,GAED,OADA9I,KAAK8I,EAAIA,EACF9I,IACX,CACAkJ,OACI,OAAOlJ,KAAK8I,CAChB,CACA+oC,iBACI,OAAO7xC,KAAKujC,YAAY,GAAKvV,EAAO6C,qBAAuB,CAC/D,CACAgvB,uBACI,OAAO7/C,KAAKujC,YAAYvjC,KAAK8vC,cAAgB,GAAK9hB,EAAO6C,qBAAuB,CACpF,CACAxnB,KAAK1F,GACD,MAAMmC,EAAQnC,EAAI3D,KAAK2D,EACvB3D,KAAK+qE,WAAY,EACjB/qE,KAAK2D,EAAIA,EACT3D,KAAKkyE,SAAWpsE,EAChB9F,KAAK2zE,OAAS7tE,EACd,IAAK,IAAI4C,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,OAAQ8C,IAAK,CAC5C,MAAMwsE,EAAMl1E,KAAK41C,UAAUltC,GAC3BwsE,EAAI7rE,KAAK6rE,EAAIjsE,OAASnD,EAC1B,CACA,OAAO9F,IACX,CACAy5B,SAAShvB,GAML,OALAzK,KAAK+qE,WAAY,EACjB/qE,KAAKyK,MAAQA,EACbzK,KAAK2zE,MAAQ3zE,KAAK2D,EAAI8G,EAGfzK,IACX,CACA4vB,WACI,OAAO5vB,KAAKyK,KAChB,CACAoK,WACI,OAAOxU,OAAOmX,OAAO,CAAEnC,UAAWrV,KAAKquB,QAAQ2lD,WAAYz+D,YAAavV,KAAKquB,QAAQ2lD,WAAYv+D,UAAWuY,EAAO6C,sBAAwBttB,MAAMsR,WACrJ,CAIAsgE,WAAWvB,GAEP,OADA5zE,KAAK4zE,QAAUA,EACR5zE,IACX,CAIAo1E,aACI,OAAOp1E,KAAK4zE,OAChB,CAOAyB,kBAAkB/iE,EAAQ,GACtB,GAAqB,iBAAVA,EACP,MAAM,IAAInP,EAAa,eAAgB,0BAI3C,GAFKnD,KAAK+qE,WACN/qE,KAAK26D,SACqD,IAA1D36D,KAAKqnC,aAAayV,GAAsBsC,OAAOx5C,OAC/C,OAAO,EAGX,GAAI5F,KAAK41C,UAAUtjC,GAAO+nB,gBAAkByiB,GAAsBxjB,MAC9D,OAAO,EAEX,IAAI44C,EAAUlyE,KAAKkyE,QAAUlyE,KAAK2D,EAClC,MAAM2xE,EAAat1E,KAAK41C,UAAU,GAIlC,OAHI0/B,EAAWh2B,YAAcvC,GAAYqB,cAAgB8zB,EAAUoD,EAAW1lD,aAC1EsiD,GAAWoD,EAAW1lD,YAEnBsiD,CACX,CAEAqD,kBAAkBtjE,EAAM6lB,EAAS,GAE7B,OADA93B,KAAK41C,UAAUnhC,KAAK,IAAI24D,GAAWn7D,EAAMjS,KAAK2D,EAAGm0B,IAC1C93B,IACX,CAEAw1E,aAAavjE,EAAMwjE,EAAU3sE,GAEzB,OADA9I,KAAK41C,UAAUnhC,KAAK,IAAIy8D,GAAMj/D,EAAMwjE,EAAUz1E,KAAK2D,EAAGmF,IAC/C9I,IACX,CAEA01E,WAAW7G,EAAS/lE,EAAGmzD,EAAU,EAAGtuD,EAAUmhE,GAAW,GACrD,MAAM6G,EAAe,IAAI/G,GAAaC,EAAS7uE,KAAK2D,EAAIs4D,EAASnzD,EAAGgmE,GAIpE,OAHInhE,GACAgoE,EAAa/9D,YAAYjK,GAC7B3N,KAAK41C,UAAUnhC,KAAKkhE,GACb31E,IACX,CAEAqvE,SAASD,EAAOtmE,GAEZ,OADA9I,KAAK41C,UAAUnhC,KAAK,IAAI06D,GAAWC,EAAOpvE,KAAK2D,EAAGmF,IAC3C9I,IACX,CAEAgxE,QAAQjsE,EAAMyuB,EAAUnF,EAAU,CAAC,GAE/B,OADAruB,KAAK41C,UAAUnhC,KAAK,IAAIq8D,GAAU/rE,EAAMyuB,EAAUnF,IAC3CruB,IACX,CACAiqC,YACI,OAAOjqC,KAAK0K,MAChB,CACA44B,yBACI,OAAOtjC,KAAKquB,QAAQ8lD,wBACxB,CACAv9D,iBACI,OAAO,IAAIhO,EAAY5I,KAAK2D,EAAG3D,KAAK8I,EAAG9I,KAAKyK,MAAOzK,KAAK60C,aAAe70C,KAAK8I,EAChF,CACA+rC,aACI,MAAMxmB,EAAUruB,KAAKquB,QACfijB,EAAUjjB,EAAQ8lD,yBAExB,OADqBn0E,KAAKujC,YAAYlV,EAAQ0lD,WAAa1lD,EAAQgmD,qBAAuB/iC,CAE9F,CACA2/B,iBACI,OAAOjxE,KAAKujC,YAAYvjC,KAAKquB,QAAQ0lD,UACzC,CAGAxwC,YAAYv/B,GACR,MAAMqqB,EAAUruB,KAAKquB,QACfijB,EAAUjjB,EAAQ8lD,yBAClBjF,EAAW7gD,EAAQ+lD,qBAEzB,OADUp0E,KAAK8I,EAAI9E,EAAOstC,EAAU49B,EAAW59B,CAEnD,CACAskC,YAAY9sE,GAGR,MAAMulB,EAAUruB,KAAKquB,QACfijB,EAAUjjB,EAAQ8lD,yBAClBjF,EAAW7gD,EAAQ+lD,qBACzB,OAAQtrE,EAAI9I,KAAK8I,GAAKwoC,EAAU49B,CACpC,CACAv9B,eAAe3tC,EAAO,GAClB,OAAOhE,KAAKujC,aAAav/B,EAAOhE,KAAKquB,QAAQimD,kBACjD,CACA1iC,kBAAkB5tC,EAAO,GACrB,OAAOhE,KAAKujC,YAAYvjC,KAAKquB,QAAQkmD,qBAAuBvwE,EAChE,CACA8oD,YAAY9oD,GACR,MAAMqqB,EAAUruB,KAAKquB,QACfijB,EAAUjjB,EAAQ8lD,yBAClBjF,EAAW7gD,EAAQ+lD,qBACzB,OAAOp0E,KAAK8I,EAAIomE,EAAW59B,EAAU,EAAIA,EAAUttC,EAAOstC,CAC9D,CACAjZ,gBACI,OAAOr4B,KAAKujC,YAAY,EAC5B,CAGAgE,YAAYD,EAAU9T,GAOlB,YANiB5vB,IAAb4vB,GACA8T,EAAShN,YAAY9G,GAEzB8T,EAASnQ,SAASn3B,MAClBA,KAAK+qE,WAAY,EACjB/qE,KAAK41C,UAAUnhC,KAAK6yB,GACbtnC,IACX,CACA40E,eAAettC,GAEX,OADAtnC,KAAKunC,YAAYD,EAAUwV,GAAsBoB,KAC1Cl+C,IACX,CAEA61E,cAAc5jE,GAEV,MAAM,OAAE6rC,EAAM,aAAEM,EAAY,KAAEM,GAAS3B,GAKvC,OAJI9qC,IAAS6rC,GAAU7rC,IAASmsC,GAAgBnsC,IAASysC,IACrD1+C,KAAK41C,UAAU,GAAGyJ,QAAQptC,GAC1BjS,KAAK+qE,WAAY,GAEd/qE,IACX,CACA81E,cAAc7jE,GAMV,OAJIA,IAAS8qC,GAAYqB,eACrBp+C,KAAK41C,UAAU,GAAGyJ,QAAQptC,GAC1BjS,KAAK+qE,WAAY,GAEd/qE,IACX,CACA+1E,QAAQC,EAAU5nE,EAAM4gC,EAAYxb,QACf5vB,IAAb4vB,IACAA,EAAWspB,GAAsBsC,OAEjC5rB,IAAaspB,GAAsBoB,IACnCl+C,KAAK6zE,QAAUmC,EAGfh2E,KAAKkuB,KAAO8nD,EAEhB,MAAMj8D,EAAQ/Z,KAAKqnC,aAAa7T,EAAU03C,GAAKxpE,UAO/C,OANqB,IAAjBqY,EAAMnU,OACN5F,KAAKi2E,QAAQD,EAAU5nE,EAAM4gC,EAAYxb,GAGzCzZ,EAAM,GAAGslC,QAAQ22B,EAAU5nE,EAAM4gC,GAE9BhvC,IACX,CACAmtE,UACI,OAAOntE,KAAKkuB,IAChB,CACAgoD,WAAWF,EAAU5nE,EAAM4gC,GAEvB,OADAhvC,KAAK+1E,QAAQC,EAAU5nE,EAAM4gC,EAAY8N,GAAsBoB,KACxDl+C,IACX,CACAktE,aACI,OAAOltE,KAAK6zE,OAChB,CACAsC,gBAAgBpmD,EAASy7C,EAAeh4C,QACnB5vB,IAAb4vB,IACAA,EAAWspB,GAAsBsC,OAErC,MAAM/mC,EAAgBrY,KAAKqnC,aAAa7T,EAAU+3C,GAAa7pE,UAO/D,OAN6B,IAAzB2W,EAAczS,OACd5F,KAAKo2E,gBAAgBrmD,EAASy7C,EAAeh4C,GAG7Cnb,EAAc,GAAGqzD,UAAU37C,EAASy7C,GAEjCxrE,IACX,CACAq2E,mBAAmBtmD,EAASy7C,GAExB,OADAxrE,KAAKm2E,gBAAgBpmD,EAASy7C,EAAe1uB,GAAsBoB,KAC5Dl+C,IACX,CACAs2E,iBAAiBhE,EAAUC,EAAe/+C,QACrB5vB,IAAb4vB,IACAA,EAAWspB,GAAsBsC,OAErC,MAAMm3B,EAAiBv2E,KAAKqnC,aAAa7T,EAAU6+C,GAAc3wE,UAOjE,OAN8B,IAA1B60E,EAAe3wE,OACf5F,KAAKw2E,iBAAiBlE,EAAUC,EAAe/+C,GAG/C+iD,EAAe,GAAG5D,WAAWL,GAE1BtyE,IACX,CACAy2E,oBAAoBnE,EAAUC,GAE1B,OADAvyE,KAAKs2E,iBAAiBhE,EAAUC,EAAez1B,GAAsBoB,KAC9Dl+C,IACX,CAWAo2E,gBAAgBrmD,EAASy7C,EAAeh4C,GAKpC,YAJiB5vB,IAAb4vB,IACAA,EAAWspB,GAAsBsC,OAErCp/C,KAAKunC,YAAY,IAAIgkC,GAAax7C,EAASy7C,GAAelxC,YAAY9G,GAAWA,GAC1ExzB,IACX,CAaAi2E,QAAQ/nD,EAAM9f,EAAM4gC,EAAYxb,GAQ5B,YAPiB5vB,IAAb4vB,GAA0BA,IAAaspB,GAAsBsC,MAC7Dp/C,KAAKkuB,KAAOA,EAEPsF,IAAaspB,GAAsBoB,MACxCl+C,KAAK6zE,QAAU3lD,GAEnBluB,KAAKunC,YAAY,IAAI2jC,GAAKh9C,EAAM9f,EAAM4gC,GAAaxb,GAC5CxzB,IACX,CACA02E,WAAWxoD,EAAM9f,EAAM4gC,GAEnB,OADAhvC,KAAKi2E,QAAQ/nD,EAAM9f,EAAM4gC,EAAY8N,GAAsBoB,KACpDl+C,IACX,CAYAw2E,iBAAiBlE,EAAUC,EAAe/+C,GAEtC,OADAxzB,KAAKunC,YAAY,IAAI8qC,GAAcC,EAAUC,GAAgB/+C,GACtDxzB,IACX,CACA22E,oBAAoBrE,EAAUC,GAE1B,OADAvyE,KAAKw2E,iBAAiBlE,EAAUC,EAAez1B,GAAsBoB,KAC9Dl+C,IACX,CAEA42E,iBAEI,OADA52E,KAAKi2E,QAAQ,UACNj2E,IACX,CAMAqnC,aAAa7T,EAAUlyB,GACnB,MAAMu1E,OAA0BjzE,IAAb4vB,EACbsjD,OAA0BlzE,IAAbtC,EACnB,OAAIu1E,GAAcC,EACP92E,KAAK41C,UAEPihC,EAEE72E,KAAK41C,UAAUqG,QAAQ7pB,GAAM9wB,IAAa8wB,EAAEhe,gBAE9C0iE,EAEE92E,KAAK41C,UAAUqG,QAAQ7pB,GAAMoB,IAAapB,EAAEiI,gBAI5Cr6B,KAAK41C,UAAUqG,QAAQ7pB,GAAMoB,IAAapB,EAAEiI,eAAiB/4B,IAAa8wB,EAAEhe,eAE3F,CAKA2iE,eAAeC,EAAOC,GAClB,IAAK,IAAIvuE,EAAIsuE,EAAMpxE,OAAS,EAAG8C,GAAK,EAAGA,IACnC,IAAK,IAAI07C,EAAI,EAAGA,EAAI17C,EAAG07C,IACnB,GAAI6yB,EAAMD,EAAM5yB,GAAGhwC,eAAiB6iE,EAAMD,EAAM5yB,EAAI,GAAGhwC,eAAgB,CACnE,MAAM8iE,EAAOF,EAAM5yB,GACnB4yB,EAAM5yB,GAAK4yB,EAAM5yB,EAAI,GACrB4yB,EAAM5yB,EAAI,GAAK8yB,CACnB,CAGZ,CACAvc,SACI,MAAM2a,EAAat1E,KAAK41C,UAAU,GAC5BuhC,EAAan3E,KAAK41C,UAAU,GAC5BwhC,EAAep3E,KAAKqnC,aAAayV,GAAsBsC,OACvDi4B,EAAer3E,KAAKqnC,aAAayV,GAAsBoB,KAU7D,IAAIzzC,EACA+pC,EACAlN,EAXJtnC,KAAK+2E,eAAeK,EAAc7D,IAClCvzE,KAAK+2E,eAAeM,EAAc7D,IAC9B4D,EAAaxxE,OAAS,GAAK0vE,EAAWh2B,YAAcvC,GAAYqB,eAChEg5B,EAAa3iE,KAAK2iE,EAAahhE,OAAO,EAAG,GAAG,IAC5CghE,EAAahhE,OAAO,EAAG,EAAG,IAAIlU,GAAQ66C,GAAYe,UAElDu5B,EAAaphE,QAAQkhE,GAAc,GACnCE,EAAajhE,OAAO,EAAG,EAAG,IAAIlU,GAAQ66C,GAAY2B,OAKtD,IAAImuB,EAAS,EACTlpE,EAAI3D,KAAK2D,EACb,IAAK,IAAI+E,EAAI,EAAGA,EAAI0uE,EAAaxxE,OAAQ8C,IACrC4+B,EAAW8vC,EAAa1uE,GACxB8rC,EAAUlN,EAASiW,WAAW70C,EAAImkE,GAClCpiE,EAAQ68B,EAAS1X,WACjBjsB,GAAK6wC,EACLlN,EAASj+B,KAAK1F,GACdA,GAAK8G,EACD+pC,EAAU/pC,IAAU,GACpBoiE,IAER7sE,KAAKkyE,QAAUvuE,EACfA,EAAI3D,KAAK2D,EAAI3D,KAAKyK,MAClB,MAAMo0C,EAAS,CACX1lB,KAAM,EACNE,MAAO,EACP8lB,aAAc,EACdD,YAAa,GAEjB,IAAIo4B,EAAiB,EACrB,IAAK,IAAI5uE,EAAI,EAAGA,EAAI2uE,EAAazxE,OAAQ8C,IAAK,CAC1C4+B,EAAW+vC,EAAa3uE,GACxB4uE,EAAiBr1E,EAAUqlC,GAAY5+B,EAAI4uE,EAC3Cz4B,EAAOxlB,MAAQ,EACfwlB,EAAO1lB,KAAO,EACd0lB,EAAOM,aAAe,EACtBN,EAAOK,YAAc,EACrB,MAAMxB,EAAgBpW,EAASqW,mBAC3BD,GACU,IAANh1C,IACAm2C,EAAOxlB,MAAQqkB,EAAcuB,MAAQ,EACrCJ,EAAOM,aAAezB,EAAcyB,cAAgB,GAExDN,EAAO1lB,MAAQukB,EAAcsB,MAAQ,EACrCH,EAAOK,YAAcxB,EAAcwB,aAAe,EAC9Cx2C,IAAM2uE,EAAazxE,OAAS,IAC5Bi5C,EAAOK,YAAc,KAIzBL,EAAOM,aAAe7X,EAASiW,WAAW70C,EAAI4uE,GACpC,IAAN5uE,IACAm2C,EAAOxlB,MAAQiO,EAAS1X,YAElB,IAANlnB,IACAm2C,EAAO1lB,KAAOmO,EAAS1X,aAG/BjsB,GAAKk7C,EAAOM,aACZx7C,GAAKk7C,EAAOxlB,MACZiO,EAASj+B,KAAK1F,GACdA,GAAKk7C,EAAO1lB,KACZx1B,GAAKk7C,EAAOK,WAChB,CACAl/C,KAAK2zE,MAAgC,IAAxB0D,EAAazxE,OAAe5F,KAAK2D,EAAI3D,KAAKyK,MAAQ9G,EAC/D3D,KAAK+qE,WAAY,CACrB,CAIAh1D,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACLtW,KAAK8U,aACL6gB,EAAI0V,UAAU,QAASrrC,KAAK6S,aAAa,OACpC7S,KAAK+qE,WACN/qE,KAAK26D,SACT,MAAMoZ,EAAY/zE,KAAKquB,QAAQ0lD,UACzBtpE,EAAQzK,KAAKyK,MACb9G,EAAI3D,KAAK2D,EACf,IAAImF,EAEJ,IAAK,IAAI9E,EAAO,EAAGA,EAAO+vE,EAAW/vE,IACjC8E,EAAI9I,KAAKujC,YAAYv/B,GACjBhE,KAAKquB,QAAQmmD,YAAYxwE,GAAM8wE,UAC/Bn/C,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAGmF,GACd6sB,EAAIU,OAAO1yB,EAAI8G,EAAO3B,GACtB6sB,EAAI/G,UAGZ+G,EAAI4V,aACJvrC,KAAK2V,eAEL,IAAK,IAAIjN,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,OAAQ8C,IAAK,CAC5C,MAAM4+B,EAAWtnC,KAAK41C,UAAUltC,GAEH,mBAAlB4+B,EAASvxB,OAChBuxB,EAASxyB,WAAW6gB,GACpB2R,EAASvxB,KAAK/V,KAAMA,KAAKq1E,kBAAkB3sE,IAC3C4+B,EAAS3xB,aAAaggB,GAE9B,CAEA,GAAI31B,KAAK4zE,QAAU,EAAG,CAClBj+C,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKiX,UACjB,MAAM0Y,EAAYgG,EAAIusB,YAAY,GAAKliD,KAAK4zE,SAASnpE,MACrD3B,EAAI9I,KAAK2xC,eAAe,GAAK,EAC7Bhc,EAAIqc,SAAS,GAAKhyC,KAAK4zE,QAAS5zE,KAAK2D,EAAIgsB,EAAY,EAAG7mB,GACxD6sB,EAAI/f,SACR,CACA,OAAO5V,IACX,CACA2uE,sBACI,OAAO3uE,KAAKquB,QAAQylD,kBACxB,CAKAyD,oBACI,OAAOv3E,KAAKquB,QAAQmmD,WACxB,CAQAgD,iBAAiBC,EAAajD,GAC1B,GAAIiD,GAAez3E,KAAKquB,QAAQ0lD,WAAa0D,EAAc,EACvD,MAAM,IAAIt0E,EAAa,mBAAoB,iFAE/C,QAA4BS,IAAxB4wE,EAAYM,QACZ,MAAM,IAAI3xE,EAAa,mBAAoB,oEAE/C,GAAmC,kBAAxBqxE,EAAYM,QACnB,MAAM,IAAI3xE,EAAa,mBAAoB,4EAG/C,OADAnD,KAAKquB,QAAQmmD,YAAYiD,GAAejD,EACjCx0E,IACX,CAUA03E,kBAAkBC,GACd,GAAIA,EAAoB/xE,SAAW5F,KAAKquB,QAAQ0lD,UAC5C,MAAM,IAAI5wE,EAAa,mBAAoB,2FAK/C,IAAK,MAAMqxE,KAAemD,EAE0B/zE,MAA5C+zE,EAAoBnD,GAAaM,UACjC6C,EAAoBnD,GAAex0E,KAAKquB,QAAQmmD,YAAYA,IAEhEx0E,KAAKquB,QAAQmmD,YAAYA,GAAen0E,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,QAAQmmD,YAAYA,IAAemD,EAAoBnD,IAGxI,OADAx0E,KAAKquB,QAAQmmD,YAAcmD,EACpB33E,IACX,CACAuF,0BAA0BqyE,GACtB,MAAMC,EAAwBv2E,IAC1B,IAAIw2E,EAAY,EAEhBF,EAAOhjE,SAASwiB,IACZ,MAAMwe,EAAYxe,EAAMiQ,aAAayV,GAAsBsC,MAAO99C,GAE9Ds0C,EAAUhwC,OAAS,GAAKgwC,EAAU,GAAG3sC,OAAS6uE,IAC9CA,EAAYliC,EAAU,GAAG3sC,OAAM,IAEvC,IAAI8uE,EAAU,EACdH,EAAOhjE,SAASwiB,IACZ2gD,EAAU,EACQ3gD,EAAMiQ,aAAayV,GAAsBsC,MAAO99C,GAExDsT,SAAS0yB,IACXwwC,EAAYxwC,EAASr+B,OAAS8uE,IAC9BA,EAAUD,EAAYxwC,EAASr+B,OAAM,IAE7C,MAAM+uE,EAAe5gD,EAAMiQ,aAAayV,GAAsBsC,OAC9D,IAAI64B,GAAU,EAEdD,EAAapjE,SAAS0yB,IACdA,EAASlzB,gBAAkB9S,IAC3B22E,GAAU,GACVA,GAAWF,EAAU,GACrBzwC,EAASj+B,KAAKi+B,EAASr+B,OAAS8uE,EAAQ,IAGhD3gD,EAAM29C,cAAc39C,EAAMolB,gBAAkBu7B,EAAQ,GACtD,EAGNH,EAAOhjE,SAASwiB,IACPA,EAAM2zC,WACP3zC,EAAMujC,QAAQ,IAGtBkd,EAAqBh2E,EAASqpE,MAE9B2M,EAAqBh2E,EAAS0pE,cAE9BsM,EAAqBh2E,EAASwwE,eAC9B,IAAI6F,EAAO,EAEXN,EAAOhjE,SAASwiB,IACRA,EAAMolB,gBAAkB07B,IACxBA,EAAO9gD,EAAMolB,gBAAe,IAEpCo7B,EAAOhjE,SAASwiB,IACZA,EAAM29C,cAAcmD,EAAK,IAE7BA,EAAO,EAEPN,EAAOhjE,SAASwiB,IACMA,EAAMiQ,aAAayV,GAAsBsC,MAAOv9C,EAASK,SACjE0S,SAAS0yB,IACXA,EAASgY,WAAavC,GAAYqB,cAC9B9W,EAASr+B,OAASivE,IAClBA,EAAO5wC,EAASr+B,OAAM,GAChC,IAEN2uE,EAAOhjE,SAASwiB,IACMA,EAAMiQ,aAAayV,GAAsBsC,MAAOv9C,EAASK,SACjE0S,SAAS0yB,IACXA,EAASgY,WAAavC,GAAYqB,cAClC9W,EAASj+B,KAAK6uE,EAAK,GACzB,GAEV,ECjtBJ,SAASC,GAAmBxiD,EAAK1jB,EAAMmmE,EAAM1tC,EAAMkV,GAC/C,GAAI3tC,IAASomE,GAAepmE,KAAKqmE,kBAAoBrmE,IAASomE,GAAepmE,KAAKsmE,kBAC9E,MAAM,IAAIp1E,EAAa,mBAAoB,uDAE/C,IAAIoxB,EAAU,EACVikD,EAAgB,IAEhBvmE,IAASomE,GAAepmE,KAAKsmE,oBAC7BhkD,GAAW,EACXikD,EAAgB,GAGpB7iD,EAAImqB,SAASs4B,EAAO7jD,EAASmW,EAAM,EAAGkV,EAAOlV,GAE7C/U,EAAImqB,SAASs4B,EARW,EAQa1tC,EAAM8tC,EAAe54B,EAAOlV,EACrE,CDosBA+oC,GAAMt8D,UAAY,CACd3I,OAAQd,EAAKe,WACbL,KAAM,EACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QCtsBd,MAAM2pE,WAAuBtkE,EACrBrS,sBACP,OAAOG,EAASw2E,cACpB,CACA52E,YAAYg3E,EAAWC,GACnBn1E,QACAvD,KAAK2+C,UAAY3wB,EAAO6C,qBACxB7wB,KAAKyK,MAAQ,EACbzK,KAAKy4E,UAAYA,EACjBz4E,KAAK04E,aAAeA,EACpB14E,KAAKiS,KAAOomE,GAAepmE,KAAK+rC,OAChCh+C,KAAK2X,YAGL3X,KAAKu0B,QAAU,EACfv0B,KAAK24E,MAAQ,EACjB,CAKAt5B,QAAQptC,GACJ,MAAM2mE,EAA0B,iBAAT3mE,EAAoBomE,GAAez6B,WAAW3rC,GAAQA,EAK7E,OAHI5R,OAAO8rC,OAAOksC,GAAepmE,MAAM6B,SAAS8kE,KAC5C54E,KAAKiS,KAAO2mE,GAET54E,IACX,CAKAs/C,UACI,OAAOt/C,KAAKiS,IAChB,CAEA++D,QAAQjsE,EAAMspB,EAAU,CAAC,GAKrB,OAJAruB,KAAK24E,MAAMlkE,KAAK,CACZokE,QAAS9zE,EACTspB,QAAShuB,OAAOmX,OAAO,CAAEu3D,QAAS,EAAGx/C,QAAS,GAAKlB,KAEhDruB,IACX,CACAs3B,UAAU/C,GACN,GAAuB,iBAAZA,EACP,MAAM,IAAIpxB,EAAa,cAAe,4BAG1C,OADAnD,KAAKu0B,QAAUA,EACRv0B,IACX,CACAq3B,YACI,OAAOr3B,KAAKu0B,OAChB,CAEAxe,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAIo0B,EAAO1qC,KAAKy4E,UAAUl1C,YAAY,GAClCqc,EAAO5/C,KAAK04E,aAAan1C,YAAYvjC,KAAK04E,aAAa5oC,cAAgB,GAAK9vC,KAAK2+C,UACjFl0C,EAAQzK,KAAKyK,MACb2tE,EAAOp4E,KAAKy4E,UAAUxvE,QACIjJ,KAAKiS,OAASomE,GAAepmE,KAAK6mE,cAC5D94E,KAAKiS,OAASomE,GAAepmE,KAAKsmE,mBAClCv4E,KAAKiS,OAASomE,GAAepmE,KAAK8mE,eAElCX,EAAOp4E,KAAKy4E,UAAUxvE,OAASjJ,KAAKy4E,UAAU7oD,YAElD,IAAIopD,EAAoBp5B,EAAOlV,EAC/B,OAAQ1qC,KAAKiS,MACT,KAAKomE,GAAepmE,KAAK6rC,OAGzB,KAAKu6B,GAAepmE,KAAKgnE,YAGzB,KAAKZ,GAAepmE,KAAK6mE,aACrBruE,EAAQ,EACR,MACJ,KAAK4tE,GAAepmE,KAAK+rC,OACrBo6B,GAAQp4E,KAAKyK,MAAQ,EACrBigC,GAAQ1qC,KAAK2+C,UACbq6B,GAAqB,GACrB,MACJ,KAAKX,GAAepmE,KAAKinE,MAAO,CAC5BzuE,EAAQ,GAER,MAAMP,EAAKlK,KAAKy4E,UAAUxvE,OAAS,EAAIjJ,KAAKu0B,QACtCnqB,EAAKsgC,EACLyuC,EAAKjvE,EACLkvE,EAAKx5B,EACLv1C,EAAKH,EAAKO,EACVH,EAAKF,EAAK4uE,EAAoB,EAC9BK,EAAOhvE,EAAK,GAAMI,EAClB6uE,EAAOlvE,EAAK,GAAM4uE,EAClBO,EAAOrvE,EAAK,IAAMO,EAClB+uE,EAAOlvE,EAAK,KAAQ0uE,EACpBS,EAAOF,EACPG,EAAOpvE,EAAK,KAAQ0uE,EACpBW,EAAON,EACPO,EAAOR,EAAK,GAAMJ,EAClBa,EAAOxvE,EAAKI,EACZqvE,EAAOF,EACPG,EAAO7vE,EAAK,GAAMO,EAClBuvE,EAAO1vE,EAAK,KAAQ0uE,EACpBiB,EAAOF,EACPG,EAAO5vE,EAAK,KAAQ0uE,EACpBmB,EAAON,EACPO,EAAOd,EACb3jD,EAAIQ,YACJR,EAAIS,OAAOlsB,EAAIE,GACfurB,EAAIY,cAAc8iD,EAAMC,EAAMC,EAAMC,EAAMnvE,EAAIC,GAC9CqrB,EAAIY,cAAckjD,EAAMC,EAAMC,EAAMC,EAAMT,EAAIC,GAC9CzjD,EAAIY,cAAcsjD,EAAMC,EAAMC,EAAMC,EAAM3vE,EAAIC,GAC9CqrB,EAAIY,cAAc0jD,EAAMC,EAAMC,EAAMC,EAAMlwE,EAAIE,GAC9CurB,EAAIa,OACJb,EAAI/G,SACJ,KACJ,CACA,KAAKypD,GAAepmE,KAAKooE,QACrB3vC,GAAQ,EACRkV,GAAQ,EACRo5B,EAAoBp5B,EAAOlV,EAC3Bjb,EAAM49B,YAAY13B,EAAKyiD,EAAO,EAAG1tC,EAAM,GAAI,cAC3Cjb,EAAM49B,YAAY13B,EAAKyiD,EAAO,EAAGx4B,EAAM,GAAI,iBAC3Cw4B,GAAQp4E,KAAKyK,MAAQ,EACrB,MACJ,KAAK4tE,GAAepmE,KAAKqmE,iBACrBH,GAAmBxiD,EAAK31B,KAAKiS,KAAMmmE,EAAOp4E,KAAKu0B,QAASmW,EAAMkV,EAAO5/C,KAAK2+C,WAC1E,MACJ,KAAK05B,GAAepmE,KAAKsmE,kBACrBJ,GAAmBxiD,EAAK31B,KAAKiS,KAAMmmE,EAAM1tC,EAAMkV,EAAO5/C,KAAK2+C,WAC3D,MACJ,KAAK05B,GAAepmE,KAAK8mE,YACrBtuE,EAAQ,EACRuuE,GAAqBh5E,KAAK2+C,UAC1B,MACJ,KAAK05B,GAAepmE,KAAKysC,KACrB,MACJ,QACI,MAAM,IAAIv7C,EAAa,cAAe,qCAAqCnD,KAAKiS,qBAEpFjS,KAAKiS,OAASomE,GAAepmE,KAAKinE,OAClCl5E,KAAKiS,OAASomE,GAAepmE,KAAKqmE,kBAClCt4E,KAAKiS,OAASomE,GAAepmE,KAAKsmE,mBAClCv4E,KAAKiS,OAASomE,GAAepmE,KAAKysC,MAClC/oB,EAAImqB,SAASs4B,EAAM1tC,EAAMjgC,EAAOuuE,GAGhCh5E,KAAKiS,OAASomE,GAAepmE,KAAK8mE,aAClCpjD,EAAImqB,SAASs4B,EAAO,EAAG1tC,EAAMjgC,EAAOuuE,GAExCrjD,EAAI3gB,OACJ2gB,EAAIjgB,aAAa,GACjBigB,EAAI5e,QAAQ/W,KAAKiX,UAEjB,IAAK,IAAIvO,EAAI,EAAGA,EAAI1I,KAAK24E,MAAM/yE,OAAQ8C,IAAK,CACxC,MAAM3D,EAAO/E,KAAK24E,MAAMjwE,GAClBwoC,EAAavb,EAAIusB,YAAY,GAAKn9C,EAAK8zE,SAASpuE,MAChD9G,EAAI3D,KAAKy4E,UAAUxvE,OAASioC,EAAa,GAAKnsC,EAAKspB,QAAQ0gD,QAC3DjmE,GAAK9I,KAAKy4E,UAAUl1C,YAAY,GAAKvjC,KAAK04E,aAAazH,kBAAoB,EAAIlsE,EAAKspB,QAAQkB,QAClGoG,EAAIqc,SAAS,GAAKjtC,EAAK8zE,QAASl1E,EAAGmF,EAAI,EAC3C,CACA6sB,EAAI/f,SACR,ECtHJ,SAAS0kE,GAA4BtqD,EAAOuqD,EAAcC,EAAetzE,GAErE,IAAIuzE,EAAeF,EAEnB,IAAK,IAAIG,EAAYF,EAAgB,EAAGE,EAAY1qD,EAAMpqB,OAAQ80E,IAAa,CAC3E,MAAM/gD,EAAO3J,EAAM0qD,GACnB,GAAIj4E,EAAOk3B,KAAUA,EAAKmN,WAAanN,EAAK0M,oBAAqB,CAC7Do0C,EAAe9gD,EAAK0hB,iBACpB,KACJ,CACJ,CAEA,GAAIn0C,GAAWqzE,IAAiBE,EAAc,CAG1CA,EAAej2E,EAFHS,KAAK8E,IAAIwwE,EAAcE,GACvBx1E,KAAKulC,IAAI+vC,EAAcE,GAEvC,CACA,OAAOA,CACX,CDsGApC,GAAelhE,UAAY,CACvB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUmC,QAOrB2pE,GAAepmE,KAAO,CAClB6mE,aAAc,EACdG,YAAa,EACbn7B,OAAQ,EACRE,OAAQ,EACRk7B,MAAO,EACPmB,QAAS,EACT/B,iBAAkB,EAClBC,kBAAmB,EACnBQ,YAAa,EACbr6B,KAAM,GAeV25B,GAAez6B,WAAa,CACxB+8B,YAAatC,GAAepmE,KAAK6mE,aACjC8B,WAAYvC,GAAepmE,KAAKgnE,YAChCp7B,OAAQw6B,GAAepmE,KAAK6rC,OAC5BC,OAAQs6B,GAAepmE,KAAK+rC,OAC5B68B,MAAOxC,GAAepmE,KAAKinE,MAC3B4B,QAASzC,GAAepmE,KAAKooE,QAC7BU,eAAgB1C,GAAepmE,KAAKqmE,iBACpC0C,gBAAiB3C,GAAepmE,KAAKsmE,kBACrC0C,WAAY5C,GAAepmE,KAAK8mE,YAChCt6B,KAAM45B,GAAepmE,KAAKysC,MCnIvB,MAAM+b,GAKTl1D,oBAAoByqB,EAAOrsB,EAAI,GAAG,eAAEu3E,EAAiB,IAAO,CAAC,GACzDlrD,EAAM3qB,QAAO,CAAC81E,EAAaxhD,KACvBA,EAAKke,qBAAqB,IAAIgzB,IAC9B,MAAM1N,GAAO,IAAI7B,IAAc1B,YAAYjgC,GAAMue,YAC3C1nC,EAAU2sD,EAAKrsD,aAErB,OADAqsD,EAAK9zD,KAAK8xE,EAAc3qE,EAAQ2rD,aACzBgf,EAAche,EAAKvtC,WAAapf,EAAQ4rD,aAAe8e,CAAc,GAC7Ev3E,EACP,CAEA4B,qBAAqBowB,EAAKuW,EAAWjU,EAAM7tB,EAAIE,EAAI+jB,GAE/C,MAAM1qB,EAAIs0B,GADV5J,EAAUhuB,OAAOmX,OAAO,CAAE4jE,aAAcptD,EAAOyU,mBAAmBrxB,aAAa,kBAAoBid,IAC1E+sD,aACnBC,EAAcnvC,EAAUmvC,YAQ9B1lD,EAAI3gB,OACJ2gB,EAAI5e,QAAQrJ,EAAKe,WAAY,GAC7B4sE,EAAYC,KAAK1mE,SAAS2mE,IAT1B,IAAgBrxE,EAAIG,EAAI+qC,EAARlrC,EAULvG,EAAI43E,EAAIrxE,GAVCG,EAUG1G,EAAI43E,EAAIlxE,GAVP+qC,EAUW,wBAT/Bzf,EAAIQ,YACJR,EAAIngB,eAAe4/B,GACnBzf,EAAIrgB,aAAa8/B,GACjBzf,EAAIjgB,aAAa,GACjBigB,EAAImqB,SAAS51C,EAAIE,EAAInF,KAAK8E,IAAIM,EAAKH,EAAI,GAAII,EAAKF,GAMhDurB,EAAIrgB,aAAa,SACjBqgB,EAAIqc,SAAS/sC,KAAK6vB,MAAMymD,EAAIlxE,GAAKkxE,EAAIrxE,IAAIjC,WAAYtE,EAAI43E,EAAIrxE,GAAII,EAAK,GAAG,IAE7EqrB,EAAIrgB,aAAa,OACjBqgB,EAAIqc,SAAS,UAAU9F,EAAUsvC,WAAa,GAAGC,QAAQ,cAAcvvC,EAAUzG,YAAc,GAAGg2C,QAAQ,WAAWJ,EAAYK,MAAMD,QAAQ,KAAM93E,EAAI,GAAI2G,EAAK,IAClKqrB,EAAI/f,SACR,CAgBArQ,qBAAqBowB,EAAKyB,EAAOpH,EAAO5B,GACpC,IAAIC,EAAU,CACVstD,WAAW,EACXC,aAAa,GAEK,iBAAXxtD,EACPC,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAG6W,GAAUD,GAE7B,kBAAXA,IACZC,EAAQstD,UAAYvtD,GAGxB,MAAM8X,EAAQ,IAAIwxB,GAAM1pC,EAAO4E,SAAS+lC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAa7pC,GAExEwqC,EAAQnsC,EAAQstD,UAAY7gB,GAAK+gB,iBAAiB31C,GAAS,GASjE,OAPA,IAAIu0B,IACCC,WAAW,CAACx0B,IACZ41C,cAAc,CAAC51C,GAAQ9O,EAAO,CAAEwkD,YAAavtD,EAAQutD,YAAaxkD,UAEvE8O,EAAM/O,SAASC,GAAOrhB,KAAK4f,EAAKyB,GAChCojC,EAAM5lD,SAASgnC,GAASA,EAAK9kC,WAAW6e,GAAK5f,SAEtCmwB,EAAMtvB,gBACjB,CAcArR,wBAAwBowB,EAAKomD,EAAU3kD,EAAO4kD,EAAUhsD,EAAOisD,EAAU7tD,GACrE,IAAIu8C,EAAO,CACPgR,UAAWM,EACXL,aAAa,GAEK,iBAAXxtD,EACPu8C,EAAOtqE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGmzD,GAAOv8C,GAEvB,kBAAXA,IACZu8C,EAAKgR,UAAYvtD,GAGrB,MAAM8tD,EAAY,IAAIxkB,GAAM1pC,EAAO4E,SAAS+lC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAa7pC,GAE5EmsD,EAAW,IAAIzkB,GAAM1pC,EAAO4E,SAAS+lC,QAAQjB,GAAMC,KAAKsB,MAAMY,aAAamiB,GAE3ExhB,EAAQmQ,EAAKgR,UAAY7gB,GAAK+gB,iBAAiBK,GAAa,IAElE,IAAIzhB,IACCC,WAAW,CAACwhB,IACZxhB,WAAW,CAACyhB,IACZL,cAAc,CAACI,EAAWC,GAAW/kD,EAAO,CAAEwkD,YAAajR,EAAKiR,cAErEM,EAAUnmE,KAAK4f,EAAKyB,GACpB+kD,EAASpmE,KAAK4f,EAAKomD,GACnBvhB,EAAM5lD,SAASgnC,GAASA,EAAK9kC,WAAW6e,GAAK5f,SAE7C,IAAIsiE,GAAejhD,EAAO2kD,GAAUjlE,WAAW6e,GAAK5f,MACxD,CAOAxQ,yBAAyBohC,EAAWy1C,EAAeC,GAC/C11C,EAAU/xB,SAAQ,CAAC0nE,EAAchqE,KAC7B,GAAIzP,EAAYy5E,IAAiBA,EAAax1C,SAAU,CACpD,GAAIw1C,EAAaplC,cAAgBmlC,EAC7B,OAGJ,MAAM7oD,EAAW8oD,EAAajtC,gBAAgB7b,SAAS9E,cACvD,GAAiB,QAAb8E,GAAmC,QAAbA,EACtB,OAEJ,GAAI4oD,GAAiBE,EAAa3gC,UAAW,CAEzC,MAAMzY,EAAQo5C,EAAan5C,cAAc,GACzC,GAAc,IAAV7wB,EACA4wB,EAAMl/B,KAAOs2E,GAA4B3zC,EAAWzD,EAAMl/B,KAAMsO,GAAO,QAEtE,GAAIA,EAAQ,GAAKA,EAAQq0B,EAAU/gC,OAAQ,CAE5C,MAAM22E,EAAe51C,EAAUr0B,EAAQ,GACvC,GAAIzP,EAAY05E,GACZ,GAAIA,EAAaz1C,SACb5D,EAAMl/B,KAAOu4E,EAAap5C,cAAc,GAAGn/B,SAE1C,CACD,MAAMmuD,EAAWoqB,EAAalhC,iBAE9BnY,EAAMl/B,KAAOs2E,GAA4B3zC,EAAWwrB,EAAU7/C,GAAO,EACzE,CAER,CACAgqE,EAAattB,WAAW,EAAG9rB,EAAMl/B,KACrC,CACJ,IAER,CACAvC,YAAY4sB,GACRruB,KAAKw8E,iBAAmBn8E,OAAOmX,OAAO,CAAEilE,eAAe,EAAOtkB,cAAenqC,EAAO0C,eAAgBgsD,cAAe,GAAKruD,GACxHruB,KAAK28E,aAAe,EACpB38E,KAAKw7E,UAAY,EACjBx7E,KAAKylC,WAAa,EAClBzlC,KAAK48E,cAAgB,CAAC,EAEtB58E,KAAK68E,cAAgB,EAErB78E,KAAK88E,kBAAmB,EAExB98E,KAAK+8E,aAAe,CAChBxpE,IAAK,CAAC,EACNypE,MAAO,GACPC,KAAM,GACNnlB,qBAAsB,GAE1B93D,KAAKk9E,iBAAmB,GAGxBl9E,KAAKq7E,YAAc,CACfK,MAAO,EACPJ,KAAM,IAEVt7E,KAAK+lC,OAAS,GACd/lC,KAAKm9E,YAAc,EACvB,CAOAC,WAAWr3C,EAAQq2C,GACf,IAAKr2C,IAAWA,EAAOngC,OACnB,MAAM,IAAIzC,EAAa,cAAe,6BAE1C4iC,EAAOnxB,SAASsxB,GAAUu0B,GAAU4iB,kBAAkBn3C,EAAME,eAAgBg2C,IAChF,CAqBAkB,0BAA0Bv3C,GACtB,MAAMw3C,EAAmBvvD,EAAOyU,mBAAmBrxB,aAAa,8BAGhE,IAAIosE,EAAoB,EACpBC,EAAO,EACPC,EAAO,EACX,MAAM7+B,EAAS,GACT1mC,EAAY,GAElB,GAAInY,KAAK88E,iBACL,OAAO98E,KAAK68E,cAEhB,IAAK92C,EACD,MAAM,IAAI5iC,EAAa,cAAe,sDAE1CnD,KAAK29E,mBAAmB53C,GAExB,MAAQk3C,KAAMW,EAAarqE,IAAKsqE,GAAe79E,KAAK+8E,aACpD/8E,KAAK68E,cAAgB,EAGrBe,EAAYhpE,SAASuoD,IACjB,MAAMpoD,EAAU8oE,EAAW1gB,GAC3BpoD,EAAQmjC,YAGJnjC,EAAQqxB,eAAexgC,OAASmgC,EAAOngC,SACvC43E,GAAqB,GAGzBzoE,EAAQqxB,eAAexxB,SAASlP,IAC5B+3E,GAAQ/3E,EAAEoL,aAAarG,MACvBizE,GAAQh4E,EAAE6gC,WAAWnlC,QACrBy9C,EAAOpqC,KAAK/O,EAAEoL,aAAarG,OAC3B0N,EAAU1D,KAAK/O,EAAE6gC,WAAWnlC,QAAQ,IAExC,MAAMqJ,EAAQsK,EAAQ6a,WACtB5vB,KAAK68E,eAAiBpyE,CAAK,IAE/BzK,KAAK88E,kBAAmB,EAExB,MAAMgB,EAAOL,EAAO,EAAIA,EAAO5+B,EAAOj5C,OAAS,EAAIi5C,EAAOj5C,OACpDm4E,EAAO54E,EAAS05C,EAAOtrC,KAAKyqE,GAAO/4E,KAAK+G,IAAIgyE,EAAKF,EAAM,MACvDG,EAAQh5E,KAAK+G,IAAI+xE,EAAOl/B,EAAOj5C,OAAQ,IAAOk4E,EAC9CI,EAAOR,EAAOvlE,EAAUvS,OACxBu4E,EAAOh5E,EAASgT,EAAU5E,KAAKyqE,GAAO/4E,KAAK+G,IAAIgyE,EAAKE,EAAM,MAC1DE,EAAQn5E,KAAK+G,IAAImyE,EAAOhmE,EAAUvS,OAAQ,IAAOs4E,EAEjDG,EAASp5E,KAAK8E,IAAIq0E,EAAOH,GAASL,EAAYh4E,OAAS23E,EACvDe,EAAef,EAAmBC,EACxC,OAAOx9E,KAAK68E,cAAgB53E,KAAK8E,IAAIu0E,EAAcD,EACvD,CAKAzjB,mBACI,IAAK56D,KAAK88E,iBACN,MAAM,IAAI35E,EAAa,kBAAmB,qFAE9C,OAAOnD,KAAK68E,aAChB,CAEAt3E,+BAA+BwgC,GAC3B,IAAKA,IAAWA,EAAOngC,OACnB,MAAM,IAAIzC,EAAa,cAAe,uBAE1C,MAAMi1D,EAAaryB,EAAO,GAAGuyB,gBAU7B,OAT6BvyB,EAAO1gC,QAAO,CAAC81E,EAAaj1C,KACrD,IAAKA,EAAMoyB,gBAAgBrxD,OAAOmxD,GAC9B,MAAM,IAAIj1D,EAAa,eAAgB,yDAE3C,GAAI+iC,EAAMwyB,YAAchB,GAAMC,KAAKK,SAAW9xB,EAAMgzB,aAChD,MAAM,IAAI/1D,EAAa,kBAAmB,qCAE9C,OAAO8B,KAAK8E,IAAIoxE,EAAa71E,EAASO,IAAIs1E,EAAaj1C,EAAM0yB,2BAA2B,GACzF,EAEP,CAEA2lB,uBAAuBx4C,GACnB,GAAqB,GAAjBA,EAAOngC,OACP,OACJ,MAAMkyD,EAAuB2C,GAAU7B,wBAAwB7yB,GAEzDy4C,EAAmB,IAAIlmD,IACvBkjC,EAAW,GAGjBz1B,EAAOnxB,SAASsxB,IAGZ,MAAM+xB,EAAY,IAAI3yD,EAAS,EAAGwyD,GAClC5xB,EAAME,eAAexxB,SAASkkD,IAC1B,MAAM2lB,EAAexmB,EAAUjyD,UAC/B,IAAI04E,EAAwBF,EAAiBh+E,IAAIs4D,EAASh+B,YAM1D,GAJK4jD,IACDF,EAAiBt4E,IAAI4yD,EAASh+B,WAAY,CAAC,GAC3C4jD,EAAwBF,EAAiBh+E,IAAIs4D,EAASh+B,eAEpD4jD,EAAwBA,EAAsBD,QAAgB76E,GAAY,CAC5E,MAAM+6E,EAAa,IAAI9T,GACvBrP,EAAS/mD,KAAKkqE,GAEdD,EAAsBD,GAAgBE,CAC1C,CAGA7lB,EAASjhB,qBAAqB6mC,EAAsBD,IACpDxmB,EAAU1xD,IAAIuyD,EAASvyB,WAAW,GACpC,IAENvmC,KAAKk9E,iBAAiBzoE,KAAK,CACvBlB,IAAKirE,EACLxB,MAAOxhB,EACP1D,wBAER,CAKA6lB,mBAAmB53C,GACf,MACMy1B,EAnbd,SAAwBz1B,EAAQ64C,EAAaC,GACzC,GAAqB,GAAjB94C,EAAOngC,OACP,MAAO,CACH2N,IAAK,CAAC,EACNypE,MAAO,GACPC,KAAM,GACNnlB,qBAAsB,GAG9B,MAAM0mB,EAAmB,CAAC,EACpBM,EAAW,GACXtjB,EAAW,GACX1D,EAAuB2C,GAAU7B,wBAAwB7yB,GAsB/D,OAnBAA,EAAOnxB,SAAQ,CAACsxB,EAAO42B,KAGnB,MAAM7E,EAAY,IAAI3yD,EAAS,EAAGwyD,GAClC5xB,EAAME,eAAexxB,SAASkkD,IAC1B,MAAM2lB,EAAexmB,EAAUjyD,UAE/B,IAAKw4E,EAAiBC,GAAe,CACjC,MAAME,EAAaC,EAAY,CAAEljB,OAAQ+iB,IACzCjjB,EAAS/mD,KAAKkqE,GACdH,EAAiBC,GAAgBE,EAEjCG,EAASrqE,KAAKgqE,EAClB,CAEAI,EAAa/lB,EAAU0lB,EAAiBC,GAAe3hB,GACvD7E,EAAU1xD,IAAIuyD,EAASvyB,WAAW,GACpC,IAEC,CACHhzB,IAAKirE,EACLxB,MAAOxhB,EACPyhB,KAAM6B,EAASr7C,MAAK,CAACh/B,EAAGC,IAAMD,EAAIC,IAClCozD,uBAER,CA2YyBinB,CAAeh5C,GAASo3B,GAAS,IAAI7B,GAAY6B,KADvD,CAACrE,EAAU/jD,EAAS+nD,IAAe/nD,EAAQ6kD,YAAYd,EAAUgE,KAE5E98D,KAAK+8E,aAAevhB,EACpB,MAAMwjB,EAAeh/E,KAAK+8E,aAAaC,MAIvC,OAHAgC,EAAapqE,SAASG,IAClBA,EAAQ0mD,UAAYujB,CAAY,IAE7BxjB,CACX,CAKAyjB,kBACI,OAAOj/E,KAAK+8E,YAChB,CAOA7kC,UAAUykC,EAAe,EAAGuC,EAAkBC,EAAa/nD,GAEvD,MAAMokC,EAAWx7D,KAAK+8E,aACtB,IAAKvhB,EACD,MAAM,IAAIr4D,EAAa,iBAAkB,mCAE7C,MAAQ85E,KAAMW,EAAarqE,IAAKsqE,GAAeriB,EAE/Cx7D,KAAKm9E,YAAc,GAGfgC,GAAe/nD,GACf+nD,EAAYvqE,SAASsxB,GAAUA,EAAM/O,SAASC,GAAO8gB,cAIzD,IAAIv0C,EAAI,EACJmC,EAAQ,EACZ9F,KAAK68E,cAAgB,EACrB,IAAIzkB,EAAa,EAEjBwlB,EAAYhpE,SAASuoD,IACjB,MAAMpoD,EAAU8oE,EAAW1gB,GAG3BpoD,EAAQmjC,YACR,MAAMztC,EAAQsK,EAAQ6a,WACtB5vB,KAAK68E,eAAiBpyE,EACtB,MAAMmxD,EAAW7mD,EAAQ0nD,cAAcr7D,QACvCg3D,GAAcwD,EACd,MAAMprD,EAAUuE,EAAQjE,aACxBnN,EAAIA,EAAImC,EAAQ0K,EAAQ2rD,YACxBpnD,EAAQ1L,KAAK1F,GAEbmC,EAAQ2E,EAAQ+F,EAAQ2rD,WAAW,IAGvC,MAAM,cAAEsgB,EAAa,cAAEtkB,EAAa,cAAEukB,GAAkB18E,KAAKw8E,iBAEvDljB,EAAen0D,EAASy4E,EAAYrqE,KAD7B4pD,GAASl4D,KAAK+G,IAAImsD,EAAgB0lB,EAAW1gB,GAAMV,cAAcr7D,QAAUg3D,MAKxF,GAHAp4D,KAAK68E,cAAgBl5E,EAAImC,EACzB9F,KAAK88E,kBAAmB,EAEpBH,GAAgB,EAChB,OAAO38E,KAAKo/E,WAGhB,MAAMC,EAAexB,EAAWD,EAAY,IACtCnY,EAAcoY,EAAWD,EAAYA,EAAYh4E,OAAS,IAGhE,SAAS05E,EAAwBC,GA8D7B,OA7DkB3B,EAAYrqE,KAAI,CAAC4pD,EAAMz0D,KACrC,MAAMqM,EAAU8oE,EAAW1gB,GACrBp3B,EAAShxB,EAAQgoD,sBACvB,IAAIyiB,EACJ,GAAI92E,EAAI,EAAG,CACP,MAAM+2E,EAAc5B,EAAWD,EAAYl1E,EAAI,IAI/C,IAAK,IAAI07C,EAAI17C,EAAI,EAAG07C,GAAK,EAAGA,IAAK,CAC7B,MACMs7B,EADW7B,EAAWD,EAAYx5B,IACZ2Y,sBAEtB4iB,EAAiB,GAMvB,GALAt/E,OAAOiT,KAAKyyB,GAAQnxB,SAAS8kD,IACrBgmB,EAAWhmB,IACXimB,EAAelrE,KAAKilD,EACxB,IAEAimB,EAAe/5E,OAAS,EAAG,CAE3B,IAAIg2D,EAAW,EACXgkB,EAAqBzsB,IACrB0sB,EAAmB,EAqBvB,GApBAF,EAAe/qE,SAAS8kD,IACpB,MAAMtpC,EAAQsvD,EAAWhmB,GAAGnzB,WAAWnlC,QACnCgvB,EAAQwrC,IACR4jB,EAAeE,EAAWhmB,GAC1BkC,EAAWxrC,GAGf,MAAM0vD,EAAe/5C,EAAO2zB,GACtBqmB,EAAiBD,EAAa72E,QAC/B62E,EAAahvE,aAAakqB,UAAY8kD,EAAahvE,aAAa8nC,qBAC/DonC,EAAcN,EAAWhmB,GAAG5oD,aAC5BmvE,EAAkBP,EAAWhmB,GAAGzwD,OAAS+2E,EAAYhnC,OAASgnC,EAAY/kD,WAAa+kD,EAAY9mC,qBAEzG0mC,EAAqB36E,KAAKulC,IAAIo1C,EAAoBG,EAAiBE,EAAgB,IAIvFL,EAAqB36E,KAAKulC,IAAIo1C,EAAoB7qE,EAAQ9L,QAAUw2E,EAAYx2E,OAAgC,IAAvBs2E,IAGrF9C,EAAe,CACf,MAAM/2E,EAAI0yD,EACVynB,EAAoB56E,KAAK+G,IAAImsD,EAAgByD,EAAWl2D,GAAM4zD,EAAgBimB,CAClF,WACiC,IAAjBC,IACZK,EAAmBL,EAAaxoC,WAAWwiB,QAAQoC,GAAY2jB,GAEnE,MAAO,CACHM,mBACAD,qBACAM,aAAcV,EAEtB,CACJ,CACJ,CACA,MAAO,CAAEK,iBAAkB,EAAGM,eAAgB,EAAGP,mBAAoB,EAAG,GAGhF,CACA,SAASQ,EAAsBC,GAE3B,MAAMC,EAAUf,EAAuB,EACvC,IAAIgB,EAAa,EAsBjB,OArBA3C,EAAYhpE,SAAQ,CAACuoD,EAAM7qD,KACvB,MAAMyC,EAAU8oE,EAAW1gB,GAC3B,GAAI7qD,EAAQ,EAAG,CACX,MAAMkuE,EAAWzrE,EAAQ9L,OACnBw3E,EAAQJ,EAAe/tE,GACvBouE,EAAUh9E,EAAQ+8E,EAAMP,cAAcj3E,OAASw3E,EAAMZ,kBAAoBW,EAAWD,GAC1F,IAAII,EAAkB,EAClBD,EAAU,EACVH,GAAcG,EAETA,EAAU,IACfC,EAAkB17E,KAAKulC,IAAIi2C,EAAMb,mBAAoB36E,KAAK+C,IAAI04E,IAC9DH,IAAeI,GAEnB5rE,EAAQ1L,KAAKm3E,EAAWD,EAC5B,CAEAxrE,EAAQioD,4BAA4BpoD,SAASkkD,IACzCA,EAASjiB,gBAAgBypC,EAAUvrE,EAAQ9L,OAAO,GACpD,IAECw8D,EAAYx8D,OAASo2E,EAAap2E,MAC7C,CACA,MAAMs2E,EAAuB5C,EACzBlX,EAAY30D,aAAakoC,OACzBysB,EAAY30D,aAAasrD,aACzBijB,EAAavuE,aAAaqrD,YACxB35B,EAAYxU,EAAOyU,mBACnBm+C,EAAmBp+C,EAAUpxB,aAAa,uBAC1CyvE,EAAmBr+C,EAAUpxB,aAAa,uBAC1Cg2D,EAAc5kC,EAAUpxB,aAAa,iBAC3C,IAAI0vE,EAAcvB,EAClB,MAAMwB,EAAYzB,EAAwBwB,GAC1C,IAAIE,EAAcZ,EAAsBW,GAExC,GAA2B,IAAvBnD,EAAYh4E,OACZ,OAAO,EACX,MASMq7E,EATkB,EAACH,EAAaC,KAClC,IAAIG,EAASJ,EAAc,EAC3B,GAAIC,EAAUn7E,OAAS,EACnB,IAAK,IAAIu7E,EAAK,EAAGA,EAAKJ,EAAUn7E,SAAUu7E,EACtCD,EAASj8E,KAAKulC,IAAIu2C,EAAUI,GAAItB,iBAAmB,EAAGqB,GAG9D,OAAOA,CAAM,EAEGE,CAAgBN,EAAaC,GAI3CM,EAAkBC,IACpB,IAAIC,EAAsB,EAC1B,MAAMC,EAAe/b,GAAeA,EAAY9I,iBAChD,GAAI6kB,EAAc,CACd,MAAMt7C,EAAQs7C,EAAaxqC,WAG3B,GAAI9Q,EAAMqyB,eAAen3D,QAAU8kC,EAAMoyB,gBAAgBl3D,QACrD,OAA0B,EAAnBy/E,EAAuBI,EAAcA,EAAcJ,EAE9D,MAAMY,EAAYD,EAAa5xD,WAC/B2xD,EACIr7C,EAAMszB,QAAQiM,EAAYhJ,cAAcr7D,SAAWkgF,GAAkBG,EAAYra,EACzF,CACA,OAA0B,EAAnByZ,EAAuBU,EAAsBA,EAAsBV,CAAgB,EAE9F,IAAIa,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAClD,MAAM1I,EAAOqH,EAAuBoC,EACpC,IAAIxrC,EAAaumC,EAGjB,KAAQsE,EAAc9I,GAAQ/hC,EAAa,GAAO6qC,EAAcU,EAAaxJ,GAAQ/hC,EAAa,GAC9F2qC,GAAeE,EAAc9I,EAC7BwJ,EAAaL,EAAeP,GAC5Ba,EAAaD,GAAcb,EAAmBD,GAC9CI,EAAcZ,EAAsBd,EAAwBwB,IAC5D3qC,IAGJ,OADAn2C,KAAK28E,aAAeA,EACb38E,KAAKo/E,UAChB,CAEAA,WACI,MAAM5jB,EAAWx7D,KAAK+8E,aAChBJ,EAAe38E,KAAK28E,aAG1B38E,KAAKq7E,YAAc,CAAEK,MAAO,EAAGJ,KAAM,IACrC9f,EAASyhB,KAAKroE,SAAQ,CAACuoD,EAAM7qD,KACzB,GAAc,IAAVA,EACA,OACJ,MAAMsvE,EAAWpmB,EAASyhB,KAAK3qE,EAAQ,GACjCmtE,EAAcjkB,EAASjoD,IAAIquE,GAC3B7sE,EAAUymD,EAASjoD,IAAI4pD,GACvB0kB,EAAcpC,EAAY3uE,aAC1BgxE,EAAc/sE,EAAQjE,aAEtBmvE,EAAkBR,EAAYx2E,OAAS44E,EAAY7oC,OAAS6oC,EAAYzlB,aAExE2jB,EAAiBhrE,EAAQ9L,OAAS64E,EAAY3lB,YAC9Cof,EAAMwE,EAAiBE,EAC7BjgF,KAAKq7E,YAAYK,OAASH,EAC1Bv7E,KAAKq7E,YAAYC,KAAK7mE,KAAK,CAAEvK,GAAI+1E,EAAiB51E,GAAI01E,IAEtDhrE,EAAQ2hC,sBAAsBR,QAAQ/c,KAAOoiD,EAC7CkE,EAAY/oC,sBAAsBR,QAAQ7c,MAAQkiD,CAAG,IAIzDv7E,KAAK48E,cAAgB,CAAC,EACtB,MAAMA,EAAgB58E,KAAK48E,cAW3B58E,KAAK+lC,OAAOnxB,SAASsxB,IACjBA,EAAME,eAAexxB,SAAQ,CAAC+kB,EAAMjxB,EAAGsnB,KACnC,MAAMzB,EAAWoL,EAAK4M,WAAW7+B,QAAQvB,WAAW8B,WAC9CuI,EAAUmpB,EAAK7oB,aACfmlC,EAAmBtc,EAAK+c,sBACxBqrC,EAAepoD,EAAK1wB,OAASuH,EAAQwoC,OAASxoC,EAAQyqB,WAAazqB,EAAQ0oC,qBACjF,IAAI9C,EAAQ,EACZ,GAAI1tC,EAAIsnB,EAAMpqB,OAAS,EAAG,CACtB,MAAMo8E,EAAYhyD,EAAMtnB,EAAI,GACtBu5E,EAAeD,EAAUlxE,aAE/BslC,EADsB4rC,EAAU/4E,OAASg5E,EAAajnD,UAAYinD,EAAarpC,oBACvDmpC,EACxB9rC,EAAiBG,MAAMC,KAAO2rC,EAAU/4E,OAAS0wB,EAAK1wB,OACtD+4E,EAAUtrC,sBAAsBR,QAAQ/c,KAAOid,CACnD,MAEIA,EAAQumC,EAAeoF,EACvB9rC,EAAiBG,MAAMC,KAAOsmC,EAAehjD,EAAK1wB,OAEtDgtC,EAAiBC,QAAQ7c,MAAQ+c,EA7BzC,SAAqB7nB,EAAU6nB,GAC3B,MAAM8rC,EAAQtF,EAAcruD,QACd3qB,IAAVs+E,EACAtF,EAAcruD,GAAY,CAAE+nB,KAAMF,EAAO+rC,MAAO,IAGhDD,EAAMC,OAAS,EACfD,EAAM5rC,MAAQ4rC,EAAM5rC,KAAOF,GAAS,EAE5C,CAqBQgsC,CAAY7zD,EAAU0nB,EAAiBG,MAAMC,KAAK,GACpD,IAIN,IAAIgsC,EAAiB,EAcrB,OAbAriF,KAAK+lC,OAAOnxB,SAASsxB,IACjBA,EAAME,eAAexxB,SAAS+kB,IAC1B,MAAMpL,EAAWoL,EAAK4M,WAAW7+B,QAAQvB,WAAW8B,WAC9CuI,EAAUmpB,EAAK+c,sBACrBlmC,EAAQ4lC,MAAME,KAAOsmC,EAAcruD,GAAU+nB,KAC7C9lC,EAAQ+d,SAAWA,EACnB/d,EAAQ2lC,YAAc,EACtB3lC,EAAQ4lC,MAAMG,UAAY/lC,EAAQ4lC,MAAMC,KAAO7lC,EAAQ4lC,MAAME,KAC7D+rC,GAAkBp9E,KAAK+G,IAAIwE,EAAQ4lC,MAAMG,UAAW,EAAE,GACxD,IAENv2C,KAAKw7E,UAAYv2E,KAAKmH,KAAKi2E,GAC3BriF,KAAKm9E,YAAY1oE,KAAKzU,KAAKw7E,WACpBx7E,KAAKw7E,SAChB,CASA8G,KAAKj0D,GACD,IAAIxgB,EACJ,MAAM2tD,EAAWx7D,KAAK+8E,aACtB,IAAKvhB,EACD,OAAO,EAEX,MAAM+mB,EAAmF,QAA1E10E,EAAKwgB,aAAyC,EAASA,EAAQk0D,aAA0B,IAAP10E,EAAgBA,EAAK,GAYtH,IAAI/H,EAAQ,EAsBZ,OArBA9F,KAAKylC,WAAa,EAClB+1B,EAASyhB,KAAKroE,SAAQ,CAACuoD,EAAM7qD,EAAO2qE,KAChC,MAAMloE,EAAUymD,EAASjoD,IAAI4pD,GACvBsiB,EAAcntE,EAAQ,EAAIkpD,EAASjoD,IAAI0pE,EAAK3qE,EAAQ,SAAM1O,EAC1Dq7D,EAAc3sD,EAAQ2qE,EAAKr3E,OAAS,EAAI41D,EAASjoD,IAAI0pE,EAAK3qE,EAAQ,SAAM1O,GAdlF,SAAc4+E,EAAS18E,EAAOu/C,EAAMn4C,GAChCs1E,EAAQn5E,KAAKm5E,EAAQv5E,OAASnD,GAC9B08E,EAAQ9rC,sBAAsBR,QAAQ/c,MAAQrzB,EAC9C08E,EAAQ9rC,sBAAsBR,QAAQ7c,OAASvzB,EAC3Cu/C,IACAA,EAAK3O,sBAAsBR,QAAQ7c,OAASvzB,GAC5CoH,IACAA,EAAKwpC,sBAAsBR,QAAQ/c,MAAQrzB,EACnD,CAOI2D,CAAKsL,EAASjP,EAAO25E,EAAaxgB,GAClC,MAAMwjB,GAAQt9E,EAAS4P,EAAQqxB,eAAe7yB,KAAK7N,GAAMA,EAAEgxC,sBAAsBN,MAAMG,aACnFksC,EAAO,EACP38E,GAASb,KAAKulC,IAAIz1B,EAAQ2hC,sBAAsBR,QAAQ7c,MAAOp0B,KAAK+C,IAAIy6E,IAEnEA,EAAO,IAER38E,EADAm5D,EACQh6D,KAAKulC,IAAIy0B,EAAYvoB,sBAAsBR,QAAQ7c,MAAOp0B,KAAK+C,IAAIy6E,IAGnE,GAGhB38E,GAASy8E,EACTviF,KAAKylC,YAAc3/B,CAAK,IAErB9F,KAAKo/E,UAChB,CAMAhnC,aAOI,OANAp4C,KAAKk9E,iBAAiBtoE,SAASsoE,IAC3BA,EAAiBF,MAAMpoE,SAASkjC,GAAOA,EAAGM,cAAa,IAE3Dp4C,KAAK+8E,aAAaE,KAAKroE,SAASuoD,IAC5Bn9D,KAAK+8E,aAAaxpE,IAAI4pD,GAAM/kB,YAAY,IAErCp4C,IACX,CAKA06D,WAAW30B,GAGP,OAFA/lC,KAAKu+E,uBAAuBx4C,GAC5B/lC,KAAK88E,kBAAmB,EACjB98E,IACX,CAWA26D,OAAO50B,EAAQ42C,EAActuD,GACzB,MAAMs8C,EAAOtqE,OAAOmX,OAAO,CAAEokE,aAAa,GAASvtD,GACnDruB,KAAK+lC,OAASA,EACd,MAAMoyB,EAAgBn4D,KAAKw8E,iBAAiBrkB,cAU5C,OATIA,GACAn4D,KAAK+lC,OAAOnxB,SAAS8kD,GAAMA,EAAEN,iBAAiBjB,KAElDn4D,KAAKo9E,WAAWr3C,EAAQ4kC,EAAKiR,aAC7B57E,KAAK29E,mBAAmB53C,GACxB/lC,KAAKk4C,UAAUykC,EAAchS,EAAK51D,QAASgxB,EAAQ4kC,EAAKvzC,OAEpDuzC,EAAKvzC,OACLp3B,KAAKo4C,aACFp4C,IACX,CAEA87E,cAAc/1C,EAAQ3O,EAAOsrD,GACzB,MAAMr0D,EAAUhuB,OAAOmX,OAAO,CAAEzC,QAASqiB,EAAMvgB,cAAgB6rE,GAEzD/F,EAAevlD,EAAM49C,cAAgB59C,EAAMolB,gBAAkBi3B,GAAMC,eAEzE,OAhyBR,YAAc3vE,GACN02D,GAAUn4B,OACVz+B,EAAI,qBAAsBE,EAClC,CA4xBQ,CAAE,+BAAgC44E,GAC3B38E,KAAK26D,OAAO50B,EAAQ42C,EAActuD,EAC7C,CACAwM,eAAesiC,GACX,IAAItvD,EACJ,OAAoC,QAA5BA,EAAK7N,KAAK+8E,oBAAiC,IAAPlvE,OAAgB,EAASA,EAAG0F,IAAI4pD,EAChF,EC7yBG,IAAIwlB,GDgzBXloB,GAAUn4B,OAAQ,EC/yBlB,SAAWqgD,GACPA,EAAeA,EAAuB,QAAK,GAAK,SAChDA,EAAeA,EAAoB,IAAI,GAAK,KAC/C,CAHD,CAGGA,KAAmBA,GAAiB,CAAC,IACjC,MAAMC,WAAe7uE,EACbrS,sBACP,OAAOG,EAAS+gF,MACpB,CACWC,0BACP,OAAOF,GAAe1yC,GAC1B,CACW6yC,6BACP,OAAOH,GAAeryC,MAC1B,CACWyyC,4BACP,OAAO,EACX,CACWvyE,qBACP,MAAMwyE,EAAgBh1D,EAAOyU,mBAAmB3xB,aAAaqmC,OAC7D,IAAK6rC,EACD,MAAM,IAAI7/E,EAAa,aAAc,kBACzC,OAAO6/E,CACX,CACAvhF,YAAYuuB,EAAO3B,EAAU,CAAC,GAI1B,GAHA9qB,QACAvD,KAAKijF,iBAAmB,GACxBjjF,KAAKkjF,aAAe,IACflzD,IAAUA,EAAMpqB,OACjB,MAAM,IAAIzC,EAAa,eAAgB,iCAE3CnD,KAAKquB,QAAUA,EACfruB,KAAKgwB,MAAQA,EACbhwB,KAAKmjF,UAAsCv/E,MAA1B5D,KAAKquB,QAAQ80D,UAAyBnjF,KAAKquB,QAAQ80D,UAAYnzD,EAAMpqB,OAGlF5F,KAAKquB,QAAQ+0D,gBACbpjF,KAAKqjF,kCAETrjF,KAAKsjF,eAAiBtjF,KAAKquB,QAAQi1D,gBAAkBtjF,KAAKquB,QAAQ+0D,gBAAkB,EACtDx/E,MAA1B5D,KAAKquB,QAAQk1D,UACbvjF,KAAKujF,UAAYvjF,KAAKquB,QAAQk1D,UAG9BvjF,KAAKujF,UAAYvzD,EAAM62B,MAAMltB,IAAUA,EAAKmiB,YAEhD97C,KAAKwjF,QACuB5/E,MAAxB5D,KAAKquB,QAAQm1D,QAAuBxjF,KAAKquB,QAAQm1D,QAAUv+E,KAAK+C,IAAIhI,KAAKsjF,eAAiBtjF,KAAKmjF,WAAa,EAChHnjF,KAAKk0B,MAAQlG,EAAOyU,mBAAmBrxB,aAAa,sBACpDpR,KAAK61B,MAAQ,GACb71B,KAAK41B,MAAQ,IACb51B,KAAKyK,MAAQ,IACbzK,KAAKyjF,kBAAkBzjF,KAAKquB,QAAQq1D,UAAYd,GAAOC,cACvDpoB,GAAU4iB,kBAAkBrtD,GAAO,GAAM,GACzChwB,KAAK2jF,gBACL3jF,KAAK4jF,QACT,CACAA,SACI,IAAK,IAAIl7E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,OAAQ8C,IAAK,CAC3B1I,KAAKgwB,MAAMtnB,GACnBkvC,UAAU53C,KACnB,CACJ,CACA6jF,SACI,IAAK,IAAIn7E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,OAAQ8C,IAAK,CAC3B1I,KAAKgwB,MAAMtnB,GACnB2uC,YAAYr3C,KACrB,CACJ,CAIA8jF,aAAaP,GAET,OADAvjF,KAAKujF,YAAcA,EACZvjF,IACX,CAIA+jF,WAAWP,GAEP,OADAxjF,KAAKwjF,UAAYA,EACVxjF,IACX,CAIAyjF,kBAAkBC,GAOd,OANIA,IAAad,GAAOC,cAAgBa,IAAad,GAAOE,kBAExD1+E,QAAQC,KAAK,4BAA4Bq/E,kCACzCA,EAAWd,GAAOC,cAEtB7iF,KAAK0jF,SAAWA,EACT1jF,IACX,CACAq3D,WACI,OAAOr3D,KAAKgwB,KAChB,CACAwnB,eACI,OAAOx3C,KAAKmjF,SAChB,CACAE,kCAEIj/E,QAAQC,KAAK,kGAAmG,4GAA6G,kDACjO,CACA2/E,mBAEI,OADAhkF,KAAKqjF,kCACErjF,KAAKy3C,kBAChB,CACAwsC,iBAAiBC,GAEb,OADAlkF,KAAKqjF,kCACErjF,KAAKmkF,iBAAiBD,EACjC,CACAzsC,mBACI,OAAOz3C,KAAKsjF,cAChB,CACAa,iBAAiBn0D,GACbhwB,KAAK6jF,SACL7jF,KAAKsjF,eAAiBtzD,EACtBhwB,KAAK2jF,gBACL3jF,KAAK4jF,QACT,CACAD,gBACI3jF,KAAKijF,iBAAmB,GACxB,IAAIr+E,EAAI5E,KAAKmjF,UACb,KAAOv+E,GAAK,GACR5E,KAAKijF,iBAAiBmB,QAAQ,IAAI30D,EAAM,UAAa7qB,EAAI,GAAK5E,KAAKk0B,QACnEtvB,EAAIC,UAAUD,EAAI,IAAIqD,WAAY,IAItC,IAFAjI,KAAKkjF,aAAe,GACpBt+E,EAAI5E,KAAKsjF,eACF1+E,GAAK,GACR5E,KAAKkjF,aAAakB,QAAQ,IAAI30D,EAAM,UAAa7qB,EAAI,GAAK5E,KAAKk0B,QAC/DtvB,EAAIC,UAAUD,EAAI,IAAIqD,WAAY,GAE1C,CAIAo8E,uBACI,MAAMX,EAAW1jF,KAAK0jF,SAChBntB,EAAav2D,KAAKgwB,MAAM,GAC9B,IAAIs0D,EAAiBC,EAAahuB,EAAYmtB,GAC1Cc,EAAiBD,EAAahuB,EAAYmtB,GAG9C,SAASa,EAAa5qD,EAAM+pD,GACxB,OAAO/pD,EAAKyd,iBAAiB6E,QAAQ9E,GAAWA,EAAOusC,WAAaA,IAAU99E,MAClF,CAMA,OALA5F,KAAKgwB,MAAMpb,SAAS+kB,IAChB,MAAM8qD,EAAcF,EAAa5qD,EAAM+pD,GACvCY,EAAiBG,EAAcH,EAAiBG,EAAcH,EAC9DE,EAAiBC,EAAcD,EAAiBC,EAAcD,CAAc,IAEzEF,EAAiBE,CAC5B,CAEAE,eAGI,MAAMC,EAAyB3kF,KAAKqkF,uBAAyBzB,GAAOG,gBAAkB/iF,KAAK0jF,SAErFx5C,EAAWlqC,KAAKquB,QAAQ6b,UAAY,EAGpCqsB,EAAav2D,KAAKgwB,MAAM,GAC9B,IAAI6F,EACJ,GAAI71B,KAAK0jF,WAAad,GAAOC,aAAc,CACvChtD,EAAQ0gC,EAAWp+B,aAAaoL,YAAY,GAAKq/C,GAAOpyE,QAAQo0E,kBAEhE,IAAK,IAAIl8E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EAAG,CACxC,MAAMixB,EAAO35B,KAAKgwB,MAAMtnB,GACxB,IAAIm8E,EAAW,EACf,MAAM/sC,EAAKne,EAAKM,qBACZ6d,IACA+sC,EAAW5/E,KAAK8E,IAAI86E,EAAU/sC,EAAGwE,WAAWjM,gBAEhD,MAAMy0C,EAAOnrD,EAAKgY,eAAekzC,GAAYjC,GAAOpyE,QAAQu0E,eAC5D,GAAIprD,EAAK6V,WAAa7V,EAAKmN,SAAU,CACjC,MAAMsqC,EAAQz3C,EAAK8V,qBAAuBjH,GAAKC,GACzC9O,EAAKoY,iBAAiBrH,KAAOk4C,GAAOpyE,QAAQw0E,WAC5CrrD,EAAKoY,iBAAiBpH,MAAQi4C,GAAOpyE,QAAQu0E,eACnDlvD,EAAQ5wB,KAAKulC,IAAI4mC,EAAOv7C,GACpBgvD,EAAW,IACXhvD,EAAQ5wB,KAAKulC,IAAIs6C,EAAMjvD,GAE/B,CACJ,CACJ,KACK,CACD,IAAIovD,EAAYrC,GAAOpyE,QAAQ4hE,WAE/BpyE,KAAKgwB,MAAMpb,SAASswE,IAChB,MAAMptC,EAAKotC,EAAGjrD,qBACV6d,IACAmtC,EAAYhgF,KAAK8E,IAAIk7E,EAAWntC,EAAGwE,WAAW/iB,UAAY,GAC9D,IAEJ1D,EAAQ0gC,EAAWp+B,aAAaoL,YAAY0hD,GAAarC,GAAOpyE,QAAQu0E,eACxE,IAAK,IAAIr8E,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EACrC,GAAI1I,KAAKgwB,MAAMtnB,GAAG8mC,WAAaxvC,KAAKgwB,MAAMtnB,GAAGo+B,SAAU,CACnD,MAAMq+C,EAAWnlF,KAAKgwB,MAAMtnB,GAAG+mC,qBAAuBjH,GAAKC,GACrDzoC,KAAKgwB,MAAMtnB,GAAGqpC,iBAAiBpH,MAAQi4C,GAAOpyE,QAAQu0E,eACtD/kF,KAAKgwB,MAAMtnB,GAAGqpC,iBAAiBrH,KAAOk4C,GAAOpyE,QAAQw0E,WACvDG,EAAWtvD,IACXA,EAAQsvD,EAEhB,CAER,CACA,OAAOtvD,EAAQ8uD,EAAyBz6C,CAC5C,CACAn0B,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cAEL,MAAMigD,EAAav2D,KAAKgwB,MAAM,GACxB65B,EAAY7pD,KAAKgwB,MAAMhwB,KAAKgwB,MAAMpqB,OAAS,GAC5C5F,KAAKujF,WAKNvjF,KAAK41B,MAAQ2gC,EAAW5Z,cAAgB,EACxC38C,KAAKyK,MAAQo/C,EAAUpN,eAAiBz8C,KAAK41B,MAAQ,IALrD51B,KAAK41B,MAAQ2gC,EAAWnlB,WACxBpxC,KAAKyK,MAAQo/C,EAAUzY,WAAapxC,KAAK41B,OAO7C51B,KAAK61B,MAAQ71B,KAAK0kF,eAClB,MAAMU,EAAgB,CAAC36E,EAAO6kB,IAAU7kB,EAAQ/G,EAAQ4rB,EAAMxe,aAAarG,OAE3E,IAAIA,EAAQzK,KAAKijF,iBAAiB59E,OAAO+/E,EAAe,GACpDplF,KAAKwjF,UACL/4E,EAAQzK,KAAKkjF,aAAa79E,OAAO+/E,EAAe36E,GAChDA,GAAsB,IAAbzK,KAAKk0B,OAElB,MACMmxD,EADoBrlF,KAAK41B,MAAQ51B,KAAKyK,MAAQ,EACPA,EAAQ,EAErD,GAAIzK,KAAKujF,UAAW,CAChB,MAAM3iC,EAAa5gD,KAAKyK,MAAQ,EAAIA,EAAQ,EAAI,EAE5Cm2C,EAAa,IACbjrB,EAAImqB,SAAS9/C,KAAK41B,MAAO51B,KAAK61B,MAAO+qB,EAAY,GACjDjrB,EAAImqB,SAAS9/C,KAAK41B,MAAQ51B,KAAKyK,MAAQ,EAAIA,EAAQ,EAAI,EAAGzK,KAAK61B,MAAO+qB,EAAY,GAClFjrB,EAAImqB,SAAS9/C,KAAK41B,MAAO51B,KAAK61B,OAAS71B,KAAK0jF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhB9iF,KAAK0jF,UAClG/tD,EAAImqB,SAAS9/C,KAAK41B,MAAQ51B,KAAKyK,MAAOzK,KAAK61B,OAAS71B,KAAK0jF,WAAad,GAAOE,gBAAkB,EAAI,GAAI,EAAmB,GAAhB9iF,KAAK0jF,UAEvH,CAEA,MAAM4B,EAASt3D,EAAOyU,mBAAmBrxB,aAAa,gBAAiB,GACvE,IAAIq6C,EAAW,EAMf,GALAzrD,KAAKijF,iBAAiBruE,SAAS0a,IAC3BA,EAAM0I,OAAOrC,EAAK0vD,EAAmB55B,EAAUzrD,KAAK61B,MAAQ71B,KAAKk0B,MAAQ,EAAI,EAAIoxD,GACjF75B,GAAY/nD,EAAQ4rB,EAAMxe,aAAarG,MAAM,IAG7CzK,KAAKwjF,QAAS,CACd,MAAM+B,EAAUF,EAAmB55B,EAAwB,IAAbzrD,KAAKk0B,MAC7CsxD,EAA4B,IAAbxlF,KAAKk0B,MAC1ByB,EAAIQ,YACJR,EAAI0f,IAAIkwC,EAASvlF,KAAK61B,MAAqB,IAAb71B,KAAKk0B,MAAcsxD,EAAc,EAAa,EAAVvgF,KAAKC,IAAQ,GAC/EywB,EAAI2f,YACJ3f,EAAIa,OACJb,EAAIQ,YACJR,EAAI0f,IAAIkwC,EAASvlF,KAAK61B,MAAqB,IAAb71B,KAAKk0B,MAAcsxD,EAAc,EAAa,EAAVvgF,KAAKC,IAAQ,GAC/EywB,EAAI2f,YACJ3f,EAAIa,OACJi1B,GAAyB,IAAbzrD,KAAKk0B,MACjBl0B,KAAKkjF,aAAatuE,SAAS0a,IACvBA,EAAM0I,OAAOrC,EAAK0vD,EAAmB55B,EAAUzrD,KAAK61B,MAAQ71B,KAAKk0B,MAAQ,EAAI,EAAIoxD,GACjF75B,GAAY/nD,EAAQ4rB,EAAMxe,aAAarG,MAAM,GAErD,CACJ,EC3TJ,SAASg7E,GAAuBz1D,GAC5B,IAAI01D,EAAU,EAQd,OAPA11D,EAAMpb,SAAS+kB,IACPA,EAAKygB,UACLzgB,EAAKygB,SAASxlC,SAAS+wE,IACnBD,GAAWC,EAAQ3hF,KAAO,CAAC,GAEnC,IAEA0hF,GAAW,EACJl9C,GAAKE,KAETF,GAAKC,EAChB,CAQO,MAAMm9C,GAAY,IACZC,GAAa,IACbC,GAAY,IAElB,MAAMhrB,WAAa/mD,EACXrS,sBACP,OAAOG,EAASi5D,IACpB,CAEArrB,mBACI,OAAOzvC,KAAKspC,cAChB,CAMA/jC,4BAA4BwgF,GACnBA,GAAyB,MAAbA,IACbA,EAAW,OAEf,MAkBM3qB,EAlBW,CACb,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,MAAO,CAAC,OACR,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,QACT,OAAQ,CAAC,SAEW2qB,GACxB,QAAeniF,IAAXw3D,EAiBA,OAAOA,EAAO7nD,KAAK8nD,IAAU,IAAI/1D,GAAWkD,MAAM6yD,KAjB5B,CAGtB,MAAM2qB,EAAYnhF,SAASkhF,EAASp9E,MAAM,KAAK,GAAI,IAC7Cs9E,EAAYphF,SAASkhF,EAASp9E,MAAM,KAAK,GAAI,IAEnD,GADoBq9E,EAAY,GAAM,EAElC,MAAO,CAAC,IAAI1gF,EAAS,EAAG2gF,IAEvB,GAAIA,EAAY,EACjB,MAAO,CAAC,IAAI3gF,EAAS,EAAG2gF,IAEvB,GAAIA,GAAa,EAClB,MAAO,CAAC,IAAI3gF,EAAS,EAAG2gF,GAEhC,CAIA,MAAO,CAAC,IAAI3gF,EAAS,EAAG,GAC5B,CAQAC,wBAAwB2gC,EAAOoD,EAAgB8xB,GAC3C,OAAON,GAAKorB,cAAchgD,EAAME,eAAgB,CAAEg1B,SAAQ9xB,kBAC9D,CA0BA/jC,qBAAqByqB,EAAOm2D,EAAS,CAAC,GAC7BA,EAAO/qB,QAAW+qB,EAAO/qB,OAAOx1D,SACjCugF,EAAO/qB,OAAS,CAAC,IAAI91D,EAAS,EAAG,KAGrC,MAAM8gF,EAAaD,EAAO/qB,OAAO7nD,KAAK8nD,IAClC,IAAKA,EAAMt0D,SACP,MAAM,IAAI5D,EAAa,oBAAqB,0DAEhD,OAAOk4D,EAAM3zD,QAAQX,SAASinB,EAAO9V,WAAY,EAAE,IAEjDmuE,EAAmBr2D,EACzB,IAAIs2D,EAAmB,EACnBC,EAAa,GACbC,EAAe,GAInB,SAASC,IACDL,EAAWxgF,OAAS,EAAI0gF,EACxBA,GAAoB,EAGpBA,EAAmB,CAE3B,EACA,WACI,IAAII,EAAY,GAEZC,EAAyB,IAAIrhF,EAAS,EAAG,GAC7C+gF,EAAiBzxE,SAASgyE,IAEtB,GADAF,EAAY,GACRE,EAAgBvgD,oBAGhB,OAFAkgD,EAAW9xE,KAAK+xE,QAChBA,EAAeE,GAGnBF,EAAa/xE,KAAKmyE,GAClB,MAAMC,EAAgBT,EAAWE,GAAkB5+E,QAC7C0wD,GAxBS0uB,EAwBkBN,EAvB9BM,EAASzhF,QAAO,CAAC0hF,EAAMptD,IAASA,EAAK4M,WAAW7+B,QAAQnB,IAAIwgF,IAAO,IAAIzhF,EAAS,EAAG,KAuBvCiB,IAAIogF,GAxB3D,IAAuBG,EA0Bf,MAAME,EAAah5D,EAAOk/B,iBAAiB05B,EAAgBprC,eAAiB,EAK5E,GAJIwrC,GAAcJ,EAAgB1vC,cAC9B2vC,EAAc7gF,WAAa,GAG3BoyD,EAAW9wD,YAAYu/E,GAAgB,CAGvC,IAAKG,EAAY,CACb,MAAMrtD,EAAO6sD,EAAa7uC,MACtBhe,GACA+sD,EAAUjyE,KAAKklB,EACvB,CACA4sD,EAAW9xE,KAAK+xE,GAKhB,GACIG,EAAyBvuB,EAAWtxD,SAASs/E,EAAWE,IACxDG,UACKE,EAAuBp/E,kBAAkB6+E,EAAWE,KAC7DE,EAAeE,CACnB,MACStuB,EAAWnxD,OAAO4/E,KACvBN,EAAW9xE,KAAK+xE,GAChBG,EAAyB,IAAIrhF,EAAS,EAAG,GACzCkhF,EAAeE,EACfD,IACJ,IAGAD,EAAa5gF,OAAS,GACtB2gF,EAAW9xE,KAAK+xE,EAExB,CA2GAS,GA3FA,WACI,MAAMC,EAAkB,GACxBX,EAAW3xE,SAASymD,IAChB,IAAI8rB,EAAY,GAChB9rB,EAAMzmD,SAAQ,CAAC+kB,EAAMrnB,EAAO+oD,KACxB,MAAM+rB,EAA0B,IAAV90E,GAAeA,IAAU+oD,EAAMz1D,OAAS,EACxDo9B,EAAWq4B,EAAM/oD,EAAQ,GACzB+0E,GAAoBlB,EAAOmB,YAAc3tD,EAAKmN,SAC9CygD,EAA0BpB,EAAOmB,YAAcnB,EAAOqB,kBAAoB7tD,EAAKmN,UAAYsgD,EACjG,IAAIK,GAAoB,EACxB,GAAItB,EAAOuB,0BAA4B1kD,IAAarJ,EAAKmN,WAAa9D,EAAS8D,SAAU,CACrF,MAAM6gD,EAAgB3kD,EAASyM,mBAE/Bg4C,EADyB9tD,EAAK8V,qBACWk4C,CAC7C,CACA,MAAMC,EAAuB/iF,SAAS80B,EAAK6hB,cAAe,IAAM,EAE5C6rC,GAAoBE,GAA2BE,GAAqBG,GAGhFT,EAAUvhF,OAAS,GACnBshF,EAAgBzyE,KAAK0yE,GAKzBA,EAAYM,EAAoB,CAAC9tD,GAAQ,IAIzCwtD,EAAU1yE,KAAKklB,EACnB,IAGAwtD,EAAUvhF,OAAS,GACnBshF,EAAgBzyE,KAAK0yE,EACzB,IAEJZ,EAAaW,CACjB,CAqDAW,GAnDItB,EAAW3xE,SAASymD,IAChB,IAAI9rB,EACJ,GAAI42C,EAAOuB,yBAA0B,CACjC,MAAM/tD,EAclB,SAAuB0hC,GACnB,IAAK,IAAI3yD,EAAI,EAAGA,EAAI2yD,EAAMz1D,OAAQ8C,IAAK,CACnC,MAAMixB,EAAO0hC,EAAM3yD,GACnB,IAAKixB,EAAKmN,SACN,OAAOnN,CAEf,CACA,OAAO,CACX,CAtByBmuD,CAAczsB,GAC3B9rB,EAAgB5V,EAAOA,EAAK8V,mBAAqBjH,GAAKC,EAC1D,MAGQ8G,EADA42C,EAAO78C,eACS68C,EAAO78C,eAGPm8C,GAAuBpqB,IAevD,SAA4BA,EAAOv6B,GAC/Bu6B,EAAMzmD,SAAS+kB,IACXA,EAAKq0B,iBAAiBltB,EAAU,GAExC,CAhBQinD,CAAmB1sB,EAAO9rB,EAAc,IAwChD,MAAMy4C,EA7GKzB,EAAWtqC,QAAQof,IACtB,GAAIA,EAAMz1D,OAAS,EAAG,CAClB,IAAIqiF,GAAW,EAMf,OALA5sB,EAAMzmD,SAAS+kB,IACPA,EAAK2e,qBAAuBtqB,EAAO8rB,gBAAgB,OACnDmuC,GAAW,EACf,IAEGA,CACX,CACA,OAAO,CAAK,IAqGdC,EAxBN,WACI,MAAMC,EAAgB,GAYtB,OAVA5B,EAAW3xE,SAASymD,IAChB,IAAIlkB,EACJkkB,EAAMzmD,SAAS+kB,IACX,MAAMyuD,EAAazuD,EAAKud,YACpBkxC,GAAcjxC,IAAWixC,IACzBjxC,EAASixC,EACTD,EAAc1zE,KAAK0iC,GACvB,GACF,IAECgxC,CACX,CAUmBE,GAEb7tB,EAAQ,GA+Bd,OA9BAwtB,EAAiBpzE,SAASymD,IACtB,MAAMzf,EAAO,IAAIkf,GAAKO,GAClB8qB,EAAOmC,gBACP1sC,EAAKnU,eAAe6gD,eAAgB,GAEpCnC,EAAOoC,mBACP3sC,EAAKnU,eAAe+gD,sBAAwBx6D,EAAO8rB,gBAAgBqsC,EAAOoC,oBAEpD,IAAtBpC,EAAOsC,aACP7sC,EAAKnU,eAAeghD,YAAa,EACjC7sC,EAAKnU,eAAeihD,iBAAmBvC,EAAOuC,kBAElDluB,EAAM/lD,KAAKmnC,EAAK,IAGpBssC,EAAWtzE,SAASuiC,IAEhB,MAAMrW,EAAYqW,EAAOnnB,MAAM,GAAGsZ,iBAAmBd,GAAKE,KAAOi6C,GAAeryC,OAASqyC,GAAe1yC,IACxGkH,EAAOssC,kBAAkB3iD,GAEzB,IAAIyiD,GAAY,EAChB,IAAK,IAAI76E,EAAI,EAAGA,EAAIyuC,EAAOnnB,MAAMpqB,OAAQ8C,IAAK,CAE1C,IADayuC,EAAOnnB,MAAMtnB,GAChBozC,UAAW,CACjBynC,GAAY,EACZ,KACJ,CACJ,CACApsC,EAAO2sC,aAAaP,EAAU,IAE3B/oB,CACX,CACA/4D,YAAYuuB,EAAO6gC,GAAY,GAU3B,GATAttD,QACAvD,KAAK2oF,MAAQ,EACb3oF,KAAKw0B,QAAU,EAMfx0B,KAAK4oF,wBAA0B,CAAC,GAC3B54D,GAA0B,IAAjBA,EAAMpqB,OAChB,MAAM,IAAIzC,EAAa,eAAgB,+BAE3C,GAAqB,IAAjB6sB,EAAMpqB,OACN,MAAM,IAAIzC,EAAa,eAAgB,2BAI3C,GADAnD,KAAKowB,MAAQJ,EAAM,GAAGsoB,oBAClBt4C,KAAKowB,OAASpC,EAAO8rB,gBAAgB,KACrC,MAAM,IAAI32C,EAAa,eAAgB,mEAE3C,IAAIuF,EACAixB,EACJ35B,KAAKspC,eAAiBtZ,EAAM,GAAGyf,mBAC/B,IAAInG,EAAiBtpC,KAAKspC,eAE1B,GAAIunB,GAAahuD,EAAYmtB,EAAM,IAC/BsZ,EAAiBm8C,GAAuBz1D,QAEvC,GAAI6gC,GAAa5tD,EAAU+sB,EAAM,IAAK,CAEvC,MAAM64D,EAAc74D,EAAM3qB,QAAO,CAAC0hF,EAAMptD,IAASotD,EAAOptD,EAAK8V,oBAAoB,GACjFnG,EAAiBu/C,GAAe,EAAIrgD,GAAKC,GAAKD,GAAKE,IACvD,CAEA,IAAKhgC,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAC5BixB,EAAO3J,EAAMtnB,GACTmoD,IACAl3B,EAAKq0B,iBAAiB1kB,GACtBtpC,KAAKspC,eAAiBA,GAE1B3P,EAAKoiB,QAAQ/7C,MAEjBA,KAAKq4C,eAAgB,EACrBr4C,KAAKgwB,MAAQA,EACbhwB,KAAK0zB,WAAa1zB,KAAK8tD,eACvB9tD,KAAK8oF,iBAAmB,GACxB9oF,KAAKynC,eAAiB,CAClBszB,WAAY,EACZguB,UAAW,IACXC,WAAY,IACZC,iBAAkB,GAClBC,WAAY,IACZZ,eAAe,EACfa,kBAAmB,EACnBnuB,oBAAqB,GACrBytB,YAAY,EACZW,qBAAsB,GAE9B,CAEA/xB,WACI,OAAOr3D,KAAKgwB,KAChB,CAEA89B,eAGI,OAFmB9tD,KAAKgwB,MAAMzc,KAAKomB,GAASA,EAAK0V,gBAAgB3b,aACjCruB,QAAO,CAAC0E,EAAKs/E,IAAeA,EAAYt/E,EAAMs/E,EAAYt/E,GAE9F,CAEAu/E,iBAAiBC,GAEb,OADAvpF,KAAK8oF,iBAAmBS,EACjBvpF,IACX,CAcAwpF,qBAAqB9O,EAAW+O,GAE5B,OADAzpF,KAAK4oF,wBAAwBlO,GAAa+O,EACnCzpF,IACX,CAKA0pF,uBAAuBhP,GAEnB,cADO16E,KAAK4oF,wBAAwBlO,GAC7B16E,IACX,CAEA2pF,UAAUhmF,EAAGozD,EAAYC,EAAY2xB,GACjC,OAAO3xB,GAAcrzD,EAAIozD,GAAc4xB,CAC3C,CAEAiB,iBACI,MAAM,MAAE55D,EAAOsZ,eAAgBiG,EAAe9H,gBAAgB,UAAEshD,EAAS,UAAEC,EAAS,iBAAEC,EAAgB,WAAEC,IAAkBlpF,KACpH6pF,EAAY75D,EAAM,GAClB85D,EAnbd,SAAsBD,EAAW7+B,GAC7B,MAAM++B,EAAgBF,EAAU93C,iBAAiBrH,KAC3Cs/C,EAAaH,EAAUz4C,WAG7B,OAFqB4Z,EAASjZ,iBAAiBrH,KAExBq/C,IADL/+B,EAAS5Z,WAC0B44C,EACzD,CA6a6BC,CAAaJ,EAAW75D,EAAMA,EAAMpqB,OAAS,IAC5DotC,GAAa+1C,EAAYC,GAAaC,EAC5C,IAAIiB,EAAU1kF,OAAO2kF,UACjBC,EAAY,EACZtyD,EAAS,EAEb,IAAK,IAAI6wD,EAAQK,EAAWL,GAASI,EAAWJ,GAAS31C,EAAW,CAChE,IAAIq3C,EAAqB,EACrBC,EAAa,EAEjB,IAAK,IAAI5hF,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAAG,CACnC,MAAMixB,EAAO3J,EAAMtnB,GACnB,GAAIixB,EAAK6V,WAAa7V,EAAKmN,SAAU,CACjC,MAAMyjD,EAAmBvqF,KAAK2pF,UAAUhwD,EAAKyX,WAAYy4C,EAAUz4C,WAAYy4C,EAAU93C,iBAAiBrH,KAAMi+C,GAAS2B,EACnH71C,EAAW9a,EAAKoY,iBAAiBrH,KAEvC,GAAI+J,EAAWlF,EAAgBg7C,EAAmBh7C,EAAe,CAC7D,MAAMi7C,EAAOvlF,KAAK+C,IAAIysC,EAAW81C,GACjCD,GAAcE,GAAQj7C,EACtB86C,GAAsBG,EAAO9hF,CACjC,MAGI2hF,IAAuB51C,EAAW81C,GAAoBh7C,CAE9D,CACJ,CAGA,MAAMk7C,EAAaX,EAAe,EAI5BrH,EAAOyG,EAHajkF,KAAK+C,IAAIyiF,EAAa9B,GAGF1jF,KAAK+C,IAAIqiF,GAEnD5H,EAAOyH,IACPA,EAAUzH,EACV2H,EAAYzB,EACZ7wD,EAASwyD,EAEjB,CACAtqF,KAAK2oF,MAAQyB,EACbpqF,KAAKw0B,QAAUsD,CACnB,CAEA4yD,qBACI,MAAM,MAAE16D,EAAK,eAAEsZ,EAAgB7B,gBAAgB,WAAEszB,EAAU,qBAAEquB,EAAoB,iBAAEV,IAAwB1oF,KAG3G,IAAI07E,EAAQ,EACRiP,EAAW,EACXC,EAAmB,EACnBC,EAAiB,EACrB,IAAK,IAAIniF,EAAI,EAAGA,EAAIsnB,EAAMpqB,OAAQ8C,IAAK,CAEnC,MAAMixB,EAAO3J,EAAMtnB,GACb+rC,EAAW9a,EAAKoY,iBAAiBrH,KACvCgxC,GAASjnC,EAGLnL,IAAmBd,GAAKE,MAAQmiD,EAAiBp2C,GACjDo2C,EAAiBp2C,EACjBk2C,EAAW1lF,KAAK8E,OAAO4vB,EAAK8X,SAC5Bm5C,EAAmBjxD,EAAKm0B,gBAEnBxkB,IAAmBd,GAAKC,KAA0B,IAAnBoiD,GAAwBA,EAAiBp2C,KAC7Eo2C,EAAiBp2C,EACjBk2C,EAAW1lF,KAAKulC,OAAO7Q,EAAK8X,SAC5Bm5C,EAAmBjxD,EAAKm0B,eAEhC,CAGA,IAAI+e,EAAS6O,EAAQ1rD,EAAMpqB,OAK3B,MACMklF,EAAc1B,EAAuBwB,GADZ,IAAb7vB,GAEZgwB,EAAYJ,EAAWG,GAAexhD,EACxCA,IAAmBd,GAAKE,MAAQmkC,EAASke,EACzCle,EAAS8d,EAAWG,EAEfxhD,IAAmBd,GAAKC,IAAMokC,EAASke,IAC5Cle,EAAS8d,EAAWG,GAEnBpC,GAIIp/C,IAAmBd,GAAKE,MAAQmkC,EAAS6b,GAGzCp/C,IAAmBd,GAAKC,IAAMokC,EAAS6b,KAF5C1oF,KAAKynC,eAAeihD,iBAAmB7b,GAHvC7sE,KAAKynC,eAAeihD,iBAAmB7b,EAS3C7sE,KAAK2oF,MAAQ,EACb3oF,KAAKw0B,QAAU,CACnB,CAEAw2D,iBAGI,IAAIC,EAFcjrF,KAAKgwB,MAAM,GACG+hB,iBAAiBrH,KAOjD,OAHI1qC,KAAKynC,eAAeghD,YAAczoF,KAAKynC,eAAeihD,mBACtDuC,EAAQjrF,KAAKynC,eAAeihD,kBAEzBuC,CACX,CAKAC,sBACI,MAAM,MAAEl7D,EAAK,MAAE24D,EAAK,QAAEn0D,EAAO,WAAEd,EAAY+T,gBAAgB,cAAE6gD,EAAa,kBAAEa,EAAiB,WAAEpuB,IAAkB/6D,KAC3G6pF,EAAY75D,EAAM,GAClB+5D,EAAgB/pF,KAAKgrF,iBACrBhB,EAAaH,EAAUz4C,WAC7B,IAAK,IAAI1oC,EAAI,EAAGA,EAAIsnB,EAAMpqB,SAAU8C,EAAG,CACnC,MAAMixB,EAAO3J,EAAMtnB,GACbqqB,EAAO4G,EAAKiW,UAClB,GAAI7c,EAAM,CACN,MAAM+iC,EAAQn8B,EAAKyX,YACX1G,KAAM+J,GAAa9a,EAAKoY,iBAC1Bo5C,EAAiBnrF,KAAK2pF,UAAU7zB,EAAOk0B,EAAYD,EAAepB,GAASn0D,EAC3E42D,EAAmBr4D,EAAKgX,eACxBshD,EAAgB1xD,EAAK8V,qBAAuBjH,GAAKC,GAAKgM,EAAW02C,EAAiBA,EAAiB12C,EAEzG,IAAI62C,EAAqB,EACzB,GAAI3xD,EAAK8V,qBAAuBzvC,KAAKspC,eAAgB,CAEjDgiD,GAAsB,EAAsB,KAD1B3xD,EAAK0V,gBAAgB3b,WACA,IAAY1zB,KAAKynC,eAAeszB,UAQ3E,CAGA,GAFAhoC,EAAK8W,aAAauhD,EAAmBC,EAAgBC,GACrDv4D,EAAKiY,sBACDrR,EAAKmN,UAAYwhD,EAAe,CAChC,MACMiD,GAAkB73D,EAAa,GADnBqnC,EACoC,IADpCA,EAElBhoC,EAAK6X,eAAc,GAAME,YAAW,EAAMygD,EAAiBpC,EAC/D,CACJ,CACJ,CACJ,CAEAqC,oBAAoBj9D,EAAUk9D,EAAWtuB,EAAMuuB,EAAWhR,GACtD,GAAiB,MAAbnsD,EACA,OAAOq3D,GAEX,MAAM+F,EAAsB3rF,KAAK4oF,wBAAwBlO,GACzD,GAAIiR,EACA,OAAOA,EACX,MAAMC,EAAkB,GAAG59D,EAAOk/B,iBAAiB3+B,GAAY,EACzDs9D,EAAsBJ,EAAYz9D,EAAO8rB,gBAAgB8xC,GACzDE,EAAsBJ,EAAY19D,EAAO8rB,gBAAgB8xC,GACzDG,EAAiB5uB,EAAOnvC,EAAO8rB,gBAAgB8xC,GACrD,OAAIC,GAAuBC,GAAuBC,EACvCjG,GAEF+F,IAAwBC,GAAuBC,EAC7CnG,IAEDiG,GAAuBC,GAAuBC,EAC7ClG,GAEJ7lF,KAAKwrF,oBAAoBI,EAAiBH,EAAWtuB,EAAMuuB,EAAWhR,EACjF,CAEAsR,aAAaz9D,GACT,MAAM09D,EAAmBj+D,EAAO8rB,gBAAgBvrB,GAChD,IAAI29D,GAAe,EACnB,MAAMC,EAAa,GACnB,IAAIC,EACJ,MAAMpxB,EAAsBh7D,KAAKynC,eAAeuzB,oBAChD,IAAIqxB,GAAwB,EACxBC,EAAa,EACjB,IAAK,IAAI5jF,EAAI,EAAGA,EAAI1I,KAAKgwB,MAAMpqB,SAAU8C,EAAG,CACxC,MAAMixB,EAAO35B,KAAKgwB,MAAMtnB,GAGxB4jF,GADc3yD,EAAK4M,WAAWnlC,QAE9B,IAAImrF,GAAe,EAEf1nF,SAAS0pB,EAAU,KAAO,IAE1Bg+D,GAAqD,IAAtCvsF,KAAK8oF,iBAAiB7yE,QAAQvN,GAGzC1I,KAAKynC,eAAe+gD,uBAAyB8D,GAActsF,KAAKynC,eAAe+gD,wBAC/E8D,EAAa,EACbC,GAAe,IAGvB,MAAMR,EAAiBpyD,EAAK2e,oBAAsB2zC,EAC5ChhD,EAAStR,EAAKyX,WAAa5I,GAAKG,MAAQ,EAGxC0hB,EAAYrqD,KAAKgwB,MAAMtnB,EAAI,GAC3B8jF,EAAYxsF,KAAKgwB,MAAMtnB,EAAI,GAC3BojF,EAAsBU,GAAaA,EAAUl0C,oBAAsB2zC,EACnEJ,EAAsBxhC,GAAaA,EAAU/R,oBAAsB2zC,EACnEQ,EAAapiC,GAAamiC,GAAaT,IAAmBF,IAAwBC,EAExF,GAAIC,EAEA,GAAIG,EAGAE,EAAeD,EAAWA,EAAWvmF,OAAS,GAC9CwmF,EAAanuC,IAAMhT,EAEfshD,IACAL,GAAe,EACXM,IAAcV,QAA4CloF,IAArBwoF,EAAanuC,MAGlDmuC,EAAanuC,IAAMmuC,EAAahkD,MAAQ4yB,QAI/C,CAID,GAFAoxB,EAAe,CAAEhkD,MAAO6C,EAAQgT,SAAKr6C,GACrCsoF,GAAe,EACXO,EAAY,CAEZ,MAAMhB,EAAYphC,EAAU/R,oBACtBozC,EAAYc,EAAUl0C,oBACtB6kB,EAAOxjC,EAAK2e,oBACZo0C,EAAiB1sF,KAAKwrF,oBAAoBj9D,EAAUk9D,EAAWtuB,EAAMuuB,EAAWhjF,GAClF,CAACk9E,GAAWE,IAAWhyE,SAAS44E,GAChCN,EAAanuC,IAAMmuC,EAAahkD,MAAQ4yB,EAGxCoxB,EAAanuC,IAAMmuC,EAAahkD,MAAQ4yB,CAEhD,MACU8wB,EAYDS,IAGLH,EAAanuC,IAAMmuC,EAAahkD,MAAQ4yB,EACxCkxB,GAAe,GAXXE,EAAanuC,KAHZouC,GAA+B,IAAN3jF,IAAY8jF,EAGnBJ,EAAahkD,MAAQ4yB,EAIrBoxB,EAAahkD,MAAQ4yB,EAShDmxB,EAAW13E,KAAK23E,EACpB,MAIAF,GAAe,EAInBG,EAAwBE,CAC5B,CAEA,MAAMI,EAAYR,EAAWA,EAAWvmF,OAAS,GAIjD,OAHI+mF,QAA+B/oF,IAAlB+oF,EAAU1uC,MACvB0uC,EAAU1uC,IAAM0uC,EAAUvkD,MAAQ4yB,GAE/BmxB,CACX,CAEAS,UAAUj3D,GACN31B,KAAKgwB,MAAMpb,SAAS+kB,IAChB,MAAM5G,EAAO4G,EAAKiW,UAClB,GAAI7c,EAAM,CACN,MAAMkY,EAAStR,EAAKyX,WACpBre,EAAK4W,mBAAmBsB,EAAQA,GAChClY,EAAKjc,WAAW6e,GAAK5f,MACzB,IACD/V,KACP,CAEA6sF,cAAcl3D,GACV,MAAMm3D,EAAuB,CAAC,IAAK,IAAK,KAAM,KAAM,MAC9CjD,EAAY7pF,KAAKgwB,MAAM,GAC7B,IAAIi7D,EAAQjrF,KAAKgrF,iBACjB,MAAMhB,EAAaH,EAAUz4C,WACvB27C,EAAgB/sF,KAAKynC,eAAeszB,WAAa/6D,KAAKspC,eAE5D,IAAK,IAAI5gC,EAAI,EAAGA,EAAIokF,EAAqBlnF,SAAU8C,EAAG,CAClD,MAAM6lB,EAAWu+D,EAAqBpkF,GAChCskF,EAAYhtF,KAAKgsF,aAAaz9D,GACpC,IAAK,IAAI61B,EAAI,EAAGA,EAAI4oC,EAAUpnF,SAAUw+C,EAAG,CACvC,MAAM6oC,EAAYD,EAAU5oC,GACtB8oC,EAAaD,EAAU7kD,MACvB+kD,EAAantF,KAAK2pF,UAAUuD,EAAYlD,EAAYiB,EAAOjrF,KAAK2oF,OAChEyE,EAAYH,EAAUhvC,IAC5B,IAAImvC,EAWA,MAAM,IAAIjqF,EAAa,cAAe,wBAX3B,CACX,MAAMkqF,EAAYrtF,KAAK2pF,UAAUyD,EAAWpD,EAAYiB,EAAOjrF,KAAK2oF,OACpEhzD,EAAIQ,YACJR,EAAIS,OAAO82D,EAAYC,GACvBx3D,EAAIU,OAAO62D,EAAYC,EAAaJ,GACpCp3D,EAAIU,OAAO+2D,EAAY,EAAGC,EAAYN,GACtCp3D,EAAIU,OAAO+2D,EAAY,EAAGC,GAC1B13D,EAAI2f,YACJ3f,EAAIa,MACR,CAIJ,CACAy0D,GAAyB,IAAhB8B,CACb,CACJ,CAEA70C,YACI,OAAOl4C,IACX,CAMAo4C,aACQp4C,KAAKq4C,gBAGLp1C,EAAUjD,KAAKgwB,MAAM,KAAOhwB,KAAKynC,eAAeghD,WAChDzoF,KAAK0qF,qBAGL1qF,KAAK4pF,iBAET5pF,KAAKkrF,sBACLlrF,KAAKq4C,eAAgB,EACzB,CAEAtiC,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACDtW,KAAKgnF,aAEJhnF,KAAKq4C,eACNr4C,KAAKo4C,aAETp4C,KAAK4sF,UAAUj3D,GACf31B,KAAK8U,aACL6gB,EAAI0V,UAAU,OAAQrrC,KAAK6S,aAAa,OACxC7S,KAAK6sF,cAAcl3D,GACnBA,EAAI4V,aACJvrC,KAAK2V,eACT,EC9yBG,MAAM23E,WAAiB5qF,GACfhB,sBACP,OAAOG,EAASyrF,QACpB,CACA7rF,YAAYwQ,EAAM7D,EAAM4gC,GACpBzrC,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAKiS,KAAOA,EACZ,MAAMic,EAAO,IAAIg9C,GAAKj5D,EAAM7D,EAAM4gC,GAClChvC,KAAKkuB,KAAOA,EAAKA,KACjBluB,KAAKgvC,WAAa9gB,EAAK8gB,WACvBhvC,KAAKoO,UAAgBxK,IAATwK,EAAqB,UAAYA,EAC7CpO,KAAKy5B,SAAShK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMrD,KAAKkuB,KAAKgG,MAAO,YAAYl0B,KAAKoO,SAE/EpO,KAAKg2C,cAAe,CACxB,CAEAqJ,QAAQptC,EAAM7D,EAAM4gC,GAChBhvC,KAAKiS,KAAOA,EACZjS,KAAKoO,KAAOA,EACZ,MAAM8f,EAAO,IAAIg9C,GAAKj5D,EAAM7D,EAAM4gC,GAIlC,OAHAhvC,KAAKkuB,KAAOA,EAAKA,KACjBluB,KAAKgvC,WAAa9gB,EAAK8gB,WACvBhvC,KAAKy5B,SAAShK,EAAMG,SAAS5vB,KAAKkuB,KAAK7qB,KAAMrD,KAAKkuB,KAAKgG,MAAO,YAAYl0B,KAAKoO,SACxEpO,IACX,CAEAmtE,UACI,OAAOntE,KAAKkuB,IAChB,CACAgqB,YAEI,OADAl4C,KAAKm4C,cAAe,EACbn4C,IACX,CAEA+V,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMi3E,EAAQvtF,KAAK04C,eAKnB,GAJAjpB,EAAM49B,YAAY13B,EAAK43D,EAAOn2D,EAAMmM,YAAYvjC,KAAKkuB,KAAKlqB,MAAOhE,KAAKkuB,KAAKgG,MAAOl0B,KAAKkuB,KAAK7qB,KAAM,CAC9F/B,SAAU,YAAYtB,KAAKoO,cAGPxK,IAApB5D,KAAKgvC,WAA0B,CAC/B,MAAMs8B,EAAa,IAAI77C,EAAMzvB,KAAKgvC,WAAW3rC,KAAMrD,KAAKgvC,WAAW9a,OACnEo3C,EAAWx0D,WAAW6e,GACtB21C,EAAWn0C,SAASC,GACpBk0C,EAAW9zC,UAAUJ,EAAMmM,YAAYvjC,KAAKgvC,WAAWhrC,MAAQozB,EAAMiB,iBACrEizC,EAAWh0C,UAAUt3B,KAAKgvC,WAAWza,SACrC+2C,EAAWlzC,cAAcm1D,EAC7B,CACJ,ECtBG,MAAMC,WAAkB9qF,GAEhBhB,sBACP,OAAOG,EAAS2rF,SACpB,CAEA/rF,YAAYi4C,GACRn2C,MAAMm2C,GACN15C,KAAKquB,QAAU,CAEXo/D,YAAa,EACbC,aAAc,EAEdl5D,QAAS,GAGbx0B,KAAK2tF,aAAc,EAEnB3tF,KAAKgE,KAAO01C,EAAW11C,MAAQ,EAE/BhE,KAAK0K,OAAS,EAClB,CAEA8hD,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA4tF,UAAUljF,GAEN,OADA1K,KAAK0K,OAASA,EACP1K,IACX,CAGA6tF,eAAeC,GAEX,OADA9tF,KAAK2tF,YAAcG,EACZ9tF,IACX,CAEAk4C,YAEI,OADAl4C,KAAKm4C,cAAe,EACbn4C,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACXshB,EAAQp3B,KAAKm4B,aACnBn4B,KAAKsW,cACL,MAAMy3E,EAAe/tF,KAAK66B,iBACpBmzD,EAAe1yB,GAAY4D,eAAe6uB,GAC1CE,EAAUjuF,KAAK04C,eACfi7B,EAAQqa,EAAeA,EAAa/kF,OAASmuB,EAAMnuB,OAASmuB,EAAMxH,WAClE9mB,EAAIsuB,EAAMmM,YAAYvjC,KAAKgE,MAAQ,GAAK,GA5EtD,YAAcD,GACNypF,GAAUlrD,OACVz+B,EAAI,qBAAsBE,EAClC,CA0EQ,CAAE,WAAY/D,KAAK2tF,YAAc,eAAiB,aAAc3tF,KAAK0K,OAAQ,IAAKujF,EAAUta,GAxEpG,SAAuBh+C,EAAKvH,GACxB,MAAM6/D,EAAU7/D,EAAO6/D,QACjBta,EAAQvlD,EAAOulD,MACf7qE,EAAIslB,EAAOtlB,EACXolF,EAAc9/D,EAAO1jB,OAAS,EACpCirB,EAAIQ,YACA/H,EAAO+/D,SACPx4D,EAAIS,OAAO63D,EAASnlF,EAAIolF,GACxBv4D,EAAIU,OAAOs9C,EAAO7qE,GAClB6sB,EAAIU,OAAO43D,EAASnlF,EAAIolF,KAGxBv4D,EAAIS,OAAOu9C,EAAO7qE,EAAIolF,GACtBv4D,EAAIU,OAAO43D,EAASnlF,GACpB6sB,EAAIU,OAAOs9C,EAAO7qE,EAAIolF,IAE1Bv4D,EAAI/G,SACJ+G,EAAI2f,WACR,CAuDQ84C,CAAcz4D,EAAK,CACfs4D,QAASA,EAAUjuF,KAAKquB,QAAQo/D,YAChC9Z,MAAOA,EAAQ3zE,KAAKquB,QAAQq/D,aAC5B5kF,EAAGA,EAAI9I,KAAKquB,QAAQmG,QACpB9pB,OAAQ1K,KAAK0K,OACbyjF,QAASnuF,KAAK2tF,aAEtB,EC3FG,IAAIU,GD6FXb,GAAUlrD,OAAQ,EC5FlB,SAAW+rD,GACPA,EAAcA,EAAyB,UAAI,GAAK,YAChDA,EAAcA,EAAwB,SAAI,GAAK,UAClD,CAHD,CAGGA,KAAkBA,GAAgB,CAAC,IAC/B,MAAMC,WAAcv6E,EACZrS,sBACP,OAAOG,EAASysF,KACpB,CACW31D,sBACP,OAAO01D,EACX,CACWz1D,4BACP,MAAO,CACH21D,SAAUF,GAAcG,UACxBC,QAASJ,GAAcK,SAE/B,CAOAjtF,YAAYktF,EAAMC,EAAIvgE,GAClB9qB,QACAvD,KAAKynC,eAAiBpnC,OAAOmX,OAAO,CAAEmnC,UAAW,EAAGpqB,QAAS,EAAGC,QAAS,GAAIhB,SAAU66D,GAAcG,UAAWK,aAAcR,GAAcG,UAAWM,QAAQ,EAAOC,IAAK,CACnK,CAAEprF,EAAG,EAAGmF,EAAG,IACX,CAAEnF,EAAG,EAAGmF,EAAG,MACVulB,GACTruB,KAAK2uF,KAAOA,EACZ3uF,KAAK4uF,GAAKA,CACd,CACA54B,SAAS24B,EAAMC,GACX,IAAKD,IAASC,EACV,MAAM,IAAIzrF,EAAa,eAAgB,kDAI3C,OAFAnD,KAAK2uF,KAAOA,EACZ3uF,KAAK4uF,GAAKA,EACH5uF,IACX,CAIA02D,YACI,OAAQ12D,KAAK2uF,OAAS3uF,KAAK4uF,EAC/B,CACAI,YAAY5gE,GACR,MAAMuH,EAAM31B,KAAK8V,eACXye,EAAUv0B,KAAKynC,eAAelT,QAC9BC,EAAUx0B,KAAKynC,eAAejT,QAAUpG,EAAO0S,UAC/CmuD,EAAU7gE,EAAO6gE,QAAU16D,EAC3B26D,EAAU9gE,EAAO8gE,QAAU16D,EAC3B26D,EAAS/gE,EAAO+gE,OAAS56D,EACzB66D,EAAShhE,EAAOghE,OAAS56D,EACzBmqB,EAAY3+C,KAAKynC,eAAekX,UAChCowC,EAAM/uF,KAAKynC,eAAesnD,KACxBprF,EAAG0rF,EAAMvmF,EAAGwmF,GAASP,EAAI,IACzBprF,EAAGs9D,EAAMn4D,EAAGo4D,GAAS6tB,EAAI,GAC3BQ,GAAcJ,EAASF,IAAYF,EAAInpF,OAAS,GACtD+vB,EAAIQ,YACJR,EAAIS,OAAO64D,EAASC,GACpBv5D,EAAIY,cAAc04D,EAAUM,EAAaF,EAAMH,EAAUI,EAAOlhE,EAAO0S,UAAWquD,EAASI,EAAatuB,EAAMmuB,EAASluB,EAAO9yC,EAAO0S,UAAWquD,EAAQC,GACxJz5D,EAAIY,cAAc44D,EAASI,EAAatuB,EAAMmuB,GAAUluB,EAAOviB,GAAavwB,EAAO0S,UAAWmuD,EAAUM,EAAaF,EAAMH,GAAWI,EAAO3wC,GAAavwB,EAAO0S,UAAWmuD,EAASC,GACrLv5D,EAAI/G,SACJ+G,EAAI2f,YACJ3f,EAAIa,MACR,CACAzgB,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMigD,EAAav2D,KAAK2uF,KAClB9kC,EAAY7pD,KAAK4uF,GACvB,IAAIK,EACAE,EACAD,EACAE,EACA9lD,EAAiB,EACjByZ,EAAS,QACTysC,EAAa,QACjB,SAASn1D,EAAY7G,GACjB,MAA2B,iBAAbA,EAAwB86D,GAAM11D,eAAepF,GAAYA,CAC3E,CACA,MAAMA,EAAW6G,EAAYr6B,KAAKynC,eAAejU,UAC3Cq7D,EAAex0D,EAAYr6B,KAAKynC,eAAeonD,cAWrD,GAVIr7D,IAAa66D,GAAcK,WAC3B3rC,EAAS,OACTysC,EAAa,QAEbX,IAAiBR,GAAcG,UAC/BgB,EAAa,QAERX,IAAiBR,GAAcK,WACpCc,EAAa,QAEbj5B,EACA04B,EAAU14B,EAAW9Z,eACrBnT,EAAiBitB,EAAW9mB,mBAC5By/C,EAAU34B,EAAWxkB,iBAAiBgR,OAErC,CAEDksC,EADcplC,EAAU1xB,aACRm/B,eAChB43B,EAAUrlC,EAAU9X,iBAAiBgR,EACzC,CACA,GAAI8G,EACAslC,EAAStlC,EAAUlN,cACnBrT,EAAiBugB,EAAUpa,mBAC3B2/C,EAASvlC,EAAU9X,iBAAiBy9C,OAEnC,CAEDL,EADc54B,EAAWp+B,aACVo/B,aACf63B,EAAS74B,EAAWxkB,iBAAiBy9C,EACzC,CAQA,OAPAxvF,KAAKgvF,YAAY,CACbC,UACAE,SACAD,UACAE,SACAtuD,UAAWwI,IAAiD,IAA/BtpC,KAAKynC,eAAeqnD,QAAmB,EAAI,MAErE,CACX,EC5HJ,SAAS,MAAK/qF,GACN0rF,GAAOntD,OACPz+B,EAAI,kBAAmBE,EAC/B,CAOA,SAAS2rF,GAAezuF,GACpB,GAAI,kBAAmBA,EACnB,OAAOA,EAAE0uF,cACb,GAAI,YAAa1uF,EACb,OAAOyuF,GAAezuF,EAAE2uF,SAC5B,MAAMA,EAAU3uF,EAChB,OAAuB,IAAnB2uF,EAAQhqF,OACD8pF,GAAeE,EAAQ,IACX,IAAnBA,EAAQhqF,OACD,KACJgqF,EAAQr8E,IAAIm8E,GACvB,CAIO,MAAMD,GAGThuF,YAAYouF,GACR7vF,KAAK6vF,QAAUA,EACf7vF,KAAKgE,KAAO,GACZhE,KAAKwqD,IAAM,EACXxqD,KAAK8vF,UA5BQ,CA6BjB,CAIAtnF,MAAMxE,GACFhE,KAAKgE,KAAOA,EACZhE,KAAKwqD,IAAM,EACXxqD,KAAK8vF,UApCQ,EAqCb,MAAM1iF,EAASpN,KAAK+vF,OAAO/vF,KAAK6vF,QAAQ9vC,SAExC,OADA3yC,EAAO0iF,SAAW9vF,KAAK8vF,SAChB1iF,CACX,CACA4iF,UAAUC,IAzCO,IA0CTjwF,KAAK8vF,WACL9vF,KAAK8vF,SAAW9vF,KAAKwqD,KACzBxqD,KAAKwqD,IAAMylC,CACf,CACAC,eACIlwF,KAAK8vF,UA/CQ,CAgDjB,CAGAK,WAAWC,EAAOC,GAAU,GACxB,MAAMC,EAASD,EAAU,IAAIE,OAAO,MAAQH,EAAQ,MAAQ,IAAIG,OAAO,MAAQH,EAAQ,UAEjFhjF,EADcpN,KAAKgE,KAAKE,MAAMlE,KAAKwqD,KACdrqB,MAAMmwD,GACjC,OAAe,OAAXljF,EACO,CACHojF,SAAS,EACTb,cAAeviF,EAAO,GACtBqjF,aAAcrjF,EAAO,GAAGxH,OACxB4kD,IAAKxqD,KAAKwqD,KAIP,CAAEgmC,SAAS,EAAOhmC,IAAKxqD,KAAKwqD,IAE3C,CAKAkmC,UAAUC,EAAMC,GAAQ,GACpB,MAAMhB,EAAU,GACVplC,EAAMxqD,KAAKwqD,IACjB,IAAIqmC,GAAa,EACbC,GAAW,EAGf,GAFAF,GAAkB,IAAVA,IAAiC,IAAfD,EAAKC,MAE3BD,EAAKZ,OACL,IAAK,MAAM7iF,KAAQyjF,EAAKZ,OAAQ,CAC5B,MAAMgB,EAAW/wF,KAAKwqD,IAChBp9C,EAASpN,KAAK+vF,OAAO7iF,GAG3B,GAAIE,EAAOojF,SAGP,GAFAZ,EAAQn7E,KAAKrH,GACb0jF,GAAW,EACPH,EAAKK,GACL,WAIJ,GADAH,GAAa,GACRF,EAAKK,GAAI,CACVhxF,KAAKwqD,IAAMumC,EACX,KACJ,CAER,CAEJ,MAAME,EAAUN,EAAKK,IAAMF,GAAaD,EAClCL,EAAUS,IAAoB,IAAVL,EACpBM,EAAaD,EAAS,EAAI,EAShC,OARIL,IAAUK,IACVjxF,KAAKwqD,IAAMA,GACXgmC,EACAxwF,KAAKkwF,eAGLlwF,KAAKgwF,UAAUxlC,GAEZ,CAAEgmC,UAASZ,UAASsB,aAC/B,CAGAC,gBAAgBR,EAAMC,GAAQ,GAC1B,MAAMhB,EAAU,GACVplC,EAAMxqD,KAAKwqD,IACjB,IAAI0mC,EAAa,EACbE,GAAO,EACX,EAAG,CACC,MAAMhkF,EAASpN,KAAK0wF,UAAUC,GAC1BvjF,EAAOojF,SAAWpjF,EAAOwiF,SACzBsB,IACAtB,EAAQn7E,KAAKrH,EAAOwiF,UAGpBwB,GAAO,CAEf,OAASA,GACT,MAAMZ,EAAUU,EAAa,IAAe,IAAVN,EASlC,OARIA,GAAWM,EAAa,IACxBlxF,KAAKwqD,IAAMA,GACXgmC,EACAxwF,KAAKkwF,eAGLlwF,KAAKgwF,UAAUxlC,GAEZ,CAAEgmC,UAASZ,UAASsB,aAC/B,CAEAG,iBAAiBV,GACb,OAAO3wF,KAAKmxF,gBAAgBR,GAAM,EACtC,CAIAZ,OAAOuB,GAEH,GADA,GAAE,4BAA6BA,IAC1BA,EACD,MAAM,IAAInuF,EAAa,yBAE3B,IAAIiK,EAOJ,MAAMujF,EAAOW,EAASC,KAAKvxF,KAAK6vF,QAAnByB,GACb,GAAIX,EAAKP,MAILhjF,EAASpN,KAAKmwF,WAAWQ,EAAKP,OAAwB,IAAjBO,EAAKN,SACtCjjF,EAAOojF,UAGPxwF,KAAKwqD,KAAOp9C,EAAOqjF,kBAGtB,KAAIE,EAAKZ,OAcV,MADA,GAAEY,GACI,IAAIxtF,EAAa,gDAAkDwtF,GAXrEvjF,EADAujF,EAAKa,UACIxxF,KAAKmxF,gBAAgBR,GAEzBA,EAAKc,WACDzxF,KAAKqxF,iBAAiBV,GAGtB3wF,KAAK0wF,UAAUC,EAMhC,CAIA,MAAMe,EAAU,GAQhB,OAPAtkF,EAAOskF,QAAUA,EACbtkF,EAAOwiF,SACPxiF,EAAOwiF,QAAQh7E,SAAS3T,GAAMywF,EAAQj9E,KAAKi7E,GAAezuF,MAE1D0vF,EAAKgB,KAAOvkF,EAAOojF,SACnBG,EAAKgB,IAAI,CAAED,YAERtkF,CACX,ECtMJ,SAAS,MAAKrJ,GACN6tF,GAAUtvD,OACVz+B,EAAI,qBAAsBE,EAClC,CDqMA0rF,GAAOntD,OAAQ,ECpMR,MAAMuvD,GACTpwF,YAAY4xC,GACRrzC,KAAKqzC,QAAUA,CACnB,CACA0M,QACI,OAAO//C,KAAKm1B,IAChB,CACAA,OACI,MAAO,CACH46D,OAAQ,CAAC/vF,KAAK8xF,MAAO9xF,KAAK+xF,OAAQ/xF,KAAKgyF,KAE/C,CACAF,QACI,MAAO,CACH/B,OAAQ,CAAC/vF,KAAKiyF,YAAajyF,KAAKkyF,QAChCP,IAAK,IAAM3xF,KAAKqzC,QAAQ8+C,cAEhC,CACAJ,SACI,MAAO,CACHhC,OAAQ,CAAC/vF,KAAKoyF,MAAOpyF,KAAK8xF,OAC1BL,YAAY,EAEpB,CACAS,SACI,MAAO,CACHnC,OAAQ,CAAC/vF,KAAKqyF,SAAUryF,KAAK4+C,KAAM5+C,KAAKsyF,KAAMtyF,KAAKuyF,MAE3D,CACAN,cACI,MAAO,CACHlC,OAAQ,CAAC/vF,KAAKwyF,MAAOxyF,KAAKyyF,YAC1BzB,IAAI,EAEZ,CACAwB,QACI,MAAO,CACHzC,OAAQ,CAAC/vF,KAAK0yF,OAAQ1yF,KAAK2yF,MAAO3yF,KAAK4yF,QAEvCjB,IAAMpvD,GAAUviC,KAAKqzC,QAAQw/C,SAAStwD,EAAMmvD,QAAQ,IAE5D,CACAiB,QACI,MAAO,CACH5C,OAAQ,CAAC/vF,KAAK8yF,MACdtB,WAAW,EAEnB,CACAsB,OACI,MAAO,CACH/C,OAAQ,CAAC/vF,KAAK+yF,SAAU/yF,KAAKgzF,WAAYhzF,KAAKizF,QAEtD,CACAR,aACI,MAAO,CACH1C,OAAQ,CAAC/vF,KAAK+yF,SAAU/yF,KAAKgzF,WAAYhzF,KAAKizF,QAC9CtB,IAAMpvD,IAEF,MAAMl6B,EAAIk6B,EACVviC,KAAKqzC,QAAQ6/C,cAAc7qF,EAAEqpF,QAAQ,GAAIrpF,EAAEqpF,QAAQ,GAAIrpF,EAAEqpF,QAAQ,GAAG,EAGhF,CACAsB,aACI,MAAO,CACHjD,OAAQ,CAAC/vF,KAAKmzF,WAAYnzF,KAAKozF,aAC/BxC,OAAO,EACPI,IAAI,EAEZ,CACAsB,OACI,MAAO,CACHvC,OAAQ,CAAC/vF,KAAKqzF,KACd5B,YAAY,EAEZE,IAAMpvD,GAAUviC,KAAKqzC,QAAQigD,YAAY/wD,EAAMmvD,SAEvD,CACA9yC,OACI,MAAO,CACHmxC,OAAQ,CAAC/vF,KAAKuzF,MAAOvzF,KAAKwzF,WAAYxzF,KAAKyzF,OAC3C7C,OAAO,EAEPe,IAAMpvD,GAAUviC,KAAKqzC,QAAQqgD,YAAYnxD,EAAMmvD,QAAQ,IAE/D,CACAW,WACI,MAAO,CACHtC,OAAQ,CAAC/vF,KAAKuzF,MAAOvzF,KAAK2zF,WAC1B/C,OAAO,EAEPe,IAAMpvD,GAAUviC,KAAKqzC,QAAQugD,gBAAgBrxD,EAAMmvD,QAAQ,IAEnE,CACAa,OACI,MAAO,CACHxC,OAAQ,CAAC/vF,KAAK6zF,SAAU7zF,KAAK8zF,OAAQ9zF,KAAK+zF,QAAS/zF,KAAKg0F,UACxDpD,OAAO,EAEf,CACAmD,UACI,MAAO,CACHhE,OAAQ,CAAC/vF,KAAKoyF,MAAOpyF,KAAK8zF,QAC1BrC,YAAY,EAEpB,CACAqC,SAEI,MAAO,CACH/D,OAAQ,CAAC/vF,KAAKi0F,IAAKj0F,KAAKk0F,OAAQl0F,KAAKm0F,KAErCxC,IAAMpvD,GAAUviC,KAAKqzC,QAAQ+gD,cAAc7xD,EAAMmvD,QAAQ,GAAYnvD,EAAMmvD,QAAQ,GAJ1DxtF,MAAM,GAAI,IAM3C,CACAiwF,MACI,MAAO,CACHpE,OAAQ,CAAC/vF,KAAKq0F,KAAMr0F,KAAKs0F,MACzBtD,IAAI,EAEZ,CACAiD,MACI,MAAO,CAAE7D,MAAO,uBACpB,CACAkE,OACI,MAAO,CAAElE,MAAO,cACpB,CACAiE,OACI,MAAO,CAAEjE,MAAO,cACpB,CACA2C,WACI,MAAO,CAAE3C,MAAO,WACpB,CACA6C,SACI,MAAO,CAAE7C,MAAO,SACpB,CACAgD,cACI,MAAO,CAAEhD,MAAO,cACpB,CACA+C,aACI,MAAO,CAAE/C,MAAO,8CACpB,CACAuD,YACI,MAAO,CAAEvD,MAAO,YACpB,CACAqD,QACI,MAAO,CAAErD,MAAO,eACpB,CACAsC,SACI,MAAO,CAAEtC,MAAO,MACpB,CACAwC,SACI,MAAO,CAAExC,MAAO,MACpB,CACAgC,QACI,MAAO,CAAEhC,MAAO,MACpB,CACAiD,MACI,MAAO,CAAEjD,MAAO,MACpB,CACAmD,QACI,MAAO,CAAEnD,MAAO,MACpB,CACAoD,aACI,MAAO,CAAEpD,MAAO,OACpB,CACA8D,SACI,MAAO,CAAE9D,MAAO,MACpB,CACAyD,WACI,MAAO,CAAEzD,MAAO,MACpB,CACA4D,WACI,MAAO,CAAE5D,MAAO,MACpB,CACA4B,MACI,MAAO,CAAE5B,MAAO,IACpB,EAEG,MAAMmE,GACT9yF,YAAY8sB,GACRvuB,KAAKw0F,MAAQ,GACbx0F,KAAKy5C,KAAO,EACZz5C,KAAKquB,QAAU,CAAC,EAChBruB,KAAKuuB,SAAWA,CACpB,EAEG,MAAMkmE,GACThzF,YAAYhC,GACRO,KAAK00F,YAAc,GACnB10F,KAAKP,QAAUA,EACfO,KAAKg3B,OACT,CACAA,MAAM3I,GACFruB,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEub,KAAM,OAAQ7E,KAAM,UAAYG,GAC/DruB,KAAK20F,SAAW,CAAE3kE,MAAO,GAAI1T,YAAa,IAC1Ctc,KAAK40F,gBAAkB,IACvB50F,KAAK60F,YACT,CACAlhD,aACI,OAAO3zC,KAAKP,OAChB,CACAq1F,cACI,OAAO90F,KAAK20F,QAChB,CACAI,cAAcC,GACVh1F,KAAK00F,YAAYjgF,KAAKugF,EAC1B,CACAH,aACI,GAAE,cACF70F,KAAKi1F,MAAQ,IAAIV,GAAMv0F,KAAK40F,gBAChC,CACAtB,YAAY75C,GACR,GAAE,eAAgBA,GACdA,IACAz5C,KAAKi1F,MAAMx7C,KAAOA,EAAK7zC,OAC/B,CACAguF,gBAAgBrlE,GACZ,GAAE,mBAAoBA,GACtBvuB,KAAK40F,gBAAkB50F,KAAKi1F,MAAM1mE,SAAWA,GAAYvuB,KAAK40F,eAClE,CACAlB,YAAYzhF,GACR,GAAE,eAAgBA,GACdA,IACAjS,KAAKi1F,MAAMhjF,KAAOA,EAC1B,CACAmiF,cAAcj0F,EAAKiB,GACf,GAAE,sBAAuBjB,EAAK,SAAUiB,GACxCpB,KAAKi1F,MAAM5mE,QAAQluB,GAAOiB,CAC9B,CACA8zF,QAAQ/0F,EAAKk+D,EAAOjiD,GAChB,GAAE,WAAYjc,EAAKk+D,EAAOjiD,GAC1Bpc,KAAKi1F,MAAMT,MAAM//E,KAAK,CAClBtU,IAAKA,EACLk+D,QACAjiD,UAER,CACA82E,cAAc/yF,EAAKk+D,EAAOjiD,GACtB,GAAE,iBAAkBjc,EAAKk+D,EAAOjiD,GAChCpc,KAAKk1F,QAAQ/0F,EAAKk+D,EAAOjiD,EAC7B,CAEAy2E,SAAS7iE,GACL,GAAE,cACsB,iBAAbA,EAAM,GACbhwB,KAAKkzF,cAAcljE,EAAM,IAGzBA,EAAMpb,SAAShQ,IACPA,GACA5E,KAAKk1F,WAAWtwF,EAAE,IAG9B,GAAE,WACN,CACAutF,cACI,GAAE,eACF,MAAM,QAAE1yF,GAAYO,KACpB,IAAKP,EACD,OACJ,MAAM4uB,EAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUruB,KAAKi1F,MAAM5mE,SAGpE0E,EAAOrvB,EAAQ2qB,EAAQ0E,KAAM,eAAgB,+BAA+B5kB,cAE5E+f,EAAOxqB,EAAQ2qB,EAAQH,KAAM,eAAgB,+BAA+B/f,eAC5E,MAAEqmF,EAAK,SAAEjmE,EAAQ,KAAEkrB,EAAI,KAAExnC,GAASjS,KAAKi1F,MAIvCE,EAAsB95D,GAAM/e,YAC5BhJ,EAAOkhF,EAAMjhF,KAAK6hF,IACpB,IAAIvnF,EACJ,OAAOunF,EAAUj1F,KACZg1F,EAAoBrhF,SAAoC,QAA1BjG,EAAKunF,EAAU/2B,aAA0B,IAAPxwD,EAAgBA,EAAK,IAAMunF,EAAU/2B,MAAQ,IAC9G,IACA+2B,EAAUh5E,MAAM,IAElBy0C,EAAqB,SAAT99B,EAEZ4G,EAA2E,MAAnE1nB,aAAmC,EAASA,EAAK9D,eACzD1O,EAAQ41F,UAAU,CAAE9mE,WAAUkrB,SAC9Bh6C,EAAQqD,UAAU,CAAEwQ,OAAMib,WAAUkrB,OAAMxnC,OAAMic,OAAM2iC,cACvDA,GACDl3B,EAAKq0B,iBAA0B,OAATj7B,EAAgByV,GAAKC,GAAKD,GAAKE,MAEzD,MAAMpsB,EAAc,GACpBk4E,EAAM5/E,SAAQ,CAACwgF,EAAW9iF,KACtB,MAAM+rD,EAAQ+2B,EAAU/2B,MACxB,GAAqB,iBAAVA,EAAoB,CAC3B,MAAMzjD,EAAanb,EAAQqC,WAAW,CAAEmQ,KAAMosD,IAC9C1kC,EAAK4N,YAAY3sB,EAAYtI,GAC7BgK,EAAY7H,KAAKmG,EACrB,MAEI0B,EAAY7H,UAAK7Q,EACrB,IAGJ,IAAK,IAAI8E,EAAI,EAAGA,EAAI+wC,EAAM/wC,IACtBtG,GAAIkzF,eAAe,CAAC37D,GAAO,CAAEyvB,KAAK,IACtCppD,KAAK00F,YAAY9/E,SAASogF,GAAeA,EAAW3mE,EAASsL,EAAM35B,QACnEA,KAAK20F,SAAS3kE,MAAMvb,KAAKklB,GACzB35B,KAAK20F,SAASr4E,YAAY7H,KAAK6H,GAC/Btc,KAAK60F,YACT,EAKJ,SAASU,GAAMlnE,EAASsL,QACD/1B,IAAfyqB,EAAQrc,IAEZ2nB,EAAK5mB,aAAa,KAAMsb,EAAQrc,GACpC,CAEA,MAAMwjF,GAAsB,UAI5B,SAASC,GAASpnE,EAASsL,QACD/1B,IAAlByqB,EAAQnc,OAEZmc,EAAQnc,MAAMvJ,MAAM6sF,IAAqB5gF,SAASjB,GAAcgmB,EAAKzjB,SAASvC,IAClF,CAIO,MAAMi+E,GACTnwF,YAAY4sB,EAAU,CAAC,GACnBruB,KAAK01F,SAAW,CACZxnE,KAAM,SACN0pC,KAAM,MACN7kC,KAAM,QAEV/yB,KAAK+2B,WAAW1I,EACpB,CASAnoB,IAAIwvF,GAEA,OADA11F,KAAK01F,SAAWr1F,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAK01F,UAAWA,GACzD11F,IACX,CAKA+2B,WAAW1I,GACP,IAAIxgB,EAAIoF,EAER,MAAMxT,EAAU4uB,EAAQ5uB,QAClB4zC,EAAqC,QAA1BxlC,EAAKwgB,EAAQglB,eAA4B,IAAPxlC,EAAgBA,EAAK,IAAI4mF,GAAQh1F,GAQpF,OAPAO,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAEk9E,YAAa,CAACa,GAAOE,GAAU7iD,GAAa+iD,cAAezrC,GAAeyrC,eAAgBC,cAAc,GAASvnE,GAAU,CAAE5uB,UACtK4zC,YACJrzC,KAAKP,QAAUA,EACfO,KAAKqzC,QAAUA,EACfrzC,KAAK6vF,QAAU,IAAIgC,GAAiB7xF,KAAKqzC,SACzCrzC,KAAK61F,OAAS,IAAIpG,GAAOzvF,KAAK6vF,SACM,QAAnC58E,EAAKjT,KAAKquB,QAAQqmE,mBAAgC,IAAPzhF,GAAyBA,EAAG2B,SAASogF,GAAeh1F,KAAK+0F,cAAcC,KAC5Gh1F,IACX,CACA8W,WAAW/B,GAEP,OADA/U,KAAKP,QAAQqX,WAAW/B,GACjB/U,IACX,CACAwI,MAAMxE,EAAMqqB,EAAU,CAAC,GACnBruB,KAAKqzC,QAAQrc,MAAM3I,GACnB,MAAMjhB,EAASpN,KAAK61F,OAAOrtF,MAAMxE,GACjC,IAAKoJ,EAAOojF,SAAWxwF,KAAKquB,QAAQunE,aAEhC,MADA,GAAExoF,GACI,IAAIjK,EAAa,uBAAyBa,GAEpD,OAAOoJ,CACX,CACAwuC,KAAK5rB,EAAO3B,GAER,OADAruB,KAAKP,QAAQq7D,KAAK,CAAE9qC,QAAO3B,YACpB2B,CACX,CACAmnB,OAAOnnB,EAAO3B,GAEV,OADAruB,KAAKP,QAAQmjF,OAAO,CAAE5yD,QAAO3B,YACtB2B,CACX,CACAA,MAAMhsB,EAAMqqB,EAAU,CAAC,GAGnB,OAFAA,EAAUhuB,OAAOmX,OAAO,CAAE0W,KAAMluB,KAAK01F,SAASxnE,KAAM6E,KAAM/yB,KAAK01F,SAAS3iE,MAAQ1E,GAChFruB,KAAKwI,MAAMxE,EAAMqqB,GACVruB,KAAKqzC,QAAQyhD,cAAc9kE,KACtC,CACAkW,MAAMlW,EAAO3B,EAAU,CAAC,GAEpB,OADAA,EAAUhuB,OAAOmX,OAAO,CAAEogD,KAAM53D,KAAK01F,SAAS99B,MAAQvpC,GAC/CruB,KAAKP,QAAQi4D,MAAMrpC,GAASwrC,aAAa7pC,EACpD,CACA+kE,cAAcC,GACVh1F,KAAKqzC,QAAQ0hD,cAAcC,EAC/B,EAEJpD,GAAUtvD,OAAQ,EC1ZlB,MAAMwzD,GAAY,uEACX,MAAMT,WAAkBryF,GAChBtB,sBACP,OAAOG,EAASwzF,SACpB,CACA5zF,YAAYs0F,GACR,IAAKA,EACD,MAAM,IAAI5yF,EAAa,eAAgB2yF,IAE3C,IAAIp8C,EACJ,GAAyB,iBAAdq8C,EAEPr8C,EAAa,CAAEnrB,SAAUwnE,OAExB,IAAyB,iBAAdA,EAIZ,MAAM,IAAI5yF,EAAa,eAAgB2yF,IAHvCp8C,EAAaq8C,CAIjB,CACAxyF,MAAMm2C,GAEN15C,KAAKy5B,SAAS,EAClB,CAIAqN,SACI,OAAO,CACX,CACA3P,SAASC,GAEL,OADA7zB,MAAM4zB,SAASC,GACRp3B,IACX,CAGA63C,qBAAqBC,GAEjB,OAAO93C,IACX,CACAk4C,YAEI,OADAl4C,KAAKm4C,cAAe,EACbn4C,IACX,CACA+V,OAEI/V,KAAKsW,cACL,IAAK,IAAI5N,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,SAAU8C,EAAG,CAC5C,MAAM4+B,EAAWtnC,KAAK41C,UAAUltC,GAC5B3G,EAAaulC,KACbA,EAASxwB,WAAW9W,KAAK6W,cACzBywB,EAASzxB,gBAEjB,CACJ,ECvDG,MAAMmgF,WAAkBtzF,GAChBhB,sBACP,OAAOG,EAASm0F,SACpB,CACAv0F,YAAY6tB,EAAOoqB,EAAYrrB,GAC3B9qB,MAAMm2C,GACN15C,KAAKquB,QAAUhuB,OAAOmX,OAAO,CAAEy+E,aAAa,EAAOjyF,KAAM,GAAKqqB,GAE9DruB,KAAKg2C,aAAeh2C,KAAKquB,QAAQ4nE,YACjCj2F,KAAKkzE,SAAS5jD,EAClB,CACA4jD,SAAS5jD,GAGL,OAFAtvB,KAAKsvB,MAAQA,EACbtvB,KAAKy5B,SAASz5B,KAAKsvB,MAAMxe,aAAarG,OAC/BzK,IACX,CACA4W,iBACI,OAAO5W,KAAKsvB,MAAM1Y,gBACtB,CACAshC,YAKI,OAJKl4C,KAAKm4C,cAAgBn4C,KAAKk6B,iBAC3Bl6B,KAAKk6B,gBAAgBge,YAEzBl4C,KAAKm4C,cAAe,EACbn4C,IACX,CACA40D,gBACI,MAAMj/B,EAAM31B,KAAK8V,eACjB,IAAK,IAAIpN,EAAI,EAAGA,EAAI1I,KAAK41C,UAAUhwC,OAAQ8C,IAAK,CAC5C,MAAM4+B,EAAWtnC,KAAK41C,UAAUltC,GAChC4+B,EAASxwB,WAAW6e,GACpB2R,EAASzxB,eACb,CACJ,CAEA0lC,gBACI,OAAOv7C,KAAKsvB,MAAMxe,aAAarG,KACnC,CACAsL,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAMyB,EAAMthB,eAClB9V,KAAKsW,cACLtW,KAAK8U,WAAW6gB,GAChBA,EAAI0V,UAAU,YAAarrC,KAAK6S,aAAa,OAE7C,MAAMyc,EAAQtvB,KAAKsvB,MACdA,EAAMzY,cACPyY,EAAMxY,WAAW6e,GAErBrG,EAAM6H,SAASC,GACf9H,EAAMkI,UAAUJ,EAAMmM,YAAYvjC,KAAKquB,QAAQrqB,MAAQozB,EAAMiB,iBAC7D,MAAM10B,EAAI3D,KAAK42C,kBAAoB52C,KAAK04C,eAAiB14C,KAAK4vB,WAAa,EAAI5vB,KAAK04C,eACpFppB,EAAM8I,cAAcz0B,GACpB3D,KAAK40D,gBACLj/B,EAAI4V,aACJvrC,KAAK2V,aAAaggB,EACtB,ECvDG,MAAMrzB,WAAkBQ,GAChBpB,sBACP,OAAOG,EAASS,SACpB,CACW8sD,gCACP,OAAO,CACX,CACW8mC,mBACP,MAAO,GACX,CACAz0F,YAAYi4C,GACRn2C,MAAMlD,OAAOmX,OAAO,CAAEmjC,iBAAkB3sB,EAAOyC,oBAAsBnuB,GAAU4zF,MAAOt7C,UAAWt4C,GAAU8sD,oBAAsB1V,IACjI15C,KAAKm2F,MAAQz8C,EAAWy8C,QAAS,EACjCn2F,KAAKs6D,MAAO,EACZt6D,KAAKixD,iBACLjxD,KAAKyK,MAAQ,CACjB,CACAojD,mBACI,GAAI7tD,KAAKuuD,wBACL,OAAOvuD,KAAKuuD,wBAEhB,MAAMhU,EAAav6C,KAAKqvC,gBACxB,GAAIkL,EAAY,CACZ,IAAI67C,EAAM7yF,MAAMsqD,mBAChB,GAAItT,EAAWxnB,KAAM,CACjB,MAAMsjE,EAAiBr2F,KAAKs1D,oBAC5B8gC,GAAO5tD,GAAKI,OAASwtD,GAAOC,EAAiB7tD,GAAKI,MACtD,CACA,OAAOwtD,CACX,CACA,OAAO,CACX,CACA9gC,oBACI,OAAOt1D,KAAKynC,eAAekT,iBAAmB3sB,EAAOyC,mBACzD,CACA1a,OACIxS,MAAMwS,OACN/V,KAAKsW,cACL,MAAMyc,EAAO/yB,KAAK+yB,KAClB,GAAI/yB,KAAKm2F,OAASpjE,EAAM,CACpB,MAAMsjE,EAAiBr2F,KAAKs1D,oBAEtBghC,EAAcD,EAAiB,IACrC,IAAIE,EACJ,MAAM36C,EAAO57C,KAAK47C,KAClB,GAAIA,EAEKA,EAAKvD,eACNuD,EAAKxD,aAETm+C,EAAYv2F,KAAKw2F,yBAAyB,EAAIF,EAAa,EAAIA,EAAa,CACxEvjE,KAAM,EAAIujE,EACV16C,KAAM,EAAI06C,QAGb,CACD,MAAMhtD,EAAiBtpC,KAAKyvC,mBACtBgnD,EAAiBz2F,KAAKgyD,oBACtBmD,EAAiBpiC,EAAKkX,YAC5B,IAAItmC,EAAI3D,KAAK04C,eACT5vC,EAAIwgC,IAAmBd,GAAKE,KAC1B+tD,EAAettD,MAAQgsB,EACvBshC,EAAertD,SAAW+rB,EAChC,MAAMuhC,EAAuBptD,IAAmBd,GAAKE,KAAO1oC,KAAKu6C,WAAWrnB,oBAAsBlzB,KAAKu6C,WAAWtnB,kBAClH,IAAI0jE,EAAiB3oE,EAAO4C,YAC5B+lE,GAAkBA,EAAiB,IACnCA,GAAkBD,EAClB5tF,GAAK6tF,EAAiBN,EAAiB/sD,EACvC,MAAM2kB,EAAU3kB,IAAmBd,GAAKC,GAClC,CACEv+B,GAAI,EACJE,GAAI,EACJC,GAAI,GACJC,IAAK,GAEP,CACEJ,IAAK,EACLE,GAAI,EACJC,GAAI,GACJC,GAAI,GAEZ3G,GAAKsqD,EAAQ/jD,GAAKosF,EAClBxtF,GAAKmlD,EAAQ7jD,GAAKksF,EAClBC,EAAY,CACRrsF,GAAIvG,EACJyG,GAAItB,EACJuB,GAAI1G,EAAIsqD,EAAQ5jD,GAAKisF,EACrBhsF,GAAIxB,EAAImlD,EAAQ3jD,GAAKgsF,EAE7B,CAEA,MAAM3gE,EAAM31B,KAAK8V,eACjB6f,EAAI3gB,OACJ2gB,EAAIjgB,aAAa,EAAI4gF,GACrB3gE,EAAIQ,YACJR,EAAIS,OAAOmgE,EAAUrsF,GAAIqsF,EAAUnsF,IACnCurB,EAAIU,OAAOkgE,EAAUlsF,GAAIksF,EAAUjsF,IACnCqrB,EAAI2f,YACJ3f,EAAI/G,SACJ+G,EAAI/f,SACR,CACJ,CACA4gF,yBAAyBI,EAAiBC,EAAiBC,GACvD,MAAMl7C,EAAO57C,KAAK47C,KAClB,IAAKA,EACD,MAAM,IAAIz4C,EAAa,SAAU,mCACrC,MAAM4zF,EAAan7C,EAAK+sC,MAElBlmB,EADgB7mB,EAAK5rB,MAAM4rB,EAAK5rB,MAAMpqB,OAAS,KAAO5F,MAC5B,EAAI,EAC9Bg3F,EAAa/xF,KAAKgyF,KAAKF,EAAat0B,GAEpCy0B,EACEjyF,KAAK++D,IAAIgzB,GAAcH,EADzBK,EAEEjyF,KAAKi/D,IAAI8yB,GAAcH,EAE/BD,GAAmB52F,KAAKyvC,mBACxB,MAAM0nD,EAAclyF,KAAKgyF,MAAMC,EAAkBN,GAAmBM,GAC9DE,EAAqBnyF,KAAK++D,IAAImzB,GAAeL,EAAY/jE,KAAO0vC,EAChE40B,EAAqBpyF,KAAKi/D,IAAIizB,GAAeL,EAAY/jE,KACzDukE,EAAqBryF,KAAK++D,IAAImzB,GAAeL,EAAYl7C,KAAO6mB,EAChE80B,EAAqBtyF,KAAKi/D,IAAIizB,GAAeL,EAAYl7C,KACzDka,EAAQ91D,KAAKoxC,WACbomD,EAAS57C,EAAK5rB,MAAM,GAAGohB,WACvBqmD,EAAQ77C,EAAKovC,kBAAoBl1B,EAAQ0hC,GAAUT,EAOzD,MANY,CACR7sF,GAAI4rD,EAAQshC,EACZhtF,GAAIqtF,EAAQb,EAAkBS,EAC9BhtF,GAAIyrD,EAAQohC,EAAkBz0B,EAAS60B,EACvChtF,GAAImtF,EAAQP,EAAkBK,EAGtC,ECpIG,MAAMG,WAAmBh1F,GACjBhB,sBACP,OAAOG,EAAS61F,UACpB,CACAj2F,YAAYsuB,EAASy7C,EAAeC,GAChCloE,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAK6hC,aAAe,IAAI0pC,GAAax7C,EAASy7C,EAAeC,GAE7DzrE,KAAKg2C,cAAe,CACxB,CAGA6B,qBAAqBC,GAEjB,OAAO93C,IACX,CACAk4C,YAII,OAHAl4C,KAAKm4C,cAAe,EACpBn4C,KAAK6hC,aAAa1K,SAASn3B,KAAKm4B,cAChCn4B,KAAKy5B,SAASz5B,KAAK6hC,aAAajS,YACzB5vB,IACX,CACA+V,OACI,MAAM4f,EAAM31B,KAAKm4B,aAAariB,eAC9B9V,KAAKsW,cACLtW,KAAK6hC,aAAax4B,KAAKrJ,KAAK04C,gBAC5B14C,KAAK6hC,aAAa/qB,WAAW6e,GAC7B31B,KAAK6hC,aAAa9rB,MACtB,ECrBJ,IAAI4hF,GAYG,MAAMC,WAAyB7jF,EACvBrS,sBACP,OAAOG,EAAS+1F,gBACpB,CAMAn2F,YAAYo2F,EAAoBxpE,GAC5B9qB,QACAvD,KAAK83F,GAAK,CAAE3+D,KAAMhvB,IAAKkvB,MAAOlvB,KAC9BnK,KAAK+3F,gBAAiB,EACtB/3F,KAAKg4F,iBAAkB,EACvBh4F,KAAKi4F,kBAAmB,EACxBj4F,KAAKk4F,kBAAmB,EACxBl4F,KAAK63F,mBAAqBA,EAE1B73F,KAAK+3F,eAAiD,iBAAzB1pE,EAAQ8pE,aACrCn4F,KAAKg4F,gBAAmD,iBAA1B3pE,EAAQ+pE,cACtCp4F,KAAKi4F,iBAAqD,iBAA3B5pE,EAAQgqE,eACvCr4F,KAAKk4F,iBAAqD,iBAA3B7pE,EAAQiqE,eACvC,MAAM91D,EAAYxU,EAAOyU,mBACzBziC,KAAKynC,eAAiBpnC,OAAOmX,OAAO,CAAE+gF,aAAa,EAAOC,aAAa,EAAMC,aAAc,GAAKC,mBAAoBl2D,EAAUpxB,aAAa,gBAAiBpN,KAAM,EAAGmwE,yBAA0BnmD,EAAOgD,oBAAqB2nE,gBAAiB,EAAGC,2BAA4B5qE,EAAOyC,oBAAqB0nE,aAAc,EAAGC,cAAe,EAAGC,eAAgB,EAAGC,eAAgB,GAAKjqE,GAClX,MAAMqkD,EAAgBlwC,EAAUpxB,aAAa,mBAAoB,GACjEpR,KAAKynC,eAAegxD,aAAe/lB,CACvC,CACAmmB,QACI,OAAO74F,KAAK83F,EAChB,CACA3gE,SAASC,GAEL,OADAp3B,KAAKo3B,MAAQA,EACNp3B,IACX,CACA86B,WACI,OAAO96B,KAAKo3B,KAChB,CACAe,aACI,OAAOz0B,EAAQ1D,KAAKo3B,MAAO,UAAW,iCAC1C,CACA0hE,SAAS1hE,EAAOzB,EAAKwD,EAAME,EAAO0/D,GAC9B,MAAM1qE,EAAUruB,KAAKynC,eACf3+B,EAAIsuB,EAAMmM,YAAYlV,EAAQrqB,MAC9BwwC,EAA2B,IAAhBnb,EAAQF,GAGzB,IAAI6/D,EAFJ7/D,GAAQqb,EACRnb,GAASmb,EAGLwkD,EADAh5F,KAAKi4F,iBACwC,GAAzB5pE,EAAQgqE,eAGc,IAAtBU,EAExB,MAAME,EAAiB5qE,EAAQsqE,gBACzBvmD,EAAMtpC,EAAIiwF,EACVG,EAAMpwF,EAAIiwF,EACVI,EAAehgE,EAAO8/D,EACtBG,EAAgB//D,EAAQ4/D,EACxBI,EAAUvwF,EAAIkwF,EACdM,EAAaxwF,EAAIkwF,EACvBrjE,EAAI3gB,OACJ2gB,EAAIQ,YACJR,EAAIS,OAAO+C,EAAMiZ,GACjBzc,EAAIU,OAAO8iE,EAAc/mD,GACzBzc,EAAIU,OAAO8iE,EAAcE,GACzB1jE,EAAIU,OAAO+iE,EAAeC,GAC1B1jE,EAAIU,OAAO+iE,EAAehnD,GAC1Bzc,EAAIU,OAAOgD,EAAO+Y,GAClBzc,EAAIU,OAAOgD,EAAO6/D,GAClBvjE,EAAIU,OAAO+iE,EAAeF,GAC1BvjE,EAAIU,OAAO+iE,EAAeE,GAC1B3jE,EAAIU,OAAO8iE,EAAcG,GACzB3jE,EAAIU,OAAO8iE,EAAcD,GACzBvjE,EAAIU,OAAO8C,EAAM+/D,GACjBvjE,EAAI2f,YACJ3f,EAAIa,MACR,CACA+iE,YAAYniE,EAAOzB,EAAKwD,EAAME,EAAO0/D,GACjC,MAAMS,EAAKv0F,KAAK4C,MAAM7H,KAAK63F,mBAAqB,GAC1CjzF,EAAI5E,KAAK63F,mBAAqB,EAC9B4B,EAAKx0F,KAAK4C,MAAMjD,EAAI,GACpB80F,EAAK90F,EAAI,EACTypB,EAAUruB,KAAKynC,eAGrBkwD,QAAiB/zF,EACjB,MAAMsY,EAjGd,WACI,IAAKy7E,GAAgB,CACjB,MAAM3mC,EAAW,IAAIlF,GAAS,CAAEv9B,SAAU,IAAK29B,UAAW,MAC1DyrC,GAAiB,CACbh9C,iBAAkBqW,EAASvpB,eAAekT,iBAC1CwR,WAAY6E,EAAS7E,WACrB1hD,MAAOumD,EAASphC,WAExB,CACA,OAAO+nE,EACX,CAuFqBgC,GACPC,EAAavrE,EAAQuqE,2BACrBiB,EAAa39E,EAAKzR,OAASmvF,EAAa19E,EAAKy+B,kBAC7CxpC,EAAS,CACX,EAAG,CACC1G,MAAoB,GAAbovF,EACPnvF,OAAQquF,GAEZ,EAAG,CACCtuF,MAAOovF,IAITvoD,EAAUtxC,KAAKk4F,iBAAmB7pE,EAAQiqE,eAAiB,GAEjE,IAAI30F,EAAIw1B,EAAwB,IAAhBE,EAAQF,GAAsB,IADhCqgE,EAAKroF,EAAO,GAAG1G,MAAQgvF,EAAKtoF,EAAO,GAAG1G,MAAQivF,EAAKvoF,EAAO,GAAG1G,OAAS+uF,EAAKC,EAAKC,EAAK,GAAKpoD,GAExG,MAAMttC,EAAOqqB,EAAQrqB,KACfkvD,EAAO97B,EAAMmM,YAAYv/B,EAAO,GAChC81F,EAAU1iE,EAAMmM,YAAYv/B,GAC5BovD,EAAUh8B,EAAMmM,YAAYv/B,EAAO,GACzC2xB,EAAI3gB,OACJ2gB,EAAIngB,eAAe,QACnBmgB,EAAIjgB,aAAa,GACjB,IAAK,IAAIhN,EAAI,EAAGA,EAAI8wF,IAAM9wF,EACtBitB,EAAImqB,SAASn8C,EAAGm2F,EAAU3oF,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvEirB,EAAImqB,SAASn8C,EAAGyvD,EAAUjiD,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvE/G,GAAKwN,EAAO,GAAG1G,MAAQ6mC,EAE3B,IAAK,IAAI5oC,EAAI,EAAGA,EAAI+wF,IAAM/wF,EACtBitB,EAAImqB,SAASn8C,EAAGm2F,EAAU3oF,EAAO,GAAGzG,OAAQyG,EAAO,GAAG1G,MAAO0G,EAAO,GAAGzG,QACvE/G,GAAKwN,EAAO,GAAG1G,MAAQ6mC,EAE3B,IAAK,IAAI5oC,EAAI,EAAGA,EAAIgxF,IAAMhxF,EACtB+mB,EAAM49B,YAAY13B,EAAKhyB,EAAGuvD,EAAM0mC,EAAY19E,EAAKiwC,YACjDxoD,GAAKwN,EAAO,GAAG1G,MAAQ6mC,EAE3B3b,EAAI/f,SACR,CACAG,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAM8gB,EAAQp3B,KAAKm4B,aACnB,IAAIgB,EAAO/B,EAAMolB,gBACbnjB,EAAQjC,EAAM49C,cAKlB,MAAMoC,EAAehgD,EAAMiQ,aAAayV,GAAsBsC,OAClC,IAAxBg4B,EAAaxxE,QAAgB3D,EAAUm1E,EAAa,MACpDj+C,GAAQi+C,EAAa,GAAGxnD,YAE5B,MAAMvB,EAAUruB,KAAKynC,eACjBznC,KAAK+3F,iBACL5+D,EAAO/B,EAAMnuB,OAASolB,EAAQ8pE,cAE9Bn4F,KAAKg4F,kBACL3+D,EAAQjC,EAAMnuB,OAASmuB,EAAMxH,WAAavB,EAAQ+pE,eAEtDp4F,KAAK83F,GAAG3+D,KAAOA,EACfn5B,KAAK83F,GAAGz+D,MAAQA,EAChB,MAAM0/D,EAAsB1qE,EAAQ8lD,yBAOpC,GANI9lD,EAAQkqE,YACRv4F,KAAKu5F,YAAYniE,EAAOzB,EAAKwD,EAAME,EAAO0/D,GAG1C/4F,KAAK84F,SAAS1hE,EAAOzB,EAAKwD,EAAME,EAAO0/D,GAEvC1qE,EAAQmqE,YAAa,CACrB,MAAMlmB,EAAW,IAAMtyE,KAAK63F,mBACtBkC,EAAU,IAAI1nB,GAAcC,EAAU,GAAG,GAC/CynB,EAAQ7lE,MAAQ7F,EAAQqqE,mBACxBqB,EAAQpnB,WAAWL,GACnBynB,EAAQ5iE,SAASC,GACjB2iE,EAAQ1wF,KAAK8vB,EAAwB,IAAhBE,EAAQF,GAA2D,GAA7C4gE,EAAQ9mB,UAAU3jD,MAAMxe,aAAarG,OAChFsvF,EAAQ3nB,WAAa/jD,EAAQoqE,YAC7BsB,EAAQjjF,WAAW6e,GAAK5f,MAC5B,CACJ,EC1KJ,SAASikF,GAAerpF,EAAMoE,EAASpR,EAAGmF,EAAGorB,GACzC,MAAM+lE,EAAaC,GAAatqB,OAAOj/D,GACzB,IAAI8e,EAAMwqE,EAAW52F,KAAM6wB,EAAO,CAAE5yB,SAAU,iBACtD02B,OAAOjjB,EAASpR,EAAIs2F,EAAW1lE,QAASzrB,EAAImxF,EAAWzlE,QACjE,CAQO,MAAM0lE,WAAqBnmF,EACnBrS,sBACP,OAAOG,EAASq4F,YACpB,CAKA30F,qBAAqByqB,GAEjB,OADc,IAAIkqE,GAAalqE,EAEnC,CAEAzqB,uBAAuByqB,GACnB,MAAMmqE,EAAQ,IAAID,GAAalqE,GAG/B,OAFAmqE,EAAM96C,QAAQ66C,GAAajoF,KAAKmoF,OAChCD,EAAME,cAAc,cACbF,CACX,CAEA50F,sBAAsByqB,GAClB,MAAMmqE,EAAQ,IAAID,GAAalqE,GAG/B,OAFAmqE,EAAM96C,QAAQ66C,GAAajoF,KAAKizC,MAChCi1C,EAAME,cAAc,YAAa,aAC1BF,CACX,CACA14F,YAAYuuB,GACRzsB,QACAvD,KAAKgwB,MAAQA,EACbhwB,KAAKiS,KAAOioF,GAAajoF,KAAKizC,KAC9BllD,KAAKgE,KAAO,EAEZhE,KAAKs6F,oBAAsB,GAC3Bt6F,KAAKu6F,oBAAsB,GAC3Bv6F,KAAK2X,YACL3X,KAAKynC,eAAiB,CAClB+yD,eAAgB,GAChBC,kBAAmB,EACnBC,mBAAoB,EACpBtlD,MAAO,QAEf,CAEAiK,QAAQptC,GAKJ,OAJAA,EAAuB,iBAATA,EAAoBioF,GAAat8C,WAAW3rC,GAAQA,IACtDioF,GAAajoF,KAAKizC,MAAQjzC,GAAQioF,GAAajoF,KAAKmoF,QAC5Dp6F,KAAKiS,KAAOA,GAETjS,IACX,CAKAq6F,cAAcM,EAASl6C,GAGnB,OAFAzgD,KAAKs6F,oBAAsBK,GAAW,GACtC36F,KAAKu6F,oBAAsB95C,GAAW,GAC/BzgD,IACX,CAEAwsD,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA46F,gBACI,MAAMjlE,EAAM31B,KAAK8V,eACjB,IACI+kF,EACAC,EAFAC,GAAqB,EAIzB/6F,KAAKgwB,MAAMpb,SAAQ,CAAC+kB,EAAMrnB,EAAO0d,KAE7B+qE,GAAsBA,EAEtB,MAAMp3F,EAAIg2B,EAAK+e,eACT5vC,EAAI6wB,EAAKxB,aAAayZ,kBAAkB5xC,KAAKgE,KAAO,GAE1D,GAAIL,EAAIk3F,EACJ,MAAM,IAAI13F,EAAa,uBAAwB,gEAKnD,MAAM63F,EAAehrE,EAAM1d,EAAQ,KAAOqnB,EACpCshE,EAAejrE,EAAM1d,EAAQ,KAAOqnB,EAC1C,IAAIpF,EAAU,EACd,MAAML,EAAQlG,EAAOyU,mBAAmBrxB,aAAa,gBAAgB2pF,EAAqB,OAAS,cACnG,GAAIA,EAGA,GADAxmE,EAAU0mE,EAAe,EAAI,EACzBj7F,KAAKiS,OAASioF,GAAajoF,KAAKmoF,OAAUa,EAgB1CtlE,EAAIQ,YACJR,EAAIS,OAAOzyB,EAAGmF,EAAI9I,KAAKynC,eAAe+yD,gBACtC7kE,EAAIU,OAAO1yB,EAAI4wB,EAASzrB,GACxB6sB,EAAI/G,SACJ+G,EAAI2f,iBAlBJ,GAAIt1C,KAAKs6F,oBAAqB,CAE1B,MAAMppD,EAAavb,EAAIusB,YAAYliD,KAAKs6F,qBAAqB7vF,MAC7DkrB,EAAIqc,SAAShyC,KAAKs6F,oBAAqB32F,EAAIutC,EAAa,EAAGpoC,GAC3DyrB,EAAU2c,EAAa,EAAIlxC,KAAKynC,eAAegzD,iBACnD,MAGIT,GAAe,gBAAiBrkE,EAAKhyB,EAAGmF,EAAGorB,GAC3CK,EAAU,GAAKv0B,KAAKynC,eAAegzD,uBAc3ClmE,EAAUymE,GAAgB,EAAI,EAE9BrlE,EAAIQ,YACJR,EAAIS,OAAOykE,EAAQC,GACnBnlE,EAAIU,OAAO1yB,EAAI4wB,EAASzrB,GACxB6sB,EAAIU,OAAO1yB,EAAGmF,EAAI9I,KAAKynC,eAAe+yD,gBACtC7kE,EAAI/G,SACJ+G,EAAI2f,YAGRulD,EAASl3F,EAAI4wB,EACbumE,EAAShyF,CAAC,GAElB,CAKAoyF,WACI,MAAMvlE,EAAM31B,KAAK8V,eACjB,IAAIilF,GAAqB,EAEzB/6F,KAAKgwB,MAAMpb,SAAS+kB,IAChBohE,GAAsBA,EACtB,MAAM3jE,EAAQuC,EAAKxB,aACbx0B,EAAIg2B,EAAK+e,eACT5vC,EAAIsuB,EAAMwa,kBAAkB5xC,KAAKgE,KAAO,GACxCkwB,EAAQlG,EAAOyU,mBAAmBrxB,aAAa,gBAAgB2pF,EAAqB,OAAS,cACnG,IAAI7pD,EAAa,EACb6pD,EACI/6F,KAAKs6F,qBACLppD,EAAavb,EAAIusB,YAAYliD,KAAKs6F,qBAAqB7vF,MACvDkrB,EAAIqc,SAAShyC,KAAKs6F,oBAAqB32F,EAAIutC,EAAa,EAAGpoC,IAG3DkxF,GAAe,gBAAiBrkE,EAAKhyB,EAAGmF,EAAGorB,GAI3Cl0B,KAAKu6F,qBACLrpD,EAAavb,EAAIusB,YAAYliD,KAAKu6F,qBAAqB9vF,MACvDkrB,EAAIqc,SAAShyC,KAAKu6F,oBAAqB52F,EAAIutC,EAAa,EAAGpoC,IAG3DkxF,GAAe,gBAAiBrkE,EAAKhyB,EAAGmF,EAAGorB,EAEnD,GAER,CAEAne,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACLqf,EAAI3gB,OACJ2gB,EAAIngB,eAAexV,KAAKynC,eAAe2N,OACvCzf,EAAIrgB,aAAatV,KAAKynC,eAAe2N,OACrCzf,EAAI5e,QAAQ/W,KAAKiX,UAjMzB,YAAclT,GACNm2F,GAAa53D,OACbz+B,EAAI,wBAAyBE,EACrC,CA+LQ,CAAE,2BACE/D,KAAKiS,OAASioF,GAAajoF,KAAKooE,SAAWr6E,KAAKiS,OAASioF,GAAajoF,KAAKmoF,OAC3EzkE,EAAIjgB,aAAa1V,KAAKynC,eAAeizD,oBACrC16F,KAAK46F,iBAEA56F,KAAKiS,OAASioF,GAAajoF,KAAKizC,MACrCllD,KAAKk7F,WAETvlE,EAAI/f,SACR,EAGJskF,GAAa53D,OAAQ,EACrB43D,GAAa/iF,UAAY,CACrB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUkD,QAGrByqF,GAAatqB,OAAS,CAClBurB,cAAe,CACX93F,KAAM,mBACNkxB,SAAU,GACVC,QAAS,GAEb4mE,cAAe,CACX/3F,KAAM,kBACNkxB,SAAU,EACVC,QAAS,IAIjB0lE,GAAajoF,KAAO,CAChBizC,KAAM,EACNm1B,QAAS,EACT+f,MAAO,GAGXF,GAAat8C,WAAa,CACtB74C,KAAMm1F,GAAajoF,KAAKizC,KACxB41B,QAASof,GAAajoF,KAAKooE,QAC3BghB,MAAOnB,GAAajoF,KAAKmoF,OC/O7B,MAAMkB,GAAQ,CACV,EAAK,aACL,EAAK,cACL,EAAK,cACLnF,MAAO,kBAEJ,MAAMoF,WAAmBvF,GACjBt0F,sBACP,OAAOG,EAAS05F,UACpB,CACA95F,YAAYwQ,EAAMynC,EAAYrrB,GAK1B9qB,MAHc,IAAIksB,EADA6rE,GAAMrpF,IAAS,aACE+b,EAAOyU,mBAAmBrxB,aAAa,mBAAoB,IAAK,CAC/F9P,SAAU,eAEDjB,OAAOmX,OAAO,CAAE+W,SAAU,IAAKunB,aAAuB,UAAT7jC,GAAoBynC,GAAarrB,EAC/F,ECHJ,SAASmtE,GAAc7lE,EAAKouC,EAAIE,EAAI/5D,EAAIE,EAAIC,EAAIC,GAE5CqrB,EAAIQ,YACJR,EAAIS,OAAO2tC,EAAIE,GACftuC,EAAIU,OAAOnsB,EAAIE,GACfurB,EAAIU,OAAOhsB,EAAIC,GACfqrB,EAAIU,OAAO0tC,EAAIE,GACftuC,EAAI2f,YACJ3f,EAAIa,MACR,CACO,MAAMilE,WAAkB1nF,EAChBrS,sBACP,OAAOG,EAAS45F,SACpB,CAaAh6F,YAAYuuB,GACRzsB,QACAvD,KAAKg2D,SAAShmC,GACdhwB,KAAK+E,KAAO,GACZ/E,KAAK2X,YACL3X,KAAKynC,eAAiB,CAElB0wD,aAAc,EACdC,cAAe,EAEfx3C,WAAY,EAEZ86C,eAAW93F,EAEX+3F,aAAa,EAEbvmD,WAAOxxC,EAEPg4F,kBAAkB,EAClBC,gBAAgB,EAEhBC,iBAAkB,GAElBC,gBAAiB92F,KAAKC,GAAK,EAE3B82F,uBAAwBP,GAAUQ,qBAAqBhsD,IACvDisD,mBAAoBT,GAAUz2B,kBAAkBlsC,OAExD,CAEAk4C,QAAQjsE,GAEJ,OADA/E,KAAK+E,KAAOA,EACL/E,IACX,CAEAg2D,SAAShmC,GACL,IAAKA,EAAMumC,aAAevmC,EAAM65B,UAC5B,MAAM,IAAI1mD,EAAa,eAAgB,2DAM3C,GAJK6sB,EAAMwmC,gBACPxmC,EAAMwmC,cAAgB,CAAC,IACtBxmC,EAAMymC,eACPzmC,EAAMymC,aAAe,CAAC,IACtBzmC,EAAMwmC,cAAc5wD,SAAWoqB,EAAMymC,aAAa7wD,OAClD,MAAM,IAAIzC,EAAa,eAAgB,qDAO3C,OALAnD,KAAKgwB,MAAQA,EACbhwB,KAAKu2D,WAAavmC,EAAMumC,WACxBv2D,KAAKw2D,cAAgBxmC,EAAMwmC,cAC3Bx2D,KAAK6pD,UAAY75B,EAAM65B,UACvB7pD,KAAKy2D,aAAezmC,EAAMymC,aACnBz2D,IACX,CAEAm8F,iBACI,MAAMxmE,EAAM31B,KAAK8V,eACX2xB,EAAiBznC,KAAKynC,eACxBA,EAAei0D,WACf/lE,EAAIgrC,YAAYl5B,EAAei0D,WAE/Bj0D,EAAemZ,YACfjrB,EAAIjgB,aAAa+xB,EAAemZ,YAEhCnZ,EAAek0D,YACfhmE,EAAI6qC,WAAW,SAGf7qC,EAAI6qC,WAAW,SAEvB,CAEA47B,iBACI,MAAMzmE,EAAM31B,KAAK8V,eACjB6f,EAAI5e,QAAQ/W,KAAKiX,UACjB,MACMm+B,EADiBp1C,KAAKynC,eACC2N,MACzBA,IACAzf,EAAIngB,eAAe4/B,GACnBzf,EAAIrgB,aAAa8/B,GAEzB,CAEAinD,cAAc1mE,EAAK2mE,EAAKC,GACpB,MAAMC,EAAcx8F,KAAKynC,eAAem0D,kBAAoB57F,KAAKynC,eAAeo0D,eAC1E3xF,EAAKoyF,EAAI34F,EACTyG,EAAKkyF,EAAIxzF,EACTuB,EAAKkyF,EAAI54F,EACT2G,EAAKiyF,EAAIzzF,EAGT2zF,EAAWx3F,KAAKmH,MAAM/B,EAAKH,IAAOG,EAAKH,IAAOI,EAAKF,IAAOE,EAAKF,IAC/DsyF,GAASD,EAAWz8F,KAAKynC,eAAeq0D,iBAAmB,GAAKW,EACtE,IAAI9oB,EACAgpB,EACAzqB,EACA0qB,EACA58F,KAAKynC,eAAeo0D,gBAAkBW,GACtC7oB,EAAQ1uE,KAAK6vB,MAAM5qB,GAAMG,EAAKH,GAAMwyF,GACpCC,EAAQ13F,KAAK6vB,MAAM1qB,GAAME,EAAKF,GAAMsyF,KAGpC/oB,EAAQtpE,EACRsyF,EAAQryF,GAERtK,KAAKynC,eAAem0D,kBAAoBY,GACxCtqB,EAAUhoE,GAAMG,EAAKH,IAAO,EAAIwyF,GAChCE,EAAUxyF,GAAME,EAAKF,IAAO,EAAIsyF,KAGhCxqB,EAAUhoE,EACV0yF,EAAUxyF,GAEVpK,KAAKynC,eAAe2N,QACpBzf,EAAIngB,eAAexV,KAAKynC,eAAe2N,OACvCzf,EAAIrgB,aAAatV,KAAKynC,eAAe2N,QAGzCzf,EAAIQ,YACJR,EAAIS,OAAO87C,EAAS0qB,GACpBjnE,EAAIU,OAAOs9C,EAAOgpB,GAClBhnE,EAAI/G,SACJ+G,EAAI2f,YAEJ,MAAMunD,EAAa53F,KAAKqhE,MAAMh8D,EAAKF,EAAIC,EAAKH,GAEtClB,EAAI/D,KAAK+C,IAAIhI,KAAKynC,eAAeq0D,iBAAmB72F,KAAK++D,IAAIhkE,KAAKynC,eAAes0D,kBACvF,IAAIe,EACAC,EACAC,EACA5rB,EACA6rB,EACA9X,GACAnlF,KAAKynC,eAAeo0D,gBAAkBW,KACtCM,EAASD,EAAa53F,KAAKC,GAAKlF,KAAKynC,eAAes0D,gBACpDiB,EAAQ3yF,EAAKpF,KAAK++D,IAAI84B,GAAU9zF,EAChCooE,EAAQ9mE,EAAKrF,KAAKi/D,IAAI44B,GAAU9zF,EAChC+zF,EAASF,EAAa53F,KAAKC,GAAKlF,KAAKynC,eAAes0D,gBACpDkB,EAAW5yF,EAAKpF,KAAK++D,IAAI+4B,GAAU/zF,EACnCm8E,EAAW76E,EAAKrF,KAAKi/D,IAAI64B,GAAU/zF,EACnCwyF,GAAc7lE,EAAKqnE,EAAO5rB,EAAO/mE,EAAIC,EAAI2yF,EAAU9X,KAEnDnlF,KAAKynC,eAAem0D,kBAAoBY,KACxCM,EAASD,EAAa78F,KAAKynC,eAAes0D,gBAC1CiB,EAAQ9yF,EAAKjF,KAAK++D,IAAI84B,GAAU9zF,EAChCooE,EAAQhnE,EAAKnF,KAAKi/D,IAAI44B,GAAU9zF,EAChC+zF,EAASF,EAAa78F,KAAKynC,eAAes0D,gBAC1CkB,EAAW/yF,EAAKjF,KAAK++D,IAAI+4B,GAAU/zF,EACnCm8E,EAAW/6E,EAAKnF,KAAKi/D,IAAI64B,GAAU/zF,EACnCwyF,GAAc7lE,EAAKqnE,EAAO5rB,EAAOlnE,EAAIE,EAAI6yF,EAAU9X,GAE3D,CAEApvE,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMigD,EAAav2D,KAAKu2D,WAClB1M,EAAY7pD,KAAK6pD,UACjBpiB,EAAiBznC,KAAKynC,eAC5B9R,EAAI3gB,OACJhV,KAAKm8F,iBAEL,IAAIe,EAAiB,CAAEv5F,EAAG,EAAGmF,EAAG,GAC5Bq0F,EAAe,CAAEx5F,EAAG,EAAGmF,EAAG,GAC9B9I,KAAKw2D,cAAc5hD,SAAQ,CAACwoF,EAAa10F,KACrC,MAAM20F,EAAar9F,KAAKy2D,aAAa/tD,GAErCw0F,EAAiB3mC,EAAWluB,mBAAmB,EAAG+0D,GAClDD,EAAetzC,EAAUxhB,mBAAmB,EAAGg1D,GAC/C,MAAMC,EAAgBJ,EAAep0F,EAAIq0F,EAAar0F,EAEtDo0F,EAAev5F,GAAK4yD,EAAWzlD,aAAamqB,WAAawM,EAAe0wD,aACxEgF,EAAax5F,GAAKkmD,EAAU/4C,aAAakqB,UAAYyM,EAAe2wD,cAEpE,MAAMmF,EAAiBhnC,EAAWlnB,gBAAgBzf,WAC1B2mC,EAAWpzB,cAAci6D,GAAanuE,WACL,IAAlCsnC,EAAW9mB,qBAC9BytD,EAAev5F,GAAK45F,EAAiB91D,EAAe0wD,cAGjCtuC,EAAU1mB,cAAck6D,GAAYpuE,YACH,IAAlC46B,EAAUpa,qBAC5B0tD,EAAax5F,GAAK45F,EAAiB91D,EAAe2wD,eAGtD8E,EAAep0F,GAAKw0F,GAAiB,EAAI,EACzCH,EAAar0F,GAAKw0F,EAAgB,EAAI,EACtCt9F,KAAKq8F,cAAc1mE,EAAKunE,EAAgBC,EAAa,IAEzDxnE,EAAI/f,UAEJ,MAAMs7B,EAAavb,EAAIusB,YAAYliD,KAAK+E,MAAM0F,MACxCkmE,EAAgBlpC,EAAey0D,mBACrC,IAAIv4F,EAAI,EACR,GAAIgtE,IAAkB8qB,GAAUz2B,kBAAkB5rC,KAC9Cz1B,EAAIu5F,EAAev5F,OAElB,GAAIgtE,IAAkB8qB,GAAUz2B,kBAAkBlsC,OAAQ,CAG3Dn1B,GAFgBw5F,EAAax5F,EAAIu5F,EAAev5F,GACrB,EAAIu5F,EAAev5F,EAC/ButC,EAAa,CAChC,MACSy/B,IAAkB8qB,GAAUz2B,kBAAkB1rC,QACnD31B,EAAIw5F,EAAax5F,EAAIutC,GAGzB,IAAIpoC,EAAI,EACR,MAAM00F,EAAoB/1D,EAAeu0D,uBAYzC,OAXIwB,IAAsB/B,GAAUQ,qBAAqBhsD,IACrDnnC,EAAIytD,EAAWp+B,aAAawZ,iBAEvB6rD,IAAsB/B,GAAUQ,qBAAqB3rD,SAC1DxnC,EAAIytD,EAAWp+B,aAAayZ,kBAAkB5jB,EAAOiD,0BAGzD0E,EAAI3gB,OACJhV,KAAKo8F,iBACLzmE,EAAIqc,SAAShyC,KAAK+E,KAAMpB,EAAGmF,GAC3B6sB,EAAI/f,UACG5V,IACX,EAGJy7F,GAAUtkF,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WAEhDskF,GAAUQ,qBAAuB,CAC7BhsD,IAAK,EACLK,OAAQ,GAEZmrD,GAAUz2B,kBAAoBA,GCnQvB,MAAMy4B,WAAe1pF,EACbrS,sBACP,OAAOG,EAAS47F,MACpB,CACAh8F,YAAY2sB,EAAS,CAAC,GAClB7qB,QACAvD,KAAK+2B,WAAW3I,GAChBpuB,KAAK09F,WAAa,GAClB19F,KAAK29F,eAAiB,GACtB39F,KAAK49F,WAAa,EACtB,CAEA7mE,WAAW1I,EAAU,CAAC,GAClB,IAAKA,EAAQ5uB,QACT,MAAM,IAAI0D,EAAa,YAAa,kDAExCnD,KAAKP,QAAU4uB,EAAQ5uB,QACvBO,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAE/X,QAASO,KAAKP,QAASkE,EAAG,GAAImF,EAAG,GAAI2B,MAAO,IAAKozF,mBAAoB,GAAIC,WAAW,EAAOC,iBAAiB,EAAOC,gBAAgB,EAAOC,iBAAkB,EAAGC,WAAW,GAAS7vE,GAAU,CAAE8vE,QAAS99F,OAAOmX,OAAO,CAAE+qE,MAAO,IAAOl0D,EAAQ8vE,SAAUC,cAAe/9F,OAAOmX,OAAO,CAAC,EAAG6W,EAAQ+vE,kBACzS,IAAjCp+F,KAAKquB,QAAQ0vE,sBAAsD,IAAlB1vE,EAAQ5jB,QACzDzK,KAAKquB,QAAQyvE,WAAY,EAEjC,CAEA70F,OACI,OAAOjJ,KAAKquB,QAAQ1qB,CACxB,CAEA0F,KAAK1F,GACD3D,KAAKquB,QAAQ1qB,EAAIA,EACjB3D,KAAK09F,WAAW9oF,SAASvM,IACrBA,EAAEgB,KAAK1F,EAAE,GAEjB,CAEAuF,OACI,OAAOlJ,KAAKquB,QAAQvlB,CACxB,CAEAQ,KAAKR,GACD9I,KAAKquB,QAAQvlB,EAAIA,EACjB9I,KAAK09F,WAAW9oF,SAASvM,IACrBA,EAAEiB,KAAKR,EAAE,GAEjB,CAEAu1F,YACI,OAAOr+F,KAAK09F,UAChB,CAEAY,YACI,OAAOt+F,KAAK49F,UAChB,CAEA9mF,WAAW/B,GAGP,OAFAxR,MAAMuT,WAAW/B,GACjB/U,KAAKP,QAAQqX,WAAW/B,GACjB/U,IACX,CAKAu+F,aAAatsF,EAAO,UAMhB,OALAjS,KAAKw+F,UAAYx+F,KAAKP,QAAQ44E,eAAe,CACzCI,UAAWz4E,KAAK09F,WAAW,GAC3BhlB,aAAc14E,KAAK09F,WAAW19F,KAAK09F,WAAW93F,OAAS,GACvDqM,SAEGjS,KAAKw+F,SAChB,CAeAC,SAASrwE,GACL,IAAIvgB,EACJ,MAAM6wF,EAAer+F,OAAOmX,OAAO,CAAEy8D,UAAU,GAAS7lD,EAAOC,SACzD+I,EAAgC,QAAvBvpB,EAAKugB,EAAOgJ,aAA0B,IAAPvpB,EAAgBA,EAAK7N,KAAKP,QAAQg0E,MAAM,CAAE9vE,EAAG3D,KAAKquB,QAAQ1qB,EAAGmF,EAAG9I,KAAKquB,QAAQvlB,EAAG2B,MAAOzK,KAAKquB,QAAQ5jB,MAAO4jB,QAASqwE,IAC5J1uB,EAAI3vE,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAEmnF,WAAY,EAAGC,WAAY,EAAGC,kBAAkB,EAAOd,iBAAiB,GAAS3vE,GAAS,CAAEC,QAASqwE,IACvI/oE,EAAM31B,KAAK6W,aAWjB,OAVAm5D,EAAEjqC,OAAOnxB,SAASsxB,IACdA,EACKpvB,WAAW6e,GACXwB,SAASC,GACTgP,eACAxxB,SAASkkD,GAAaA,EAAS3hC,SAASC,KAC7Cp3B,KAAK49F,WAAWnpF,KAAKyxB,EAAM,IAE/BlmC,KAAK09F,WAAWjpF,KAAK2iB,GACrBp3B,KAAK29F,eAAelpF,KAAKu7D,GAClB54C,CACX,CAIA0nE,UAAU/4D,GACN,MAAMpQ,EAAM31B,KAAK6W,aACjBkvB,EAAOnxB,SAASsxB,IACZA,EAAMpvB,WAAW6e,GACjB31B,KAAK49F,WAAWnpF,KAAKyxB,EAAM,GAEnC,CAEAy0B,SACI,MAAMokC,EAAkB/+F,KAAKquB,QAAQ8vE,QACrC,IAAIxhB,EAAe,EACnB,MAAMzwC,EAAY,IAAIuuB,GAAUskC,GAChC/+F,KAAKksC,UAAYA,EACjB,IAAIpjC,EAAI9I,KAAKquB,QAAQvlB,EACjBk2D,EAAS,EACb,MAAMggC,EAAqB,GAC3Bh/F,KAAK09F,WAAW9oF,SAAQ,CAACqqF,EAAM3sF,KAC3BxJ,GAAQm2F,EAAK7oD,MAAMp2C,KAAK29F,eAAerrF,GAAOqsF,YAC9CM,EAAK31F,KAAKR,GACVA,GAAQm2F,EAAK7oD,MAAMp2C,KAAK29F,eAAerrF,GAAOssF,YAC9C91F,GAAQm2F,EAAK7oD,MAAMp2C,KAAKquB,QAAQwvE,oBAC5B79F,KAAK29F,eAAerrF,GAAOusF,mBAC3BG,EAAmBvqF,KAAK,CAAE3L,IAAGsuB,MAAO6nE,IACpCn2F,GAAK,IAETk2D,EAAS/5D,KAAK8E,IAAIi1D,EAAQigC,EAAKziD,gBAAgB,IAGnDx8C,KAAK49F,WAAWhpF,SAASsxB,IACrBA,EAAME,eAAexxB,SAASkkD,IAC1B,MAAM1hC,EAAQ0hC,EAASh+B,WACnB1D,GACA0hC,EAAS3hC,SAASC,EAAM,GAC9B,IAGN8U,EAAUwuB,WAAW16D,KAAK49F,YAE1B59F,KAAK09F,WAAW9oF,SAASqqF,GAASA,EAAKlqB,cAAc/V,KACjDh/D,KAAKquB,QAAQyvE,WAAa99F,KAAK49F,WAAWh4F,OAAS,GACnD+2E,EAAezwC,EAAUoxC,0BAA0Bt9E,KAAK49F,YACxD59F,KAAKquB,QAAQ5jB,MAAQkyE,EAAelJ,GAAMpM,cAAgBrI,EAASh/D,KAAKquB,QAAQ1qB,GAChF3D,KAAK09F,WAAW9oF,SAASqqF,IACrBA,EAAKxlE,SAASz5B,KAAKquB,QAAQ5jB,MAAM,KAIrCkyE,EAAe38E,KAAKquB,QAAQ6vE,UACtBl+F,KAAKquB,QAAQ5jB,OAASu0D,EAASh/D,KAAKquB,QAAQ1qB,GAC5C3D,KAAKquB,QAAQ5jB,OAASu0D,EAASh/D,KAAKquB,QAAQ1qB,GAAK8vE,GAAMC,eAE7D1zE,KAAK49F,WAAWh4F,OAAS,GACzBsmC,EAAUyuB,OAAO36D,KAAK49F,WAAY59F,KAAKquB,QAAQ0vE,gBAAkB,EAAIphB,EAAc38E,KAAKquB,QAAQ+vE,eAEpGlyD,EAAUkM,aACV,IAAK,IAAI1vC,EAAI,EAAGA,EAAI1I,KAAKquB,QAAQ4vE,iBAAkBv1F,IAC/CwjC,EAAUo2C,KAAKyc,GAEnB/+F,KAAKg/D,OAASA,EACdh/D,KAAKg/F,mBAAqBA,EAC1Bh/F,KAAKk/F,MAAQp2F,EACb9I,KAAK2J,YAAc,IAAIf,EAAY5I,KAAKquB,QAAQ1qB,EAAG3D,KAAKquB,QAAQvlB,EAAG9I,KAAKquB,QAAQ5jB,MAAOzK,KAAKk/F,MAAQl/F,KAAKquB,QAAQvlB,GACjH2qE,GAAM0rB,mBAAmBn/F,KAAK09F,WAClC,CAEA3nF,OAEI,MAAM4f,EAAM31B,KAAK8V,eACjB,KAAK9V,KAAKksC,WAAclsC,KAAKg/D,QAAWh/D,KAAKk/F,OAAUl/F,KAAKg/F,oBACxD,MAAM,IAAI77F,EAAa,cAAe,yCAE1CnD,KAAKsW,cACDtW,KAAKquB,QAAQ2vE,gBACbvjC,GAAU2kC,cAAczpE,EAAK31B,KAAKksC,UAAWlsC,KAAKg/D,OAAQh/D,KAAKquB,QAAQvlB,EAAG9I,KAAKk/F,OAEnFl/F,KAAKg/F,mBAAmBpqF,SAASvO,IAC7BrG,KAAK49F,WAAWhpF,SAASsxB,IACrBA,EAAME,eAAexxB,SAASkkD,IACtBA,EAASh+B,aAAez0B,EAAE+wB,OAC1B10B,GAAK28F,YAAY1pE,EAAKmjC,EAAUzyD,EAAEyC,EAAE,GAC1C,GACJ,GAEV,EC1GG,MAAM5F,WAAgBF,GACdtB,sBACP,OAAOG,EAASqB,OACpB,CAGAzB,YAAYi4C,EAAY/J,GAAY,GAChCpsC,MAAMm2C,GACN15C,KAAKs/F,cAAgB,GAErBt/F,KAAKuwC,eAAiB,IACXvwC,KAAKu/F,UAAUhsF,KAAK5P,GAAMA,EAAE8E,MAAKpD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAG1E1E,KAAKowC,YAAc,IACRpwC,KAAKu/F,UAAUhsF,KAAK5P,GAAMA,EAAE8E,MAAKpD,QAAO,CAACZ,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,IAE1E1E,KAAKw/F,OAAQ,EAGbx/F,KAAKu/F,UAAY7lD,EAAW6lD,WAAa,GAEzCv/F,KAAKynC,eAAiBpnC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKynC,gBAAiB,CAExEkT,iBAAkB3sB,EAAO0B,qBAEzBigB,YAEA8vD,UAAW9vD,EAEX+vD,yBAAyB,EAEzBlrE,QAAS,EAETnF,MAAO,EAEPvgB,KAAM,GAAGpB,EAAKE,UAAUF,EAAKe,eACjCzO,KAAKu6C,WAAavsB,EAAOqhB,cAAcrvC,KAAKuuB,SAAUvuB,KAAKq6C,UAC3D32C,EAAQ1D,KAAKu6C,WAAY,eAAgB,gCAAgCv6C,KAAKuuB,uBAAuBvuB,KAAKq6C,aAC1Gr6C,KAAKutD,YACD7T,EAAWpQ,eACXtpC,KAAKguD,iBAAiBtU,EAAWpQ,gBAGjCtpC,KAAKguD,iBAAiBxlB,GAAKC,IAG/BzoC,KAAKw/F,OAAQ,EACbx/F,KAAKghD,aACT,CACAhqB,QAII,OAHAzzB,MAAMyzB,QACFh3B,KAAKo3B,OACLp3B,KAAKm3B,SAASn3B,KAAKo3B,OAChBp3B,IACX,CAGA2/F,SAASH,GAGL,OAFAx/F,KAAKw/F,MAAQA,EACbx/F,KAAKghD,cACEhhD,IACX,CAEAwvC,UACI,QAAIxvC,KAAKynC,eAAekI,SAG5B,CAEAke,mBACI,MAAMtT,EAAav6C,KAAKqvC,gBACxB,OAAoC,MAAhCrvC,KAAKuuD,wBACEvuD,KAAKuuD,wBAEZhU,EACOv6C,KAAKyvC,qBAAuBjH,GAAKC,GAClC8R,EAAWpnB,0BACXonB,EAAWnnB,4BAEd,CACX,CAEA4tB,cACIhhD,KAAKs/F,cAAgB,GACrBt/F,KAAKyK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAI1I,KAAKu/F,UAAU35F,SAAU8C,EAAG,CAC5C,IAAI0mB,EAAOpvB,KAAKu/F,UAAU72F,GAAG0mB,KACzBpvB,KAAKw/F,QACLpwE,EAAO,IAAMA,EAAO,KACxB,MAAMmrB,EAAavsB,EAAO4xE,gBAAgBxwE,EAAKnnB,WAAYjI,KAAKynC,eAAepY,OAC/ErvB,KAAKs/F,cAAc7qF,KAAK8lC,GACxBv6C,KAAKyK,MAAQxF,KAAK8E,IAAIwwC,EAAW3qB,WAAY5vB,KAAKyK,MACtD,CAMAzK,KAAKu6C,WAAW3qB,SAAW,IAAM5vB,KAAKyK,KAC1C,CAEA0sB,SAASC,GACL7zB,MAAM4zB,SAASC,GACf,MAAMzB,EAAMyB,EAAMvgB,aAGlB,GAFA7W,KAAK8W,WAAW6e,GAEZA,EAAK,CACL31B,KAAKyK,MAAQ,EACb,IAAK,IAAI/B,EAAI,EAAGA,EAAI1I,KAAKs/F,cAAc15F,SAAU8C,EAAG,CAChD,MAAM6xC,EAAav6C,KAAKs/F,cAAc52F,GAChC3D,EAAO,GAAKw1C,EAAWx1C,KACF,MAAvBA,EAAK2pB,gBACLiH,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKynC,eAAe34B,MAChCyrC,EAAW9vC,MAAQkrB,EAAIusB,YAAYn9C,GAAM0F,MACzCkrB,EAAI/f,UACJ2kC,EAAW3qB,SAAW,IAAM2qB,EAAW9vC,OAE3CzK,KAAKyK,MAAQxF,KAAK8E,IAAIwwC,EAAW3qB,WAAY5vB,KAAKyK,MACtD,CACAzK,KAAKu6C,WAAW3qB,SAAW,IAAM5vB,KAAKyK,KAC1C,CAGA,MAAM4/B,EAAKrqC,KAAKu/F,UAAUhsF,KAAI,EAAG9K,IAAKzE,KAAWozB,EAAMmM,YAAY/9B,OAAOxB,GAAQ,KAKlF,OAJAhE,KAAKg7C,MAAM3Q,GACPrqC,KAAK+yB,MACL/yB,KAAK+yB,KAAKiX,WAAWhqC,KAAK6/F,WAAY7/F,KAAK6/F,YAExC7/F,IACX,CAEA2oE,eACI,OAAO3oE,KAAKu/F,SAChB,CAGAl3D,mBAAmB7U,EAAUlhB,GACzB,IAAKtS,KAAKm4C,aACN,MAAM,IAAIh1C,EAAa,kBAAmB,wDAE9C,GAAuB,IAAnBnD,KAAKqqC,GAAGzkC,OACR,MAAM,IAAIzC,EAAa,YAAa,yCAExC,IAAIQ,EAAI,EACR,GAAI6vB,IAAakF,GAASC,SAASS,KAC/Bz1B,GAAI,OAEH,GAAI6vB,IAAakF,GAASC,SAASW,MACpC31B,EAAI3D,KAAKyK,MAAQ,OAEhB,GAAI+oB,IAAakF,GAASC,SAASO,OAAS1F,IAAakF,GAASC,SAASK,MAAO,CAEnFr1B,EADyB3D,KAAKu6C,WAAW3qB,WAClB,CAC3B,CACA,MAAO,CACHjsB,EAAG3D,KAAK04C,eAAiB/0C,EACzBmF,EAAG9I,KAAKqqC,GAAG/3B,GAEnB,CAEA+oC,iBACI,OAAO71C,OAAOxF,KAAKu/F,UAAU,GAAG92F,IACpC,CAEAyvC,YACQl4C,KAAKm4C,eAELn4C,KAAKk6B,iBACLl6B,KAAKk6B,gBAAgBge,YAEzBl4C,KAAKm4C,cAAe,EACxB,CAEA/G,WACI,OAAOpxC,KAAKsuD,iBAChB,CAEAuxC,WACI,MAIMC,EAJY9/F,KAAKm4B,aAAa2X,cAIH,GAC3BiwD,EAAgBv3D,GAAKC,KAAOzoC,KAAKspC,gBAFnB,GAEiDw2D,EACrE,OAAO9/F,KAAKm4B,aAAaoL,YAAYw8D,EACzC,CAEAhuD,iBACI,OAAO/xC,KAAKwxC,YAAYrH,YAC5B,CAEA6qB,WACI,IAAInnD,EACJ,MAAM,KAAE+tC,EAAI,WAAErB,EAAY9S,gBAAgB,UAAEkI,IAAiB3vC,KACvD+U,EAAU/U,KAAK8V,eACf+8C,EAAyBjvD,MAARg4C,GAAqBjM,EAE5C,GAAI4K,EAAWvnB,MAAQ6/B,EAAgB,CACnC,MAAMmtC,EAAShgG,KAAKoxC,WACd6uD,EAASjgG,KAAKyvC,qBAAuBjH,GAAKE,KAExC1oC,KAAK6/F,WAAa7/F,KAAKwxC,YAAYvH,aAAejqC,KAAKu6C,WAAav6C,KAAKu6C,WAAWrnB,oBAAsB,GAE1GlzB,KAAK6/F,WAAa7/F,KAAKwxC,YAAYvH,aAAejqC,KAAKu6C,WAAav6C,KAAKu6C,WAAWtnB,kBAAoB,GAG3F,QAApBplB,EAAK7N,KAAKgzB,YAAyB,IAAPnlB,GAAyBA,EAAGmqB,OAAOjjB,EAASirF,EAAQC,EAErF,CACJ,CAEArrC,gBACI50D,KAAK41C,UAAUhhC,SAAS0yB,IAEhBnlC,EAAMmlC,KAActnC,KAAKynC,eAAeg4D,YAG5Cn4D,EAASxwB,WAAW9W,KAAK6W,cACzBywB,EAASzxB,gBAAe,GAEhC,CAEAqqF,kBACI,MAAMpqC,EAAQ91D,KAAKoxC,WACbqmD,EAAQz3F,KAAK6/F,WACblqE,EAAM31B,KAAK8V,eACX24C,EAAWzuD,KAAKynC,eAAekI,UAC/BwwD,EAAcngG,KAAKynC,eAAei4D,wBACxC,GAAIjxC,GAAY0xC,EAAa,CACzB,MAGMC,EA5RlB,SAA6Bl1D,EAAQm1D,EAAgBjpE,EAAOkS,GACxD,MAAMg3D,EAA6B,IAAnBh3D,EACVi3D,GAAgC,IAApBj3D,EACZk3D,EAAeppE,EAAMkM,yBACrBm9D,EAAcrpE,EAAM0Y,cACpB4wD,EAAa,GA2CnB,OA1CAL,EAAezrF,SAAS+rF,IACpB,MAAMC,EAAqBD,EAAQ1qF,QAAQwqF,IAAgB,EACrDI,EAAsBF,EAAQ1qF,QAAQ,IAAM,EAClD,GAAKqqF,GAAWO,GAAyBN,GAAaK,EAClD,OAKmB,IAAnBD,EAAQ/6F,QACR+6F,EAAQlsF,KAAKksF,EAAQ,IAEzB,MAAMG,EAAU,GAEhBH,EAAQ/rF,SAAQ,CAAC8zD,EAAQp2D,EAAOquF,KAC5B,MAAMI,EAAwB,IAAXr4B,EACbs4B,EAAgBt4B,IAAW+3B,EAGjC,IAAI33F,EAAIsuB,EAAMmM,YAAYmlC,EAAS,GAGrB,IAAVp2D,GAAgByuF,EAGXzuF,IAAUquF,EAAQ/6F,OAAS,GAAMo7F,IACtCl4F,GAAK03F,EAAe,EAAI,GAHxB13F,GAAK03F,EAAe,EAAI,EAM5BM,EAAQrsF,KAAK3L,GAGU,IAAnBwgC,GAAwBy3D,EACxBD,EAAQrsF,KAAKy2B,EAAS,IAEG,IAApB5B,GAAyB03D,GAC9BF,EAAQrsF,KAAKy2B,EAAS,EAC1B,IAGJw1D,EAAWjsF,KAAKqsF,EAAQr9D,MAAK,CAACh/B,EAAGC,IAAMD,EAAIC,IAAG,IAE3Cg8F,CACX,CA2O8BO,CAAoBxJ,EArTlD,SAA+B1jB,EAAWmtB,GACtC,MAAMC,EAAe,GACrB,IAAI9lC,EAAQ,GACZ,IAAK,IAAIqN,EAAS,EAAGA,GAAUqL,EAAWrL,IACtBw4B,EAAajrF,QAAQyyD,IAAW,GAK5Cy4B,EAAa1sF,KAAK4mD,GAClBA,EAAQ,IAJRA,EAAM5mD,KAAKi0D,GASnB,OAFIrN,EAAMz1D,OAAS,GACfu7F,EAAa1sF,KAAK4mD,GACf8lC,CACX,CAoSkCC,CAFLphG,KAAKm4B,aAAa2X,cACf9vC,KAAKu/F,UAAUhsF,KAAKigB,GAAahuB,OAAOguB,EAAS/qB,QAETzI,KAAKm4B,aAAcn4B,KAAKyvC,oBACpF9Z,EAAI3gB,OACJ2gB,EAAIjgB,aAAa8yB,GAAKG,OACtBy3D,EAAUxrF,SAAS6/D,IACO,IAAlBA,EAAO7uE,SAEX+vB,EAAIQ,YACJR,EAAIS,OAAO0/B,EAAO2e,EAAO,IACzB9+C,EAAIU,OAAOy/B,EAAO2e,EAAOA,EAAO7uE,OAAS,IACzC+vB,EAAI/G,SACJ+G,EAAI2f,YAAW,IAEnB3f,EAAI/f,SACR,CACJ,CAEAyrF,gBACI,IAAIxzF,EACJ,MAAM8nB,EAAM31B,KAAK8V,eACXnS,EAAI3D,KAAK04C,eACTrO,EAAKrqC,KAAKqqC,GAChB,IAAK,IAAI3hC,EAAI,EAAGA,EAAI1I,KAAKu/F,UAAU35F,SAAU8C,EAAG,CAC5C,MAAMI,EAAIuhC,EAAG3hC,GAAK1I,KAAKynC,eAAejT,QAChC+lB,EAAav6C,KAAKs/F,cAAc52F,GAGhC44F,EAAQ39F,EADW3D,KAAKu6C,WAAW3qB,WACJ,EAAI2qB,EAAW3qB,WAAa,EAGjE,GADA+F,EAAIwqC,UAAUmhC,EAAQ,EAAGx4F,EAAI,EAAGyxC,EAAW3qB,WAAa,EAAG,GACvD2qB,EAAWl3C,KACXosB,EAAM49B,YAAY13B,EAAK2rE,EAAOx4F,EAAG9I,KAAKynC,eAAekT,iBAAmB36C,KAAKynC,eAAepY,MAAOkrB,EAAWl3C,UAE7G,CACDsyB,EAAI3gB,OACJ2gB,EAAI5e,QAAQ/W,KAAKynC,eAAe34B,MAChC,MAAM/J,EAAkC,QAA1B8I,EAAK0sC,EAAWx1C,YAAyB,IAAP8I,EAAgBA,EAAK,GACrE8nB,EAAIqc,SAASjtC,EAAMu8F,EAAOx4F,EAAI,EAAI9I,KAAKynC,eAAepY,OACtDsG,EAAI/f,SACR,CACJ,CACJ,CAEAG,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB,GAAuB,IAAnB9V,KAAKqqC,GAAGzkC,OACR,MAAM,IAAIzC,EAAa,YAAa,qCAExCnD,KAAKsW,cACL,MAAMirF,EAA2B39F,MAAb5D,KAAK47C,MAAqB57C,KAAKynC,eAAekI,UAKlE,GAJA3vC,KAAK8U,aACL6gB,EAAI0V,UAAU,UAAWrrC,KAAK6S,aAAa,MAAO,CAAEy4B,aAAa,IACjEtrC,KAAKqhG,gBACLrhG,KAAKkgG,kBACDlgG,KAAK+yB,MAAQwuE,EAAa,CAC1B,MAAMt2D,EAASjrC,KAAKoxC,WACpBpxC,KAAK+yB,KAAK4W,mBAAmBsB,EAAQA,GACrCjrC,KAAK+yB,KAAKjc,WAAW6e,GAAK5f,MAC9B,CACA/V,KAAKg1D,WACLh1D,KAAK40D,gBACLj/B,EAAI4V,aACJvrC,KAAK2V,cACT,ECrYG,MAAM6rF,WAAiB/tB,GACf/xE,sBACP,OAAOG,EAAS2/F,QACpB,CACA//F,YAAYkC,EAAGmF,EAAG2B,EAAO4jB,GAErB9qB,MAAMI,EAAGmF,EAAG2B,EADQpK,OAAOmX,OAAO,CAAE28D,yBAA0B,GAAIJ,UAAW,EAAGO,kBAAmB,GAAKjmD,GAE5G,CACAgK,gBACI,OAAOr4B,KAAKujC,YAAY,IAC5B,CAEAk+D,cAEI,OADAzhG,KAAKi2E,QAAQ,OACNj2E,IACX,ECJJ,SAAS,MAAK+D,GACN29F,GAAYp/D,OACZz+B,EAAI,uBAAwBE,EACpC,CACO,IAAI49F,IACX,SAAWA,GACPA,EAAoBA,EAAyB,IAAI,GAAK,MACtDA,EAAoBA,EAA4B,QAAK,GAAK,QAC7D,CAHD,CAGGA,KAAwBA,GAAsB,CAAC,IAC3C,MAAMD,WAAoB3tF,EAClBrS,sBACP,OAAOG,EAAS6/F,WACpB,CACW/oE,sBACP,OAAOgpE,EACX,CACW/oE,4BACP,MAAO,CACHwZ,IAAKuvD,GAAoB1xD,IACzBoC,OAAQsvD,GAAoBrxD,OAEpC,CAIWsxD,uBAEP,OADA,GAAE,6DACKD,EACX,CAIWE,6BAEP,OADA,GAAE,8DACKH,GAAY9oE,cACvB,CACAn3B,aAAY,MAAE2mC,EAAK,KAAE05D,EAAI,KAAE/8F,EAAO,GAAE,YAAEyrE,EAAc,GAAE,SAAEh9C,EAAWmuE,GAAoB1xD,MACnF1sC,QACAvD,KAAKooC,MAAQA,EACbpoC,KAAK8hG,KAAOA,EACZ9hG,KAAK+E,KAAOA,EACZ/E,KAAKwwE,YAAcA,EACnBxwE,KAAKwzB,SAA+B,iBAAbA,EAAwBkuE,GAAY9oE,eAAepF,GAAYA,EACtFxzB,KAAKgE,KAAO,EACZhE,KAAK2X,YACL3X,KAAKynC,eAAiB,CAClBmgC,QAAQ,EACRhH,KAAM,CAAC,GACPxrB,MAAO,QACPwL,WAAY,EACZmhD,cAAc,EACdvH,eAAgB,EAGhBwH,uBAAuB,EAE/B,CAMAltF,WAAW6gB,GACPA,EAAI5e,QAAQ/W,KAAK8O,MACjB,MAAMuf,EAAUruB,KAAKynC,eAIrB,OAHA9R,EAAIngB,eAAe6Y,EAAQ+mB,OAC3Bzf,EAAIrgB,aAAa+Y,EAAQ+mB,OACzBzf,EAAIjgB,aAAa2Y,EAAQuyB,YAClB5gD,IACX,CAGAkoE,UAAUN,EAAQhH,GAId,OAHA5gE,KAAKynC,eAAemgC,OAASA,EACzBhH,IACA5gE,KAAKynC,eAAem5B,KAAOA,GACxB5gE,IACX,CAEAwsD,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,IAAIxN,EAAI,EACR,OAAQ9I,KAAKwzB,UACT,KAAKmuE,GAAoB1xD,IACrBnnC,EAAI9I,KAAKooC,MAAMjQ,aAAawZ,eAAe3xC,KAAKgE,MAChD,MACJ,KAAK29F,GAAoBrxD,OACrBxnC,EAAI9I,KAAKooC,MAAMjQ,aAAayZ,kBAAkB5xC,KAAKgE,KAAOgqB,EAAOiD,yBACjE,MACJ,QACI,MAAM,IAAI9tB,EAAa,kBAAmB,gBAAgBnD,KAAKwzB,wBAGvE,MAAM4U,EAAQ,CAAEzkC,EAAG3D,KAAKooC,MAAMsQ,eAAgB5vC,KACxCg5F,EAAO,CAAEn+F,EAAG3D,KAAK8hG,KAAKppD,eAAgB5vC,KAC5C,GAAE,gCAAiCs/B,EAAO,QAAS05D,EAAM,KAAMh5F,GAC/D,MAAM0xF,EAAiBx6F,KAAKynC,eAAe+yD,eAAiBx6F,KAAKwzB,SACjEmC,EAAI3gB,OACJhV,KAAK8U,WAAW6gB,GAEhBA,EAAIqc,SAAShyC,KAAK+E,KAAMqjC,EAAMzkC,EAAGykC,EAAMt/B,GAEvC,MAAMm5F,EAAetsE,EAAIusB,YAAYliD,KAAK+E,MACpCm9F,EAAaD,EAAax3F,MAC1B03F,EAAcF,EAAav3F,OAE3B03F,EAAUh6D,EAAMt/B,EAAIq5F,EAAc,KAGlC,OAAE3zF,EAAM,KAAEJ,EAAI,OAAEC,EAAM,MAAEC,GAAUtO,KAAKiX,SAEvCqxC,EAAkB56C,EAAKq2C,UAAU31C,EAAM,SAC7CunB,EAAI5e,QAAQvI,EAAQ85C,EAAiBj6C,EAAQC,GAC7CqnB,EAAIqc,SAAShyC,KAAKwwE,YAAapoC,EAAMzkC,EAAIu+F,EAAa,EAAGE,GAEzD,MAAMC,EAAgB1sE,EAAIusB,YAAYliD,KAAKwwE,aACrC8xB,EAAcD,EAAc53F,MAC5B83F,EAAeF,EAAc33F,OAEnC,IAAIwnE,EAAU9pC,EAAMzkC,EAChB6+F,EAASJ,EACb,MAAMzuB,EAAQmuB,EAAKn+F,EAAI3D,KAAK8hG,KAAKzyD,gBAAgBzf,WAE7C5vB,KAAKwzB,WAAamuE,GAAoB1xD,KACtCiiC,GAAWgwB,EAAaI,EAAc,EACtCE,GAAUD,EAAe,KAEpBviG,KAAKwzB,WAAamuE,GAAoBrxD,SAC3CkyD,GAAUD,EAAe,IACzBrwB,GAAWgwB,EAAa,EACnBliG,KAAKynC,eAAeu6D,wBACrB9vB,GAAWowB,IAGftiG,KAAKynC,eAAemgC,QAEpBxC,GAASkD,eAAe3yC,EAAKu8C,EAASswB,EAAQ7uB,EAAO6uB,EAAQxiG,KAAKynC,eAAem5B,MAE7E5gE,KAAKynC,eAAes6D,cACpB38B,GAASkD,eAAe3yC,EAAKg+C,EAAO6uB,EAAS,EAAIxiG,KAAKwzB,SAAUmgD,EAAO6uB,EAAShI,EAAgBx6F,KAAKynC,eAAem5B,QAIxHjrC,EAAIQ,YACJR,EAAIS,OAAO87C,EAASswB,GAEpB7sE,EAAIU,OAAOs9C,EAAO6uB,GACdxiG,KAAKynC,eAAes6D,cAEpBpsE,EAAIU,OAAOs9C,EAAO6uB,EAAShI,GAE/B7kE,EAAI/G,SACJ+G,EAAI2f,aAER3f,EAAI/f,SACR,ECxKJ,SAAS,MAAK7R,GACN0+F,GAAangE,OACbz+B,EAAI,wBAAyBE,EACrC,CDuKA29F,GAAYp/D,OAAQ,EACpBo/D,GAAYvqF,UAAY,CACpB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWoC,OACnBJ,MAAO/B,EAAUkD,QCpKd,MAAMgzF,WAAqB//F,GACnBhB,sBACP,OAAOG,EAAS4gG,YACpB,CAEW7yB,oBACP,MAAO,CACHrnE,EAAG,CACClF,KAAM,eACNoH,MAAO,IAEXulE,EAAG,CACC3sE,KAAM,eACNoH,MAAO,IAEX2nB,EAAG,CACC/uB,KAAM,eACNoH,MAAO,IAEXpC,EAAG,CACChF,KAAM,mBACNoH,MAAO,IAEXwlE,EAAG,CACC5sE,KAAM,WACNoH,MAAO,IAEXxJ,EAAG,CACCoC,KAAM,qBACNoH,MAAO,IAGnB,CAUAhJ,YAAYi4C,GACRn2C,MAAMm2C,GACN15C,KAAK0iG,UAAYhpD,EAAW30C,MAAQ,IAAIoJ,cACxCnO,KAAKgE,KAAO01C,EAAW11C,MAAQ,EAC/BhE,KAAKmR,OAAS,GACdnR,KAAKynC,eAAiBpnC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKynC,gBAAiB,CAAEk7D,gBAAiB,KAC/F,GAAE,sBAAuB3iG,KAAK0iG,SAClC,CAEAl2C,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAk4C,YACI,IAAI0qD,EAAc,EAoBlB,OAhBA5iG,KAAKmR,OAAS,GAEdnR,KAAK0iG,SAAS/5F,MAAM,IAAIiM,SAASiuF,IAE7B,MAAM5I,EAAawI,GAAa7yB,OAAOizB,GACvC,IAAK5I,EACD,MAAM,IAAI92F,EAAa,+BAAiC0/F,GAC5D,MAAMz0F,EAAO1K,EAAQ1D,KAAKynC,eAAek7D,iBACnCrzE,EAAQ,IAAIG,EAAMwqE,EAAW52F,KAAM+K,EAAM,CAAE9M,SAAU,aAE3DtB,KAAKmR,OAAOsD,KAAK6a,GACjBszE,GAAe3I,EAAWxvF,KAAK,IAGnCzK,KAAKy5B,SAASmpE,GACd5iG,KAAKm4C,cAAe,EACbn4C,IACX,CAEA+V,OACI/V,KAAKsW,cACL,MAAM3S,EAAI3D,KAAK04C,eACT5vC,EAAI9I,KAAKm4B,aAAaoL,YAAYvjC,KAAKgE,MAAQ,GACrD,GAAE,uBAAwBhE,KAAK0iG,UAC/B,IAAII,EAAWn/F,EACf3D,KAAKmR,OAAOyD,SAAQ,CAAC0a,EAAOhd,KACxB,MAAMywF,EAAiB/iG,KAAK0iG,SAASpwF,GACrCgd,EAAM0I,OAAOh4B,KAAK8V,eAAgBgtF,EAAUh6F,GAC5Cg6F,GAAYL,GAAa7yB,OAAOmzB,GAAgBt4F,KAAK,GAE7D,EAGJg4F,GAAangE,OAAQ,EC3Gd,MAAM0gE,WAAoBtgG,GAClBhB,sBACP,OAAOG,EAASmhG,WACpB,CACAvhG,YAAY6wE,EAAUC,GAClBhvE,MAAM,CAAEgrB,SAAU,MAClBvuB,KAAK+5F,QAAU,IAAI1nB,GAAcC,EAAUC,GAC3CvyE,KAAKy5B,SAASz5B,KAAK+5F,QAAQz+C,WAAWxqC,aAAarG,OAEnDzK,KAAKg2C,cAAe,CACxB,CAGA6B,qBAAqBC,GAEjB,OAAO93C,IACX,CACAk4C,YAEI,OADAl4C,KAAKm4C,cAAe,EACbn4C,IACX,CACA+V,OACI,MAAMqhB,EAAQp3B,KAAKm4B,aACbxC,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAM2sF,EAAUjjG,KAAK+5F,QAAQz+C,WACxB2nD,EAAQpsF,cACTosF,EAAQnsF,WAAW6e,GAEvBstE,EAAQ9rE,SAASC,GACjB6rE,EAAQzrE,UAAUJ,EAAMmM,YAAY,GAAKnM,EAAMiB,iBAC/C4qE,EAAQ7qE,cAAcp4B,KAAK04C,eAC/B,ECxBG,MAAMwqD,WAAuBnvF,EACrBrS,sBACP,OAAOG,EAASqhG,cACpB,CAMAzhG,YAAY0hG,GACR5/F,QACI4/F,EAAa/6D,QACbpoC,KAAKooC,MAAQ+6D,EAAa/6D,OAC1B+6D,EAAarB,OACb9hG,KAAK8hG,KAAOqB,EAAarB,MAC7B9hG,KAAKgE,KAAO,EACZhE,KAAKynC,eAAiB,CAClBwiC,OAAO,EACPE,YAAa,EACbC,WAAY,EACZC,WAAY,EACZH,cAAe,EAEvB,CAEA1d,QAAQxoD,GAEJ,OADAhE,KAAKgE,KAAOA,EACLhE,IACX,CAEAuqE,SAASN,GAEL,OADAjqE,KAAKynC,eAAewiC,MAAQA,EACrBjqE,IACX,CAEA+V,OACI,MAAM4f,EAAM31B,KAAK8V,eACjB9V,KAAKsW,cACL,MAAMxN,EAAK9I,KAAKooC,OAASpoC,KAAKooC,MAAMjQ,aAAawZ,eAAe3xC,KAAKgE,OAChEhE,KAAK8hG,MAAQ9hG,KAAK8hG,KAAK3pE,aAAawZ,eAAe3xC,KAAKgE,OACzD,EAGEkuE,EAAWlyE,KAAKooC,OAASpoC,KAAKooC,MAAMsQ,gBAAoB14C,KAAK8hG,MAAQ9hG,KAAK8hG,KAAK3pE,aAAam/B,gBAAmB,EAG/G8rC,EAAUpjG,KAAK8hG,MAAQ9hG,KAAK8hG,KAAKppD,eAAiB14C,KAAK8hG,KAAKlyE,WAAa,GAC1E5vB,KAAKooC,OAASpoC,KAAKooC,MAAMjQ,aAAao/B,aAAe,IACtD,EACJv3D,KAAKynC,eAAeyiC,cAAgBk5B,EAASlxB,EAtDrD,YAAcnuE,GACNm/F,GAAe5gE,OACfz+B,EAAI,0BAA2BE,EACvC,CAoDQ,CAAE,qCAAsCmuE,EAAS,UAAWkxB,EAAQ,KAAMt6F,GAC1EghE,GAAQY,cAAc/0C,EAAKu8C,EAASppE,EAAG9I,KAAKynC,eAChD,EClBJ,SAAS,MAAK1jC,GACNs/F,GAAQ/gE,OACRz+B,EAAI,mBAAoBE,EAChC,CDkBAm/F,GAAe5gE,OAAQ,ECdhB,MAAM+gE,GAUT99F,wBAAwB8/D,EAAW56D,EAAQ,IAAKC,EAAS,KACrD,OAAO,IAAI24F,GAAQ,CAAE79B,SAAU,CAAEH,YAAW56D,QAAOC,WACvD,CAQAjJ,YAAY4sB,EAAU,CAAC,GACnB,GAAE,gBAAiBA,GACnBruB,KAAKquB,QAAU,CACX+I,MAAO,CACHgf,MAAO,IAEXovB,SAAU,CACNH,UAAW,GACX56D,MAAO,IACPC,OAAQ,IACR66D,WAAY,QAEhBz2D,KAAMu0F,GAAQlsF,WAElBnX,KAAK+2B,WAAW1I,EACpB,CACA2I,QACIh3B,KAAKsjG,QAAU,GACftjG,KAAKujG,QAAU,GACfvjG,KAAK43E,OAAS,GACd53E,KAAK+lC,OAAS,GACd/lC,KAAKo3B,WAAQxzB,CACjB,CACAmzB,WAAW1I,GACPruB,KAAKquB,QAAUhuB,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKquB,SAAUA,GAC9DruB,KAAKwjG,eACLxjG,KAAKg3B,OACT,CACAwsE,eACI,MAAM,UAAEn+B,EAAS,MAAE56D,EAAK,OAAEC,EAAM,WAAE66D,GAAevlE,KAAKquB,QAAQm3C,SAC9D,GAAiB,MAAbH,EACA,OAEJ,GAAiB,IAAbA,EAEA,MADA,GAAErlE,MACI,IAAImD,EAAa,gDAE3B,IAAImiE,EAAUtlE,KAAKquB,QAAQm3C,SAASF,QACpC,QAAgB1hE,IAAZ0hE,EAAuB,CAOnBA,EADA9F,GALS5wD,SAASgE,eAAeyyD,IAMvBD,GAASO,SAASC,OAGlBR,GAASO,SAASE,GAEpC,CACA7lE,KAAK+U,QAAUqwD,GAASM,aAAaL,EAAWC,EAAS76D,EAAOC,EAAQ66D,EAC5E,CACA1uD,aACI,OAAO7W,KAAK+U,OAChB,CACA+B,WAAW/B,GAEP,OADA/U,KAAK+U,QAAUA,EACR/U,IACX,CACA86B,WACI,OAAO96B,KAAKo3B,KAChB,CACAknE,YACI,OAAOt+F,KAAK+lC,MAChB,CAEA0tC,MAAMrlD,GACF,MAAM6+B,EAAajtD,KAAKquB,QAAQ+I,MAAMgf,MAChC45B,EAAI3vE,OAAOmX,OAAO,CAAE7T,EAAG,EAAGmF,EAAG,EAAG2B,MAAOzK,KAAKquB,QAAQm3C,SAAS/6D,MAAqB,EAAbwiD,EAAkB5+B,QAAS,CAAE8lD,yBAAuC,EAAblnB,IAAsB7+B,GAClJgJ,EAAQ,IAAIq8C,GAAMzD,EAAErsE,EAAGqsE,EAAElnE,EAAGknE,EAAEvlE,MAAOulE,EAAE3hD,SAI7C,OAHAruB,KAAK43E,OAAOnjE,KAAK2iB,GACjBA,EAAMtgB,WAAW9W,KAAK+U,SACtB/U,KAAKo3B,MAAQA,EACNA,CACX,CACAoqE,SAASpzE,GACL,MAAM6+B,EAAajtD,KAAKquB,QAAQ+I,MAAMgf,MAChC45B,EAAI3vE,OAAOmX,OAAO,CAAE7T,EAAG,EAAGmF,EAAG,EAAG2B,MAAOzK,KAAKquB,QAAQm3C,SAAS/6D,MAAqB,EAAbwiD,EAAkB5+B,QAAS,CAAE8lD,yBAAuC,IAAblnB,IAAsB7+B,GAClJgJ,EAAQ,IAAIoqE,GAASxxB,EAAErsE,EAAGqsE,EAAElnE,EAAGknE,EAAEvlE,MAAOulE,EAAE3hD,SAIhD,OAHAruB,KAAK43E,OAAOnjE,KAAK2iB,GACjBA,EAAMtgB,WAAW9W,KAAK+U,SACtB/U,KAAKo3B,MAAQA,EACNA,CACX,CACAt0B,UAAU42C,GACN,MAAM/f,EAAO,IAAI72B,GAAU42C,GAK3B,OAJI15C,KAAKo3B,OACLuC,EAAKxC,SAASn3B,KAAKo3B,OACvBuC,EAAK7iB,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAKklB,GACXA,CACX,CACAq8D,UAAU1mE,EAAOoqB,EAAYrrB,GACzB,MAAMsL,EAAO,IAAIq8D,GAAU1mE,EAAOoqB,EAAYrrB,GAK9C,OAJIruB,KAAKo3B,OACLuC,EAAKxC,SAASn3B,KAAKo3B,OACvBuC,EAAK7iB,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAKklB,GACXA,CACX,CACA4hE,WAAWtpF,EAAMynC,EAAYrrB,GACzB,MAAMsL,EAAO,IAAI4hE,GAAWtpF,EAAMynC,EAAYrrB,GAK9C,OAJIruB,KAAKo3B,OACLuC,EAAKxC,SAASn3B,KAAKo3B,OACvBuC,EAAK7iB,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAKklB,GACXA,CACX,CACA07D,UAAU37C,GACN,MAAM+pD,EAAY,IAAIpO,GAAU37C,GAKhC,OAJI15C,KAAKo3B,OACLqsE,EAAUtsE,SAASn3B,KAAKo3B,OAC5BqsE,EAAU3sF,WAAW9W,KAAK+U,SAC1B/U,KAAKsjG,QAAQ7uF,KAAKgvF,GACXA,CACX,CACA9zB,SAASj2B,GACL,MAAMgqD,EAAW,IAAI/zB,GAASj2B,GAK9B,OAJI15C,KAAKo3B,OACLssE,EAASvsE,SAASn3B,KAAKo3B,OAC3BssE,EAAS5sF,WAAW9W,KAAK+U,SACzB/U,KAAKsjG,QAAQ7uF,KAAKivF,GACXA,CACX,CACAvjD,QAAQ/xB,EAAS,CAAC,GACd,MAAMu1E,EAAU,IAAIxjD,GAAQ/xB,EAAOnc,MAKnC,OAJIjS,KAAKo3B,OACLusE,EAAQxsE,SAASn3B,KAAKo3B,OAC1BusE,EAAQ7sF,WAAW9W,KAAK+U,SACxB/U,KAAKsjG,QAAQ7uF,KAAKkvF,GACXA,CACX,CACArW,SAASl/D,GACL,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEvF,KAAM,SAAUoc,QAAS,CAC3CjgB,KAAM,UACN4gC,gBAAYprC,IACXwqB,GACHw1E,EAAW,IAAItW,GAAStd,EAAE/9D,KAAM+9D,EAAE3hD,QAAQjgB,KAAM4hE,EAAE3hD,QAAQ2gB,YAKhE,OAJIhvC,KAAKo3B,OACLwsE,EAASzsE,SAASn3B,KAAKo3B,OAC3BwsE,EAAS9sF,WAAW9W,KAAK+U,SACzB/U,KAAKsjG,QAAQ7uF,KAAKmvF,GACXA,CACX,CACAZ,YAAY50E,GACR,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEogD,KAAM,OAASxpC,GACnCy1E,EAAc,IAAIb,GAAYhzB,EAAEpY,MAKtC,OAJI53D,KAAKo3B,OACLysE,EAAY1sE,SAASn3B,KAAKo3B,OAC9BysE,EAAY/sF,WAAW9W,KAAK+U,SAC5B/U,KAAKsjG,QAAQ7uF,KAAKovF,GACXA,CACX,CACAnM,WAAWtpE,GACP,MAAM01E,EAAa,IAAIpM,GAAWtpE,EAAOjuB,IAAKiuB,EAAO+9C,UAAW/9C,EAAO0+C,UAKvE,OAJI9sE,KAAKo3B,OACL0sE,EAAW3sE,SAASn3B,KAAKo3B,OAC7B0sE,EAAWhtF,WAAW9W,KAAK+U,SAC3B/U,KAAKsjG,QAAQ7uF,KAAKqvF,GACXA,CACX,CACA5gG,QAAQw2C,GACJ,MAAM/f,EAAO,IAAIz2B,GAAQw2C,GAKzB,OAJI15C,KAAKo3B,OACLuC,EAAKxC,SAASn3B,KAAKo3B,OACvBuC,EAAK7iB,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAKklB,GACXA,CACX,CACAr3B,UAAUo3C,GACN,MAAM/f,EAAO,IAAIr3B,GAAUo3C,GAI3B,OAHI15C,KAAKo3B,OACLuC,EAAKxC,SAASn3B,KAAKo3B,OACvBuC,EAAK7iB,WAAW9W,KAAK+U,SACd4kB,CACX,CACAn3B,eAAe4rB,GACX,MAAMitC,EAAQ,IAAI74D,GAAe4rB,EAAO4B,MAAO5B,EAAOksC,MAEtD,OADAe,EAAMvkD,WAAW9W,KAAK+U,SACfsmD,CACX,CACAv5D,WAAWssB,GACP,MAAMiwC,EAAQ,IAAIv8D,GAAWssB,EAAOnc,MAEpC,OADAosD,EAAMvnD,WAAW9W,KAAK+U,SACfspD,CACX,CACAr8D,WAAWosB,GACP,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEzS,KAAM,IAAKg/F,SAAUv1D,GAA4B1V,OAAQkrE,SAAUv1D,GAA0B6B,QAAUliB,GAC3H4gB,EAAa,IAAIhtC,GAAWguE,EAAEjrE,MAKpC,OAJAiqC,EAAWgC,iBAAiBg/B,EAAE+zB,UAC9B/0D,EAAW4B,yBAAyBo/B,EAAEg0B,UACtCh1D,EAAWj4B,QAAQi5D,EAAElhE,MACrBkgC,EAAWl4B,WAAW9W,KAAK+U,SACpBi6B,CACX,CACAsT,YAAYl0B,GACR,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEwsF,SAAU,MAAOD,SAAU,SAAUE,SAAS,EAAMl+C,aAAa,GAAQ33B,GAC7Fg1B,EAAc,IAAId,GAiBxB,OAhBAc,EAAY6E,cAAc+nB,EAAE+zB,UAC5B3gD,EAAY2E,YAAYioB,EAAEg0B,UAC1B5gD,EAAYkC,iBAAiB0qB,EAAEi0B,SAC/B7gD,EAAY4C,eAAegqB,EAAEjqB,aAGD,iBAAjBiqB,EAAEjhE,YAAiD,iBAAfihE,EAAEriE,SACjB,iBAAjBqiE,EAAEhhE,WACTo0C,EAAYrsC,QAAQi5D,EAAEjhE,WAAYihE,EAAEriE,SAAUqiE,EAAEhhE,YAEhDo0C,EAAYrsC,QAAQi5D,EAAEjhE,WAAYihE,EAAEriE,SAAU,IAEvB,iBAAfqiE,EAAEriE,UACdy1C,EAAYxrC,YAAYo4D,EAAEriE,UAE9By1C,EAAYtsC,WAAW9W,KAAK+U,SACrBquC,CACX,CACAxQ,aAAaxkB,GACT,IAAIvgB,EACJ,MAAMklC,EAAe,IAAIH,GAAoF,QAAtE/kC,EAAKugB,aAAuC,EAASA,EAAOnc,YAAyB,IAAPpE,EAAgBA,EAAK,MAM1I,OALyEjK,OAApEwqB,aAAuC,EAASA,EAAOoF,WACxDuf,EAAazY,YAAYlM,EAAOoF,UACyC5vB,OAAxEwqB,aAAuC,EAASA,EAAO2lB,eACxDhB,EAAae,gBAAgB1lB,EAAO2lB,cACxChB,EAAaj8B,WAAW9W,KAAK+U,SACtBg+B,CACX,CACAqqB,SAASnrD,EAAMmc,GACX,MAAMC,EAAUhuB,OAAOmX,OAAO,CAAEvF,OAAMuhB,SAAU,EAAG5Y,WAAY,IAAMwT,GAC/DivC,EAAW,IAAID,GAASnrD,GAY9B,OAXAorD,EAAS/iC,YAAYjM,EAAQmF,UACzBnF,EAAQ61E,iBACR7mC,EAASe,mBAAmB/vC,EAAQ61E,iBAEpC71E,EAAQ81E,iBACR9mC,EAASkB,mBAAmBlwC,EAAQ81E,sBAET,IAApB91E,EAAQwvC,SACfR,EAASc,WAAW9vC,EAAQwvC,SAEhCR,EAASvmD,WAAW9W,KAAK+U,SAClBsoD,CACX,CACAolC,aAAar0E,GACT,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEzS,KAAM,IAAKwpB,SAAU,IAAKkrB,KAAM,EAAGz1C,KAAM,GAAKoqB,GAClErpB,EAAO,IAAI09F,GAAa,CAC1B19F,KAAMirE,EAAEjrE,KACRf,KAAMgsE,EAAEhsE,KACRuqB,SAAUyhD,EAAEzhD,SACZkrB,KAAMu2B,EAAEv2B,OAMZ,OAJIz5C,KAAKo3B,OACLryB,EAAKoyB,SAASn3B,KAAKo3B,OACvBryB,EAAK+R,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAK1P,GACXA,CACX,CACAumD,UAAUl9B,GACN,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAE6zC,OAAQ,IAAK73B,SAAU,QAAUpF,GACrDm9B,EAAY,IAAIrB,GAAe8lB,EAAE3kB,QAGvC,OAFAE,EAAUjxB,YAAY01C,EAAEx8C,UACxB+3B,EAAUz0C,WAAW9W,KAAK+U,SACnBw2C,CACX,CACAyb,aAAa54C,EAAQ05C,GAAa,GAC9B,MAAMb,EAAe,IAAID,GAAa54C,EAAOi9B,QAI7C,OAHA4b,EAAa3sC,YAAYlM,EAAOoF,UAChCyzC,EAAanwD,WAAW9W,KAAK+U,SAC7BkyD,EAAakB,cAAcL,GACpBb,CACX,CACA3L,cACI,OAAO,IAAIA,EACf,CACAuP,kBACI,OAAO,IAAIA,EACf,CACA+sB,iBAAiBxpE,GACb,MAAMg2E,EAAc1gG,EAAQ0qB,EAAOypE,mBAAoB,sBACjDwM,EAAmB,IAAIzM,GAAiBwM,EAAah2E,GAG3D,OAFAi2E,EAAiBvtF,WAAW9W,KAAK+U,SACjC/U,KAAKsjG,QAAQ7uF,KAAK4vF,GACXA,CACX,CACA3sC,MAAMtpC,GACF,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEogD,KAAM,OAASxpC,GACnC8X,EAAQ,IAAIwxB,GAAMsY,EAAEpY,MAE1B,OADA53D,KAAK+lC,OAAOtxB,KAAKyxB,GACVA,CACX,CACAmyC,eAAejqD,GACX,MAAMowE,EAAY,IAAInmB,GAAejqD,EAAOqqD,UAAWrqD,EAAOsqD,cAG9D,OAFA8lB,EAAUn/C,QAAQjxB,EAAOnc,MAAM6E,WAAW9W,KAAK+U,SAC/C/U,KAAKsjG,QAAQ7uF,KAAK+pF,GACXA,CACX,CACA/jC,UAAUpsC,GACN,OAAO,IAAIosC,GAAUpsC,EACzB,CACAu0D,OAAOx0D,GACH,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEwY,MAAO,GAAI3B,QAAS,CAAC,GAAKD,GAC9C+oB,EAAS,IAAIyrC,GAAO5S,EAAEhgD,MAAOggD,EAAE3hD,SAASvX,WAAW9W,KAAK+U,SAE9D,OADA/U,KAAKsjG,QAAQ7uF,KAAK0iC,GACXA,CACX,CACA2jB,KAAK1sC,GACD,IAAIvgB,EAAIoF,EAAIg0C,EAAIgO,EAAIC,EACpB,MAAMtZ,EAAO,IAAIkf,GAAK1sC,EAAO4B,MAAiC,QAAzBniB,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAGijD,UAAUh6C,WAAW9W,KAAK+U,SAQ5H,OAPA6mC,EAAK0tC,iBAA8G,QAA5FriC,EAA+B,QAAzBh0C,EAAKmb,EAAOC,eAA4B,IAAPpb,OAAgB,EAASA,EAAGqxF,2BAAwC,IAAPr9C,EAAgBA,EAAK,KAClH,QAAzBgO,EAAK7mC,EAAOC,eAA4B,IAAP4mC,OAAgB,EAASA,EAAGsvC,wBAC9DlkG,OAAOk4B,QAAkC,QAAzB28B,EAAK9mC,EAAOC,eAA4B,IAAP6mC,OAAgB,EAASA,EAAGqvC,uBAAuB3vF,SAAQ,EAAE8lE,EAAW55C,MACrH8a,EAAK4tC,qBAAqBhkF,OAAOk1E,GAAY55C,EAAU,IAG/D9gC,KAAKsjG,QAAQ7uF,KAAKmnC,GACXA,CACX,CACA0yC,MAAMlgE,GACF,MAAMo2E,EAAQ,IAAIlW,GAAMlgE,EAAOugE,KAAMvgE,EAAOwgE,GAAIxgE,EAAOC,SAASvX,WAAW9W,KAAK+U,SAEhF,OADA/U,KAAKsjG,QAAQ7uF,KAAK+vF,GACXA,CACX,CACAzuC,SAAS3nC,GACL,IAAIvgB,EACJ,MAAM42F,EAAM,IAAI1uC,GAAS,CACrBQ,WAAYnoC,EAAOugE,KACnB9kC,UAAWz7B,EAAOwgE,GAClBp4B,cAAepoC,EAAOooC,cACtBC,aAAcroC,EAAOqoC,cACtBroC,EAAOrpB,MAKV,OAJ8B,QAAzB8I,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAGizB,YAC9D2jE,EAAI76D,aAAaxb,EAAOC,QAAQyS,WACpC2jE,EAAI3tF,WAAW9W,KAAK+U,SACpB/U,KAAKsjG,QAAQ7uF,KAAKgwF,GACXA,CACX,CACAhJ,UAAUrtE,GACN,IAAIvgB,EAAIoF,EACR,MAAMjP,EAAO,IAAIy3F,GAAU,CACvBllC,WAAYnoC,EAAOugE,KACnB9kC,UAAWz7B,EAAOwgE,GAClBp4B,cAAepoC,EAAOooC,cACtBC,aAAcroC,EAAOqoC,eAQzB,OAN8B,QAAzB5oD,EAAKugB,EAAOC,eAA4B,IAAPxgB,OAAgB,EAASA,EAAG9I,OAC9Df,EAAKgtE,QAAQ5iD,EAAOC,QAAQtpB,OACF,QAAzBkO,EAAKmb,EAAOC,eAA4B,IAAPpb,OAAgB,EAASA,EAAGnE,OAC9D9K,EAAK+S,QAAQqX,EAAOC,QAAQvf,MAChC9K,EAAK8S,WAAW9W,KAAK+U,SACrB/U,KAAKsjG,QAAQ7uF,KAAKzQ,GACXA,CACX,CACAk/F,eAAe90E,GACX,MAAMs2E,EAAiB,IAAIxB,GAAe,CACtC96D,MAAOha,EAAOugE,KACdmT,KAAM1zE,EAAOwgE,KAQjB,OANIxgE,EAAOC,QAAQrqB,MACf0gG,EAAel4C,QAAQp+B,EAAOC,QAAQrqB,MACtCoqB,EAAOC,QAAQ47C,OACfy6B,EAAen6B,SAASn8C,EAAOC,QAAQ47C,OAC3Cy6B,EAAe5tF,WAAW9W,KAAK+U,SAC/B/U,KAAKsjG,QAAQ7uF,KAAKiwF,GACXA,CACX,CACAhD,YAAYtzE,GACR,MAAMu2E,EAAc,IAAIjD,GAAY,CAChCt5D,MAAOha,EAAOugE,KACdmT,KAAM1zE,EAAOwgE,GACb7pF,KAAMqpB,EAAOrpB,KACbyrE,YAAapiD,EAAOC,QAAQmiD,YAC5Bh9C,SAAUpF,EAAOC,QAAQmF,WAQ7B,OANIpF,EAAOC,QAAQrqB,MACf2gG,EAAYn4C,QAAQp+B,EAAOC,QAAQrqB,MACnCoqB,EAAOC,QAAQvf,MACf61F,EAAY5tF,QAAQqX,EAAOC,QAAQvf,MACvC61F,EAAY7tF,WAAW9W,KAAK+U,SAC5B/U,KAAKsjG,QAAQ7uF,KAAKkwF,GACXA,CACX,CACAlH,OAAOrvE,EAAS,CAAC,GACbA,EAAO3uB,QAAUO,KACjB,MAAM4kG,EAAS,IAAInH,GAAOrvE,GAAQtX,WAAW9W,KAAK+U,SAElD,OADA/U,KAAKujG,QAAQ9uF,KAAKmwF,GACXA,CACX,CAYAhT,UAAUvjE,EAAU,CAAC,GAEjB,OADAA,EAAQ5uB,QAAUO,KACX,IAAI4xF,GAAUvjE,EACzB,CACA6rE,aAAa9rE,GACT,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEwY,MAAO,GAAI3B,QAAS,CACtC/f,MAAO,UACN8f,GACH+rE,EAAQ,IAAID,GAAalqB,EAAEhgD,OAIjC,OAHAmqE,EAAM96C,QAAQ66C,GAAat8C,WAAWoyB,EAAE3hD,QAAQ/f,QAChD6rF,EAAMrjF,WAAW9W,KAAK+U,SACtB/U,KAAKsjG,QAAQ7uF,KAAK0lF,GACXA,CACX,CACAh/B,aAAa/sC,GACT,MAAM4hD,EAAI3vE,OAAOmX,OAAO,CAAEwY,MAAO,IAAM5B,GACjCitC,EAAQ,IAAIF,GAAa6U,EAAEhgD,OAEjC,OADAqrC,EAAMvkD,WAAW9W,KAAK+U,SACfsmD,CACX,CAEAtlD,OACI,MAAM4f,EAAM31B,KAAK+U,QACjB/U,KAAKujG,QAAQ3uF,SAASvM,GAAMA,EAAEyO,WAAW6e,GAAKglC,WAC9C36D,KAAK43E,OAAOhjE,SAASvM,GAAMA,EAAEyO,WAAW6e,GAAK5f,SAC7C/V,KAAK+lC,OAAOnxB,SAAS8kD,GAAMA,EAAE5iD,WAAW6e,GAAK5f,SAC7C/V,KAAKsjG,QAAQ1uF,SAASjU,IACbA,EAAE0V,cACH1V,EAAEmW,WAAW6e,GAAK5f,MAAM,IAEhC/V,KAAKujG,QAAQ3uF,SAASvM,GAAMA,EAAEyO,WAAW6e,GAAK5f,SAC9C/V,KAAKg3B,OACT,EAGJqsE,GAAQ/gE,OAAQ,EAEhB+gE,GAAQlsF,UAAY9W,OAAOmX,OAAO,CAAC,EAAGzD,EAAQoD,WCjfvC,MAAM0tF,WAAqB3hG,GACnBxB,sBACP,OAAOG,EAASgjG,YACpB,CACApjG,YAAYi4C,GACRn2C,MAAMm2C,GAAY,GAClB15C,KAAKynC,eAAiBpnC,OAAOmX,OAAOnX,OAAOmX,OAAO,CAAC,EAAGxX,KAAKynC,gBAAiB,CAExEjT,QAAS,GAETnF,MAAO,GAEPvgB,KAAM,SAASpB,EAAKe,eACxBzO,KAAKghD,aACT,ECnBG,MAAM8jD,GACTrjG,YAAYtB,GACRH,KAAKwmC,MAAQ,IAAInL,GACjBr7B,KAAK+kG,OAAO5kG,EAChB,CACA4kG,OAAO5kG,GAGH,OAFAH,KAAKG,IAAMA,EACXH,KAAKg3B,QACEh3B,IACX,CACAglG,SACI,OAAOhlG,KAAKG,GAChB,CACA62B,QACIh3B,KAAKsR,SAAWtR,KAAKwmC,MAAMnG,YAAYrgC,KAAKG,KAC5CH,KAAKsgC,UAAYtgC,KAAKsR,SAAS9R,KAC3BQ,KAAKsR,SAASsJ,aACd5a,KAAKsgC,WAAatgC,KAAKsR,SAASsJ,YAEpC,IAD0BygB,GAAMkD,WAAWv+B,KAAKsR,SAASW,MAErD,MAAM,IAAI9O,EAAa,eAAgB,yBAAyBnD,KAAKG,OAEzEH,KAAKqvB,MAAQrvB,KAAKwmC,MAAMnF,cAAcrhC,KAAKwmC,MAAMjG,aAAavgC,KAAKsgC,WAAYjF,GAAMkD,WAAWv+B,KAAKsR,SAASW,OAC9GjS,KAAKkiC,SAAW,CAAC,EACjBliC,KAAKilG,gBAAkB,CAAC,EACxBjlG,KAAKklG,wBAA0B,CAAC,EAChC,MAAMjjE,EAAe5G,GAAMK,aAAa17B,KAAKsR,SAAS9R,MACtD,IAAK,IAAIkJ,EAAI,EAAGA,EAAI2yB,GAAMG,MAAM51B,SAAU8C,EAAG,CACzC,MAAM4J,GAAS2vB,EAAev5B,GAAK2yB,GAAMG,MAAM51B,OACzCu8B,EAAW9G,GAAMG,MAAMlpB,GACvB8vB,EAAWpiC,KAAKwmC,MAAMxF,oBAAoBmB,EAAUniC,KAAKqvB,MAAM3mB,IACrE1I,KAAKkiC,SAASC,GAAYC,EAC1BpiC,KAAKilG,gBAAgBjlG,KAAKqvB,MAAM3mB,IAAM05B,EACtCpiC,KAAKklG,wBAAwBllG,KAAKqvB,MAAM3mB,IAAM05B,CAClD,CACA,OAAOpiC,IACX,CACAmlG,cAAchlG,GACV,MAAMX,EAAOQ,KAAKwmC,MAAMnG,YAAYlgC,GAAKX,KACnCy1B,EAAQj1B,KAAKwmC,MAAMvG,aAAajgC,KAAKkiC,SAAS1iC,IACpD,MAAO,CACHm6B,KAAM35B,KAAKkiC,SAAS1iC,GACpBob,WAAYqa,EAAMra,WAE1B,CACAwqF,WAAWzrE,GACPA,EAAOA,EAAKxrB,cACZ,MAAM8mB,EAAQj1B,KAAKwmC,MAAMvG,aAAatG,GAEhC0rE,EAAYrlG,KAAKkiC,SAASjN,EAAMz1B,MAChC8lG,EAAWtlG,KAAKwmC,MAAMvG,aAAaolE,GACzC,GAAIA,IAAc1rE,EACd,MAAO,CACHA,KAAM0rE,EACNzqF,WAAYqa,EAAMra,WAClB2qF,QAAQ,GAIhB,MAAMC,EAAYxlG,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAa5G,IAC/D,GAAiB,MAAb6rE,EACA,MAAO,CACH7rE,KAAM6rE,EACN5qF,WAAY5a,KAAKwmC,MAAMvG,aAAaulE,GAAW5qF,WAC/C2qF,QAAQ,GAIhB,MAAME,EAAoBzlG,KAAKklG,wBAAwBllG,KAAKwmC,MAAMjG,aAAa5G,IAC/E,OAAyB,MAArB8rE,GACAzlG,KAAKkiC,SAASojE,EAAS9lG,MAAQimG,SACxBzlG,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAa8kE,IACpDrlG,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAa5G,IAAS8rE,EAC/C,CACH9rE,KAAM8rE,EACN7qF,WAAY5a,KAAKwmC,MAAMvG,aAAawlE,GAAmB7qF,WACvD2qF,QAAQ,IAIZD,EAAS9lG,OAASm6B,UACX35B,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAavgC,KAAKkiC,SAASjN,EAAMz1B,QACxEQ,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAa+kE,EAAS9lG,OAAS8lG,EAAS9lG,KACxEQ,KAAKkiC,SAASojE,EAAS9lG,MAAQ8lG,EAAS9lG,KACjC,CACHm6B,KAAM2rE,EAAS9lG,KACfob,gBAAYhX,EACZ2hG,QAAQ,YAITvlG,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAavgC,KAAKkiC,SAASjN,EAAMz1B,QACxEQ,KAAKilG,gBAAgBjlG,KAAKwmC,MAAMjG,aAAa5G,IAASA,SAC/C35B,KAAKkiC,SAASojE,EAAS9lG,MAC9BQ,KAAKkiC,SAASojE,EAAS9lG,MAAQm6B,EACxB,CACHA,OACA/e,WAAYqa,EAAMra,WAClB2qF,QAAQ,GAEhB,EChGG,MAAMG,WAAqB3xF,EACnBrS,sBACP,OAAOG,EAAS6jG,YACpB,CAeAngG,4BAA4BowB,EAAKuW,EAAWlc,EAAO/d,EAAMuhB,EAAUnF,GAC/D,IAAIxgB,EAAIoF,EACR,MAAM0yF,EAAMz5D,EAAU05D,cACtB,GAAW,MAAPD,EACA,MAAM,IAAIxiG,EAAa,eAAgB,+DAE3C,MAAM0iG,EAAaF,GAA2C,QAAnC93F,EAAKwgB,EAAQy3E,wBAAqC,IAAPj4F,EAAgBA,EAAK,GACrFk4F,EAAaJ,GAA4C,QAApC1yF,EAAKob,EAAQ23E,yBAAsC,IAAP/yF,EAAgBA,EAAK,GACtFgzF,EAAkB,CACpBv7F,OAAQ2jB,EAAQ3jB,OAChB8pB,QAASnG,EAAQmG,QACjB0xE,cAAeL,EACfM,eAAgBJ,EAChBC,kBAAmB,EACnBF,iBAAkB,GAEtB,IAAIJ,GAAa,CACbnvC,WAAYvmC,EAAMumC,WAClB1M,UAAW75B,EAAM65B,WAClB53C,GACE6E,WAAW6e,GACXywE,iBAAiBH,GACjB3rE,YAAY9G,GACZzd,MACT,CAaAtU,YAAYuuB,EAAO/d,GACf1O,QACAvD,KAAKg2D,SAAShmC,GACdhwB,KAAKqmG,QAAUp0F,EACfjS,KAAKwzB,SAAWkF,GAASC,SAASO,MAClCl5B,KAAKynC,eAAiB,CAClB/8B,OAAQ,GACR8pB,QAAS,EACT0xE,cAAe,EACfC,eAAgB,EAChBH,kBAAmB,EACnBF,iBAAkB,EAE1B,CACAxrE,YAAY9G,GAIR,OAHIA,IAAakF,GAASC,SAASK,OAASxF,IAAakF,GAASC,SAASO,QACvEl5B,KAAKwzB,SAAWA,GAEbxzB,IACX,CACAomG,iBAAiB/3E,GAOb,OANsB,MAAlBA,EAAQ3jB,QACW,MAAnB2jB,EAAQmG,SACiB,MAAzBnG,EAAQ63E,eACkB,MAA1B73E,EAAQ83E,iBACRnmG,KAAKynC,eAAiBpZ,GAEnBruB,IACX,CAMAg2D,SAAShmC,GACL,IAAKA,EAAMumC,aAAevmC,EAAM65B,UAC5B,MAAM,IAAI1mD,EAAa,eAAgB,6DAK3C,OAHAnD,KAAKgwB,MAAQA,EACbhwB,KAAKu2D,WAAavmC,EAAMumC,WACxBv2D,KAAK6pD,UAAY75B,EAAM65B,UAChB7pD,IACX,CACAouF,cAAchgE,GACV,MAAMuH,EAAM31B,KAAK8V,eACjB,IAAIwwF,EAAMtmG,KAAKynC,eAAejT,QAAU,GACpCA,EAAUpG,EAAO8gE,QACjBlvF,KAAKwzB,WAAakF,GAASC,SAASK,QACpCstE,EAAa,GAANA,EACP9xE,EAAUpG,EAAO8gE,QAAU9gE,EAAOm4E,cAEtC,MAAMC,EAAUxmG,KAAKynC,eAAey+D,cAC9BO,EAAUzmG,KAAKynC,eAAe0+D,eAEpC,OADAxwE,EAAIQ,YACIn2B,KAAKqmG,SACT,KAAKX,GAAazzF,KAAKy0F,MACnB/wE,EAAIS,OAAOhI,EAAO+gE,OAASsX,EAASjyE,EAAU8xE,GAC9C3wE,EAAIU,OAAOjI,EAAO6gE,QAAUuX,EAAShyE,EAAUx0B,KAAKynC,eAAe/8B,OAAS,EAAI47F,GAChF3wE,EAAIU,OAAOjI,EAAO+gE,OAASsX,EAASjyE,EAAUx0B,KAAKynC,eAAe/8B,OAAS47F,GAC3E,MACJ,KAAKZ,GAAazzF,KAAK00F,QACnBhxE,EAAIS,OAAOhI,EAAO6gE,QAAUuX,EAAShyE,EAAU8xE,GAC/C3wE,EAAIU,OAAOjI,EAAO+gE,OAASsX,EAASjyE,EAAUx0B,KAAKynC,eAAe/8B,OAAS,EAAI47F,GAC/E3wE,EAAIU,OAAOjI,EAAO6gE,QAAUuX,EAAShyE,EAAUx0B,KAAKynC,eAAe/8B,OAAS47F,GAMpF3wE,EAAI/G,SACJ+G,EAAI2f,WACR,CACAv/B,OACI/V,KAAK8V,eACL9V,KAAKsW,cACL,MAAMuzE,EAAY7pF,KAAKu2D,WACjBvL,EAAWhrD,KAAK6pD,UACtB,IAAKggC,IAAc7+B,EACf,MAAM,IAAI7nD,EAAa,SAAU,0BACrC,MAAMilC,EAAQyhD,EAAUxhD,mBAAmBroC,KAAKwzB,SAAU,GACpDyqB,EAAM+M,EAAS3iB,mBAAmBroC,KAAKwzB,SAAU,GACvDxzB,KAAKouF,cAAc,CACfa,QAAS7mD,EAAMzkC,EACfwrF,OAAQlxC,EAAIt6C,EACZurF,QAASrF,EAAU1xD,aAAajvB,OAAS2gF,EAAU1xD,aAAa8R,YAChEmlD,OAAQpkC,EAAS7yB,aAAajvB,OAAS8hD,EAAS7yB,aAAa8R,YAC7Ds8D,aAAc1c,EAAU1xD,aAAa8R,aAE7C,EAEJy7D,GAAazzF,KAAO,CAChBy0F,MAAO,EACPC,QAAS,GCrJN,MAAMC,WAAiBpvC,GACf91D,sBACP,OAAOG,EAAS+kG,QACpB,CACWC,sBACP,OAAO,CACX,CACWC,wBACP,OAAQ,CACZ,CACAvhG,qBAAqByqB,GACjB,OAAO,IAAI42E,GAAS52E,EAAO42E,GAASC,SACxC,CACAthG,uBAAuByqB,GACnB,OAAO,IAAI42E,GAAS52E,EAAO42E,GAASE,WACxC,CAgBArlG,YAAYuuB,EAAO8Q,GAGf,GAFAv9B,MAAMysB,EAAO,QAER8Q,EAAW,CACZ,IAAIimE,EAAa/2E,EAAMumC,WAAWoS,eAAe,GAAGv5C,KAC1B,iBAAf23E,IACPA,EAAaliG,SAASkiG,EAAY,KAEtC,IAAIC,EAAYh3E,EAAM65B,UAAU8e,eAAe,GAAGv5C,KACzB,iBAAd43E,IACPA,EAAYniG,SAASmiG,EAAW,KAKhClmE,EADAr7B,MAAMshG,IAAethG,MAAMuhG,GACfJ,GAASC,SAGTE,EAAaC,EAAYJ,GAASE,WAAaF,GAASC,QAE5E,CACA7mG,KAAK8gC,UAAYA,EACjB9gC,KAAKynC,eAAewuB,IAAM,GAC1Bj2D,KAAKynC,eAAeyuB,IAAM,GAC1Bl2D,KAAKynC,eAAejT,QAAU,GAC9Bx0B,KAAK2X,WACT,CACAg/C,UAAUvoC,GACN,GAA+B,IAA3BA,EAAOwoC,SAAShxD,QAA0C,IAA1BwoB,EAAOyoC,QAAQjxD,OAC/C,MAAM,IAAIzC,EAAa,eAAgB,yBAE3C,MAAMwyB,EAAM31B,KAAK8V,eACXihD,EAAa3oC,EAAO2oC,WACpBH,EAAWxoC,EAAOwoC,SAClBE,EAAY1oC,EAAO0oC,UACnBh2B,EAAY1S,EAAO0S,UACzB,GAAIA,IAAc8lE,GAASC,UAAY/lE,IAAc8lE,GAASE,WAC1D,MAAM,IAAI3jG,EAAa,WAAY,2BAGvC,MAAMqzD,EAAgBx2D,KAAKgwB,MAAMwmC,cACjC,IAAK,IAAI9tD,EAAI,EAAGA,EAAI8tD,EAAc5wD,SAAU8C,EAAG,CAC3C,MAAMu+F,EAAUrwC,EAASJ,EAAc9tD,IAAM1I,KAAKynC,eAAejT,QACjE,GAAI/uB,MAAMwhG,GACN,MAAM,IAAI9jG,EAAa,eAAgB,oCAE3CwyB,EAAIQ,YACJR,EAAIS,OAAO2gC,EAAYkwC,EAAU,EAAInmE,GACrCnL,EAAIU,OAAOygC,EAAWmwC,EAAU,EAAInmE,GACpCnL,EAAI2f,YACJ3f,EAAI/G,QACR,CACA5uB,KAAKsW,aACT,EAEJswF,GAASzvF,UAAY,CACjB3I,OAAQd,EAAK8D,MACbpD,KAAM,GACNC,OAAQ/B,EAAWghC,KACnBh/B,MAAO/B,EAAUkD,QCzFd,MAAMy3F,WAAgBxuE,GACdh3B,sBACP,OAAOG,EAASqlG,OACpB,CAIAzlG,YAAY8W,GACRhV,QACAvD,KAAKuY,IAAMA,EACXvY,KAAKwzB,SAAWkF,GAASC,SAASG,OAClC94B,KAAKqD,KAAO,WAEZrD,KAAKmnG,gBAAkB,EACvBnnG,KAAKonG,mBAAqB,CAC9B,CAEArxF,OACI,MAAM4f,EAAM31B,KAAK8V,eACX6jB,EAAO35B,KAAK45B,oBAClB55B,KAAKsW,cACL,MAAMi5B,EAAgB5V,EAAK8V,mBAE3B,IAAI9rC,EADUg2B,EAAK0O,mBAAmBroC,KAAKwzB,SAAUxzB,KAAKsS,OAC5C3O,EACd,MAAM27B,EAAKj9B,EAAYs3B,GACjBtK,EAAQiQ,EAAKh9B,GAAU4zF,MAAQ,EAC/B50F,EAAW,YAAWg+B,EAAK,QAAU,WACrCkD,EAAYxU,EAAOyU,mBACzB,IAAI4kE,EAAY7kE,EAAUpxB,aAAa,GAAG9P,aAAsBiuC,EAEhE83D,GAAarnG,KAAKmnG,gBAClB,MAAMz8F,EAAS1K,KAAKuY,IAAM8uF,EAC1B,IAAIv+F,EAAI6wB,EAAKoY,iBAAiBpH,MAAQjgC,EAElC5B,GADAymC,EAAgB,EACX/M,EAAUpxB,aAAa,GAAG9P,qBAA8B+tB,EAGxDmT,EAAUpxB,aAAa,GAAG9P,mBAA4B+tB,EAE/D,MAAM0Y,EAAYvF,EAAUpxB,aAAa,GAAG9P,WAC5CqC,GAAK6+B,EAAUpxB,aAAa,GAAG9P,gBAAuBiuC,IAAkB/G,GAAKC,GAAK,KAAO,UACzF,IAAK,IAAI//B,EAAI,EAAGA,EAAI1I,KAAKuY,MAAO7P,EAC5B+mB,EAAM49B,YAAY13B,EAAKhyB,EAAGmF,EAAGi/B,EAAW/nC,KAAKqD,KAAM,CAAE/B,WAAU+tB,MAAOrvB,KAAKonG,qBAC3Et+F,GAAKu+F,CAEb,EClDG,MAAMC,GACEC,mBACP,MAAO,CACHC,SAAU,0BACVC,OAAQ,0BACRC,MAAO,0BACPzoE,GAAI,gCACJ0oE,cAAe,sBAEvB,CAKAlmG,YAAYmmG,EAAe,mCACvB5nG,KAAK6nG,aAAe,GAEpB7nG,KAAK8nG,UAAUF,EACnB,CAEAG,cAAc7nE,GACV,IAAIryB,EACJ,OAA6D,QAArDA,EAAKmgB,EAAOwjC,cAActxB,GAAYrR,iBAA8B,IAAPhhB,EAAgBA,GAAM,CAC/F,CAKAi6F,UAAUF,GACFN,GAAOC,MAAMK,KACbA,EAAeN,GAAOC,MAAMK,IAEhC5nG,KAAK6nG,aAAe,GACpB,MAAMv0F,EAAOs0F,EAAaj/F,MAAM,WAChC,GAAoB,IAAhB2K,EAAK1N,OACL,MAAM,IAAIzC,EAAa,eAAgB,0BAA0BykG,KAErE,IAAK,IAAIl/F,EAAI,EAAGA,EAAI4K,EAAK1N,SAAU8C,EAC/B1I,KAAK6nG,aAAan/F,GAAK1I,KAAK+nG,cAAcz0F,EAAK5K,GAEvD,CAEAs/F,kBAAkBC,GACd,MAAM5/F,EAAI7C,OAAOyiG,GACjB,GAAI5/F,EAAI,GAAKA,EAAIrI,KAAK6nG,aAAajiG,OAC/B,MAAM,IAAIzC,EAAa,eAAgB,uCAAuCnD,KAAK6nG,aAAajiG,UAAUqiG,KAE9G,OAAOjoG,KAAK6nG,aAAax/F,EAAI,EACjC,CAEA6/F,gBAAgBC,EAASF,GACrB,MAAMG,EAAcpoG,KAAKgoG,kBAAkBC,GACrC1/F,EAAI/C,OAAO2iG,GACjB,GAAI5/F,EAAI,EACJ,MAAM,IAAIpF,EAAa,eAAgB,oCAAoCglG,KAE/E,OAAOC,EAAc7/F,CACzB,CAEA8/F,eAAeF,EAASF,GACpB,MAAM94E,EAAYnvB,KAAKkoG,gBAAgBC,EAASF,GAC1C7rF,EAASnX,KAAK4C,MAAMsnB,EAAY,IAChC/tB,EAAQ+tB,EAAY,GAC1B,MAAO,GAAGnB,EAAOs6E,cAAclnG,MAAUgb,GAC7C,ECrEJ,IAAI,GAAwC,SAAU3P,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAmFO,MAAMq7F,GACEC,mBACP,MAAO,CAEHC,QC/FW,eDiGXz0F,GChGM,2CDkGN00F,KCjGQ,2BDmGhB,CA2BAnjG,uBAAuBojG,GAEnB,MAAM34F,EAAQ24F,EAAUp1F,KAAK7D,GAAahC,EAAKqC,KAAKL,KAIpD,OAHAse,EAAOC,iBAAmBje,EAC1Byf,EAAMxB,iBAAmBje,EAAM9L,QAC/BurB,EAAM+I,kBAAoBmwE,EAAUxkG,KAAK,KAClC6L,CACX,CAKAzK,sBAAsBmK,EAAUk5F,GAC5B,OAAO,GAAU5oG,UAAM,OAAQ,GAAQ,YAGvC,GACJ,CACAuF,sBAEI,OADcyoB,EAAOC,iBACR1a,KAAKzE,GAASA,EAAK8B,WACpC,CACWkgB,qCACP,OAAO9C,EAAO8C,uBAClB,CACWA,mCAAwB+D,GAC/B7G,EAAO8C,wBAA0B+D,CACrC,CACWnE,4BACP,OAAO1C,EAAO0C,cAClB,CACWA,0BAAe2oC,GACtBrrC,EAAO0C,eAAiB2oC,CAC5B,CACW5oC,iCACP,OAAOzC,EAAOyC,mBAClB,CACWA,+BAAoBrvB,GAC3B4sB,EAAOyC,oBAAsBrvB,CACjC,CACWsuB,kCACP,OAAO1B,EAAO0B,oBAClB,CACWA,gCAAqBtuB,GAC5B4sB,EAAO0B,qBAAuBtuB,CAClC,CACW8W,wBACP,OAAO8V,EAAO9V,UAClB,CACWA,sBAAW9W,GAClB4sB,EAAO9V,WAAa9W,CACxB,CACW2vB,kCACP,OAAO/C,EAAO+C,oBAClB,CACWA,gCAAqB3vB,GAC5B4sB,EAAO+C,qBAAuB3vB,CAClC,CACW4vB,iCACP,OAAOhD,EAAOgD,mBAClB,CACWA,+BAAoB5vB,GAC3B4sB,EAAOgD,oBAAsB5vB,CACjC,CACWyvB,kCACP,OAAO7C,EAAO6C,oBAClB,CACWA,gCAAqBzvB,GAC5B4sB,EAAO6C,qBAAuBzvB,CAClC,CACWwvB,yBACP,OAAO5C,EAAO4C,WAClB,CACWA,uBAAYxvB,GACnB4sB,EAAO4C,YAAcxvB,CACzB,CACWuvB,wBACP,OAAO3C,EAAO2C,UAClB,CACWA,sBAAWvvB,GAClB4sB,EAAO2C,WAAavvB,CACxB,CACWwxB,qBACP,OAAO5E,EAAO4E,OAClB,CACW1B,2BACP,OAAOlD,EAAOkD,aAClB,CACWQ,qBACP,OAAO1D,EAAO0D,OAClB,CACAnsB,oBAAoBuqB,GAChB,OAAO9B,EAAO6T,aAAa/R,EAC/B,CACAvqB,uBAAuBuqB,GACnB,OAAO9B,EAAO66E,gBAAgB/4E,EAClC,CACAvqB,0BACI,OAAOyoB,EAAO86E,kBAClB,CACAvjG,sBAAsB2oB,GAClB,OAAOF,EAAOW,eAAeT,EACjC,CAEA3oB,qBAAqBpF,EAAK+tB,EAAME,GAC5B,OAAOJ,EAAOwjC,cAAcrxD,EAAK+tB,EAAME,EAC3C,CACA7oB,uBAAuBgpB,GACnB,OAAOP,EAAO8rB,gBAAgBvrB,EAClC,EAEJg6E,GAAKzmG,WAAaA,GAClBymG,GAAKvmG,WAAaA,GAClBumG,GAAK31D,aAAeA,GACpB21D,GAAKrmG,QAAUA,GACfqmG,GAAKpoD,QAAUA,GACfooD,GAAKztC,KAAOA,GACZytC,GAAKloD,KAAOA,GACZkoD,GAAK3/F,YAAcA,EACnB2/F,GAAKt+F,uBAAyBA,EAC9Bs+F,GAAKzoC,cAAgBA,GACrByoC,GAAKjmD,YAAcA,GACnBimD,GAAKr9B,KAAOA,GACZq9B,GAAKjb,SAAWA,GAChBib,GAAK/a,UAAYA,GACjB+a,GAAKja,MAAQA,GACbia,GAAKnmG,IAAMA,GACXmmG,GAAK3W,UAAYA,GACjB2W,GAAKx0F,QAAUA,EACfw0F,GAAKlF,QAAUA,GACfkF,GAAK76F,KAAOA,EACZ66F,GAAK9tC,UAAYA,GACjB8tC,GAAKjjG,SAAWA,EAChBijG,GAAKr+C,eAAiBA,GACtBq+C,GAAKlT,UAAYA,GACjBkT,GAAK94E,MAAQA,EACb84E,GAAKvS,UAAYA,GACjBuS,GAAKjmG,UAAYA,GACjBimG,GAAK/lG,eAAiBA,GACtB+lG,GAAK1D,aAAeA,GACpB0D,GAAKzD,WAAaA,GAClByD,GAAKh9B,aAAeA,GACpBg9B,GAAK7Q,WAAaA,GAClB6Q,GAAK7vE,SAAWA,GAChB6vE,GAAK19B,gBAAkBA,GACvB09B,GAAK3Q,iBAAmBA,GACxB2Q,GAAKltE,MAAQA,GACbktE,GAAK7lG,KAAOA,GACZ6lG,GAAKz8C,SAAWA,GAChBy8C,GAAKptC,aAAeA,GACpBotC,GAAKnrC,SAAWA,GAChBmrC,GAAKppC,YAAcA,GACnBopC,GAAK9Y,OAASA,GACd8Y,GAAKrO,aAAeA,GACpBqO,GAAKp2F,SAAWA,EAChBo2F,GAAK3lG,cAAgBA,GACrB2lG,GAAKnjC,SAAWA,GAChBmjC,GAAKhN,WAAaA,GAClBgN,GAAKn7B,WAAaA,GAClBm7B,GAAK90B,MAAQA,GACb80B,GAAKlwB,eAAiBA,GACtBkwB,GAAK7C,aAAeA,GACpB6C,GAAK9M,UAAYA,GACjB8M,GAAKnrD,cAAgBA,GACrBmrD,GAAKzlG,UAAYA,GACjBylG,GAAKp5B,WAAaA,GAClBo5B,GAAKz3B,UAAYA,GACjBy3B,GAAKxyC,SAAWA,GAChBwyC,GAAK//D,KAAOA,GACZ+/D,GAAKvhC,aAAeA,GACpBuhC,GAAKhgC,OAASA,GACdggC,GAAKrmC,WAAaA,GAClBqmC,GAAK9K,OAASA,GACd8K,GAAKrlG,QAAUA,GACfqlG,GAAK3B,SAAWA,GAChB2B,GAAK/G,SAAWA,GAChB+G,GAAK/wC,OAASA,GACd+wC,GAAK7G,YAAcA,GACnB6G,GAAK9F,aAAeA,GACpB8F,GAAK/8D,cAAgBA,GACrB+8D,GAAK54B,SAAWA,GAChB44B,GAAKjtC,YAAcA,GACnBitC,GAAKl2B,cAAgBA,GACrBk2B,GAAKvF,YAAcA,GACnBuF,GAAKrB,QAAUA,GACfqB,GAAKjB,OAASA,GACdiB,GAAK3lB,OAASA,GACd2lB,GAAKz+B,QAAUA,GACfy+B,GAAKrF,eAAiBA,GACtBqF,GAAK7wC,MAAQA,GACb6wC,GAAKr3B,MAAQA,GAGbq3B,GAAK/5D,4BAA8BA,GACnC+5D,GAAK95D,0BAA4BA,GACjC85D,GAAKvrD,6BAA+BA,GACpCurD,GAAKtrD,2BAA6BA,GAClCsrD,GAAKrrD,YAAcA,GACnBqrD,GAAKprD,gBAAkBA,GACvBorD,GAAKla,cAAgBA,GACrBka,GAAKj8F,WAAaA,EAClBi8F,GAAKh8F,UAAYA,EACjBg8F,GAAKx0E,iBAAmBA,EACxBw0E,GAAKzjC,iBAAmBA,GACxByjC,GAAKxjC,oBAAsBA,GAC3BwjC,GAAKxrD,YAAcA,GACnBwrD,GAAKzrD,sBAAwBA,GAC7ByrD,GAAKtjC,UAAYA,GACjBsjC,GAAK5G,oBAAsBA,GAC3B4G,GAAKvjC,kBAAoBA,GACzBujC,GAAK9wC,UAAYA,GElVV,MAAMsxC,GAAqB,CAC9Bz3D,QAAS,GACTngC,OAAQ,CACJ,IAAK,CACDokB,MAAO,EACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBq7D,EAAG,CACCzzE,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,OAAQ,EACRC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,GACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,GACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,GACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,kBACPC,MAAO,IACPxY,GAAI,kBACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,GACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB/zB,EAAG,CACC2b,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB7zB,EAAG,CACCyb,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBr1B,EAAG,CACCid,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBj0B,EAAG,CACC6b,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB9zB,EAAG,CACC0b,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBl1B,EAAG,CACC8c,MAAO,GACPC,MAAO,IACPwY,MAAO,GACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBn0B,EAAG,CACC+b,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB9Q,EAAG,CACCtH,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBs7D,EAAG,CACC1zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBu7D,EAAG,CACC3zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBw7D,EAAG,CACC5zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBtL,EAAG,CACC9M,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBnP,EAAG,CACCjJ,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBy7D,EAAG,CACC7zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB07D,EAAG,CACC9zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBhhC,EAAG,CACC4oB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB27D,EAAG,CACC/zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB1xB,EAAG,CACCsZ,MAAO,GACPC,MAAO,IACPwY,MAAO,GACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB/Q,EAAG,CACCrH,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB5Q,EAAG,CACCxH,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB47D,EAAG,CACCh0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB67D,EAAG,CACCj0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB3Q,EAAG,CACCzH,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBxxB,EAAG,CACCoZ,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB87D,EAAG,CACCl0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB+7D,EAAG,CACCn0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,KAAM,CACFpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBg8D,EAAG,CACCp0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,OAAQ,EACRxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBlpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBjpC,EAAG,CACC6wB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB1hC,EAAG,CACCspB,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBtnC,EAAG,CACCkvB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBhtC,EAAG,CACC40B,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBplC,EAAG,CACCgtB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBltC,EAAG,CACC80B,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB3kC,EAAG,CACCusB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBjlC,EAAG,CACC6sB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACC7uB,OAAQ,IACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,iBAAkB,IAClBvV,aAAc,KAElBn6B,EAAG,CACC+hB,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBi8D,EAAG,CACCr0E,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBvb,EAAG,CACCmD,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB/oC,EAAG,CACC2wB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBvtC,EAAG,CACCm1B,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBqiC,EAAG,CACCz6C,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBrlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB1sC,EAAG,CACCs0B,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBtlC,EAAG,CACCktB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBjoC,EAAG,CACC6vB,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBvnC,EAAG,CACCmvB,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB+rB,EAAG,CACCnkC,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB5kC,EAAG,CACCwsB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBhqC,EAAG,CACC4xB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB7kC,EAAG,CACCysB,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,iBAAkB,GAClBvV,aAAc,KAElBsiC,EAAG,CACC16C,MAAO,GACPC,MAAO,IACPwY,OAAQ,EACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,MAGtB5+B,WAAY,iBACZkC,WAAY,IACZ44F,YAAa,4BC71BJC,GAAiB,CAC1Bx4D,QAAS,GACTngC,OAAQ,CACJ,IAAK,CACDokB,MAAO,EACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,EACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,EAAK,CACDpY,MAAO,iBACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,kBACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,iBACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBq7D,EAAG,CACCzzE,MAAO,kBACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,GACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,kBACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,iBACPC,MAAO,mBACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB/zB,EAAG,CACC2b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB7zB,EAAG,CACCyb,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBr1B,EAAG,CACCid,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBj0B,EAAG,CACC6b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB9zB,EAAG,CACC0b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBl1B,EAAG,CACC8c,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBn0B,EAAG,CACC+b,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB9Q,EAAG,CACCtH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBs7D,EAAG,CACC1zE,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBu7D,EAAG,CACC3zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBw7D,EAAG,CACC5zE,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBtL,EAAG,CACC9M,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBnP,EAAG,CACCjJ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBy7D,EAAG,CACC7zE,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACC9zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhhC,EAAG,CACC4oB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB27D,EAAG,CACC/zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1xB,EAAG,CACCsZ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB/Q,EAAG,CACCrH,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB5Q,EAAG,CACCxH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB47D,EAAG,CACCh0E,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB67D,EAAG,CACCj0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBxxB,EAAG,CACCoZ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB87D,EAAG,CACCl0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB+7D,EAAG,CACCn0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBg8D,EAAG,CACCp0E,MAAO,IACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,EACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBlpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjpC,EAAG,CACC6wB,OAAQ,GACRC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,MAElB1hC,EAAG,CACCspB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBtnC,EAAG,CACCkvB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhtC,EAAG,CACC40B,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBplC,EAAG,CACCgtB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBltC,EAAG,CACC80B,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3kC,EAAG,CACCusB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACC6sB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACC7uB,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElBn6B,EAAG,CACC+hB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCr0E,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvb,EAAG,CACCmD,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB/oC,EAAG,CACC2wB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBvtC,EAAG,CACCm1B,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBqiC,EAAG,CACCz6C,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBrlC,EAAG,CACCitB,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1sC,EAAG,CACCs0B,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBtlC,EAAG,CACCktB,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBjoC,EAAG,CACC6vB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvnC,EAAG,CACCmvB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB+rB,EAAG,CACCnkC,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5kC,EAAG,CACCwsB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhqC,EAAG,CACC4xB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB7kC,EAAG,CACCysB,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBsiC,EAAG,CACC16C,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,OAGtB5+B,WAAY,cACZkC,WAAY,KACZ44F,YAAa,4BC71BJE,GAAe,CACxB54F,OAAQ,CACJ,EAAK,CACDokB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBq7D,EAAG,CACCzzE,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,OAAQ,EACRC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB/zB,EAAG,CACC2b,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB7zB,EAAG,CACCyb,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBr1B,EAAG,CACCid,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBj0B,EAAG,CACC6b,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB9zB,EAAG,CACC0b,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBl1B,EAAG,CACC8c,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBn0B,EAAG,CACC+b,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB9Q,EAAG,CACCtH,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBs7D,EAAG,CACC1zE,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBu7D,EAAG,CACC3zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBw7D,EAAG,CACC5zE,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBtL,EAAG,CACC9M,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBnP,EAAG,CACCjJ,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBy7D,EAAG,CACC7zE,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB07D,EAAG,CACC9zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhhC,EAAG,CACC4oB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB27D,EAAG,CACC/zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1xB,EAAG,CACCsZ,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/Q,EAAG,CACCrH,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5Q,EAAG,CACCxH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB47D,EAAG,CACCh0E,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB67D,EAAG,CACCj0E,OAAQ,EACRC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,EAClBvV,aAAc,MAElB3Q,EAAG,CACCzH,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElBxxB,EAAG,CACCoZ,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB87D,EAAG,CACCl0E,OAAQ,EACRC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,EAClBvV,aAAc,MAElB+7D,EAAG,CACCn0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFpY,OAAQ,EACRC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,EAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElBg8D,EAAG,CACCp0E,OAAQ,GACRC,MAAO,KACPwY,OAAQ,IACRC,OAAQ,IACRxY,GAAI,IACJytB,iBAAkB,GAClBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBlpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjpC,EAAG,CACC6wB,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB1hC,EAAG,CACCspB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBtnC,EAAG,CACCkvB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhtC,EAAG,CACC40B,MAAO,GACPC,MAAO,mBACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBplC,EAAG,CACCgtB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBltC,EAAG,CACC80B,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3kC,EAAG,CACCusB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBjlC,EAAG,CACC6sB,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElByW,EAAG,CACC7uB,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElBn6B,EAAG,CACC+hB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBi8D,EAAG,CACCr0E,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBvb,EAAG,CACCmD,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/oC,EAAG,CACC2wB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBvtC,EAAG,CACCm1B,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBqiC,EAAG,CACCz6C,MAAO,IACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBrlC,EAAG,CACCitB,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1sC,EAAG,CACCs0B,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBtlC,EAAG,CACCktB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjoC,EAAG,CACC6vB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvnC,EAAG,CACCmvB,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB+rB,EAAG,CACCnkC,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5kC,EAAG,CACCwsB,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElBhqC,EAAG,CACC4xB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB7kC,EAAG,CACCysB,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBsiC,EAAG,CACC16C,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,OAGtB5+B,WAAY,QACZkC,WAAY,KACZ44F,YAAa,4BC51BJG,GAAW,CACpBC,OAAO,EACPt5F,KAAM,OACN2gC,QAAS,GACT44D,YAAa,2BACb99D,MAAM,EACNE,QAAQ,EACRQ,YAAY,EACZD,QAAQ,EACR17B,OAAQ,CACJ,EAAK,CACDokB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,mBACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBq7D,EAAG,CACCzzE,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/zB,EAAG,CACC2b,OAAQ,EACRC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,EAClBvV,aAAc,MAElB7zB,EAAG,CACCyb,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBr1B,EAAG,CACCid,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBj0B,EAAG,CACC6b,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB9zB,EAAG,CACC0b,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBl1B,EAAG,CACC8c,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBn0B,EAAG,CACC+b,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB9Q,EAAG,CACCtH,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBs7D,EAAG,CACC1zE,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBu7D,EAAG,CACC3zE,MAAO,kBACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBw7D,EAAG,CACC5zE,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBtL,EAAG,CACC9M,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBnP,EAAG,CACCjJ,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBy7D,EAAG,CACC7zE,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB07D,EAAG,CACC9zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhhC,EAAG,CACC4oB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB27D,EAAG,CACC/zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1xB,EAAG,CACCsZ,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/Q,EAAG,CACCrH,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5Q,EAAG,CACCxH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB47D,EAAG,CACCh0E,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB67D,EAAG,CACCj0E,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB3Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBxxB,EAAG,CACCoZ,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB87D,EAAG,CACCl0E,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB+7D,EAAG,CACCn0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFpY,MAAO,EACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBg8D,EAAG,CACCp0E,OAAQ,GACRC,MAAO,KACPwY,OAAQ,IACRC,OAAQ,IACRxY,GAAI,IACJytB,iBAAkB,GAClBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBlpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjpC,EAAG,CACC6wB,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB1hC,EAAG,CACCspB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBtnC,EAAG,CACCkvB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhtC,EAAG,CACC40B,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBplC,EAAG,CACCgtB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBltC,EAAG,CACC80B,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3kC,EAAG,CACCusB,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBjlC,EAAG,CACC6sB,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElByW,EAAG,CACC7uB,OAAQ,GACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElBn6B,EAAG,CACC+hB,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBi8D,EAAG,CACCr0E,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBvb,EAAG,CACCmD,MAAO,IACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/oC,EAAG,CACC2wB,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBvtC,EAAG,CACCm1B,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBqiC,EAAG,CACCz6C,MAAO,IACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElBrlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB1sC,EAAG,CACCs0B,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElBtlC,EAAG,CACCktB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjoC,EAAG,CACC6vB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvnC,EAAG,CACCmvB,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB+rB,EAAG,CACCnkC,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5kC,EAAG,CACCwsB,MAAO,EACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElBhqC,EAAG,CACC4xB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB7kC,EAAG,CACCysB,MAAO,GACPC,MAAO,KACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBsiC,EAAG,CACC16C,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,OAGtB5+B,WAAY,aACZkC,WAAY,KACZ44F,YAAa,4BCp2BJM,GAAY,CACrBF,OAAO,EACPt5F,KAAM,QACN2gC,QAAS,GACT44D,YAAa,sBACb99D,MAAM,EACNE,QAAQ,EACRQ,YAAY,EACZD,QAAQ,EACR17B,OAAQ,CACJ,EAAK,CACDokB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,EAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,EACPC,MAAO,EACPwY,MAAO,EACPC,MAAO,EACPxY,GAAI,EACJytB,gBAAiB,EACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,kBACPC,MAAO,kBACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,EACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBq7D,EAAG,CACCzzE,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,kBACPC,MAAO,kBACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,mBACPC,MAAO,iBACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,OAAQ,GACRC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,MAElB/zB,EAAG,CACC2b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB7zB,EAAG,CACCyb,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBr1B,EAAG,CACCid,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBj0B,EAAG,CACC6b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB9zB,EAAG,CACC0b,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBl1B,EAAG,CACC8c,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBn0B,EAAG,CACC+b,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB9Q,EAAG,CACCtH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBs7D,EAAG,CACC1zE,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBu7D,EAAG,CACC3zE,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBw7D,EAAG,CACC5zE,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBtL,EAAG,CACC9M,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBnP,EAAG,CACCjJ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBy7D,EAAG,CACC7zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB07D,EAAG,CACC9zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhhC,EAAG,CACC4oB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB27D,EAAG,CACC/zE,MAAO,GACPC,MAAO,KACPwY,OAAQ,mBACRC,MAAO,KACPxY,GAAI,iBACJytB,gBAAiB,GACjBvV,aAAc,MAElB1xB,EAAG,CACCsZ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB/Q,EAAG,CACCrH,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB5Q,EAAG,CACCxH,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB47D,EAAG,CACCh0E,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB67D,EAAG,CACCj0E,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3Q,EAAG,CACCzH,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBxxB,EAAG,CACCoZ,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB87D,EAAG,CACCl0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB+7D,EAAG,CACCn0E,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,KAAM,CACFpY,OAAQ,GACRC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,GAClBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,IACPC,MAAO,KACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBg8D,EAAG,CACCp0E,MAAO,EACPC,MAAO,KACPwY,OAAQ,IACRC,OAAQ,IACRxY,GAAI,IACJytB,gBAAiB,EACjBvV,aAAc,MAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,IACPwY,MAAO,KACPC,MAAO,kBACPxY,GAAI,mBACJytB,gBAAiB,GACjBvV,aAAc,KAElBlpC,EAAG,CACC8wB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBjpC,EAAG,CACC6wB,MAAO,EACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,EACjBvV,aAAc,MAElB1hC,EAAG,CACCspB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBtnC,EAAG,CACCkvB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBhtC,EAAG,CACC40B,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBplC,EAAG,CACCgtB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBltC,EAAG,CACC80B,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElB3kC,EAAG,CACCusB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBjlC,EAAG,CACC6sB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElByW,EAAG,CACC7uB,OAAQ,IACRC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,iBAAkB,IAClBvV,aAAc,KAElBn6B,EAAG,CACC+hB,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBi8D,EAAG,CACCr0E,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvb,EAAG,CACCmD,MAAO,GACPC,MAAO,KACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB/oC,EAAG,CACC2wB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElBvtC,EAAG,CACCm1B,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElBqiC,EAAG,CACCz6C,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBrlC,EAAG,CACCitB,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,kBACPxY,GAAI,mBACJytB,gBAAiB,GACjBvV,aAAc,MAElB1sC,EAAG,CACCs0B,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElBtlC,EAAG,CACCktB,MAAO,IACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,kBACPxY,GAAI,kBACJytB,gBAAiB,IACjBvV,aAAc,KAElBjoC,EAAG,CACC6vB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,KAElBvnC,EAAG,CACCmvB,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB+rB,EAAG,CACCnkC,MAAO,GACPC,MAAO,IACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB5kC,EAAG,CACCwsB,MAAO,GACPC,MAAO,KACPwY,OAAQ,GACRC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElBhqC,EAAG,CACC4xB,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,MAElB7kC,EAAG,CACCysB,MAAO,GACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,IACPxY,GAAI,KACJytB,gBAAiB,GACjBvV,aAAc,MAElBsiC,EAAG,CACC16C,MAAO,GACPC,MAAO,IACPwY,MAAO,EACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,IACPC,MAAO,IACPwY,OAAQ,IACRC,MAAO,KACPxY,GAAI,KACJytB,gBAAiB,IACjBvV,aAAc,KAElB,IAAK,CACDpY,MAAO,GACPC,MAAO,KACPwY,MAAO,IACPC,MAAO,IACPxY,GAAI,IACJytB,gBAAiB,GACjBvV,aAAc,OAGtB5+B,WAAY,QACZkC,WAAY,KACZ44F,YAAa,4BC/1BV,MAAMO,GAUT7kG,qBAAqBH,EAAKilG,EAAKC,GAC3B,GAAIllG,EAAIQ,OAAS,EAAG,CAChB,MAAM2kG,EAAS,GACf,IAAIC,EACJplG,EAAIq+B,KAAK4mE,GACT,IAAK,IAAI3hG,EAAI,EAAGA,EAAItD,EAAIQ,SAAU8C,EACpB,IAANA,GAAY4hG,EAAGllG,EAAIsD,GAAI8hG,IACvBD,EAAO91F,KAAKrP,EAAIsD,IAEpB8hG,EAAOplG,EAAIsD,GAEf,OAAO6hG,CACX,CAEI,OAAOnlG,CAEf,CAGAG,gBAAgBH,EAAKxE,GACjB,IAAI8H,EAAItD,EAAIQ,OACZ,KAAO8C,KACH,GAAItD,EAAIsD,KAAO9H,EACX,OAAO,EAGf,OAAO,CACX,CAEA2E,wBAAwBklG,GACpB,IAAKA,EACD,MAAM,IAAItnG,EAAa,cAAe,4BAA8BsnG,GAExE,MAAMvqC,EAAStxD,SAASgE,eAAe63F,GACvC,IAAMvqC,IAAUA,EAAOrpD,WACnB,MAAM,IAAI1T,EAAa,0BAA2B,8CAEtD,OAAO+8D,EAAOrpD,WAAW,KAC7B,CAGAtR,iBAAiB8C,EAAGE,GAChB,MAAMmiG,GAAa,IAAIC,MAAOC,UAC9BriG,IAEA1E,EAAIwE,GADY,IAAIsiG,MAAOC,UAAYF,EACtB,KACrB,CAEAnlG,oBAEI,OADY,IAAInC,OACLmB,KACf,EAEJ6lG,GAAI7B,KAAOA,GC1DX,IAAI,GAAwC,SAAU97F,EAASC,EAAYC,EAAGC,GAE1E,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAU5L,GAAS,IAAM6L,EAAKL,EAAUM,KAAK9L,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC1F,SAASwM,EAAS/L,GAAS,IAAM6L,EAAKL,EAAiB,MAAExL,GAAkC,CAAvB,MAAOT,GAAKoM,EAAOpM,EAAI,CAAE,CAC7F,SAASsM,EAAKG,GAJlB,IAAehM,EAIagM,EAAOC,KAAOP,EAAQM,EAAOhM,QAJ1CA,EAIyDgM,EAAOhM,MAJhDA,aAAiBuL,EAAIvL,EAAQ,IAAIuL,GAAE,SAAUG,GAAWA,EAAQ1L,EAAQ,KAIjBkM,KAAKN,EAAWG,EAAW,CAC7GF,GAAML,EAAYA,EAAUW,MAAMd,EAASC,GAAc,KAAKQ,OAClE,GACJ,EAOA,MAAM29F,GAAc,CAChBC,QAAS,4BACTC,SAAU,6BACVC,SAAU,6BACVC,OAAQ,2BACRC,OAAQ,4B,OASZ3C,GAAK4C,eAAiB,CAACz7F,EAAUk5F,IAAqB,QAAU,OAAQ,OAAQ,GAAQ,YACpF,MAAM95F,EAAOpB,EAAKqC,KAAKL,GAEvB,GAAIZ,EAAKiC,UACL,OAEJ,IAAK63F,EAAkB,CAEnB,KAAIl5F,KAAYm7F,IAIZ,MAAM,IAAI1nG,EAAa,cAAe,cAAcuM,qBAHpDk5F,EAAmBiC,GAAYn7F,EAKvC,CACA,IAAI07F,EACJ,GAAgC,iBAArBxC,EAA+B,CACtC,MAAMjpG,QAAe0rG,OAAiCzC,GAEhD0C,EADI9nG,IACyB,YAG/B4nG,OAFuB,IAAhBE,QAAgE,IAA1BA,EAAY57F,GAE5C47F,EAAY57F,GAKZ/P,EAAO+N,IAE5B,MAEI09F,EAAaxC,EAEjB95F,EAAK2B,QAAQ26F,EAAW76F,MACxBzB,EAAK4B,WAAW06F,EAAW56F,QAC/B,ICjEO,WAEH,CACI,MAAM+6F,EAAWxB,IACX,WAAEh7F,EAAU,WAAEkC,EAAU,OAAEE,GAAWo6F,EAC3C79F,EAAKqC,KAAKhB,EAAYw8F,GAGtB,MAAMt+D,EAAe,IACrBzB,GAAcggE,aAAa,CACvBh9F,OAAQO,EACRkC,aACAE,SACA87B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4+D,YAAa,qBAErB,CAEA,CACI,MAAMF,EAAWvB,IACX,WAAEj7F,EAAU,WAAEkC,EAAU,OAAEE,GAAWo6F,EAC3C79F,EAAKqC,KAAKhB,EAAYw8F,GAGtB,MAAMt+D,EAAe,IACrBzB,GAAcggE,aAAa,CACvBh9F,OAAQO,EACRkC,aACAE,SACA87B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4+D,YAAa,qBAErB,CAEA,CACI,MAAMF,EAAWpB,IACX,WAAEp7F,EAAU,WAAEkC,EAAU,OAAEE,GAAWo6F,EAC3C79F,EAAKqC,KAAKhB,EAAYw8F,GAGtB,MAAMt+D,EAAe,IACrBzB,GAAcggE,aAAa,CACvBh9F,OAAQO,EACRkC,aACAE,SACA87B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4+D,YAAa,sBAErB,CAEA,CACI,MAAMF,EAAWzB,IACX,WAAE/6F,EAAU,WAAEkC,EAAU,OAAEE,GAAWo6F,EAC3C79F,EAAKqC,KAAKhB,EAAYw8F,GAGtB,MAAMt+D,EAAe,IACrBzB,GAAcggE,aAAa,CACvBh9F,OAAQO,EACRkC,aACAE,SACA87B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4+D,YAAa,8DAErB,CAEA,CACI,MAAMF,EAAWxC,IACX,WAAEh6F,EAAU,WAAEkC,EAAU,OAAEE,GAAWo6F,EAC3C79F,EAAKqC,KAAKhB,EAAYw8F,GAGtB,MAAMt+D,EAAe,IACrBzB,GAAcggE,aAAa,CACvBh9F,OAAQO,EACRkC,aACAE,SACA87B,eACAH,YAAY,EACZV,MAAM,EACNE,QAAQ,EACRS,kBAAmB,IACnBC,gBAAiB,IACjBH,QAAQ,EACR4+D,YAAa,mDAErB,CACJ,CD5CAC,G,atGlEA","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/web.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/version.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./entry/vexflow-core.ts","webpack://Vex/./src/fonts/textfonts.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Ron B. Yeh\n//\n// A smaller initial bundle that supports dynamic importing of music engraving fonts.\n//\n// vexflow-core.ts is the entry point for output file vexflow-core.js.\n// It does not preload / bundle any music fonts by default.\n// All music fonts will be loaded dynamically via: `Flow.fetchMusicFont(fontName)`\n// Remember to call `Flow.setMusicFont(fontName)` after fetching the font module.\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nimport { globalObject, RuntimeError } from '../src/util';\n// fontModules maps font names => font module paths, which can be loaded at runtime by vexflow-core.js.\n// ADD_MUSIC_FONT\nconst fontModules = {\n Bravura: './vexflow-font-bravura.js',\n Gonville: './vexflow-font-gonville.js',\n Petaluma: './vexflow-font-petaluma.js',\n Leland: './vexflow-font-leland.js',\n Custom: './vexflow-font-custom.js',\n};\n/**\n * @param fontName the name of the music font to load.\n * @param fontModuleOrPath Either a font module object (containing a .data and .metrics properties) or a path to a font module.\n * The font module is assumed to be in the same directory as the vexflow-core.js entry point.\n *\n * This replaces the default empty implementation in flow.ts.\n */\nFlow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () {\n const font = Font.load(fontName);\n // If the font has already been loaded before we do nothing.\n if (font.hasData()) {\n return;\n }\n if (!fontModuleOrPath) {\n // Determine the font module path.\n if (fontName in fontModules) {\n fontModuleOrPath = fontModules[fontName];\n }\n else {\n throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`);\n }\n }\n let fontModule;\n if (typeof fontModuleOrPath === 'string') {\n const module = yield import(/* webpackIgnore: true */ fontModuleOrPath);\n const g = globalObject();\n const VexFlowFont = g['VexFlowFont'];\n if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') {\n // CJS font modules will set a global variable named: VexFlowFont.Bravura | VexFlowFont.Gonville | VexFlowFont.Petaluma | etc.\n fontModule = VexFlowFont[fontName];\n }\n else {\n // ESM font modules will export an object named \"Font\" with properties named \"data\" and \"metrics\".\n // See vexflow-font-bravura.ts for an example.\n fontModule = module.Font;\n }\n }\n else {\n fontModule = fontModuleOrPath;\n }\n font.setData(fontModule.data);\n font.setMetrics(fontModule.metrics);\n});\n// Load the two text fonts that ChordSymbol & Annotation use.\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","generatedOn","RobotoSlabFont","SansFontBold","SansFont","smufl","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","fontModules","Bravura","Gonville","Petaluma","Leland","Custom","fetchMusicFont","fontModule","import","VexFlowFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js b/build/cjs/vexflow-debug-with-tests.js deleted file mode 100644 index 217321b3be..0000000000 --- a/build/cjs/vexflow-debug-with-tests.js +++ /dev/null @@ -1,56534 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["Vex"] = factory(); - else - root["Vex"] = factory(); -})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { -return /******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./src/version.ts": -/*!************************!*\ - !*** ./src/version.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "DATE": () => (/* binding */ DATE), -/* harmony export */ "ID": () => (/* binding */ ID), -/* harmony export */ "VERSION": () => (/* binding */ VERSION) -/* harmony export */ }); -const VERSION = '4.2.0-beta.1'; -const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341'; -const DATE = '2023-01-10T00:21:01.976Z'; - - -/***/ }), - -/***/ "./src/accidental.ts": -/*!***************************!*\ - !*** ./src/accidental.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* binding */ Accidental) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// @author Mohit Cheppudira -// @author Greg Ristow (modifications) - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Accidental.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); -} -/** - * An `Accidental` inherits from `Modifier`, and is formatted within a - * `ModifierContext`. Accidentals are modifiers that can be attached to - * notes. Support is included for both western and microtonal accidentals. - * - * See `tests/accidental_tests.ts` for usage examples. - */ -class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - /** Accidentals category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; - } - /** Arrange accidentals inside a ModifierContext. */ - static format(accidentals, state) { - // If there are no accidentals, no need to format their positions. - if (!accidentals || accidentals.length === 0) - return; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); - const leftShift = state.left_shift + noteheadAccidentalPadding; - const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); - const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals - const accList = []; - let prevNote = undefined; - let shiftL = 0; - // First determine the accidentals' Y positions from the note.keys - for (let i = 0; i < accidentals.length; ++i) { - const acc = accidentals[i]; - const note = acc.getNote(); - const stave = note.getStave(); - const index = acc.checkIndex(); - const props = note.getKeyProps()[index]; - if (note !== prevNote) { - // Iterate through all notes to get the displaced pixels - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL); - } - prevNote = note; - } - if (stave) { - const lineSpace = stave.getSpacingBetweenLines(); - const y = stave.getYForLine(props.line); - const accLine = Math.round((y / lineSpace) * 2) / 2; - accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace }); - } - else { - accList.push({ line: props.line, shift: shiftL, acc }); - } - } - // Sort accidentals by line number. - accList.sort((a, b) => b.line - a.line); - // FIXME: Confusing name. Each object in this array has a property called `line`. - // So if this is a list of lines, you end up with: `line.line` which is very awkward. - const lineList = []; - // amount by which all accidentals must be shifted right or left for - // stem flipping, notehead shifting concerns. - let accShift = 0; - let previousLine = undefined; - // Create an array of unique line numbers (lineList) from accList - for (let i = 0; i < accList.length; i++) { - const acc = accList[i]; - // if this is the first line, or a new line, add a lineList - if (previousLine === undefined || previousLine !== acc.line) { - lineList.push({ - line: acc.line, - flatLine: true, - dblSharpLine: true, - numAcc: 0, - width: 0, - column: 0, - }); - } - // if this accidental is not a flat, the accidental needs 3.0 lines lower - // clearance instead of 2.5 lines for b or bb. - // FIXME: Naming could use work. acc.acc is very awkward - if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') { - lineList[lineList.length - 1].flatLine = false; - } - // if this accidental is not a double sharp, the accidental needs 3.0 lines above - if (acc.acc.type !== '##') { - lineList[lineList.length - 1].dblSharpLine = false; - } - // Track how many accidentals are on this line: - lineList[lineList.length - 1].numAcc++; - // Track the total x_offset needed for this line which will be needed - // for formatting lines w/ multiple accidentals: - // width = accidental width + universal spacing between accidentals - lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing; - // if this accShift is larger, use it to keep first column accidentals in the same line - accShift = acc.shift > accShift ? acc.shift : accShift; - previousLine = acc.line; - } - // ### Place Accidentals in Columns - // - // Default to a classic triangular layout (middle accidental farthest left), - // but follow exceptions as outlined in G. Read's _Music Notation_ and - // Elaine Gould's _Behind Bars_. - // - // Additionally, this implements different vertical collision rules for - // flats (only need 2.5 lines clearance below) and double sharps (only - // need 2.5 lines of clearance above or below). - // - // Classic layouts and exception patterns are found in the 'tables.js' - // in 'Tables.accidentalColumnsTable' - // - // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, - // using as few columns as possible for the verticle structure. - // - // TODO (?): Allow column to be specified for an accidental at run-time? - let totalColumns = 0; - // establish the boundaries for a group of notes with clashing accidentals: - for (let i = 0; i < lineList.length; i++) { - let noFurtherConflicts = false; - const groupStart = i; - let groupEnd = i; - while (groupEnd + 1 < lineList.length && !noFurtherConflicts) { - // if this note conflicts with the next: - if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) { - // include the next note in the group: - groupEnd++; - } - else { - noFurtherConflicts = true; - } - } - // Gets an a line from the `lineList`, relative to the current group - const getGroupLine = (index) => lineList[groupStart + index]; - const getGroupLines = (indexes) => indexes.map(getGroupLine); - const lineDifference = (indexA, indexB) => { - const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); - return a - b; - }; - const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); - // Set columns for the lines in this group: - const groupLength = groupEnd - groupStart + 1; - // Set the accidental column for each line of the group - let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b'; - switch (groupLength) { - case 3: - if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { - endCase = 'second_on_bottom'; - } - break; - case 4: - if (notColliding([0, 2], [1, 3])) { - endCase = 'spaced_out_tetrachord'; - } - break; - case 5: - if (endCase === 'b' && notColliding([1, 3])) { - endCase = 'spaced_out_pentachord'; - if (notColliding([0, 2], [2, 4])) { - endCase = 'very_spaced_out_pentachord'; - } - } - break; - case 6: - if (notColliding([0, 3], [1, 4], [2, 5])) { - endCase = 'spaced_out_hexachord'; - } - if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { - endCase = 'very_spaced_out_hexachord'; - } - break; - default: - break; - } - let groupMember; - let column; - // If the group contains seven members or more, use ascending parallel lines - // of accidentals, using as few columns as possible while avoiding collisions. - if (groupLength >= 7) { - // First, determine how many columns to use: - let patternLength = 2; - let collisionDetected = true; - while (collisionDetected === true) { - collisionDetected = false; - for (let line = 0; line + patternLength < lineList.length; line++) { - if (this.checkCollision(lineList[line], lineList[line + patternLength])) { - collisionDetected = true; - patternLength++; - break; - } - } - } - // Then, assign a column to each line of accidentals - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = ((groupMember - i) % patternLength) + 1; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - else { - // If the group contains fewer than seven members, use the layouts from - // the Tables.accidentalColumnsTable (See: tables.ts). - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - // Increment i to the last note that was set, so that if a lower set of notes - // does not conflict at all with this group, it can have its own classic shape. - i = groupEnd; - } - // ### Convert Columns to x_offsets - // - // This keeps columns aligned, even if they have different accidentals within them - // which sometimes results in a larger x_offset than is an accidental might need - // to preserve the symmetry of the accidental shape. - // - // Neither A.C. Vinci nor G. Read address this, and it typically only happens in - // music with complex chord clusters. - // - // TODO (?): Optionally allow closer compression of accidentals, instead of forcing - // parallel columns. - // track each column's max width, which will be used as initial shift of later columns: - const columnWidths = []; - const columnXOffsets = []; - for (let i = 0; i <= totalColumns; i++) { - columnWidths[i] = 0; - columnXOffsets[i] = 0; - } - columnWidths[0] = accShift + leftShift; - columnXOffsets[0] = accShift + leftShift; - // Fill columnWidths with widest needed x-space; - // this is what keeps the columns parallel. - lineList.forEach((line) => { - if (line.width > columnWidths[line.column]) - columnWidths[line.column] = line.width; - }); - for (let i = 1; i < columnWidths.length; i++) { - // this column's offset = this column's width + previous column's offset - columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; - } - const totalShift = columnXOffsets[columnXOffsets.length - 1]; - // Set the xShift for each accidental according to column offsets: - let accCount = 0; - lineList.forEach((line) => { - let lineWidth = 0; - const lastAccOnLine = accCount + line.numAcc; - // handle all of the accidentals on a given line: - for (accCount; accCount < lastAccOnLine; accCount++) { - const xShift = columnXOffsets[line.column - 1] + lineWidth; - accList[accCount].acc.setXShift(xShift); - // keep track of the width of accidentals we've added so far, so that when - // we loop, we add space for them. - lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing; - L('Line, accCount, shift: ', line.line, accCount, xShift); - } - }); - // update the overall layout with the full width of the accidental shapes: - state.left_shift += totalShift + additionalPadding; - } - /** Helper function to determine whether two lines of accidentals collide vertically */ - static checkCollision(line1, line2) { - let clearance = line2.line - line1.line; - let clearanceRequired = 3; - // But less clearance is required for certain accidentals: b, bb and ##. - if (clearance > 0) { - // then line 2 is on top - clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; - if (line1.dblSharpLine) - clearance -= 0.5; - } - else { - // line 1 is on top - clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; - if (line2.dblSharpLine) - clearance -= 0.5; - } - const collision = Math.abs(clearance) < clearanceRequired; - L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); - return collision; - } - /** - * Use this method to automatically apply accidentals to a set of `voices`. - * The accidentals will be remembered between all the voices provided. - * Optionally, you can also provide an initial `keySignature`. - */ - static applyAccidentals(voices, keySignature) { - const tickPositions = []; - const tickNoteMap = {}; - // Sort the tickables in each voice by their tick position in the voice. - voices.forEach((voice) => { - const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - const tickable = voice.getTickables(); - tickable.forEach((t) => { - if (t.shouldIgnoreTicks()) - return; - const notesAtPosition = tickNoteMap[tickPosition.value()]; - if (!notesAtPosition) { - tickPositions.push(tickPosition.value()); - tickNoteMap[tickPosition.value()] = [t]; - } - else { - notesAtPosition.push(t); - } - tickPosition.add(t.getTicks()); - }); - }); - const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); - // Default key signature is C major. - if (!keySignature) - keySignature = 'C'; - // Get the scale map, which represents the current state of each pitch. - const scaleMapKey = music.createScaleMap(keySignature); - const scaleMap = {}; - tickPositions.forEach((tickPos) => { - const tickables = tickNoteMap[tickPos]; - // Array to store all pitches that modified accidental states - // at this tick position - const modifiedPitches = []; - const processNote = (t) => { - // Only StaveNote implements .addModifier(), which is used below. - if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { - return; - } - // Go through each key and determine if an accidental should be applied. - const staveNote = t; - staveNote.keys.forEach((keyString, keyIndex) => { - const key = music.getNoteParts(keyString.split('/')[0]); - const octave = keyString.split('/')[1]; - // Force a natural for every key without an accidental - const accidentalString = key.accidental || 'n'; - const pitch = key.root + accidentalString; - // Determine if the current pitch has the same accidental - // as the scale state - if (!scaleMap[key.root + octave]) - scaleMap[key.root + octave] = scaleMapKey[key.root]; - const sameAccidental = scaleMap[key.root + octave] === pitch; - // Determine if an identical pitch in the chord already - // modified the accidental state - const previouslyModified = modifiedPitches.indexOf(keyString) > -1; - // Remove accidentals - staveNote.getModifiers().forEach((modifier, index) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { - staveNote.getModifiers().splice(index, 1); - } - }); - // Add the accidental to the StaveNote - if (!sameAccidental || (sameAccidental && previouslyModified)) { - // Modify the scale map so that the root pitch has an - // updated state - scaleMap[key.root + octave] = pitch; - // Create the accidental - const accidental = new Accidental(accidentalString); - // Attach the accidental to the StaveNote - staveNote.addModifier(accidental, keyIndex); - // Add the pitch to list of pitches that modified accidentals - modifiedPitches.push(keyString); - } - }); - // process grace notes - staveNote.getModifiers().forEach((modifier) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { - modifier.getGraceNotes().forEach(processNote); - } - }); - }; - tickables.forEach(processNote); - }); - } - /** - * Create accidental. - * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. - * For example: `#`, `##`, `b`, `n`, etc. - */ - constructor(type) { - super(); - L('New accidental: ', type); - this.type = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.render_options = { - // Font size for glyphs - font_scale: 38, - // Padding between accidental and parentheses on each side - parenLeftPadding: 2, - parenRightPadding: 2, - }; - this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); - // Cautionary accidentals have parentheses around them - this.cautionary = false; - this.reset(); - } - reset() { - const fontScale = this.render_options.font_scale; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); - this.glyph.setOriginX(1.0); - if (this.cautionary) { - this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); - this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); - this.parenLeft.setOriginX(1.0); - this.parenRight.setOriginX(1.0); - } - } - /** Get width in pixels. */ - getWidth() { - if (this.cautionary) { - const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); - const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); - const parenWidth = parenLeft.getMetrics().width + - parenRight.getMetrics().width + - this.render_options.parenLeftPadding + - this.render_options.parenRightPadding; - return this.glyph.getMetrics().width + parenWidth; - } - else { - return this.glyph.getMetrics().width; - } - } - /** Attach this accidental to `note`, which must be a `StaveNote`. */ - setNote(note) { - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); - this.note = note; - // Accidentals attached to grace notes are rendered smaller. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { - this.render_options.font_scale = 25; - this.reset(); - } - return this; - } - /** If called, draws parenthesis around accidental. */ - setAsCautionary() { - this.cautionary = true; - this.render_options.font_scale = 28; - this.reset(); - return this; - } - /** Render accidental onto canvas. */ - draw() { - const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - // Figure out the start `x` and `y` coordinates for note and index. - const start = note.getModifierStartXY(position, index); - let accX = start.x + x_shift; - const accY = start.y + y_shift; - L('Rendering: ', type, accX, accY); - if (!cautionary) { - glyph.render(ctx, accX, accY); - } - else { - const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); - const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); - // Render the accidental in parentheses. - parenRight.render(ctx, accX, accY); - accX -= parenRight.getMetrics().width; - accX -= parenRightPadding; - accX -= this.accidental.parenRightPaddingAdjustment; - glyph.render(ctx, accX, accY); - accX -= glyph.getMetrics().width; - accX -= parenLeftPadding; - parenLeft.render(ctx, accX, accY); - } - } -} -/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ -Accidental.DEBUG = false; - - -/***/ }), - -/***/ "./src/annotation.ts": -/*!***************************!*\ - !*** ./src/annotation.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Annotation": () => (/* binding */ Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), -/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Annotation.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); -} -var AnnotationHorizontalJustify; -(function (AnnotationHorizontalJustify) { - AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); -var AnnotationVerticalJustify; -(function (AnnotationVerticalJustify) { - AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; - AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); -/** - * Annotations are modifiers that can be attached to - * notes. - * - * See `tests/annotation_tests.ts` for usage examples. - */ -class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Annotations category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; - } - // Use the same padding for annotations as note head so the - // words don't run into each other. - static get minAnnotationPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Arrange annotations within a `ModifierContext` */ - static format(annotations, state) { - if (!annotations || annotations.length === 0) - return false; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (let i = 0; i < annotations.length; ++i) { - const annotation = annotations[i]; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); - // Text height is expressed in fractional stave spaces. - const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - let verticalSpaceNeeded = textLines; - const note = annotation.checkAttachedNote(); - const glyphWidth = note.getGlyphProps().getWidth(); - // Get the text width from the font metrics. - const textWidth = textFormatter.getWidthForTextInPx(annotation.text); - if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; - } - else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, textWidth); - } - else { - leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; - rightWidth = Math.max(rightWidth, textWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - const stave = note.getStave(); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - let stemHeight = 0; - let lines = 5; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - if (note.render_options.draw_stem) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - else { - stemHeight = 0; - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { - const stem = note.getStem(); - if (stem && note.getNoteType() === 'n') { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - if (stave) { - lines = stave.getNumLines(); - } - if (annotation.verticalJustification === this.VerticalJustify.TOP) { - let noteLine = note.getLineNumber(true); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - noteLine = lines - (note.leastString() - 0.5); - } - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - noteLine += stemHeight; - } - const curTop = noteLine + state.top_text_line + 0.5; - if (curTop < lines) { - annotation.setTextLine(lines - noteLine); - verticalSpaceNeeded += lines - noteLine; - state.top_text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.top_text_line); - state.top_text_line += verticalSpaceNeeded; - } - } - else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { - let noteLine = lines - note.getLineNumber(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - noteLine = note.greatestString() - 1; - } - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - noteLine += stemHeight; - } - const curBottom = noteLine + state.text_line + 1; - if (curBottom < lines) { - annotation.setTextLine(lines - curBottom); - verticalSpaceNeeded += lines - curBottom; - state.text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.text_line); - state.text_line += verticalSpaceNeeded; - } - } - else { - annotation.setTextLine(state.text_line); - } - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - /** - * Annotations inherit from `Modifier` and is positioned correctly when - * in a `ModifierContext`. - * Create a new `Annotation` with the string `text`. - */ - constructor(text) { - super(); - this.text = text; - this.horizontalJustification = AnnotationHorizontalJustify.CENTER; - // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. - // this is to support legacy application that may expect this. - this.verticalJustification = AnnotationVerticalJustify.TOP; - this.resetFont(); - // The default width is calculated from the text. - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); - } - /** - * Set vertical position of text (above or below stave). - * @param just value in `AnnotationVerticalJustify`. - */ - setVerticalJustification(just) { - this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; - return this; - } - /** - * Get horizontal justification. - */ - getJustification() { - return this.horizontalJustification; - } - /** - * Set horizontal justification. - * @param justification value in `Annotation.Justify`. - */ - setJustification(just) { - this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; - return this; - } - /** Render text beside the note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); - this.setRendered(); - // We're changing context parameters. Save current state. - ctx.save(); - // Apply style might not save context, if this.style is undefined, so we - // still need to save context state just before this, since we will be - // changing ctx parameters below. - this.applyStyle(); - ctx.openGroup('annotation', this.getAttribute('id')); - ctx.setFont(this.textFont); - const text_width = textFormatter.getWidthForTextInPx(this.text); - const text_height = textFormatter.getYForStringInPx(this.text).height; - let x; - let y; - if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - x = start.x - text_width; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { - x = start.x - text_width / 2; - } /* CENTER_STEM */ - else { - x = note.getStemX() - text_width / 2; - } - let stem_ext = {}; - let spacing = 0; - const has_stem = note.hasStem(); - const stave = note.checkStave(); - // The position of the text varies based on whether or not the note - // has a stem. - if (has_stem) { - stem_ext = note.checkStem().getExtents(); - spacing = stave.getSpacingBetweenLines(); - } - if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { - // Use the largest (lowest) Y value - const ys = note.getYs(); - y = ys.reduce((a, b) => (a > b ? a : b)); - y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; - if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); - } - } - else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { - const yt = note.getYForTopText(this.text_line) - 1; - const yb = stave.getYForBottomText(this.text_line); - y = yt + (yb - yt) / 2 + text_height / 2; - } - else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { - const topY = Math.min(...note.getYs()); - y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - // If the stem is above the stave already, go with default line width vs. actual - // since the lines between don't really matter. - spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; - y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); - } - } /* CENTER_STEM */ - else { - const extents = note.getStemExtents(); - y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; - } - L('Rendering annotation: ', this.text, x, y); - ctx.fillText(this.text, x, y); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ -Annotation.DEBUG = false; -Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); -/** Text annotations can be positioned and justified relative to the note. */ -Annotation.HorizontalJustify = AnnotationHorizontalJustify; -Annotation.HorizontalJustifyString = { - left: AnnotationHorizontalJustify.LEFT, - right: AnnotationHorizontalJustify.RIGHT, - center: AnnotationHorizontalJustify.CENTER, - centerStem: AnnotationHorizontalJustify.CENTER_STEM, -}; -Annotation.VerticalJustify = AnnotationVerticalJustify; -Annotation.VerticalJustifyString = { - above: AnnotationVerticalJustify.TOP, - top: AnnotationVerticalJustify.TOP, - below: AnnotationVerticalJustify.BOTTOM, - bottom: AnnotationVerticalJustify.BOTTOM, - center: AnnotationVerticalJustify.CENTER, - centerStem: AnnotationVerticalJustify.CENTER_STEM, -}; - - -/***/ }), - -/***/ "./src/articulation.ts": -/*!*****************************!*\ - !*** ./src/articulation.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Articulation": () => (/* binding */ Articulation) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns. -// MIT License - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Articulation.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); -} -const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; -function roundToNearestHalf(mathFn, value) { - return mathFn(value / 0.5) * 0.5; -} -// This includes both staff and ledger lines -function isWithinLines(line, position) { - return position === ABOVE ? line <= 5 : line >= 1; -} -function getRoundingFunction(line, position) { - if (isWithinLines(line, position)) { - if (position === ABOVE) { - return Math.ceil; - } - else { - return Math.floor; - } - } - else { - return Math.round; - } -} -function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { - // Initially, snap to nearest staff line or space - const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); - const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); - const onStaffLine = snappedLine % 1 === 0; - if (canSnapToStaffSpace && onStaffLine) { - const HALF_STAFF_SPACE = 0.5; - return snappedLine + HALF_STAFF_SPACE * -offsetDirection; - } - else { - return snappedLine; - } -} -// Helper function for checking if a Note object is either a StaveNote or a GraceNote. -const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); -function getTopY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemTipY; - } - else { - return stemBaseY; - } - } - else { - return Math.min(...note.getYs()); - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemTipY; - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -function getBottomY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemBaseY; - } - else { - return stemTipY; - } - } - else { - return Math.max(...note.getYs()); - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return note.checkStave().getYForBottomText(textLine); - } - else { - return stemTipY; - } - } - else { - return note.checkStave().getYForBottomText(textLine); - } - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -/** - * Get the initial offset of the articulation from the y value of the starting position. - * This is required because the top/bottom text positions already have spacing applied to - * provide a "visually pleasant" default position. However the y values provided from - * the stavenote's top/bottom do *not* have any pre-applied spacing. This function - * normalizes this asymmetry. - * @param note - * @param position - * @returns - */ -function getInitialOffset(note, position) { - const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || - (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); - if (isStaveOrGraceNote(note)) { - if (note.hasStem() && isOnStemTip) { - return 0.5; - } - else { - // this amount is larger than the stem-tip offset because we start from - // the center of the notehead - return 1; - } - } - else { - if (note.hasStem() && isOnStemTip) { - return 1; - } - else { - return 0; - } - } -} -/** - * Articulations and Accents are modifiers that can be - * attached to notes. The complete list of articulations is available in - * `tables.ts` under `Vex.Flow.articulationCodes`. - * - * See `tests/articulation_tests.ts` for usage examples. - */ -class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Articulations category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; - } - /** - * FIXME: - * Most of the complex formatting logic (ie: snapping to space) is - * actually done in .render(). But that logic belongs in this method. - * - * Unfortunately, this isn't possible because, by this point, stem lengths - * have not yet been finalized. Finalized stem lengths are required to determine the - * initial position of any stem-side articulation. - * - * This indicates that all objects should have their stave set before being - * formatted. It can't be an optional if you want accurate vertical positioning. - * Consistently positioned articulations that play nice with other modifiers - * won't be possible until we stop relying on render-time formatting. - * - * Ideally, when this function has completed, the vertical articulation positions - * should be ready to render without further adjustment. But the current state - * is far from this ideal. - */ - static format(articulations, state) { - if (!articulations || articulations.length === 0) - return false; - const margin = 0.5; - let maxGlyphWidth = 0; - const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); - articulations.forEach((articulation) => { - const note = articulation.checkAttachedNote(); - maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); - let lines = 5; - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - let stemHeight = 0; - // Decide if we need to consider beam direction in placement. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - const stave = note.getStave(); - if (stave) { - lines = stave.getNumLines(); - } - if (articulation.getPosition() === ABOVE) { - let noteLine = note.getLineNumber(true); - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.top_text_line, ABOVE); - const curTop = noteLine + state.top_text_line + 0.5; - // If articulation must be above stave, add lines between note and stave top - if (!articulation.articulation.between_lines && curTop < lines) { - increment += lines - curTop; - } - articulation.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else if (articulation.getPosition() === BELOW) { - let noteLine = Math.max(lines - note.getLineNumber(), 0); - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.text_line, BELOW); - const curBottom = noteLine + state.text_line + 0.5; - // if articulation must be below stave, add lines from note to stave bottom - if (!articulation.articulation.between_lines && curBottom < lines) { - increment += lines - curBottom; - } - articulation.setTextLine(state.text_line); - state.text_line += increment; - } - }); - const width = articulations - .map((articulation) => articulation.getWidth()) - .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); - const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); - state.left_shift += overlap / 2; - state.right_shift += overlap / 2; - return true; - } - static easyScoreHook({ articulations }, note, builder) { - if (!articulations) - return; - const articNameToCode = { - staccato: 'a.', - tenuto: 'a-', - accent: 'a>', - }; - articulations - .split(',') - .map((articString) => articString.trim().split('.')) - .map(([name, position]) => { - const artic = { type: articNameToCode[name] }; - if (position) - artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; - return builder.getFactory().Articulation(artic); - }) - .map((artic) => note.addModifier(artic, 0)); - } - /** - * Create a new articulation. - * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. - * - * Notes (by default): - * - Glyph codes ending with 'Above' will be positioned ABOVE - * - Glyph codes ending with 'Below' will be positioned BELOW - */ - constructor(type) { - super(); - this.type = type; - this.position = ABOVE; - this.render_options = { - font_scale: 38, - }; - this.reset(); - } - reset() { - this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); - // Use type as glyph code, if not defined as articulation code - if (!this.articulation) { - this.articulation = { code: this.type, between_lines: false }; - if (this.type.endsWith('Above')) - this.position = ABOVE; - if (this.type.endsWith('Below')) - this.position = BELOW; - } - const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); - (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); - this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); - } - /** Set if articulation should be rendered between lines. */ - setBetweenLines(betweenLines = true) { - this.articulation.between_lines = betweenLines; - return this; - } - /** Render articulation in position next to note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const index = this.checkIndex(); - const { position, glyph, text_line: textLine } = this; - const canSitBetweenLines = this.articulation.between_lines; - const stave = note.checkStave(); - const staffSpace = stave.getSpacingBetweenLines(); - const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); - // Articulations are centered over/under the note head. - const { x } = note.getModifierStartXY(position, index); - const shouldSitOutsideStaff = !canSitBetweenLines || isTab; - const initialOffset = getInitialOffset(note, position); - const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); - let y = { - [ABOVE]: () => { - glyph.setOrigin(0.5, 1); - const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; - }, - [BELOW]: () => { - glyph.setOrigin(0.5, 0); - const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; - }, - }[position](); - if (!isTab) { - const offsetDirection = position === ABOVE ? -1 : +1; - const noteLine = note.getKeyProps()[index].line; - const distanceFromNote = (note.getYs()[index] - y) / staffSpace; - const articLine = distanceFromNote + Number(noteLine); - const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); - if (isWithinLines(snappedLine, position)) - glyph.setOrigin(0.5, 0.5); - y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; - } - L(`Rendering articulation at (x: ${x}, y: ${y})`); - glyph.render(ctx, x, y); - } -} -/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ -Articulation.DEBUG = false; -Articulation.INITIAL_OFFSET = -0.5; - - -/***/ }), - -/***/ "./src/barnote.ts": -/*!************************!*\ - !*** ./src/barnote.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BarNote": () => (/* binding */ BarNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (BarNote.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); -} -/** - * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can - * be added to a voice and rendered in the middle of a stave. Since it has no - * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. - * - * See `tests/barnote_tests.ts` for usage examples. - */ -class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; - } - constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { - super({ duration: 'b' }); - this.metrics = { - widths: {}, - }; - const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; - this.metrics.widths = { - [TYPE.SINGLE]: 8, - [TYPE.DOUBLE]: 12, - [TYPE.END]: 15, - [TYPE.REPEAT_BEGIN]: 14, - [TYPE.REPEAT_END]: 14, - [TYPE.REPEAT_BOTH]: 18, - [TYPE.NONE]: 0, - }; - // Tell the formatter that bar notes have no duration. - this.ignore_ticks = true; - this.setType(type); - } - /** Get the type of bar note.*/ - getType() { - return this.type; - } - /** Set the type of bar note. */ - setType(type) { - this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; - // Set width to width of relevant `Barline`. - this.setWidth(this.metrics.widths[this.type]); - return this; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - /** Overridden to ignore. */ - preFormat() { - this.preFormatted = true; - return this; - } - /** Render note to stave. */ - draw() { - const ctx = this.checkContext(); - L('Rendering bar line at: ', this.getAbsoluteX()); - this.applyStyle(ctx); - const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type); - barline.setX(this.getAbsoluteX()); - barline.draw(this.checkStave()); - this.restoreStyle(ctx); - this.setRendered(); - } -} -/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ -BarNote.DEBUG = false; - - -/***/ }), - -/***/ "./src/beam.ts": -/*!*********************!*\ - !*** ./src/beam.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), -/* harmony export */ "Beam": () => (/* binding */ Beam) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -function calculateStemDirection(notes) { - let lineSum = 0; - notes.forEach((note) => { - if (note.keyProps) { - note.keyProps.forEach((keyProp) => { - lineSum += keyProp.line - 3; - }); - } - }); - if (lineSum >= 0) { - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - } - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; -} -function getStemSlope(firstNote, lastNote) { - const firstStemTipY = firstNote.getStemExtents().topY; - const firstStemX = firstNote.getStemX(); - const lastStemTipY = lastNote.getStemExtents().topY; - const lastStemX = lastNote.getStemX(); - return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); -} -const BEAM_LEFT = 'L'; -const BEAM_RIGHT = 'R'; -const BEAM_BOTH = 'B'; -/** `Beams` span over a set of `StemmableNotes`. */ -class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; - } - /** Get the direction of the beam */ - getStemDirection() { - return this.stem_direction; - } - /** - * Get the default beam groups for a provided time signature. - * Attempt to guess if the time signature is not found in table. - * Currently this is fairly naive. - */ - static getDefaultBeamGroups(time_sig) { - if (!time_sig || time_sig === 'c') { - time_sig = '4/4'; - } - const defaults = { - '1/2': ['1/2'], - '2/2': ['1/2'], - '3/2': ['1/2'], - '4/2': ['1/2'], - '1/4': ['1/4'], - '2/4': ['1/4'], - '3/4': ['1/4'], - '4/4': ['1/4'], - '1/8': ['1/8'], - '2/8': ['2/8'], - '3/8': ['3/8'], - '4/8': ['2/8'], - '1/16': ['1/16'], - '2/16': ['2/16'], - '3/16': ['3/16'], - '4/16': ['2/16'], - }; - const groups = defaults[time_sig]; - if (groups === undefined) { - // If no beam groups found, naively determine - // the beam groupings from the time signature - const beatTotal = parseInt(time_sig.split('/')[0], 10); - const beatValue = parseInt(time_sig.split('/')[1], 10); - const tripleMeter = beatTotal % 3 === 0; - if (tripleMeter) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; - } - else if (beatValue > 4) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; - } - else if (beatValue <= 4) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; - } - } - else { - return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); - } - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; - } - /** - * A helper function to automatically build basic beams for a voice. For more - * complex auto-beaming use `Beam.generateBeams()`. - * @param voice the voice to generate the beams for - * @param stem_direction a stem direction to apply to the entire voice - * @param groups an array of `Fraction` representing beat groupings for the beam - */ - static applyAndGetBeams(voice, stem_direction, groups) { - return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); - } - /** - * A helper function to autimatically build beams for a voice with - * configuration options. - * - * Example configuration object: - * - * ``` - * config = { - * groups: [new Vex.Flow.Fraction(2, 8)], - * stem_direction: -1, - * beam_rests: true, - * beam_middle_only: true, - * show_stemlets: false - * }; - * ``` - * @param notes an array of notes to create the beams for - * @param config the configuration object - * @param config.stem_direction set to apply the same direction to all notes - * @param config.beam_rests set to `true` to include rests in the beams - * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat - * @param config.show_stemlets set to `true` to draw stemlets for rests - * @param config.maintain_stem_directions set to `true` to not apply new stem directions - * @param config.groups array of `Fractions` that represent the beat structure to beam the notes - * - */ - static generateBeams(notes, config = {}) { - if (!config.groups || !config.groups.length) { - config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; - } - // Convert beam groups to tick amounts - const tickGroups = config.groups.map((group) => { - if (!group.multiply) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); - } - return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); - }); - const unprocessedNotes = notes; - let currentTickGroup = 0; - let noteGroups = []; - let currentGroup = []; - function getTotalTicks(vf_notes) { - return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); - } - function nextTickGroup() { - if (tickGroups.length - 1 > currentTickGroup) { - currentTickGroup += 1; - } - else { - currentTickGroup = 0; - } - } - function createGroups() { - let nextGroup = []; - // number of ticks in current group - let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - unprocessedNotes.forEach((unprocessedNote) => { - nextGroup = []; - if (unprocessedNote.shouldIgnoreTicks()) { - noteGroups.push(currentGroup); - currentGroup = nextGroup; - return; // Ignore untickables (like bar notes) - } - currentGroup.push(unprocessedNote); - const ticksPerGroup = tickGroups[currentTickGroup].clone(); - const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); - // Double the amount of ticks in a group, if it's an unbeamable tuplet - const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; - if (unbeamable && unprocessedNote.getTuplet()) { - ticksPerGroup.numerator *= 2; - } - // If the note that was just added overflows the group tick total - if (totalTicks.greaterThan(ticksPerGroup)) { - // If the overflow note can be beamed, start the next group - // with it. Unbeamable notes leave the group overflowed. - if (!unbeamable) { - const note = currentGroup.pop(); - if (note) - nextGroup.push(note); - } - noteGroups.push(currentGroup); - // We have overflown, so we're going to next tick group. As we might have - // overflown by more than 1 group, we need to go forward as many times as - // needed, decreasing currentGroupTotalTicks by as many ticks as there are - // in current groups as we go forward. - do { - currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); - nextTickGroup(); - } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); - currentGroup = nextGroup; - } - else if (totalTicks.equals(ticksPerGroup)) { - noteGroups.push(currentGroup); - currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - currentGroup = nextGroup; - nextTickGroup(); - } - }); - // Adds any remainder notes beam - if (currentGroup.length > 0) { - noteGroups.push(currentGroup); - } - } - function getBeamGroups() { - return noteGroups.filter((group) => { - if (group.length > 1) { - let beamable = true; - group.forEach((note) => { - if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { - beamable = false; - } - }); - return beamable; - } - return false; - }); - } - // Splits up groups by Rest - function sanitizeGroups() { - const sanitizedGroups = []; - noteGroups.forEach((group) => { - let tempGroup = []; - group.forEach((note, index, group) => { - const isFirstOrLast = index === 0 || index === group.length - 1; - const prevNote = group[index - 1]; - const breaksOnEachRest = !config.beam_rests && note.isRest(); - const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; - let breakOnStemChange = false; - if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { - const prevDirection = prevNote.getStemDirection(); - const currentDirection = note.getStemDirection(); - breakOnStemChange = currentDirection !== prevDirection; - } - const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; - // Determine if the group should be broken at this note - const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; - if (shouldBreak) { - // Add current group - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - // Start a new group. Include the current note if the group - // was broken up by stem direction, as that note needs to start - // the next group of notes - tempGroup = breakOnStemChange ? [note] : []; - } - else { - // Add note to group - tempGroup.push(note); - } - }); - // If there is a remaining group, add it as well - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - }); - noteGroups = sanitizedGroups; - } - function formatStems() { - noteGroups.forEach((group) => { - let stemDirection; - if (config.maintain_stem_directions) { - const note = findFirstNote(group); - stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - } - else { - if (config.stem_direction) { - stemDirection = config.stem_direction; - } - else { - stemDirection = calculateStemDirection(group); - } - } - applyStemDirection(group, stemDirection); - }); - } - function findFirstNote(group) { - for (let i = 0; i < group.length; i++) { - const note = group[i]; - if (!note.isRest()) { - return note; - } - } - return false; - } - function applyStemDirection(group, direction) { - group.forEach((note) => { - note.setStemDirection(direction); - }); - } - // Get all of the tuplets in all of the note groups - function getTuplets() { - const uniqueTuplets = []; - // Go through all of the note groups and inspect for tuplets - noteGroups.forEach((group) => { - let tuplet; - group.forEach((note) => { - const noteTuplet = note.getTuplet(); - if (noteTuplet && tuplet !== noteTuplet) { - tuplet = noteTuplet; - uniqueTuplets.push(tuplet); - } - }); - }); - return uniqueTuplets; - } - // Using closures to store the variables throughout the various functions - // IMO Keeps it this process lot cleaner - but not super consistent with - // the rest of the API's style - Silverwolf90 (Cyril) - createGroups(); - sanitizeGroups(); - formatStems(); - // Get the notes to be beamed - const beamedNoteGroups = getBeamGroups(); - // Get the tuplets in order to format them accurately - const allTuplets = getTuplets(); - // Create a Vex.Flow.Beam from each group of notes to be beamed - const beams = []; - beamedNoteGroups.forEach((group) => { - const beam = new Beam(group); - if (config.show_stemlets) { - beam.render_options.show_stemlets = true; - } - if (config.secondary_breaks) { - beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); - } - if (config.flat_beams === true) { - beam.render_options.flat_beams = true; - beam.render_options.flat_beam_offset = config.flat_beam_offset; - } - beams.push(beam); - }); - // Reformat tuplets - allTuplets.forEach((tuplet) => { - // Set the tuplet location based on the stem direction - const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; - tuplet.setTupletLocation(direction); - // If any of the notes in the tuplet are not beamed, draw a bracket. - let bracketed = false; - for (let i = 0; i < tuplet.notes.length; i++) { - const note = tuplet.notes[i]; - if (!note.hasBeam()) { - bracketed = true; - break; - } - } - tuplet.setBracketed(bracketed); - }); - return beams; - } - constructor(notes, auto_stem = false) { - super(); - this.slope = 0; - this.y_shift = 0; - /** - * Overrides to default beam directions for secondary-level beams that do not - * connect to any other note. See further explanation at - * `setPartialBeamSideAt` - */ - this.forcedPartialDirections = {}; - if (!notes || notes.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); - } - if (notes.length === 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); - } - // Validate beam line, direction and ticks. - this.ticks = notes[0].getIntrinsicTicks(); - if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); - } - let i; // shared iterator - let note; - this.stem_direction = notes[0].getStemDirection(); - let stem_direction = this.stem_direction; - // Figure out optimal stem direction based on given notes - if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { - stem_direction = calculateStemDirection(notes); - } - else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { - // Auto Stem TabNotes - const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); - stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - } - // Apply stem directions and attach beam to notes - for (i = 0; i < notes.length; ++i) { - note = notes[i]; - if (auto_stem) { - note.setStemDirection(stem_direction); - this.stem_direction = stem_direction; - } - note.setBeam(this); - } - this.postFormatted = false; - this.notes = notes; - this.beam_count = this.getBeamCount(); - this.break_on_indices = []; - this.render_options = { - beam_width: 5, - max_slope: 0.25, - min_slope: -0.25, - slope_iterations: 20, - slope_cost: 100, - show_stemlets: false, - stemlet_extension: 7, - partial_beam_length: 10, - flat_beams: false, - min_flat_beam_offset: 15, - }; - } - /** Get the notes in this beam. */ - getNotes() { - return this.notes; - } - /** Get the max number of beams in the set of notes. */ - getBeamCount() { - const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); - const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); - return maxBeamCount; - } - /** Set which note `indices` to break the secondary beam at. */ - breakSecondaryAt(indices) { - this.break_on_indices = indices; - return this; - } - /** - * Forces the direction of a partial beam (a secondary-level beam that exists - * on one note only of the beam group). This is useful in rhythms such as 6/8 - * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the - * first sixteenth note can help imply whether the rhythm is to be felt as - * three groups of eighth notes (typical) or as two groups of three-sixteenths - * (less common): - * ``` - * ┌───┬──┬──┐ ┌──┬──┬──┐ - * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ - * │ │ │ │ │ │ │ │ - * ``` - */ - setPartialBeamSideAt(noteIndex, side) { - this.forcedPartialDirections[noteIndex] = side; - return this; - } - /** - * Restore the default direction of a partial beam (a secondary-level beam - * that does not connect to any other notes). - */ - unsetPartialBeamSideAt(noteIndex) { - delete this.forcedPartialDirections[noteIndex]; - return this; - } - /** Return the y coordinate for linear function. */ - getSlopeY(x, first_x_px, first_y_px, slope) { - return first_y_px + (x - first_x_px) * slope; - } - /** Calculate the best possible slope for the provided notes. */ - calculateSlope() { - const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; - const firstNote = notes[0]; - const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); - const increment = (max_slope - min_slope) / slope_iterations; - let minCost = Number.MAX_VALUE; - let bestSlope = 0; - let yShift = 0; - // iterate through slope values to find best weighted fit - for (let slope = min_slope; slope <= max_slope; slope += increment) { - let totalStemExtension = 0; - let yShiftTemp = 0; - // iterate through notes, calculating y shift and stem extension - for (let i = 1; i < notes.length; ++i) { - const note = notes[i]; - if (note.hasStem() || note.isRest()) { - const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; - const stemTipY = note.getStemExtents().topY; - // beam needs to be shifted up to accommodate note - if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { - const diff = Math.abs(stemTipY - adjustedStemTipY); - yShiftTemp += diff * -stemDirection; - totalStemExtension += diff * i; - } - else { - // beam overshoots note, account for the difference - totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; - } - } - } - // most engraving books suggest aiming for a slope about half the angle of the - // difference between the first and last notes' stem length; - const idealSlope = initialSlope / 2; - const distanceFromIdeal = Math.abs(idealSlope - slope); - // This tries to align most beams to something closer to the idealSlope, but - // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 - const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); - // update state when a more ideal slope is found - if (cost < minCost) { - minCost = cost; - bestSlope = slope; - yShift = yShiftTemp; - } - } - this.slope = bestSlope; - this.y_shift = yShift; - } - /** Calculate a slope and y-shift for flat beams. */ - calculateFlatSlope() { - const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; - // If a flat beam offset has not yet been supplied or calculated, - // generate one based on the notes in this particular note group - let total = 0; - let extremeY = 0; // Store the highest or lowest note here - let extremeBeamCount = 0; // The beam count of the extreme note - let currentExtreme = 0; - for (let i = 0; i < notes.length; i++) { - // Total up all of the offsets so we can average them out later - const note = notes[i]; - const stemTipY = note.getStemExtents().topY; - total += stemTipY; - // Store the highest (stems-up) or lowest (stems-down) note so the - // offset can be adjusted in case the average isn't enough - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { - currentExtreme = stemTipY; - extremeY = Math.max(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { - currentExtreme = stemTipY; - extremeY = Math.min(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - } - // Average the offsets to try and come up with a reasonable one that - // works for all of the notes in the beam group. - let offset = total / notes.length; - // In case the average isn't long enough, add or subtract some more - // based on the highest or lowest note (again, based on the stem - // direction). This also takes into account the added height due to - // the width of the beams. - const beamWidth = beam_width * 1.5; - const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; - const newOffset = extremeY + extremeTest * -stem_direction; - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { - offset = extremeY + extremeTest; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { - offset = extremeY - extremeTest; - } - if (!flat_beam_offset) { - // Set the offset for the group based on the calculations above. - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - // for flat beams, the slope and y_shift are simply 0 - this.slope = 0; - this.y_shift = 0; - } - /** Return the Beam y offset. */ - getBeamYToDraw() { - const firstNote = this.notes[0]; - const firstStemTipY = firstNote.getStemExtents().topY; - let beamY = firstStemTipY; - // For flat beams, set the first and last Y to the offset, rather than - // using the note's stem extents. - if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { - beamY = this.render_options.flat_beam_offset; - } - return beamY; - } - /** - * Create new stems for the notes in the beam, so that each stem - * extends into the beams. - */ - applyStemExtensions() { - const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; - const firstNote = notes[0]; - const firstStemTipY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const stem = note.getStem(); - if (stem) { - const stemX = note.getStemX(); - const { topY: stemTipY } = note.getStemExtents(); - const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; - const preBeamExtension = stem.getExtension(); - const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; - // Determine necessary extension for cross-stave notes in the beam group - let crossStemExtension = 0; - if (note.getStemDirection() !== this.stem_direction) { - const beamCount = note.getGlyphProps().beam_count; - crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; - /* This will be required if the partial beams are moved to the note side. - if (i > 0 && note.getGlyph().beam_count > 1) { - const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; - const beamDiff = Math.abs(prevBeamCount - beamCount); - if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); - } - */ - } - stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); - stem.adjustHeightForBeam(); - if (note.isRest() && show_stemlets) { - const beamWidth = beam_width; - const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; - stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); - } - } - } - } - /** Return upper level beam direction. */ - lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { - if (duration === '4') { - return BEAM_LEFT; - } - const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; - if (forcedBeamDirection) - return forcedBeamDirection; - const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; - const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_BOTH; - } - else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { - return BEAM_LEFT; - } - else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_RIGHT; - } - return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); - } - /** Get the x coordinates for the beam lines of specific `duration`. */ - getBeamLines(duration) { - const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); - let beam_started = false; - const beam_lines = []; - let current_beam = undefined; - const partial_beam_length = this.render_options.partial_beam_length; - let previous_should_break = false; - let tick_tally = 0; - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - // See if we need to break secondary beams on this note. - const ticks = note.getTicks().value(); - tick_tally += ticks; - let should_break = false; - // 8th note beams are always drawn. - if (parseInt(duration, 10) >= 8) { - // First, check to see if any indices were set up through breakSecondaryAt() - should_break = this.break_on_indices.indexOf(i) !== -1; - // If the secondary breaks were auto-configured in the render options, - // handle that as well. - if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { - tick_tally = 0; - should_break = true; - } - } - const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; - const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; - // Check to see if the next note in the group will get a beam at this - // level. This will help to inform the partial beam logic below. - const prev_note = this.notes[i - 1]; - const next_note = this.notes[i + 1]; - const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; - const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; - const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; - // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; - if (note_gets_beam) { - // This note gets a beam at the current level - if (beam_started) { - // We're currently in the middle of a beam. Just continue it on to - // the stem X of the current note. - current_beam = beam_lines[beam_lines.length - 1]; - current_beam.end = stem_x; - // If a secondary beam break is set up, end the beam right now. - if (should_break) { - beam_started = false; - if (next_note && !next_note_gets_beam && current_beam.end === undefined) { - // This note gets a beam,.but the next one does not. This means - // we need a partial pointing right. - current_beam.end = current_beam.start - partial_beam_length; - } - } - } - else { - // No beam started yet. Start a new one. - current_beam = { start: stem_x, end: undefined }; - beam_started = true; - if (beam_alone) { - // previous and next beam exists and does not get a beam but current gets it. - const prev_tick = prev_note.getIntrinsicTicks(); - const next_tick = next_note.getIntrinsicTicks(); - const tick = note.getIntrinsicTicks(); - const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); - if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { - current_beam.end = current_beam.start - partial_beam_length; - } - else { - current_beam.end = current_beam.start + partial_beam_length; - } - } - else if (!next_note_gets_beam) { - // The next note doesn't get a beam. Draw a partial. - if ((previous_should_break || i === 0) && next_note) { - // This is the first note (but not the last one), or it is - // following a secondary break. Draw a partial to the right. - current_beam.end = current_beam.start + partial_beam_length; - } - else { - // By default, draw a partial to the left. - current_beam.end = current_beam.start - partial_beam_length; - } - } - else if (should_break) { - // This note should have a secondary break after it. Even though - // we just started a beam, it needs to end immediately. - current_beam.end = current_beam.start - partial_beam_length; - beam_started = false; - } - beam_lines.push(current_beam); - } - } - else { - // The current note does not get a beam. - beam_started = false; - } - // Store the secondary break flag to inform the partial beam logic in - // the next iteration of the loop. - previous_should_break = should_break; - } - // Add a partial beam pointing left if this is the last note in the group - const last_beam = beam_lines[beam_lines.length - 1]; - if (last_beam && last_beam.end === undefined) { - last_beam.end = last_beam.start - partial_beam_length; - } - return beam_lines; - } - /** Render the stems for each note. */ - drawStems(ctx) { - this.notes.forEach((note) => { - const stem = note.getStem(); - if (stem) { - const stem_x = note.getStemX(); - stem.setNoteHeadXBounds(stem_x, stem_x); - stem.setContext(ctx).draw(); - } - }, this); - } - // Render the beam lines - drawBeamLines(ctx) { - const valid_beam_durations = ['4', '8', '16', '32', '64']; - const firstNote = this.notes[0]; - let beamY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - const beamThickness = this.render_options.beam_width * this.stem_direction; - // Draw the beams. - for (let i = 0; i < valid_beam_durations.length; ++i) { - const duration = valid_beam_durations[i]; - const beamLines = this.getBeamLines(duration); - for (let j = 0; j < beamLines.length; ++j) { - const beam_line = beamLines[j]; - const startBeamX = beam_line.start; - const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); - const lastBeamX = beam_line.end; - if (lastBeamX) { - const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); - ctx.beginPath(); - ctx.moveTo(startBeamX, startBeamY); - ctx.lineTo(startBeamX, startBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY); - ctx.closePath(); - ctx.fill(); - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); - } - } - beamY += beamThickness * 1.5; - } - } - /** Pre-format the beam. */ - preFormat() { - return this; - } - /** - * Post-format the beam. This can only be called after - * the notes in the beam have both `x` and `y` values. ie: they've - * been formatted and have staves. - */ - postFormat() { - if (this.postFormatted) - return; - // Calculate a smart slope if we're not forcing the beams to be flat. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { - this.calculateFlatSlope(); - } - else { - this.calculateSlope(); - } - this.applyStemExtensions(); - this.postFormatted = true; - } - /** Render the beam to the canvas context */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - if (this.unbeamable) - return; - if (!this.postFormatted) { - this.postFormat(); - } - this.drawStems(ctx); - this.applyStyle(); - ctx.openGroup('beam', this.getAttribute('id')); - this.drawBeamLines(ctx); - ctx.closeGroup(); - this.restoreStyle(); - } -} - - -/***/ }), - -/***/ "./src/bend.ts": -/*!*********************!*\ - !*** ./src/bend.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Bend": () => (/* binding */ Bend) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -/** Bend implements tablature bends. */ -class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; - } - static get UP() { - return 0; - } - static get DOWN() { - return 1; - } - // Arrange bends in `ModifierContext` - static format(bends, state) { - if (!bends || bends.length === 0) - return false; - let last_width = 0; - // Format Bends - for (let i = 0; i < bends.length; ++i) { - const bend = bends[i]; - const note = bend.checkAttachedNote(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { - const stringPos = note.leastString() - 1; - if (state.top_text_line < stringPos) { - state.top_text_line = stringPos; - } - } - bend.setXShift(last_width); - last_width = bend.getWidth(); - bend.setTextLine(state.top_text_line); - } - state.right_shift += last_width; - state.top_text_line += 1; - return true; - } - /** - * Example of a phrase: - * ``` - * [{ - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "whole" - * width: 8; - * }, - * { - * type: UP, - * text: "half" - * width: 8; - * }, - * { - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "1 1/2" - * width: 8; - * }] - * ``` - * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) - * @param release if true, render a release. (DEPRECATED) - * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified - */ - constructor(text, release = false, phrase) { - super(); - this.text = text; - this.x_shift = 0; - this.release = release; - this.tap = ''; - this.resetFont(); - this.render_options = { - line_width: 1.5, - line_style: '#777777', - bend_width: 8, - release_width: 8, - }; - if (phrase) { - this.phrase = phrase; - } - else { - // Backward compatibility - this.phrase = [{ type: Bend.UP, text: this.text }]; - if (this.release) - this.phrase.push({ type: Bend.DOWN, text: '' }); - } - this.updateWidth(); - } - /** Set horizontal shift in pixels. */ - setXShift(value) { - this.x_shift = value; - this.updateWidth(); - return this; - } - setTap(value) { - this.tap = value; - return this; - } - /** Get text provided in the constructor. */ - getText() { - return this.text; - } - getTextHeight() { - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - return textFormatter.maxHeight; - } - /** Recalculate width. */ - updateWidth() { - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - const measureText = (text) => { - return textFormatter.getWidthForTextInPx(text); - }; - let totalWidth = 0; - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (bend.width !== undefined) { - totalWidth += bend.width; - } - else { - const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; - bend.width = Math.max(additional_width, measureText(bend.text)) + 3; - bend.draw_width = bend.width / 2; - totalWidth += bend.width; - } - } - this.setWidth(totalWidth + this.x_shift); - return this; - } - /** Draw the bend on the rendering context. */ - draw() { - var _a; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); - start.x += 3; - start.y += 0.5; - const x_shift = this.x_shift; - const stave = note.checkStave(); - const spacing = stave.getSpacingBetweenLines(); - const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); - // this.text_line is relative to top string in the group. - const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; - const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; - const renderBend = (x, y, width, height) => { - const cp_x = x + width; - const cp_y = y; - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, y); - ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); - ctx.stroke(); - ctx.restore(); - }; - const renderRelease = (x, y, width, height) => { - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, height); - ctx.quadraticCurveTo(x + width, height, x + width, y); - ctx.stroke(); - ctx.restore(); - }; - const renderArrowHead = (x, y, direction) => { - const width = 4; - const yBase = y + width * direction; - ctx.beginPath(); - ctx.moveTo(x, y); // tip of the arrow - ctx.lineTo(x - width, yBase); - ctx.lineTo(x + width, yBase); - ctx.closePath(); - ctx.fill(); - }; - const renderText = (x, text) => { - ctx.save(); - ctx.setFont(this.textFont); - const render_x = x - ctx.measureText(text).width / 2; - ctx.fillText(text, render_x, annotation_y); - ctx.restore(); - }; - let last_bend = undefined; - let last_bend_draw_width = 0; - let last_drawn_width = 0; - if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { - const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); - renderText(tapStart.x, this.tap); - } - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (!bend.draw_width) - bend.draw_width = 0; - if (i === 0) - bend.draw_width += x_shift; - last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); - if (bend.type === Bend.UP) { - if (last_bend && last_bend.type === Bend.UP) { - renderArrowHead(start.x, bend_height, +1); - } - renderBend(start.x, start.y, last_drawn_width, bend_height); - } - if (bend.type === Bend.DOWN) { - if (last_bend && last_bend.type === Bend.UP) { - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (last_bend && last_bend.type === Bend.DOWN) { - renderArrowHead(start.x, start.y, -1); - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (!last_bend) { - last_drawn_width = bend.draw_width; - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - } - renderText(start.x + last_drawn_width, bend.text); - last_bend = bend; - last_bend_draw_width = bend.draw_width; - last_bend.x = start.x; - start.x += last_drawn_width; - } - if (!last_bend || last_bend.x == undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); - } - // Final arrowhead and text - if (last_bend.type === Bend.UP) { - renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); - } - else if (last_bend.type === Bend.DOWN) { - renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); - } - } -} -/** Default text font. */ -Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/boundingbox.ts": -/*!****************************!*\ - !*** ./src/boundingbox.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -class BoundingBox { - /** - * Create a new copy. - */ - static copy(that) { - return new BoundingBox(that.x, that.y, that.w, that.h); - } - constructor(x, y, w, h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - /** Get x position. */ - getX() { - return this.x; - } - /** Get y position. */ - getY() { - return this.y; - } - /** Get width. */ - getW() { - return this.w; - } - /** Get height. */ - getH() { - return this.h; - } - /** Set x position. */ - setX(x) { - this.x = x; - return this; - } - /** Set y position. */ - setY(y) { - this.y = y; - return this; - } - /** Set width. */ - setW(w) { - this.w = w; - return this; - } - /** Set height. */ - setH(h) { - this.h = h; - return this; - } - /** Move to position. */ - move(x, y) { - this.x += x; - this.y += y; - return this; - } - /** Clone. */ - clone() { - return BoundingBox.copy(this); - } - /** - * Merge my box with given box. Creates a bigger bounding box unless - * the given box is contained in this one. - */ - mergeWith(boundingBox) { - const that = boundingBox; - const new_x = this.x < that.x ? this.x : that.x; - const new_y = this.y < that.y ? this.y : that.y; - const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; - const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; - this.x = new_x; - this.y = new_y; - this.w = new_w; - this.h = new_h; - return this; - } -} - - -/***/ }), - -/***/ "./src/boundingboxcomputation.ts": -/*!***************************************!*\ - !*** ./src/boundingboxcomputation.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -/** - * BoundingBoxComputation computes metrics for a bounding box by continuously - * taking canvas path commands. - * - * Warning: This class is merely a crutch to get bounding box information without - * explicit metadata. This is likely to get deprecated following SMuFL support. - * - * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) - */ -class BoundingBoxComputation { - constructor() { - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - } - /** Get calculated X1. */ - getX1() { - return this.x1; - } - /** Get calculated Y1. */ - getY1() { - return this.y1; - } - /** Get calculated width. */ - width() { - return this.x2 - this.x1; - } - /** Get calculated height. */ - height() { - return this.y2 - this.y1; - } - /** Add point to BoundingBox. */ - addPoint(x, y) { - if (isNaN(this.x1) || x < this.x1) - this.x1 = x; - if (isNaN(this.x2) || x > this.x2) - this.x2 = x; - if (isNaN(this.y1) || y < this.y1) - this.y1 = y; - if (isNaN(this.y2) || y > this.y2) - this.y2 = y; - } - /** Add X to BoundingBox. */ - addX(x) { - this.addPoint(x, this.y1); - } - /** Add Y to BoundingBox. */ - addY(y) { - this.addPoint(this.x1, y); - } - /** Add quadratic curve to BoundingBox. */ - addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { - this.addPoint(p0x, p0y); - this.addPoint(p2x, p2y); - const p01x = p1x - p0x; - const p12x = p2x - p1x; - let denom = p01x - p12x; - if (denom != 0) { - const t = p01x / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); - } - } - const p01y = p1y - p0y; - const p12y = p2y - p1y; - denom = p01y - p12y; - if (denom != 0) { - const t = p01y / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); - } - } - } - /** Add bezier curve to BoundingBox. */ - addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - const p0 = [p0x, p0y]; - const p1 = [p1x, p1y]; - const p2 = [p2x, p2y]; - const p3 = [p3x, p3y]; - let i; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + - 3 * Math.pow(1 - t, 2) * t * p1[i] + - 3 * (1 - t) * Math.pow(t, 2) * p2[i] + - Math.pow(t, 3) * p3[i]; - for (i = 0; i <= 1; i++) { - const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - const c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) - continue; - const t = -c / b; - if (0 < t && t < 1) { - if (i === 0) - this.addX(f(t, i)); - if (i === 1) - this.addY(f(t, i)); - } - continue; - } - const b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) - continue; - const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) - this.addX(f(t1, i)); - if (i === 1) - this.addY(f(t1, i)); - } - const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) - this.addX(f(t2, i)); - if (i === 1) - this.addY(f(t2, i)); - } - } - } -} - - -/***/ }), - -/***/ "./src/canvascontext.ts": -/*!******************************!*\ - !*** ./src/canvascontext.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -/** - * A rendering context for the Canvas backend. This class serves as a proxy for the - * underlying CanvasRenderingContext2D object, part of the browser's API. - */ -class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { - static get WIDTH() { - return 600; - } - static get HEIGHT() { - return 400; - } - static get CANVAS_BROWSER_SIZE_LIMIT() { - return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. - } - /** - * Ensure that width and height do not exceed the browser limit. - * @returns array of [width, height] clamped to the browser limit. - */ - static sanitizeCanvasDims(width, height) { - const limit = this.CANVAS_BROWSER_SIZE_LIMIT; - if (Math.max(width, height) > limit) { - (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); - if (width > limit) { - width = limit; - } - if (height > limit) { - height = limit; - } - } - return [width, height]; - } - constructor(context) { - super(); - /** Height of one line of text (in pixels). */ - this.textHeight = 0; - this.context2D = context; - if (!context.canvas) { - this.canvas = { - width: CanvasContext.WIDTH, - height: CanvasContext.HEIGHT, - }; - } - else { - this.canvas = context.canvas; - } - } - /** - * Set all pixels to transparent black rgba(0,0,0,0). - */ - clear() { - this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); - } - // eslint-disable-next-line - openGroup(cls, id, attrs) { - // Containers not implemented. - } - closeGroup() { - // Containers not implemented. - } - // eslint-disable-next-line - add(child) { - // Containers not implemented. - } - setFillStyle(style) { - this.context2D.fillStyle = style; - return this; - } - /** CanvasContext ignores `setBackgroundFillStyle()`. */ - // eslint-disable-next-line - setBackgroundFillStyle(style) { - // DO NOTHING - return this; - } - setStrokeStyle(style) { - this.context2D.strokeStyle = style; - return this; - } - setShadowColor(color) { - this.context2D.shadowColor = color; - return this; - } - setShadowBlur(blur) { - // CanvasRenderingContext2D does not scale the shadow blur by the current - // transform, so we have to do it manually. We assume uniform scaling - // (though allow for rotation) because the blur can only be scaled - // uniformly anyway. - const t = this.context2D.getTransform(); - const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); - this.context2D.shadowBlur = scale * blur; - return this; - } - setLineWidth(width) { - this.context2D.lineWidth = width; - return this; - } - setLineCap(capType) { - this.context2D.lineCap = capType; - return this; - } - setLineDash(dash) { - this.context2D.setLineDash(dash); - return this; - } - scale(x, y) { - this.context2D.scale(x, y); - return this; - } - resize(width, height) { - const canvas = this.context2D.canvas; - const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1; - // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. - [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio); - // Divide back down by the pixel ratio and convert to integers. - width = (width / devicePixelRatio) | 0; - height = (height / devicePixelRatio) | 0; - canvas.width = width * devicePixelRatio; - canvas.height = height * devicePixelRatio; - // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. - // Only HTMLCanvasElement has a style attribute. - if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - return this.scale(devicePixelRatio, devicePixelRatio); - } - rect(x, y, width, height) { - this.context2D.rect(x, y, width, height); - return this; - } - fillRect(x, y, width, height) { - this.context2D.fillRect(x, y, width, height); - return this; - } - /** - * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). - */ - clearRect(x, y, width, height) { - this.context2D.clearRect(x, y, width, height); - return this; - } - beginPath() { - this.context2D.beginPath(); - return this; - } - moveTo(x, y) { - this.context2D.moveTo(x, y); - return this; - } - lineTo(x, y) { - this.context2D.lineTo(x, y); - return this; - } - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - return this; - } - quadraticCurveTo(cpx, cpy, x, y) { - this.context2D.quadraticCurveTo(cpx, cpy, x, y); - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); - return this; - } - fill() { - this.context2D.fill(); - return this; - } - stroke() { - this.context2D.stroke(); - return this; - } - closePath() { - this.context2D.closePath(); - return this; - } - measureText(text) { - const metrics = this.context2D.measureText(text); - let y = 0; - let height = 0; - if (metrics.fontBoundingBoxAscent) { - y = -metrics.fontBoundingBoxAscent; - height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; - } - else { - y = -metrics.actualBoundingBoxAscent; - height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; - } - // Return x, y, width & height in the same manner as svg getBBox - return { - x: 0, - y: y, - width: metrics.width, - height: height, - }; - } - fillText(text, x, y) { - this.context2D.fillText(text, x, y); - return this; - } - save() { - this.context2D.save(); - return this; - } - restore() { - this.context2D.restore(); - return this; - } - set fillStyle(style) { - this.context2D.fillStyle = style; - } - get fillStyle() { - return this.context2D.fillStyle; - } - set strokeStyle(style) { - this.context2D.strokeStyle = style; - } - get strokeStyle() { - return this.context2D.strokeStyle; - } - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - */ - setFont(f, size, weight, style) { - const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); - this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); - this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); - return this; - } - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont() { - return this.context2D.font; - } -} - - -/***/ }), - -/***/ "./src/chordsymbol.ts": -/*!****************************!*\ - !*** ./src/chordsymbol.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), -/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Author: Aaron (@AaronDavidNewman) -// -// This implements chord symbols above/below a chord. -// Chord symbols are modifiers that can be attached to notes. -// They can contain multiple 'blocks' which represent text or -// glyphs with various positioning options. -// -// See `tests/chordsymbol_tests.ts` for usage examples. - - - - - - - -// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (ChordSymbol.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); -} -var ChordSymbolHorizontalJustify; -(function (ChordSymbolHorizontalJustify) { - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); -var ChordSymbolVerticalJustify; -(function (ChordSymbolVerticalJustify) { - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; -})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); -var SymbolTypes; -(function (SymbolTypes) { - SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; - SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; - SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; -})(SymbolTypes || (SymbolTypes = {})); -var SymbolModifiers; -(function (SymbolModifiers) { - SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; - SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; - SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; -})(SymbolModifiers || (SymbolModifiers = {})); -/** - * ChordSymbol is a modifier that creates a chord symbol above/below a chord. - * As a modifier, it is attached to an existing note. - */ -class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; - } - static get superSubRatio() { - return ChordSymbol.metrics.global.superSubRatio; - } - /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ - static set NO_TEXT_FORMAT(val) { - ChordSymbol.noFormat = val; - } - static get NO_TEXT_FORMAT() { - return ChordSymbol.noFormat; - } - static getMetricForGlyph(glyphCode) { - if (ChordSymbol.metrics.glyphs[glyphCode]) { - return ChordSymbol.metrics.glyphs[glyphCode]; - } - return undefined; - } - static get engravingFontResolution() { - return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); - } - static get spacingBetweenBlocks() { - return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; - } - static getWidthForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0.65; // probably should do something here. - } - return metric.advanceWidth / ChordSymbol.engravingFontResolution; - } - static getYShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return metric.yOffset / ChordSymbol.engravingFontResolution; - } - static getXShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; - } - static get superscriptOffset() { - return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; - } - static get subscriptOffset() { - return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; - } - static get kerningOffset() { - return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; - } - static get metrics() { - const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; - if (!chordSymbol) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); - return chordSymbol; - } - static get lowerKerningText() { - // For example, see: `bravura_metrics.ts` - // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. - // ['D', 'F', 'P', 'T', 'V', 'Y'] - return ChordSymbol.metrics.global.lowerKerningText; - } - static get upperKerningText() { - return ChordSymbol.metrics.global.upperKerningText; - } - static isSuperscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; - } - static isSubscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; - } - static get minPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** - * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. - * Estimate how many lines above/below the staff we need. - */ - static format(symbols, state) { - var _a; - if (!symbols || symbols.length === 0) - return false; - let width = 0; - let nonSuperWidth = 0; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (const symbol of symbols) { - const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); - const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); - const glyphAdj = fontAdj * 2; - const note = symbol.checkAttachedNote(); - let symbolWidth = 0; - let lineSpaces = 1; - let vAlign = false; - for (let j = 0; j < symbol.symbolBlocks.length; ++j) { - const block = symbol.symbolBlocks[j]; - const sup = ChordSymbol.isSuperscript(block); - const sub = ChordSymbol.isSubscript(block); - const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; - const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; - // If there are super/subscripts, they extend beyond the line so - // assume they take up 2 lines - if (sup || sub) { - lineSpaces = 2; - } - // If there is a symbol-specific offset, add it but consider font - // size since font and glyphs will be interspersed. - const fontSize = symbol.textFormatter.fontSizeInPixels; - const superSubFontSize = fontSize * superSubScale; - if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { - block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; - block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; - block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; - block.glyph.scale = block.glyph.scale * adj; - } - else if (block.symbolType === SymbolTypes.TEXT) { - block.width = block.width * superSubFontSize; - block.yShift += symbol.getYOffsetForText(block.text) * adj; - } - if (block.symbolType === SymbolTypes.GLYPH && - block.glyph !== undefined && - block.glyph.code === ChordSymbol.glyphs.over.code) { - lineSpaces = 2; - } - block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; - // If a subscript immediately follows a superscript block, try to - // overlay them. - if (sup && j > 0) { - const prev = symbol.symbolBlocks[j - 1]; - if (!ChordSymbol.isSuperscript(prev)) { - nonSuperWidth = width; - } - } - if (sub && nonSuperWidth > 0) { - vAlign = true; - // slide the symbol over so it lines up with superscript - block.xShift = block.xShift + (nonSuperWidth - width); - width = nonSuperWidth; - nonSuperWidth = 0; - // If we have vertically lined up, turn kerning off. - symbol.setEnableKerning(false); - } - if (!sup && !sub) { - nonSuperWidth = 0; - } - block.vAlign = vAlign; - width += block.width; - symbolWidth = width; - } - // make kerning adjustments after computing super/subscripts - symbol.updateKerningAdjustments(); - symbol.updateOverBarAdjustments(); - if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { - symbol.setTextLine(state.top_text_line); - state.top_text_line += lineSpaces; - } - else { - symbol.setTextLine(state.text_line + 1); - state.text_line += lineSpaces + 1; - } - if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { - const glyphWidth = note.getGlyphProps().getWidth(); - if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; - } - else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, symbolWidth); - } - else { - leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; - rightWidth = Math.max(rightWidth, symbolWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - } - width = 0; // reset symbol width - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - constructor() { - super(); - this.symbolBlocks = []; - this.horizontal = ChordSymbolHorizontalJustify.LEFT; - this.vertical = ChordSymbolVerticalJustify.TOP; - this.useKerning = true; - this.reportWidth = true; - this.resetFont(); - } - /** - * Default text font. - * Choose a font family that works well with the current music engraving font. - * @override `Element.TEXT_FONT`. - */ - static get TEXT_FONT() { - let family = 'Roboto Slab, Times, serif'; - if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { - // Fixes Issue #1180 - family = 'PetalumaScript, Arial, sans-serif'; - } - return { - family, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, - }; - } - /** - * The offset is specified in `em`. Scale this value by the font size in pixels. - */ - get superscriptOffset() { - return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; - } - get subscriptOffset() { - return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; - } - setReportWidth(value) { - this.reportWidth = value; - return this; - } - getReportWidth() { - return this.reportWidth; - } - updateOverBarAdjustments() { - const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); - if (barIndex < 0) { - return; - } - const bar = this.symbolBlocks[barIndex]; - const xoff = bar.width / 4; - const yoff = 0.25 * this.textFormatter.fontSizeInPixels; - let symIndex = 0; - for (symIndex === 0; symIndex < barIndex; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift + xoff; - symbol.yShift = symbol.yShift - yoff; - } - for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift - xoff; - symbol.yShift = symbol.yShift + yoff; - } - } - updateKerningAdjustments() { - let accum = 0; - for (let j = 0; j < this.symbolBlocks.length; ++j) { - const symbol = this.symbolBlocks[j]; - accum += this.getKerningAdjustment(j); - symbol.xShift += accum; - } - } - /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ - getKerningAdjustment(j) { - if (!this.useKerning) { - return 0; - } - const currSymbol = this.symbolBlocks[j]; - const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; - let adjustment = 0; - // Move things into the '/' over bar - if (currSymbol.symbolType === SymbolTypes.GLYPH && - currSymbol.glyph !== undefined && - currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += currSymbol.glyph.metrics.x_shift; - } - if (prevSymbol !== undefined && - prevSymbol.symbolType === SymbolTypes.GLYPH && - prevSymbol.glyph !== undefined && - prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += prevSymbol.glyph.metrics.x_shift; - } - // For superscripts that follow a letter without much top part, move it to the left slightly - let preKernUpper = false; - let preKernLower = false; - if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { - preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - } - const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; - // TODO: adjust kern for font size. - // Where should this constant live? - if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { - adjustment += kerningOffsetPixels; - } - if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { - if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { - adjustment += kerningOffsetPixels / 2; - } - if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { - adjustment += kerningOffsetPixels / 2; - } - } - return adjustment; - } - /** - * ChordSymbol allows multiple blocks so we can mix glyphs and font text. - * Each block can have its own vertical orientation. - */ - // eslint-disable-next-line - getSymbolBlock(params = {}) { - var _a, _b, _c; - const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; - const symbolBlock = { - text: (_b = params.text) !== null && _b !== void 0 ? _b : '', - symbolType, - symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, - xShift: 0, - yShift: 0, - vAlign: false, - width: 0, - }; - // Note: symbol widths are resolution and font-independent. - // We convert to pixel values when we know what the font is. - if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { - const glyphArgs = ChordSymbol.glyphs[params.glyph]; - const glyphPoints = 20; - symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); - // Beware: glyph.metrics is not the same as glyph.getMetrics() ! - // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale; - // rv.width = rv.glyph.getMetrics().width; - // don't set yShift here, b/c we need to do it at formatting time after the font is set. - } - else if (symbolType === SymbolTypes.TEXT) { - symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); - } - else if (symbolType === SymbolTypes.LINE) { - symbolBlock.width = params.width; - } - return symbolBlock; - } - /** Add a symbol to this chord, could be text, glyph or line. */ - // eslint-disable-next-line - addSymbolBlock(parameters) { - this.symbolBlocks.push(this.getSymbolBlock(parameters)); - return this; - } - // ### Convenience functions for creating different types of chord symbol parts. - /** Add a text block. */ - // eslint-disable-next-line - addText(text, parameters = {}) { - const symbolType = SymbolTypes.TEXT; - return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); - } - /** Add a text block with superscript modifier. */ - addTextSuperscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - /** Add a text block with subscript modifier. */ - addTextSubscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUBSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - /** Add a glyph block with superscript modifier. */ - addGlyphSuperscript(glyph) { - const symbolType = SymbolTypes.GLYPH; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); - } - /** Add a glyph block. */ - // eslint-disable-next-line - addGlyph(glyph, params = {}) { - const symbolType = SymbolTypes.GLYPH; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); - } - /** - * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. - * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. - */ - // eslint-disable-next-line - addGlyphOrText(text, params = {}) { - let str = ''; - for (let i = 0; i < text.length; ++i) { - const char = text[i]; - if (ChordSymbol.glyphs[char]) { - if (str.length > 0) { - this.addText(str, params); - str = ''; - } - this.addGlyph(char, params); - } - else { - // Collect consecutive characters with no glyphs. - str += char; - } - } - if (str.length > 0) { - this.addText(str, params); - } - return this; - } - /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ - // eslint-disable-next-line - addLine(width, params = {}) { - const symbolType = SymbolTypes.LINE; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); - } - /** - * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * - * @override See: Element. - */ - setFont(f, size, weight, style) { - super.setFont(f, size, weight, style); - this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - return this; - } - setEnableKerning(val) { - this.useKerning = val; - return this; - } - /** Set vertical position of text (above or below stave). */ - setVertical(vj) { - this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; - return this; - } - getVertical() { - return this.vertical; - } - /** Set horizontal justification. */ - setHorizontal(hj) { - this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; - return this; - } - getHorizontal() { - return this.horizontal; - } - getWidth() { - let width = 0; - this.symbolBlocks.forEach((symbol) => { - width += symbol.vAlign ? 0 : symbol.width; - }); - return width; - } - getYOffsetForText(text) { - var _a; - let acc = 0; - let i = 0; - for (i = 0; i < text.length; ++i) { - const metrics = this.textFormatter.getGlyphMetrics(text[i]); - if (metrics) { - const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; - acc = yMax < acc ? yMax : acc; - } - } - const resolution = this.textFormatter.getResolution(); - return i > 0 ? -1 * (acc / resolution) : 0; - } - /** Render text and glyphs above/below the note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - // We're changing context parameters. Save current state. - ctx.save(); - this.applyStyle(); - ctx.openGroup('chordsymbol', this.getAttribute('id')); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); - ctx.setFont(this.textFont); - let y; - // The position of the text varies based on whether or not the note - // has a stem. - const hasStem = note.hasStem(); - const stave = note.checkStave(); - if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { - // HACK: We need to compensate for the text's height since its origin is bottom-right. - y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; - y = Math.max(y, stem_base + spacing * (this.text_line + 2)); - } - } - else { - // (this.vertical === VerticalJustify.TOP) - const topY = Math.min(...note.getYs()); - y = Math.min(stave.getYForTopText(this.text_line), topY - 10); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); - } - } - let x = start.x; - if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { - x = start.x + this.getWidth(); - } - else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { - x = start.x - this.getWidth() / 2; - } - else { - // HorizontalJustify.CENTER_STEM - x = note.getStemX() - this.getWidth() / 2; - } - L('Rendering ChordSymbol: ', this.textFormatter, x, y); - this.symbolBlocks.forEach((symbol) => { - const isSuper = ChordSymbol.isSuperscript(symbol); - const isSub = ChordSymbol.isSubscript(symbol); - let curY = y; - L('shift was ', symbol.xShift, symbol.yShift); - L('curY pre sub ', curY); - if (isSuper) { - curY += this.superscriptOffset; - } - if (isSub) { - curY += this.subscriptOffset; - } - L('curY sup/sub ', curY); - if (symbol.symbolType === SymbolTypes.TEXT) { - if (isSuper || isSub) { - ctx.save(); - if (this.textFont) { - const { family, size, weight, style } = this.textFont; - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); - ctx.setFont(family, smallerFontSize, weight, style); - } - } - // TODO??? - // We estimate the text width, fill it in with the empirical value so the formatting is even. - // const textDim = ctx.measureText(symbol.text); - // symbol.width = textDim.width; - L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); - ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); - if (isSuper || isSub) { - ctx.restore(); - } - } - else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { - curY += symbol.yShift; - L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); - symbol.glyph.render(ctx, x + symbol.xShift, curY); - } - else if (symbol.symbolType === SymbolTypes.LINE) { - L('Rendering Line : ', symbol.width, x, curY); - ctx.beginPath(); - ctx.setLineWidth(1); // ? - ctx.moveTo(x, y); - ctx.lineTo(x + symbol.width, curY); - ctx.stroke(); - } - x += symbol.width; - if (symbol.vAlign) { - x += symbol.xShift; - } - }); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -ChordSymbol.DEBUG = false; -// Chord symbols can be positioned and justified relative to the note. -ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; -ChordSymbol.HorizontalJustifyString = { - left: ChordSymbolHorizontalJustify.LEFT, - right: ChordSymbolHorizontalJustify.RIGHT, - center: ChordSymbolHorizontalJustify.CENTER, - centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, -}; -ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; -ChordSymbol.VerticalJustifyString = { - top: ChordSymbolVerticalJustify.TOP, - above: ChordSymbolVerticalJustify.TOP, - below: ChordSymbolVerticalJustify.BOTTOM, - bottom: ChordSymbolVerticalJustify.BOTTOM, -}; -// Glyph data -ChordSymbol.glyphs = { - diminished: { - code: 'csymDiminished', - }, - dim: { - code: 'csymDiminished', - }, - halfDiminished: { - code: 'csymHalfDiminished', - }, - '+': { - code: 'csymAugmented', - }, - augmented: { - code: 'csymAugmented', - }, - majorSeventh: { - code: 'csymMajorSeventh', - }, - minor: { - code: 'csymMinor', - }, - '-': { - code: 'csymMinor', - }, - '(': { - code: 'csymParensLeftTall', - }, - leftParen: { - code: 'csymParensLeftTall', - }, - ')': { - code: 'csymParensRightTall', - }, - rightParen: { - code: 'csymParensRightTall', - }, - leftBracket: { - code: 'csymBracketLeftTall', - }, - rightBracket: { - code: 'csymBracketRightTall', - }, - leftParenTall: { - code: 'csymParensLeftVeryTall', - }, - rightParenTall: { - code: 'csymParensRightVeryTall', - }, - '/': { - code: 'csymDiagonalArrangementSlash', - }, - over: { - code: 'csymDiagonalArrangementSlash', - }, - '#': { - code: 'accidentalSharp', - }, - b: { - code: 'accidentalFlat', - }, -}; -ChordSymbol.symbolTypes = SymbolTypes; -ChordSymbol.symbolModifiers = SymbolModifiers; -/** Currently unused. */ -ChordSymbol.noFormat = false; - - -/***/ }), - -/***/ "./src/clef.ts": -/*!*********************!*\ - !*** ./src/clef.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Clef": () => (/* binding */ Clef) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. -// Co-author: Benjamin W. Bohl -// MIT License - - - - - -// eslint-disable-next-line -function L(...args) { - if (Clef.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); -} -/** - * Clef implements various types of clefs that can be rendered on a stave. - * - * See `tests/clef_tests.ts` for usage examples. - */ -class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; - } - /** - * Every clef name is associated with a glyph code from the font file - * and a default stave line number. - */ - static get types() { - return { - treble: { - code: 'gClef', - line: 3, - point: 0, - }, - bass: { - code: 'fClef', - line: 1, - point: 0, - }, - alto: { - code: 'cClef', - line: 2, - point: 0, - }, - tenor: { - code: 'cClef', - line: 1, - point: 0, - }, - percussion: { - code: 'unpitchedPercussionClef1', - line: 2, - point: 0, - }, - soprano: { - code: 'cClef', - line: 4, - point: 0, - }, - 'mezzo-soprano': { - code: 'cClef', - line: 3, - point: 0, - }, - 'baritone-c': { - code: 'cClef', - line: 0, - point: 0, - }, - 'baritone-f': { - code: 'fClef', - line: 2, - point: 0, - }, - subbass: { - code: 'fClef', - line: 0, - point: 0, - }, - french: { - code: 'gClef', - line: 4, - point: 0, - }, - tab: { - code: '6stringTabClef', - line: 3, - point: 0, - }, - }; - } - static get annotationSmufl() { - return { - '8va': 'timeSig8', - '8vb': 'timeSig8', - }; - } - /** Create a new clef. */ - constructor(type, size, annotation) { - super(); - /** - * The attribute `clef` must be a key from - * `Clef.types` - */ - this.clef = Clef.types['treble']; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.setType(type, size, annotation); - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`)); - L('Creating clef:', type); - } - /** Set clef type, size and annotation. */ - setType(type, size, annotation) { - this.type = type; - this.clef = Clef.types[type]; - if (size === undefined) { - this.size = 'default'; - } - else { - this.size = size; - } - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); - // If an annotation, such as 8va, is specified, add it to the Clef object. - if (annotation !== undefined) { - const code = Clef.annotationSmufl[annotation]; - const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`); - const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); - const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); - this.annotation = { code, point, line, x_shift }; - this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); - this.attachment.metrics.x_max = 0; - this.attachment.setXShift(this.annotation.x_shift); - } - else { - this.annotation = undefined; - } - return this; - } - /** Get clef width. */ - getWidth() { - if (this.type === 'tab') { - (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); - } - return this.width; - } - /** Set associated stave. */ - setStave(stave) { - this.stave = stave; - return this; - } - /** Render clef. */ - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('clef', this.getAttribute('id')); - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clef_${this.size}`, - }); - if (this.annotation !== undefined && this.attachment !== undefined) { - this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); - this.attachment.setStave(stave); - this.attachment.setContext(ctx); - this.attachment.renderToStave(this.x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ -Clef.DEBUG = false; - - -/***/ }), - -/***/ "./src/clefnote.ts": -/*!*************************!*\ - !*** ./src/clefnote.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) -/* harmony export */ }); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 -// MIT License - - - - -/** ClefNote implements clef annotations in measures. */ -class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; - } - constructor(type, size, annotation) { - super({ duration: 'b' }); - this.type = type; - const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.size = size === undefined ? 'default' : size; - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - // Note properties - this.ignore_ticks = true; - } - /** Set clef type, size and annotation. */ - setType(type, size, annotation) { - this.type = type; - this.size = size; - const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - return this; - } - /** Get associated clef. */ - getClef() { - return this.clef; - } - preFormat() { - this.preFormatted = true; - return this; - } - /** Render clef note. */ - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const abs_x = this.getAbsoluteX(); - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clefNote_${this.size}`, - }); - // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. - if (this.annotation !== undefined) { - const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); - attachment.setContext(ctx); - attachment.setStave(stave); - attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); - attachment.setXShift(this.annotation.x_shift); - attachment.renderToStave(abs_x); - } - } -} - - -/***/ }), - -/***/ "./src/crescendo.ts": -/*!**************************!*\ - !*** ./src/crescendo.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This file implements the `Crescendo` object which draws crescendos and -// decrescendo dynamics markings. A `Crescendo` is initialized with a -// duration and formatted as part of a `Voice` like any other `Note` -// type in VexFlow. This object would most likely be formatted in a Voice -// with `TextNotes` - which are used to represent other dynamics markings. - - - - -// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (Crescendo.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); -} -// Private helper to draw the hairpin -function renderHairpin(ctx, params) { - const begin_x = params.begin_x; - const end_x = params.end_x; - const y = params.y; - const half_height = params.height / 2; - ctx.beginPath(); - if (params.reverse) { - ctx.moveTo(begin_x, y - half_height); - ctx.lineTo(end_x, y); - ctx.lineTo(begin_x, y + half_height); - } - else { - ctx.moveTo(end_x, y - half_height); - ctx.lineTo(begin_x, y); - ctx.lineTo(end_x, y + half_height); - } - ctx.stroke(); - ctx.closePath(); -} -class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - /** Crescendo category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; - } - // Initialize the crescendo's properties - constructor(noteStruct) { - super(noteStruct); - this.options = { - // Extensions to the length of the crescendo on either side - extend_left: 0, - extend_right: 0, - // Vertical shift - y_shift: 0, - }; - // Whether the object is a decrescendo - this.decrescendo = false; - // The staff line to be placed on - this.line = noteStruct.line || 0; - // The height at the open end of the cresc/decresc - this.height = 15; - } - // Set the line to center the element on - setLine(line) { - this.line = line; - return this; - } - // Set the full height at the open end - setHeight(height) { - this.height = height; - return this; - } - // Set whether the sign should be a descresendo by passing a bool - // to `decresc` - setDecrescendo(decresc) { - this.decrescendo = decresc; - return this; - } - // Preformat the note - preFormat() { - this.preFormatted = true; - return this; - } - // Render the Crescendo object onto the canvas - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - this.setRendered(); - const tick_context = this.getTickContext(); - const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); - const begin_x = this.getAbsoluteX(); - const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); - const y = stave.getYForLine(this.line + -3) + 1; - L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); - renderHairpin(ctx, { - begin_x: begin_x - this.options.extend_left, - end_x: end_x + this.options.extend_right, - y: y + this.options.y_shift, - height: this.height, - reverse: this.decrescendo, - }); - } -} -Crescendo.DEBUG = false; - - -/***/ }), - -/***/ "./src/curve.ts": -/*!**********************!*\ - !*** ./src/curve.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Curve": () => (/* binding */ Curve), -/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements curves (for slurs) - - - -var CurvePosition; -(function (CurvePosition) { - CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; - CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; -})(CurvePosition || (CurvePosition = {})); -class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; - } - static get Position() { - return CurvePosition; - } - static get PositionString() { - return { - nearHead: CurvePosition.NEAR_HEAD, - nearTop: CurvePosition.NEAR_TOP, - }; - } - // from: Start note - // to: End note - // options: - // cps: List of control points - // x_shift: pixels to shift - // y_shift: pixels to shift - constructor(from, to, options) { - super(); - this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ - { x: 0, y: 10 }, - { x: 0, y: 10 }, - ] }, options); - this.from = from; - this.to = to; - } - setNotes(from, to) { - if (!from && !to) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); - } - this.from = from; - this.to = to; - return this; - } - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial() { - return !this.from || !this.to; - } - renderCurve(params) { - const ctx = this.checkContext(); - const x_shift = this.render_options.x_shift; - const y_shift = this.render_options.y_shift * params.direction; - const first_x = params.first_x + x_shift; - const first_y = params.first_y + y_shift; - const last_x = params.last_x - x_shift; - const last_y = params.last_y + y_shift; - const thickness = this.render_options.thickness; - const cps = this.render_options.cps; - const { x: cp0x, y: cp0y } = cps[0]; - const { x: cp1x, y: cp1y } = cps[1]; - const cp_spacing = (last_x - first_x) / (cps.length + 2); - ctx.beginPath(); - ctx.moveTo(first_x, first_y); - ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); - ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); - ctx.stroke(); - ctx.closePath(); - ctx.fill(); - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.from; - const last_note = this.to; - let first_x; - let last_x; - let first_y; - let last_y; - let stem_direction = 0; - let metric = 'baseY'; - let end_metric = 'baseY'; - function getPosition(position) { - return typeof position === 'string' ? Curve.PositionString[position] : position; - } - const position = getPosition(this.render_options.position); - const position_end = getPosition(this.render_options.position_end); - if (position === CurvePosition.NEAR_TOP) { - metric = 'topY'; - end_metric = 'topY'; - } - if (position_end === CurvePosition.NEAR_HEAD) { - end_metric = 'baseY'; - } - else if (position_end === CurvePosition.NEAR_TOP) { - end_metric = 'topY'; - } - if (first_note) { - first_x = first_note.getTieRightX(); - stem_direction = first_note.getStemDirection(); - first_y = first_note.getStemExtents()[metric]; - } - else { - const stave = last_note.checkStave(); - first_x = stave.getTieStartX(); - first_y = last_note.getStemExtents()[metric]; - } - if (last_note) { - last_x = last_note.getTieLeftX(); - stem_direction = last_note.getStemDirection(); - last_y = last_note.getStemExtents()[end_metric]; - } - else { - const stave = first_note.checkStave(); - last_x = stave.getTieEndX(); - last_y = first_note.getStemExtents()[end_metric]; - } - this.renderCurve({ - first_x, - last_x, - first_y, - last_y, - direction: stem_direction * (this.render_options.invert === true ? -1 : 1), - }); - return true; - } -} - - -/***/ }), - -/***/ "./src/dot.ts": -/*!********************!*\ - !*** ./src/dot.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Dot": () => (/* binding */ Dot) -/* harmony export */ }); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements dot modifiers for notes. - - - -class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; - } - /** Returns the dots associated to a Note. */ - static getDots(note) { - return note.getModifiersByType(Dot.CATEGORY); - } - /** Add a dot on the specified keys to the notes. */ - static buildAndAttach(notes, options) { - for (const note of notes) { - if (options === null || options === void 0 ? void 0 : options.all) { - for (let i = 0; i < note.keys.length; i++) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, i); - } - } - else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); - } - else { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, 0); - } - } - } - // Arrange dots inside a ModifierContext. - static format(dots, state) { - const right_shift = state.right_shift; - const dot_spacing = 1; - if (!dots || dots.length === 0) - return false; - const dot_list = []; - const max_shift_map = {}; - for (let i = 0; i < dots.length; ++i) { - const dot = dots[i]; - const note = dot.getNote(); - let props; - let shift; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { - const index = dot.checkIndex(); - props = note.getKeyProps()[index]; - // consider right displaced head with no previous modifier - shift = note.getFirstDotPx(); - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { - props = { line: 0.5 }; // Shim key props for dot placement - shift = right_shift; - } - else { - // note object is not StaveNote or TabNote. - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); - } - const note_id = note.getAttribute('id'); - dot_list.push({ line: props.line, note, note_id, dot }); - max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); - } - // Sort dots by line number. - dot_list.sort((a, b) => b.line - a.line); - let dot_shift = right_shift; - let x_width = 0; - let last_line = null; - let last_note = null; - let prev_dotted_space = null; - let half_shiftY = 0; - for (let i = 0; i < dot_list.length; ++i) { - const { dot, note, note_id, line } = dot_list[i]; - // Reset the position of the dot every line. - if (line !== last_line || note !== last_note) { - dot_shift = max_shift_map[note_id]; - } - if (!note.isRest() && line !== last_line) { - if (Math.abs(line % 1) === 0.5) { - // note is on a space, so no dot shift - half_shiftY = 0; - } - else { - // note is on a line, so shift dot to space above the line - half_shiftY = 0.5; - if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { - // previous note on a space, so shift dot to space below the line - half_shiftY = -0.5; - } - else if (line + half_shiftY === prev_dotted_space) { - // previous space is dotted, so shift dot to space below the line - half_shiftY = -0.5; - } - } - } - // convert half_shiftY to a multiplier for dots.draw() - if (note.isRest()) { - dot.dot_shiftY += -half_shiftY; - } - else { - dot.dot_shiftY = -half_shiftY; - } - prev_dotted_space = line + half_shiftY; - dot.setXShift(dot_shift); - dot_shift += dot.getWidth() + dot_spacing; // spacing - x_width = dot_shift > x_width ? dot_shift : x_width; - last_line = line; - last_note = note; - } - // Update state. - state.right_shift += x_width; - return true; - } - constructor() { - super(); - this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; - this.radius = 2; - this.setWidth(5); - this.dot_shiftY = 0; - } - setNote(note) { - this.note = note; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { - this.radius *= 0.5; - this.setWidth(3); - } - return this; - } - setDotShiftY(y) { - this.dot_shiftY = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stave = note.checkStave(); - const lineSpace = stave.getSpacingBetweenLines(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - // Set the starting y coordinate to the base of the stem for TabNotes. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { - start.y = note.getStemExtents().baseY; - } - const x = start.x + this.x_shift + this.width - this.radius; - const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; - ctx.beginPath(); - ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); - ctx.fill(); - } -} - - -/***/ }), - -/***/ "./src/easyscore.ts": -/*!**************************!*\ - !*** ./src/easyscore.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Builder": () => (/* binding */ Builder), -/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), -/* harmony export */ "Piece": () => (/* binding */ Piece) -/* harmony export */ }); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (EasyScore.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); -} -class EasyScoreGrammar { - constructor(builder) { - this.builder = builder; - } - begin() { - return this.LINE; - } - LINE() { - return { - expect: [this.PIECE, this.PIECES, this.EOL], - }; - } - PIECE() { - return { - expect: [this.CHORDORNOTE, this.PARAMS], - run: () => this.builder.commitPiece(), - }; - } - PIECES() { - return { - expect: [this.COMMA, this.PIECE], - zeroOrMore: true, - }; - } - PARAMS() { - return { - expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], - }; - } - CHORDORNOTE() { - return { - expect: [this.CHORD, this.SINGLENOTE], - or: true, - }; - } - CHORD() { - return { - expect: [this.LPAREN, this.NOTES, this.RPAREN], - // eslint-disable-next-line - run: (state) => this.builder.addChord(state.matches[1]), - }; - } - NOTES() { - return { - expect: [this.NOTE], - oneOrMore: true, - }; - } - NOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - }; - } - SINGLENOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - run: (state) => { - // eslint-disable-next-line - const s = state; - this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); - }, - }; - } - ACCIDENTAL() { - return { - expect: [this.MICROTONES, this.ACCIDENTALS], - maybe: true, - or: true, - }; - } - DOTS() { - return { - expect: [this.DOT], - zeroOrMore: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteDots(state.matches), - }; - } - TYPE() { - return { - expect: [this.SLASH, this.MAYBESLASH, this.TYPES], - maybe: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteType(state.matches[2]), - }; - } - DURATION() { - return { - expect: [this.SLASH, this.DURATIONS], - maybe: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteDuration(state.matches[1]), - }; - } - OPTS() { - return { - expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], - maybe: true, - }; - } - KEYVALS() { - return { - expect: [this.COMMA, this.KEYVAL], - zeroOrMore: true, - }; - } - KEYVAL() { - const unquote = (str) => str.slice(1, -1); - return { - expect: [this.KEY, this.EQUALS, this.VAL], - // eslint-disable-next-line - run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), - }; - } - VAL() { - return { - expect: [this.SVAL, this.DVAL], - or: true, - }; - } - KEY() { - return { token: '[a-zA-Z][a-zA-Z0-9]*' }; - } - DVAL() { - return { token: '["][^"]*["]' }; - } - SVAL() { - return { token: "['][^']*[']" }; - } - NOTENAME() { - return { token: '[a-gA-G]' }; - } - OCTAVE() { - return { token: '[0-9]+' }; - } - ACCIDENTALS() { - return { token: 'bb|b|##|#|n' }; - } - MICROTONES() { - return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; - } - DURATIONS() { - return { token: '[0-9whq]+' }; - } - TYPES() { - return { token: '[rRsSmMhHgG]' }; - } - LPAREN() { - return { token: '[(]' }; - } - RPAREN() { - return { token: '[)]' }; - } - COMMA() { - return { token: '[,]' }; - } - DOT() { - return { token: '[.]' }; - } - SLASH() { - return { token: '[/]' }; - } - MAYBESLASH() { - return { token: '[/]?' }; - } - EQUALS() { - return { token: '[=]' }; - } - LBRACKET() { - return { token: '\\[' }; - } - RBRACKET() { - return { token: '\\]' }; - } - EOL() { - return { token: '$' }; - } -} -class Piece { - constructor(duration) { - this.chord = []; - this.dots = 0; - this.options = {}; - this.duration = duration; - } -} -class Builder { - constructor(factory) { - this.commitHooks = []; - this.factory = factory; - this.reset(); - } - reset(options) { - this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); - this.elements = { notes: [], accidentals: [] }; - this.rollingDuration = '8'; - this.resetPiece(); - } - getFactory() { - return this.factory; - } - getElements() { - return this.elements; - } - addCommitHook(commitHook) { - this.commitHooks.push(commitHook); - } - resetPiece() { - L('resetPiece'); - this.piece = new Piece(this.rollingDuration); - } - setNoteDots(dots) { - L('setNoteDots:', dots); - if (dots) - this.piece.dots = dots.length; - } - setNoteDuration(duration) { - L('setNoteDuration:', duration); - this.rollingDuration = this.piece.duration = duration || this.rollingDuration; - } - setNoteType(type) { - L('setNoteType:', type); - if (type) - this.piece.type = type; - } - addNoteOption(key, value) { - L('addNoteOption: key:', key, 'value:', value); - this.piece.options[key] = value; - } - addNote(key, accid, octave) { - L('addNote:', key, accid, octave); - this.piece.chord.push({ - key: key, - accid, - octave, - }); - } - addSingleNote(key, accid, octave) { - L('addSingleNote:', key, accid, octave); - this.addNote(key, accid, octave); - } - // notes is an array with 3 entries - addChord(notes) { - L('startChord'); - if (typeof notes[0] !== 'object') { - this.addSingleNote(notes[0]); - } - else { - notes.forEach((n) => { - if (n) - this.addNote(...n); // n => [string, string | null, string] - }); - } - L('endChord'); - } - commitPiece() { - L('commitPiece'); - const { factory } = this; - if (!factory) - return; - const options = Object.assign(Object.assign({}, this.options), this.piece.options); - // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. - // e.g., auto | up | down - const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); - // e.g., treble | bass - const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); - const { chord, duration, dots, type } = this.piece; - // Create a string[] that will be assigned to the .keys property of the StaveNote. - // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} - // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. - const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; - const keys = chord.map((notePiece) => { - var _a; - return notePiece.key + - (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + - '/' + - notePiece.octave; - }); - const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. - // Build a GhostNote or StaveNote using the information we gathered. - const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' - ? factory.GhostNote({ duration, dots }) - : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); - if (!auto_stem) - note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); - // Attach accidentals. - const accidentals = []; - chord.forEach((notePiece, index) => { - const accid = notePiece.accid; - if (typeof accid === 'string') { - const accidental = factory.Accidental({ type: accid }); - note.addModifier(accidental, index); - accidentals.push(accidental); - } - else { - accidentals.push(undefined); - } - }); - // Attach dots. - for (let i = 0; i < dots; i++) - _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); - this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); - this.elements.notes.push(note); - this.elements.accidentals.push(accidentals); - this.resetPiece(); - } -} -/** - * Commit hook used by EasyScore.setOptions(). - */ -function setId(options, note) { - if (options.id === undefined) - return; - note.setAttribute('id', options.id); -} -// Used by setClass() below. -const commaSeparatedRegex = /\s*,\s*/; -/** - * Commit hook used by EasyScore.setOptions(). - */ -function setClass(options, note) { - if (options.class === undefined) - return; - options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); -} -/** - * EasyScore implements a parser for a simple language to generate VexFlow objects. - */ -class EasyScore { - constructor(options = {}) { - this.defaults = { - clef: 'treble', - time: '4/4', - stem: 'auto', - }; - this.setOptions(options); - } - /** - * Set the score defaults. - * clef must be set appropriately to avoid errors when adding Staves. - * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} - * @param defaults.time default time signature ( 4/4 | 9/8 ...) - * @param defaults.stem default stem arrangement (auto | up | down) - * @returns this - */ - set(defaults) { - this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); - return this; - } - /** - * @param options.factory is required. - * @returns this - */ - setOptions(options) { - var _a, _b; - // eslint-disable-next-line - const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). - const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); - this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, - builder }); - this.factory = factory; - this.builder = builder; - this.grammar = new EasyScoreGrammar(this.builder); - this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); - (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); - return this; - } - setContext(context) { - this.factory.setContext(context); - return this; - } - parse(line, options = {}) { - this.builder.reset(options); - const result = this.parser.parse(line); - if (!result.success && this.options.throwOnError) { - L(result); - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); - } - return result; - } - beam(notes, options) { - this.factory.Beam({ notes, options }); - return notes; - } - tuplet(notes, options) { - this.factory.Tuplet({ notes, options }); - return notes; - } - notes(line, options = {}) { - options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); - this.parse(line, options); - return this.builder.getElements().notes; - } - voice(notes, options = {}) { - options = Object.assign({ time: this.defaults.time }, options); - return this.factory.Voice(options).addTickables(notes); - } - addCommitHook(commitHook) { - this.builder.addCommitHook(commitHook); - } -} -EasyScore.DEBUG = false; - - -/***/ }), - -/***/ "./src/element.ts": -/*!************************!*\ - !*** ./src/element.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Element": () => (/* binding */ Element) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// MIT License - - - - -/** - * Element implements a generic base class for VexFlow, with implementations - * of general functions and properties that can be inherited by all VexFlow elements. - * - * The Element is an abstract class that needs to be subclassed to work. It handles - * style and text-font properties for the Element and any child elements, along with - * working with the Registry to create unique ids, but does not have any tools for - * formatting x or y positions or connections to a Stave. - */ -class Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; - } - static newID() { - return `auto${Element.ID++}`; - } - constructor() { - var _a; - // all Element objects keep a list of children that they are responsible and which - // inherit the style of their parents. - this.children = []; - this.attrs = { - id: Element.newID(), - type: this.getCategory(), - class: '', - }; - this.rendered = false; - // If a default registry exist, then register with it right away. - (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); - } - /** - * Adds a child Element to the Element, which lets it inherit the - * same style as the parent when setGroupStyle() is called. - * - * Examples of children are noteheads and stems. Modifiers such - * as Accidentals are generally not set as children. - * - * Note that StaveNote calls setGroupStyle() when setStyle() is called. - */ - addChildElement(child) { - this.children.push(child); - return this; - } - getCategory() { - return this.constructor.CATEGORY; - } - /** - * Set the element style used to render. - * - * Example: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.draw(); - * ``` - * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), - * the style can be applied to all of them by means of the context: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.getContext().setFillStyle('red'); - * element.getContext().setStrokeStyle('red'); - * element.draw(); - * ``` - * or using drawWithStyle: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.drawWithStyle(); - * ``` - */ - setStyle(style) { - this.style = style; - return this; - } - /** Set the element & associated children style used for rendering. */ - setGroupStyle(style) { - this.style = style; - this.children.forEach((child) => child.setGroupStyle(style)); - return this; - } - /** Get the element style used for rendering. */ - getStyle() { - return this.style; - } - /** Apply the element style to `context`. */ - applyStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.save(); - if (style.shadowColor) - context.setShadowColor(style.shadowColor); - if (style.shadowBlur) - context.setShadowBlur(style.shadowBlur); - if (style.fillStyle) - context.setFillStyle(style.fillStyle); - if (style.strokeStyle) - context.setStrokeStyle(style.strokeStyle); - if (style.lineWidth) - context.setLineWidth(style.lineWidth); - return this; - } - /** Restore the style of `context`. */ - restoreStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.restore(); - return this; - } - /** - * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) - * with the element's style (see `getStyle()` and `setStyle()`) - */ - drawWithStyle() { - this.checkContext(); - this.applyStyle(); - this.draw(); - this.restoreStyle(); - } - /** Check if it has a class label (An element can have multiple class labels). */ - hasClass(className) { - var _a; - if (!this.attrs.class) - return false; - return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; - } - /** Add a class label (An element can have multiple class labels). */ - addClass(className) { - var _a; - if (this.hasClass(className)) - return this; - if (!this.attrs.class) - this.attrs.class = `${className}`; - else - this.attrs.class = `${this.attrs.class} ${className}`; - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ - id: this.attrs.id, - name: 'class', - value: className, - oldValue: undefined, - }); - return this; - } - /** Remove a class label (An element can have multiple class labels). */ - removeClass(className) { - var _a, _b; - if (!this.hasClass(className)) - return this; - const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); - if (arr) { - arr.splice(arr.indexOf(className)); - this.attrs.class = arr.join(' '); - } - (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ - id: this.attrs.id, - name: 'class', - value: undefined, - oldValue: className, - }); - return this; - } - /** Call back from registry after the element is registered. */ - onRegister(registry) { - this.registry = registry; - return this; - } - /** Return the rendered status. */ - isRendered() { - return this.rendered; - } - /** Set the rendered status. */ - setRendered(rendered = true) { - this.rendered = rendered; - return this; - } - /** Return the element attributes. */ - getAttributes() { - return this.attrs; - } - /** Return an attribute, such as 'id', 'type' or 'class'. */ - // eslint-disable-next-line - getAttribute(name) { - return this.attrs[name]; - } - /** Return associated SVGElement. */ - getSVGElement(suffix = '') { - const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); - const element = document.getElementById(id); - if (element) - return element; - } - /** Set an attribute such as 'id', 'class', or 'type'. */ - setAttribute(name, value) { - var _a; - const oldID = this.attrs.id; - const oldValue = this.attrs[name]; - this.attrs[name] = value; - // Register with old id to support id changes. - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); - return this; - } - /** Get the boundingBox. */ - getBoundingBox() { - return this.boundingBox; - } - /** Return the context, such as an SVGContext or CanvasContext object. */ - getContext() { - return this.context; - } - /** Set the context to an SVGContext or CanvasContext object */ - setContext(context) { - this.context = context; - return this; - } - /** Validate and return the rendering context. */ - checkContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); - } - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Font Handling - /** - * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied - * to text (not glyphs). - */ - set font(f) { - this.setFont(f); - } - /** Returns the CSS compatible font string for the text font. */ - get font() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); - } - /** - * Set the element's text font family, size, weight, style - * (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * This attribute does not determine the font used for musical Glyphs like treble clefs. - * - * @param font is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * If no arguments are provided, then the font is set to the default font. - * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. - */ - setFont(font, size, weight, style) { - // Allow subclasses to override `TEXT_FONT`. - const defaultTextFont = this.constructor.TEXT_FONT; - const fontIsObject = typeof font === 'object'; - const fontIsString = typeof font === 'string'; - const fontIsUndefined = font === undefined; - const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; - if (fontIsObject) { - // `font` is case 1) a FontInfo object - this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); - } - else if (fontIsString && sizeWeightStyleAreUndefined) { - // `font` is case 2) CSS font shorthand. - this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); - } - else if (fontIsUndefined && sizeWeightStyleAreUndefined) { - // All arguments are undefined. Do not check for `arguments.length === 0`, - // which fails on the edge case: `setFont(undefined)`. - // TODO: See if we can remove this case entirely without introducing a visual diff. - // The else case below seems like it should be equivalent to this case. - this.textFont = Object.assign({}, defaultTextFont); - } - else { - // `font` is case 3) a font family string (e.g., 'Times New Roman'). - // The other parameters represent the size, weight, and style. - // It is okay for `font` to be undefined while one or more of the other arguments is provided. - // Following CSS conventions, unspecified params are reset to the default. - this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); - } - return this; - } - /** - * Get the css string describing this Element's text font. e.g., - * 'bold 10pt Arial'. - */ - getFont() { - if (!this.textFont) { - this.resetFont(); - } - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); - } - /** - * Reset the text font to the style indicated by the static `TEXT_FONT` property. - * Subclasses can call this to initialize `textFont` for the first time. - */ - resetFont() { - this.setFont(); - } - /** Return a copy of the current FontInfo object. */ - get fontInfo() { - if (!this.textFont) { - this.resetFont(); - } - // We can cast to Required here, because - // we just called resetFont() above to ensure this.textFont is set. - return Object.assign({}, this.textFont); - } - set fontInfo(fontInfo) { - this.setFont(fontInfo); - } - /** Change the font size, while keeping everything else the same. */ - setFontSize(size) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); - return this; - } - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. - */ - getFontSize() { - return this.fontSize; - } - /** - * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. - * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). - */ - set fontSize(size) { - this.setFontSize(size); - } - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - */ - get fontSize() { - let size = this.fontInfo.size; - if (typeof size === 'number') { - size = `${size}pt`; - } - return size; - } - /** - * @returns the font size in `pt`. - */ - get fontSizeInPoints() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); - } - /** - * @returns the font size in `px`. - */ - get fontSizeInPixels() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); - } - /** - * @returns a CSS font-style string (e.g., 'italic'). - */ - get fontStyle() { - return this.fontInfo.style; - } - set fontStyle(style) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); - } - /** - * @returns a CSS font-weight string (e.g., 'bold'). - * As in CSS, font-weight is always returned as a string, even if it was set as a number. - */ - get fontWeight() { - return this.fontInfo.weight + ''; - } - set fontWeight(weight) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); - } -} -Element.ID = 1000; -/** - * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` - * to customize the font for musical symbols placed on the score. - */ -Element.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/factory.ts": -/*!************************!*\ - !*** ./src/factory.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Factory": () => (/* binding */ Factory) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// MIT License - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Factory.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); -} -/** - * Factory implements a high level API around VexFlow. - */ -class Factory { - /** - * Static simplified function to access constructor without providing FactoryOptions - * - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` - */ - static newFromElementId(elementId, width = 500, height = 200) { - return new Factory({ renderer: { elementId, width, height } }); - } - /** - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` - */ - constructor(options = {}) { - L('New factory: ', options); - this.options = { - stave: { - space: 10, - }, - renderer: { - elementId: '', - width: 500, - height: 200, - background: '#FFF', - }, - font: Factory.TEXT_FONT, - }; - this.setOptions(options); - } - reset() { - this.renderQ = []; - this.systems = []; - this.staves = []; - this.voices = []; - this.stave = undefined; // current stave - } - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.initRenderer(); - this.reset(); - } - initRenderer() { - const { elementId, width, height, background } = this.options.renderer; - if (elementId == null) { - return; - } - if (elementId == '') { - L(this); - throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); - } - let backend = this.options.renderer.backend; - if (backend === undefined) { - const elem = document.getElementById(elementId); - // We use a custom type check here, because node-canvas mimics canvas, - // but is not an instance of window.HTMLCanvasElement. - // In fact, `window` might be undefined here. - // See: https://www.npmjs.com/package/canvas - if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { - backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; - } - else { - backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; - } - } - this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); - } - getContext() { - return this.context; - } - setContext(context) { - this.context = context; - return this; - } - getStave() { - return this.stave; - } - getVoices() { - return this.voices; - } - /** Return pixels from current stave spacing. */ - Stave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); - const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - TabStave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); - const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - StaveNote(noteStruct) { - const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GlyphNote(glyph, noteStruct, options) { - const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - RepeatNote(type, noteStruct, options) { - const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GhostNote(noteStruct) { - const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); - if (this.stave) - ghostNote.setStave(this.stave); - ghostNote.setContext(this.context); - this.renderQ.push(ghostNote); - return ghostNote; - } - TextNote(noteStruct) { - const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); - if (this.stave) - textNote.setStave(this.stave); - textNote.setContext(this.context); - this.renderQ.push(textNote); - return textNote; - } - BarNote(params = {}) { - const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); - if (this.stave) - barNote.setStave(this.stave); - barNote.setContext(this.context); - this.renderQ.push(barNote); - return barNote; - } - ClefNote(params) { - const p = Object.assign({ type: 'treble', options: { - size: 'default', - annotation: undefined, - } }, params); - const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); - if (this.stave) - clefNote.setStave(this.stave); - clefNote.setContext(this.context); - this.renderQ.push(clefNote); - return clefNote; - } - TimeSigNote(params) { - const p = Object.assign({ time: '4/4' }, params); - const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); - if (this.stave) - timeSigNote.setStave(this.stave); - timeSigNote.setContext(this.context); - this.renderQ.push(timeSigNote); - return timeSigNote; - } - KeySigNote(params) { - const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); - if (this.stave) - keySigNote.setStave(this.stave); - keySigNote.setContext(this.context); - this.renderQ.push(keySigNote); - return keySigNote; - } - TabNote(noteStruct) { - const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GraceNote(noteStruct) { - const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - return note; - } - GraceNoteGroup(params) { - const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); - group.setContext(this.context); - return group; - } - Accidental(params) { - const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); - accid.setContext(this.context); - return accid; - } - Annotation(params) { - const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); - const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); - annotation.setJustification(p.hJustify); - annotation.setVerticalJustification(p.vJustify); - annotation.setFont(p.font); - annotation.setContext(this.context); - return annotation; - } - ChordSymbol(params) { - const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); - const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); - chordSymbol.setHorizontal(p.hJustify); - chordSymbol.setVertical(p.vJustify); - chordSymbol.setEnableKerning(p.kerning); - chordSymbol.setReportWidth(p.reportWidth); - // There is a default font based on the engraving font. Only set then - // font if it is specific, else use the default - if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { - if (typeof p.fontWeight === 'string') - chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); - else - chordSymbol.setFont(p.fontFamily, p.fontSize, ''); - } - else if (typeof p.fontSize === 'number') { - chordSymbol.setFontSize(p.fontSize); - } - chordSymbol.setContext(this.context); - return chordSymbol; - } - Articulation(params) { - var _a; - const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); - if ((params === null || params === void 0 ? void 0 : params.position) != undefined) - articulation.setPosition(params.position); - if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) - articulation.setBetweenLines(params.betweenLines); - articulation.setContext(this.context); - return articulation; - } - Ornament(type, params) { - const options = Object.assign({ type, position: 0, accidental: '' }, params); - const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); - ornament.setPosition(options.position); - if (options.upperAccidental) { - ornament.setUpperAccidental(options.upperAccidental); - } - if (options.lowerAccidental) { - ornament.setLowerAccidental(options.lowerAccidental); - } - if (typeof options.delayed !== 'undefined') { - ornament.setDelayed(options.delayed); - } - ornament.setContext(this.context); - return ornament; - } - TextDynamics(params) { - const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); - const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ - text: p.text, - line: p.line, - duration: p.duration, - dots: p.dots, - }); - if (this.stave) - text.setStave(this.stave); - text.setContext(this.context); - this.renderQ.push(text); - return text; - } - Fingering(params) { - const p = Object.assign({ number: '0', position: 'left' }, params); - const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); - fingering.setPosition(p.position); - fingering.setContext(this.context); - return fingering; - } - StringNumber(params, drawCircle = true) { - const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); - stringNumber.setPosition(params.position); - stringNumber.setContext(this.context); - stringNumber.setDrawCircle(drawCircle); - return stringNumber; - } - TickContext() { - return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); - } - ModifierContext() { - return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); - } - MultiMeasureRest(params) { - const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); - const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); - multiMeasureRest.setContext(this.context); - this.renderQ.push(multiMeasureRest); - return multiMeasureRest; - } - Voice(params) { - const p = Object.assign({ time: '4/4' }, params); - const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); - this.voices.push(voice); - return voice; - } - StaveConnector(params) { - const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); - connector.setType(params.type).setContext(this.context); - this.renderQ.push(connector); - return connector; - } - Formatter(options) { - return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); - } - Tuplet(params) { - const p = Object.assign({ notes: [], options: {} }, params); - const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); - this.renderQ.push(tuplet); - return tuplet; - } - Beam(params) { - var _a, _b, _c, _d, _e; - const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); - beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); - if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { - Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { - beam.setPartialBeamSideAt(Number(noteIndex), direction); - }); - } - this.renderQ.push(beam); - return beam; - } - Curve(params) { - const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); - this.renderQ.push(curve); - return curve; - } - StaveTie(params) { - var _a; - const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }, params.text); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) - tie.setDirection(params.options.direction); - tie.setContext(this.context); - this.renderQ.push(tie); - return tie; - } - StaveLine(params) { - var _a, _b; - const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) - line.setText(params.options.text); - if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) - line.setFont(params.options.font); - line.setContext(this.context); - this.renderQ.push(line); - return line; - } - VibratoBracket(params) { - const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ - start: params.from, - stop: params.to, - }); - if (params.options.line) - vibratoBracket.setLine(params.options.line); - if (params.options.harsh) - vibratoBracket.setHarsh(params.options.harsh); - vibratoBracket.setContext(this.context); - this.renderQ.push(vibratoBracket); - return vibratoBracket; - } - TextBracket(params) { - const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ - start: params.from, - stop: params.to, - text: params.text, - superscript: params.options.superscript, - position: params.options.position, - }); - if (params.options.line) - textBracket.setLine(params.options.line); - if (params.options.font) - textBracket.setFont(params.options.font); - textBracket.setContext(this.context); - this.renderQ.push(textBracket); - return textBracket; - } - System(params = {}) { - params.factory = this; - const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); - this.systems.push(system); - return system; - } - /** - * Creates EasyScore. Normally the first step after constructing a Factory. For example: - * ``` - * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); - * const score: EasyScore = vf.EasyScore(); - * ``` - * @param options.factory optional instance of Factory - * @param options.builder instance of Builder - * @param options.commitHooks function to call after a note element is created - * @param options.throwOnError throw error in case of parsing error - */ - EasyScore(options = {}) { - options.factory = this; - return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); - } - PedalMarking(params) { - const p = Object.assign({ notes: [], options: { - style: 'mixed', - } }, params); - const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); - pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); - pedal.setContext(this.context); - this.renderQ.push(pedal); - return pedal; - } - NoteSubGroup(params) { - const p = Object.assign({ notes: [] }, params); - const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); - group.setContext(this.context); - return group; - } - /** Render the score. */ - draw() { - const ctx = this.context; - this.systems.forEach((s) => s.setContext(ctx).format()); - this.staves.forEach((s) => s.setContext(ctx).draw()); - this.voices.forEach((v) => v.setContext(ctx).draw()); - this.renderQ.forEach((e) => { - if (!e.isRendered()) - e.setContext(ctx).draw(); - }); - this.systems.forEach((s) => s.setContext(ctx).draw()); - this.reset(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ -Factory.DEBUG = false; -/** Default text font. */ -Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/flow.ts": -/*!*********************!*\ - !*** ./src/flow.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Flow": () => (/* binding */ Flow) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -class Flow { - static get BUILD() { - return { - /** version number. */ - VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, - /** git commit ID that this library was built from. */ - ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, - /** The date when this library was compiled. */ - DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, - }; - } - /** - * Examples: - * ``` - * Vex.Flow.setMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Bravura', 'Gonville'); - * ``` - * - * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). - * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: - * 'Bravura', 'Gonville', 'Custom'. - * - * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, - * which includes a single music font. Calling this method is unnecessary. - * - * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. - * In this case, the default music font stack is empty. - * Example: - * ``` - * await Vex.Flow.fetchMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Petaluma'); - * ... (do VexFlow stuff) ... - * ``` - * See `demos/fonts/` for more examples. - * - * @returns an array of Font objects corresponding to the provided `fontNames`. - */ - static setMusicFont(...fontNames) { - // Convert the array of font names into an array of Font objects. - const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; - _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); - _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); - return fonts; - } - /** - * Used with vexflow-core which supports dynamic font loading. - */ - // eslint-disable-next-line - static fetchMusicFont(fontName, fontModuleOrPath) { - return __awaiter(this, void 0, void 0, function* () { - // The default implementation does nothing. - // See vexflow-core.ts for the implementation that vexflow-core.js uses. - }); - } - static getMusicFont() { - const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; - return fonts.map((font) => font.getName()); - } - static get RENDER_PRECISION_PLACES() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; - } - static set RENDER_PRECISION_PLACES(precision) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; - } - static get SOFTMAX_FACTOR() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; - } - static set SOFTMAX_FACTOR(factor) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; - } - static get NOTATION_FONT_SCALE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; - } - static set NOTATION_FONT_SCALE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; - } - static get TABLATURE_FONT_SCALE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; - } - static set TABLATURE_FONT_SCALE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; - } - static get RESOLUTION() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; - } - static set RESOLUTION(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; - } - static get SLASH_NOTEHEAD_WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; - } - static set SLASH_NOTEHEAD_WIDTH(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; - } - static get STAVE_LINE_DISTANCE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; - } - static set STAVE_LINE_DISTANCE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; - } - static get STAVE_LINE_THICKNESS() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; - } - static set STAVE_LINE_THICKNESS(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; - } - static get STEM_HEIGHT() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; - } - static set STEM_HEIGHT(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; - } - static get STEM_WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; - } - static set STEM_WIDTH(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; - } - static get TIME4_4() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; - } - static get accidentalMap() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; - } - static get unicode() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; - } - static keySignature(spec) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); - } - static hasKeySignature(spec) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); - } - static getKeySignatures() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); - } - static clefProperties(clef) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); - } - // eslint-disable-next-line - static keyProperties(key, clef, params) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); - } - static durationToTicks(duration) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); - } -} -Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; -Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; -Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; -Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; -Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; -Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; -Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; -Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; -Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; -Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; -Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; -Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; -Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; -Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; -Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; -Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; -Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; -Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; -Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; -Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; -Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; -Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; -Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; -Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; -Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; -Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; -Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; -Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; -Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; -Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; -Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; -Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; -Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; -Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; -Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; -Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; -Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; -Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; -Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; -Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; -Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; -Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; -Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; -Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; -Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; -Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; -Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; -Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; -Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; -Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; -Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; -Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; -Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; -Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; -Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; -Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; -Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; -Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; -Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; -Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; -Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; -Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; -Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; -Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; -Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; -Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; -Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; -Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; -Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; -Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; -Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; -Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; -Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; -Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; -Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; -Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; -Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; -Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; -Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; -Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; -// Exported Enums. -// Sorted by the module / file they are exported from. -Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; -Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; -Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; -Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; -Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; -Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; -Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; -Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; -Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; -Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; -Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; -Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; -Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; -Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; -Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; -Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; -Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; -Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; - - -/***/ }), - -/***/ "./src/font.ts": -/*!*********************!*\ - !*** ./src/font.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Font": () => (/* binding */ Font), -/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), -/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -var FontWeight; -(function (FontWeight) { - FontWeight["NORMAL"] = "normal"; - FontWeight["BOLD"] = "bold"; -})(FontWeight || (FontWeight = {})); -var FontStyle; -(function (FontStyle) { - FontStyle["NORMAL"] = "normal"; - FontStyle["ITALIC"] = "italic"; -})(FontStyle || (FontStyle = {})); -// Internal element for parsing CSS font shorthand strings. -let fontParser; -const Fonts = {}; -class Font { - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of pixels that is equivalent to `fontSize` - */ - static convertSizeToPixelValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - // Assume the numeric fontSize is specified in pt. - return fontSize * Font.scaleToPxFrom.pt; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. - const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; - return value * conversionFactor; - } - } - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of points that is equivalent to `fontSize` - */ - static convertSizeToPointValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - // Assume the numeric fontSize is specified in pt. - return fontSize; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. - const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; - return value * conversionFactor; - } - } - /** - * @param f - * @param size - * @param weight - * @param style - * @returns the `size` field will include the units (e.g., '12pt', '16px'). - */ - static validate(f, size, weight, style) { - // If f is a string but all other arguments are undefined, we assume that - // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). - if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { - return Font.fromCSSString(f); - } - let family; - if (typeof f === 'object') { - // f is a FontInfo object, so we extract its fields. - family = f.family; - size = f.size; - weight = f.weight; - style = f.style; - } - else { - // f is a string representing the font family name or undefined. - family = f; - } - family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; - size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; - weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; - style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; - if (weight === '') { - weight = FontWeight.NORMAL; - } - if (style === '') { - style = FontStyle.NORMAL; - } - // If size is a number, we assume the unit is `pt`. - if (typeof size === 'number') { - size = `${size}pt`; - } - // If weight is a number (e.g., 900), turn it into a string representation of that number. - if (typeof weight === 'number') { - weight = weight.toString(); - } - // At this point, `family`, `size`, `weight`, and `style` are all strings. - return { family, size, weight, style }; - } - /** - * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). - */ - static fromCSSString(cssFontShorthand) { - // Let the browser parse this string for us. - // First, create a span element. - // Then, set its style.font and extract it back out. - if (!fontParser) { - fontParser = document.createElement('span'); - } - fontParser.style.font = cssFontShorthand; - const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; - return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; - } - /** - * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. - */ - static toCSSString(fontInfo) { - var _a; - if (!fontInfo) { - return ''; - } - let style; - const st = fontInfo.style; - if (st === FontStyle.NORMAL || st === '' || st === undefined) { - style = ''; // no space! Omit the style section. - } - else { - style = st.trim() + ' '; - } - let weight; - const wt = fontInfo.weight; - if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { - weight = ''; // no space! Omit the weight section. - } - else if (typeof wt === 'number') { - weight = wt + ' '; - } - else { - weight = wt.trim() + ' '; - } - let size; - const sz = fontInfo.size; - if (sz === undefined) { - size = Font.SIZE + 'pt '; - } - else if (typeof sz === 'number') { - size = sz + 'pt '; - } - else { - // size is already a string. - size = sz.trim() + ' '; - } - const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; - return `${style}${weight}${size}${family}`; - } - /** - * @param fontSize a number representing a font size, or a string font size with units. - * @param scaleFactor multiply the size by this factor. - * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). - * If the fontSize argument was a number, the return value will be a number. - * If the fontSize argument was a string, the return value will be a string. - */ - static scaleSize(fontSize, scaleFactor) { - if (typeof fontSize === 'number') { - return (fontSize * scaleFactor); - } - else { - const value = parseFloat(fontSize); - const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. - return `${value * scaleFactor}${unit}`; - } - } - /** - * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). - * @returns true if the font weight indicates bold. - */ - static isBold(weight) { - if (!weight) { - return false; - } - else if (typeof weight === 'number') { - return weight >= 600; - } - else { - // a string can be 'bold' or '700' - const parsedWeight = parseInt(weight, 10); - if (isNaN(parsedWeight)) { - return weight.toLowerCase() === 'bold'; - } - else { - return parsedWeight >= 600; - } - } - } - /** - * @param style - * @returns true if the font style indicates 'italic'. - */ - static isItalic(style) { - if (!style) { - return false; - } - else { - return style.toLowerCase() === FontStyle.ITALIC; - } - } - /** - * @param fontName - * @param woffURL The absolute or relative URL to the woff file. - * @param includeWoff2 If true, we assume that a woff2 file is in - * the same folder as the woff file, and will append a `2` to the url. - */ - // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. - // eslint-disable-next-line - // @ts-ignore - static loadWebFont(fontName, woffURL, includeWoff2 = true) { - return __awaiter(this, void 0, void 0, function* () { - const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; - const woff1URL = `url(${woffURL}) format('woff')`; - const woffURLs = woff2URL + woff1URL; - // eslint-disable-next-line - // @ts-ignore - const fontFace = new FontFace(fontName, woffURLs); - yield fontFace.load(); - // eslint-disable-next-line - // @ts-ignore - document.fonts.add(fontFace); - return fontFace; - }); - } - /** - * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: - * `await Vex.Flow.Font.loadWebFonts();` - * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), - * and a @font-face { font-family: ... } rule in your CSS. - * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, - * depending on the current music engraving font. - * - * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts - * for your app. - */ - static loadWebFonts() { - return __awaiter(this, void 0, void 0, function* () { - const host = Font.WEB_FONT_HOST; - const files = Font.WEB_FONT_FILES; - for (const fontName in files) { - const fontPath = files[fontName]; - Font.loadWebFont(fontName, host + fontPath); - } - }); - } - /** - * @param fontName - * @param data optionally set the Font object's `.data` property. - * This is usually done when setting up a font for the first time. - * @param metrics optionally set the Font object's `.metrics` property. - * This is usually done when setting up a font for the first time. - * @returns a Font object with the given `fontName`. - * Reuse an existing Font object if a matching one is found. - */ - static load(fontName, data, metrics) { - let font = Fonts[fontName]; - if (!font) { - font = new Font(fontName); - Fonts[fontName] = font; - } - if (data) { - font.setData(data); - } - if (metrics) { - font.setMetrics(metrics); - } - return font; - } - /** - * Use `Font.load(fontName)` to get a Font object. - * Do not call this constructor directly. - */ - constructor(fontName) { - this.name = fontName; - } - getName() { - return this.name; - } - getData() { - return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); - } - getMetrics() { - return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); - } - setData(data) { - this.data = data; - } - setMetrics(metrics) { - this.metrics = metrics; - } - hasData() { - return this.data !== undefined; - } - getResolution() { - return this.getData().resolution; - } - getGlyphs() { - return this.getData().glyphs; - } - /** - * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). - * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). - * @param defaultValue is returned if the lookup fails. - * @returns the retrieved value (or `defaultValue` if the lookup fails). - */ - // eslint-disable-next-line - lookupMetric(key, defaultValue) { - const keyParts = key.split('.'); - // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). - let currObj = this.getMetrics(); - for (let i = 0; i < keyParts.length; i++) { - const keyPart = keyParts[i]; - const value = currObj[keyPart]; - if (value === undefined) { - // If the key lookup fails, we fall back to the defaultValue. - return defaultValue; - } - // The most recent lookup succeeded, so we drill deeper into the object. - currObj = value; - } - // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. - return currObj; - } - /** For debugging. */ - toString() { - return '[' + this.name + ' Font]'; - } -} -////////////////////////////////////////////////////////////////////////////////////////////////// -// STATIC MEMBERS -/** Default sans-serif font family. */ -Font.SANS_SERIF = 'Arial, sans-serif'; -/** Default serif font family. */ -Font.SERIF = 'Times New Roman, serif'; -/** Default font size in `pt`. */ -Font.SIZE = 10; -// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in -/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ -Font.scaleToPxFrom = { - pt: 4 / 3, - px: 1, - em: 16, - '%': 4 / 25, - in: 96, - mm: 96 / 25.4, - cm: 96 / 2.54, -}; -/** - * Customize this field to specify a different CDN for delivering web fonts. - * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ - * Or you can use your own host. - */ -Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; -/** - * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when - * `await Font.loadWebFonts()` is called. Customize this field to specify a different - * set of fonts to load. See: `Font.loadWebFonts()`. - */ -Font.WEB_FONT_FILES = { - 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', - PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', -}; - - -/***/ }), - -/***/ "./src/fonts/bravura_glyphs.ts": -/*!*************************************!*\ - !*** ./src/fonts/bravura_glyphs.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) -/* harmony export */ }); -const BravuraFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 469, - y_min: 0, - y_max: 295, - ha: 295, - o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', - }, - bracketBottom: { - x_min: 0, - x_max: 469, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', - }, - barlineTick: { - x_min: 0, - x_max: 36, - y_min: 868, - y_max: 1120, - ha: 252, - o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 500, - y_min: 0, - y_max: 502, - ha: 502, - o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', - }, - segno: { - x_min: 4, - x_max: 550, - y_min: -27, - y_max: 759, - ha: 786, - o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', - }, - coda: { - x_min: -4, - x_max: 955, - y_min: -158, - y_max: 898, - ha: 1056, - o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', - }, - gClef: { - x_min: 0, - x_max: 671, - y_min: -658, - y_max: 1098, - ha: 1756, - o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', - }, - cClef: { - x_min: 0, - x_max: 699, - y_min: -506, - y_max: 506, - ha: 1012, - o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', - }, - fClef: { - x_min: -5, - x_max: 684, - y_min: -635, - y_max: 262, - ha: 897, - o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 382, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', - }, - '6stringTabClef': { - x_min: -3, - x_max: 408, - y_min: -748, - y_max: 764, - ha: 1512, - o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', - }, - timeSig0: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', - }, - timeSig1: { - x_min: 20, - x_max: 314, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', - }, - timeSig2: { - x_min: 20, - x_max: 426, - y_min: -257, - y_max: 254, - ha: 511, - o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', - }, - timeSig3: { - x_min: 20, - x_max: 401, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', - }, - timeSig4: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', - }, - timeSig5: { - x_min: 20, - x_max: 383, - y_min: -251, - y_max: 246, - ha: 497, - o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', - }, - timeSig6: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', - }, - timeSig7: { - x_min: 20, - x_max: 421, - y_min: -250, - y_max: 249, - ha: 499, - o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', - }, - timeSig8: { - x_min: 20, - x_max: 416, - y_min: -259, - y_max: 259, - ha: 518, - o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', - }, - timeSig9: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', - }, - timeSigCommon: { - x_min: 5, - x_max: 424, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 418, - y_min: -359, - y_max: 361, - ha: 720, - o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', - }, - timeSigPlus: { - x_min: -1, - x_max: 499, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', - }, - timeSigPlusSmall: { - x_min: -1, - x_max: 255, - y_min: -133, - y_max: 123, - ha: 256, - o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 448, - y_min: -35, - y_max: 40, - ha: 75, - o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', - }, - timeSigParensLeft: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 599, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 422, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 546, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 377, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 334, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 290, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 422, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 603, - y_min: -218, - y_max: 213, - ha: 431, - o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', - }, - noteheadCircledWhole: { - x_min: 0, - x_max: 437, - y_min: -225, - y_max: 211, - ha: 436, - o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', - }, - noteheadCircledHalf: { - x_min: -18, - x_max: 311, - y_min: -162, - y_max: 167, - ha: 329, - o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', - }, - noteheadCircledBlack: { - x_min: -21, - x_max: 321, - y_min: -171, - y_max: 167, - ha: 338, - o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 416, - y_min: -190, - y_max: 198, - ha: 388, - o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 292, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 207 -180 l 420 180 l 0 180 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 293, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 422 -180 l 207 180 l 0 -180 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 596, - y_min: -179, - y_max: 168, - ha: 347, - o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', - }, - noteheadSlashedWhole1: { - x_min: -22, - x_max: 433, - y_min: -157, - y_max: 148, - ha: 305, - o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', - }, - noteheadSlashedHalf1: { - x_min: -67, - x_max: 386, - y_min: -142, - y_max: 160, - ha: 302, - o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', - }, - noteheadSlashedBlack1: { - x_min: -80, - x_max: 375, - y_min: -165, - y_max: 167, - ha: 332, - o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 596, - y_min: -178, - y_max: 169, - ha: 347, - o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', - }, - noteheadSlashedWhole2: { - x_min: -18, - x_max: 436, - y_min: -154, - y_max: 151, - ha: 305, - o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 380, - y_min: -134, - y_max: 168, - ha: 302, - o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', - }, - noteheadSlashedBlack2: { - x_min: -79, - x_max: 376, - y_min: -164, - y_max: 168, - ha: 332, - o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 432, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 270, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 251, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', - }, - noteheadParenthesis: { - x_min: -73, - x_max: 368, - y_min: -180, - y_max: 182, - ha: 362, - o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', - }, - noteheadParenthesisRight: { - x_min: -36, - x_max: 73, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 109, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 315, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 -180 l 0 180 l 0 -180 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 180 l 0 -180 l 488 -180 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 278, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', - }, - tremolo1: { - x_min: -150, - x_max: 150, - y_min: -93, - y_max: 94, - ha: 187, - o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', - }, - flag8thUp: { - x_min: 0, - x_max: 264, - y_min: -810, - y_max: 9, - ha: 819, - o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', - }, - flag8thDown: { - x_min: 0, - x_max: 306, - y_min: -14, - y_max: 808, - ha: 822, - o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -813, - y_max: 2, - ha: 815, - o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', - }, - flag16thDown: { - x_min: 0, - x_max: 291, - y_min: -9, - y_max: 812, - ha: 821, - o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 149, - ha: 961, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 273, - y_min: -172, - y_max: 812, - ha: 984, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', - }, - flag64thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 347, - ha: 1159, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag64thDown: { - x_min: 0, - x_max: 273, - y_min: -376, - y_max: 812, - ha: 1188, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', - }, - flag128thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 533, - ha: 1345, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag128thDown: { - x_min: 0, - x_max: 273, - y_min: -580, - y_max: 812, - ha: 1392, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 226, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 168, - y_min: -335, - y_max: 341, - ha: 676, - o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 249, - y_min: -348, - y_max: 350, - ha: 698, - o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 247, - y_min: -125, - y_max: 127, - ha: 252, - o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 411, - y_min: -175, - y_max: 437, - ha: 612, - o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 1, - x_max: 227, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 1, - x_max: 466, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 179, - y_min: -353, - y_max: 307, - ha: 660, - o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 3, - x_max: 317, - y_min: -347, - y_max: 369, - ha: 716, - o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 1, - x_max: 287, - y_min: -174, - y_max: 438, - ha: 612, - o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', - }, - accidentalBakiyeFlat: { - x_min: -1, - x_max: 286, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 229, - y_min: -337, - y_max: 322, - ha: 659, - o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', - }, - accidentalKucukMucennebSharp: { - x_min: -1, - x_max: 339, - y_min: -338, - y_max: 321, - ha: 659, - o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 300, - y_min: -472, - y_max: 157, - ha: 629, - o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', - }, - accidentalSori: { - x_min: 0, - x_max: 421, - y_min: -318, - y_max: 328, - ha: 646, - o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 339, - y_min: 1, - y_max: 245, - ha: 244, - o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 339, - y_min: -244, - y_max: 0, - ha: 244, - o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', - }, - articTenutoAbove: { - x_min: -1, - x_max: 338, - y_min: 0, - y_max: 48, - ha: 48, - o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', - }, - articTenutoBelow: { - x_min: -1, - x_max: 338, - y_min: -48, - y_max: 0, - ha: 48, - o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 84, - y_min: 0, - y_max: 84, - ha: 84, - o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 84, - y_min: -84, - y_max: 0, - ha: 84, - o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', - }, - articStaccatissimoAbove: { - x_min: 1, - x_max: 100, - y_min: -2, - y_max: 293, - ha: 295, - o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', - }, - articStaccatissimoBelow: { - x_min: 1, - x_max: 100, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', - }, - articMarcatoAbove: { - x_min: -1, - x_max: 235, - y_min: -1, - y_max: 253, - ha: 254, - o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', - }, - articMarcatoBelow: { - x_min: -1, - x_max: 235, - y_min: -254, - y_max: 0, - ha: 254, - o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', - }, - fermataAbove: { - x_min: 3, - x_max: 605, - y_min: -3, - y_max: 329, - ha: 332, - o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', - }, - fermataBelow: { - x_min: 3, - x_max: 605, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 603, - y_min: -1, - y_max: 333, - ha: 334, - o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 603, - y_min: -333, - y_max: 1, - ha: 334, - o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: 0, - y_max: 408, - ha: 408, - o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 715, - y_min: -408, - y_max: 0, - ha: 408, - o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 726, - y_min: 0, - y_max: 449, - ha: 449, - o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 726, - y_min: -449, - y_max: 0, - ha: 449, - o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 604, - y_min: 0, - y_max: 341, - ha: 341, - o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 604, - y_min: -341, - y_max: 0, - ha: 341, - o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', - }, - breathMarkComma: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - breathMarkUpbow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - caesura: { - x_min: 0, - x_max: 384, - y_min: -1, - y_max: 532, - ha: 533, - o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 373, - y_min: 0, - y_max: 530, - ha: 530, - o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', - }, - restMaxima: { - x_min: 0, - x_max: 381, - y_min: -249, - y_max: 250, - ha: 499, - o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: 0, - y_max: 250, - ha: 250, - o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', - }, - restWhole: { - x_min: 0, - x_max: 282, - y_min: -135, - y_max: 9, - ha: 144, - o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', - }, - restWholeLegerLine: { - x_min: -117, - x_max: 399, - y_min: -135, - y_max: 20, - ha: 155, - o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', - }, - restHalf: { - x_min: 0, - x_max: 282, - y_min: -2, - y_max: 142, - ha: 144, - o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', - }, - restHalfLegerLine: { - x_min: -117, - x_max: 399, - y_min: -13, - y_max: 142, - ha: 155, - o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', - }, - restQuarter: { - x_min: 1, - x_max: 270, - y_min: -375, - y_max: 373, - ha: 748, - o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', - }, - rest8th: { - x_min: 0, - x_max: 247, - y_min: -251, - y_max: 174, - ha: 425, - o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', - }, - rest16th: { - x_min: 0, - x_max: 320, - y_min: -500, - y_max: 179, - ha: 679, - o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', - }, - rest32nd: { - x_min: 0, - x_max: 363, - y_min: -500, - y_max: 426, - ha: 926, - o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -753, - y_max: 430, - ha: 1183, - o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', - }, - rest128th: { - x_min: 0, - x_max: 485, - y_min: -750, - y_max: 689, - ha: 1439, - o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', - }, - dynamicPiano: { - x_min: -89, - x_max: 366, - y_min: -142, - y_max: 274, - ha: 416, - o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', - }, - dynamicMezzo: { - x_min: -20, - x_max: 446, - y_min: -10, - y_max: 274, - ha: 284, - o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', - }, - dynamicForte: { - x_min: -141, - x_max: 364, - y_min: -152, - y_max: 444, - ha: 596, - o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', - }, - dynamicRinforzando: { - x_min: -20, - x_max: 277, - y_min: 0, - y_max: 274, - ha: 274, - o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 229, - y_min: -10, - y_max: 273, - ha: 283, - o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', - }, - dynamicZ: { - x_min: -30, - x_max: 244, - y_min: -10, - y_max: 268, - ha: 278, - o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', - }, - ornamentTrill: { - x_min: 0, - x_max: 521, - y_min: -10, - y_max: 390, - ha: 400, - o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 460, - y_min: 0, - y_max: 218, - ha: 218, - o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 460, - y_min: -90, - y_max: 306, - ha: 396, - o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', - }, - ornamentMordent: { - x_min: 1, - x_max: 729, - y_min: -73, - y_max: 319, - ha: 392, - o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 725, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', - }, - ornamentTremblement: { - x_min: 1, - x_max: 985, - y_min: 0, - y_max: 244, - ha: 244, - o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1119, - y_min: 0, - y_max: 481, - ha: 481, - o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 2, - x_max: 1150, - y_min: -367, - y_max: 245, - ha: 612, - o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1048, - y_min: -367, - y_max: 331, - ha: 698, - o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 949, - y_min: 0, - y_max: 381, - ha: 381, - o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1278, - y_min: 0, - y_max: 247, - ha: 247, - o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1277, - y_min: -62, - y_max: 333, - ha: 395, - o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 859, - y_min: -222, - y_max: 246, - ha: 468, - o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', - }, - brassScoop: { - x_min: 1, - x_max: 320, - y_min: -373, - y_max: 13, - ha: 386, - o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 489, - y_min: -40, - y_max: 346, - ha: 386, - o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', - }, - brassFallLipShort: { - x_min: 1, - x_max: 293, - y_min: -345, - y_max: 42, - ha: 387, - o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', - }, - brassBend: { - x_min: 0, - x_max: 392, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 304, - y_min: 0, - y_max: 304, - ha: 304, - o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', - }, - brassFlip: { - x_min: 0, - x_max: 379, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 620, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', - }, - brassSmear: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 170, - ha: 170, - o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 318, - ha: 318, - o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', - }, - stringsUpBow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 200, - ha: 200, - o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 1019, - y_min: -8, - y_max: 555, - ha: 563, - o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 450, - y_min: 0, - y_max: 450, - ha: 450, - o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - wiggleArpeggiatoUp: { - x_min: -33, - x_max: 292, - y_min: 0, - y_max: 119, - ha: 119, - o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', - }, - arrowheadBlackUp: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', - }, - arrowheadBlackDown: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', - }, - arpeggiatoUp: { - x_min: 1, - x_max: 229, - y_min: 7, - y_max: 1511, - ha: 1504, - o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', - }, - arpeggiatoDown: { - x_min: 1, - x_max: 229, - y_min: -4, - y_max: 1500, - ha: 1504, - o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 762, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1232, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', - }, - csymDiminished: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', - }, - csymHalfDiminished: { - x_min: -16, - x_max: 488, - y_min: -15, - y_max: 489, - ha: 504, - o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', - }, - csymAugmented: { - x_min: 0, - x_max: 395, - y_min: 1, - y_max: 396, - ha: 395, - o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 558, - y_min: 1, - y_max: 477, - ha: 476, - o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', - }, - csymMinor: { - x_min: 0, - x_max: 325, - y_min: 216, - y_max: 260, - ha: 44, - o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', - }, - csymParensLeftTall: { - x_min: 1, - x_max: 185, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', - }, - csymParensRightTall: { - x_min: -20, - x_max: 164, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 155, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 156, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', - }, - csymParensRightVeryTall: { - x_min: -15, - x_max: 107, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 999, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', - }, - accSagittal5v7KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', - }, - accSagittal5v7KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', - }, - accSagittal5CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', - }, - accSagittal5CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', - }, - accSagittal7CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', - }, - accSagittal7CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal25SmallDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', - }, - accSagittal25SmallDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', - }, - accSagittal35MediumDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', - }, - accSagittal35MediumDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal11MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', - }, - accSagittal11MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', - }, - accSagittal11LargeDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal11LargeDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp25SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', - }, - accSagittalFlat25SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', - }, - accSagittalSharp7CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', - }, - accSagittalFlat7CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp5CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat5CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', - }, - accSagittalSharp5v7kDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', - }, - accSagittalFlat5v7kUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', - }, - accSagittalSharp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', - }, - accSagittalFlat: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', - }, - accSagittalSharp5v7kUp: { - x_min: 0, - x_max: 312, - y_min: -361, - y_max: 172, - ha: 533, - o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', - }, - accSagittalFlat5v7kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 361, - ha: 533, - o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', - }, - accSagittalSharp5CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', - }, - accSagittalFlat5CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', - }, - accSagittalSharp7CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', - }, - accSagittalFlat7CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp25SUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', - }, - accSagittalFlat25SDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', - }, - accSagittalSharp35MUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', - }, - accSagittalFlat35MDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', - }, - accSagittalSharp11MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', - }, - accSagittalFlat11MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', - }, - accSagittalSharp11LUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11LDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp35LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat35LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp25SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', - }, - accSagittalDoubleFlat25SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', - }, - accSagittalDoubleSharp7CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', - }, - accSagittalDoubleFlat7CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', - }, - accSagittalDoubleSharp5CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', - }, - accSagittalDoubleFlat5CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', - }, - accSagittalDoubleSharp5v7kDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', - }, - accSagittalDoubleFlat5v7kUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', - }, - accSagittalDoubleSharp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', - }, - accSagittalDoubleFlat: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', - }, - accSagittal7v11KleismaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', - }, - accSagittal7v11KleismaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal55CommaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', - }, - accSagittal55CommaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal7v11CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal7v11CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal5v11SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', - }, - accSagittal5v11SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat5v11SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', - }, - accSagittalFlat7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', - }, - accSagittalSharp55CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', - }, - accSagittalFlat55CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', - }, - accSagittalSharp17CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', - }, - accSagittalFlat17CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', - }, - accSagittalSharp7v11kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', - }, - accSagittalFlat7v11kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', - }, - accSagittalSharp7v11kUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', - }, - accSagittalFlat7v11kDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', - }, - accSagittalSharp17CUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17CDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp55CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat55CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', - }, - accSagittalSharp7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', - }, - accSagittalFlat7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', - }, - accSagittalFlat5v11SDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp5v11SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat5v11SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp7v11CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', - }, - accSagittalDoubleFlat7v11CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', - }, - accSagittalDoubleSharp55CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', - }, - accSagittalDoubleFlat55CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', - }, - accSagittalDoubleSharp17CDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', - }, - accSagittalDoubleFlat17CUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', - }, - accSagittalDoubleSharp7v11kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat7v11kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittal23CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', - }, - accSagittal23CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', - }, - accSagittal5v19CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', - }, - accSagittal5v19CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal5v23SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', - }, - accSagittal5v23SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittalSharp5v23SDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', - }, - accSagittalFlat5v23SUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', - }, - accSagittalFlat5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', - }, - accSagittalFlat23CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', - }, - accSagittalSharp23CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', - }, - accSagittalFlat23CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalFlat5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', - }, - accSagittalSharp5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalFlat5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', - }, - accSagittalDoubleSharp5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', - }, - accSagittalDoubleFlat5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', - }, - accSagittalDoubleSharp5v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', - }, - accSagittalDoubleFlat5v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', - }, - accSagittalDoubleSharp23CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalDoubleFlat23CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', - }, - accSagittal19SchismaUp: { - x_min: 0, - x_max: 125, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', - }, - accSagittal19SchismaDown: { - x_min: 0, - x_max: 125, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal143CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', - }, - accSagittal143CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal11v49CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', - }, - accSagittal11v49CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', - }, - accSagittal19CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal19CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal7v19CommaUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal7v19CommaDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal49SmallDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal49SmallDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal23SmallDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal23SmallDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal5v13MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', - }, - accSagittal5v13MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', - }, - accSagittal11v19MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', - }, - accSagittal11v19MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', - }, - accSagittal49MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', - }, - accSagittal49MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', - }, - accSagittal5v49MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', - }, - accSagittal5v49MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', - }, - accSagittal49LargeDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', - }, - accSagittal49LargeDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', - }, - accSagittal11v19LargeDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', - }, - accSagittal11v19LargeDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', - }, - accSagittal5v13LargeDiesisUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', - }, - accSagittal5v13LargeDiesisDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', - }, - accSagittalFlat23SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp49SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', - }, - accSagittalFlat49SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalSharp7v19CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', - }, - accSagittalFlat7v19CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', - }, - accSagittalSharp19CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', - }, - accSagittalFlat19CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', - }, - accSagittalSharp11v49CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat11v49CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', - }, - accSagittalSharp143CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat143CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp17kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', - }, - accSagittalFlat17kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', - }, - accSagittalSharp19sDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', - }, - accSagittalFlat19sUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', - }, - accSagittalSharp19sUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', - }, - accSagittalFlat19sDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', - }, - accSagittalSharp17kUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp143CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalFlat143CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp11v49CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', - }, - accSagittalFlat11v49CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', - }, - accSagittalSharp19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp49SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat49SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp23SUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat23SDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp5v13MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', - }, - accSagittalFlat5v13MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', - }, - accSagittalSharp11v19MUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11v19MDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp49MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', - }, - accSagittalFlat49MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', - }, - accSagittalSharp5v49MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', - }, - accSagittalFlat5v49MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', - }, - accSagittalSharp49LUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', - }, - accSagittalFlat49LDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', - }, - accSagittalSharp11v19LUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', - }, - accSagittalFlat11v19LDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', - }, - accSagittalSharp5v13LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat5v13LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalDoubleSharp23SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalDoubleFlat23SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', - }, - accSagittalDoubleSharp49SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', - }, - accSagittalDoubleFlat49SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalDoubleSharp7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalDoubleFlat7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', - }, - accSagittalDoubleSharp19CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', - }, - accSagittalDoubleFlat19CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', - }, - accSagittalDoubleSharp11v49CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat11v49CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp143CDown: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat143CUp: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp17kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat17kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittalDoubleSharp19sDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalDoubleFlat19sUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalShaftUp: { - x_min: 0, - x_max: 31, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', - }, - accSagittalShaftDown: { - x_min: 0, - x_max: 31, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', - }, - accSagittalAcute: { - x_min: 0, - x_max: 125, - y_min: -62, - y_max: 125, - ha: 187, - o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', - }, - accSagittalGrave: { - x_min: 0, - x_max: 125, - y_min: -125, - y_max: 62, - ha: 187, - o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', - }, - accSagittal1MinaUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal1MinaDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal2MinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal2MinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal1TinaUp: { - x_min: 0, - x_max: 93, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', - }, - accSagittal1TinaDown: { - x_min: 0, - x_max: 93, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', - }, - accSagittal2TinasUp: { - x_min: 0, - x_max: 94, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal2TinasDown: { - x_min: 0, - x_max: 94, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', - }, - accSagittal3TinasUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal3TinasDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal4TinasUp: { - x_min: 0, - x_max: 187, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal4TinasDown: { - x_min: 0, - x_max: 187, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal5TinasUp: { - x_min: 0, - x_max: 218, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal5TinasDown: { - x_min: 0, - x_max: 218, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal6TinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal6TinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal7TinasUp: { - x_min: 0, - x_max: 281, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal7TinasDown: { - x_min: 0, - x_max: 281, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal8TinasUp: { - x_min: 0, - x_max: 312, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal8TinasDown: { - x_min: 0, - x_max: 312, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal9TinasUp: { - x_min: -7, - x_max: 312, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal9TinasDown: { - x_min: -7, - x_max: 312, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittalFractionalTinaUp: { - x_min: -3, - x_max: 35, - y_min: 73, - y_max: 111, - ha: 38, - o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', - }, - accSagittalFractionalTinaDown: { - x_min: -3, - x_max: 35, - y_min: -111, - y_max: -73, - ha: 38, - o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 164, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 414, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 281, - y_min: -203, - y_max: 203, - ha: 406, - o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 281, - y_min: -186, - y_max: 186, - ha: 372, - o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', - }, - }, - fontFamily: 'Bravura', - resolution: 1000, - generatedOn: '2022-12-18T09:06:51.407Z', -}; - - -/***/ }), - -/***/ "./src/fonts/bravura_metrics.ts": -/*!**************************************!*\ - !*** ./src/fonts/bravura_metrics.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BravuraMetrics": () => (/* binding */ BravuraMetrics) -/* harmony export */ }); -/** - * The Bravura font was created by Daniel Spreadbury @ Steinberg. - * https://github.com/steinbergmedia/bravura/ - */ -const BravuraMetrics = { - name: 'Bravura', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by TimeSignature object - shiftLine: -1, - point: 34, - // used by tuplets - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/custom_glyphs.ts": -/*!************************************!*\ - !*** ./src/fonts/custom_glyphs.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) -/* harmony export */ }); -const CustomFont = { - resolution: 1000, - fontFamily: 'VexFlowCustom', - glyphs: { - noteheadSquareWhite: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ', - }, - accidentalBuyukMucennebFlat: { - x_min: -171.5, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalBakiyeFlat: { - x_min: -176.9375, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalKucukMucennebSharp: { - x_min: -1.359375, - x_max: 255.890625, - ha: 261, - o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ', - }, - accidentalKoron: { - x_min: -20, - x_max: 320, - ha: 257, - o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ', - }, - accidentalSori: { - x_min: -10.890625, - x_max: 299.4375, - ha: 294, - o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ', - }, - vexAccidentalMicrotonal1: { - x_min: -171.5, - x_max: 483.1875, - ha: 493, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', - }, - vexAccidentalMicrotonal2: { - x_min: -1.359375, - x_max: 386.5625, - ha: 394, - o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ', - }, - vexAccidentalMicrotonal3: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', - }, - vexAccidentalMicrotonal4: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', - }, - vexNoteHeadRectBlack: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', - }, - vexNoteHeadRectWhite: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', - }, - vexWiggleArpeggioUp: { - x_min: 58.53125, - x_max: 228.671875, - ha: 294, - o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/custom_metrics.ts": -/*!*************************************!*\ - !*** ./src/fonts/custom_metrics.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CustomMetrics": () => (/* binding */ CustomMetrics) -/* harmony export */ }); -const CustomMetrics = { - name: 'VexFlowCustom', - smufl: false, - glyphs: {}, -}; - - -/***/ }), - -/***/ "./src/fonts/gonville_glyphs.ts": -/*!**************************************!*\ - !*** ./src/fonts/gonville_glyphs.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) -/* harmony export */ }); -const GonvilleSmuflFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 387, - y_min: -87, - y_max: 139, - ha: 226, - o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z', - }, - bracketBottom: { - x_min: 0, - x_max: 387, - y_min: -139, - y_max: 87, - ha: 226, - o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z', - }, - barlineTick: { - x_min: -55, - x_max: 55, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z', - }, - breathMarkTick: { - x_min: -142, - x_max: 256, - y_min: 0, - y_max: 403, - ha: 403, - o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z', - }, - segno: { - x_min: -228, - x_max: 228, - y_min: -329, - y_max: 329, - ha: 657, - o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z', - }, - coda: { - x_min: -215, - x_max: 215, - y_min: -264, - y_max: 264, - ha: 529, - o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z', - }, - gClef: { - x_min: 0, - x_max: 586, - y_min: -594, - y_max: 1017, - ha: 1611, - o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z', - }, - cClef: { - x_min: 0, - x_max: 604, - y_min: -477, - y_max: 477, - ha: 955, - o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z', - }, - fClef: { - x_min: 0, - x_max: 622, - y_min: -512, - y_max: 238, - ha: 750, - o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z', - }, - unpitchedPercussionClef1: { - x_min: 160, - x_max: 481, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 471, - y_min: -691, - y_max: 707, - ha: 1398, - o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z', - }, - timeSig0: { - x_min: 0, - x_max: 357, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z', - }, - timeSig1: { - x_min: 0, - x_max: 239, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z', - }, - timeSig2: { - x_min: 0, - x_max: 317, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z', - }, - timeSig3: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z', - }, - timeSig4: { - x_min: 0, - x_max: 325, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z', - }, - timeSig5: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z', - }, - timeSig6: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSig7: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z', - }, - timeSig8: { - x_min: 0, - x_max: 338, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z', - }, - timeSig9: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 385, - y_min: -219, - y_max: 219, - ha: 438, - o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 385, - y_min: -371, - y_max: 371, - ha: 741, - o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 221, - y_min: 214, - y_max: 256, - ha: 43, - o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z', - }, - timeSigParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensRightSmall: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - timeSigParensLeftSmall: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 623, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 427, - y_min: -127, - y_max: 127, - ha: 253, - o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 414, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 336, - y_min: -168, - y_max: 168, - ha: 335, - o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 435, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 303, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 302, - y_min: -140, - y_max: 140, - ha: 279, - o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 435, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z', - }, - augmentationDot: { - x_min: -59, - x_max: 59, - y_min: -59, - y_max: 59, - ha: 118, - o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z', - }, - tremolo1: { - x_min: -143, - x_max: 297, - y_min: -550, - y_max: -237, - ha: 313, - o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z', - }, - flag8thUp: { - x_min: -16, - x_max: 220, - y_min: -700, - y_max: -4, - ha: 696, - o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z', - }, - flag8thDown: { - x_min: -14, - x_max: 255, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z', - }, - flag16thUp: { - x_min: -16, - x_max: 220, - y_min: -796, - y_max: -4, - ha: 793, - o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z', - }, - flag16thDown: { - x_min: -14, - x_max: 251, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z', - }, - flag32ndUp: { - x_min: -16, - x_max: 219, - y_min: -1039, - y_max: -4, - ha: 1035, - o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z', - }, - flag32ndDown: { - x_min: -14, - x_max: 253, - y_min: 4, - y_max: 935, - ha: 931, - o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z', - }, - flag64thUp: { - x_min: -16, - x_max: 219, - y_min: -1159, - y_max: -4, - ha: 1156, - o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z', - }, - flag64thDown: { - x_min: -14, - x_max: 255, - y_min: 3, - y_max: 1053, - ha: 1049, - o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z', - }, - flag128thUp: { - x_min: -16, - x_max: 217, - y_min: -1398, - y_max: -4, - ha: 1395, - o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z', - }, - flag128thDown: { - x_min: -14, - x_max: 254, - y_min: 4, - y_max: 1288, - ha: 1284, - o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z', - }, - accidentalFlat: { - x_min: -14, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 166, - y_min: -314, - y_max: 314, - ha: 627, - o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 225, - y_min: -364, - y_max: 364, - ha: 729, - o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 255, - y_min: -127, - y_max: 127, - ha: 255, - o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z', - }, - accidentalDoubleFlat: { - x_min: -14, - x_max: 334, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z', - }, - accidentalParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - accidentalParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 188, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 419, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 315, - y_min: -368, - y_max: 368, - ha: 735, - o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z', - }, - accidentalBuyukMucennebFlat: { - x_min: -117, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalBakiyeFlat: { - x_min: -121, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 176, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z', - }, - articAccentAbove: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articAccentBelow: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articTenutoAbove: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articTenutoBelow: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articStaccatoAbove: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatoBelow: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatissimoAbove: { - x_min: -50, - x_max: 50, - y_min: 0, - y_max: 173, - ha: 173, - o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z', - }, - articStaccatissimoBelow: { - x_min: -50, - x_max: 50, - y_min: -173, - y_max: 0, - ha: 173, - o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z', - }, - articMarcatoAbove: { - x_min: -107, - x_max: 107, - y_min: -240, - y_max: 18, - ha: 259, - o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z', - }, - articMarcatoBelow: { - x_min: -107, - x_max: 107, - y_min: -18, - y_max: 241, - ha: 259, - o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z', - }, - fermataAbove: { - x_min: -305, - x_max: 305, - y_min: 0, - y_max: 332, - ha: 332, - o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataBelow: { - x_min: -305, - x_max: 305, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 342, - ha: 342, - o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataLongBelow: { - x_min: -269, - x_max: 269, - y_min: -342, - y_max: 0, - ha: 342, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 412, - ha: 412, - o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataVeryLongBelow: { - x_min: -269, - x_max: 269, - y_min: -412, - y_max: 0, - ha: 412, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryShortAbove: { - x_min: -330, - x_max: 330, - y_min: 0, - y_max: 536, - ha: 536, - o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z', - }, - fermataVeryShortBelow: { - x_min: -330, - x_max: 330, - y_min: -536, - y_max: 0, - ha: 536, - o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z', - }, - fermataShortAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 441, - ha: 441, - o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataShortBelow: { - x_min: -269, - x_max: 269, - y_min: -441, - y_max: 0, - ha: 441, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - breathMarkUpbow: { - x_min: -118, - x_max: 118, - y_min: 0, - y_max: 385, - ha: 385, - o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z', - }, - caesura: { - x_min: 0, - x_max: 430, - y_min: -190, - y_max: 284, - ha: 474, - o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 348, - y_min: -195, - y_max: 292, - ha: 486, - o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z', - }, - restMaxima: { - x_min: 0, - x_max: 801, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 267, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z', - }, - restWhole: { - x_min: 0, - x_max: 310, - y_min: -118, - y_max: 0, - ha: 118, - o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z', - }, - restWholeLegerLine: { - x_min: 0, - x_max: 509, - y_min: -118, - y_max: 11, - ha: 128, - o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z', - }, - restHalf: { - x_min: 0, - x_max: 310, - y_min: 0, - y_max: 118, - ha: 118, - o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z', - }, - restHalfLegerLine: { - x_min: 0, - x_max: 509, - y_min: -11, - y_max: 118, - ha: 128, - o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z', - }, - restQuarter: { - x_min: 0, - x_max: 208, - y_min: -343, - y_max: 343, - ha: 686, - o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z', - }, - rest8th: { - x_min: 0, - x_max: 242, - y_min: -185, - y_max: 206, - ha: 391, - o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z', - }, - rest16th: { - x_min: 0, - x_max: 312, - y_min: -417, - y_max: 206, - ha: 623, - o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z', - }, - rest32nd: { - x_min: 0, - x_max: 381, - y_min: -417, - y_max: 438, - ha: 854, - o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z', - }, - rest64th: { - x_min: 0, - x_max: 451, - y_min: -648, - y_max: 438, - ha: 1086, - o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z', - }, - rest128th: { - x_min: 0, - x_max: 520, - y_min: -648, - y_max: 669, - ha: 1317, - o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z', - }, - dynamicPiano: { - x_min: -36, - x_max: 355, - y_min: -168, - y_max: 261, - ha: 428, - o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z', - }, - dynamicMezzo: { - x_min: 32, - x_max: 463, - y_min: -18, - y_max: 256, - ha: 274, - o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z', - }, - dynamicForte: { - x_min: -81, - x_max: 413, - y_min: -171, - y_max: 390, - ha: 561, - o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z', - }, - dynamicRinforzando: { - x_min: 55, - x_max: 336, - y_min: 0, - y_max: 258, - ha: 258, - o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z', - }, - dynamicSforzando: { - x_min: 49, - x_max: 262, - y_min: -21, - y_max: 254, - ha: 274, - o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z', - }, - dynamicZ: { - x_min: 22, - x_max: 291, - y_min: 2, - y_max: 235, - ha: 233, - o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z', - }, - ornamentTrill: { - x_min: -234, - x_max: 234, - y_min: 0, - y_max: 354, - ha: 354, - o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z', - }, - ornamentTurn: { - x_min: -292, - x_max: 292, - y_min: -134, - y_max: 134, - ha: 269, - o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z', - }, - ornamentTurnSlash: { - x_min: -292, - x_max: 292, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z', - }, - ornamentMordent: { - x_min: -278, - x_max: 278, - y_min: -202, - y_max: 186, - ha: 388, - o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z', - }, - ornamentShortTrill: { - x_min: -278, - x_max: 278, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z', - }, - ornamentTremblement: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z', - }, - ornamentPrecompAppoggTrill: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 240, - ha: 359, - o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 119, - ha: 348, - o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 186, - ha: 415, - o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: -407, - x_max: 407, - y_min: -119, - y_max: 229, - ha: 348, - o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: -413, - x_max: 413, - y_min: -119, - y_max: 222, - ha: 341, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: -413, - x_max: 413, - y_min: -202, - y_max: 222, - ha: 424, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: -413, - x_max: 413, - y_min: -222, - y_max: 119, - ha: 341, - o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z', - }, - stringsDownBow: { - x_min: -158, - x_max: 158, - y_min: 0, - y_max: 331, - ha: 331, - o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z', - }, - stringsUpBow: { - x_min: -103, - x_max: 103, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z', - }, - stringsHarmonic: { - x_min: -77, - x_max: 77, - y_min: -77, - y_max: 77, - ha: 154, - o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: -103, - x_max: 103, - y_min: -103, - y_max: 192, - ha: 296, - o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: -103, - x_max: 103, - y_min: -192, - y_max: 103, - ha: 296, - o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z', - }, - pluckedLeftHandPizzicato: { - x_min: -146, - x_max: 146, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 735, - y_min: -1, - y_max: 470, - ha: 471, - o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 409, - y_min: 61, - y_max: 470, - ha: 409, - o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z', - }, - pictChokeCymbal: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - arrowheadBlackUp: { - x_min: 11, - x_max: 239, - y_min: -6, - y_max: 269, - ha: 275, - o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', - }, - arrowheadBlackDown: { - x_min: 11, - x_max: 239, - y_min: 6, - y_max: 281, - ha: 275, - o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', - }, - }, - fontFamily: 'GonvilleSmufl', - resolution: 1000, - generatedOn: '2022-12-24T06:31:40.861Z', -}; - - -/***/ }), - -/***/ "./src/fonts/gonville_metrics.ts": -/*!***************************************!*\ - !*** ./src/fonts/gonville_metrics.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GonvilleMetrics": () => (/* binding */ GonvilleMetrics) -/* harmony export */ }); -/** - * The Gonville font was created by Simon Tatham. - * https://www.chiark.greenend.org.uk/~sgtatham/gonville/ - */ -const GonvilleMetrics = { - name: 'Gonville', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: 0, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: -40, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 50, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 40, - advanceWidth: 250, - yOffset: -402, - }, - accidentalFlat: { - leftSideBearing: -50, - advanceWidth: 208, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 20, - treble: { - line: -1.2, - shiftX: 11, - }, - }, - '8vb': { - point: 20, - treble: { - line: 6.3, - shiftX: 10, - }, - bass: { - line: 4, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 18, - treble: { - line: -0.4, - shiftX: 8, - }, - }, - '8vb': { - point: 18, - treble: { - line: 5.8, - shiftX: 6, - }, - bass: { - line: 3.5, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 17, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -9, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 3, - yOffset: -4, - stemUpYOffset: 10, - reportedWidth: 28, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 9, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 40, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - point: 40, - tupletPoint: 28, - }, - // articulation: { - // }, - tremolo: { - default: { - point: 25, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 9, - offsetXStemDown: -0.5, - }, - grace: { - point: 15, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 6.5, - offsetXStemDown: -0.5, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 0, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadBlack: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - glyphs: { - flag: { - shiftX: -0.08, - flag8thDown: { - shiftX: -0.16, - }, - flag16thDown: { - shiftX: -0.16, - }, - flag32ndDown: { - shiftX: -0.16, - shiftY: 9, - }, - flag64thDown: { - shiftX: -0.16, - shiftY: 13, - }, - flag128thDown: { - shiftX: -0.16, - shiftY: 22, - }, - flag32ndUp: { - shiftY: -9, - }, - flag64thUp: { - shiftY: -13, - }, - flag128thUp: { - shiftY: -22, - }, - }, - clef_default: { - point: 40, - '6stringTabClef': { - point: 40, - shiftY: -5.5, - }, - }, - clef_small: { - point: 32, - }, - clefNote_default: { - point: 40, - }, - clefNote_small: { - point: 32, - }, - textNote: { - point: 40, - default: {}, - ornamentTrill: { - shiftX: -5, - shiftY: 4, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.95, - }, - }, - ornament: { - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - tremolo: { - default: { - shiftY: -10, - }, - grace: { - shiftY: -5, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/leland_glyphs.ts": -/*!************************************!*\ - !*** ./src/fonts/leland_glyphs.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) -/* harmony export */ }); -const LelandFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 491, - y_min: 0, - y_max: 279, - ha: 279, - o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', - }, - bracketBottom: { - x_min: 0, - x_max: 491, - y_min: -279, - y_max: 0, - ha: 279, - o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', - }, - segno: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 869, - ha: 869, - o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', - }, - coda: { - x_min: 0, - x_max: 745, - y_min: -113, - y_max: 735, - ha: 848, - o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', - }, - gClef: { - x_min: 0, - x_max: 640, - y_min: -666, - y_max: 1112, - ha: 1778, - o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', - }, - cClef: { - x_min: 0, - x_max: 627, - y_min: -480, - y_max: 482, - ha: 962, - o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', - }, - fClef: { - x_min: 0, - x_max: 664, - y_min: -617, - y_max: 251, - ha: 868, - o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 352, - y_min: -252, - y_max: 252, - ha: 504, - o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 439, - y_min: -743, - y_max: 746, - ha: 1489, - o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', - }, - timeSig0: { - x_min: 15, - x_max: 389, - y_min: -254, - y_max: 255, - ha: 509, - o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', - }, - timeSig1: { - x_min: 15, - x_max: 336, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', - }, - timeSig2: { - x_min: 15, - x_max: 377, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', - }, - timeSig3: { - x_min: 15, - x_max: 364, - y_min: -244, - y_max: 244, - ha: 488, - o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', - }, - timeSig4: { - x_min: 14, - x_max: 442, - y_min: -248, - y_max: 249, - ha: 497, - o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', - }, - timeSig5: { - x_min: 15, - x_max: 362, - y_min: -244, - y_max: 246, - ha: 490, - o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', - }, - timeSig6: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', - }, - timeSig7: { - x_min: 15, - x_max: 366, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', - }, - timeSig8: { - x_min: 15, - x_max: 393, - y_min: -248, - y_max: 246, - ha: 494, - o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', - }, - timeSig9: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 463, - y_min: -256, - y_max: 258, - ha: 514, - o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 463, - y_min: -376, - y_max: 388, - ha: 764, - o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 408, - y_min: -204, - y_max: 204, - ha: 408, - o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 538, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 373, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 325, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 325, - y_min: -162, - y_max: 163, - ha: 325, - o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 432, - y_min: -179, - y_max: 177, - ha: 356, - o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 223 176 l 0 -196 l 446 -196 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', - }, - noteheadSlashedWhole1: { - x_min: -75, - x_max: 448, - y_min: -211, - y_max: 214, - ha: 425, - o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', - }, - noteheadSlashedHalf1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', - }, - noteheadSlashedBlack1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', - }, - noteheadSlashedWhole2: { - x_min: -75, - x_max: 448, - y_min: -212, - y_max: 214, - ha: 426, - o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', - }, - noteheadSlashedHalf2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', - }, - noteheadSlashedBlack2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 373, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 373, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', - }, - noteheadParenthesisRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 0 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 488 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', - }, - tremolo1: { - x_min: 0, - x_max: 290, - y_min: -93, - y_max: 96, - ha: 189, - o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', - }, - flag8thUp: { - x_min: 0, - x_max: 289, - y_min: -817, - y_max: 12, - ha: 829, - o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', - }, - flag8thDown: { - x_min: 0, - x_max: 309, - y_min: -12, - y_max: 817, - ha: 829, - o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -820, - y_max: 12, - ha: 832, - o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', - }, - flag16thDown: { - x_min: 0, - x_max: 309, - y_min: -26, - y_max: 803, - ha: 829, - o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 186, - ha: 1007, - o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 309, - y_min: -216, - y_max: 803, - ha: 1019, - o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag64thUp: { - x_min: 0, - x_max: 279, - y_min: -822, - y_max: 373, - ha: 1195, - o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', - }, - flag64thDown: { - x_min: 0, - x_max: 309, - y_min: -403, - y_max: 804, - ha: 1207, - o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', - }, - flag128thUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 573, - ha: 1394, - o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', - }, - flag128thDown: { - x_min: 0, - x_max: 309, - y_min: -591, - y_max: 803, - ha: 1394, - o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 203, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 171, - y_min: -323, - y_max: 325, - ha: 648, - o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 244, - y_min: -333, - y_max: 334, - ha: 667, - o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 275, - y_min: -137, - y_max: 138, - ha: 275, - o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 371, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 193, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 180, - y_min: -316, - y_max: 320, - ha: 636, - o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 290, - y_min: -328, - y_max: 339, - ha: 667, - o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalBakiyeFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 348, - y_min: -316, - y_max: 318, - ha: 634, - o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 361, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 361, - y_min: -235, - y_max: 0, - ha: 235, - o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 316, - y_min: 0, - y_max: 46, - ha: 46, - o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 316, - y_min: -46, - y_max: 0, - ha: 46, - o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 78, - y_min: 0, - y_max: 78, - ha: 78, - o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 78, - y_min: -78, - y_max: 0, - ha: 78, - o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 127, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 127, - y_min: -248, - y_max: 0, - ha: 248, - o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', - }, - articMarcatoAbove: { - x_min: 1, - x_max: 296, - y_min: 0, - y_max: 253, - ha: 253, - o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 295, - y_min: -253, - y_max: 0, - ha: 253, - o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', - }, - fermataAbove: { - x_min: 0, - x_max: 622, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', - }, - fermataBelow: { - x_min: 0, - x_max: 622, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 623, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 623, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 842, - y_min: 0, - y_max: 549, - ha: 549, - o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 842, - y_min: -549, - y_max: 0, - ha: 549, - o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 642, - y_min: 0, - y_max: 454, - ha: 454, - o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 642, - y_min: -454, - y_max: 0, - ha: 454, - o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 321, - ha: 321, - o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', - }, - caesura: { - x_min: 0, - x_max: 380, - y_min: 0, - y_max: 490, - ha: 490, - o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 368, - y_min: 0, - y_max: 491, - ha: 491, - o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', - }, - restMaxima: { - x_min: 0, - x_max: 450, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: -11, - y_max: 262, - ha: 273, - o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', - }, - restWhole: { - x_min: 0, - x_max: 325, - y_min: -131, - y_max: 5, - ha: 136, - o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', - }, - restWholeLegerLine: { - x_min: -139, - x_max: 464, - y_min: -122, - y_max: 14, - ha: 136, - o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', - }, - restHalf: { - x_min: 0, - x_max: 325, - y_min: -4, - y_max: 132, - ha: 136, - o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', - }, - restHalfLegerLine: { - x_min: -139, - x_max: 464, - y_min: -14, - y_max: 122, - ha: 136, - o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', - }, - restQuarter: { - x_min: 0, - x_max: 235, - y_min: -331, - y_max: 401, - ha: 732, - o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', - }, - rest8th: { - x_min: 0, - x_max: 276, - y_min: -255, - y_max: 204, - ha: 459, - o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', - }, - rest16th: { - x_min: 1, - x_max: 344, - y_min: -507, - y_max: 204, - ha: 711, - o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', - }, - rest32nd: { - x_min: 0, - x_max: 391, - y_min: -507, - y_max: 460, - ha: 967, - o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -758, - y_max: 464, - ha: 1222, - o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', - }, - rest128th: { - x_min: -1, - x_max: 475, - y_min: -759, - y_max: 717, - ha: 1476, - o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', - }, - dynamicPiano: { - x_min: -95, - x_max: 317, - y_min: -163, - y_max: 263, - ha: 426, - o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', - }, - dynamicMezzo: { - x_min: -7, - x_max: 374, - y_min: -2, - y_max: 251, - ha: 253, - o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', - }, - dynamicForte: { - x_min: -137, - x_max: 334, - y_min: -193, - y_max: 421, - ha: 614, - o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', - }, - dynamicRinforzando: { - x_min: -12, - x_max: 230, - y_min: 0, - y_max: 254, - ha: 254, - o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 208, - y_min: -5, - y_max: 263, - ha: 268, - o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', - }, - dynamicZ: { - x_min: -42, - x_max: 239, - y_min: -1, - y_max: 258, - ha: 259, - o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', - }, - ornamentTrill: { - x_min: -12, - x_max: 383, - y_min: 0, - y_max: 383, - ha: 383, - o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 456, - y_min: 0, - y_max: 232, - ha: 232, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 456, - y_min: -80, - y_max: 313, - ha: 393, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 473, - y_min: -77, - y_max: 316, - ha: 393, - o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 680, - y_min: 0, - y_max: 388, - ha: 388, - o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 248, - ha: 406, - o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 321, - ha: 479, - o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 662, - y_min: 0, - y_max: 406, - ha: 406, - o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 857, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 565, - y_min: -171, - y_max: 249, - ha: 420, - o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 280, - y_min: 0, - y_max: 280, - ha: 280, - o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 315, - y_min: 0, - y_max: 293, - ha: 293, - o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 343, - ha: 343, - o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 181, - y_min: 0, - y_max: 181, - ha: 181, - o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 981, - y_min: -10, - y_max: 545, - ha: 555, - o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 242, - y_min: 0, - y_max: 164, - ha: 164, - o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 735, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1243, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', - }, - csymDiminished: { - x_min: 0, - x_max: 501, - y_min: 0, - y_max: 501, - ha: 501, - o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', - }, - csymHalfDiminished: { - x_min: -1, - x_max: 502, - y_min: -1, - y_max: 502, - ha: 503, - o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', - }, - csymAugmented: { - x_min: 1, - x_max: 321, - y_min: 90, - y_max: 410, - ha: 320, - o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 500, - y_min: 10, - y_max: 490, - ha: 480, - o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 160, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 416, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - }, - fontFamily: 'Leland', - resolution: 1000, - generatedOn: '2022-12-19T23:52:37.756Z', -}; - - -/***/ }), - -/***/ "./src/fonts/leland_metrics.ts": -/*!*************************************!*\ - !*** ./src/fonts/leland_metrics.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "LelandMetrics": () => (/* binding */ LelandMetrics) -/* harmony export */ }); -const LelandMetrics = { - name: 'Leland', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by TimeSignature objects - shiftLine: -1, - point: 34, - // used by tuplets - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/load_all.ts": -/*!*******************************!*\ - !*** ./src/fonts/load_all.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) -/* harmony export */ }); -/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); -/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); -/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); -/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); -/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// vexflow.js statically bundles & preloads all of our music engraving fonts. - - - - - -// ADD_MUSIC_FONT -// import { loadXXX } from './load_xxx'; -// Populate our font "database" with all our music fonts. -function loadAllMusicFonts() { - (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); - (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); - (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); - (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); - (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); - // ADD_MUSIC_FONT - // loadXXX(); -} - - -/***/ }), - -/***/ "./src/fonts/load_bravura.ts": -/*!***********************************!*\ - !*** ./src/fonts/load_bravura.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); -/* harmony import */ var _bravura_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bravura_metrics */ "./src/fonts/bravura_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. -// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts -// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). -// ADD_MUSIC_FONT -// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. -// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. -// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js -// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. - - - -function loadBravura() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _bravura_metrics__WEBPACK_IMPORTED_MODULE_2__.BravuraMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_custom.ts": -/*!**********************************!*\ - !*** ./src/fonts/load_custom.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); -/* harmony import */ var _custom_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_metrics */ "./src/fonts/custom_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadCustom() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_1__.CustomFont, _custom_metrics__WEBPACK_IMPORTED_MODULE_2__.CustomMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_gonville.ts": -/*!************************************!*\ - !*** ./src/fonts/load_gonville.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); -/* harmony import */ var _gonville_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_metrics */ "./src/fonts/gonville_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadGonville() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_1__.GonvilleSmuflFont, _gonville_metrics__WEBPACK_IMPORTED_MODULE_2__.GonvilleMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_leland.ts": -/*!**********************************!*\ - !*** ./src/fonts/load_leland.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); -/* harmony import */ var _leland_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_metrics */ "./src/fonts/leland_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadLeland() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_1__.LelandFont, _leland_metrics__WEBPACK_IMPORTED_MODULE_2__.LelandMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_petaluma.ts": -/*!************************************!*\ - !*** ./src/fonts/load_petaluma.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); -/* harmony import */ var _petaluma_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_metrics */ "./src/fonts/petaluma_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadPetaluma() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_1__.PetalumaFont, _petaluma_metrics__WEBPACK_IMPORTED_MODULE_2__.PetalumaMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/petaluma_glyphs.ts": -/*!**************************************!*\ - !*** ./src/fonts/petaluma_glyphs.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) -/* harmony export */ }); -const PetalumaFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 508, - y_min: 0, - y_max: 370, - ha: 370, - o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', - }, - bracketBottom: { - x_min: 0, - x_max: 496, - y_min: -393, - y_max: 0, - ha: 393, - o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', - }, - barlineTick: { - x_min: 0, - x_max: 56, - y_min: 877, - y_max: 1122, - ha: 245, - o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 568, - y_min: 0, - y_max: 621, - ha: 621, - o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', - }, - segno: { - x_min: 0, - x_max: 798, - y_min: -65, - y_max: 806, - ha: 871, - o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', - }, - coda: { - x_min: 0, - x_max: 1380, - y_min: -196, - y_max: 1037, - ha: 1233, - o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', - }, - gClef: { - x_min: 0, - x_max: 664, - y_min: -559, - y_max: 1009, - ha: 1568, - o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', - }, - cClef: { - x_min: 0, - x_max: 731, - y_min: -543, - y_max: 543, - ha: 1086, - o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', - }, - fClef: { - x_min: 0, - x_max: 776, - y_min: -496, - y_max: 216, - ha: 712, - o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 379, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 438, - y_min: -768, - y_max: 767, - ha: 1535, - o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', - }, - timeSig0: { - x_min: 20, - x_max: 513, - y_min: -358, - y_max: 359, - ha: 717, - o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', - }, - timeSig1: { - x_min: 20, - x_max: 283, - y_min: -364, - y_max: 366, - ha: 730, - o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', - }, - timeSig2: { - x_min: 20, - x_max: 660, - y_min: -379, - y_max: 382, - ha: 761, - o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', - }, - timeSig3: { - x_min: 20, - x_max: 540, - y_min: -392, - y_max: 392, - ha: 784, - o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', - }, - timeSig4: { - x_min: 20, - x_max: 633, - y_min: -490, - y_max: 491, - ha: 981, - o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', - }, - timeSig5: { - x_min: 20, - x_max: 583, - y_min: -389, - y_max: 389, - ha: 778, - o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', - }, - timeSig6: { - x_min: 20, - x_max: 565, - y_min: -363, - y_max: 363, - ha: 726, - o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', - }, - timeSig7: { - x_min: 20, - x_max: 592, - y_min: -345, - y_max: 345, - ha: 690, - o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', - }, - timeSig8: { - x_min: 20, - x_max: 504, - y_min: -428, - y_max: 428, - ha: 856, - o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', - }, - timeSig9: { - x_min: 20, - x_max: 494, - y_min: -421, - y_max: 421, - ha: 842, - o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', - }, - timeSigCommon: { - x_min: 20, - x_max: 585, - y_min: -298, - y_max: 294, - ha: 592, - o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', - }, - timeSigCutCommon: { - x_min: 20, - x_max: 695, - y_min: -687, - y_max: 687, - ha: 1374, - o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 661, - y_min: -358, - y_max: 358, - ha: 716, - o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 418, - y_min: -197, - y_max: 199, - ha: 396, - o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 662, - y_min: -54, - y_max: 55, - ha: 109, - o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 274, - y_min: -723, - y_max: 725, - ha: 1448, - o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 154, - y_min: -422, - y_max: 422, - ha: 844, - o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', - }, - timeSigParensLeft: { - x_min: 1, - x_max: 400, - y_min: -728, - y_max: 728, - ha: 1456, - o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 173, - y_min: -405, - y_max: 404, - ha: 809, - o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 614, - y_min: -223, - y_max: 223, - ha: 446, - o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 380, - y_min: -186, - y_max: 165, - ha: 351, - o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 334, - y_min: -174, - y_max: 175, - ha: 349, - o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 334, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 730, - y_min: -266, - y_max: 267, - ha: 533, - o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 506, - y_min: -143, - y_max: 144, - ha: 287, - o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 421, - y_min: -146, - y_max: 151, - ha: 297, - o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 289, - y_min: -156, - y_max: 157, - ha: 313, - o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 437, - y_min: -220, - y_max: 219, - ha: 439, - o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 323, - y_min: -190, - y_max: 184, - ha: 374, - o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 309, - y_min: -179, - y_max: 179, - ha: 358, - o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 344, - y_min: -179, - y_max: 175, - ha: 354, - o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 672, - y_min: -291, - y_max: 291, - ha: 582, - o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', - }, - noteheadCircledWhole: { - x_min: -50, - x_max: 472, - y_min: -231, - y_max: 232, - ha: 463, - o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', - }, - noteheadCircledHalf: { - x_min: -50, - x_max: 393, - y_min: -175, - y_max: 175, - ha: 350, - o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', - }, - noteheadCircledBlack: { - x_min: -70, - x_max: 326, - y_min: -168, - y_max: 192, - ha: 360, - o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 474, - y_min: -209, - y_max: 211, - ha: 420, - o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 350, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 342, - y_min: -130, - y_max: 132, - ha: 262, - o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 697, - y_min: -290, - y_max: 290, - ha: 580, - o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', - }, - noteheadSlashedWhole1: { - x_min: -76, - x_max: 498, - y_min: -168, - y_max: 168, - ha: 336, - o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', - }, - noteheadSlashedHalf1: { - x_min: -79, - x_max: 471, - y_min: -184, - y_max: 184, - ha: 368, - o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', - }, - noteheadSlashedBlack1: { - x_min: -110, - x_max: 452, - y_min: -190, - y_max: 190, - ha: 380, - o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 697, - y_min: -295, - y_max: 295, - ha: 590, - o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', - }, - noteheadSlashedWhole2: { - x_min: -83, - x_max: 510, - y_min: -201, - y_max: 198, - ha: 399, - o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 454, - y_min: -188, - y_max: 188, - ha: 376, - o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', - }, - noteheadSlashedBlack2: { - x_min: -84, - x_max: 405, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 429, - y_min: -221, - y_max: 221, - ha: 442, - o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 271, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 295, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 310, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', - }, - noteheadParenthesis: { - x_min: -70, - x_max: 329, - y_min: -196, - y_max: 201, - ha: 397, - o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', - }, - noteheadParenthesisRight: { - x_min: -30, - x_max: 82, - y_min: -199, - y_max: 206, - ha: 405, - o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 106, - y_min: -197, - y_max: 197, - ha: 394, - o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 328, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 391, - y_min: -142, - y_max: 142, - ha: 284, - o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 398, - y_min: -139, - y_max: 140, - ha: 279, - o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 334, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', - }, - augmentationDot: { - x_min: 0, - x_max: 96, - y_min: -57, - y_max: 57, - ha: 114, - o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', - }, - tremolo1: { - x_min: -158, - x_max: 156, - y_min: -88, - y_max: 88, - ha: 176, - o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', - }, - flag8thUp: { - x_min: 0, - x_max: 261, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', - }, - flag8thDown: { - x_min: 0, - x_max: 261, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', - }, - flag16thUp: { - x_min: 0, - x_max: 327, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', - }, - flag16thDown: { - x_min: 0, - x_max: 327, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 268, - y_min: -849, - y_max: 149, - ha: 999, - o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', - }, - flag32ndDown: { - x_min: -3, - x_max: 268, - y_min: -169, - y_max: 829, - ha: 999, - o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', - }, - flag64thUp: { - x_min: -4, - x_max: 282, - y_min: -824, - y_max: 347, - ha: 1171, - o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', - }, - flag64thDown: { - x_min: -5, - x_max: 281, - y_min: -375, - y_max: 796, - ha: 1171, - o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', - }, - flag128thUp: { - x_min: 0, - x_max: 252, - y_min: -804, - y_max: 530, - ha: 1334, - o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', - }, - flag128thDown: { - x_min: -1, - x_max: 252, - y_min: -580, - y_max: 754, - ha: 1334, - o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', - }, - accidentalFlat: { - x_min: 1, - x_max: 209, - y_min: -208, - y_max: 472, - ha: 680, - o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 214, - y_min: -456, - y_max: 462, - ha: 918, - o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', - }, - accidentalSharp: { - x_min: -22, - x_max: 390, - y_min: -384, - y_max: 383, - ha: 767, - o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 287, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 359, - y_min: -220, - y_max: 446, - ha: 666, - o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 130, - y_min: -270, - y_max: 268, - ha: 538, - o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 139, - y_min: -275, - y_max: 277, - ha: 552, - o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 208, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: -23, - x_max: 388, - y_min: -373, - y_max: 445, - ha: 818, - o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 2, - x_max: 287, - y_min: -248, - y_max: 432, - ha: 680, - o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', - }, - accidentalBakiyeFlat: { - x_min: 2, - x_max: 287, - y_min: -236, - y_max: 444, - ha: 680, - o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 359, - y_min: -420, - y_max: 343, - ha: 763, - o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 303, - y_min: -462, - y_max: 180, - ha: 642, - o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', - }, - accidentalSori: { - x_min: 0, - x_max: 434, - y_min: -295, - y_max: 325, - ha: 620, - o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 425, - y_min: 0, - y_max: 326, - ha: 326, - o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 425, - y_min: -326, - y_max: 0, - ha: 326, - o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 471, - y_min: 0, - y_max: 56, - ha: 56, - o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 471, - y_min: -59, - y_max: -3, - ha: 56, - o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', - }, - articStaccatoAbove: { - x_min: 1, - x_max: 112, - y_min: 0, - y_max: 156, - ha: 156, - o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', - }, - articStaccatoBelow: { - x_min: 1, - x_max: 112, - y_min: -156, - y_max: 0, - ha: 156, - o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 139, - y_min: 0, - y_max: 411, - ha: 411, - o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 139, - y_min: -411, - y_max: 0, - ha: 411, - o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', - }, - articMarcatoAbove: { - x_min: 0, - x_max: 396, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 396, - y_min: -328, - y_max: 0, - ha: 328, - o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', - }, - fermataAbove: { - x_min: 0, - x_max: 472, - y_min: 2, - y_max: 454, - ha: 452, - o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', - }, - fermataBelow: { - x_min: 0, - x_max: 519, - y_min: -430, - y_max: -1, - ha: 429, - o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 591, - y_min: -6, - y_max: 337, - ha: 343, - o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 602, - y_min: -335, - y_max: 7, - ha: 342, - o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: -14, - y_max: 437, - ha: 451, - o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 686, - y_min: -427, - y_max: 30, - ha: 457, - o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 711, - y_min: -31, - y_max: 496, - ha: 527, - o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 697, - y_min: -475, - y_max: 13, - ha: 488, - o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 545, - y_min: -18, - y_max: 348, - ha: 366, - o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 565, - y_min: -335, - y_max: 10, - ha: 345, - o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 148, - y_min: 0, - y_max: 275, - ha: 275, - o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', - }, - breathMarkUpbow: { - x_min: 0, - x_max: 254, - y_min: 0, - y_max: 595, - ha: 595, - o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', - }, - caesura: { - x_min: 0, - x_max: 566, - y_min: 0, - y_max: 562, - ha: 563, - o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 386, - y_min: -10, - y_max: 584, - ha: 594, - o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', - }, - restMaxima: { - x_min: 0, - x_max: 366, - y_min: -255, - y_max: 255, - ha: 510, - o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 249, - ha: 249, - o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', - }, - restWhole: { - x_min: 1, - x_max: 500, - y_min: -120, - y_max: 14, - ha: 134, - o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', - }, - restWholeLegerLine: { - x_min: -197, - x_max: 685, - y_min: -157, - y_max: 29, - ha: 186, - o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', - }, - restHalf: { - x_min: 0, - x_max: 518, - y_min: 0, - y_max: 162, - ha: 162, - o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', - }, - restHalfLegerLine: { - x_min: -120, - x_max: 448, - y_min: -20, - y_max: 143, - ha: 163, - o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', - }, - restQuarter: { - x_min: 0, - x_max: 263, - y_min: -415, - y_max: 415, - ha: 830, - o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', - }, - rest8th: { - x_min: 0, - x_max: 289, - y_min: -260, - y_max: 261, - ha: 521, - o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', - }, - rest16th: { - x_min: 0, - x_max: 333, - y_min: -328, - y_max: 244, - ha: 572, - o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', - }, - rest32nd: { - x_min: 0, - x_max: 347, - y_min: -498, - y_max: 483, - ha: 981, - o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', - }, - rest64th: { - x_min: 0, - x_max: 428, - y_min: -720, - y_max: 474, - ha: 1194, - o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', - }, - rest128th: { - x_min: 1, - x_max: 491, - y_min: -711, - y_max: 719, - ha: 1430, - o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', - }, - dynamicPiano: { - x_min: -49, - x_max: 327, - y_min: -142, - y_max: 515, - ha: 657, - o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', - }, - dynamicMezzo: { - x_min: -18, - x_max: 559, - y_min: -50, - y_max: 365, - ha: 415, - o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', - }, - dynamicForte: { - x_min: -144, - x_max: 311, - y_min: -115, - y_max: 504, - ha: 619, - o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', - }, - dynamicRinforzando: { - x_min: -75, - x_max: 322, - y_min: -90, - y_max: 325, - ha: 415, - o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 296, - y_min: 0, - y_max: 379, - ha: 379, - o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', - }, - dynamicZ: { - x_min: -43, - x_max: 331, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', - }, - ornamentTrill: { - x_min: 1, - x_max: 551, - y_min: -18, - y_max: 539, - ha: 557, - o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 574, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 574, - y_min: -106, - y_max: 405, - ha: 511, - o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 700, - y_min: 0, - y_max: 497, - ha: 497, - o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 747, - y_min: 0, - y_max: 243, - ha: 243, - o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 982, - y_min: 0, - y_max: 224, - ha: 224, - o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1066, - y_min: -50, - y_max: 533, - ha: 583, - o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 1088, - y_min: -380, - y_max: 252, - ha: 632, - o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1185, - y_min: -380, - y_max: 465, - ha: 845, - o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 1003, - y_min: -20, - y_max: 521, - ha: 541, - o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1246, - y_min: -30, - y_max: 296, - ha: 326, - o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1226, - y_min: -237, - y_max: 436, - ha: 673, - o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 833, - y_min: -309, - y_max: 319, - ha: 628, - o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', - }, - brassScoop: { - x_min: 0, - x_max: 312, - y_min: -390, - y_max: 28, - ha: 418, - o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 476, - y_min: -50, - y_max: 333, - ha: 383, - o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', - }, - brassFallLipShort: { - x_min: 0, - x_max: 298, - y_min: -344, - y_max: 65, - ha: 409, - o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 807, - y_min: 0, - y_max: 838, - ha: 838, - o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 791, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', - }, - brassBend: { - x_min: 0, - x_max: 381, - y_min: 0, - y_max: 367, - ha: 367, - o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 274, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', - }, - brassMuteOpen: { - x_min: 1, - x_max: 313, - y_min: 0, - y_max: 309, - ha: 309, - o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', - }, - brassFlip: { - x_min: 0, - x_max: 402, - y_min: 0, - y_max: 361, - ha: 361, - o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 646, - y_min: 0, - y_max: 212, - ha: 212, - o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', - }, - brassSmear: { - x_min: 0, - x_max: 334, - y_min: 0, - y_max: 151, - ha: 151, - o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 366, - ha: 366, - o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 219, - y_min: 0, - y_max: 489, - ha: 489, - o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 202, - ha: 202, - o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 201, - y_min: 0, - y_max: 325, - ha: 325, - o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 211, - y_min: 0, - y_max: 307, - ha: 307, - o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 271, - y_min: 0, - y_max: 284, - ha: 284, - o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 944, - y_min: -13, - y_max: 550, - ha: 563, - o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 437, - y_min: 0, - y_max: 461, - ha: 461, - o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 147, - y_min: 0, - y_max: 242, - ha: 242, - o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 300, - y_min: 0, - y_max: 176, - ha: 176, - o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', - }, - arpeggiatoUp: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 1459, - ha: 1459, - o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', - }, - arpeggiatoDown: { - x_min: 0, - x_max: 218, - y_min: 0, - y_max: 1440, - ha: 1440, - o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 599, - y_min: -250, - y_max: 175, - ha: 425, - o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 775, - y_min: -247, - y_max: 363, - ha: 610, - o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1374, - y_min: -304, - y_max: 304, - ha: 608, - o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 630, - y_min: -225, - y_max: 265, - ha: 490, - o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', - }, - csymDiminished: { - x_min: 0, - x_max: 506, - y_min: 0, - y_max: 500, - ha: 500, - o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', - }, - csymHalfDiminished: { - x_min: -32, - x_max: 496, - y_min: -33, - y_max: 492, - ha: 525, - o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', - }, - csymAugmented: { - x_min: 0, - x_max: 530, - y_min: 0, - y_max: 539, - ha: 539, - o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 593, - y_min: 0, - y_max: 569, - ha: 569, - o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', - }, - csymMinor: { - x_min: 0, - x_max: 482, - y_min: 193, - y_max: 265, - ha: 72, - o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', - }, - csymParensLeftTall: { - x_min: 0, - x_max: 185, - y_min: 0, - y_max: 1034, - ha: 1034, - o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', - }, - csymParensRightTall: { - x_min: -40, - x_max: 189, - y_min: 0, - y_max: 1058, - ha: 1058, - o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 328, - y_min: 2, - y_max: 807, - ha: 805, - o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 829, - ha: 829, - o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 116, - y_min: 0, - y_max: 934, - ha: 934, - o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', - }, - csymParensRightVeryTall: { - x_min: -20, - x_max: 111, - y_min: 0, - y_max: 1009, - ha: 1009, - o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 990, - y_min: -27, - y_max: 1028, - ha: 1054, - o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 208, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 335, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 298, - y_min: -218, - y_max: 218, - ha: 436, - o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 284, - y_min: -163, - y_max: 163, - ha: 326, - o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', - }, - }, - fontFamily: 'Petaluma', - resolution: 1000, - generatedOn: '2022-12-18T09:07:50.817Z', -}; - - -/***/ }), - -/***/ "./src/fonts/petaluma_metrics.ts": -/*!***************************************!*\ - !*** ./src/fonts/petaluma_metrics.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaMetrics": () => (/* binding */ PetalumaMetrics) -/* harmony export */ }); -/** - * The Petaluma font was created by Steinberg Media. - * https://github.com/steinbergmedia/petaluma - */ -const PetalumaMetrics = { - name: 'Petaluma', - smufl: true, - stave: { - padding: 15, - endPaddingMax: 15, - endPaddingMin: 7, - unalignedNotePadding: 12, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -150, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['L'], - spacing: 20, - superSubRatio: 0.73, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -95, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: -25, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 150, - }, - csymParensRightTall: { - leftSideBearing: 40, - advanceWidth: 189, - yOffset: 150, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 210, - yOffset: 250, - }, - csymParensRightVeryTall: { - leftSideBearing: -100, - advanceWidth: 111, - yOffset: 250, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 100, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 0, - advanceWidth: 425, - yOffset: -422, - }, - accidentalFlat: { - leftSideBearing: -10, - advanceWidth: 228, - yOffset: -284, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 26, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 28, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 26, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 4, - yOffset: -8, - stemUpYOffset: 27, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 6, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 30, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by timesig - shiftLine: -1, - point: 22, - // used by tuplets - tupletPoint: 16, - shiftY: -2, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 13, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 8, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - displacedShiftX: -2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemDown: 1.8, - offsetYBaseStemUp: -1.8, - }, - noteheadBlack: { - offsetYBaseStemDown: 2, - offsetYBaseStemUp: -2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 20, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.77, - flag16thUp: { - shiftX: -0.75, - }, - flag32ndUp: { - shiftX: -0.85, - }, - flag64thUp: { - shiftX: -1.55, - }, - flag128thUp: { - shiftX: -1.3, - }, - flag16thDown: { - shiftX: -0.75, - }, - flag32ndDown: { - shiftX: -0.76, - }, - flag64thDown: { - shiftX: -1.5, - }, - flag128thDown: { - shiftX: -1.2, - }, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -10, - shiftY: 8, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - noteheadBlackStemUp: { - shiftX: 0.5, - }, - noteheadHalfStemUp: { - shiftX: 0.725, - }, - noteheadWholeStemUp: { - shiftX: 1, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.95, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.7, - }, - csymMajorSeventh: { - scale: 0.8, - }, - accidentalSharp: { - scale: 0.7, - }, - accidentalFlat: { - scale: 0.8, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/petalumascript_glyphs.ts": -/*!********************************************!*\ - !*** ./src/fonts/petalumascript_glyphs.ts ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) -/* harmony export */ }); -const PetalumaScriptFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 250, - y_min: 0, - y_max: 500, - ha: 500, - leftSideBearing: 0, - advanceWidth: 250, - }, - '0': { - x_min: 33, - x_max: 534, - y_min: -13, - y_max: 751, - ha: 764, - leftSideBearing: 33, - advanceWidth: 570, - }, - '1': { - x_min: 48, - x_max: 235, - y_min: -17, - y_max: 734, - ha: 751, - leftSideBearing: 48, - advanceWidth: 286, - }, - '2': { - x_min: 56, - x_max: 571, - y_min: -19, - y_max: 741, - ha: 760, - leftSideBearing: 56, - advanceWidth: 626, - }, - '3': { - x_min: 50, - x_max: 528, - y_min: -7, - y_max: 731, - ha: 738, - leftSideBearing: 50, - advanceWidth: 589, - }, - '4': { - x_min: 38, - x_max: 564, - y_min: -13, - y_max: 743, - ha: 756, - leftSideBearing: 38, - advanceWidth: 614, - }, - '5': { - x_min: 42, - x_max: 601, - y_min: -34, - y_max: 743, - ha: 777, - leftSideBearing: 42, - advanceWidth: 648, - }, - '6': { - x_min: 47, - x_max: 606, - y_min: -16, - y_max: 743, - ha: 759, - leftSideBearing: 47, - advanceWidth: 667, - }, - '7': { - x_min: 47, - x_max: 567, - y_min: 5, - y_max: 739, - ha: 734, - leftSideBearing: 0, - advanceWidth: 615, - }, - '8': { - x_min: 40, - x_max: 541, - y_min: -15, - y_max: 752, - ha: 767, - leftSideBearing: 40, - advanceWidth: 585, - }, - '9': { - x_min: 40, - x_max: 537, - y_min: -52, - y_max: 736, - ha: 788, - leftSideBearing: 40, - advanceWidth: 592, - }, - '!': { - x_min: 49, - x_max: 180, - y_min: -7, - y_max: 761, - ha: 768, - leftSideBearing: 49, - advanceWidth: 230, - }, - '"': { - x_min: 39, - x_max: 304, - y_min: 596, - y_max: 804, - ha: 208, - leftSideBearing: 39, - advanceWidth: 353, - }, - '#': { - x_min: 33, - x_max: 599, - y_min: -8, - y_max: 765, - ha: 773, - leftSideBearing: 33, - advanceWidth: 648, - }, - $: { - x_min: 53, - x_max: 495, - y_min: -111, - y_max: 823, - ha: 934, - leftSideBearing: 53, - advanceWidth: 560, - }, - '%': { - x_min: 35, - x_max: 656, - y_min: -128, - y_max: 808, - ha: 936, - leftSideBearing: 35, - advanceWidth: 711, - }, - '&': { - x_min: 53, - x_max: 441, - y_min: -3, - y_max: 753, - ha: 756, - leftSideBearing: 53, - advanceWidth: 500, - }, - "'": { - x_min: 43, - x_max: 161, - y_min: 590, - y_max: 811, - ha: 221, - leftSideBearing: 43, - advanceWidth: 217, - }, - '(': { - x_min: 41, - x_max: 311, - y_min: -36, - y_max: 845, - ha: 881, - leftSideBearing: 41, - advanceWidth: 308, - }, - ')': { - x_min: -8, - x_max: 257, - y_min: -21, - y_max: 852, - ha: 873, - leftSideBearing: -8, - advanceWidth: 280, - }, - '*': { - x_min: 59, - x_max: 539, - y_min: 175, - y_max: 589, - ha: 414, - leftSideBearing: 59, - advanceWidth: 601, - }, - '+': { - x_min: 33, - x_max: 361, - y_min: 180, - y_max: 587, - ha: 407, - leftSideBearing: 33, - advanceWidth: 400, - }, - ',': { - x_min: 15, - x_max: 176, - y_min: -129, - y_max: 92, - ha: 221, - leftSideBearing: 15, - advanceWidth: 205, - }, - '-': { - x_min: 40, - x_max: 380, - y_min: 317, - y_max: 452, - ha: 135, - leftSideBearing: 40, - advanceWidth: 422, - }, - '.': { - x_min: 48, - x_max: 185, - y_min: -56, - y_max: 84, - ha: 140, - leftSideBearing: 48, - advanceWidth: 227, - }, - '/': { - x_min: -58, - x_max: 654, - y_min: -122, - y_max: 844, - ha: 966, - leftSideBearing: -58, - advanceWidth: 626, - }, - ':': { - x_min: 65, - x_max: 225, - y_min: 97, - y_max: 536, - ha: 439, - leftSideBearing: 65, - advanceWidth: 302, - }, - ';': { - x_min: 13, - x_max: 295, - y_min: -139, - y_max: 536, - ha: 675, - leftSideBearing: 13, - advanceWidth: 334, - }, - '<': { - x_min: 28, - x_max: 438, - y_min: -1, - y_max: 607, - ha: 608, - leftSideBearing: 28, - advanceWidth: 475, - }, - '=': { - x_min: 40, - x_max: 383, - y_min: 199.9598640852289, - y_max: 541, - ha: 341.0401359147711, - leftSideBearing: 40, - advanceWidth: 422, - }, - '>': { - x_min: 35, - x_max: 421, - y_min: 28, - y_max: 632, - ha: 604, - leftSideBearing: 35, - advanceWidth: 466, - }, - '?': { - x_min: 45, - x_max: 548, - y_min: -17, - y_max: 767, - ha: 784, - leftSideBearing: 45, - advanceWidth: 592, - }, - '@': { - x_min: 51, - x_max: 730, - y_min: -78, - y_max: 753, - ha: 831, - leftSideBearing: 51, - advanceWidth: 781, - }, - A: { - x_min: 37, - x_max: 554, - y_min: -4, - y_max: 746, - ha: 750, - leftSideBearing: 37, - advanceWidth: 617, - }, - B: { - x_min: 37, - x_max: 532, - y_min: 3, - y_max: 783, - ha: 780, - leftSideBearing: 37, - advanceWidth: 579, - }, - C: { - x_min: 37, - x_max: 583, - y_min: -3, - y_max: 775, - ha: 778, - leftSideBearing: 37, - advanceWidth: 623, - }, - D: { - x_min: 50, - x_max: 530, - y_min: -15, - y_max: 749, - ha: 764, - leftSideBearing: 50, - advanceWidth: 579, - }, - E: { - x_min: 45, - x_max: 531, - y_min: -1, - y_max: 743, - ha: 744, - leftSideBearing: 45, - advanceWidth: 585, - }, - F: { - x_min: 45, - x_max: 459, - y_min: 23, - y_max: 727, - ha: 704, - leftSideBearing: 45, - advanceWidth: 510, - }, - G: { - x_min: 31, - x_max: 577, - y_min: -8, - y_max: 733, - ha: 741, - leftSideBearing: 31, - advanceWidth: 611, - }, - H: { - x_min: 37, - x_max: 493, - y_min: -22, - y_max: 758, - ha: 780, - leftSideBearing: 37, - advanceWidth: 535, - }, - I: { - x_min: 47, - x_max: 501, - y_min: -3, - y_max: 731, - ha: 734, - leftSideBearing: 47, - advanceWidth: 541, - }, - J: { - x_min: 33, - x_max: 531, - y_min: -23, - y_max: 725, - ha: 748, - leftSideBearing: 33, - advanceWidth: 573, - }, - K: { - x_min: 43, - x_max: 505, - y_min: -10, - y_max: 740, - ha: 750, - leftSideBearing: 43, - advanceWidth: 560, - }, - L: { - x_min: 49, - x_max: 457, - y_min: -2, - y_max: 746, - ha: 748, - leftSideBearing: 49, - advanceWidth: 510, - }, - M: { - x_min: 35, - x_max: 699, - y_min: 1, - y_max: 744, - ha: 743, - leftSideBearing: 35, - advanceWidth: 743, - }, - N: { - x_min: 34, - x_max: 533, - y_min: -17, - y_max: 761, - ha: 778, - leftSideBearing: 34, - advanceWidth: 579, - }, - O: { - x_min: 41, - x_max: 608, - y_min: -5, - y_max: 735, - ha: 740, - leftSideBearing: 41, - advanceWidth: 667, - }, - P: { - x_min: 53, - x_max: 451, - y_min: -18, - y_max: 735, - ha: 753, - leftSideBearing: 53, - advanceWidth: 497, - }, - Q: { - x_min: 40, - x_max: 599, - y_min: -67, - y_max: 744, - ha: 811, - leftSideBearing: 40, - advanceWidth: 648, - }, - R: { - x_min: 39, - x_max: 487, - y_min: 16, - y_max: 735, - ha: 719, - leftSideBearing: 39, - advanceWidth: 535, - }, - S: { - x_min: 35, - x_max: 552, - y_min: -47, - y_max: 708, - ha: 755, - leftSideBearing: 35, - advanceWidth: 604, - }, - T: { - x_min: 26, - x_max: 656, - y_min: -13, - y_max: 718, - ha: 731, - leftSideBearing: 26, - advanceWidth: 705, - }, - U: { - x_min: 41, - x_max: 518, - y_min: -20, - y_max: 748, - ha: 768, - leftSideBearing: 41, - advanceWidth: 567, - }, - V: { - x_min: 47, - x_max: 509, - y_min: -26, - y_max: 744, - ha: 770, - leftSideBearing: 47, - advanceWidth: 567, - }, - W: { - x_min: 44, - x_max: 789, - y_min: -35, - y_max: 720, - ha: 755, - leftSideBearing: 44, - advanceWidth: 833, - }, - X: { - x_min: 63, - x_max: 635, - y_min: -10, - y_max: 745, - ha: 755, - leftSideBearing: 63, - advanceWidth: 680, - }, - Y: { - x_min: 43, - x_max: 503, - y_min: -21, - y_max: 734, - ha: 755, - leftSideBearing: 43, - advanceWidth: 541, - }, - Z: { - x_min: 42, - x_max: 584, - y_min: -10, - y_max: 739, - ha: 749, - leftSideBearing: 42, - advanceWidth: 629, - }, - '[': { - x_min: 46, - x_max: 346, - y_min: -150, - y_max: 884, - ha: 1034, - leftSideBearing: 46, - advanceWidth: 291, - }, - '\\': { - x_min: 20, - x_max: 616, - y_min: -100, - y_max: 797, - ha: 897, - leftSideBearing: 20, - advanceWidth: 645, - }, - ']': { - x_min: -76, - x_max: 226, - y_min: -150, - y_max: 881, - ha: 1031, - leftSideBearing: -76, - advanceWidth: 297, - }, - '^': { - x_min: 43, - x_max: 437, - y_min: 517, - y_max: 812, - ha: 295, - leftSideBearing: 43, - advanceWidth: 478, - }, - _: { - x_min: 29, - x_max: 563, - y_min: -110, - y_max: -1, - ha: 109, - leftSideBearing: 29, - advanceWidth: 598, - }, - '`': { - x_min: 54, - x_max: 321, - y_min: 540, - y_max: 747, - ha: 207, - leftSideBearing: 54, - advanceWidth: 368, - }, - a: { - x_min: 20, - x_max: 447, - y_min: -17, - y_max: 495, - ha: 512, - leftSideBearing: 20, - advanceWidth: 494, - }, - b: { - x_min: 37, - x_max: 466, - y_min: -27, - y_max: 770, - ha: 797, - leftSideBearing: 37, - advanceWidth: 510, - }, - c: { - x_min: 35, - x_max: 456, - y_min: -9, - y_max: 507, - ha: 516, - leftSideBearing: 35, - advanceWidth: 460, - }, - d: { - x_min: 45, - x_max: 520, - y_min: -15, - y_max: 764, - ha: 779, - leftSideBearing: 45, - advanceWidth: 560, - }, - e: { - x_min: 33, - x_max: 370, - y_min: -5, - y_max: 501, - ha: 506, - leftSideBearing: 33, - advanceWidth: 397, - }, - f: { - x_min: 35, - x_max: 411, - y_min: -13, - y_max: 695, - ha: 708, - leftSideBearing: 35, - advanceWidth: 453, - }, - g: { - x_min: 33, - x_max: 551, - y_min: -257, - y_max: 505, - ha: 762, - leftSideBearing: 33, - advanceWidth: 611, - }, - h: { - x_min: 32, - x_max: 458, - y_min: -29, - y_max: 743, - ha: 772, - leftSideBearing: 32, - advanceWidth: 491, - }, - i: { - x_min: 45, - x_max: 167, - y_min: -13, - y_max: 631, - ha: 644, - leftSideBearing: 45, - advanceWidth: 220, - }, - j: { - x_min: -127, - x_max: 261, - y_min: -231, - y_max: 601, - ha: 832, - leftSideBearing: -127, - advanceWidth: 308, - }, - k: { - x_min: 39, - x_max: 443, - y_min: -3, - y_max: 700, - ha: 703, - leftSideBearing: 39, - advanceWidth: 497, - }, - l: { - x_min: 58, - x_max: 168, - y_min: -8, - y_max: 686, - ha: 694, - leftSideBearing: 58, - advanceWidth: 227, - }, - m: { - x_min: 39, - x_max: 688, - y_min: -14, - y_max: 501, - ha: 515, - leftSideBearing: 39, - advanceWidth: 718, - }, - n: { - x_min: 45, - x_max: 491, - y_min: -32, - y_max: 512, - ha: 544, - leftSideBearing: 45, - advanceWidth: 541, - }, - o: { - x_min: 41, - x_max: 424, - y_min: -12, - y_max: 493, - ha: 505, - leftSideBearing: 41, - advanceWidth: 447, - }, - p: { - x_min: 25, - x_max: 529, - y_min: -260, - y_max: 500, - ha: 760, - leftSideBearing: 25, - advanceWidth: 573, - }, - q: { - x_min: 53, - x_max: 603, - y_min: -235, - y_max: 514, - ha: 749, - leftSideBearing: 53, - advanceWidth: 623, - }, - r: { - x_min: 32, - x_max: 407, - y_min: -7, - y_max: 492, - ha: 499, - leftSideBearing: 32, - advanceWidth: 460, - }, - s: { - x_min: 49, - x_max: 416, - y_min: -12, - y_max: 519, - ha: 531, - leftSideBearing: 49, - advanceWidth: 460, - }, - t: { - x_min: 32, - x_max: 442, - y_min: -5, - y_max: 684, - ha: 689, - leftSideBearing: 32, - advanceWidth: 469, - }, - u: { - x_min: 41, - x_max: 487, - y_min: -5, - y_max: 507, - ha: 512, - leftSideBearing: 41, - advanceWidth: 510, - }, - v: { - x_min: 16, - x_max: 441, - y_min: -20, - y_max: 542, - ha: 562, - leftSideBearing: 16, - advanceWidth: 456, - }, - w: { - x_min: 39, - x_max: 639, - y_min: -22, - y_max: 505, - ha: 527, - leftSideBearing: 39, - advanceWidth: 661, - }, - x: { - x_min: 15, - x_max: 505, - y_min: -39, - y_max: 539, - ha: 578, - leftSideBearing: 15, - advanceWidth: 541, - }, - y: { - x_min: -98, - x_max: 501, - y_min: -242, - y_max: 511, - ha: 753, - leftSideBearing: -98, - advanceWidth: 548, - }, - z: { - x_min: 27, - x_max: 479, - y_min: -3, - y_max: 494, - ha: 497, - leftSideBearing: 27, - advanceWidth: 494, - }, - '{': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '|': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '}': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '~': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - }, - fontFamily: 'PetalumaScript', - resolution: 1000, - generatedOn: '2020-06-14T18:33:25.407Z', -}; - - -/***/ }), - -/***/ "./src/fonts/robotoslab_glyphs.ts": -/*!****************************************!*\ - !*** ./src/fonts/robotoslab_glyphs.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) -/* harmony export */ }); -const RobotoSlabFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 509, - y_min: 0, - y_max: 2000, - ha: 2000, - leftSideBearing: 0, - advanceWidth: 509, - }, - '0': { - x_min: 121, - x_max: 1048, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1168, - }, - '1': { - x_min: 117, - x_max: 767, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 117, - advanceWidth: 844, - }, - '2': { - x_min: 75.8474576645637, - x_max: 1040, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 75, - advanceWidth: 1131, - }, - '3': { - x_min: 74.85365853658536, - x_max: 994, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1106, - }, - '4': { - x_min: 63, - x_max: 1114, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1187, - }, - '5': { - x_min: 96.8448275474953, - x_max: 982, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 96, - advanceWidth: 1081, - }, - '6': { - x_min: 121, - x_max: 1067, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1144, - }, - '7': { - x_min: 76, - x_max: 1060, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: -30, - advanceWidth: 1128, - }, - '8': { - x_min: 92, - x_max: 1039, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 92, - advanceWidth: 1131, - }, - '9': { - x_min: 84, - x_max: 1026, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 84, - advanceWidth: 1154, - }, - '!': { - x_min: 143, - x_max: 340, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 143, - advanceWidth: 483, - }, - '"': { - x_min: 166, - x_max: 634, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 770, - }, - '#': { - x_min: 63, - x_max: 1179, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1246, - }, - $: { - x_min: 81.92156915727656, - x_max: 1012, - y_min: -208, - y_max: 1693, - ha: 1901, - leftSideBearing: 81, - advanceWidth: 1110, - }, - '%': { - x_min: 77, - x_max: 1384, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 77, - advanceWidth: 1460, - }, - '&': { - x_min: 74, - x_max: 1242, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1289, - }, - "'": { - x_min: 166, - x_max: 324, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 460, - }, - '(': { - x_min: 114, - x_max: 650, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 114, - advanceWidth: 662, - }, - ')': { - x_min: 11, - x_max: 547, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 11, - advanceWidth: 654, - }, - '*': { - x_min: 66, - x_max: 893, - y_min: 607, - y_max: 1456, - ha: 849, - leftSideBearing: 66, - advanceWidth: 958, - }, - '+': { - x_min: 73, - x_max: 1071, - y_min: 146, - y_max: 1206, - ha: 1060, - leftSideBearing: 73, - advanceWidth: 1145, - }, - ',': { - x_min: 23, - x_max: 315, - y_min: -311, - y_max: 221, - ha: 532, - leftSideBearing: 23, - advanceWidth: 404, - }, - '-': { - x_min: 154, - x_max: 643, - y_min: 538, - y_max: 692, - ha: 154, - leftSideBearing: 154, - advanceWidth: 797, - }, - '.': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 202, - ha: 202, - leftSideBearing: 145, - advanceWidth: 493, - }, - '/': { - x_min: 0, - x_max: 774, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 0, - advanceWidth: 824, - }, - ':': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 145, - advanceWidth: 419, - }, - ';': { - x_min: 53, - x_max: 345, - y_min: -311, - y_max: 1082, - ha: 1393, - leftSideBearing: 53, - advanceWidth: 424, - }, - '<': { - x_min: 76, - x_max: 892, - y_min: 107, - y_max: 1013, - ha: 906, - leftSideBearing: 76, - advanceWidth: 1017, - }, - '=': { - x_min: 147, - x_max: 981, - y_min: 407, - y_max: 987, - ha: 580, - leftSideBearing: 147, - advanceWidth: 1127, - }, - '>': { - x_min: 125, - x_max: 980, - y_min: 87, - y_max: 993, - ha: 906, - leftSideBearing: 125, - advanceWidth: 1060, - }, - '?': { - x_min: 65.92660602419838, - x_max: 890, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 65, - advanceWidth: 953, - }, - '@': { - x_min: 84.3592218305664, - x_max: 1705.2346925277395, - y_min: -453, - y_max: 1431, - ha: 1884, - leftSideBearing: 84, - advanceWidth: 1821, - }, - A: { - x_min: 70, - x_max: 1463, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 70, - advanceWidth: 1533, - }, - B: { - x_min: 81, - x_max: 1253, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1322, - }, - C: { - x_min: 80, - x_max: 1174, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1290, - }, - D: { - x_min: 81, - x_max: 1291, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1356, - }, - E: { - x_min: 81, - x_max: 1190, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1306, - }, - F: { - x_min: 81, - x_max: 1176, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1256, - }, - G: { - x_min: 80, - x_max: 1226, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1346, - }, - H: { - x_min: 81, - x_max: 1497, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1578, - }, - I: { - x_min: 81, - x_max: 604, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 685, - }, - J: { - x_min: 60, - x_max: 1100, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 60, - advanceWidth: 1169, - }, - K: { - x_min: 81, - x_max: 1427, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1501, - }, - L: { - x_min: 81, - x_max: 1130, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1210, - }, - M: { - x_min: 94, - x_max: 1888, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 94, - advanceWidth: 1982, - }, - N: { - x_min: 83, - x_max: 1509, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 83, - advanceWidth: 1592, - }, - O: { - x_min: 70, - x_max: 1281, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 70, - advanceWidth: 1351, - }, - P: { - x_min: 81, - x_max: 1242, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1297, - }, - Q: { - x_min: 70, - x_max: 1348, - y_min: -245, - y_max: 1477, - ha: 1722, - leftSideBearing: 70, - advanceWidth: 1376, - }, - R: { - x_min: 81, - x_max: 1285, - y_min: 0, - y_max: 1455, - ha: 1455, - leftSideBearing: 81, - advanceWidth: 1385, - }, - S: { - x_min: 115, - x_max: 1116, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 115, - advanceWidth: 1206, - }, - T: { - x_min: 96, - x_max: 1306, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 96, - advanceWidth: 1406, - }, - U: { - x_min: 70, - x_max: 1452, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 70, - advanceWidth: 1522, - }, - V: { - x_min: 65, - x_max: 1443, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1508, - }, - W: { - x_min: 72, - x_max: 2057, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 72, - advanceWidth: 2129, - }, - X: { - x_min: 80, - x_max: 1449, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 80, - advanceWidth: 1529, - }, - Y: { - x_min: 65, - x_max: 1396, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1461, - }, - Z: { - x_min: 90, - x_max: 1107, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 90, - advanceWidth: 1197, - }, - '[': { - x_min: 157, - x_max: 541, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 157, - advanceWidth: 573, - }, - '\\': { - x_min: 36, - x_max: 830, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 36, - advanceWidth: 841, - }, - ']': { - x_min: 23, - x_max: 408, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 23, - advanceWidth: 552, - }, - '^': { - x_min: 71, - x_max: 802, - y_min: 729, - y_max: 1456, - ha: 727, - leftSideBearing: 71, - advanceWidth: 864, - }, - _: { - x_min: 119, - x_max: 1041, - y_min: -154, - y_max: 0, - ha: 154, - leftSideBearing: 119, - advanceWidth: 1168, - }, - '`': { - x_min: 40, - x_max: 456, - y_min: 1288, - y_max: 1560, - ha: 272, - leftSideBearing: 40, - advanceWidth: 496, - }, - a: { - x_min: 79, - x_max: 1053, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 79, - advanceWidth: 1132, - }, - b: { - x_min: -16, - x_max: 1071, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: -16, - advanceWidth: 1145, - }, - c: { - x_min: 78, - x_max: 988, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1067, - }, - d: { - x_min: 78, - x_max: 1156, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: 78, - advanceWidth: 1218, - }, - e: { - x_min: 74, - x_max: 980, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 74, - advanceWidth: 1059, - }, - f: { - x_min: 64, - x_max: 731, - y_min: 0, - y_max: 1581, - ha: 1581, - leftSideBearing: 64, - advanceWidth: 725, - }, - g: { - x_min: 78, - x_max: 1133, - y_min: -437, - y_max: 1102, - ha: 1539, - leftSideBearing: 78, - advanceWidth: 1157, - }, - h: { - x_min: 49, - x_max: 1255, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 49, - advanceWidth: 1315, - }, - i: { - x_min: 67, - x_max: 590, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 67, - advanceWidth: 652, - }, - j: { - x_min: -56, - x_max: 381, - y_min: -437, - y_max: 1560, - ha: 1997, - leftSideBearing: -56, - advanceWidth: 525, - }, - k: { - x_min: 64, - x_max: 1248, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 1287, - }, - l: { - x_min: 64, - x_max: 587, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 653, - }, - m: { - x_min: 74, - x_max: 1905, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1977, - }, - n: { - x_min: 74, - x_max: 1278, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1343, - }, - o: { - x_min: 78, - x_max: 1046, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1124, - }, - p: { - x_min: 34, - x_max: 1119, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 34, - advanceWidth: 1197, - }, - q: { - x_min: 78, - x_max: 1135, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 78, - advanceWidth: 1139, - }, - r: { - x_min: 72, - x_max: 808, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 72, - advanceWidth: 854, - }, - s: { - x_min: 104, - x_max: 933, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 104, - advanceWidth: 1022, - }, - t: { - x_min: 24, - x_max: 678, - y_min: -17, - y_max: 1343, - ha: 1360, - leftSideBearing: 24, - advanceWidth: 730, - }, - u: { - x_min: 52, - x_max: 1181, - y_min: -21, - y_max: 1082, - ha: 1103, - leftSideBearing: 52, - advanceWidth: 1245, - }, - v: { - x_min: 26, - x_max: 1176, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 26, - advanceWidth: 1206, - }, - w: { - x_min: 52, - x_max: 1777, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 52, - advanceWidth: 1823, - }, - x: { - x_min: 42, - x_max: 1163, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 42, - advanceWidth: 1203, - }, - y: { - x_min: 24, - x_max: 1172, - y_min: -437, - y_max: 1082, - ha: 1519, - leftSideBearing: 24, - advanceWidth: 1192, - }, - z: { - x_min: 88, - x_max: 960, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 88, - advanceWidth: 1032, - }, - '{': { - x_min: 63, - x_max: 671, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 63, - advanceWidth: 701, - }, - '|': { - x_min: 150, - x_max: 307, - y_min: -270, - y_max: 1456, - ha: 1726, - leftSideBearing: 150, - advanceWidth: 451, - }, - '}': { - x_min: 27, - x_max: 635, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 27, - advanceWidth: 701, - }, - '~': { - x_min: 121, - x_max: 1257, - y_min: 401, - y_max: 803, - ha: 402, - leftSideBearing: 121, - advanceWidth: 1386, - }, - }, - fontFamily: 'Roboto Slab', - resolution: 2048, - generatedOn: '2020-06-15T19:12:58.120Z', -}; - - -/***/ }), - -/***/ "./src/fonts/sans_bold_text_metrics.ts": -/*!*********************************************!*\ - !*** ./src/fonts/sans_bold_text_metrics.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) -/* harmony export */ }); -const SansFontBold = { - glyphs: { - '0': { - x_min: 86, - x_max: 1038, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '1': { - x_min: 162, - x_max: 806, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 162, - advanceWidth: 1139, - }, - '2': { - x_min: 51, - x_max: 1036, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 51, - advanceWidth: 1139, - }, - '3': { - x_min: 77, - x_max: 1051, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '4': { - x_min: 38, - x_max: 1092, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 38, - advanceWidth: 1139, - }, - '5': { - x_min: 91, - x_max: 1077, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 91, - advanceWidth: 1139, - }, - '6': { - x_min: 87, - x_max: 1066, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '7': { - x_min: 87, - x_max: 1048, - y_min: 0, - y_max: 1446, - ha: 1446, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1047, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 65, - x_max: 1044, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 65, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 184, - x_max: 488, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 184, - advanceWidth: 682, - }, - '"': { - x_min: 112, - x_max: 869, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 112, - advanceWidth: 971, - }, - '#': { - x_min: 18, - x_max: 1115, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 18, - advanceWidth: 1139, - }, - $: { - x_min: 70, - x_max: 1048, - y_min: -205, - y_max: 1584, - ha: 1789, - leftSideBearing: 70, - advanceWidth: 1139, - }, - '%': { - x_min: 89, - x_max: 1725, - y_min: -59, - y_max: 1491, - ha: 1550, - leftSideBearing: 89, - advanceWidth: 1821, - }, - '&': { - x_min: 90, - x_max: 1446, - y_min: -38, - y_max: 1491, - ha: 1529, - leftSideBearing: 90, - advanceWidth: 1479, - }, - "'": { - x_min: 92, - x_max: 398, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 92, - advanceWidth: 487, - }, - '(': { - x_min: 107, - x_max: 616, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 107, - advanceWidth: 682, - }, - ')': { - x_min: 67, - x_max: 576, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 67, - advanceWidth: 682, - }, - '*': { - x_min: 28, - x_max: 753, - y_min: 792, - y_max: 1491, - ha: 699, - leftSideBearing: 28, - advanceWidth: 797, - }, - '+': { - x_min: 85, - x_max: 1110, - y_min: 211, - y_max: 1236, - ha: 1025, - leftSideBearing: 85, - advanceWidth: 1196, - }, - ',': { - x_min: 117, - x_max: 421, - y_min: -327, - y_max: 281, - ha: 608, - leftSideBearing: 117, - advanceWidth: 569, - }, - '-': { - x_min: 115, - x_max: 667, - y_min: 391, - y_max: 672, - ha: 281, - leftSideBearing: 115, - advanceWidth: 682, - }, - '.': { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 281, - ha: 281, - leftSideBearing: 147, - advanceWidth: 569, - }, - '/': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ':': { - x_min: 201, - x_max: 482, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 201, - advanceWidth: 682, - }, - ';': { - x_min: 170, - x_max: 474, - y_min: -327, - y_max: 1062, - ha: 1389, - leftSideBearing: 170, - advanceWidth: 682, - }, - '<': { - x_min: 95, - x_max: 1100, - y_min: 167, - y_max: 1281, - ha: 1114, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '=': { - x_min: 85, - x_max: 1110, - y_min: 372, - y_max: 1074, - ha: 702, - leftSideBearing: 85, - advanceWidth: 1196, - }, - '>': { - x_min: 95, - x_max: 1101, - y_min: 166, - y_max: 1279, - ha: 1113, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '?': { - x_min: 106, - x_max: 1158, - y_min: 0, - y_max: 1481, - ha: 1481, - leftSideBearing: 106, - advanceWidth: 1251, - }, - '@': { - x_min: 61, - x_max: 1990, - y_min: -431, - y_max: 1492, - ha: 1923, - leftSideBearing: 61, - advanceWidth: 1997, - }, - A: { - x_min: 0, - x_max: 1471, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1479, - }, - B: { - x_min: 150, - x_max: 1378, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - C: { - x_min: 97, - x_max: 1374, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 97, - advanceWidth: 1479, - }, - D: { - x_min: 148, - x_max: 1377, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 148, - advanceWidth: 1479, - }, - E: { - x_min: 149, - x_max: 1264, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - F: { - x_min: 151, - x_max: 1156, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 151, - advanceWidth: 1251, - }, - G: { - x_min: 98, - x_max: 1469, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 98, - advanceWidth: 1593, - }, - H: { - x_min: 150, - x_max: 1322, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - I: { - x_min: 140, - x_max: 436, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 140, - advanceWidth: 569, - }, - J: { - x_min: 35, - x_max: 973, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 35, - advanceWidth: 1139, - }, - K: { - x_min: 153, - x_max: 1475, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 153, - advanceWidth: 1479, - }, - L: { - x_min: 157, - x_max: 1189, - y_min: 0, - y_max: 1454, - ha: 1454, - leftSideBearing: 157, - advanceWidth: 1251, - }, - M: { - x_min: 145, - x_max: 1561, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 145, - advanceWidth: 1706, - }, - N: { - x_min: 152, - x_max: 1315, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1479, - }, - O: { - x_min: 89, - x_max: 1511, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 89, - advanceWidth: 1593, - }, - P: { - x_min: 149, - x_max: 1272, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - Q: { - x_min: 89, - x_max: 1566, - y_min: -147, - y_max: 1491, - ha: 1638, - leftSideBearing: 89, - advanceWidth: 1593, - }, - R: { - x_min: 150, - x_max: 1468, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - S: { - x_min: 74, - x_max: 1266, - y_min: -26, - y_max: 1491, - ha: 1517, - leftSideBearing: 74, - advanceWidth: 1366, - }, - T: { - x_min: 44, - x_max: 1209, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 44, - advanceWidth: 1251, - }, - U: { - x_min: 147, - x_max: 1316, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 147, - advanceWidth: 1479, - }, - V: { - x_min: -1, - x_max: 1364, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -1, - advanceWidth: 1366, - }, - W: { - x_min: 7, - x_max: 1931, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 7, - advanceWidth: 1933, - }, - X: { - x_min: 0, - x_max: 1363, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1366, - }, - Y: { - x_min: -3, - x_max: 1368, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - Z: { - x_min: 22, - x_max: 1213, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 22, - advanceWidth: 1251, - }, - '[': { - x_min: 146, - x_max: 644, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 146, - advanceWidth: 682, - }, - '\\': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ']': { - x_min: 38, - x_max: 536, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 38, - advanceWidth: 682, - }, - '^': { - x_min: 115, - x_max: 1080, - y_min: 692, - y_max: 1491, - ha: 799, - leftSideBearing: 115, - advanceWidth: 1196, - }, - _: { - x_min: -19, - x_max: 1149, - y_min: -405, - y_max: -223, - ha: 182, - leftSideBearing: -19, - advanceWidth: 1139, - }, - '`': { - x_min: 42, - x_max: 495, - y_min: 1192, - y_max: 1491, - ha: 299, - leftSideBearing: 42, - advanceWidth: 682, - }, - a: { - x_min: 73, - x_max: 1070, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 73, - advanceWidth: 1139, - }, - b: { - x_min: 135, - x_max: 1172, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 135, - advanceWidth: 1251, - }, - c: { - x_min: 85, - x_max: 1087, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 85, - advanceWidth: 1139, - }, - d: { - x_min: 84, - x_max: 1121, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 84, - advanceWidth: 1251, - }, - e: { - x_min: 65, - x_max: 1057.2517482517483, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 65, - advanceWidth: 1139, - }, - f: { - x_min: 24, - x_max: 742, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 24, - advanceWidth: 682, - }, - g: { - x_min: 84, - x_max: 1120, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 84, - advanceWidth: 1251, - }, - h: { - x_min: 146, - x_max: 1113, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 146, - advanceWidth: 1251, - }, - i: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - j: { - x_min: -94, - x_max: 422, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 569, - }, - k: { - x_min: 137, - x_max: 1119, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 137, - advanceWidth: 1139, - }, - l: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - m: { - x_min: 126, - x_max: 1688, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 126, - advanceWidth: 1821, - }, - n: { - x_min: 145, - x_max: 1113, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 145, - advanceWidth: 1251, - }, - o: { - x_min: 82, - x_max: 1178, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 82, - advanceWidth: 1251, - }, - p: { - x_min: 139, - x_max: 1175, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 139, - advanceWidth: 1251, - }, - q: { - x_min: 91, - x_max: 1122, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 91, - advanceWidth: 1251, - }, - r: { - x_min: 135, - x_max: 823, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 797, - }, - s: { - x_min: 48, - x_max: 1040, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 48, - advanceWidth: 1139, - }, - t: { - x_min: 31, - x_max: 657, - y_min: -24, - y_max: 1437, - ha: 1461, - leftSideBearing: 31, - advanceWidth: 682, - }, - u: { - x_min: 141, - x_max: 1107, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 141, - advanceWidth: 1251, - }, - v: { - x_min: 11, - x_max: 1114, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 11, - advanceWidth: 1139, - }, - w: { - x_min: 9, - x_max: 1592, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 9, - advanceWidth: 1593, - }, - x: { - x_min: 12, - x_max: 1120, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 12, - advanceWidth: 1139, - }, - y: { - x_min: 14, - x_max: 1106, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 14, - advanceWidth: 1139, - }, - z: { - x_min: 34, - x_max: 982, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 34, - advanceWidth: 1024, - }, - '{': { - x_min: 60, - x_max: 744, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 60, - advanceWidth: 797, - }, - '|': { - x_min: 176, - x_max: 399, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 176, - advanceWidth: 573, - }, - '}': { - x_min: 45, - x_max: 729, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 45, - advanceWidth: 797, - }, - '~': { - x_min: 67, - x_max: 1129, - y_min: 519, - y_max: 924, - ha: 405, - leftSideBearing: 67, - advanceWidth: 1196, - }, - }, - fontFamily: 'Arial', - resolution: 2048, - generatedOn: '2022-11-04T20:05:21.000Z', -}; - - -/***/ }), - -/***/ "./src/fonts/sans_text_metrics.ts": -/*!****************************************!*\ - !*** ./src/fonts/sans_text_metrics.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SansFont": () => (/* binding */ SansFont) -/* harmony export */ }); -const SansFont = { - smufl: false, - name: 'SANS', - spacing: 50, - Description: 'Built-in sans-serif font', - bold: true, - italic: true, - monospaced: false, - serifs: false, - glyphs: { - '0': { - x_min: 85, - x_max: 1041, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '1': { - x_min: 223, - x_max: 763, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 223, - advanceWidth: 1139, - }, - '2': { - x_min: 61.840001123045234, - x_max: 1031, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 61, - advanceWidth: 1139, - }, - '3': { - x_min: 86, - x_max: 1046, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '4': { - x_min: 26, - x_max: 1040, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 26, - advanceWidth: 1139, - }, - '5': { - x_min: 85, - x_max: 1057, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '6': { - x_min: 77, - x_max: 1045, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '7': { - x_min: 97, - x_max: 1046, - y_min: 0, - y_max: 1447, - ha: 1447, - leftSideBearing: 97, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 85, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 176, - x_max: 399, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 176, - advanceWidth: 569, - }, - '"': { - x_min: 94, - x_max: 631, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 94, - advanceWidth: 727, - }, - '#': { - x_min: 21, - x_max: 1113, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 21, - advanceWidth: 1139, - }, - $: { - x_min: 73, - x_max: 1043, - y_min: -211, - y_max: 1601, - ha: 1812, - leftSideBearing: 73, - advanceWidth: 1139, - }, - '%': { - x_min: 119, - x_max: 1695, - y_min: -54, - y_max: 1491, - ha: 1545, - leftSideBearing: 119, - advanceWidth: 1821, - }, - '&': { - x_min: 88, - x_max: 1319, - y_min: -34, - y_max: 1491, - ha: 1525, - leftSideBearing: 88, - advanceWidth: 1366, - }, - "'": { - x_min: 90, - x_max: 295, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 90, - advanceWidth: 391, - }, - '(': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - ')': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - '*': { - x_min: 64, - x_max: 725, - y_min: 867, - y_max: 1491, - ha: 624, - leftSideBearing: 64, - advanceWidth: 797, - }, - '+': { - x_min: 114, - x_max: 1082, - y_min: 237, - y_max: 1206, - ha: 969, - leftSideBearing: 114, - advanceWidth: 1196, - }, - ',': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 205, - ha: 495, - leftSideBearing: 170, - advanceWidth: 569, - }, - '-': { - x_min: 65, - x_max: 618, - y_min: 440, - y_max: 621, - ha: 181, - leftSideBearing: 65, - advanceWidth: 682, - }, - '.': { - x_min: 186, - x_max: 391, - y_min: 0, - y_max: 205, - ha: 205, - leftSideBearing: 186, - advanceWidth: 569, - }, - '/': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ':': { - x_min: 185, - x_max: 390, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 185, - advanceWidth: 569, - }, - ';': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 1062, - ha: 1352, - leftSideBearing: 170, - advanceWidth: 569, - }, - '<': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '=': { - x_min: 114, - x_max: 1082, - y_min: 417, - y_max: 1030, - ha: 613, - leftSideBearing: 114, - advanceWidth: 1196, - }, - '>': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '?': { - x_min: 90, - x_max: 1036, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 90, - advanceWidth: 1139, - }, - '@': { - x_min: 111, - x_max: 2005, - y_min: -431, - y_max: 1493, - ha: 1924, - leftSideBearing: 111, - advanceWidth: 2079, - }, - A: { - x_min: -3, - x_max: 1369, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - B: { - x_min: 150, - x_max: 1257, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - C: { - x_min: 102, - x_max: 1398, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 102, - advanceWidth: 1479, - }, - D: { - x_min: 158, - x_max: 1370, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1479, - }, - E: { - x_min: 162, - x_max: 1256, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 162, - advanceWidth: 1366, - }, - F: { - x_min: 168, - x_max: 1157, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 168, - advanceWidth: 1251, - }, - G: { - x_min: 109, - x_max: 1465, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 109, - advanceWidth: 1593, - }, - H: { - x_min: 164, - x_max: 1314, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 164, - advanceWidth: 1479, - }, - I: { - x_min: 191, - x_max: 385, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 191, - advanceWidth: 569, - }, - J: { - x_min: 58.84976474807333, - x_max: 865, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 58, - advanceWidth: 1024, - }, - K: { - x_min: 150, - x_max: 1362, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - L: { - x_min: 150, - x_max: 1066, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1139, - }, - M: { - x_min: 152, - x_max: 1551, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1706, - }, - N: { - x_min: 156, - x_max: 1311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 156, - advanceWidth: 1479, - }, - O: { - x_min: 99, - x_max: 1501, - y_min: -25, - y_max: 1492, - ha: 1517, - leftSideBearing: 99, - advanceWidth: 1593, - }, - P: { - x_min: 158, - x_max: 1277, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1366, - }, - Q: { - x_min: 88, - x_max: 1518, - y_min: -114, - y_max: 1492, - ha: 1606, - leftSideBearing: 88, - advanceWidth: 1593, - }, - R: { - x_min: 161, - x_max: 1453, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 161, - advanceWidth: 1479, - }, - S: { - x_min: 92, - x_max: 1259, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 92, - advanceWidth: 1366, - }, - T: { - x_min: 48, - x_max: 1210, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 48, - advanceWidth: 1251, - }, - U: { - x_min: 161, - x_max: 1314, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 161, - advanceWidth: 1479, - }, - V: { - x_min: 9, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - W: { - x_min: 25, - x_max: 1910, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 25, - advanceWidth: 1933, - }, - X: { - x_min: 9, - x_max: 1353, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - Y: { - x_min: 6, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 6, - advanceWidth: 1366, - }, - Z: { - x_min: 41, - x_max: 1200, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 41, - advanceWidth: 1251, - }, - '[': { - x_min: 139, - x_max: 536, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 139, - advanceWidth: 569, - }, - '\\': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ']': { - x_min: 39, - x_max: 436, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 39, - advanceWidth: 569, - }, - '^': { - x_min: 54, - x_max: 907, - y_min: 690, - y_max: 1491, - ha: 801, - leftSideBearing: 54, - advanceWidth: 961, - }, - _: { - x_min: -31, - x_max: 1162, - y_min: -407, - y_max: -277, - ha: 130, - leftSideBearing: -31, - advanceWidth: 1139, - }, - '`': { - x_min: 89, - x_max: 465, - y_min: 1194, - y_max: 1474, - ha: 280, - leftSideBearing: 89, - advanceWidth: 682, - }, - a: { - x_min: 74, - x_max: 1052, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 74, - advanceWidth: 1139, - }, - b: { - x_min: 134, - x_max: 1055, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 134, - advanceWidth: 1139, - }, - c: { - x_min: 80, - x_max: 1005, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 80, - advanceWidth: 1024, - }, - d: { - x_min: 70, - x_max: 991, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 70, - advanceWidth: 1139, - }, - e: { - x_min: 75, - x_max: 1054, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 75, - advanceWidth: 1139, - }, - f: { - x_min: 19, - x_max: 640, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 19, - advanceWidth: 569, - }, - g: { - x_min: 66, - x_max: 1002, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 66, - advanceWidth: 1139, - }, - h: { - x_min: 135, - x_max: 1000, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 135, - advanceWidth: 1139, - }, - i: { - x_min: 136, - x_max: 316, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 455, - }, - j: { - x_min: -94, - x_max: 314, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 455, - }, - k: { - x_min: 136, - x_max: 1016, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 1024, - }, - l: { - x_min: 131, - x_max: 311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 131, - advanceWidth: 455, - }, - m: { - x_min: 135, - x_max: 1574, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1706, - }, - n: { - x_min: 135, - x_max: 998, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1139, - }, - o: { - x_min: 68, - x_max: 1063, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 68, - advanceWidth: 1139, - }, - p: { - x_min: 135, - x_max: 1057, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 135, - advanceWidth: 1139, - }, - q: { - x_min: 72, - x_max: 992, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 72, - advanceWidth: 1139, - }, - r: { - x_min: 133, - x_max: 710, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 133, - advanceWidth: 682, - }, - s: { - x_min: 63, - x_max: 945, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 63, - advanceWidth: 1024, - }, - t: { - x_min: 36, - x_max: 554, - y_min: -14, - y_max: 1433, - ha: 1447, - leftSideBearing: 36, - advanceWidth: 569, - }, - u: { - x_min: 131, - x_max: 992, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 131, - advanceWidth: 1139, - }, - v: { - x_min: 26, - x_max: 1000, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 26, - advanceWidth: 1024, - }, - w: { - x_min: 6, - x_max: 1463, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 6, - advanceWidth: 1479, - }, - x: { - x_min: 15, - x_max: 1009, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 15, - advanceWidth: 1024, - }, - y: { - x_min: 33, - x_max: 1006, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 33, - advanceWidth: 1024, - }, - z: { - x_min: 40, - x_max: 980, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 40, - advanceWidth: 1024, - }, - '{': { - x_min: 57, - x_max: 636, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 57, - advanceWidth: 684, - }, - '|': { - x_min: 188, - x_max: 345, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 188, - advanceWidth: 532, - }, - '}': { - x_min: 47, - x_max: 626, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 47, - advanceWidth: 684, - }, - '~': { - x_min: 87, - x_max: 1110, - y_min: 557, - y_max: 885, - ha: 328, - leftSideBearing: 87, - advanceWidth: 1196, - }, - }, - fontFamily: 'sans-serif', - resolution: 2048, - generatedOn: '2020-10-18T18:48:11.823Z', -}; - - -/***/ }), - -/***/ "./src/fonts/serif_text_metrics.ts": -/*!*****************************************!*\ - !*** ./src/fonts/serif_text_metrics.ts ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) -/* harmony export */ }); -const SerifFont = { - smufl: false, - name: 'SERIF', - spacing: 50, - Description: 'Built-in serif font', - bold: true, - italic: true, - monospaced: false, - serifs: true, - glyphs: { - '0': { - x_min: 49, - x_max: 975, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 49, - advanceWidth: 1024, - }, - '1': { - x_min: 227, - x_max: 811, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 227, - advanceWidth: 1024, - }, - '2': { - x_min: 61, - x_max: 965, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 61, - advanceWidth: 1024, - }, - '3': { - x_min: 88, - x_max: 883, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 88, - advanceWidth: 1024, - }, - '4': { - x_min: 25, - x_max: 967, - y_min: 0, - y_max: 1384, - ha: 1384, - leftSideBearing: 25, - advanceWidth: 1024, - }, - '5': { - x_min: 66, - x_max: 898, - y_min: -27, - y_max: 1409, - ha: 1436, - leftSideBearing: 66, - advanceWidth: 1024, - }, - '6': { - x_min: 70, - x_max: 958, - y_min: -27, - y_max: 1401, - ha: 1428, - leftSideBearing: 70, - advanceWidth: 1024, - }, - '7': { - x_min: 41, - x_max: 920, - y_min: -16, - y_max: 1356, - ha: 1372, - leftSideBearing: 41, - advanceWidth: 1024, - }, - '8': { - x_min: 115, - x_max: 911, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 115, - advanceWidth: 1024, - }, - '9': { - x_min: 61, - x_max: 940, - y_min: -41, - y_max: 1383, - ha: 1424, - leftSideBearing: 61, - advanceWidth: 1024, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 512, - }, - '!': { - x_min: 266, - x_max: 488, - y_min: -22, - y_max: 1383, - ha: 1405, - leftSideBearing: 266, - advanceWidth: 682, - }, - '"': { - x_min: 157.2000021972655, - x_max: 678.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 157, - advanceWidth: 836, - }, - '#': { - x_min: 10, - x_max: 1016, - y_min: -1, - y_max: 1356, - ha: 1357, - leftSideBearing: 10, - advanceWidth: 1024, - }, - $: { - x_min: 90, - x_max: 936, - y_min: -180, - y_max: 1492, - ha: 1672, - leftSideBearing: 90, - advanceWidth: 1024, - }, - '%': { - x_min: 125, - x_max: 1581, - y_min: -30, - y_max: 1388, - ha: 1418, - leftSideBearing: 125, - advanceWidth: 1706, - }, - '&': { - x_min: 86, - x_max: 1536, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1593, - }, - "'": { - x_min: 97.20000219726548, - x_max: 273.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 97, - advanceWidth: 369, - }, - '(': { - x_min: 98, - x_max: 623, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 98, - advanceWidth: 682, - }, - ')': { - x_min: 59, - x_max: 584, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 59, - advanceWidth: 682, - }, - '*': { - x_min: 137.96078522291893, - x_max: 886.039214777081, - y_min: 543, - y_max: 1383, - ha: 840, - leftSideBearing: 137, - advanceWidth: 1024, - }, - '+': { - x_min: 61, - x_max: 1093, - y_min: 2, - y_max: 1034, - ha: 1032, - leftSideBearing: 61, - advanceWidth: 1155, - }, - ',': { - x_min: 115, - x_max: 399, - y_min: -291, - y_max: 208, - ha: 499, - leftSideBearing: 115, - advanceWidth: 512, - }, - '-': { - x_min: 80, - x_max: 584, - y_min: 396, - y_max: 525, - ha: 129, - leftSideBearing: 80, - advanceWidth: 682, - }, - '.': { - x_min: 143, - x_max: 371, - y_min: -22, - y_max: 205, - ha: 227, - leftSideBearing: 143, - advanceWidth: 512, - }, - '/': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ':': { - x_min: 166, - x_max: 394, - y_min: -22, - y_max: 943, - ha: 965, - leftSideBearing: 166, - advanceWidth: 569, - }, - ';': { - x_min: 164, - x_max: 448, - y_min: -290, - y_max: 943, - ha: 1233, - leftSideBearing: 164, - advanceWidth: 569, - }, - '<': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '=': { - x_min: 61, - x_max: 1093, - y_min: 246, - y_max: 791, - ha: 545, - leftSideBearing: 61, - advanceWidth: 1155, - }, - '>': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '?': { - x_min: 139, - x_max: 848, - y_min: -15, - y_max: 1383, - ha: 1398, - leftSideBearing: 139, - advanceWidth: 909, - }, - '@': { - x_min: 238, - x_max: 1657, - y_min: -29, - y_max: 1386, - ha: 1415, - leftSideBearing: 238, - advanceWidth: 1886, - }, - A: { - x_min: 31, - x_max: 1445, - y_min: 0, - y_max: 1380, - ha: 1380, - leftSideBearing: 31, - advanceWidth: 1479, - }, - B: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - C: { - x_min: 57, - x_max: 1296, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 57, - advanceWidth: 1366, - }, - D: { - x_min: 33, - x_max: 1403, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1479, - }, - E: { - x_min: 25, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - F: { - x_min: 25, - x_max: 1119, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1139, - }, - G: { - x_min: 66, - x_max: 1452, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 66, - advanceWidth: 1479, - }, - H: { - x_min: 39, - x_max: 1438, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 39, - advanceWidth: 1479, - }, - I: { - x_min: 37, - x_max: 642, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 37, - advanceWidth: 682, - }, - J: { - x_min: 20, - x_max: 758, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 20, - advanceWidth: 797, - }, - K: { - x_min: 70, - x_max: 1479, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 70, - advanceWidth: 1479, - }, - L: { - x_min: 25, - x_max: 1224, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - M: { - x_min: 25, - x_max: 1768, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1821, - }, - N: { - x_min: 25, - x_max: 1450, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 25, - advanceWidth: 1479, - }, - O: { - x_min: 70, - x_max: 1409, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 70, - advanceWidth: 1479, - }, - P: { - x_min: 33, - x_max: 1110, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1139, - }, - Q: { - x_min: 70, - x_max: 1435, - y_min: -364.28571588721996, - y_max: 1383, - ha: 1747.28571588722, - leftSideBearing: 70, - advanceWidth: 1479, - }, - R: { - x_min: 35, - x_max: 1347, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - S: { - x_min: 86, - x_max: 1006, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1139, - }, - T: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1251, - }, - U: { - x_min: 29, - x_max: 1444, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 29, - advanceWidth: 1479, - }, - V: { - x_min: 33, - x_max: 1428, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 33, - advanceWidth: 1479, - }, - W: { - x_min: 10, - x_max: 1906, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 10, - advanceWidth: 1933, - }, - X: { - x_min: 20, - x_max: 1449, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 20, - advanceWidth: 1479, - }, - Y: { - x_min: 45, - x_max: 1441, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 45, - advanceWidth: 1479, - }, - Z: { - x_min: 18, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 18, - advanceWidth: 1251, - }, - '[': { - x_min: 180, - x_max: 612, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 180, - advanceWidth: 682, - }, - '\\': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ']': { - x_min: 70, - x_max: 502, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 70, - advanceWidth: 682, - }, - '^': { - x_min: 49, - x_max: 914, - y_min: 608, - y_max: 1355, - ha: 747, - leftSideBearing: 49, - advanceWidth: 961, - }, - _: { - x_min: 0, - x_max: 1024, - y_min: -255, - y_max: -153, - ha: 102, - leftSideBearing: 0, - advanceWidth: 1024, - }, - '`': { - x_min: 39, - x_max: 499, - y_min: 1037, - y_max: 1392.509803639748, - ha: 355.50980363974804, - leftSideBearing: 39, - advanceWidth: 682, - }, - a: { - x_min: 76, - x_max: 905, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 76, - advanceWidth: 909, - }, - b: { - x_min: 6, - x_max: 958, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 6, - advanceWidth: 1024, - }, - c: { - x_min: 51, - x_max: 843, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - d: { - x_min: 55, - x_max: 1006, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 55, - advanceWidth: 1024, - }, - e: { - x_min: 51, - x_max: 868, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - f: { - x_min: 41, - x_max: 783, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 41, - advanceWidth: 682, - }, - g: { - x_min: 57, - x_max: 963, - y_min: -446, - y_max: 942, - ha: 1388, - leftSideBearing: 57, - advanceWidth: 1024, - }, - h: { - x_min: 18, - x_max: 997, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 18, - advanceWidth: 1024, - }, - i: { - x_min: 33, - x_max: 516, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 33, - advanceWidth: 569, - }, - j: { - x_min: -142, - x_max: 397, - y_min: -446, - y_max: 1399, - ha: 1845, - leftSideBearing: -142, - advanceWidth: 569, - }, - k: { - x_min: 14, - x_max: 1029, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 14, - advanceWidth: 1024, - }, - l: { - x_min: 39, - x_max: 523, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 39, - advanceWidth: 569, - }, - m: { - x_min: 33, - x_max: 1587, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1593, - }, - n: { - x_min: 33, - x_max: 993, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1024, - }, - o: { - x_min: 59, - x_max: 963, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 59, - advanceWidth: 1024, - }, - p: { - x_min: 10, - x_max: 964, - y_min: -443, - y_max: 944, - ha: 1387, - leftSideBearing: 10, - advanceWidth: 1024, - }, - q: { - x_min: 49, - x_max: 999, - y_min: -443, - y_max: 942.0135137169275, - ha: 1385.0135137169275, - leftSideBearing: 49, - advanceWidth: 1024, - }, - r: { - x_min: 10, - x_max: 685, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 10, - advanceWidth: 682, - }, - s: { - x_min: 104, - x_max: 713, - y_min: -20, - y_max: 942.0263161804552, - ha: 962.0263161804552, - leftSideBearing: 104, - advanceWidth: 797, - }, - t: { - x_min: 27, - x_max: 572, - y_min: -18, - y_max: 1186, - ha: 1204, - leftSideBearing: 27, - advanceWidth: 569, - }, - u: { - x_min: 18, - x_max: 981, - y_min: -21, - y_max: 921, - ha: 942, - leftSideBearing: 18, - advanceWidth: 1024, - }, - v: { - x_min: 39, - x_max: 976, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 39, - advanceWidth: 1024, - }, - w: { - x_min: 43, - x_max: 1423, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 43, - advanceWidth: 1479, - }, - x: { - x_min: 35, - x_max: 989, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 35, - advanceWidth: 1024, - }, - y: { - x_min: 29, - x_max: 976, - y_min: -445, - y_max: 921, - ha: 1366, - leftSideBearing: 29, - advanceWidth: 1024, - }, - z: { - x_min: 55, - x_max: 855, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 55, - advanceWidth: 909, - }, - '{': { - x_min: 205, - x_max: 717, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 205, - advanceWidth: 983, - }, - '|': { - x_min: 137, - x_max: 273, - y_min: -512, - y_max: 1535, - ha: 2047, - leftSideBearing: 137, - advanceWidth: 410, - }, - '}': { - x_min: 266, - x_max: 778, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 266, - advanceWidth: 983, - }, - '~': { - x_min: 82, - x_max: 1028, - y_min: 380, - y_max: 666, - ha: 286, - leftSideBearing: 82, - advanceWidth: 1108, - }, - }, - fontFamily: 'serif', - resolution: 2048, - generatedOn: '2020-10-18T19:03:12.514Z', -}; - - -/***/ }), - -/***/ "./src/fonts/textfonts.ts": -/*!********************************!*\ - !*** ./src/fonts/textfonts.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); -/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); -/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); -/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); -/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -function loadTextFonts() { - // Sans-serif fallback font, very close to Arial - { - const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Usually @ is the tallest and widest character, although not the - // highest since it starts below the baseline. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: true, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - // Sans-serif fallback font, very close to Arial - { - const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Usually @ is the tallest and widest character, although not the - // highest since it starts below the baseline. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - // Serif fallback font, very close to Times - { - const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // M is wider, but H is taller. :-) - // Lowercase b is also taller in this font. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Generic SERIF font', - }); - } - // Roboto Slab - { - const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Previously we used 'H', but it isn't actually the tallest or the widest. - // Interestingly, the lowercase 'b' is the tallest glyph. - const maxSizeGlyph = 'b'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Text font to pair with the Bravura / Gonville music fonts.', - }); - } - // PetalumaScript - { - const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // M is wider, but H is taller. :-) - // Lowercase b is also taller in this font. - const maxSizeGlyph = 'b'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Text font to pair with the Petaluma music font.', - }); - } -} - - -/***/ }), - -/***/ "./src/formatter.ts": -/*!**************************!*\ - !*** ./src/formatter.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Formatter": () => (/* binding */ Formatter) -/* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - -/** - * Create `Alignment`s for each tick in `voices`. Also calculate the - * total number of ticks in voices. - */ -function createContexts(voices, makeContext, addToContext) { - if (voices.length == 0) - return { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - // Initialize tick maps. - const tickToContextMap = {}; - const tickList = []; - const contexts = []; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - // For each voice, extract notes and create a context for every - // new tick that hasn't been seen before. - voices.forEach((voice, voiceIndex) => { - // Use resolution multiplier as denominator so that no additional expansion - // of fractional tick values is needed. - const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - // If we have no tick context for this tick, create one. - if (!tickToContextMap[integerTicks]) { - const newContext = makeContext({ tickID: integerTicks }); - contexts.push(newContext); - tickToContextMap[integerTicks] = newContext; - // Maintain a list of unique integerTicks. - tickList.push(integerTicks); - } - // Add this tickable to the TickContext. - addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); - ticksUsed.add(tickable.getTicks()); - }); - }); - return { - map: tickToContextMap, - array: contexts, - list: tickList.sort((a, b) => a - b), - resolutionMultiplier, - }; -} -// eslint-disable-next-line -function L(...args) { - if (Formatter.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); -} -/** - * Get the rest line number of the next non-rest note(s). - * @param notes array of Notes - * @param currRestLine - * @param currNoteIndex current note index - * @param compare if true, return the midpoint between the current rest line and the next rest line - * @returns a line number, which determines the vertical position of a rest. - */ -function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { - // If no valid next note group, nextRestLine is same as current. - let nextRestLine = currRestLine; - // Start with the next note and keep going until we find a valid non-rest note group. - for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { - const note = notes[noteIndex]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { - nextRestLine = note.getLineForRest(); - break; - } - } - // Locate the mid point between two lines. - if (compare && currRestLine !== nextRestLine) { - const top = Math.max(currRestLine, nextRestLine); - const bot = Math.min(currRestLine, nextRestLine); - nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); - } - return nextRestLine; -} -/** - * Format implements the formatting and layout algorithms that are used - * to position notes in a voice. The algorithm can align multiple voices both - * within a stave, and across multiple staves. - * - * To do this, the formatter breaks up voices into a grid of rational-valued - * `ticks`, to which each note is assigned. Then, minimum widths are assigned - * to each tick based on the widths of the notes and modifiers in that tick. This - * establishes the smallest amount of space required for each tick. - * - * Finally, the formatter distributes the left over space proportionally to - * all the ticks, setting the `x` values of the notes in each tick. - * - * See `tests/formatter_tests.ts` for usage examples. The helper functions included - * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. - */ -class Formatter { - /** - * Helper function to layout "notes" one after the other without - * regard for proportions. Useful for tests and debugging. - */ - static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { - notes.reduce((accumulator, note) => { - note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); - const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); - const metrics = tick.getMetrics(); - tick.setX(accumulator + metrics.totalLeftPx); - return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; - }, x); - } - /** Helper function to plot formatter debug info. */ - static plotDebugging(ctx, formatter, xPos, y1, y2, options) { - options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); - const x = xPos + options.stavePadding; - const contextGaps = formatter.contextGaps; - function stroke(x1, x2, color) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(1); - ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); - } - ctx.save(); - ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); - contextGaps.gaps.forEach((gap) => { - stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); - ctx.setFillStyle('green'); - ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); - }); - ctx.setFillStyle('red'); - ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); - ctx.restore(); - } - /** - * Helper function to format and draw a single voice. Returns a bounding - * box for the notation. - * @param ctx the rendering context - * @param stave the stave to which to draw (`Stave` or `TabStave`) - * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) - * @param params one of below: - * * Setting `autobeam` only `(context, stave, notes, true)` or - * `(ctx, stave, notes, {autobeam: true})` - * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` - * * Setting both a struct is needed `(context, stave, notes, { - * autobeam: true, align_rests: true})` - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDraw(ctx, stave, notes, params) { - let options = { - auto_beam: false, - align_rests: false, - }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - else if (typeof params === 'boolean') { - options.auto_beam = params; - } - // Start by creating a voice and adding all the notes to it. - const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); - // Then create beams, if requested. - const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; - // Instantiate a `Formatter` and format the notes. - new Formatter() - .joinVoices([voice]) // , { align_rests: options.align_rests }) - .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); - // Render the voice and beams to the stave. - voice.setStave(stave).draw(ctx, stave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - // Return the bounding box of the voice. - return voice.getBoundingBox(); - } - /** - * Helper function to format and draw aligned tab and stave notes in two - * separate staves. - * @param ctx the rendering context - * @param tabstave a `TabStave` instance on which to render `TabNote`s. - * @param stave a `Stave` instance on which to render `Note`s. - * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) - * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) - * @param autobeam automatically generate beams. - * @param params a configuration object: - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { - let opts = { - auto_beam: autobeam, - align_rests: false, - }; - if (typeof params === 'object') { - opts = Object.assign(Object.assign({}, opts), params); - } - else if (typeof params === 'boolean') { - opts.auto_beam = params; - } - // Create a `4/4` voice for `notes`. - const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); - // Create a `4/4` voice for `tabnotes`. - const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); - // Then create beams, if requested. - const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; - // Instantiate a `Formatter` and align tab and stave notes. - new Formatter() - .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) - .joinVoices([tabvoice]) - .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); - // Render voices and beams to staves. - notevoice.draw(ctx, stave); - tabvoice.draw(ctx, tabstave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - // Draw a connector between tab and note staves. - new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); - } - /** - * Automatically set the vertical position of rests based on previous/next note positions. - * @param tickables an array of Tickables. - * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. - * @param alignTuplets If `false`, ignores tuplets. - */ - static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { - tickables.forEach((currTickable, index) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { - if (currTickable.getTuplet() && !alignTuplets) { - return; - } - // If activated rests not on default can be rendered as specified. - const position = currTickable.getGlyphProps().position.toUpperCase(); - if (position !== 'R/4' && position !== 'B/4') { - return; - } - if (alignAllNotes || currTickable.getBeam()) { - // Align rests with previous/next notes. - const props = currTickable.getKeyProps()[0]; - if (index === 0) { - props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); - } - else if (index > 0 && index < tickables.length) { - // If previous tickable is a rest, use its line number. - const prevTickable = tickables[index - 1]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { - if (prevTickable.isRest()) { - props.line = prevTickable.getKeyProps()[0].line; - } - else { - const restLine = prevTickable.getLineForRest(); - // Get the rest line for next valid non-rest note group. - props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); - } - } - } - currTickable.setKeyLine(0, props.line); - } - } - }); - } - constructor(options) { - this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); - this.justifyWidth = 0; - this.totalCost = 0; - this.totalShift = 0; - this.durationStats = {}; - // Minimum width required to render all the notes in the voices. - this.minTotalWidth = 0; - // This is set to `true` after `minTotalWidth` is calculated. - this.hasMinTotalWidth = false; - // Arrays of tick and modifier contexts. - this.tickContexts = { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - this.modifierContexts = []; - // Gaps between contexts, for free movement of notes post - // formatting. - this.contextGaps = { - total: 0, - gaps: [], - }; - this.voices = []; - this.lossHistory = []; - } - /** - * Find all the rests in each of the `voices` and align them to neighboring notes. - * - * @param voices - * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. - */ - alignRests(voices, alignAllNotes) { - if (!voices || !voices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); - } - voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); - } - /** - * Estimate the width required to render 'voices'. This is done by: - * 1. Sum the widths of all the tick contexts - * 2. Estimate the padding. - * The latter is done by calculating the padding 3 different ways, and taking the - * greatest value: - * 1. the padding required for unaligned notes in different voices - * 2. the padding based on the stddev of the tickable widths - * 3. the padding based on the stddev of the tickable durations. - * - * The last 2 quantities estimate a 'width entropy', where notes might need more - * room than the proportional formatting gives them. A measure of all same duration - * and width will need no extra padding, and all these quantities will be - * zero in that case. - * - * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. - * - * @param voices the voices that contain the notes - * @returns the estimated width in pixels - */ - preCalculateMinTotalWidth(voices) { - const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); - // Calculate additional padding based on 3 methods: - // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations - let unalignedCtxCount = 0; - let wsum = 0; - let dsum = 0; - const widths = []; - const durations = []; - // Cache results. - if (this.hasMinTotalWidth) - return this.minTotalWidth; - // Create tick contexts. - if (!voices) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); - } - this.createTickContexts(voices); - // eslint-disable-next-line - const { list: contextList, map: contextMap } = this.tickContexts; - this.minTotalWidth = 0; - // Go through each tick context and calculate total width, - // and also accumulate values used in padding hints - contextList.forEach((tick) => { - const context = contextMap[tick]; - context.preFormat(); - // If this TC doesn't have all the voices on it, it's unaligned. - // so increment the unaligned padding accumulator - if (context.getTickables().length < voices.length) { - unalignedCtxCount += 1; - } - // Calculate the 'width entropy' over all the Tickables. - context.getTickables().forEach((t) => { - wsum += t.getMetrics().width; - dsum += t.getTicks().value(); - widths.push(t.getMetrics().width); - durations.push(t.getTicks().value()); - }); - const width = context.getWidth(); - this.minTotalWidth += width; - }); - this.hasMinTotalWidth = true; - // normalized (0-1) STDDEV of widths/durations gives us padding hints. - const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; - const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); - const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; - const davg = dsum / durations.length; - const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); - const dpads = Math.pow(dvar / durations.length, 0.5) / davg; - // Find max of 3 methods pad the width with that - const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; - const unalignedPad = unalignedPadding * unalignedCtxCount; - return this.minTotalWidth + Math.max(unalignedPad, padmax); - } - /** - * Get minimum width required to render all voices. Either `format` or - * `preCalculateMinTotalWidth` must be called before this method. - */ - getMinTotalWidth() { - if (!this.hasMinTotalWidth) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); - } - return this.minTotalWidth; - } - /** Calculate the resolution multiplier for `voices`. */ - static getResolutionMultiplier(voices) { - if (!voices || !voices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); - } - const totalTicks = voices[0].getTotalTicks(); - const resolutionMultiplier = voices.reduce((accumulator, voice) => { - if (!voice.getTotalTicks().equals(totalTicks)) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); - } - if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); - } - return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); - }, 1); - return resolutionMultiplier; - } - /** Create a `ModifierContext` for each tick in `voices`. */ - createModifierContexts(voices) { - if (voices.length == 0) - return; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - // Initialize tick maps. - const tickToContextMap = new Map(); - const contexts = []; - // For each voice, extract notes and create a context for every - // new tick that hasn't been seen before. - voices.forEach((voice) => { - // Use resolution multiplier as denominator so that no additional expansion - // of fractional tick values is needed. - const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - // If we have no tick context for this tick, create one. - if (!staveTickToContextMap) { - tickToContextMap.set(tickable.getStave(), {}); - staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - } - if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { - const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); - contexts.push(newContext); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - staveTickToContextMap[integerTicks] = newContext; - } - // Add this tickable to the TickContext. - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - tickable.addToModifierContext(staveTickToContextMap[integerTicks]); - ticksUsed.add(tickable.getTicks()); - }); - }); - this.modifierContexts.push({ - map: tickToContextMap, - array: contexts, - resolutionMultiplier, - }); - } - /** - * Create a `TickContext` for each tick in `voices`. Also calculate the - * total number of ticks in voices. - */ - createTickContexts(voices) { - const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); - const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); - this.tickContexts = contexts; - const contextArray = this.tickContexts.array; - contextArray.forEach((context) => { - context.tContexts = contextArray; - }); - return contexts; - } - /** - * Get the AlignmentContexts of TickContexts that were created by createTickContexts. - * Returns undefined if createTickContexts has not yet been run. - */ - getTickContexts() { - return this.tickContexts; - } - /** - * This is the core formatter logic. Format voices and justify them - * to `justifyWidth` pixels. `renderingContext` is required to justify elements - * that can't retrieve widths without a canvas. This method sets the `x` positions - * of all the tickables/notes in the formatter. - */ - preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { - // Initialize context maps. - const contexts = this.tickContexts; - if (!contexts) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); - } - const { list: contextList, map: contextMap } = contexts; - // Reset loss history for evaluator. - this.lossHistory = []; - // If voices and a stave were provided, set the Stave for each voice - // and preFormat to apply Y values to the notes; - if (voicesParam && stave) { - voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); - } - // Now distribute the ticks to each tick context, and assign them their - // own X positions. - let x = 0; - let shift = 0; - this.minTotalWidth = 0; - let totalTicks = 0; - // Pass 1: Give each note maximum width requested by context. - contextList.forEach((tick) => { - const context = contextMap[tick]; - // Make sure that all tickables in this context have calculated their - // space requirements. - context.preFormat(); - const width = context.getWidth(); - this.minTotalWidth += width; - const maxTicks = context.getMaxTicks().value(); - totalTicks += maxTicks; - const metrics = context.getMetrics(); - x = x + shift + metrics.totalLeftPx; - context.setX(x); - // Calculate shift for the next tick. - shift = width - metrics.totalLeftPx; - }); - // Use softmax based on all notes across all staves. (options.globalSoftmax) - const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; - const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); - const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); - this.minTotalWidth = x + shift; - this.hasMinTotalWidth = true; - // No justification needed. End formatting. - if (justifyWidth <= 0) - return this.evaluate(); - // Start justification. Subtract the right extra pixels of the final context because the formatter - // justifies based on the context's X position, which is the left-most part of the note head. - const firstContext = contextMap[contextList[0]]; - const lastContext = contextMap[contextList[contextList.length - 1]]; - // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to - // the softmax of the ticks. - function calculateIdealDistances(adjustedJustifyWidth) { - const distances = contextList.map((tick, i) => { - const context = contextMap[tick]; - const voices = context.getTickablesByVoice(); - let backTickable; - if (i > 0) { - const prevContext = contextMap[contextList[i - 1]]; - // Go through each tickable and search backwards for another tickable - // in the same voice. If found, use that duration (ticks) to calculate - // the expected distance. - for (let j = i - 1; j >= 0; j--) { - const backTick = contextMap[contextList[j]]; - const backVoices = backTick.getTickablesByVoice(); - // Look for matching voices between tick contexts. - const matchingVoices = []; - Object.keys(voices).forEach((v) => { - if (backVoices[v]) { - matchingVoices.push(v); - } - }); - if (matchingVoices.length > 0) { - // Found matching voices, get largest duration - let maxTicks = 0; - let maxNegativeShiftPx = Infinity; - let expectedDistance = 0; - matchingVoices.forEach((v) => { - const ticks = backVoices[v].getTicks().value(); - if (ticks > maxTicks) { - backTickable = backVoices[v]; - maxTicks = ticks; - } - // Calculate the limits of the shift based on modifiers, etc. - const thisTickable = voices[v]; - const insideLeftEdge = thisTickable.getX() - - (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); - const backMetrics = backVoices[v].getMetrics(); - const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; - // Don't allow shifting if notes in the same voice can collide - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); - }); - // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right - // so that two different tick contexts don't align across staves. - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); - // Calculate the expected distance of the current context from the last matching tickable. The - // distance is scaled down by the softmax for the voice. - if (globalSoftmax) { - const t = totalTicks; - expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; - } - else if (typeof backTickable !== 'undefined') { - expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; - } - return { - expectedDistance, - maxNegativeShiftPx, - fromTickable: backTickable, - }; - } - } - } - return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; - }); - return distances; - } - function shiftToIdealDistances(idealDistances) { - // Distribute ticks to the contexts based on the calculated distance error. - const centerX = adjustedJustifyWidth / 2; - let spaceAccum = 0; - contextList.forEach((tick, index) => { - const context = contextMap[tick]; - if (index > 0) { - const contextX = context.getX(); - const ideal = idealDistances[index]; - const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); - let negativeShiftPx = 0; - if (errorPx > 0) { - spaceAccum += errorPx; - } - else if (errorPx < 0) { - negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); - spaceAccum += -negativeShiftPx; - } - context.setX(contextX + spaceAccum); - } - // Move center aligned tickables to middle - context.getCenterAlignedTickables().forEach((tickable) => { - tickable.setCenterXShift(centerX - context.getX()); - }); - }); - return lastContext.getX() - firstContext.getX(); - } - const adjustedJustifyWidth = justifyWidth - - lastContext.getMetrics().notePx - - lastContext.getMetrics().totalRightPx - - firstContext.getMetrics().totalLeftPx; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); - const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); - const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); - const leftPadding = musicFont.lookupMetric('stave.padding'); - let targetWidth = adjustedJustifyWidth; - const distances = calculateIdealDistances(targetWidth); - let actualWidth = shiftToIdealDistances(distances); - // Just one context. Done formatting. - if (contextList.length === 1) - return 0; - const calcMinDistance = (targetWidth, distances) => { - let mdCalc = targetWidth / 2; - if (distances.length > 1) { - for (let di = 1; di < distances.length; ++di) { - mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); - } - } - return mdCalc; - }; - const minDistance = calcMinDistance(targetWidth, distances); - // right justify to either the configured padding, or the min distance between notes, whichever is greatest. - // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break - // existing visual regression tests. - const paddingMaxCalc = (curTargetWidth) => { - let lastTickablePadding = 0; - const lastTickable = lastContext && lastContext.getMaxTickable(); - if (lastTickable) { - const voice = lastTickable.getVoice(); - // If the number of actual ticks in the measure <> configured ticks, right-justify - // because the softmax won't yield the correct value - if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { - return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; - } - const tickWidth = lastTickable.getWidth(); - lastTickablePadding = - voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); - } - return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; - }; - let paddingMax = paddingMaxCalc(targetWidth); - let paddingMin = paddingMax - (configMaxPadding - configMinPadding); - const maxX = adjustedJustifyWidth - paddingMin; - let iterations = maxIterations; - // Adjust justification width until the right margin is as close as possible to the calculated padding, - // without going over - while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { - targetWidth -= actualWidth - maxX; - paddingMax = paddingMaxCalc(targetWidth); - paddingMin = paddingMax - (configMaxPadding - configMinPadding); - actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); - iterations--; - } - this.justifyWidth = justifyWidth; - return this.evaluate(); - } - /** Calculate the total cost of this formatting decision. */ - evaluate() { - const contexts = this.tickContexts; - const justifyWidth = this.justifyWidth; - // Calculate available slack per tick context. This works out how much freedom - // to move a context has in either direction, without affecting other notes. - this.contextGaps = { total: 0, gaps: [] }; - contexts.list.forEach((tick, index) => { - if (index === 0) - return; - const prevTick = contexts.list[index - 1]; - const prevContext = contexts.map[prevTick]; - const context = contexts.map[tick]; - const prevMetrics = prevContext.getMetrics(); - const currMetrics = context.getMetrics(); - // Calculate X position of right edge of previous note - const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; - // Calculate X position of left edge of current note - const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; - const gap = insideLeftEdge - insideRightEdge; - this.contextGaps.total += gap; - this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); - // Tell the tick contexts how much they can reposition themselves. - context.getFormatterMetrics().freedom.left = gap; - prevContext.getFormatterMetrics().freedom.right = gap; - }); - // Calculate mean distance in each voice for each duration type, then calculate - // how far each note is from the mean. - this.durationStats = {}; - const durationStats = this.durationStats; - function updateStats(duration, space) { - const stats = durationStats[duration]; - if (stats === undefined) { - durationStats[duration] = { mean: space, count: 1 }; - } - else { - stats.count += 1; - stats.mean = (stats.mean + space) / 2; - } - } - this.voices.forEach((voice) => { - voice.getTickables().forEach((note, i, notes) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getMetrics(); - const formatterMetrics = note.getFormatterMetrics(); - const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; - let space = 0; - if (i < notes.length - 1) { - const rightNote = notes[i + 1]; - const rightMetrics = rightNote.getMetrics(); - const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; - space = rightNoteEdge - leftNoteEdge; - formatterMetrics.space.used = rightNote.getX() - note.getX(); - rightNote.getFormatterMetrics().freedom.left = space; - } - else { - space = justifyWidth - leftNoteEdge; - formatterMetrics.space.used = justifyWidth - note.getX(); - } - formatterMetrics.freedom.right = space; - updateStats(duration, formatterMetrics.space.used); - }); - }); - // Calculate how much each note deviates from the mean. Loss function is square - // root of the sum of squared deviations. - let totalDeviation = 0; - this.voices.forEach((voice) => { - voice.getTickables().forEach((note) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getFormatterMetrics(); - metrics.space.mean = durationStats[duration].mean; - metrics.duration = duration; - metrics.iterations += 1; - metrics.space.deviation = metrics.space.used - metrics.space.mean; - totalDeviation += Math.pow(metrics.space.deviation, 2); - }); - }); - this.totalCost = Math.sqrt(totalDeviation); - this.lossHistory.push(this.totalCost); - return this.totalCost; - } - /** - * Run a single iteration of rejustification. At a high level, this method calculates - * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an - * attempt to reduce the cost. You can call this method multiple times until it finds - * and oscillates around a global minimum. - * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift - * the formatter should make based on its cost function. - */ - tune(options) { - var _a; - const contexts = this.tickContexts; - if (!contexts) { - return 0; - } - const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; - // Move `current` tickcontext by `shift` pixels, and adjust the freedom - // on adjacent tickcontexts. - function move(current, shift, prev, next) { - current.setX(current.getX() + shift); - current.getFormatterMetrics().freedom.left += shift; - current.getFormatterMetrics().freedom.right -= shift; - if (prev) - prev.getFormatterMetrics().freedom.right += shift; - if (next) - next.getFormatterMetrics().freedom.left -= shift; - } - let shift = 0; - this.totalShift = 0; - contexts.list.forEach((tick, index, list) => { - const context = contexts.map[tick]; - const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; - const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; - move(context, shift, prevContext, nextContext); - const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); - if (cost > 0) { - shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else if (cost < 0) { - if (nextContext) { - shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else { - shift = 0; - } - } - shift *= alpha; - this.totalShift += shift; - }); - return this.evaluate(); - } - /** - * This is the top-level call for all formatting logic completed - * after `x` *and* `y` values have been computed for the notes - * in the voices. - */ - postFormat() { - this.modifierContexts.forEach((modifierContexts) => { - modifierContexts.array.forEach((mc) => mc.postFormat()); - }); - this.tickContexts.list.forEach((tick) => { - this.tickContexts.map[tick].postFormat(); - }); - return this; - } - /** - * Take all `voices` and create `ModifierContext`s out of them. This tells - * the formatters that the voices belong on a single stave. - */ - joinVoices(voices) { - this.createModifierContexts(voices); - this.hasMinTotalWidth = false; - return this; - } - /** - * Align rests in voices, justify the contexts, and position the notes - * so voices are aligned and ready to render onto the stave. This method - * mutates the `x` positions of all tickables in `voices`. - * - * Voices are full justified to fit in `justifyWidth` pixels. - * - * Set `options.context` to the rendering context. Set `options.align_rests` - * to true to enable rest alignment. - */ - format(voices, justifyWidth, options) { - const opts = Object.assign({ align_rests: false }, options); - this.voices = voices; - const softmaxFactor = this.formatterOptions.softmaxFactor; - if (softmaxFactor) { - this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); - } - this.alignRests(voices, opts.align_rests); - this.createTickContexts(voices); - this.preFormat(justifyWidth, opts.context, voices, opts.stave); - // Only postFormat if a stave was supplied for y value formatting - if (opts.stave) - this.postFormat(); - return this; - } - // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. - formatToStave(voices, stave, optionsParam) { - const options = Object.assign({ context: stave.getContext() }, optionsParam); - // eslint-disable-next-line - const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - L('Formatting voices to width: ', justifyWidth); - return this.format(voices, justifyWidth, options); - } - getTickContext(tick) { - var _a; - return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; - } -} -// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. -Formatter.DEBUG = false; - - -/***/ }), - -/***/ "./src/fraction.ts": -/*!*************************!*\ - !*** ./src/fraction.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Fraction": () => (/* binding */ Fraction) -/* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Author: Joshua Koo / @zz85 -// Author: @incompleteopus - - -/** Fraction represents a rational number. */ -class Fraction { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; - } - /** - * GCD: Greatest common divisor using the Euclidean algorithm. - * Note: GCD(0, 0) => 0 and GCD(0, n) => n. - */ - static GCD(a, b) { - if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); - } - let t; - while (b !== 0) { - t = b; - b = a % b; - a = t; - } - return a; - } - /** LCM: Lowest common multiple. */ - static LCM(a, b) { - return (a * b) / Fraction.GCD(a, b); - } - /** Lowest common multiple for more than two numbers. */ - static LCMM(args) { - if (args.length === 0) { - return 0; - } - else if (args.length === 1) { - return args[0]; - } - else if (args.length === 2) { - return Fraction.LCM(args[0], args[1]); - } - else { - // args.shift() removes the first number. - // LCM the first number with the rest of the numbers. - return Fraction.LCM(args.shift(), Fraction.LCMM(args)); - } - } - /** Set the numerator and denominator. */ - constructor(numerator, denominator) { - this.numerator = 1; - this.denominator = 1; - this.set(numerator, denominator); - } - /** Set the numerator and denominator. */ - set(numerator = 1, denominator = 1) { - this.numerator = numerator; - this.denominator = denominator; - return this; - } - /** Return the value of the fraction. */ - value() { - return this.numerator / this.denominator; - } - /** Simplify numerator and denominator using GCD. */ - simplify() { - let u = this.numerator; - let d = this.denominator; - const gcd = Fraction.GCD(u, d); - u /= gcd; - d /= gcd; - if (d < 0) { - d = -d; - u = -u; - } - return this.set(u, d); - } - /** Add value of another fraction. */ - add(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a + otherNumerator * b; - return this.set(u, lcm); - } - /** Substract value of another fraction. */ - subtract(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a - otherNumerator * b; - return this.set(u, lcm); - } - /** Multiply by value of another fraction. */ - multiply(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); - } - /** Divide by value of another Fraction. */ - divide(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); - } - /** Simplify both sides and check if they are equal. */ - equals(compare) { - const a = Fraction.__staticFractionA.copy(compare).simplify(); - const b = Fraction.__staticFractionB.copy(this).simplify(); - return a.numerator === b.numerator && a.denominator === b.denominator; - } - /** Greater than operator. */ - greaterThan(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator > 0; - } - /** Greater than or equals operator. */ - greaterThanEquals(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator >= 0; - } - /** Less than operator. */ - lessThan(compare) { - return !this.greaterThanEquals(compare); - } - /** Less than or equals operator. */ - lessThanEquals(compare) { - return !this.greaterThan(compare); - } - /** Return a new copy with current values. */ - clone() { - return new Fraction(this.numerator, this.denominator); - } - /** Copy value of another fraction. */ - copy(other) { - if (typeof other === 'number') { - return this.set(other, 1); - } - else { - return this.set(other.numerator, other.denominator); - } - } - /** Return the integer component (eg. 5/2 => 2). */ - quotient() { - return Math.floor(this.numerator / this.denominator); - } - /** Return the remainder component (eg. 5/2 => 1). */ - remainder() { - return this.numerator % this.denominator; - } - /** Calculate absolute value. */ - makeAbs() { - this.denominator = Math.abs(this.denominator); - this.numerator = Math.abs(this.numerator); - return this; - } - /** Return a raw string representation (eg. "5/2"). */ - toString() { - return `${this.numerator}/${this.denominator}`; - } - /** Return a simplified string respresentation. */ - toSimplifiedString() { - return Fraction.__staticFractionTmp.copy(this).simplify().toString(); - } - /** Return string representation in mixed form. */ - toMixedString() { - let s = ''; - const q = this.quotient(); - const f = Fraction.__staticFractionTmp.copy(this); - if (q < 0) { - f.makeAbs(); - } - if (q !== 0) { - s += q; - if (f.numerator !== 0) { - s += ` ${f.toSimplifiedString()}`; - } - } - else if (f.numerator === 0) { - s = '0'; - } - else { - s = f.toSimplifiedString(); - } - return s; - } - /** Parse a fraction string. */ - parse(str) { - const i = str.split('/'); - const n = parseInt(i[0], 10); - const d = i[1] ? parseInt(i[1], 10) : 1; - return this.set(n, d); - } -} -// Cached objects for comparisons. -Fraction.__staticFractionA = new Fraction(); -Fraction.__staticFractionB = new Fraction(); -Fraction.__staticFractionTmp = new Fraction(); -/** Helper function to extract the numerator and denominator from another fraction. */ -function getNumeratorAndDenominator(n, d = 1) { - if (typeof n === 'number') { - // Both params are numbers, so we return them as [numerator, denominator]. - return [n, d]; - } - else { - // First param is a Fraction object. We ignore the second param. - return [n.numerator, n.denominator]; - } -} - - -/***/ }), - -/***/ "./src/frethandfinger.ts": -/*!*******************************!*\ - !*** ./src/frethandfinger.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// Author Larry Kuhns 2013 -// Class to draws string numbers into the notation. - - - - - - -class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; - } - // Arrange fingerings inside a ModifierContext. - static format(nums, state) { - const { left_shift, right_shift } = state; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shiftLeft = 0; - let shiftRight = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); - const textHeight = textFormatter.maxHeight; - if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { - state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { - state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); - } - if (right_shift === 0) { - shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); - } - } - prev_note = note; - } - nums_list.push({ - note, - num, - pos, - line: props.line, - shiftL: shiftLeft, - shiftR: shiftRight, - }); - } - // Sort fingernumbers by line number. - nums_list.sort((a, b) => b.line - a.line); - let numShiftL = 0; - let numShiftR = 0; - let xWidthL = 0; - let xWidthR = 0; - let lastLine = null; - let lastNote = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; - // Reset the position of the string number every line. - if (line !== lastLine || note !== lastNote) { - numShiftL = left_shift + shiftL; - numShiftR = right_shift + shiftR; - } - const numWidth = num.getWidth() + num_spacing; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - num.setXShift(left_shift + numShiftL); - num_shift = left_shift + numWidth; // spacing - xWidthL = num_shift > xWidthL ? num_shift : xWidthL; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - num.setXShift(numShiftR); - num_shift = shiftRight + numWidth; // spacing - xWidthR = num_shift > xWidthR ? num_shift : xWidthR; - } - lastLine = line; - lastNote = note; - } - state.left_shift += xWidthL; - state.right_shift += xWidthR; - return true; - } - static easyScoreHook({ fingerings } = {}, note, builder) { - fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { - const split = fingeringString.trim().split('.'); - const params = { number: split[0] }; - if (split[1]) - params.position = split[1]; - return builder.getFactory().Fingering(params); - }).map((fingering, index) => note.addModifier(fingering, index)); - } - constructor(finger) { - super(); - this.finger = finger; - this.width = 7; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head - this.x_shift = 0; - this.y_shift = 0; - this.x_offset = 0; // Horizontal offset from default - this.y_offset = 0; // Vertical offset from default - this.resetFont(); - } - setFretHandFinger(finger) { - this.finger = finger; - return this; - } - getFretHandFinger() { - return this.finger; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let dot_x = start.x + this.x_shift + this.x_offset; - let dot_y = start.y + this.y_shift + this.y_offset + 5; - switch (this.position) { - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: - dot_x -= 4; - dot_y -= 12; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: - dot_x -= 2; - dot_y += 10; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: - dot_x -= this.width; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: - dot_x += 1; - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); - } - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('' + this.finger, dot_x, dot_y); - ctx.restore(); - } -} -FretHandFinger.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 9, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/ghostnote.ts": -/*!**************************!*\ - !*** ./src/ghostnote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) -/* harmony export */ }); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description - - - -const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; -class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; - } - constructor(parameter) { - if (!parameter) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); - } - let noteStruct; - if (typeof parameter === 'string') { - // Preserve backwards-compatibility - noteStruct = { duration: parameter }; - } - else if (typeof parameter === 'object') { - noteStruct = parameter; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); - } - super(noteStruct); - // Note properties - this.setWidth(0); - } - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest() { - return true; - } - setStave(stave) { - super.setStave(stave); - return this; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - // Draw Annotations - this.setRendered(); - for (let i = 0; i < this.modifiers.length; ++i) { - const modifier = this.modifiers[i]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - } - } - } -} - - -/***/ }), - -/***/ "./src/glyph.ts": -/*!**********************!*\ - !*** ./src/glyph.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Glyph": () => (/* binding */ Glyph), -/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -var OutlineCode; -(function (OutlineCode) { - OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; - OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; - OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; - OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; -})(OutlineCode || (OutlineCode = {})); -class GlyphCacheEntry { - constructor(fontStack, code, category) { - this.point = -1; - this.metrics = Glyph.loadMetrics(fontStack, code, category); - this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); - if (category) { - this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); - } - } -} -class GlyphCache { - constructor() { - this.cache = new Map(); - } - lookup(code, category) { - let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); - if (entries === undefined) { - entries = {}; - this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); - } - const key = category ? `${code}%${category}` : code; - let entry = entries[key]; - if (entry === undefined) { - entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); - entries[key] = entry; - } - return entry; - } -} -class GlyphOutline { - constructor(outline, originX, originY, scale) { - this.outline = outline; - this.originX = originX; - this.originY = originY; - this.scale = scale; - this.i = 0; - this.precision = 1; - // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. - this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); - } - done() { - return this.i >= this.outline.length; - } - next() { - return Math.round((this.outline[this.i++] * this.precision) / this.precision); - } - nextX() { - return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - nextY() { - return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - static parse(str) { - const result = []; - const parts = str.split(' '); - let i = 0; - while (i < parts.length) { - switch (parts[i++]) { - case 'm': - result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'l': - result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'q': - result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'b': - result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - } - } - return result; - } -} -class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { - ////////////////////////////////////////////////////////////////////////////////////////////////// - // STATIC MEMBERS - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; - } - /** - * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, - * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. - * - * @param font - * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. - * @param code - * @param key - * @param defaultValue - */ - static lookupFontMetric(font, category, code, key, defaultValue) { - let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); - if (value === undefined) { - // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). - value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); - } - return value; - } - static lookupGlyph(fontStack, code) { - (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); - let glyph; - let font; - for (let i = 0; i < fontStack.length; i++) { - font = fontStack[i]; - glyph = font.getGlyphs()[code]; - if (glyph) - return { glyph, font }; - } - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); - } - static loadMetrics(fontStack, code, category) { - const { glyph, font } = Glyph.lookupGlyph(fontStack, code); - if (!glyph.o) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); - let x_shift = 0; - let y_shift = 0; - let scale = 1; - if (category && font) { - x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); - y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); - scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); - } - const x_min = glyph.x_min; - const x_max = glyph.x_max; - const ha = glyph.ha; - if (!glyph.cached_outline) { - glyph.cached_outline = GlyphOutline.parse(glyph.o); - } - return { - x_min, - x_max, - x_shift, - y_shift, - scale, - ha, - outline: glyph.cached_outline, - font, - width: x_max - x_min, - height: ha, - }; - } - /** - * Renders glyphs from the default font stack. - * - * @param ctx Canvas or SVG context - * @param x_pos x coordinate - * @param y_pos y coordinate - * @param point the point size of the font - * @param code the glyph code in font.getGlyphs() - * @param options - * @returns - */ - static renderGlyph(ctx, x_pos, y_pos, point, code, options) { - var _a; - const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); - const metrics = data.metrics; - if (data.point != -1) { - point = data.point; - } - const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; - const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; - Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); - return metrics; - } - static renderOutline(ctx, outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - ctx.beginPath(); - let x, y; - while (!go.done()) { - switch (go.next()) { - case OutlineCode.MOVE: - ctx.moveTo(go.nextX(), go.nextY()); - break; - case OutlineCode.LINE: - ctx.lineTo(go.nextX(), go.nextY()); - break; - case OutlineCode.QUADRATIC: - x = go.nextX(); - y = go.nextY(); - ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); - break; - case OutlineCode.BEZIER: - x = go.nextX(); - y = go.nextY(); - ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - break; - } - } - ctx.fill(); - } - static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); - // (penX, penY) hold the pen position: the start of each stroke. - let penX = x_pos; - let penY = y_pos; - let x, y; - while (!go.done()) { - switch (go.next()) { - case OutlineCode.MOVE: - // Note that we don't add any points to the bounding box until a srroke is actually drawn. - penX = go.nextX(); - penY = go.nextY(); - break; - case OutlineCode.LINE: - bboxComp.addPoint(penX, penY); - penX = go.nextX(); - penY = go.nextY(); - bboxComp.addPoint(penX, penY); - break; - case OutlineCode.QUADRATIC: - x = go.nextX(); - y = go.nextY(); - bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - case OutlineCode.BEZIER: - x = go.nextX(); - y = go.nextY(); - bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - } - } - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); - } - static getWidth(code, point, category) { - const data = Glyph.cache.lookup(code, category); - if (data.point != -1) { - point = data.point; - } - const scale = (point * 72) / (data.metrics.font.getResolution() * 100); - return data.bbox.getW() * scale; - } - /** - * @param code - * @param point - * @param options - */ - constructor(code, point, options) { - super(); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // INSTANCE MEMBERS - this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); - this.topGlyphs = []; - this.botGlyphs = []; - this.options = {}; - this.scale = 1; - this.code = code; - this.point = point; - this.originShift = { x: 0, y: 0 }; - this.x_shift = 0; - this.y_shift = 0; - if (options) { - this.setOptions(options); - } - else { - this.reset(); - } - } - // eslint-disable-next-line - draw(...args) { - // DO NOTHING. - } - getCode() { - return this.code; - } - // eslint-disable-next-line - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.reset(); - } - setPoint(point) { - this.point = point; - return this; - } - setStave(stave) { - this.stave = stave; - return this; - } - getXShift() { - return this.x_shift; - } - setXShift(x_shift) { - this.x_shift = x_shift; - return this; - } - getYshift() { - return this.y_shift; - } - setYShift(y_shift) { - this.y_shift = y_shift; - return this; - } - reset() { - const data = Glyph.cache.lookup(this.code, this.options.category); - this.metrics = data.metrics; - // Override point from metrics file - if (data.point != -1) { - this.point = data.point; - } - this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); - this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); - } - checkMetrics() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); - } - getMetrics() { - const metrics = this.checkMetrics(); - const metricsScale = metrics.scale; - return { - x_min: metrics.x_min * this.scale * metricsScale, - x_max: metrics.x_max * this.scale * metricsScale, - width: this.bbox.getW(), - height: this.bbox.getH(), - scale: this.scale * metricsScale, - x_shift: metrics.x_shift, - y_shift: metrics.y_shift, - outline: metrics.outline, - font: metrics.font, - ha: metrics.ha, - }; - } - setOriginX(x) { - const { bbox } = this; - const originX = Math.abs(bbox.getX() / bbox.getW()); - const xShift = (x - originX) * bbox.getW(); - this.originShift.x = -xShift; - } - setOriginY(y) { - const { bbox } = this; - const originY = Math.abs(bbox.getY() / bbox.getH()); - const yShift = (y - originY) * bbox.getH(); - this.originShift.y = -yShift; - } - setOrigin(x, y) { - this.setOriginX(x); - this.setOriginY(y); - } - render(ctx, x, y) { - const metrics = this.checkMetrics(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(ctx); - const xPos = x + this.originShift.x + metrics.x_shift; - const yPos = y + this.originShift.y + metrics.y_shift; - Glyph.renderOutline(ctx, outline, scale, xPos, yPos); - this.restoreStyle(ctx); - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - renderToStave(x) { - const context = this.checkContext(); - const metrics = this.checkMetrics(); - const stave = this.checkStave(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(); - const xPos = x + this.x_shift + metrics.x_shift; - const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; - Glyph.renderOutline(context, outline, scale, xPos, yPos); - this.restoreStyle(); - } -} -Glyph.cache = new GlyphCache(); -// The current cache key for GlyphCache above. -// Computed when Flow.setMusicFont(...) is called. -// It is set to a comma separated list of font names. -Glyph.CURRENT_CACHE_KEY = ''; -// Used by the GlyphCache above. -// Set when Flow.setMusicFont(...) is called. -Glyph.MUSIC_FONT_STACK = []; - - -/***/ }), - -/***/ "./src/glyphnote.ts": -/*!**************************!*\ - !*** ./src/glyphnote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Any glyph that is set to appear on a Stave and take up musical time and graphical space. - - -class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; - } - constructor(glyph, noteStruct, options) { - super(noteStruct); - this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); - // Note properties - this.ignore_ticks = this.options.ignoreTicks; - this.setGlyph(glyph); - } - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth(this.glyph.getMetrics().width); - return this; - } - getBoundingBox() { - return this.glyph.getBoundingBox(); - } - preFormat() { - if (!this.preFormatted && this.modifierContext) { - this.modifierContext.preFormat(); - } - this.preFormatted = true; - return this; - } - drawModifiers() { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - modifier.setContext(ctx); - modifier.drawWithStyle(); - } - } - /** Get the glyph width. */ - getGlyphWidth() { - return this.glyph.getMetrics().width; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('glyphNote', this.getAttribute('id')); - // Context is set when setStave is called on Note - const glyph = this.glyph; - if (!glyph.getContext()) { - glyph.setContext(ctx); - } - glyph.setStave(stave); - glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); - const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); - glyph.renderToStave(x); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} - - -/***/ }), - -/***/ "./src/gracenote.ts": -/*!**************************!*\ - !*** ./src/gracenote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) -/* harmony export */ }); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - - - -class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; - } - static get LEDGER_LINE_OFFSET() { - return 2; - } - static get SCALE() { - return 0.66; - } - constructor(noteStruct) { - super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); - this.slash = noteStruct.slash || false; - this.slur = true; - this.buildNoteHeads(); - this.width = 3; - } - getStemExtension() { - if (this.stem_extension_override) { - return this.stem_extension_override; - } - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - let ret = super.getStemExtension(); - if (glyphProps.stem) { - const staveNoteScale = this.getStaveNoteScale(); - ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; - } - return ret; - } - return 0; - } - getStaveNoteScale() { - return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; - } - draw() { - super.draw(); - this.setRendered(); - const stem = this.stem; - if (this.slash && stem) { - const staveNoteScale = this.getStaveNoteScale(); - // some magic numbers are based on the staveNoteScale 0.66. - const offsetScale = staveNoteScale / 0.66; - let slashBBox = undefined; - const beam = this.beam; - if (beam) { - // FIXME: should render slash after beam? - if (!beam.postFormatted) { - beam.postFormat(); - } - slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { - stem: 6 * offsetScale, - beam: 5 * offsetScale, - }); - } - else { - const stem_direction = this.getStemDirection(); - const noteHeadBounds = this.getNoteHeadBounds(); - const noteStemHeight = stem.getHeight(); - let x = this.getAbsoluteX(); - let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN - ? noteHeadBounds.y_top - noteStemHeight - : noteHeadBounds.y_bottom - noteStemHeight; - const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; - let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; - defaultOffsetY -= defaultOffsetY / 2.8; - defaultOffsetY += defaultStemExtention; - y += defaultOffsetY * staveNoteScale * stem_direction; - const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP - ? { - x1: 1, - y1: 0, - x2: 13, - y2: -9, - } - : { - x1: -4, - y1: 1, - x2: 13, - y2: 9, - }; - x += offsets.x1 * offsetScale; - y += offsets.y1 * offsetScale; - slashBBox = { - x1: x, - y1: y, - x2: x + offsets.x2 * offsetScale, - y2: y + offsets.y2 * offsetScale, - }; - } - // FIXME: avoid staff lines, ledger lines or others. - const ctx = this.checkContext(); - ctx.save(); - ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. - ctx.beginPath(); - ctx.moveTo(slashBBox.x1, slashBBox.y1); - ctx.lineTo(slashBBox.x2, slashBBox.y2); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); - } - } - calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { - const beam = this.beam; - if (!beam) - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); - const beam_slope = beam.slope; - const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; - const scaleX = isBeamEndNote ? -1 : 1; - const beam_angle = Math.atan(beam_slope * scaleX); - // slash line intersecting point on beam. - const iPointOnBeam = { - dx: Math.cos(beam_angle) * slashBeamOffset, - dy: Math.sin(beam_angle) * slashBeamOffset, - }; - slashStemOffset *= this.getStemDirection(); - const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); - const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; - const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; - const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; - const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; - const stemX = this.getStemX(); - const stem0X = beam.notes[0].getStemX(); - const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; - const ret = { - x1: stemX - protrusion_stem_dx, - y1: stemY + slashStemOffset - protrusion_stem_dy, - x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, - y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, - }; - return ret; - } -} - - -/***/ }), - -/***/ "./src/gracenotegroup.ts": -/*!*******************************!*\ - !*** ./src/gracenotegroup.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) -/* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This file implements `GraceNoteGroup` which is used to format and -// render grace notes. - - - - - - - - - - -// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (GraceNoteGroup.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); -} -/** GraceNoteGroup is used to format and render grace notes. */ -class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; - } - /** Arranges groups inside a `ModifierContext`. */ - static format(gracenote_groups, state) { - const group_spacing_stave = 4; - const group_spacing_tab = 0; - if (!gracenote_groups || gracenote_groups.length === 0) - return false; - const group_list = []; - let prev_note = null; - let shiftL = 0; - for (let i = 0; i < gracenote_groups.length; ++i) { - const gracenote_group = gracenote_groups[i]; - const note = gracenote_group.getNote(); - const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); - const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; - if (is_stavenote && note !== prev_note) { - // Iterate through all notes to get the displaced pixels - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); - } - prev_note = note; - } - group_list.push({ shift: shiftL, gracenote_group, spacing }); - } - // If first note left shift in case it is displaced - let group_shift = group_list[0].shift; - let formatWidth; - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - gracenote_group.preFormat(); - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - group_shift = Math.max(formatWidth, group_shift); - } - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); - } - state.left_shift += group_shift; - return true; - } - //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ - constructor(grace_notes, show_slur) { - super(); - this.preFormatted = false; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.grace_notes = grace_notes; - this.width = 0; - this.show_slur = show_slur; - this.slur = undefined; - this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ - num_beats: 4, - beat_value: 4, - resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, - }).setStrict(false); - this.render_options = { - slur_y_shift: 0, - }; - this.beams = []; - this.voice.addTickables(this.grace_notes); - return this; - } - preFormat() { - if (this.preFormatted) - return; - if (!this.formatter) { - this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); - } - this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - beamNotes(grace_notes) { - grace_notes = grace_notes || this.grace_notes; - if (grace_notes.length > 1) { - const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); - beam.render_options.beam_width = 3; - beam.render_options.partial_beam_length = 4; - this.beams.push(beam); - } - return this; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; - } - getGraceNotes() { - return this.grace_notes; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - L('Drawing grace note group for:', note); - this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function - // Draw grace notes. - this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); - // Draw beams. - this.beams.forEach((beam) => beam.setContext(ctx).draw()); - if (this.show_slur) { - // Create and draw slur. - const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); - const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; - this.slur = new TieClass({ - last_note: this.grace_notes[0], - first_note: note, - first_indices: [0], - last_indices: [0], - }); - this.slur.render_options.cp2 = 12; - this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; - this.slur.setContext(ctx).draw(); - } - } -} -GraceNoteGroup.DEBUG = false; - - -/***/ }), - -/***/ "./src/gracetabnote.ts": -/*!*****************************!*\ - !*** ./src/gracetabnote.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Balazs Forian-Szabo -// -// ## Description -// -// A basic implementation of grace notes -// to be rendered on a tab stave. -// -// See `tests/gracetabnote_tests.ts` for usage examples. - - - -class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; - } - constructor(noteStruct) { - super(noteStruct, false); - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // vertical shift from stave line - y_shift: 0.3, - // grace glyph scale - scale: 0.6, - // grace tablature font - font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); - this.updateWidth(); - } -} - - -/***/ }), - -/***/ "./src/index.ts": -/*!**********************!*\ - !*** ./src/index.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), -/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), -/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), -/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), -/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), -/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), -/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), -/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), -/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), -/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), -/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), -/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), -/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), -/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), -/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), -/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), -/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), -/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), -/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), -/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), -/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), -/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), -/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), -/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), -/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), -/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), -/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), -/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), -/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), -/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), -/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), -/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), -/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), -/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), -/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), -/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), -/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), -/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), -/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), -/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), -/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), -/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), -/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), -/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), -/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), -/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), -/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), -/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), -/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), -/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), -/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), -/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), -/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), -/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), -/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), -/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), -/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), -/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), -/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), -/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), -/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), -/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), -/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), -/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), -/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), -/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), -/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), -/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), -/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), -/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), -/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), -/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), -/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), -/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), -/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), -/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), -/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), -/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), -/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), -/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), -/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), -/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), -/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), -/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), -/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), -/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), -/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), -/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), -/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), -/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), -/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), -/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), -/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), -/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), -/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), -/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), -/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), -/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), -/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), -/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), -/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), -/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), -/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), -/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), -/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), -/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), -/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), -/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), -/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), -/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), -/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), -/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), -/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), -/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), -/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), -/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), -/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), -/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), -/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), -/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), -/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), -/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), -/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), -/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - - - - - - - - - - -// Do not export './fonts/*' because they are used by the entry/* files. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. - - - - - - - - - - - - - - - - - - -// Do not export './version'. It is accessible via Vex.Flow.BUILD. - - - - - - - -/***/ }), - -/***/ "./src/keymanager.ts": -/*!***************************!*\ - !*** ./src/keymanager.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) -/* harmony export */ }); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This class implements diatonic key management. - - -class KeyManager { - constructor(key) { - this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); - this.setKey(key); - } - setKey(key) { - this.key = key; - this.reset(); - return this; - } - getKey() { - return this.key; - } - reset() { - this.keyParts = this.music.getKeyParts(this.key); - this.keyString = this.keyParts.root; - if (this.keyParts.accidental) - this.keyString += this.keyParts.accidental; - const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; - if (!is_supported_type) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); - } - this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); - this.scaleMap = {}; - this.scaleMapByValue = {}; - this.originalScaleMapByValue = {}; - const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; - for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { - const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; - const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; - const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); - this.scaleMap[rootName] = noteName; - this.scaleMapByValue[this.scale[i]] = noteName; - this.originalScaleMapByValue[this.scale[i]] = noteName; - } - return this; - } - getAccidental(key) { - const root = this.music.getKeyParts(key).root; - const parts = this.music.getNoteParts(this.scaleMap[root]); - return { - note: this.scaleMap[root], - accidental: parts.accidental, - }; - } - selectNote(note) { - note = note.toLowerCase(); - const parts = this.music.getNoteParts(note); - // First look for matching note in our altered scale - const scaleNote = this.scaleMap[parts.root]; - const modparts = this.music.getNoteParts(scaleNote); - if (scaleNote === note) { - return { - note: scaleNote, - accidental: parts.accidental, - change: false, - }; - } - // Then search for a note of equivalent value in our altered scale - const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; - if (valueNote != null) { - return { - note: valueNote, - accidental: this.music.getNoteParts(valueNote).accidental, - change: false, - }; - } - // Then search for a note of equivalent value in the original scale - const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; - if (originalValueNote != null) { - this.scaleMap[modparts.root] = originalValueNote; - delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; - this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; - return { - note: originalValueNote, - accidental: this.music.getNoteParts(originalValueNote).accidental, - change: true, - }; - } - // Then try to unmodify a currently modified note. - if (modparts.root === note) { - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; - this.scaleMap[modparts.root] = modparts.root; - return { - note: modparts.root, - accidental: undefined, - change: true, - }; - } - // Last resort -- shitshoot - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(note)] = note; - delete this.scaleMap[modparts.root]; - this.scaleMap[modparts.root] = note; - return { - note, - accidental: parts.accidental, - change: true, - }; - } -} - - -/***/ }), - -/***/ "./src/keysignature.ts": -/*!*****************************!*\ - !*** ./src/keysignature.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// -// ## Description -// -// This file implements key signatures. A key signature sits on a stave -// and indicates the notes with implicit accidentals. - - - - - -class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; - } - // Create a new Key Signature based on a `key_spec` - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super(); - this.accList = []; - this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote? - this.glyphs = []; - this.xPositions = []; // relative to this.x - this.paddingForced = false; - } - // Add an accidental glyph to the `KeySignature` instance which represents - // the provided `acc`. If `nextAcc` is also provided, the appropriate - // spacing will be included in the glyph's position - convertToGlyph(acc, nextAcc) { - const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); - // Determine spacing between current accidental and the next accidental - let extraWidth = 1; - if (acc.type === 'n' && nextAcc) { - const spacing = KeySignature.accidentalSpacing[nextAcc.type]; - if (spacing) { - const isAbove = nextAcc.line >= acc.line; - extraWidth = isAbove ? spacing.above : spacing.below; - } - } - // Place the glyph on the stave - this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); - this.glyphs.push(glyph); - const xPosition = this.xPositions[this.xPositions.length - 1]; - const glyphWidth = glyph.getMetrics().width + extraWidth; - // Store the next accidental's x position - this.xPositions.push(xPosition + glyphWidth); - // Expand size of key signature - this.width += glyphWidth; - } - // Cancel out a key signature provided in the `spec` parameter. This will - // place appropriate natural accidentals before the key signature. - cancelKey(spec) { - this.formatted = false; - this.cancelKeySpec = spec; - return this; - } - convertToCancelAccList(spec) { - // Get the accidental list for the cancelled key signature - const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); - // If the cancelled key has a different accidental type, ie: # vs b - const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; - // Determine how many naturals needed to add - const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; - // Return if no naturals needed - if (naturals < 1) - return undefined; - // Get the line position for each natural - const cancelled = []; - for (let i = 0; i < naturals; i++) { - let index = i; - if (!different_types) { - index = cancel_accList.length - naturals + i; - } - const acc = cancel_accList[index]; - cancelled.push({ type: 'n', line: acc.line }); - } - // Combine naturals with main accidental list for the key signature - this.accList = cancelled.concat(this.accList); - return { - accList: cancelled, - type: cancel_accList[0].type, - }; - } - // Deprecated - addToStave(stave) { - this.paddingForced = true; - stave.addModifier(this); - return this; - } - // Apply the accidental staff line placement based on the `clef` and - // the accidental `type` for the key signature ('# or 'b'). - convertAccLines(clef, type, accList = this.accList) { - let offset = 0.0; // if clef === "treble" - let customLines; // when clef doesn't follow treble key sig shape - switch (clef) { - // Treble & Subbass both have offsets of 0, so are not included. - case 'soprano': - if (type === '#') - customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; - else - offset = -1; - break; - case 'mezzo-soprano': - if (type === 'b') - customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; - else - offset = 1.5; - break; - case 'alto': - offset = 0.5; - break; - case 'tenor': - if (type === '#') - customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; - else - offset = -0.5; - break; - case 'baritone-f': - case 'baritone-c': - if (type === 'b') - customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; - else - offset = 2; - break; - case 'bass': - case 'french': - offset = 1; - break; - default: - break; - } - // If there's a special case, assign those lines/spaces: - let i; - if (typeof customLines !== 'undefined') { - for (i = 0; i < accList.length; ++i) { - accList[i].line = customLines[i]; - } - } - else if (offset !== 0) { - for (i = 0; i < accList.length; ++i) { - accList[i].line += offset; - } - } - } - getPadding(index) { - if (!this.formatted) - this.format(); - return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; - } - getWidth() { - if (!this.formatted) - this.format(); - return this.width; - } - setKeySig(keySpec, cancelKeySpec, alterKeySpec) { - this.formatted = false; - this.keySpec = keySpec; - this.cancelKeySpec = cancelKeySpec; - this.alterKeySpec = alterKeySpec; - return this; - } - // Alter the accidentals of a key spec one by one. - // Each alteration is a new accidental that replaces the - // original accidental (or the canceled one). - alterKey(alterKeySpec) { - this.formatted = false; - this.alterKeySpec = alterKeySpec; - return this; - } - convertToAlterAccList(alterKeySpec) { - const max = Math.min(alterKeySpec.length, this.accList.length); - for (let i = 0; i < max; ++i) { - if (alterKeySpec[i]) { - this.accList[i].type = alterKeySpec[i]; - } - } - } - format() { - const stave = this.checkStave(); - this.width = 0; - this.glyphs = []; - this.xPositions = [0]; // initialize with initial x position - this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); - const accList = this.accList; - const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; - let cancelAccList; - if (this.cancelKeySpec) { - cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); - } - if (this.alterKeySpec) { - this.convertToAlterAccList(this.alterKeySpec); - } - if (this.accList.length > 0) { - const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); - if (cancelAccList) { - this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); - } - this.convertAccLines(clef, firstAccidentalType, accList); - for (let i = 0; i < this.accList.length; ++i) { - this.convertToGlyph(this.accList[i], this.accList[i + 1]); - } - } - this.formatted = true; - } - /** - * Return the Glyph objects making up this KeySignature. - */ - getGlyphs() { - if (!this.formatted) - this.format(); - return this.glyphs; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - if (!this.formatted) - this.format(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('keysignature', this.getAttribute('id')); - for (let i = 0; i < this.glyphs.length; i++) { - const glyph = this.glyphs[i]; - const x = this.x + this.xPositions[i]; - glyph.setStave(stave); - glyph.setContext(ctx); - glyph.renderToStave(x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -// Space between natural and following accidental depending -// on vertical position -KeySignature.accidentalSpacing = { - '#': { - above: 6, - below: 4, - }, - b: { - above: 4, - below: 7, - }, - n: { - above: 4, - below: 1, - }, - '##': { - above: 6, - below: 4, - }, - bb: { - above: 4, - below: 7, - }, - db: { - above: 4, - below: 7, - }, - d: { - above: 4, - below: 7, - }, - bbs: { - above: 4, - below: 7, - }, - '++': { - above: 6, - below: 4, - }, - '+': { - above: 6, - below: 4, - }, - '+-': { - above: 6, - below: 4, - }, - '++-': { - above: 6, - below: 4, - }, - bs: { - above: 4, - below: 10, - }, - bss: { - above: 4, - below: 10, - }, -}; - - -/***/ }), - -/***/ "./src/keysignote.ts": -/*!***************************!*\ - !*** ./src/keysignote.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) -/* harmony export */ }); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Mark Meeus 2019 - - - -class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; - } - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super({ duration: 'b' }); - this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); - // Note properties - this.ignore_ticks = true; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - this.keySignature.setStave(this.checkStave()); - this.setWidth(this.keySignature.getWidth()); - return this; - } - draw() { - const ctx = this.checkStave().checkContext(); - this.setRendered(); - this.keySignature.setX(this.getAbsoluteX()); - this.keySignature.setContext(ctx); - this.keySignature.draw(); - } -} - - -/***/ }), - -/***/ "./src/modifier.ts": -/*!*************************!*\ - !*** ./src/modifier.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Modifier": () => (/* binding */ Modifier), -/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -var ModifierPosition; -(function (ModifierPosition) { - ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; - ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; - ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; - ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; - ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; -})(ModifierPosition || (ModifierPosition = {})); -// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. -// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } -/** - * `Modifier` is an abstract interface for notational elements that modify - * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. - * - * For a `Modifier` instance to be positioned correctly, it must be part of - * a `ModifierContext`. All modifiers in the same context are rendered relative to - * one another. - * - * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, - * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same - * `ModifierContext`. This ensures that multiple voices don't trample all over each other. - */ -class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - /** - * Modifiers category string. Every modifier has a different category. - * The `ModifierContext` uses this to determine the type and order of the modifiers. - */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; - } - /** Modifiers can be positioned almost anywhere, relative to a note. */ - static get Position() { - return ModifierPosition; - } - static get PositionString() { - return { - center: ModifierPosition.CENTER, - above: ModifierPosition.ABOVE, - below: ModifierPosition.BELOW, - left: ModifierPosition.LEFT, - right: ModifierPosition.RIGHT, - }; - } - constructor() { - super(); - this.width = 0; - // The `text_line` is reserved space above or below a stave. - this.text_line = 0; - this.position = Modifier.Position.LEFT; - this.x_shift = 0; - this.y_shift = 0; - this.spacingFromNextModifier = 0; - } - /** Called when position changes. */ - reset() { - // DO NOTHING. - } - /** Get modifier widths. */ - getWidth() { - return this.width; - } - /** Set modifier widths. */ - setWidth(width) { - this.width = width; - return this; - } - /** Get attached note (`StaveNote`, `TabNote`, etc.) */ - getNote() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); - } - /** - * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). - * Also verifies that the index is valid. - */ - checkAttachedNote() { - const category = this.getCategory(); - (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); - } - /** - * Set attached note. - * @param note (`StaveNote`, `TabNote`, etc.) - */ - setNote(note) { - this.note = note; - return this; - } - /** Get note index, which is a specific note in a chord. */ - getIndex() { - return this.index; - } - /** Check and get note index, which is a specific note in a chord. */ - checkIndex() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); - } - /** Set note index, which is a specific note in a chord. */ - setIndex(index) { - this.index = index; - return this; - } - /** Get `ModifierContext`. */ - getModifierContext() { - return this.modifierContext; - } - /** Check and get `ModifierContext`. */ - checkModifierContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); - } - /** Every modifier must be part of a `ModifierContext`. */ - setModifierContext(c) { - this.modifierContext = c; - return this; - } - /** Get position. */ - getPosition() { - return this.position; - } - /** - * Set position. - * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW - */ - setPosition(position) { - this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; - this.reset(); - return this; - } - /** Set the `text_line` for the modifier. */ - setTextLine(line) { - this.text_line = line; - return this; - } - /** Shift modifier down `y` pixels. Negative values shift up. */ - setYShift(y) { - this.y_shift = y; - return this; - } - /** Set spacing from next modifier. */ - setSpacingFromNextModifier(x) { - this.spacingFromNextModifier = x; - } - /** Get spacing from next modifier. */ - getSpacingFromNextModifier() { - return this.spacingFromNextModifier; - } - /** - * Shift modifier `x` pixels in the direction of the modifier. Negative values - * shift reverse. - */ - setXShift(x) { - this.x_shift = 0; - if (this.position === Modifier.Position.LEFT) { - this.x_shift -= x; - } - else { - this.x_shift += x; - } - return this; - } - /** Get shift modifier `x` */ - getXShift() { - return this.x_shift; - } - /** Render the modifier onto the canvas. */ - draw() { - this.checkContext(); - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); - } - // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset - alignSubNotesWithNote(subNotes, note) { - // Shift over the tick contexts of each note - const tickContext = note.getTickContext(); - const metrics = tickContext.getMetrics(); - const stave = note.getStave(); - const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); - subNotes.forEach((subNote) => { - const subTickContext = subNote.getTickContext(); - if (stave) - subNote.setStave(stave); - subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render - }); - } -} - - -/***/ }), - -/***/ "./src/modifiercontext.ts": -/*!********************************!*\ - !*** ./src/modifiercontext.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This class implements various types of members to notes (e.g. bends, -// fingering positions etc.). The ModifierContext works with tickables -// that are at the same tick to ensure that they and their modifiers -// all have proper alignment. (Note that the ModifierContext also -// runs the spacing of the tickable). -// -// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works - - - - - - - - - - - - - - - - - -// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (ModifierContext.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); -} -class ModifierContext { - constructor() { - // Formatting data. - this.state = { - left_shift: 0, - right_shift: 0, - text_line: 0, - top_text_line: 0, - }; - // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, - // StaveNotes, TabNotes, etc. - this.members = {}; - this.preFormatted = false; - this.postFormatted = false; - this.formatted = false; - this.width = 0; - this.spacing = 0; - } - addModifier(member) { - L('addModifier is deprecated, use addMember instead.'); - return this.addMember(member); - } - /** - * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. - * Here we add a new member to this.members, and create a new array if needed. - * @param member - * @returns this - */ - addMember(member) { - const category = member.getCategory(); - if (!this.members[category]) { - this.members[category] = []; - } - this.members[category].push(member); - member.setModifierContext(this); - this.preFormatted = false; - return this; - } - /** - * @deprecated - */ - getModifiers(category) { - L('getModifiers is deprecated, use getMembers instead.'); - return this.getMembers(category); - } - getMembers(category) { - var _a; - return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; - } - /** - * Get the width of the entire - */ - getWidth() { - return this.width; - } - getLeftShift() { - return this.state.left_shift; - } - getRightShift() { - return this.state.right_shift; - } - getState() { - return this.state; - } - getMetrics() { - if (!this.formatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); - } - return { - width: this.state.left_shift + this.state.right_shift + this.spacing, - spacing: this.spacing, - }; - } - preFormat() { - if (this.preFormatted) - return; - L('Preformatting ModifierContext'); - const state = this.state; - const members = this.members; - // The ordering below determines when different members are formatted and rendered. - _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); - _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); - _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); - _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); - _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); - _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); - _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); - _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); - _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); - _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); - _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); - _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); - _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); - _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); - _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); - // Update width of this member context - this.width = state.left_shift + state.right_shift; - this.preFormatted = true; - } - postFormat() { - if (this.postFormatted) - return; - L('Postformatting ModifierContext'); - // If post-formatting is required for an element, add more lines below. - _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); - } -} -ModifierContext.DEBUG = false; - - -/***/ }), - -/***/ "./src/multimeasurerest.ts": -/*!*********************************!*\ - !*** ./src/multimeasurerest.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements multiple measure rests. - - - - - - - - -let semibreve_rest; -function get_semibreve_rest() { - if (!semibreve_rest) { - const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); - semibreve_rest = { - glyph_font_scale: noteHead.render_options.glyph_font_scale, - glyph_code: noteHead.glyph_code, - width: noteHead.getWidth(), - }; - } - return semibreve_rest; -} -class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; - } - /** - * - * @param number_of_measures Number of measures. - * @param options The options object. - */ - constructor(number_of_measures, options) { - super(); - this.xs = { left: NaN, right: NaN }; - this.hasPaddingLeft = false; - this.hasPaddingRight = false; - this.hasLineThickness = false; - this.hasSymbolSpacing = false; - this.number_of_measures = number_of_measures; - // Keep track of whether these four options were provided. - this.hasPaddingLeft = typeof options.padding_left === 'number'; - this.hasPaddingRight = typeof options.padding_right === 'number'; - this.hasLineThickness = typeof options.line_thickness === 'number'; - this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.render_options.number_line += fontLineShift; - } - getXs() { - return this.xs; - } - setStave(stave) { - this.stave = stave; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - drawLine(stave, ctx, left, right, spacingBetweenLines) { - const options = this.render_options; - const y = stave.getYForLine(options.line); - const padding = (right - left) * 0.1; - left += padding; - right -= padding; - let lineThicknessHalf; - if (this.hasLineThickness) { - lineThicknessHalf = options.line_thickness * 0.5; - } - else { - lineThicknessHalf = spacingBetweenLines * 0.25; - } - const serifThickness = options.serif_thickness; - const top = y - spacingBetweenLines; - const bot = y + spacingBetweenLines; - const leftIndented = left + serifThickness; - const rightIndented = right - serifThickness; - const lineTop = y - lineThicknessHalf; - const lineBottom = y + lineThicknessHalf; - ctx.save(); - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(leftIndented, top); - ctx.lineTo(leftIndented, lineTop); - ctx.lineTo(rightIndented, lineTop); - ctx.lineTo(rightIndented, top); - ctx.lineTo(right, top); - ctx.lineTo(right, bot); - ctx.lineTo(rightIndented, bot); - ctx.lineTo(rightIndented, lineBottom); - ctx.lineTo(leftIndented, lineBottom); - ctx.lineTo(leftIndented, bot); - ctx.lineTo(left, bot); - ctx.closePath(); - ctx.fill(); - } - drawSymbols(stave, ctx, left, right, spacingBetweenLines) { - const n4 = Math.floor(this.number_of_measures / 4); - const n = this.number_of_measures % 4; - const n2 = Math.floor(n / 2); - const n1 = n % 2; - const options = this.render_options; - // FIXME: TODO: invalidate semibreve_rest at the appropriate time - // (e.g., if the system font settings are changed). - semibreve_rest = undefined; - const rest = get_semibreve_rest(); - const rest_scale = options.semibreve_rest_glyph_scale; - const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); - const glyphs = { - 2: { - width: rest_width * 0.5, - height: spacingBetweenLines, - }, - 1: { - width: rest_width, - }, - }; - /* 10: normal spacingBetweenLines */ - const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; - const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; - let x = left + (right - left) * 0.5 - width * 0.5; - const line = options.line; - const yTop = stave.getYForLine(line - 1); - const yMiddle = stave.getYForLine(line); - const yBottom = stave.getYForLine(line + 1); - ctx.save(); - ctx.setStrokeStyle('none'); - ctx.setLineWidth(0); - for (let i = 0; i < n4; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n2; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n1; ++i) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); - x += glyphs[1].width + spacing; - } - ctx.restore(); - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const stave = this.checkStave(); - let left = stave.getNoteStartX(); - let right = stave.getNoteEndX(); - // FIXME: getNoteStartX() returns x + 5(barline width) - // getNoteEndX() returns x + width(no barline width) - // See Stave constructor. How do we fix this? - // Here, we subtract the barline width. - const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); - if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { - left -= begModifiers[0].getWidth(); - } - const options = this.render_options; - if (this.hasPaddingLeft) { - left = stave.getX() + options.padding_left; - } - if (this.hasPaddingRight) { - right = stave.getX() + stave.getWidth() - options.padding_right; - } - this.xs.left = left; - this.xs.right = right; - const spacingBetweenLines = options.spacing_between_lines_px; - if (options.use_symbols) { - this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); - } - else { - this.drawLine(stave, ctx, left, right, spacingBetweenLines); - } - if (options.show_number) { - const timeSpec = '/' + this.number_of_measures; - const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); - timeSig.point = options.number_glyph_point; - timeSig.setTimeSig(timeSpec); - timeSig.setStave(stave); - timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); - timeSig.bottomLine = options.number_line; - timeSig.setContext(ctx).draw(); - } - } -} - - -/***/ }), - -/***/ "./src/music.ts": -/*!**********************!*\ - !*** ./src/music.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Music": () => (/* binding */ Music) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - -/** Music implements some standard music theory routines. */ -class Music { - /** Number of an canonical notes (12). */ - static get NUM_TONES() { - return this.canonical_notes.length; - } - /** Names of root notes ('c', 'd',...) */ - static get roots() { - return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; - } - /** Values of the root notes.*/ - static get root_values() { - return [0, 2, 4, 5, 7, 9, 11]; - } - /** Indices of the root notes.*/ - static get root_indices() { - return { - c: 0, - d: 1, - e: 2, - f: 3, - g: 4, - a: 5, - b: 6, - }; - } - /** Names of canonical notes ('c', 'c#', 'd',...). */ - static get canonical_notes() { - return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; - } - /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ - static get diatonic_intervals() { - return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; - } - /** NoteAccidental associated to diatonic intervals. */ - static get diatonic_accidentals() { - return { - unison: { note: 0, accidental: 0 }, - m2: { note: 1, accidental: -1 }, - M2: { note: 1, accidental: 0 }, - m3: { note: 2, accidental: -1 }, - M3: { note: 2, accidental: 0 }, - p4: { note: 3, accidental: 0 }, - dim5: { note: 4, accidental: -1 }, - p5: { note: 4, accidental: 0 }, - m6: { note: 5, accidental: -1 }, - M6: { note: 5, accidental: 0 }, - b7: { note: 6, accidental: -1 }, - M7: { note: 6, accidental: 0 }, - octave: { note: 7, accidental: 0 }, - }; - } - /** Semitones shift associated to intervals .*/ - static get intervals() { - return { - u: 0, - unison: 0, - m2: 1, - b2: 1, - min2: 1, - S: 1, - H: 1, - 2: 2, - M2: 2, - maj2: 2, - T: 2, - W: 2, - m3: 3, - b3: 3, - min3: 3, - M3: 4, - 3: 4, - maj3: 4, - 4: 5, - p4: 5, - '#4': 6, - b5: 6, - aug4: 6, - dim5: 6, - 5: 7, - p5: 7, - '#5': 8, - b6: 8, - aug5: 8, - 6: 9, - M6: 9, - maj6: 9, - b7: 10, - m7: 10, - min7: 10, - dom7: 10, - M7: 11, - maj7: 11, - 8: 12, - octave: 12, - }; - } - /** Semitones shifts associated with scales. */ - static get scales() { - return { - major: [2, 2, 1, 2, 2, 2, 1], - minor: [2, 1, 2, 2, 1, 2, 2], - ionian: [2, 2, 1, 2, 2, 2, 1], - dorian: [2, 1, 2, 2, 2, 1, 2], - phyrgian: [1, 2, 2, 2, 1, 2, 2], - lydian: [2, 2, 2, 1, 2, 2, 1], - mixolydian: [2, 2, 1, 2, 2, 1, 2], - aeolian: [2, 1, 2, 2, 1, 2, 2], - locrian: [1, 2, 2, 1, 2, 2, 2], - }; - } - /** Scales associated with m (minor) and M (major). */ - static get scaleTypes() { - return { - M: Music.scales.major, - m: Music.scales.minor, - }; - } - /** Accidentals abbreviations. */ - static get accidentals() { - return ['bb', 'b', 'n', '#', '##']; - } - /** Note values. */ - static get noteValues() { - return { - c: { root_index: 0, int_val: 0 }, - cn: { root_index: 0, int_val: 0 }, - 'c#': { root_index: 0, int_val: 1 }, - 'c##': { root_index: 0, int_val: 2 }, - cb: { root_index: 0, int_val: 11 }, - cbb: { root_index: 0, int_val: 10 }, - d: { root_index: 1, int_val: 2 }, - dn: { root_index: 1, int_val: 2 }, - 'd#': { root_index: 1, int_val: 3 }, - 'd##': { root_index: 1, int_val: 4 }, - db: { root_index: 1, int_val: 1 }, - dbb: { root_index: 1, int_val: 0 }, - e: { root_index: 2, int_val: 4 }, - en: { root_index: 2, int_val: 4 }, - 'e#': { root_index: 2, int_val: 5 }, - 'e##': { root_index: 2, int_val: 6 }, - eb: { root_index: 2, int_val: 3 }, - ebb: { root_index: 2, int_val: 2 }, - f: { root_index: 3, int_val: 5 }, - fn: { root_index: 3, int_val: 5 }, - 'f#': { root_index: 3, int_val: 6 }, - 'f##': { root_index: 3, int_val: 7 }, - fb: { root_index: 3, int_val: 4 }, - fbb: { root_index: 3, int_val: 3 }, - g: { root_index: 4, int_val: 7 }, - gn: { root_index: 4, int_val: 7 }, - 'g#': { root_index: 4, int_val: 8 }, - 'g##': { root_index: 4, int_val: 9 }, - gb: { root_index: 4, int_val: 6 }, - gbb: { root_index: 4, int_val: 5 }, - a: { root_index: 5, int_val: 9 }, - an: { root_index: 5, int_val: 9 }, - 'a#': { root_index: 5, int_val: 10 }, - 'a##': { root_index: 5, int_val: 11 }, - ab: { root_index: 5, int_val: 8 }, - abb: { root_index: 5, int_val: 7 }, - b: { root_index: 6, int_val: 11 }, - bn: { root_index: 6, int_val: 11 }, - 'b#': { root_index: 6, int_val: 0 }, - 'b##': { root_index: 6, int_val: 1 }, - bb: { root_index: 6, int_val: 10 }, - bbb: { root_index: 6, int_val: 9 }, - }; - } - isValidNoteValue(note) { - return note >= 0 && note < Music.canonical_notes.length; - } - isValidIntervalValue(interval) { - return interval >= 0 && interval < Music.diatonic_intervals.length; - } - /** Return root and accidental associated to a note. */ - getNoteParts(noteString) { - if (!noteString || noteString.length < 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - if (noteString.length > 3) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - const note = noteString.toLowerCase(); - const regex = /^([cdefgab])(b|bb|n|#|##)?$/; - const match = regex.exec(note); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - return { - root, - accidental, - }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - } - /** Return root, accidental and type associated to a key. */ - getKeyParts(keyString) { - if (!keyString || keyString.length < 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); - } - const key = keyString.toLowerCase(); - // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. - const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; - const match = regex.exec(key); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - let type = match[3]; - // Unspecified type implies major - if (!type) - type = 'M'; - return { - root, - accidental, - type, - }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); - } - } - /** Note value associated to a note name. */ - getNoteValue(noteString) { - const value = Music.noteValues[noteString]; - if (value === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); - } - return value.int_val; - } - /** Interval value associated to an interval name. */ - getIntervalValue(intervalString) { - const value = Music.intervals[intervalString]; - if (value === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); - } - return value; - } - /** Canonical note name associated to a value. */ - getCanonicalNoteName(noteValue) { - if (!this.isValidNoteValue(noteValue)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); - } - return Music.canonical_notes[noteValue]; - } - /** Interval name associated to a value. */ - getCanonicalIntervalName(intervalValue) { - if (!this.isValidIntervalValue(intervalValue)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); - } - return Music.diatonic_intervals[intervalValue]; - } - /** - * Given a note, interval, and interval direction, produce the relative note. - */ - getRelativeNoteValue(noteValue, intervalValue, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; - if (sum < 0) - sum += Music.NUM_TONES; - return sum; - } - /** - * Given a root and note value, produce the relative note name. - */ - getRelativeNoteName(root, noteValue) { - const parts = this.getNoteParts(root); - const rootValue = this.getNoteValue(parts.root); - let interval = noteValue - rootValue; - if (Math.abs(interval) > Music.NUM_TONES - 3) { - let multiplier = 1; - if (interval > 0) - multiplier = -1; - // Possibly wrap around. (Add +1 for modulo operator) - const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; - if (Math.abs(reverse_interval) > 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - else { - interval = reverse_interval; - } - } - if (Math.abs(interval) > 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - let relativeNoteName = parts.root; - if (interval > 0) { - for (let i = 1; i <= interval; ++i) { - relativeNoteName += '#'; - } - } - else if (interval < 0) { - for (let i = -1; i >= interval; --i) { - relativeNoteName += 'b'; - } - } - return relativeNoteName; - } - /** - * Return scale tones, given intervals. Each successive interval is - * relative to the previous one, e.g., Major Scale: - * - * TTSTTTS = [2,2,1,2,2,2,1] - * - * When used with key = 0, returns C scale (which is isomorphic to - * interval list). - */ - getScaleTones(key, intervals) { - const tones = [key]; - let nextNote = key; - for (let i = 0; i < intervals.length; i++) { - nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); - if (nextNote !== key) - tones.push(nextNote); - } - return tones; - } - /** - * Return the interval of a note, given a diatonic scale. - * e.g., given the scale C, and the note E, returns M3. - */ - getIntervalBetween(note1, note2, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); - } - let difference = direction === 1 ? note2 - note1 : note1 - note2; - if (difference < 0) - difference += Music.NUM_TONES; - return difference; - } - /** - * Create a scale map that represents the pitch state for a - * `keySignature`. For example, passing a `G` to `keySignature` would - * return a scale map with every note naturalized except for `F` which - * has an `F#` state. - */ - createScaleMap(keySignature) { - const keySigParts = this.getKeyParts(keySignature); - if (!keySigParts.type) - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); - const scaleName = Music.scaleTypes[keySigParts.type]; - let keySigString = keySigParts.root; - if (keySigParts.accidental) - keySigString += keySigParts.accidental; - if (!scaleName) - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); - const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); - const noteLocation = Music.root_indices[keySigParts.root]; - const scaleMap = {}; - for (let i = 0; i < Music.roots.length; ++i) { - const index = (noteLocation + i) % Music.roots.length; - const rootName = Music.roots[index]; - let noteName = this.getRelativeNoteName(rootName, scale[i]); - if (noteName.length === 1) { - noteName += 'n'; - } - scaleMap[rootName] = noteName; - } - return scaleMap; - } -} - - -/***/ }), - -/***/ "./src/note.ts": -/*!*********************!*\ - !*** ./src/note.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Note": () => (/* binding */ Note) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -/** - * Note implements an abstract interface for notes and chords that - * are rendered on a stave. Notes have some common properties: All of them - * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) - * - * Some notes have stems, heads, dots, etc. Most notational elements that - * surround a note are called *modifiers*, and every note has an associated - * array of them. All notes also have a rendering context and belong to a stave. - */ -class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { - ////////////////////////////////////////////////////////////////////////////////////////////////// - // STATIC MEMBERS - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; - } - /** Debug helper. Displays various note metrics for the given note. */ - static plotMetrics(ctx, note, yPos) { - const metrics = note.getMetrics(); - const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; - const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; - const xAbs = note.getAbsoluteX(); - const xPost1 = note.getAbsoluteX() + metrics.notePx; - const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; - const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; - const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); - const xWidth = xEnd - xStart; - ctx.save(); - ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); - ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); - const y = yPos + 7; - function stroke(x1, x2, color, yy = y) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(3); - ctx.moveTo(x1 + note.getXShift(), yy); - ctx.lineTo(x2 + note.getXShift(), yy); - ctx.stroke(); - } - stroke(xStart, xPre1, 'red'); - stroke(xPre1, xAbs, '#999'); - stroke(xAbs, xPost1, 'green'); - stroke(xPost1, xPost2, '#999'); - stroke(xPost2, xEnd, 'red'); - stroke(xEnd, xFreedomRight, '#DD0'); - stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift - (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); - const formatterMetrics = note.getFormatterMetrics(); - if (formatterMetrics.iterations > 0) { - const spaceDeviation = formatterMetrics.space.deviation; - const prefix = spaceDeviation >= 0 ? '+' : ''; - ctx.setFillStyle('red'); - ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); - } - ctx.restore(); - } - static parseDuration(durationString) { - if (!durationString) { - return undefined; - } - const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; - const result = regexp.exec(durationString); - if (!result) { - return undefined; - } - const duration = result[1]; - const dots = result[2].length; - const type = result[3] || 'n'; - return { duration, dots, type }; - } - static parseNoteStruct(noteStruct) { - // Preserve backwards-compatibility - const durationProps = Note.parseDuration(noteStruct.duration); - if (!durationProps) { - return undefined; - } - // If specified type is invalid, return undefined. - let type = noteStruct.type; - if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { - return undefined; - } - // If no type specified, check duration or custom types - const customTypes = []; - if (!type) { - type = durationProps.type || 'n'; - // If we have keys, try and check if we've got a custom glyph - if (noteStruct.keys !== undefined) { - noteStruct.keys.forEach((k, i) => { - const result = k.split('/'); - // We have a custom glyph specified after the note eg. /X2 - customTypes[i] = (result && result.length === 3 ? result[2] : type); - }); - } - } - // Calculate the tick duration of the note - let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); - if (!ticks) { - return undefined; - } - // Are there any dots? - const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; - if (typeof dots !== 'number') { - return undefined; - } - // Add ticks as necessary depending on the numbr of dots - let currentTicks = ticks; - for (let i = 0; i < dots; i++) { - if (currentTicks <= 1) - return undefined; - currentTicks = currentTicks / 2; - ticks += currentTicks; - } - return { - duration: durationProps.duration, - type, - customTypes, - dots, - ticks, - }; - } - /** - * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for - * positioning and layout. - * - * @param noteStruct To create a new note you need to provide a `noteStruct`. - */ - constructor(noteStruct) { - super(); - if (!noteStruct) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); - } - /** Parses `noteStruct` and get note properties. */ - const parsedNoteStruct = Note.parseNoteStruct(noteStruct); - if (!parsedNoteStruct) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); - } - // Set note properties from parameters. - this.keys = noteStruct.keys || []; - // per-pitch properties - this.keyProps = []; - this.duration = parsedNoteStruct.duration; - this.noteType = parsedNoteStruct.type; - this.customTypes = parsedNoteStruct.customTypes; - if (noteStruct.duration_override) { - // Custom duration - this.setDuration(noteStruct.duration_override); - } - else { - // Default duration - this.setIntrinsicTicks(parsedNoteStruct.ticks); - } - this.modifiers = []; - // Get the glyph code for this note from the font. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); - this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); - // Note to play for audio players. - this.playNote = undefined; - // Positioning contexts used by the Formatter. - this.ignore_ticks = false; - // Positioning variables - this.width = 0; // Width in pixels calculated after preFormat - this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head - this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head - this.x_shift = 0; // X shift from tick context X - this.ys = []; // list of y coordinates for each note - // we need to hold on to these for ties and beams. - if (noteStruct.align_center) { - this.setCenterAlignment(noteStruct.align_center); - } - // The render surface. - this.render_options = { - annotation_spacing: 5, - glyph_font_scale: 1, - stroke_px: 1, - scale: 1, - font: '', - y_shift: 0, - }; - } - /** - * Get the play note, which is arbitrary data that can be used by an - * audio player. - */ - getPlayNote() { - return this.playNote; - } - /** - * Set the play note, which is arbitrary data that can be used by an - * audio player. - */ - setPlayNote(note) { - this.playNote = note; - return this; - } - /** - * @returns true if this note is a type of rest. - * - * Rests don't have pitches, but take up space in the score. - * Subclasses should override this default implementation. - */ - isRest() { - return false; - } - /** Add stroke. */ - addStroke(index, stroke) { - stroke.setNote(this); - stroke.setIndex(index); - this.modifiers.push(stroke); - this.preFormatted = false; - return this; - } - /** Get the target stave. */ - getStave() { - return this.stave; - } - /** Check and get the target stave. */ - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - /** Set the target stave. */ - setStave(stave) { - this.stave = stave; - this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. - this.setContext(this.stave.getContext()); - return this; - } - /** Get spacing to the left of the notes. */ - getLeftDisplacedHeadPx() { - return this.leftDisplacedHeadPx; - } - /** Get spacing to the right of the notes. */ - getRightDisplacedHeadPx() { - return this.rightDisplacedHeadPx; - } - /** Set spacing to the left of the notes. */ - setLeftDisplacedHeadPx(x) { - this.leftDisplacedHeadPx = x; - return this; - } - /** Set spacing to the right of the notes. */ - setRightDisplacedHeadPx(x) { - this.rightDisplacedHeadPx = x; - return this; - } - /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ - shouldIgnoreTicks() { - return this.ignore_ticks; - } - /** Get the stave line number for the note. */ - // eslint-disable-next-line - getLineNumber(isTopNote) { - return 0; - } - /** Get the stave line number for rest. */ - getLineForRest() { - return 0; - } - /** - * @deprecated Use `getGlyphProps()` instead. - */ - // eslint-disable-next-line - getGlyph() { - return this.glyphProps; - } - /** Get the glyph associated with this note. */ - getGlyphProps() { - return this.glyphProps; - } - /** Get the glyph width. */ - getGlyphWidth() { - return this.glyphProps.getWidth(this.render_options.glyph_font_scale); - } - /** - * Set Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - setYs(ys) { - this.ys = ys; - return this; - } - /** - * Get Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - getYs() { - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); - } - return this.ys; - } - /** - * Get the Y position of the space above the stave onto which text can - * be rendered. - */ - getYForTopText(text_line) { - return this.checkStave().getYForTopText(text_line); - } - /** Return the voice that this note belongs in. */ - getVoice() { - if (!this.voice) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); - return this.voice; - } - /** Attach this note to `voice`. */ - setVoice(voice) { - this.voice = voice; - this.preFormatted = false; - return this; - } - /** Get the `TickContext` for this note. */ - getTickContext() { - return this.checkTickContext(); - } - /** Set the `TickContext` for this note. */ - setTickContext(tc) { - this.tickContext = tc; - this.preFormatted = false; - return this; - } - /** Accessor to duration. */ - getDuration() { - return this.duration; - } - /** Accessor to isDotted. */ - isDotted() { - return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; - } - /** Accessor to hasStem. */ - hasStem() { - return false; - } - /** Accessor to note type. */ - getNoteType() { - return this.noteType; - } - /** Get the beam. */ - getBeam() { - return this.beam; - } - /** Check and get the beam. */ - checkBeam() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); - } - /** Check it has a beam. */ - hasBeam() { - return this.beam != undefined; - } - /** Set the beam. */ - setBeam(beam) { - this.beam = beam; - return this; - } - /** - * Attach a modifier to this note. - * @param modifier the Modifier to add. - * @param index of the key to modify. - * @returns this - */ - addModifier(modifier, index = 0) { - const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; - // Backwards compatibility with 3.0.9. - if (typeof index === 'string') { - index = parseInt(index); - // eslint-disable-next-line - console.warn(signature + ' expected a number for `index`, but received a string.'); - } - // Some versions of VexFlow had the two parameters reversed. - // Check here and throw an error if the argument types are not correct. - if (typeof modifier !== 'object' || typeof index !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); - } - modifier.setNote(this); - modifier.setIndex(index); - super.addModifier(modifier); - return this; - } - /** Get all modifiers of a specific type in `this.modifiers`. */ - getModifiersByType(type) { - return this.modifiers.filter((modifier) => modifier.getCategory() === type); - } - /** Get the coordinates for where modifiers begin. */ - // eslint-disable-next-line - getModifierStartXY(position, index, options) { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - return { - x: this.getAbsoluteX(), - y: this.ys[0], - }; - } - getRightParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getRightDisplacedHeadPx() : 0; - } - getLeftParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; - } - getFirstDotPx() { - let px = this.getRightDisplacedHeadPx(); - if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) - px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); - return px; - } - /** Get the metrics for this note. */ - getMetrics() { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); - } - const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; - const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; - const width = this.getWidth(); - const glyphWidth = this.getGlyphWidth(); - const notePx = width - - modLeftPx - // subtract left modifiers - modRightPx - // subtract right modifiers - this.leftDisplacedHeadPx - // subtract left displaced head - this.rightDisplacedHeadPx; // subtract right displaced head - // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. - return { - width, - glyphWidth, - notePx, - // Modifier spacing. - modLeftPx, - modRightPx, - // Displaced note head on left or right. - leftDisplacedHeadPx: this.leftDisplacedHeadPx, - rightDisplacedHeadPx: this.rightDisplacedHeadPx, - glyphPx: 0, - }; - } - /** - * Get the absolute `X` position of this note's tick context. This - * excludes x_shift, so you'll need to factor it in if you're - * looking for the post-formatted x-position. - */ - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - // Position note to left edge of tick context. - let x = tickContext.getX(); - if (this.stave) { - x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); - } - if (this.isCenterAligned()) { - x += this.getCenterXShift(); - } - return x; - } - /** Get the direction of the stem. */ - getStemDirection() { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - } - /** Get the top and bottom `y` values of the stem. */ - getStemExtents() { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - } - /** Get the `x` coordinate to the right of the note. */ - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieStartX += note_glyph_width / 2; - tieStartX += -this.width / 2 + this.width + 2; - return tieStartX; - } - /** Get the `x` coordinate to the left of the note. */ - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieEndX += note_glyph_width / 2; - tieEndX -= this.width / 2 + 2; - return tieEndX; - } - // Get the pitches in the note - getKeys() { - return this.keys; - } - // Get the properties for all the keys in the note - getKeyProps() { - return this.keyProps; - } -} - - -/***/ }), - -/***/ "./src/notehead.ts": -/*!*************************!*\ - !*** ./src/notehead.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (NoteHead.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); -} -/** - * Draw slashnote head manually. No glyph exists for this. - * @param ctx the Canvas context - * @param duration the duration of the note. ex: "4" - * @param x the x coordinate to draw at - * @param y the y coordinate to draw at - * @param stem_direction the direction of the stem - */ -function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { - const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; - ctx.save(); - ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); - let fill = false; - if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { - fill = true; - } - if (!fill) - x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; - ctx.beginPath(); - ctx.moveTo(x, y + staveSpace); - ctx.lineTo(x, y + 1); - ctx.lineTo(x + width, y - staveSpace); - ctx.lineTo(x + width, y); - ctx.lineTo(x, y + staveSpace); - ctx.closePath(); - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { - const breve_lines = [-3, -1, width + 1, width + 3]; - for (let i = 0; i < breve_lines.length; i++) { - ctx.beginPath(); - ctx.moveTo(x + breve_lines[i], y - 10); - ctx.lineTo(x + breve_lines[i], y + 11); - ctx.stroke(); - } - } - ctx.restore(); -} -/** - * `NoteHeads` are typically not manipulated - * directly, but used internally in `StaveNote`. - * - * See `tests/notehead_tests.ts` for usage examples. - */ -class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; - } - constructor(noteStruct) { - super(noteStruct); - this.custom_glyph = false; - this.stem_up_x_offset = 0; - this.stem_down_x_offset = 0; - this.index = noteStruct.index; - this.x = noteStruct.x || 0; - this.y = noteStruct.y || 0; - if (noteStruct.note_type) - this.noteType = noteStruct.note_type; - this.displaced = noteStruct.displaced || false; - this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - this.line = noteStruct.line || 0; - // Get glyph code based on duration and note type. This could be - // regular notes, rests, or other custom codes. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - // Swap out the glyph with ledger lines - if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { - this.glyphProps.code_head = this.glyphProps.ledger_code_head; - } - this.glyph_code = this.glyphProps.code_head; - this.x_shift = noteStruct.x_shift || 0; - if (noteStruct.custom_glyph_code) { - this.custom_glyph = true; - this.glyph_code = noteStruct.custom_glyph_code; - this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; - this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; - } - this.setStyle(noteStruct.style); - this.slashed = noteStruct.slashed || false; - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads - glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); - this.setWidth(this.custom_glyph && - !this.glyph_code.startsWith('noteheadSlashed') && - !this.glyph_code.startsWith('noteheadCircled') - ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) - : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); - } - /** Get the width of the notehead. */ - getWidth() { - return this.width; - } - /** Determine if the notehead is displaced. */ - isDisplaced() { - return this.displaced === true; - } - /** Set the X coordinate. */ - setX(x) { - this.x = x; - return this; - } - /** Get the Y coordinate. */ - getY() { - return this.y; - } - /** Set the Y coordinate. */ - setY(y) { - this.y = y; - return this; - } - /** Get the stave line the notehead is placed on. */ - getLine() { - return this.line; - } - /** Set the stave line the notehead is placed on. */ - setLine(line) { - this.line = line; - return this; - } - /** Get the canvas `x` coordinate position of the notehead. */ - getAbsoluteX() { - // If the note has not been preformatted, then get the static x value - // Otherwise, it's been formatted and we should use it's x value relative - // to its tick context - const x = !this.preFormatted ? this.x : super.getAbsoluteX(); - // For a more natural displaced notehead, we adjust the displacement amount - // by half the stem width in order to maintain a slight overlap with the stem - const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; - const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; - return (x + - fontShift + - (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); - } - /** Get the `BoundingBox` for the `NoteHead`. */ - getBoundingBox() { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const spacing = this.checkStave().getSpacingBetweenLines(); - const half_spacing = spacing / 2; - const min_y = this.y - half_spacing; - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); - } - /** Set notehead to a provided `stave`. */ - setStave(stave) { - const line = this.getLine(); - this.stave = stave; - if (this.stave) { - this.setY(this.stave.getYForNote(line)); - this.setContext(this.stave.getContext()); - } - return this; - } - /** Pre-render formatting. */ - preFormat() { - if (this.preFormatted) - return this; - const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; - this.setWidth(width); - this.preFormatted = true; - return this; - } - /** Draw the notehead. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let head_x = this.getAbsoluteX(); - if (this.custom_glyph) { - // head_x += this.x_shift; - head_x += - this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? this.stem_up_x_offset + - (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) - : this.stem_down_x_offset; - } - const y = this.y; - L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); - // Begin and end positions for head. - const stem_direction = this.stem_direction; - const glyph_font_scale = this.render_options.glyph_font_scale; - const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; - if (this.noteType === 's') { - const staveSpace = this.checkStave().getSpacingBetweenLines(); - drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); - } - else { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { - category: `noteHead.${categorySuffix}`, - }); - } - } -} -/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ -NoteHead.DEBUG = false; - - -/***/ }), - -/***/ "./src/notesubgroup.ts": -/*!*****************************!*\ - !*** ./src/notesubgroup.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) -/* harmony export */ }); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2016 -// -// ## Description -// -// This file implements `NoteSubGroup` which is used to format and -// render notes as a `Modifier` -// ex) ClefNote, TimeSigNote and BarNote. - - - - - -class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; - } - // Arrange groups inside a `ModifierContext` - static format(groups, state) { - if (!groups || groups.length === 0) - return false; - let width = 0; - for (let i = 0; i < groups.length; ++i) { - const group = groups[i]; - group.preFormat(); - width += group.getWidth(); - } - state.left_shift += width; - return true; - } - constructor(subNotes) { - super(); - this.preFormatted = false; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; - this.subNotes = subNotes; - this.subNotes.forEach((subNote) => { - subNote.setIgnoreTicks(false); - }); - this.width = 0; - this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); - this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ - num_beats: 4, - beat_value: 4, - resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, - }).setStrict(false); - this.voice.addTickables(this.subNotes); - } - preFormat() { - if (this.preFormatted) - return; - this.formatter.joinVoices([this.voice]).format([this.voice], 0); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - this.alignSubNotesWithNote(this.subNotes, note); // Modifier function - this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); - } -} - - -/***/ }), - -/***/ "./src/ornament.ts": -/*!*************************!*\ - !*** ./src/ornament.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Ornament": () => (/* binding */ Ornament) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Ornament.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args); -} -/** - * Ornament implements ornaments as modifiers that can be - * attached to notes. The complete list of ornaments is available in - * `tables.ts` under `Vex.Flow.ornamentCodes`. - * - * See `tests/ornament_tests.ts` for usage examples. - */ -class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Ornaments category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament; - } - static get minPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Arrange ornaments inside `ModifierContext` */ - static format(ornaments, state) { - if (!ornaments || ornaments.length === 0) - return false; - let width = 0; // width is used by ornaments, which are always centered on the note head - let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately - let left_shift = state.left_shift; - let yOffset = 0; - for (let i = 0; i < ornaments.length; ++i) { - const ornament = ornaments[i]; - const increment = 2; - if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { - ornament.x_shift += right_shift + 2; - } - if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { - ornament.x_shift -= left_shift + 2; - } - if (ornament.reportedWidth && ornament.x_shift < 0) { - left_shift += ornament.reportedWidth; - } - else if (ornament.reportedWidth && ornament.x_shift >= 0) { - right_shift += ornament.reportedWidth + Ornament.minPadding; - } - else { - width = Math.max(ornament.getWidth(), width); - } - // articulations above/below the line can be stacked. - if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { - // Unfortunately we don't know the stem direction. So we base it - // on the line number, but also allow it to be overridden. - const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote'); - if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - state.top_text_line += increment; - ornament.y_shift += yOffset; - yOffset -= ornament.glyph.bbox.getH(); - } - else { - state.text_line += increment; - ornament.y_shift += yOffset; - yOffset += ornament.glyph.bbox.getH(); - } - } - else { - if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - ornament.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else { - ornament.setTextLine(state.text_line); - state.text_line += increment; - } - } - } - // Note: 'legit' ornaments don't consider other modifiers when calculating their - // X position, but jazz ornaments sometimes need to. - state.left_shift = left_shift + width / 2; - state.right_shift = right_shift + width / 2; - return true; - } - /** - * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, - * these are generally on the top of the staff. - */ - static get ornamentNoteTransition() { - return ['flip', 'jazzTurn', 'smear']; - } - /** - * ornamentAttack indicates something that happens in the attach, placed before the note and - * any accidentals - */ - static get ornamentAttack() { - return ['scoop']; - } - /** - * The ornament is aligned based on the note head, but without regard to whether the - * stem goes up or down. - */ - static get ornamentAlignWithNoteHead() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; - } - /** - * An ornament that happens on the release of the note, generally placed after the - * note and overlapping the next beat/measure.. - */ - static get ornamentRelease() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; - } - /** ornamentArticulation goes above/below the note based on space availablity */ - static get ornamentArticulation() { - return ['bend', 'plungerClosed', 'plungerOpen']; - } - /** - * Legacy ornaments have hard-coded metrics. If additional ornament types are - * added, get their metrics here. - */ - getMetrics() { - const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; - if (!ornamentMetrics) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`); - return ornamentMetrics[this.ornament.code]; - } - /** - * Create a new ornament of type `type`, which is an entry in - * `Vex.Flow.ornamentCodes` in `tables.ts`. - */ - constructor(type) { - super(); - this.type = type; - this.delayed = false; - this.render_options = { - font_scale: 38, - accidentalLowerPadding: 3, - accidentalUpperPadding: 3, - }; - this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); - // new ornaments have their origin at the origin, and have more specific - // metrics. Legacy ornaments do some - // x scaling, and have hard-coded metrics - const metrics = this.getMetrics(); - // some jazz ornaments are above or below depending on stem direction. - this.adjustForStemDirection = false; - // some jazz ornaments like falls are supposed to overlap with future bars - // and so we report a different width than they actually take up. - this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; - this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; - this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; - if (!this.ornament) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); - } - this.x_shift = metrics ? metrics.xOffset : 0; - this.y_shift = metrics ? metrics.yOffset : 0; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { - category: `ornament.${this.ornament.code}`, - }); - // Is this a jazz ornament that goes between this note and the next note. - if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - this.delayed = true; - } - // Legacy ornaments need this. I don't know why, but horizontal spacing issues - // happen if I don't set it. - if (!metrics) { - this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift - } - } - /** Set whether the ornament is to be delayed. */ - setDelayed(delayed) { - this.delayed = delayed; - return this; - } - /** Set the upper accidental for the ornament. */ - setUpperAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); - this.accidentalUpper.setOrigin(0.5, 1.0); - return this; - } - /** Set the lower accidental for the ornament. */ - setLowerAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); - this.accidentalLower.setOrigin(0.5, 1.0); - return this; - } - /** Render ornament in position next to note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDir = note.getStemDirection(); - const stave = note.checkStave(); - this.applyStyle(); - ctx.openGroup('ornament', this.getAttribute('id')); - // Get stem extents - const stemExtents = note.checkStem().getExtents(); - let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; - // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - y = stave.getYForTopText(this.text_line); - } - } - else { - // Without a stem - y = stave.getYForTopText(this.text_line); - } - } - const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - const spacing = stave.getSpacingBetweenLines(); - let lineSpacing = 1; - // Beamed stems are longer than quarter note stems, adjust accordingly - if (!isPlacedOnNoteheadSide && note.hasBeam()) { - lineSpacing += 0.5; - } - const totalSpacing = spacing * (this.text_line + lineSpacing); - const glyphYBetweenLines = y - totalSpacing; - // Get initial coordinates for the modifier position - const start = note.getModifierStartXY(this.position, this.index); - let glyphX = start.x; - // If the ornament is aligned with the note head, don't consider the stave y - // but use the 'natural' modifier y - let glyphY = this.ornamentAlignWithNoteHead - ? start.y - : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); - glyphY += this.y_shift; - // Ajdust x position if ornament is delayed - if (this.delayed) { - let delayXShift = 0; - const startX = glyphX - (stave.getX() - 10); - if (this.delayXShift !== undefined) { - delayXShift = this.delayXShift; - } - else { - delayXShift += this.glyph.getMetrics().width / 2; - const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext()); - if (nextContext) { - delayXShift += (nextContext.getX() - startX) * 0.5; - } - else { - delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; - } - this.delayXShift = delayXShift; - } - glyphX += delayXShift; - } - L('Rendering ornament: ', this.ornament, glyphX, glyphY); - if (this.accidentalLower) { - this.accidentalLower.render(ctx, glyphX, glyphY); - glyphY -= this.accidentalLower.getMetrics().height; - glyphY -= this.render_options.accidentalLowerPadding; - } - if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { - glyphY += this.stemUpYOffset; - } - if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - glyphY = note.checkStave().getBoundingBox().getY() + 40; - } - this.glyph.render(ctx, glyphX + this.x_shift, glyphY); - if (this.accidentalUpper) { - glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; - this.accidentalUpper.render(ctx, glyphX, glyphY); - } - ctx.closeGroup(); - this.restoreStyle(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ -Ornament.DEBUG = false; - - -/***/ }), - -/***/ "./src/parenthesis.ts": -/*!****************************!*\ - !*** ./src/parenthesis.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Rodrigo Vilar -// MIT License - - - - -/** Parenthesis implements parenthesis modifiers for notes. */ -class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Parenthesis; - } - /** Add parentheses to the notes. */ - static buildAndAttach(notes) { - for (const note of notes) { - for (let i = 0; i < note.keys.length; i++) { - note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); - note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); - } - } - } - /** Arrange parentheses inside a ModifierContext. */ - static format(parentheses, state) { - if (!parentheses || parentheses.length === 0) - return false; - let x_widthL = 0; - let x_widthR = 0; - for (let i = 0; i < parentheses.length; ++i) { - const parenthesis = parentheses[i]; - const note = parenthesis.getNote(); - const pos = parenthesis.getPosition(); - const index = parenthesis.checkIndex(); - let shift = 0; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { - shift = note.getRightParenthesisPx(index); - x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; - } - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { - shift = note.getLeftParenthesisPx(index); - x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; - } - parenthesis.setXShift(shift); - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - /** - * Constructor - * - * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT - */ - constructor(position) { - super(); - this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - } - /** Set the associated note. */ - setNote(note) { - this.note = note; - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isGraceNote)(note)) { - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); - } - return this; - } - /** Render the parenthesis. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - const x = start.x + this.x_shift; - const y = start.y + this.y_shift; - if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { - category: `noteHead.standard.noteheadParenthesisRight`, - }); - } - else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { - category: `noteHead.standard.noteheadParenthesisLeft`, - }); - } - } -} - - -/***/ }), - -/***/ "./src/parser.ts": -/*!***********************!*\ - !*** ./src/parser.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Parser": () => (/* binding */ Parser) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// A generic text parsing class for VexFlow. - -// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (Parser.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); -} -const NO_ERROR_POS = -1; -// Converts parser results into an easy to reference list that can be -// used in triggers. This function returns: -// - nested array in which the leaf elements are string or null -// - string (including empty strings) -// - null -function flattenMatches(r) { - if ('matchedString' in r) - return r.matchedString; // string - if ('results' in r) - return flattenMatches(r.results); - const results = r; - if (results.length === 1) - return flattenMatches(results[0]); - if (results.length === 0) - return null; - return results.map(flattenMatches); // nested array -} -// This is the base parser class. Given an arbitrary context-free grammar, it -// can parse any line and execute code when specific rules are met (e.g., -// when a string is terminated.) -class Parser { - // For an example of a simple grammar, take a look at tests/parser_tests.ts or - // the EasyScore grammar in easyscore.ts. - constructor(grammar) { - this.grammar = grammar; - this.line = ''; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - } - // Parse `line` using current grammar. Returns `{success: true}` if the - // line parsed correctly, otherwise returns `{success: false, errorPos: N}` - // where `errorPos` is the location of the error in the string. - parse(line) { - this.line = line; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - const result = this.expect(this.grammar.begin()); - result.errorPos = this.errorPos; - return result; - } - matchFail(returnPos) { - if (this.errorPos === NO_ERROR_POS) - this.errorPos = this.pos; - this.pos = returnPos; - } - matchSuccess() { - this.errorPos = NO_ERROR_POS; - } - // Look for `token` in this.line[this.pos], and return success - // if one is found. `token` is specified as a regular expression. - matchToken(token, noSpace = false) { - const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); - const workingLine = this.line.slice(this.pos); - const result = workingLine.match(regexp); - if (result !== null) { - return { - success: true, - matchedString: result[2], - incrementPos: result[1].length, - pos: this.pos, - }; - } - else { - return { success: false, pos: this.pos }; - } - } - // Execute rule to match a sequence of tokens (or rules). If `maybe` is - // set, then return success even if the token is not found, but reset - // the position before exiting. - // TODO: expectOne(...) is never called with the `maybe` parameter. - expectOne(rule, maybe = false) { - const results = []; - const pos = this.pos; - let allMatches = true; - let oneMatch = false; - maybe = maybe === true || rule.maybe === true; - // Execute all sub rules in sequence. - if (rule.expect) { - for (const next of rule.expect) { - const localPos = this.pos; - const result = this.expect(next); - // If `rule.or` is set, then return success if any one - // of the subrules match, else all subrules must match. - if (result.success) { - results.push(result); - oneMatch = true; - if (rule.or) - break; - } - else { - allMatches = false; - if (!rule.or) { - this.pos = localPos; - break; - } - } - } - } - const gotOne = (rule.or && oneMatch) || allMatches; - const success = gotOne || maybe === true; - const numMatches = gotOne ? 1 : 0; - if (maybe && !gotOne) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - // Try to match multiple (one or more) instances of the rule. If `maybe` is set, - // then a failed match is also a success (but the position is reset). - expectOneOrMore(rule, maybe = false) { - const results = []; - const pos = this.pos; - let numMatches = 0; - let more = true; - do { - const result = this.expectOne(rule); - if (result.success && result.results) { - numMatches++; - results.push(result.results); - } - else { - more = false; - } - } while (more); - const success = numMatches > 0 || maybe === true; - if (maybe && !(numMatches > 0)) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. - expectZeroOrMore(rule) { - return this.expectOneOrMore(rule, true); - } - // Execute the rule produced by the provided `rules` function. This - // offloads to one of the above matchers and consolidates the results. It is also - // responsible for executing any code triggered by the rule (in `rule.run`.) - expect(ruleFunc) { - L('Evaluating rule function:', ruleFunc); - if (!ruleFunc) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); - } - let result; - // Get rule from Grammar class. - // expect(...) handles both lexing & parsing: - // - lexer rules produce tokens. - // - parser rules produce expressions which may trigger code via the - // { run: () => ... } trigger functions in easyscore.ts. - // These functions build the VexFlow objects that are displayed on screen. - const rule = ruleFunc.bind(this.grammar)(); - if (rule.token) { - // A lexer rule has a `token` property. - // Base case: parse the regex and throw an error if the - // line doesn't match. - result = this.matchToken(rule.token, rule.noSpace === true); - if (result.success) { - // Token match! Update position and throw away parsed portion - // of string. - this.pos += result.incrementPos; - } - } - else if (rule.expect) { - // A parser rule has an `expect` property. - if (rule.oneOrMore) { - result = this.expectOneOrMore(rule); - } - else if (rule.zeroOrMore) { - result = this.expectZeroOrMore(rule); - } - else { - result = this.expectOne(rule); - } - } - else { - L(rule); - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); - } - // If there's a trigger attached to this rule, then run it. - // Make the matches accessible through `state.matches` in the - // `run: (state) => ...` trigger. - const matches = []; - result.matches = matches; - if (result.results) { - result.results.forEach((r) => matches.push(flattenMatches(r))); - } - if (rule.run && result.success) { - rule.run({ matches }); - } - return result; - } -} -Parser.DEBUG = false; - - -/***/ }), - -/***/ "./src/pedalmarking.ts": -/*!*****************************!*\ - !*** ./src/pedalmarking.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -// eslint-disable-next-line -function L(...args) { - if (PedalMarking.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); -} -/** - * Draws a pedal glyph with the provided `name` on a rendering `context` - * at the coordinates `x` and `y. Takes into account the glyph data - * coordinate shifts. - */ -function drawPedalGlyph(name, context, x, y, point) { - const glyph_data = PedalMarking.GLYPHS[name]; - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); - glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift); -} -/** - * PedalMarking implements different types of pedal markings. These notation - * elements indicate to the performer when to depress and release the a pedal. - * - * In order to create "Sostenuto", and "una corda" markings, you must set - * custom text for the release/depress pedal markings. - */ -class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; - } - /** - * Create a sustain pedal marking. Returns the defaults PedalMarking. - * Which uses the traditional "Ped" and "*"" markings. - */ - static createSustain(notes) { - const pedal = new PedalMarking(notes); - return pedal; - } - /** Create a sostenuto pedal marking */ - static createSostenuto(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.MIXED); - pedal.setCustomText('Sost. Ped.'); - return pedal; - } - /** Create an una corda pedal marking */ - static createUnaCorda(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.TEXT); - pedal.setCustomText('una corda', 'tre corda'); - return pedal; - } - constructor(notes) { - super(); - this.notes = notes; - this.type = PedalMarking.type.TEXT; - this.line = 0; - // Custom text for the release/depress markings - this.custom_depress_text = ''; - this.custom_release_text = ''; - this.resetFont(); - this.render_options = { - bracket_height: 10, - text_margin_right: 6, - bracket_line_width: 1, - color: 'black', - }; - } - /** Set pedal type. */ - setType(type) { - type = typeof type === 'string' ? PedalMarking.typeString[type] : type; - if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { - this.type = type; - } - return this; - } - /** - * Set custom text for the `depress`/`release` pedal markings. No text is - * set if the parameter is falsy. - */ - setCustomText(depress, release) { - this.custom_depress_text = depress || ''; - this.custom_release_text = release || ''; - return this; - } - /** Set the staff line to render the markings on. */ - setLine(line) { - this.line = line; - return this; - } - /** Draw the bracket based pedal markings. */ - drawBracketed() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - let prev_x; - let prev_y; - // Iterate through each note - this.notes.forEach((note, index, notes) => { - // Each note triggers the opposite pedal action - is_pedal_depressed = !is_pedal_depressed; - // Get the initial coordinates for the note - const x = note.getAbsoluteX(); - const y = note.checkStave().getYForBottomText(this.line + 3); - // Throw if current note is positioned before the previous note - if (x < prev_x) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); - } - // Determine if the previous or next note are the same - // as the current note. We need to keep track of this for - // when adjustments are made for the release+depress action - const next_is_same = notes[index + 1] === note; - const prev_is_same = notes[index - 1] === note; - let x_shift = 0; - const point = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - if (is_pedal_depressed) { - // Adjustment for release+depress - x_shift = prev_is_same ? 5 : 0; - if (this.type === PedalMarking.type.MIXED && !prev_is_same) { - // For MIXED style, start with text instead of bracket - if (this.custom_depress_text) { - // If we have custom text, use instead of the default "Ped" glyph - const text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - x_shift = text_width / 2 + this.render_options.text_margin_right; - } - else { - // Render the Ped glyph in position - drawPedalGlyph('pedal_depress', ctx, x, y, point); - x_shift = 20 + this.render_options.text_margin_right; - } - } - else { - // Draw start bracket - ctx.beginPath(); - ctx.moveTo(x, y - this.render_options.bracket_height); - ctx.lineTo(x + x_shift, y); - ctx.stroke(); - ctx.closePath(); - } - } - else { - // Adjustment for release+depress - x_shift = next_is_same ? -5 : 0; - // Draw end bracket - ctx.beginPath(); - ctx.moveTo(prev_x, prev_y); - ctx.lineTo(x + x_shift, y); - ctx.lineTo(x, y - this.render_options.bracket_height); - ctx.stroke(); - ctx.closePath(); - } - // Store previous coordinates - prev_x = x + x_shift; - prev_y = y; - }); - } - /** - * Draw the text based pedal markings. This defaults to the traditional - * "Ped" and "*"" symbols if no custom text has been provided. - */ - drawText() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - // Iterate through each note, placing glyphs or custom text accordingly - this.notes.forEach((note) => { - is_pedal_depressed = !is_pedal_depressed; - const stave = note.checkStave(); - const x = note.getAbsoluteX(); - const y = stave.getYForBottomText(this.line + 3); - const point = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - let text_width = 0; - if (is_pedal_depressed) { - if (this.custom_depress_text) { - text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_depress', ctx, x, y, point); - } - } - else { - if (this.custom_release_text) { - text_width = ctx.measureText(this.custom_release_text).width; - ctx.fillText(this.custom_release_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_release', ctx, x, y, point); - } - } - }); - } - /** Render the pedal marking in position on the rendering context. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - ctx.setFont(this.textFont); - L('Rendering Pedal Marking'); - if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { - ctx.setLineWidth(this.render_options.bracket_line_width); - this.drawBracketed(); - } - else if (this.type === PedalMarking.type.TEXT) { - this.drawText(); - } - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ -PedalMarking.DEBUG = false; -PedalMarking.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, -}; -/** Glyph data */ -PedalMarking.GLYPHS = { - pedal_depress: { - code: 'keyboardPedalPed', - x_shift: -10, - y_shift: 0, - }, - pedal_release: { - code: 'keyboardPedalUp', - x_shift: -2, - y_shift: 3, - }, -}; -/** Pedal type as number. */ -PedalMarking.type = { - TEXT: 1, - BRACKET: 2, - MIXED: 3, -}; -/** Pedal type as string. */ -PedalMarking.typeString = { - text: PedalMarking.type.TEXT, - bracket: PedalMarking.type.BRACKET, - mixed: PedalMarking.type.MIXED, -}; - - -/***/ }), - -/***/ "./src/registry.ts": -/*!*************************!*\ - !*** ./src/registry.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Registry": () => (/* binding */ Registry) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// -// ## Description -// -// This file implements a registry for VexFlow elements. It allows users -// to track, query, and manage some subset of generated elements, and -// dynamically get and set attributes. -// -// There are two ways to register with a registry: -// -// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, -// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future -// elements will automatically register with it. -// -// Once an element is registered, selected attributes are tracked and indexed by -// the registry. This allows fast look up of elements by attributes like id, type, -// and class. - -// Indexes are represented as maps of maps of maps. This allows -// for both multi-labeling (e.g., an element can have multiple classes) -// and efficient lookup. -class Index { - constructor() { - this.id = {}; - this.type = {}; - this.class = {}; - } -} -class Registry { - static getDefaultRegistry() { - return Registry.defaultRegistry; - } - // If you call `enableDefaultRegistry`, any new elements will auto-register with - // the provided registry as soon as they're constructed. - static enableDefaultRegistry(registry) { - Registry.defaultRegistry = registry; - } - static disableDefaultRegistry() { - Registry.defaultRegistry = undefined; - } - constructor() { - this.index = new Index(); - } - clear() { - this.index = new Index(); - return this; - } - setIndexValue(name, value, id, elem) { - const index = this.index; - if (!index[name][value]) { - index[name][value] = {}; - } - index[name][value][id] = elem; - } - // Updates the indexes for element 'id'. If an element's attribute changes - // from A -> B, make sure to remove the element from A. - updateIndex({ id, name, value, oldValue }) { - const elem = this.getElementById(id); - if (oldValue !== undefined && this.index[name][oldValue]) { - delete this.index[name][oldValue][id]; - } - if (value && elem) { - this.setIndexValue(name, value, elem.getAttribute('id'), elem); - } - } - /** - * Register element `elem` with this registry. - * This adds the element to its index and watches it for attribute changes. - * @param elem - * @param id - * @returns this - */ - register(elem, id) { - id = id || elem.getAttribute('id'); - if (!id) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); - } - // Manually add id to index, then update other indexes. - elem.setAttribute('id', id); - this.setIndexValue('id', id, id, elem); - this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); - elem.onRegister(this); - return this; - } - getElementById(id) { - var _a, _b; - return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. - } - getElementsByAttribute(attribute, value) { - const index_attr = this.index[attribute]; - if (index_attr) { - const index_attr_val = index_attr[value]; - if (index_attr_val) { - const keys = Object.keys(index_attr_val); - return keys.map((k) => index_attr_val[k]); - } - } - return []; - } - getElementsByType(type) { - return this.getElementsByAttribute('type', type); - } - getElementsByClass(className) { - return this.getElementsByAttribute('class', className); - } - // This is called by the element when an attribute value changes. If an indexed - // attribute changes, then update the local index. - onUpdate(info) { - const allowedNames = ['id', 'type', 'class']; - if (allowedNames.includes(info.name)) { - this.updateIndex(info); - } - return this; - } -} - - -/***/ }), - -/***/ "./src/rendercontext.ts": -/*!******************************!*\ - !*** ./src/rendercontext.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), -/* harmony export */ "drawDot": () => (/* binding */ drawDot) -/* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. -// MIT License - -class RenderContext { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; - } - set font(f) { - this.setFont(f); - } - get font() { - return this.getFont(); - } - /** - * This is kept for backwards compatibility with 3.0.9. - * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. - */ - setRawFont(f) { - this.setFont(f); - return this; - } -} -/** - * Draw a tiny dot marker on the specified context. A great debugging aid. - * @param ctx context - * @param x dot x coordinate - * @param y dot y coordinate - * @param color - */ -function drawDot(ctx, x, y, color = '#F55') { - ctx.save(); - ctx.setFillStyle(color); - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, 3, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.restore(); -} - - -/***/ }), - -/***/ "./src/renderer.ts": -/*!*************************!*\ - !*** ./src/renderer.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Renderer": () => (/* binding */ Renderer), -/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) -/* harmony export */ }); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var RendererBackends; -(function (RendererBackends) { - RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; - RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; -})(RendererBackends || (RendererBackends = {})); -// End of line types -var RendererLineEndType; -(function (RendererLineEndType) { - RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; - RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; - RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; -})(RendererLineEndType || (RendererLineEndType = {})); -/** - * Support Canvas & SVG rendering contexts. - */ -class Renderer { - static buildContext(elementId, backend, width, height, background = '#FFF') { - const renderer = new Renderer(elementId, backend); - if (width && height) { - renderer.resize(width, height); - } - const ctx = renderer.getContext(); - ctx.setBackgroundFillStyle(background); - Renderer.lastContext = ctx; - return ctx; - } - static getCanvasContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); - } - static getSVGContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); - } - // Draw a dashed line (horizontal, vertical or diagonal - // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. - // setting the second number to 0 draws a solid line. - static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { - context.beginPath(); - const dx = toX - fromX; - const dy = toY - fromY; - const angle = Math.atan2(dy, dx); - let x = fromX; - let y = fromY; - context.moveTo(fromX, fromY); - let idx = 0; - let draw = true; - while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { - const dashLength = dashPattern[idx++ % dashPattern.length]; - const nx = x + Math.cos(angle) * dashLength; - x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); - const ny = y + Math.sin(angle) * dashLength; - y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); - if (draw) { - context.lineTo(x, y); - } - else { - context.moveTo(x, y); - } - draw = !draw; - } - context.closePath(); - context.stroke(); - } - constructor(arg0, arg1) { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { - // The user has provided what looks like a RenderContext, let's just use it. - this.ctx = arg0; - } - else { - if (arg1 === undefined) { - // The backend must be specified if the render context isn't directly provided. - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); - } - const backend = arg1; - let element; - if (typeof arg0 == 'string') { - const maybeElement = document.getElementById(arg0); - if (!maybeElement) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); - } - element = maybeElement; - } - else { - element = arg0; - } - // Verify backend and create context - if (backend === Renderer.Backends.CANVAS) { - if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); - } - const context = element.getContext('2d', { willReadFrequently: true }); - if (!context) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); - } - this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); - } - else if (backend === Renderer.Backends.SVG) { - if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); - } - this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); - } - } - } - resize(width, height) { - this.ctx.resize(width, height); - return this; - } - getContext() { - return this.ctx; - } -} -Renderer.Backends = RendererBackends; -Renderer.LineEndType = RendererLineEndType; -// Used by vexflow_test_helpers.ts -// Should this be private? -// Can we do this in a cleaner way? -Renderer.lastContext = undefined; - - -/***/ }), - -/***/ "./src/repeatnote.ts": -/*!***************************!*\ - !*** ./src/repeatnote.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - - -// Map `type` to SMuFL glyph code. -const CODES = { - '1': 'repeat1Bar', - '2': 'repeat2Bars', - '4': 'repeat4Bars', - slash: 'repeatBarSlash', -}; -class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; - } - constructor(type, noteStruct, options) { - const glyphCode = CODES[type] || 'repeat1Bar'; - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { - category: 'repeatNote', - }); - super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); - } -} - - -/***/ }), - -/***/ "./src/stave.ts": -/*!**********************!*\ - !*** ./src/stave.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stave": () => (/* binding */ Stave) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - - - - - - -// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. -// The keys (computed property names) match the CATEGORY property in the -// Barline, Clef, KeySignature, TimeSignature classes. -const SORT_ORDER_BEG_MODIFIERS = { - [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, - [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, - [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, - [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, -}; -const SORT_ORDER_END_MODIFIERS = { - [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, - [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, - [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, - [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, -}; -class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; - } - // This is the sum of the padding that normally goes on left + right of a stave during - // drawing. Used to size staves correctly with content width. - static get defaultPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); - } - // Right padding, used by system if startX is already determined. - static get rightPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.endPaddingMax'); - } - constructor(x, y, width, options) { - super(); - // Initialized by the constructor via this.resetLines(). - this.height = 0; - this.x = x; - this.y = y; - this.width = width; - this.formatted = false; - this.start_x = x + 5; - this.end_x = x + width; - this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) - this.measure = 0; - this.clef = 'treble'; - this.endClef = undefined; - this.resetFont(); - this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); - this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; - this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; - this.resetLines(); - // beg bar - this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - // end bar - this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - } - /** Set default style for ledger lines. */ - setDefaultLedgerLineStyle(style) { - this.defaultLedgerLineStyle = style; - } - /** Get default style for ledger lines. */ - getDefaultLedgerLineStyle() { - return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); - } - space(spacing) { - return this.options.spacing_between_lines_px * spacing; - } - resetLines() { - this.options.line_config = []; - for (let i = 0; i < this.options.num_lines; i++) { - this.options.line_config.push({ visible: true }); - } - this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; - this.options.bottom_text_position = this.options.num_lines; - } - setNoteStartX(x) { - if (!this.formatted) - this.format(); - this.start_x = x; - return this; - } - getNoteStartX() { - if (!this.formatted) - this.format(); - return this.start_x; - } - getNoteEndX() { - if (!this.formatted) - this.format(); - return this.end_x; - } - getTieStartX() { - return this.start_x; - } - getTieEndX() { - return this.end_x; - } - getX() { - return this.x; - } - getNumLines() { - return this.options.num_lines; - } - setNumLines(n) { - this.options.num_lines = n; - this.resetLines(); - return this; - } - setY(y) { - this.y = y; - return this; - } - getY() { - return this.y; - } - getTopLineTopY() { - return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; - } - getBottomLineBottomY() { - return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; - } - setX(x) { - const shift = x - this.x; - this.formatted = false; - this.x = x; - this.start_x += shift; - this.end_x += shift; - for (let i = 0; i < this.modifiers.length; i++) { - const mod = this.modifiers[i]; - mod.setX(mod.getX() + shift); - } - return this; - } - setWidth(width) { - this.formatted = false; - this.width = width; - this.end_x = this.x + width; - // reset the x position of the end barline (TODO(0xfe): This makes no sense) - // this.modifiers[1].setX(this.end_x); - return this; - } - getWidth() { - return this.width; - } - getStyle() { - return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); - } - /** - * Set the measure number of this Stave. - */ - setMeasure(measure) { - this.measure = measure; - return this; - } - /** - * Return the measure number of this Stave. - */ - getMeasure() { - return this.measure; - } - /** - * Gets the pixels to shift from the beginning of the stave - * following the modifier at the provided index - * @param {Number} index The index from which to determine the shift - * @return {Number} The amount of pixels shifted - */ - getModifierXShift(index = 0) { - if (typeof index !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); - } - if (!this.formatted) - this.format(); - if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { - return 0; - } - // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' - if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { - return 0; - } - let start_x = this.start_x - this.x; - const begBarline = this.modifiers[0]; - if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { - start_x -= begBarline.getWidth(); - } - return start_x; - } - /** Coda & Segno Symbol functions */ - setRepetitionType(type, yShift = 0) { - this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); - return this; - } - // Volta functions - setVoltaType(type, number_t, y) { - this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); - return this; - } - // Section functions - setSection(section, y, xOffset = 0, fontSize, drawRect = true) { - const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); - if (fontSize) - staveSection.setFontSize(fontSize); - this.modifiers.push(staveSection); - return this; - } - // Tempo functions - setTempo(tempo, y) { - this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); - return this; - } - // Text functions - setText(text, position, options = {}) { - this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); - return this; - } - getHeight() { - return this.height; - } - getSpacingBetweenLines() { - return this.options.spacing_between_lines_px; - } - getBoundingBox() { - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); - } - getBottomY() { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; - return score_bottom; - } - getBottomLineY() { - return this.getYForLine(this.options.num_lines); - } - // This returns - /** @returns the y for the *center* of a staff line */ - getYForLine(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - const y = this.y + line * spacing + headroom * spacing; - return y; - } - getLineForY(y) { - // Does the reverse of getYForLine - somewhat dumb and just calls - // getYForLine until the right value is reaches - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return (y - this.y) / spacing - headroom; - } - getYForTopText(line = 0) { - return this.getYForLine(-line - this.options.top_text_position); - } - getYForBottomText(line = 0) { - return this.getYForLine(this.options.bottom_text_position + line); - } - getYForNote(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return this.y + headroom * spacing + 5 * spacing - line * spacing; - } - getYForGlyphs() { - return this.getYForLine(3); - } - // This method adds a stave modifier to the stave. Note that the first two - // modifiers (BarLines) are automatically added upon construction. - addModifier(modifier, position) { - if (position !== undefined) { - modifier.setPosition(position); - } - modifier.setStave(this); - this.formatted = false; - this.modifiers.push(modifier); - return this; - } - addEndModifier(modifier) { - this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - // Bar Line functions - setBegBarType(type) { - // Only valid bar types at beginning of stave is none, single or begin repeat - const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; - if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { - this.modifiers[0].setType(type); - this.formatted = false; - } - return this; - } - setEndBarType(type) { - // Repeat end not valid at end of stave - if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { - this.modifiers[1].setType(type); - this.formatted = false; - } - return this; - } - setClef(clefSpec, size, annotation, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { - this.endClef = clefSpec; - } - else { - this.clef = clefSpec; - } - const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); - if (clefs.length === 0) { - this.addClef(clefSpec, size, annotation, position); - } - else { - clefs[0].setType(clefSpec, size, annotation); - } - return this; - } - getClef() { - return this.clef; - } - setEndClef(clefSpec, size, annotation) { - this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - getEndClef() { - return this.endClef; - } - setKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); - if (keySignatures.length === 0) { - this.addKeySignature(keySpec, cancelKeySpec, position); - } - else { - keySignatures[0].setKeySig(keySpec, cancelKeySpec); - } - return this; - } - setEndKeySignature(keySpec, cancelKeySpec) { - this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - setTimeSignature(timeSpec, customPadding, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); - if (timeSignatures.length === 0) { - this.addTimeSignature(timeSpec, customPadding, position); - } - else { - timeSignatures[0].setTimeSig(timeSpec); - } - return this; - } - setEndTimeSignature(timeSpec, customPadding) { - this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - /** - * Add a key signature to the stave. - * - * Example: - * `stave.addKeySignature('Db');` - * @param keySpec new key specification `[A-G][b|#]?` - * @param cancelKeySpec - * @param position - * @returns - */ - addKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); - return this; - } - /** - * Add a clef to the stave. - * - * Example: - * - * stave.addClef('treble') - * @param clef clef (treble|bass|...) see {@link Clef.types} - * @param size - * @param annotation - * @param position - * @returns - */ - addClef(clef, size, annotation, position) { - if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { - this.clef = clef; - } - else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { - this.endClef = clef; - } - this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); - return this; - } - addEndClef(clef, size, annotation) { - this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - /** - * Add a time signature to the stave - * - * Example: - * - * `stave.addTimeSignature('4/4');` - * @param timeSpec time signature specification `(C\||C|\d\/\d)` - * @param customPadding - * @param position - * @returns - */ - addTimeSignature(timeSpec, customPadding, position) { - this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); - return this; - } - addEndTimeSignature(timeSpec, customPadding) { - this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - // Deprecated - addTrebleGlyph() { - this.addClef('treble'); - return this; - } - /** - * @param position - * @param category - * @returns array of StaveModifiers that match the provided position and category. - */ - getModifiers(position, category) { - const noPosition = position === undefined; - const noCategory = category === undefined; - if (noPosition && noCategory) { - return this.modifiers; - } - else if (noPosition) { - // A category was provided. - return this.modifiers.filter((m) => category === m.getCategory()); - } - else if (noCategory) { - // A position was provided. - return this.modifiers.filter((m) => position === m.getPosition()); - } - else { - // Both position and category were provided! - return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); - } - } - /** - * Use the modifier's `getCategory()` as a key for the `order` array. - * The retrieved value is used to sort modifiers from left to right (0 to to 3). - */ - sortByCategory(items, order) { - for (let i = items.length - 1; i >= 0; i--) { - for (let j = 0; j < i; j++) { - if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { - const temp = items[j]; - items[j] = items[j + 1]; - items[j + 1] = temp; - } - } - } - } - format() { - const begBarline = this.modifiers[0]; - const endBarline = this.modifiers[1]; - const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); - const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); - this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); - if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { - begModifiers.push(begModifiers.splice(0, 1)[0]); - begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); - } - if (endModifiers.indexOf(endBarline) > 0) { - endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - } - let width; - let padding; - let modifier; - let offset = 0; - let x = this.x; - for (let i = 0; i < begModifiers.length; i++) { - modifier = begModifiers[i]; - padding = modifier.getPadding(i + offset); - width = modifier.getWidth(); - x += padding; - modifier.setX(x); - x += width; - if (padding + width === 0) - offset--; - } - this.start_x = x; - x = this.x + this.width; - const widths = { - left: 0, - right: 0, - paddingRight: 0, - paddingLeft: 0, - }; - let lastBarlineIdx = 0; - for (let i = 0; i < endModifiers.length; i++) { - modifier = endModifiers[i]; - lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; - widths.right = 0; - widths.left = 0; - widths.paddingRight = 0; - widths.paddingLeft = 0; - const layoutMetrics = modifier.getLayoutMetrics(); - if (layoutMetrics) { - if (i !== 0) { - widths.right = layoutMetrics.xMax || 0; - widths.paddingRight = layoutMetrics.paddingRight || 0; - } - widths.left = -layoutMetrics.xMin || 0; - widths.paddingLeft = layoutMetrics.paddingLeft || 0; - if (i === endModifiers.length - 1) { - widths.paddingLeft = 0; - } - } - else { - widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); - if (i !== 0) { - widths.right = modifier.getWidth(); - } - if (i === 0) { - widths.left = modifier.getWidth(); - } - } - x -= widths.paddingRight; - x -= widths.right; - modifier.setX(x); - x -= widths.left; - x -= widths.paddingLeft; - } - this.end_x = endModifiers.length === 1 ? this.x + this.width : x; - this.formatted = true; - } - /** - * All drawing functions below need the context to be set. - */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - this.applyStyle(); - ctx.openGroup('stave', this.getAttribute('id')); - if (!this.formatted) - this.format(); - const num_lines = this.options.num_lines; - const width = this.width; - const x = this.x; - let y; - // Render lines - for (let line = 0; line < num_lines; line++) { - y = this.getYForLine(line); - if (this.options.line_config[line].visible) { - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + width, y); - ctx.stroke(); - } - } - ctx.closeGroup(); - this.restoreStyle(); - // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - // Only draw modifier if it has a draw function - if (typeof modifier.draw === 'function') { - modifier.applyStyle(ctx); - modifier.draw(this, this.getModifierXShift(i)); - modifier.restoreStyle(ctx); - } - } - // Render measure numbers - if (this.measure > 0) { - ctx.save(); - ctx.setFont(this.textFont); - const textWidth = ctx.measureText('' + this.measure).width; - y = this.getYForTopText(0) + 3; - ctx.fillText('' + this.measure, this.x - textWidth / 2, y); - ctx.restore(); - } - return this; - } - getVerticalBarWidth() { - return this.options.vertical_bar_width; - } - /** - * Get the current configuration for the Stave. - * @return {Array} An array of configuration objects. - */ - getConfigForLines() { - return this.options.line_config; - } - /** - * Configure properties of the lines in the Stave - * @param line_number The index of the line to configure. - * @param line_config An configuration object for the specified line. - * @throws RuntimeError "StaveConfigError" When the specified line number is out of - * range of the number of lines specified in the constructor. - */ - setConfigForLine(line_number, line_config) { - if (line_number >= this.options.num_lines || line_number < 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); - } - if (line_config.visible === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); - } - if (typeof line_config.visible !== 'boolean') { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); - } - this.options.line_config[line_number] = line_config; - return this; - } - /** - * Set the staff line configuration array for all of the lines at once. - * @param lines_configuration An array of line configuration objects. These objects - * are of the same format as the single one passed in to setLineConfiguration(). - * The caller can set null for any line config entry if it is desired that the default be used - * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have - * exactly the same number of elements as the num_lines configuration object set in - * the constructor. - */ - setConfigForLines(lines_configuration) { - if (lines_configuration.length !== this.options.num_lines) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); - } - // Make sure the defaults are present in case an incomplete set of - // configuration options were supplied. - // eslint-disable-next-line - for (const line_config in lines_configuration) { - // Allow '{}' to be used if the caller just wants the default for a particular node. - if (lines_configuration[line_config].visible == undefined) { - lines_configuration[line_config] = this.options.line_config[line_config]; - } - this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); - } - this.options.line_config = lines_configuration; - return this; - } - static formatBegModifiers(staves) { - const adjustCategoryStartX = (category) => { - let minStartX = 0; - // Calculate min start X for the category - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); - // Consider only the first instance - if (modifiers.length > 0 && modifiers[0].getX() > minStartX) - minStartX = modifiers[0].getX(); - }); - let adjustX = 0; - staves.forEach((stave) => { - adjustX = 0; - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); - // Calculate adjustement required for the stave - modifiers.forEach((modifier) => { - if (minStartX - modifier.getX() > adjustX) - adjustX = minStartX - modifier.getX(); - }); - const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); - let bAdjust = false; - // Apply adjustment to all the modifiers in and beyond the category - allModifiers.forEach((modifier) => { - if (modifier.getCategory() === category) - bAdjust = true; - if (bAdjust && adjustX > 0) - modifier.setX(modifier.getX() + adjustX); - }); - // Apply adjustment also to note start. - stave.setNoteStartX(stave.getNoteStartX() + adjustX); - }); - }; - // Make sure that staves are formatted - staves.forEach((stave) => { - if (!stave.formatted) - stave.format(); - }); - // Align Clefs - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); - // Align key signatures - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); - // Align time signatures - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); - let maxX = 0; - // align note start - staves.forEach((stave) => { - if (stave.getNoteStartX() > maxX) - maxX = stave.getNoteStartX(); - }); - staves.forEach((stave) => { - stave.setNoteStartX(maxX); - }); - maxX = 0; - // align REPEAT_BEGIN - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); - modifiers.forEach((modifier) => { - if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) - if (modifier.getX() > maxX) - maxX = modifier.getX(); - }); - }); - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); - modifiers.forEach((modifier) => { - if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) - modifier.setX(maxX); - }); - }); - } -} -Stave.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, - size: 8, - weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavebarline.ts": -/*!*****************************!*\ - !*** ./src/stavebarline.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Barline": () => (/* binding */ Barline), -/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) -/* harmony export */ }); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Author Larry Kuhns 2011 - - - -var BarlineType; -(function (BarlineType) { - BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; - BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; - BarlineType[BarlineType["END"] = 3] = "END"; - BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; - BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; - BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; - BarlineType[BarlineType["NONE"] = 7] = "NONE"; -})(BarlineType || (BarlineType = {})); -class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; - } - static get type() { - return BarlineType; - } - static get typeString() { - return { - single: BarlineType.SINGLE, - double: BarlineType.DOUBLE, - end: BarlineType.END, - repeatBegin: BarlineType.REPEAT_BEGIN, - repeatEnd: BarlineType.REPEAT_END, - repeatBoth: BarlineType.REPEAT_BOTH, - none: BarlineType.NONE, - }; - } - constructor(type) { - super(); - this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; - const TYPE = BarlineType; - this.widths = {}; - this.widths[TYPE.SINGLE] = 5; - this.widths[TYPE.DOUBLE] = 5; - this.widths[TYPE.END] = 5; - this.widths[TYPE.REPEAT_BEGIN] = 5; - this.widths[TYPE.REPEAT_END] = 5; - this.widths[TYPE.REPEAT_BOTH] = 5; - this.widths[TYPE.NONE] = 5; - this.paddings = {}; - this.paddings[TYPE.SINGLE] = 0; - this.paddings[TYPE.DOUBLE] = 0; - this.paddings[TYPE.END] = 0; - this.paddings[TYPE.REPEAT_BEGIN] = 15; - this.paddings[TYPE.REPEAT_END] = 15; - this.paddings[TYPE.REPEAT_BOTH] = 15; - this.paddings[TYPE.NONE] = 0; - this.layoutMetricsMap = {}; - this.layoutMetricsMap[TYPE.SINGLE] = { - xMin: 0, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.DOUBLE] = { - xMin: -3, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.END] = { - xMin: -5, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_END] = { - xMin: -10, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { - xMin: -2, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { - xMin: -10, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.NONE] = { - xMin: 0, - xMax: 0, - paddingLeft: 5, - paddingRight: 5, - }; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); - this.setType(type); - } - getType() { - return this.type; - } - setType(type) { - this.type = typeof type === 'string' ? Barline.typeString[type] : type; - this.setWidth(this.widths[this.type]); - this.setPadding(this.paddings[this.type]); - this.setLayoutMetrics(this.layoutMetricsMap[this.type]); - return this; - } - // Draw barlines - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('stavebarline', this.getAttribute('id')); - switch (this.type) { - case BarlineType.SINGLE: - this.drawVerticalBar(stave, this.x, false); - break; - case BarlineType.DOUBLE: - this.drawVerticalBar(stave, this.x, true); - break; - case BarlineType.END: - this.drawVerticalEndBar(stave, this.x); - break; - case BarlineType.REPEAT_BEGIN: - // If the barline is shifted over (in front of clef/time/key) - // Draw vertical bar at the beginning. - this.drawRepeatBar(stave, this.x, true); - if (stave.getX() !== this.x) { - this.drawVerticalBar(stave, stave.getX()); - } - break; - case BarlineType.REPEAT_END: - this.drawRepeatBar(stave, this.x, false); - break; - case BarlineType.REPEAT_BOTH: - this.drawRepeatBar(stave, this.x, false); - this.drawRepeatBar(stave, this.x, true); - break; - default: - // Default is NONE, so nothing to draw - break; - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } - drawVerticalBar(stave, x, double_bar) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - if (double_bar) { - staveCtx.fillRect(x - 3, topY, 1, botY - topY); - } - staveCtx.fillRect(x, topY, 1, botY - topY); - } - drawVerticalEndBar(stave, x) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - staveCtx.fillRect(x - 5, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - } - drawRepeatBar(stave, x, begin) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - let x_shift = 3; - if (!begin) { - x_shift = -5; - } - staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - const dot_radius = 2; - // Shift dots left or right - if (begin) { - x_shift += 4; - } - else { - x_shift -= 4; - } - const dot_x = x + x_shift + dot_radius / 2; - // calculate the y offset based on number of stave lines - let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); - y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; - let dot_y = topY + y_offset + dot_radius / 2; - // draw the top repeat dot - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - // draw the bottom repeat dot - dot_y += stave.getSpacingBetweenLines(); - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - } -} - - -/***/ }), - -/***/ "./src/staveconnector.ts": -/*!*******************************!*\ - !*** ./src/staveconnector.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -function drawBoldDoubleLine(ctx, type, topX, topY, botY) { - if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); - } - let x_shift = 3; - let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues - const thickLineOffset = 2; // For aesthetics - if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { - x_shift = -5; // Flips the side of the thin line - variableWidth = 3; - } - // Thin line - ctx.fillRect(topX + x_shift, topY, 1, botY - topY); - // Thick line - ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); -} -/** StaveConnector implements the connector lines between staves of a system. */ -class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; - } - constructor(top_stave, bottom_stave) { - super(); - this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; - this.width = 3; - this.top_stave = top_stave; - this.bottom_stave = bottom_stave; - this.type = StaveConnector.type.DOUBLE; - this.resetFont(); - // 1. Offset Bold Double Left to align with offset Repeat Begin bars - // 2. Offset BRACE type not to overlap with another StaveConnector - this.x_shift = 0; - this.texts = []; - } - /** - * Set type. - * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} - */ - setType(type) { - const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; - // Be certain that the type is a valid type: - if (Object.values(StaveConnector.type).includes(newType)) { - this.type = newType; - } - return this; - } - /** - * Get type. - * @returns number {@link StaveConnector.type} - */ - getType() { - return this.type; - } - /** Set optional associated Text. */ - setText(text, options = {}) { - this.texts.push({ - content: text, - options: Object.assign({ shift_x: 0, shift_y: 0 }, options), - }); - return this; - } - setXShift(x_shift) { - if (typeof x_shift !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); - } - this.x_shift = x_shift; - return this; - } - getXShift() { - return this.x_shift; - } - /** Render connector and associated text. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let topY = this.top_stave.getYForLine(0); - let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; - let width = this.width; - let topX = this.top_stave.getX(); - const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || - this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || - this.type === StaveConnector.type.THIN_DOUBLE; - if (isRightSidedConnector) { - topX = this.top_stave.getX() + this.top_stave.getWidth(); - } - let attachment_height = botY - topY; - switch (this.type) { - case StaveConnector.type.SINGLE: - width = 1; - break; - case StaveConnector.type.SINGLE_LEFT: - width = 1; - break; - case StaveConnector.type.SINGLE_RIGHT: - width = 1; - break; - case StaveConnector.type.DOUBLE: - topX -= this.width + 2; - topY -= this.thickness; - attachment_height += 0.5; - break; - case StaveConnector.type.BRACE: { - width = 12; - // May need additional code to draw brace - const x1 = this.top_stave.getX() - 2 + this.x_shift; - const y1 = topY; - const x3 = x1; - const y3 = botY; - const x2 = x1 - width; - const y2 = y1 + attachment_height / 2.0; - const cpx1 = x2 - 0.9 * width; - const cpy1 = y1 + 0.2 * attachment_height; - const cpx2 = x1 + 1.1 * width; - const cpy2 = y2 - 0.135 * attachment_height; - const cpx3 = cpx2; - const cpy3 = y2 + 0.135 * attachment_height; - const cpx4 = cpx1; - const cpy4 = y3 - 0.2 * attachment_height; - const cpx5 = x2 - width; - const cpy5 = cpy4; - const cpx6 = x1 + 0.4 * width; - const cpy6 = y2 + 0.135 * attachment_height; - const cpx7 = cpx6; - const cpy7 = y2 - 0.135 * attachment_height; - const cpx8 = cpx5; - const cpy8 = cpy1; - ctx.beginPath(); - ctx.moveTo(x1, y1); - ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); - ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); - ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); - ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); - ctx.fill(); - ctx.stroke(); - break; - } - case StaveConnector.type.BRACKET: - topY -= 6; - botY += 6; - attachment_height = botY - topY; - _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); - _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); - topX -= this.width + 2; - break; - case StaveConnector.type.BOLD_DOUBLE_LEFT: - drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); - break; - case StaveConnector.type.BOLD_DOUBLE_RIGHT: - drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); - break; - case StaveConnector.type.THIN_DOUBLE: - width = 1; - attachment_height -= this.thickness; - break; - case StaveConnector.type.NONE: - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); - } - if (this.type !== StaveConnector.type.BRACE && - this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && - this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && - this.type !== StaveConnector.type.NONE) { - ctx.fillRect(topX, topY, width, attachment_height); - } - // If the connector is a thin double barline, draw the paralell line - if (this.type === StaveConnector.type.THIN_DOUBLE) { - ctx.fillRect(topX - 3, topY, width, attachment_height); - } - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - // Add stave connector text - for (let i = 0; i < this.texts.length; i++) { - const text = this.texts[i]; - const text_width = ctx.measureText('' + text.content).width; - const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; - const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; - ctx.fillText('' + text.content, x, y + 4); - } - ctx.restore(); - } -} -StaveConnector.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 16, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, -}; -/** - * SINGLE_LEFT and SINGLE are the same value for compatibility - * with older versions of vexflow which didn't have right sided - * stave connectors. - */ -StaveConnector.type = { - SINGLE_RIGHT: 0, - SINGLE_LEFT: 1, - SINGLE: 1, - DOUBLE: 2, - BRACE: 3, - BRACKET: 4, - BOLD_DOUBLE_LEFT: 5, - BOLD_DOUBLE_RIGHT: 6, - THIN_DOUBLE: 7, - NONE: 8, -}; -/** - * Connector type: - * * "singleRight" - * * "singleLeft" - * * "single" - * * "double" - * * "brace" - * * "bracket" - * * "boldDoubleLeft" - * * "boldDoubleRight" - * * "thinDouble" - * * "none" - */ -StaveConnector.typeString = { - singleRight: StaveConnector.type.SINGLE_RIGHT, - singleLeft: StaveConnector.type.SINGLE_LEFT, - single: StaveConnector.type.SINGLE, - double: StaveConnector.type.DOUBLE, - brace: StaveConnector.type.BRACE, - bracket: StaveConnector.type.BRACKET, - boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, - boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, - thinDouble: StaveConnector.type.THIN_DOUBLE, - none: StaveConnector.type.NONE, -}; - - -/***/ }), - -/***/ "./src/stavehairpin.ts": -/*!*****************************!*\ - !*** ./src/stavehairpin.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ -// -// This class implements hairpins between notes. -// Hairpins can be either crescendo or decrescendo. - - - - -class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; - } - /* Helper function to convert ticks into pixels. - * Requires a Formatter with voices joined and formatted (to - * get pixels per tick) - * - * options is struct that has: - * - * { - * height: px, - * y_shift: px, // vertical offset - * left_shift_ticks: 0, // left horizontal offset expressed in ticks - * right_shift_ticks: 0 // right horizontal offset expressed in ticks - * } - * - **/ - static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { - var _a, _b; - const ppt = formatter.pixelsPerTick; - if (ppt == null) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); - } - const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); - const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); - const hairpin_options = { - height: options.height, - y_shift: options.y_shift, - left_shift_px: l_shift_px, - right_shift_px: r_shift_px, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - new StaveHairpin({ - first_note: notes.first_note, - last_note: notes.last_note, - }, type) - .setContext(ctx) - .setRenderOptions(hairpin_options) - .setPosition(position) - .draw(); - } - /** - * Create a new hairpin from the specified notes. - * - * @param {!Object} notes The notes to tie up. - * Notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * } - * @param {!Object} type The type of hairpin - */ - constructor(notes, type) { - super(); - this.setNotes(notes); - this.hairpin = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; - this.render_options = { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - } - setPosition(position) { - if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { - this.position = position; - } - return this; - } - setRenderOptions(options) { - if (options.height != null && - options.y_shift != null && - options.left_shift_px != null && - options.right_shift_px != null) { - this.render_options = options; - } - return this; - } - /** - * Set the notes to attach this hairpin to. - * - * @param {!Object} notes The start and end notes. - */ - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.last_note = notes.last_note; - return this; - } - renderHairpin(params) { - const ctx = this.checkContext(); - let dis = this.render_options.y_shift + 20; - let y_shift = params.first_y; - if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - dis = -dis + 30; - y_shift = params.first_y - params.staff_height; - } - const l_shift = this.render_options.left_shift_px; - const r_shift = this.render_options.right_shift_px; - ctx.beginPath(); - switch (this.hairpin) { - case StaveHairpin.type.CRESC: - ctx.moveTo(params.last_x + r_shift, y_shift + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); - break; - case StaveHairpin.type.DECRESC: - ctx.moveTo(params.first_x + l_shift, y_shift + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); - break; - default: - // Default is NONE, so nothing to draw - break; - } - ctx.stroke(); - ctx.closePath(); - } - draw() { - this.checkContext(); - this.setRendered(); - const firstNote = this.first_note; - const lastNote = this.last_note; - if (!firstNote || !lastNote) - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); - const start = firstNote.getModifierStartXY(this.position, 0); - const end = lastNote.getModifierStartXY(this.position, 0); - this.renderHairpin({ - first_x: start.x, - last_x: end.x, - first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), - last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), - staff_height: firstNote.checkStave().getHeight(), - }); - } -} -StaveHairpin.type = { - CRESC: 1, - DECRESC: 2, -}; - - -/***/ }), - -/***/ "./src/staveline.ts": -/*!**************************!*\ - !*** ./src/staveline.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This file implements `StaveLine` which are simply lines that connect -// two notes. This object is highly configurable, see the `render_options`. -// A simple line is often used for notating glissando articulations, but you -// can format a `StaveLine` with arrows or colors for more pedagogical -// purposes, such as diagrams. - - - - - -// Attribution: Arrow rendering implementations based off of -// Patrick Horgan's article, "Drawing lines and arcs with -// arrow heads on HTML5 Canvas" -// -// Draw an arrow head that connects between 3 coordinates. -function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { - // all cases do this. - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.lineTo(x0, y0); - ctx.closePath(); - ctx.fill(); -} -class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; - } - // Initialize the StaveLine with the given `notes`. - // - // `notes` is a struct that has: - // - // ``` - // { - // first_note: Note, - // last_note: Note, - // first_indices: [n1, n2, n3], - // last_indices: [n1, n2, n3] - // } - // ``` - constructor(notes) { - super(); - this.setNotes(notes); - this.text = ''; - this.resetFont(); - this.render_options = { - // Space to add to the left or the right - padding_left: 4, - padding_right: 3, - // The width of the line in pixels - line_width: 1, - // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). - line_dash: undefined, - // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). - rounded_end: true, - // The color of the line and arrowheads - color: undefined, - // Flags to draw arrows on each end of the line - draw_start_arrow: false, - draw_end_arrow: false, - // The length of the arrowhead sides - arrowhead_length: 10, - // The angle of the arrowhead - arrowhead_angle: Math.PI / 8, - // The position of the text - text_position_vertical: StaveLine.TextVerticalPosition.TOP, - text_justification: StaveLine.TextJustification.CENTER, - }; - } - // The the annotation for the `StaveLine` - setText(text) { - this.text = text; - return this; - } - // Set the notes for the `StaveLine` - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) - notes.first_indices = [0]; - if (!notes.last_indices) - notes.last_indices = [0]; - if (notes.first_indices.length !== notes.last_indices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.first_indices = notes.first_indices; - this.last_note = notes.last_note; - this.last_indices = notes.last_indices; - return this; - } - // Apply the style of the `StaveLine` to the context - applyLineStyle() { - const ctx = this.checkContext(); - const render_options = this.render_options; - if (render_options.line_dash) { - ctx.setLineDash(render_options.line_dash); - } - if (render_options.line_width) { - ctx.setLineWidth(render_options.line_width); - } - if (render_options.rounded_end) { - ctx.setLineCap('round'); - } - else { - ctx.setLineCap('square'); - } - } - // Apply the text styling to the context - applyFontStyle() { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - const render_options = this.render_options; - const color = render_options.color; - if (color) { - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - } - } - // Helper function to draw a line with arrow heads - drawArrowLine(ctx, pt1, pt2) { - const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; - const x1 = pt1.x; - const y1 = pt1.y; - const x2 = pt2.x; - const y2 = pt2.y; - // For ends with arrow we actually want to stop before we get to the arrow - // so that wide lines won't put a flat end on the arrow. - const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; - let end_x; - let end_y; - let start_x; - let start_y; - if (this.render_options.draw_end_arrow || both_arrows) { - end_x = Math.round(x1 + (x2 - x1) * ratio); - end_y = Math.round(y1 + (y2 - y1) * ratio); - } - else { - end_x = x2; - end_y = y2; - } - if (this.render_options.draw_start_arrow || both_arrows) { - start_x = x1 + (x2 - x1) * (1 - ratio); - start_y = y1 + (y2 - y1) * (1 - ratio); - } - else { - start_x = x1; - start_y = y1; - } - if (this.render_options.color) { - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - } - // Draw the shaft of the arrow - ctx.beginPath(); - ctx.moveTo(start_x, start_y); - ctx.lineTo(end_x, end_y); - ctx.stroke(); - ctx.closePath(); - // calculate the angle of the line - const line_angle = Math.atan2(y2 - y1, x2 - x1); - // h is the line length of a side of the arrow head - const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); - let angle1; - let angle2; - let top_x; - let top_y; - let bottom_x; - let bottom_y; - if (this.render_options.draw_end_arrow || both_arrows) { - angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; - top_x = x2 + Math.cos(angle1) * h; - top_y = y2 + Math.sin(angle1) * h; - angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; - bottom_x = x2 + Math.cos(angle2) * h; - bottom_y = y2 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); - } - if (this.render_options.draw_start_arrow || both_arrows) { - angle1 = line_angle + this.render_options.arrowhead_angle; - top_x = x1 + Math.cos(angle1) * h; - top_y = y1 + Math.sin(angle1) * h; - angle2 = line_angle - this.render_options.arrowhead_angle; - bottom_x = x1 + Math.cos(angle2) * h; - bottom_y = y1 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); - } - } - // Renders the `StaveLine` on the context - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const first_note = this.first_note; - const last_note = this.last_note; - const render_options = this.render_options; - ctx.save(); - this.applyLineStyle(); - // Cycle through each set of indices and draw lines - let start_position = { x: 0, y: 0 }; - let end_position = { x: 0, y: 0 }; - this.first_indices.forEach((first_index, i) => { - const last_index = this.last_indices[i]; - // Get initial coordinates for the start/end of the line - start_position = first_note.getModifierStartXY(2, first_index); - end_position = last_note.getModifierStartXY(1, last_index); - const upwards_slope = start_position.y > end_position.y; - // Adjust `x` coordinates for modifiers - start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; - end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; - // Adjust first `x` coordinates for displacements - const notehead_width = first_note.getGlyphProps().getWidth(); - const first_displaced = first_note.getKeyProps()[first_index].displaced; - if (first_displaced && first_note.getStemDirection() === 1) { - start_position.x += notehead_width + render_options.padding_left; - } - // Adjust last `x` coordinates for displacements - const last_displaced = last_note.getKeyProps()[last_index].displaced; - if (last_displaced && last_note.getStemDirection() === -1) { - end_position.x -= notehead_width + render_options.padding_right; - } - // Adjust y position better if it's not coming from the center of the note - start_position.y += upwards_slope ? -3 : 1; - end_position.y += upwards_slope ? 2 : 0; - this.drawArrowLine(ctx, start_position, end_position); - }); - ctx.restore(); - // Determine the x coordinate where to start the text - const text_width = ctx.measureText(this.text).width; - const justification = render_options.text_justification; - let x = 0; - if (justification === StaveLine.TextJustification.LEFT) { - x = start_position.x; - } - else if (justification === StaveLine.TextJustification.CENTER) { - const delta_x = end_position.x - start_position.x; - const center_x = delta_x / 2 + start_position.x; - x = center_x - text_width / 2; - } - else if (justification === StaveLine.TextJustification.RIGHT) { - x = end_position.x - text_width; - } - // Determine the y value to start the text - let y = 0; - const vertical_position = render_options.text_position_vertical; - if (vertical_position === StaveLine.TextVerticalPosition.TOP) { - y = first_note.checkStave().getYForTopText(); - } - else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { - y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); - } - // Draw the text - ctx.save(); - this.applyFontStyle(); - ctx.fillText(this.text, x, y); - ctx.restore(); - return this; - } -} -/** Default text font. */ -StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); -// Text Positioning -StaveLine.TextVerticalPosition = { - TOP: 1, - BOTTOM: 2, -}; -StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; - - -/***/ }), - -/***/ "./src/stavemodifier.ts": -/*!******************************!*\ - !*** ./src/stavemodifier.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// A base class for stave modifiers (e.g. clefs, key signatures) - - - -var StaveModifierPosition; -(function (StaveModifierPosition) { - StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; - StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; - StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; - StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; - StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; - StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; - StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; -})(StaveModifierPosition || (StaveModifierPosition = {})); -class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; - } - static get Position() { - return StaveModifierPosition; - } - constructor() { - super(); - this.width = 0; - this.x = 0; - this.padding = 10; - this.position = StaveModifierPosition.ABOVE; - } - getPosition() { - return this.position; - } - setPosition(position) { - this.position = position; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - setStave(stave) { - this.stave = stave; - return this; - } - getWidth() { - return this.width; - } - setWidth(width) { - this.width = width; - return this; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - return this; - } - /** - * Runs setYShift() for the Glyph object so that it matches the position of line for - * the Stave provided. A `customShift` can also be given (measured in the same units - * as `setYShift` not in lines) and this will be added after all other positions are - * calculated from the Stave. - * - * Note that this routine only sets the yShift; it does not actually "place" (meaning - * draw) the Glyph on the Stave. Call .draw() afterwards to do that. - */ - placeGlyphOnLine(glyph, stave, line, customShift = 0) { - glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); - } - getPadding(index) { - return index !== undefined && index < 2 ? 0 : this.padding; - } - setPadding(padding) { - this.padding = padding; - return this; - } - setLayoutMetrics(layoutMetrics) { - this.layoutMetrics = layoutMetrics; - return this; - } - getLayoutMetrics() { - return this.layoutMetrics; - } - // eslint-disable-next-line - draw(...args) { - // DO NOTHING. - } -} - - -/***/ }), - -/***/ "./src/stavenote.ts": -/*!**************************!*\ - !*** ./src/stavenote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This file implements notes for standard notation. This consists of one or -// more `NoteHeads`, an optional stem, and an optional flag. -// -// Throughout these comments, a "note" refers to the entire `StaveNote`, -// and a "key" refers to a specific pitch/notehead within a note. -// -// See `tests/stavenote_tests.ts` for usage examples. - - - - - - - - -function showDeprecationWarningForNoteHeads() { - // eslint-disable-next-line - console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); -} -// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (StaveNote.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); -} -const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); -// Helper methods for rest positioning in ModifierContext. -function shiftRestVertical(rest, note, dir) { - const delta = dir; - rest.line += delta; - rest.maxLine += delta; - rest.minLine += delta; - rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); -} -// Called from formatNotes :: center a rest between two notes -function centerRest(rest, noteU, noteL) { - const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); - rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); - rest.line -= delta; - rest.maxLine -= delta; - rest.minLine -= delta; -} -class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; - } - /** - * @deprecated Use Stem.UP. - */ - static get STEM_UP() { - return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - } - /** - * @deprecated Use Stem.DOWN. - */ - static get STEM_DOWN() { - return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; - } - static get LEDGER_LINE_OFFSET() { - return 3; - } - static get minNoteheadPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Format notes inside a ModifierContext. */ - static format(notes, state) { - if (!notes || notes.length < 2) - return false; - const notesList = []; - for (let i = 0; i < notes.length; i++) { - // Formatting uses sortedKeyProps to calculate line and minL. - const props = notes[i].sortedKeyProps; - const line = props[0].keyProps.line; - let minL = props[props.length - 1].keyProps.line; - const stemDirection = notes[i].getStemDirection(); - const stemMax = notes[i].getStemLength() / 10; - const stemMin = notes[i].getStemMinimumLength() / 10; - let maxL; - if (notes[i].isRest()) { - maxL = line + notes[i].glyphProps.line_above; - minL = line - notes[i].glyphProps.line_below; - } - else { - maxL = - stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; - minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; - } - notesList.push({ - line: props[0].keyProps.line, - maxLine: maxL, - minLine: minL, - isrest: notes[i].isRest(), - stemDirection: stemDirection, - stemMax, - stemMin, - voice_shift: notes[i].getVoiceShiftWidth(), - is_displaced: notes[i].isDisplaced(), - note: notes[i], - }); - } - let voices = 0; - let noteU = undefined; - let noteM = undefined; - let noteL = undefined; - const draw = [false, false, false]; - for (let i = 0; i < notesList.length; i++) { - draw[i] = notesList[i].note.render_options.draw == false ? false : true; - } - if (draw[0] && draw[1] && draw[2]) { - // Three visible notes - voices = 3; - noteU = notesList[0]; - noteM = notesList[1]; - noteL = notesList[2]; - } - else if (draw[0] && draw[1]) { - // Two visible notes, 0 & 1 - voices = 2; - noteU = notesList[0]; - noteL = notesList[1]; - } - else if (draw[0] && draw[2]) { - // Two visible notes, 0 & 2 - voices = 2; - noteU = notesList[0]; - noteL = notesList[2]; - } - else if (draw[1] && draw[2]) { - // Two visible notes, 1 & 2 - voices = 2; - noteU = notesList[1]; - noteL = notesList[2]; - } - else { - // No shift required for less than 2 visible notes - return true; - } - // for two voice backward compatibility, ensure upper voice is stems up - // for three voices, the voices must be in order (upper, middle, lower) - if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { - noteU = notesList[1]; - noteL = notesList[0]; - } - const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); - let xShift = 0; - // Test for two voice note intersection - if (voices === 2) { - const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; - if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { - noteL.note.render_options.draw = false; - } - else if (noteU.minLine <= noteL.maxLine + lineSpacing) { - if (noteU.isrest) { - // shift rest up - shiftRestVertical(noteU, noteL, 1); - } - else if (noteL.isrest) { - // shift rest down - shiftRestVertical(noteL, noteU, -1); - } - else { - //Instead of shifting notes, remove the appropriate flag - //If we are sharing a line, switch one notes stem direction. - //If we are sharing a line and in the same voice, only then offset one note - const lineDiff = Math.abs(noteU.line - noteL.line); - if (noteU.note.hasStem() && noteL.note.hasStem()) { - //If we have different dot values, must offset - //Or If we have a white mixed with a black notehead, must offset - let whiteNoteHeadCount = 0; - let blackNoteHeadCount = 0; - if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteU.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteU.note.duration) > 2) { - blackNoteHeadCount++; - } - if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteL.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteL.note.duration) > 2) { - blackNoteHeadCount++; - } - if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) || - noteU.note.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot).length !== noteL.note.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot).length) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (lineDiff < 1 && lineDiff > 0) { - //if the notes are quite close but not on the same line, shift - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.voice !== noteL.note.voice) { - //If we are not in the same voice - if (noteU.stemDirection === noteL.stemDirection) { - if (noteU.line != noteL.line) { - xShift = voiceXShift + 2; - noteU.note.setXShift(xShift); - } - else { - //same line, swap stem direction for one note - if (noteL.stemDirection === 1) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - } - } - } //Very close whole notes - } - else if (lineDiff < 1) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.hasStem()) { - noteU.stemDirection = -noteU.note.getStemDirection(); - noteU.note.setStemDirection(noteU.stemDirection); - } - else if (noteL.note.hasStem()) { - noteL.stemDirection = -noteL.note.getStemDirection(); - noteL.note.setStemDirection(noteL.stemDirection); - } - } - } - // format complete - state.right_shift += xShift; - return true; - } - if (!noteM) - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); - // For three voices, test if rests can be repositioned - // - // Special case 1 :: middle voice rest between two notes - // - if (noteM.isrest && !noteU.isrest && !noteL.isrest) { - if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { - const restHeight = noteM.maxLine - noteM.minLine; - const space = noteU.minLine - noteL.maxLine; - if (restHeight < space) { - // center middle voice rest between the upper and lower voices - centerRest(noteM, noteU, noteL); - } - else { - xShift = voiceXShift + 2; // shift middle rest right - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - // format complete - state.right_shift += xShift; - return true; - } - } - // Special case 2 :: all voices are rests - if (noteU.isrest && noteM.isrest && noteL.isrest) { - // Hide upper voice rest - noteU.note.render_options.draw = false; - // Hide lower voice rest - noteL.note.render_options.draw = false; - // format complete - state.right_shift += xShift; - return true; - } - // Test if any other rests can be repositioned - if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { - // Hide middle voice rest - noteM.note.render_options.draw = false; - } - if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { - // Hide middle voice rest - noteM.note.render_options.draw = false; - } - if (noteU.isrest && noteU.minLine <= noteM.maxLine) { - // shift upper voice rest up; - shiftRestVertical(noteU, noteM, 1); - } - if (noteL.isrest && noteM.minLine <= noteL.maxLine) { - // shift lower voice rest down - shiftRestVertical(noteL, noteM, -1); - } - // If middle voice intersects upper or lower voice - if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { - // shift middle note right - xShift = voiceXShift + 2; - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - state.right_shift += xShift; - return true; - } - static postFormat(notes) { - if (!notes) - return false; - notes.forEach((note) => note.postFormat()); - return true; - } - constructor(noteStruct) { - var _a, _b, _c; - super(noteStruct); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // INSTANCE MEMBERS - this.minLine = 0; - this.maxLine = 0; - // Sorted variant of keyProps used internally - this.sortedKeyProps = []; - this.ledgerLineStyle = {}; - this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; - this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; - // Pull note rendering properties. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - // if true, displace note to right - this.displaced = false; - this.dot_shiftY = 0; - // for displaced ledger lines - this.use_default_head_x = false; - // Drawing - this._noteHeads = []; - this.modifiers = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads and rests - glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, - // number of stroke px to the left and right of head - stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); - this.calculateKeyProps(); - this.buildStem(); - // Set the stem direction - if (noteStruct.auto_stem) { - this.autoStem(); - } - else { - this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); - } - this.reset(); - this.buildFlag(); - } - reset() { - super.reset(); - // Save prior noteHead styles & reapply them after making new noteheads. - const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); - this.buildNoteHeads(); - this._noteHeads.forEach((noteHead, index) => { - const noteHeadStyle = noteHeadStyles[index]; - if (noteHeadStyle) - noteHead.setStyle(noteHeadStyle); - }); - const stave = this.stave; - if (stave) { - this._noteHeads.forEach((head) => head.setStave(stave)); - } - this.calcNoteDisplacements(); - return this; - } - setBeam(beam) { - this.beam = beam; - this.calcNoteDisplacements(); - // Update stem extension if a beam is assigned. - if (this.stem) { - this.stem.setExtension(this.getStemExtension()); - } - return this; - } - // Builds a `Stem` for the note - buildStem() { - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); - return this; - } - // Builds a `NoteHead` for each key in the note - buildNoteHeads() { - this._noteHeads = []; - const stemDirection = this.getStemDirection(); - const keys = this.getKeys(); - let lastLine = undefined; - let lineDiff = undefined; - let displaced = false; - // Draw notes from bottom to top. - // For down-stem notes, we draw from top to bottom. - let start; - let end; - let step; - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - start = 0; - end = keys.length; - step = 1; - } - else { - start = keys.length - 1; - end = -1; - step = -1; - } - for (let i = start; i !== end; i += step) { - // Building noteheads rely on sortedKeNotes in order to calculate the displacements - const noteProps = this.sortedKeyProps[i].keyProps; - const line = noteProps.line; - // Keep track of last line with a note head, so that consecutive heads - // are correctly displaced. - if (lastLine === undefined) { - lastLine = line; - } - else { - lineDiff = Math.abs(lastLine - line); - if (lineDiff === 0 || lineDiff === 0.5) { - displaced = !displaced; - } - else { - displaced = false; - this.use_default_head_x = true; - } - } - lastLine = line; - const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ - duration: this.duration, - note_type: this.noteType, - displaced, - stem_direction: stemDirection, - custom_glyph_code: noteProps.code, - glyph_font_scale: this.render_options.glyph_font_scale, - x_shift: noteProps.shift_right, - stem_up_x_offset: noteProps.stem_up_x_offset, - stem_down_x_offset: noteProps.stem_down_x_offset, - line: noteProps.line, - }); - this.addChildElement(notehead); - this._noteHeads[this.sortedKeyProps[i].index] = notehead; - } - } - // Automatically sets the stem direction based on the keys in the note - autoStem() { - this.setStemDirection(this.calculateOptimalStemDirection()); - } - calculateOptimalStemDirection() { - // Figure out optimal stem direction based on given notes - // minLine & maxLine rely on sortedKeyProps - this.minLine = this.sortedKeyProps[0].keyProps.line; - this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; - const MIDDLE_LINE = 3; - const decider = (this.minLine + this.maxLine) / 2; - const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; - return stemDirection; - } - // Calculates and stores the properties for each key in the note - calculateKeyProps() { - let lastLine; - for (let i = 0; i < this.keys.length; ++i) { - const key = this.keys[i]; - // All rests use the same position on the line. - // if (this.glyph.rest) key = this.glyph.position; - if (this.glyphProps.rest) - this.glyphProps.position = key; - const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; - const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); - if (!props) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); - } - // Override line placement for default rests - if (props.key === 'R') { - if (this.duration === '1' || this.duration === 'w') { - props.line = 4; - } - else { - props.line = 3; - } - } - // Calculate displacement of this note - const line = props.line; - if (lastLine == undefined) { - lastLine = line; - } - else { - if (Math.abs(lastLine - line) === 0.5) { - this.displaced = true; - props.displaced = true; - // Have to mark the previous note as - // displaced as well, for modifier placement - if (this.keyProps.length > 0) { - this.keyProps[i - 1].displaced = true; - } - } - } - lastLine = line; - this.keyProps.push(props); - } - // Sort the notes from lowest line to highest line in sortedKeyProps - // Warn no longer required as keyProps remains unsorted - this.keyProps.forEach((keyProps, index) => { - this.sortedKeyProps.push({ keyProps, index }); - }); - this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); - } - // Get the `BoundingBox` for the entire note - getBoundingBox() { - var _a, _b; - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); - const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; - let minY = 0; - let maxY = 0; - const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; - const lineSpacing = halfLineSpacing * 2; - if (this.isRest()) { - const y = this.ys[0]; - const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); - if (frac.equals(1) || frac.equals(2)) { - minY = y - halfLineSpacing; - maxY = y + halfLineSpacing; - } - else { - minY = y - this.glyphProps.line_above * lineSpacing; - maxY = y + this.glyphProps.line_below * lineSpacing; - } - } - else if (this.glyphProps.stem) { - const ys = this.getStemExtents(); - ys.baseY += halfLineSpacing * this.getStemDirection(); - minY = Math.min(ys.topY, ys.baseY); - maxY = Math.max(ys.topY, ys.baseY); - } - else { - minY = 0; - maxY = 0; - for (let i = 0; i < this.ys.length; ++i) { - const yy = this.ys[i]; - if (i === 0) { - minY = yy; - maxY = yy; - } - else { - minY = Math.min(yy, minY); - maxY = Math.max(yy, maxY); - } - } - minY -= halfLineSpacing; - maxY += halfLineSpacing; - } - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); - } - // Gets the line number of the bottom note in the chord. - // If `isTopNote` is `true` then get the top note's line number instead - getLineNumber(isTopNote) { - if (!this.keyProps.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); - } - let resultLine = this.keyProps[0].line; - // No precondition assumed for sortedness of keyProps array - for (let i = 0; i < this.keyProps.length; i++) { - const thisLine = this.keyProps[i].line; - if (isTopNote) { - if (thisLine > resultLine) - resultLine = thisLine; - } - else { - if (thisLine < resultLine) - resultLine = thisLine; - } - } - return resultLine; - } - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest() { - return this.glyphProps.rest; - } - // Determine if the current note is a chord - isChord() { - return !this.isRest() && this.keys.length > 1; - } - // Determine if the `StaveNote` has a stem - hasStem() { - return this.glyphProps.stem; - } - hasFlag() { - return super.hasFlag() && !this.isRest(); - } - getStemX() { - if (this.noteType === 'r') { - return this.getCenterGlyphX(); - } - else { - // We adjust the origin of the stem because we want the stem left-aligned - // with the notehead if stemmed-down, and right-aligned if stemmed-up - return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); - } - } - // Get the `y` coordinate for text placed on the top/bottom of a - // note at a desired `text_line` - getYForTopText(textLine) { - const extents = this.getStemExtents(); - return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - getYForBottomText(textLine) { - const extents = this.getStemExtents(); - return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - // Sets the current note to the provided `stave`. This applies - // `y` values to the `NoteHeads`. - setStave(stave) { - super.setStave(stave); - const ys = this._noteHeads.map((notehead) => { - notehead.setStave(stave); - return notehead.getY(); - }); - this.setYs(ys); - if (this.stem) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - this.stem.setYBounds(y_top, y_bottom); - } - return this; - } - // Check if note is shifted to the right - isDisplaced() { - return this.displaced; - } - // Sets whether shift note to the right. `displaced` is a `boolean` - setNoteDisplaced(displaced) { - this.displaced = displaced; - return this; - } - // Get the starting `x` coordinate for a `StaveTie` - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; - if (this.modifierContext) - tieStartX += this.modifierContext.getRightShift(); - return tieStartX; - } - // Get the ending `x` coordinate for a `StaveTie` - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - tieEndX += this.x_shift - this.leftDisplacedHeadPx; - return tieEndX; - } - // Get the stave line on which to place a rest - getLineForRest() { - let restLine = this.keyProps[0].line; - if (this.keyProps.length > 1) { - const lastLine = this.keyProps[this.keyProps.length - 1].line; - const top = Math.max(restLine, lastLine); - const bot = Math.min(restLine, lastLine); - restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); - } - return restLine; - } - // Get the default `x` and `y` coordinates for the provided `position` - // and key `index` - getModifierStartXY(position, index, options = {}) { - var _a, _b; - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; - let x = 0; - if (position === LEFT) { - // FIXME: Left modifier padding, move to font file - x = -1 * 2; - } - else if (position === RIGHT) { - // FIXME: Right modifier padding, move to font file - x = this.getGlyphWidth() + this.x_shift + 2; - if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && - this.hasFlag() && - (options.forceFlagRight || isInnerNoteIndex(this, index))) { - x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; - } - } - else if (position === BELOW || position === ABOVE) { - x = this.getGlyphWidth() / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - // Sets the style of the complete StaveNote, including all keys - // and the stem. - setStyle(style) { - return super.setGroupStyle(style); - } - setStemStyle(style) { - const stem = this.getStem(); - if (stem) - stem.setStyle(style); - return this; - } - getStemStyle() { - var _a; - return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - setLedgerLineStyle(style) { - this.ledgerLineStyle = style; - } - getLedgerLineStyle() { - return this.ledgerLineStyle; - } - setFlagStyle(style) { - var _a; - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); - } - getFlagStyle() { - var _a; - return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - // Sets the notehead at `index` to the provided coloring `style`. - // - // `style` is an `object` with the following properties: `shadowColor`, - // `shadowBlur`, `fillStyle`, `strokeStyle` - setKeyStyle(index, style) { - this._noteHeads[index].setStyle(style); - return this; - } - setKeyLine(index, line) { - this.keyProps[index].line = line; - this.reset(); - return this; - } - getKeyLine(index) { - return this.keyProps[index].line; - } - // Get the width of the note if it is displaced. Used for `Voice` - // formatting - getVoiceShiftWidth() { - // TODO: may need to accommodate for dot here. - return this.getGlyphWidth() * (this.displaced ? 2 : 1); - } - // Calculates and sets the extra pixels to the left or right - // if the note is displaced. - calcNoteDisplacements() { - this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); - // For upstems with flags, the extra space is unnecessary, since it's taken - // up by the flag. - this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); - } - // Pre-render formatting - preFormat() { - if (this.preFormatted) - return; - let noteHeadPadding = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - // If there are no modifiers on this note, make sure there is adequate padding - // between the notes. - if (this.modifierContext.getWidth() === 0) { - noteHeadPadding = StaveNote.minNoteheadPadding; - } - } - let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; - // For upward flagged notes, the width of the flag needs to be added - if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - width += this.getGlyphWidth(); - // TODO: Add flag width as a separate metric - } - this.setWidth(width); - this.preFormatted = true; - } - /** - * @typedef {Object} noteHeadBounds - * @property {number} y_top the highest notehead bound - * @property {number} y_bottom the lowest notehead bound - * @property {number|Null} displaced_x the starting x for displaced noteheads - * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads - * @property {number} highest_line the highest notehead line in traditional music line - * numbering (bottom line = 1, top line = 5) - * @property {number} lowest_line the lowest notehead line - * @property {number|false} highest_displaced_line the highest staff line number - * for a displaced notehead - * @property {number|false} lowest_displaced_line - * @property {number} highest_non_displaced_line - * @property {number} lowest_non_displaced_line - */ - /** - * Get the staff line and y value for the highest & lowest noteheads - * @returns {noteHeadBounds} - */ - getNoteHeadBounds() { - // Top and bottom Y values for stem. - let yTop = +Infinity; - let yBottom = -Infinity; - let nonDisplacedX; - let displacedX; - let highestLine = this.checkStave().getNumLines(); - let lowestLine = 1; - let highestDisplacedLine; - let lowestDisplacedLine; - let highestNonDisplacedLine = highestLine; - let lowestNonDisplacedLine = lowestLine; - this._noteHeads.forEach((notehead) => { - const line = notehead.getLine(); - const y = notehead.getY(); - yTop = Math.min(y, yTop); - yBottom = Math.max(y, yBottom); - if (displacedX === undefined && notehead.isDisplaced()) { - displacedX = notehead.getAbsoluteX(); - } - if (nonDisplacedX === undefined && !notehead.isDisplaced()) { - nonDisplacedX = notehead.getAbsoluteX(); - } - highestLine = Math.max(line, highestLine); - lowestLine = Math.min(line, lowestLine); - if (notehead.isDisplaced()) { - highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); - lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); - } - else { - highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); - lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); - } - }, this); - return { - y_top: yTop, - y_bottom: yBottom, - displaced_x: displacedX, - non_displaced_x: nonDisplacedX, - highest_line: highestLine, - lowest_line: lowestLine, - highest_displaced_line: highestDisplacedLine, - lowest_displaced_line: lowestDisplacedLine, - highest_non_displaced_line: highestNonDisplacedLine, - lowest_non_displaced_line: lowestNonDisplacedLine, - }; - } - // Get the starting `x` coordinate for the noteheads - getNoteHeadBeginX() { - return this.getAbsoluteX() + this.x_shift; - } - // Get the ending `x` coordinate for the noteheads - getNoteHeadEndX() { - const xBegin = this.getNoteHeadBeginX(); - return xBegin + this.getGlyphWidth(); - } - get noteHeads() { - return this._noteHeads.slice(); - } - /** @deprecated use StaveNote.noteHeads instead. */ - get note_heads() { - showDeprecationWarningForNoteHeads(); - return this.noteHeads; - } - // Draw the ledger lines between the stave and the highest/lowest keys - drawLedgerLines() { - const stave = this.checkStave(); - const { glyphProps, render_options: { stroke_px }, } = this; - const ctx = this.checkContext(); - const width = glyphProps.getWidth() + stroke_px * 2; - const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; - if (this.isRest()) - return; - if (!ctx) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); - // Early out if there are no ledger lines to draw. - if (highest_line < 6 && lowest_line > 0) - return; - const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); - const drawLedgerLine = (y, normal, displaced) => { - let x; - if (displaced && normal) - x = min_x - stroke_px; - else if (normal) - x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; - else - x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; - const ledgerWidth = normal && displaced ? doubleWidth : width; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + ledgerWidth, y); - ctx.stroke(); - }; - const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); - this.applyStyle(ctx, style); - // Draw ledger lines below the staff: - for (let line = 6; line <= highest_line; ++line) { - const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; - const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - // Draw ledger lines above the staff: - for (let line = 0; line >= lowest_line; --line) { - const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; - const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - this.restoreStyle(ctx, style); - } - // Draw all key modifiers - drawModifiers(noteheadParam) { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - const index = modifier.checkIndex(); - const notehead = this._noteHeads[index]; - if (notehead == noteheadParam) { - const noteheadStyle = notehead.getStyle(); - notehead.applyStyle(ctx, noteheadStyle); - modifier.setContext(ctx); - modifier.drawWithStyle(); - notehead.restoreStyle(ctx, noteheadStyle); - } - } - } - shouldDrawFlag() { - const hasStem = this.stem !== undefined; - const hasFlag = this.glyphProps.flag == true; - const hasNoBeam = this.beam === undefined; - return hasStem && hasFlag && hasNoBeam; - } - // Draw the flag for the note - drawFlag() { - var _a, _b, _c, _d, _e; - const ctx = this.checkContext(); - if (!ctx) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - if (this.shouldDrawFlag()) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - // eslint-disable-next-line - const noteStemHeight = this.stem.getHeight(); - const flagX = this.getStemX(); - // What's with the magic +/- 2 - // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. - // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. - // Alternatively, we could shorten the stem. - const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN - ? // Down stems are below the note head and have flags on the right. - y_top - - noteStemHeight + - 2 - - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - - ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) - : // Up stems are above the note head and have flags on the right. - y_bottom - - noteStemHeight - - 2 + - (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - - ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); - // Draw the Flag - (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); - } - } - // Draw the NoteHeads - drawNoteHeads() { - const ctx = this.checkContext(); - this._noteHeads.forEach((notehead) => { - notehead.applyStyle(ctx); - ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); - notehead.setContext(ctx).draw(); - this.drawModifiers(notehead); - ctx.closeGroup(); - notehead.restoreStyle(ctx); - }); - } - drawStem(stemOptions) { - // GCR TODO: I can't find any context in which this is called with the stemStruct - // argument in the codebase or tests. Nor can I find a case where super.drawStem - // is called at all. Perhaps these should be removed? - const ctx = this.checkContext(); - if (stemOptions) { - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); - } - // If we will render a flag, we shorten the stem so that the tip - // does not poke through the flag. - if (this.shouldDrawFlag() && this.stem) { - this.stem.adjustHeightForFlag(); - } - if (this.stem) { - this.stem.setContext(ctx).draw(); - } - } - /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ - getStaveNoteScale() { - return 1.0; - } - /** - * Override stemmablenote stem extension to adjust for distance from middle line. - */ - getStemExtension() { - const super_stem_extension = super.getStemExtension(); - if (!this.glyphProps.stem) { - return super_stem_extension; - } - const stem_direction = this.getStemDirection(); - if (stem_direction !== this.calculateOptimalStemDirection()) { - return super_stem_extension; // no adjustment for manually set stem direction. - } - let mid_line_distance; - const MIDDLE_LINE = 3; - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - // Note that the use of maxLine here instead of minLine might - // seem counterintuitive, but in the case of (say) treble clef - // chord(F2, E4) stem up, we do not want to extend the stem because - // of F2, when a normal octave-length stem above E4 is fine. - // - // maxLine and minLine are set in calculateOptimalStemDirection() so - // will be known. - mid_line_distance = MIDDLE_LINE - this.maxLine; - } - else { - mid_line_distance = this.minLine - MIDDLE_LINE; - } - // how many lines more than an octave is the relevant notehead? - const lines_over_octave_from_mid_line = mid_line_distance - 3.5; - if (lines_over_octave_from_mid_line <= 0) { - return super_stem_extension; - } - const stave = this.getStave(); - let spacing_between_lines = 10; - if (stave != undefined) { - spacing_between_lines = stave.getSpacingBetweenLines(); - } - return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; - } - // Draws all the `StaveNote` parts. This is the main drawing method. - draw() { - if (this.render_options.draw === false) - return; - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); - } - const ctx = this.checkContext(); - const xBegin = this.getNoteHeadBeginX(); - const shouldRenderStem = this.hasStem() && !this.beam; - // Format note head x positions - this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); - if (this.stem) { - // Format stem x positions - const stemX = this.getStemX(); - this.stem.setNoteHeadXBounds(stemX, stemX); - } - L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); - // Apply the overall style -- may be contradicted by local settings: - this.applyStyle(); - ctx.openGroup('stavenote', this.getAttribute('id')); - this.drawLedgerLines(); - if (shouldRenderStem) - this.drawStem(); - this.drawNoteHeads(); - this.drawFlag(); - ctx.closeGroup(); - this.restoreStyle(); - this.setRendered(); - } -} -StaveNote.DEBUG = false; - - -/***/ }), - -/***/ "./src/staverepetition.ts": -/*!********************************!*\ - !*** ./src/staverepetition.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Repetition": () => (/* binding */ Repetition) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - - - -class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; - } - constructor(type, x, y_shift) { - super(); - this.symbol_type = type; - this.x = x; - this.x_shift = 0; - this.y_shift = y_shift; - this.resetFont(); - } - setShiftX(x) { - this.x_shift = x; - return this; - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - this.setRendered(); - switch (this.symbol_type) { - case Repetition.type.CODA_RIGHT: - this.drawCodaFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.CODA_LEFT: - this.drawSymbolText(stave, x, 'Coda', true); - break; - case Repetition.type.SEGNO_LEFT: - this.drawSignoFixed(stave, x); - break; - case Repetition.type.SEGNO_RIGHT: - this.drawSignoFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.DC: - this.drawSymbolText(stave, x, 'D.C.', false); - break; - case Repetition.type.DC_AL_CODA: - this.drawSymbolText(stave, x, 'D.C. al', true); - break; - case Repetition.type.DC_AL_FINE: - this.drawSymbolText(stave, x, 'D.C. al Fine', false); - break; - case Repetition.type.DS: - this.drawSymbolText(stave, x, 'D.S.', false); - break; - case Repetition.type.DS_AL_CODA: - this.drawSymbolText(stave, x, 'D.S. al', true); - break; - case Repetition.type.DS_AL_FINE: - this.drawSymbolText(stave, x, 'D.S. al Fine', false); - break; - case Repetition.type.FINE: - this.drawSymbolText(stave, x, 'Fine', false); - break; - case Repetition.type.TO_CODA: - this.drawSymbolText(stave, x, 'To', true); - break; - default: - break; - } - return this; - } - drawCodaFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); - return this; - } - drawSignoFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); - return this; - } - drawSymbolText(stave, x, text, draw_coda) { - const ctx = stave.checkContext(); - ctx.save(); - ctx.setFont(this.textFont); - let text_x = 0; - let symbol_x = 0; - const modifierWidth = stave.getNoteStartX() - this.x; - switch (this.symbol_type) { - // To the left with symbol - case Repetition.type.CODA_LEFT: - // Offset Coda text to right of stave beginning - text_x = this.x + stave.getVerticalBarWidth(); - symbol_x = - text_x + - ctx.measureText(text).width + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - // To the right without symbol - case Repetition.type.DC: - case Repetition.type.DC_AL_FINE: - case Repetition.type.DS: - case Repetition.type.DS_AL_FINE: - case Repetition.type.FINE: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width; - break; - // To the right with symbol - default: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - symbol_x = - text_x + - ctx.measureText(text).width + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - } - const y = stave.getYForTopText(stave.getNumLines()) + - this.y_shift + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); - if (draw_coda) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' }); - } - ctx.fillText(text, text_x, y + 5); - ctx.restore(); - return this; - } -} -Repetition.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; -Repetition.type = { - NONE: 1, - CODA_LEFT: 2, - CODA_RIGHT: 3, - SEGNO_LEFT: 4, - SEGNO_RIGHT: 5, - DC: 6, - DC_AL_CODA: 7, - DC_AL_FINE: 8, - DS: 9, - DS_AL_CODA: 10, - DS_AL_FINE: 11, - FINE: 12, - TO_CODA: 13, // To Coda at end of stave -}; - - -/***/ }), - -/***/ "./src/stavesection.ts": -/*!*****************************!*\ - !*** ./src/stavesection.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - - -class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; - } - constructor(section, x, shift_y, drawRect = true) { - super(); - this.setWidth(16); - this.section = section; - this.x = x; - this.shift_x = 0; - this.shift_y = shift_y; - this.drawRect = drawRect; - this.resetFont(); - } - setStaveSection(section) { - this.section = section; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const borderWidth = 2; - const padding = 2; - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(borderWidth); - ctx.setFont(this.textFont); - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - const textWidth = textFormatter.getWidthForTextInPx(this.section); - const textY = textFormatter.getYForStringInPx(this.section); - const textHeight = textY.height; - const headroom = -1 * textY.yMin; - const width = textWidth + 2 * padding; // add left & right padding - const height = textHeight + 2 * padding; // add top & bottom padding - // Seems to be a good default y - const y = stave.getYForTopText(1.5) + this.shift_y; - const x = this.x + shift_x; - if (this.drawRect) { - ctx.beginPath(); - ctx.rect(x, y - height + headroom, width, height); - ctx.stroke(); - } - ctx.fillText(this.section, x + padding, y - padding); - ctx.restore(); - return this; - } -} -StaveSection.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 10, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetempo.ts": -/*!***************************!*\ - !*** ./src/stavetempo.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Radosaw Eichler 2012 - - - - - - -class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; - } - constructor(tempo, x, shift_y) { - super(); - /** Font size for note. */ - this.render_options = { glyph_font_scale: 30 }; - this.tempo = tempo; - this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; - this.x = x; - this.shift_x = 10; - this.shift_y = shift_y; - this.resetFont(); - } - setTempo(tempo) { - this.tempo = tempo; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const ctx = stave.checkContext(); - this.setRendered(); - const options = this.render_options; - // FIXME: What does the '38' mean? Why 38? Is that supposed to - // be the default font size for standard notation? - const scale = options.glyph_font_scale / 38; - const name = this.tempo.name; - const duration = this.tempo.duration; - const dots = this.tempo.dots || 0; - const bpm = this.tempo.bpm; - let x = this.x + this.shift_x + shift_x; - const y = stave.getYForTopText(1) + this.shift_y; - ctx.save(); - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - if (name) { - ctx.setFont(this.textFont); - ctx.fillText(name, x, y); - x += textFormatter.getWidthForTextInPx(name); - } - if (duration && bpm) { - // Override the weight and style. - const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); - ctx.setFont(noteTextFont); - const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); - if (name) { - x += noteTextFormatter.getWidthForTextInPx('|'); - ctx.fillText('(', x, y); - x += noteTextFormatter.getWidthForTextInPx('('); - } - const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); - x += 3 * scale; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); - x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); - // Draw stem and flags - if (glyphProps.stem) { - let stem_height = 30; - if (glyphProps.beam_count) - stem_height += 3 * (glyphProps.beam_count - 1); - stem_height *= scale; - const y_top = y - stem_height; - ctx.fillRect(x - scale, y_top, scale, stem_height); - if (glyphProps.code && glyphProps.code_flag_upstem) { - const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { - category: 'flag.staveTempo', - }); - x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; - } - } - // Draw dot - for (let i = 0; i < dots; i++) { - x += 6 * scale; - ctx.beginPath(); - ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); - ctx.fill(); - } - ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); - } - ctx.restore(); - return this; - } -} -StaveTempo.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 14, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetext.ts": -/*!**************************!*\ - !*** ./src/stavetext.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveText": () => (/* binding */ StaveText) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 - - - - - -class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; - } - constructor(text, position, options = {}) { - super(); - this.setWidth(16); - this.text = text; - this.position = position; - this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); - this.resetFont(); - } - setStaveText(text) { - this.text = text; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - setText(text) { - this.text = text; - return this; - } - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - const text_width = ctx.measureText('' + this.text).width; - let x; - let y; - switch (this.position) { - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: - y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; - if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { - x = stave.getX() - text_width - 24 + this.options.shift_x; - } - else { - x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; - } - break; - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: - x = stave.getX() + this.options.shift_x; - if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { - x += stave.getWidth() / 2 - text_width / 2; - } - else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { - x += stave.getWidth() - text_width; - } - if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { - y = stave.getYForTopText(2) + this.options.shift_y; - } - else { - y = stave.getYForBottomText(2) + this.options.shift_y; - } - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); - } - ctx.fillText('' + this.text, x, y + 4); - ctx.restore(); - return this; - } -} -StaveText.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 16, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetie.ts": -/*!*************************!*\ - !*** ./src/stavetie.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - - -class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; - } - /** - * @param notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes, text) { - super(); - this.setNotes(notes); - this.text = text; - this.render_options = { - cp1: 8, - cp2: 12, - text_shift_x: 0, - first_x_shift: 0, - last_x_shift: 0, - y_shift: 7, - tie_spacing: 0, - }; - this.resetFont(); - } - setDirection(direction) { - this.direction = direction; - return this; - } - /** - * Set the notes to attach this tie to. - * - * @param {!Object} notes The notes to tie up. - */ - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) { - notes.first_indices = [0]; - } - if (!notes.last_indices) { - notes.last_indices = [0]; - } - if (notes.first_indices.length !== notes.last_indices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); - } - this.notes = notes; - return this; - } - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial() { - return !this.notes.first_note || !this.notes.last_note; - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - let cp1 = this.render_options.cp1; - let cp2 = this.render_options.cp2; - if (Math.abs(params.last_x_px - params.first_x_px) < 10) { - cp1 = 2; - cp2 = 8; - } - const first_x_shift = this.render_options.first_x_shift; - const last_x_shift = this.render_options.last_x_shift; - const y_shift = this.render_options.y_shift * params.direction; - // setNotes(...) verified that first_indices and last_indices are not undefined. - // As a result, we use the ! non-null assertion operator here. - // eslint-disable-next-line - const first_indices = this.notes.first_indices; - // eslint-disable-next-line - const last_indices = this.notes.last_indices; - this.applyStyle(); - ctx.openGroup('stavetie', this.getAttribute('id')); - for (let i = 0; i < first_indices.length; ++i) { - const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; - const first_y_px = params.first_ys[first_indices[i]] + y_shift; - const last_y_px = params.last_ys[last_indices[i]] + y_shift; - if (isNaN(first_y_px) || isNaN(last_y_px)) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); - } - const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; - const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; - ctx.beginPath(); - ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); - ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); - ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); - ctx.closePath(); - ctx.fill(); - } - ctx.closeGroup(); - this.restoreStyle(); - } - renderText(first_x_px, last_x_px) { - var _a, _b, _c; - if (!this.text) - return; - const ctx = this.checkContext(); - let center_x = (first_x_px + last_x_px) / 2; - center_x -= ctx.measureText(this.text).width / 2; - const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); - if (stave) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); - ctx.restore(); - } - } - /** - * Returns the TieNotes structure of the first and last note this tie connects. - */ - getNotes() { - return this.notes; - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.notes.first_note; - const last_note = this.notes.last_note; - // Provide some default values so the compiler doesn't complain. - let first_x_px = 0; - let last_x_px = 0; - let first_ys = [0]; - let last_ys = [0]; - let stem_direction = 0; - if (first_note) { - first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; - stem_direction = first_note.getStemDirection(); - first_ys = first_note.getYs(); - } - else if (last_note) { - const stave = last_note.checkStave(); - first_x_px = stave.getTieStartX(); - first_ys = last_note.getYs(); - this.notes.first_indices = this.notes.last_indices; - } - if (last_note) { - last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; - stem_direction = last_note.getStemDirection(); - last_ys = last_note.getYs(); - } - else if (first_note) { - const stave = first_note.checkStave(); - last_x_px = stave.getTieEndX(); - last_ys = first_note.getYs(); - this.notes.last_indices = this.notes.first_indices; - } - if (this.direction) { - stem_direction = this.direction; - } - this.renderTie({ - first_x_px, - last_x_px, - first_ys, - last_ys, - direction: stem_direction, - }); - this.renderText(first_x_px, last_x_px); - return true; - } -} -/** Default text font. */ -StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/stavevolta.ts": -/*!***************************!*\ - !*** ./src/stavevolta.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Volta": () => (/* binding */ Volta), -/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - -var VoltaType; -(function (VoltaType) { - VoltaType[VoltaType["NONE"] = 1] = "NONE"; - VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; - VoltaType[VoltaType["MID"] = 3] = "MID"; - VoltaType[VoltaType["END"] = 4] = "END"; - VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; -})(VoltaType || (VoltaType = {})); -class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; - } - static get type() { - return VoltaType; - } - constructor(type, number, x, y_shift) { - super(); - this.volta = type; - this.x = x; - this.y_shift = y_shift; - this.number = number; - this.resetFont(); - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - const ctx = stave.checkContext(); - this.setRendered(); - let width = stave.getWidth() - x; // don't include x (offset) for width - const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - const vert_height = 1.5 * stave.getSpacingBetweenLines(); - switch (this.volta) { - case VoltaType.BEGIN: - ctx.fillRect(this.x + x, top_y, 1, vert_height); - break; - case VoltaType.END: - width -= 5; - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - case VoltaType.BEGIN_END: - width -= 3; - ctx.fillRect(this.x + x, top_y, 1, vert_height); - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - default: - break; - } - // If the beginning of a volta, draw measure number - if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.number, this.x + x + 5, top_y + 15); - ctx.restore(); - } - ctx.fillRect(this.x + x, top_y, width, 1); - return this; - } -} -Volta.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 9, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stem.ts": -/*!*********************!*\ - !*** ./src/stem.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stem": () => (/* binding */ Stem) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// This file implements the `Stem` object. Generally this object is handled -// by its parent `StemmableNote`. - - - - -// eslint-disable-next-line -function L(...args) { - if (Stem.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); -} -class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; - } - // Stem directions - static get UP() { - return 1; - } - static get DOWN() { - return -1; - } - // Theme - static get WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; - } - static get HEIGHT() { - return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; - } - constructor(options) { - super(); - this.stem_up_y_offset = 0; - this.stem_down_y_offset = 0; - this.stem_up_y_base_offset = 0; - this.stem_down_y_base_offset = 0; - // Default notehead x bounds - this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; - this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; - // Y bounds for top/bottom most notehead - this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; - this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; - // Stem top extension - this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; - // Direction of the stem - this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; - // Flag to override all draw calls - this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; - this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; - this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; - // Use to adjust the rendered height without affecting - // the results of `.getExtents()` - this.renderHeightAdjustment = 0; - this.setOptions(options); - } - setOptions(options) { - // Changing where the stem meets the head - this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; - this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; - this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; - this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; - } - // Set the x bounds for the default notehead - setNoteHeadXBounds(x_begin, x_end) { - this.x_begin = x_begin; - this.x_end = x_end; - return this; - } - // Set the direction of the stem in relation to the noteheads - setDirection(direction) { - this.stem_direction = direction; - } - // Set the extension for the stem, generally for flags or beams - setExtension(ext) { - this.stem_extension = ext; - } - getExtension() { - return this.stem_extension; - } - // The the y bounds for the top and bottom noteheads - setYBounds(y_top, y_bottom) { - this.y_top = y_top; - this.y_bottom = y_bottom; - } - // Gets the entire height for the stem - getHeight() { - const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; - const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. - return unsigned_height * this.stem_direction; - } - getBoundingBox() { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); - } - // Get the y coordinates for the very base of the stem to the top of - // the extension - getExtents() { - const isStemUp = this.stem_direction === Stem.UP; - const ys = [this.y_top, this.y_bottom]; - const stemHeight = Stem.HEIGHT + this.stem_extension; - const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); - const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); - const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; - return { topY: stemTipY, baseY: outerMostNoteheadY }; - } - setVisibility(isVisible) { - this.hide = !isVisible; - return this; - } - setStemlet(isStemlet, stemletHeight) { - this.isStemlet = isStemlet; - this.stemletHeight = stemletHeight; - return this; - } - adjustHeightForFlag() { - this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); - } - adjustHeightForBeam() { - this.renderHeightAdjustment = -Stem.WIDTH / 2; - } - // Render the stem onto the canvas - draw() { - this.setRendered(); - if (this.hide) - return; - const ctx = this.checkContext(); - let stem_x; - let stem_y; - const stem_direction = this.stem_direction; - let y_base_offset = 0; - if (stem_direction === Stem.DOWN) { - // Down stems are rendered to the left of the head. - stem_x = this.x_begin; - stem_y = this.y_top + this.stem_down_y_offset; - y_base_offset = this.stem_down_y_base_offset; - } - else { - // Up stems are rendered to the right of the head. - stem_x = this.x_end; - stem_y = this.y_bottom - this.stem_up_y_offset; - y_base_offset = this.stem_up_y_base_offset; - } - const stemHeight = this.getHeight(); - L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); - // The offset from the stem's base which is required fo satisfy the stemlet height - const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; - // Draw the stem - ctx.save(); - this.applyStyle(); - ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); - ctx.beginPath(); - ctx.setLineWidth(Stem.WIDTH); - ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); - ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); - ctx.stroke(); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ -Stem.DEBUG = false; - - -/***/ }), - -/***/ "./src/stemmablenote.ts": -/*!******************************!*\ - !*** ./src/stemmablenote.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// `StemmableNote` is an abstract interface for notes with optional stems. -// Examples of stemmable notes are `StaveNote` and `TabNote` - - - - - - -class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; - } - constructor(noteStruct) { - super(noteStruct); - } - // Get and set the note's `Stem` - getStem() { - return this.stem; - } - checkStem() { - if (!this.stem) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); - } - return this.stem; - } - setStem(stem) { - this.stem = stem; - this.addChildElement(stem); - return this; - } - // Builds and sets a new stem - buildStem() { - const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); - this.setStem(stem); - return this; - } - buildFlag(category = 'flag') { - const { glyphProps } = this; - if (this.hasFlag()) { - const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; - if (flagCode) - this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); - } - } - // Get the custom glyph associated with the outer note head on the base of the stem. - getBaseCustomNoteHeadGlyphProps() { - if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - return this.customGlyphs[this.customGlyphs.length - 1]; - } - else { - return this.customGlyphs[0]; - } - } - // Get the full length of stem - getStemLength() { - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); - } - // Get the number of beams for this duration - getBeamCount() { - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - return glyphProps.beam_count; - } - else { - return 0; - } - } - // Get the minimum length of stem - getStemMinimumLength() { - const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); - let length = frac.value() <= 1 ? 0 : 20; - // if note is flagged, cannot shorten beam - switch (this.duration) { - case '8': - if (this.beam == undefined) - length = 35; - break; - case '16': - length = this.beam == undefined ? 35 : 25; - break; - case '32': - length = this.beam == undefined ? 45 : 35; - break; - case '64': - length = this.beam == undefined ? 50 : 40; - break; - case '128': - length = this.beam == undefined ? 55 : 45; - break; - default: - break; - } - return length; - } - // Get/set the direction of the stem - getStemDirection() { - if (!this.stem_direction) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem_direction; - } - setStemDirection(direction) { - if (!direction) - direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); - } - this.stem_direction = direction; - // Reset and reformat everything. Flag has to be built before calling getStemExtension. - this.reset(); - if (this.hasFlag()) { - this.buildFlag(); - } - this.beam = undefined; - if (this.stem) { - this.stem.setDirection(direction); - this.stem.setExtension(this.getStemExtension()); - // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten - // the stem appropriately. If there's no custom note head, lookup the standard notehead. - const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); - // Get the font-specific customizations for the note heads. - const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { - offsetYBaseStemUp: 0, - offsetYTopStemUp: 0, - offsetYBaseStemDown: 0, - offsetYTopStemDown: 0, - }); - // Configure the stem to use these offsets. - this.stem.setOptions({ - stem_up_y_offset: offsets.offsetYTopStemUp, - stem_down_y_offset: offsets.offsetYTopStemDown, - stem_up_y_base_offset: offsets.offsetYBaseStemUp, - stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, - }); - } - if (this.preFormatted) { - this.preFormat(); - } - return this; - } - // Get the `x` coordinate of the stem - getStemX() { - const x_begin = this.getAbsoluteX() + this.x_shift; - const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); - const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; - return stem_x; - } - // Get the `x` coordinate for the center of the glyph. - // Used for `TabNote` stems and stemlets over rests - getCenterGlyphX() { - return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; - } - // Get the stem extension for the current duration - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != undefined) { - return this.stem_extension_override; - } - // Use stem_beam_extension with beams - if (this.beam) { - return glyphProps.stem_beam_extension; - } - if (glyphProps) { - return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; - } - return 0; - } - // Set the stem length to a specific. Will override the default length. - setStemLength(height) { - this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; - return this; - } - // Get the top and bottom `y` values of the stem. - getStemExtents() { - if (!this.stem) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem.getExtents(); - } - /** Gets the `y` value for the top modifiers at a specific `textLine`. */ - getYForTopText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - else { - return stave.getYForTopText(textLine); - } - } - /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ - getYForBottomText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - else { - return stave.getYForBottomText(textLine); - } - } - hasFlag() { - return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; - } - /** Post formats the note. */ - postFormat() { - var _a; - (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); - this.postFormatted = true; - return this; - } - /** Renders the stem onto the canvas. */ - drawStem(stemOptions) { - var _a; - this.checkContext(); - this.setRendered(); - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); - (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); - } -} - - -/***/ }), - -/***/ "./src/stringnumber.ts": -/*!*****************************!*\ - !*** ./src/stringnumber.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns -// -// This file implements the `StringNumber` class which renders string -// number annotations beside notes. - - - - - - - -class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; - } - static get metrics() { - var _a; - return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { - verticalPadding: 0, - stemPadding: 0, - leftPadding: 0, - rightPadding: 0, - }); - } - // ## Static Methods - // Arrange string numbers inside a `ModifierContext` - static format(nums, state) { - const left_shift = state.left_shift; - const right_shift = state.right_shift; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shift_left = 0; - let shift_right = 0; - const modLines = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); - } - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const mc = note.getModifierContext(); - const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; - if (mc) { - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { - num.text_line = mc.getState().top_text_line; - state.top_text_line += verticalSpaceNeeded; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { - num.text_line = mc.getState().text_line; - state.text_line += verticalSpaceNeeded; - } - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left); - } - if (right_shift === 0) { - shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); - } - } - prev_note = note; - } - const glyphLine = modLines === 0 ? props.line : modLines; - nums_list.push({ - pos, - note, - num, - line: glyphLine, - shiftL: shift_left, - shiftR: shift_right, - }); - } - // Sort string numbers by line number. - nums_list.sort((a, b) => b.line - a.line); - let num_shiftR = 0; - let x_widthL = 0; - let x_widthR = 0; - let last_line = null; - let last_note = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const note = nums_list[i].note; - const pos = nums_list[i].pos; - const num = nums_list[i].num; - const line = nums_list[i].line; - const shiftR = nums_list[i].shiftR; - // Reset the position of the string number every line. - if (line !== last_line || note !== last_note) { - num_shiftR = right_shift + shiftR; - } - const num_width = num.getWidth() + num_spacing; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - num.setXShift(left_shift); - num_shift = shift_left + num_width; // spacing - x_widthL = num_shift > x_widthL ? num_shift : x_widthL; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - num.setXShift(num_shiftR); - num_shift += num_width; // spacing - x_widthR = num_shift > x_widthR ? num_shift : x_widthR; - } - last_line = line; - last_note = note; - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - constructor(number) { - super(); - this.string_number = number; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head - this.x_shift = 0; - this.y_shift = 0; - this.text_line = 0; - this.stem_offset = 0; - this.x_offset = 0; // Horizontal offset from default - this.y_offset = 0; // Vertical offset from default - this.dashed = true; // true - draw dashed extension false - no extension - this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line - this.radius = 8; - this.drawCircle = true; - this.setWidth(this.radius * 2 + 4); - this.resetFont(); - } - setLineEndType(leg) { - if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { - this.leg = leg; - } - return this; - } - setStringNumber(number) { - this.string_number = number; - return this; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - setLastNote(note) { - this.last_note = note; - return this; - } - setDashed(dashed) { - this.dashed = dashed; - return this; - } - setDrawCircle(drawCircle) { - this.drawCircle = drawCircle; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - let dot_x = start.x + this.x_shift + this.x_offset; - let stem_ext = {}; - if (note.hasStem()) { - stem_ext = note.checkStem().getExtents(); - } - let dot_y = start.y + this.y_shift + this.y_offset; - switch (this.position) { - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a < b ? a : b)); - if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; - } - dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; - } - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a > b ? a : b)); - if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { - dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; - } - dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; - } - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: - dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: - dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); - } - ctx.save(); - if (this.drawCircle) { - ctx.beginPath(); - ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); - ctx.setLineWidth(1.5); - ctx.stroke(); - } - ctx.setFont(this.textFont); - const x = dot_x - ctx.measureText(this.string_number).width / 2; - ctx.fillText('' + this.string_number, x, dot_y + 4.5); - const lastNote = this.last_note; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { - // Only StemmableNote objects have getStemX(). - const end = lastNote.getStemX() - note.getX() + 5; - ctx.setStrokeStyle('#000000'); - ctx.setLineCap('round'); - ctx.setLineWidth(0.6); - if (this.dashed) { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); - } - else { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); - } - let len; - let pattern; - switch (this.leg) { - case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: - len = -10; - pattern = this.dashed ? [3, 3] : [3, 0]; - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: - len = 10; - pattern = this.dashed ? [3, 3] : [3, 0]; - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - default: - break; - } - } - ctx.restore(); - } -} -StringNumber.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/strokes.ts": -/*!************************!*\ - !*** ./src/strokes.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stroke": () => (/* binding */ Stroke) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns -// -// This file implements the `Stroke` class which renders chord strokes -// that can be arpeggiated, brushed, rasquedo, etc. - - - - - -class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Stroke; - } - // Arrange strokes inside `ModifierContext` - static format(strokes, state) { - const left_shift = state.left_shift; - const stroke_spacing = 0; - if (!strokes || strokes.length === 0) - return false; - const strokeList = strokes.map((stroke) => { - const note = stroke.getNote(); - const index = stroke.checkIndex(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - // Only StaveNote objects have getKeyProps(). - const { line } = note.getKeyProps()[index]; - const shift = note.getLeftDisplacedHeadPx(); - return { line, shift, stroke }; - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { - // Only TabNote objects have getPositions(). - const { str: string } = note.getPositions()[index]; - return { line: string, shift: 0, stroke }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Internal', 'Unexpected instance.'); - } - }); - const strokeShift = left_shift; - // There can only be one stroke .. if more than one, they overlay each other - const xShift = strokeList.reduce((xShift, { stroke, shift }) => { - stroke.setXShift(strokeShift + shift); - return Math.max(stroke.getWidth() + stroke_spacing, xShift); - }, 0); - state.left_shift += xShift; - return true; - } - constructor(type, options) { - super(); - this.options = Object.assign({ all_voices: true }, options); - // multi voice - span stroke across all voices if true - this.all_voices = this.options.all_voices; - // multi voice - end note of stroke, set in draw() - this.type = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.render_options = { - font_scale: 38, - }; - this.resetFont(); - this.setXShift(0); - this.setWidth(10); - } - getPosition() { - return this.position; - } - addEndNote(note) { - this.note_end = note; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let ys = note.getYs(); - let topY = start.y; - let botY = start.y; - const x = start.x - 5; - const line_space = note.checkStave().getSpacingBetweenLines(); - const notes = this.checkModifierContext().getMembers(note.getCategory()); - for (let i = 0; i < notes.length; i++) { - const note = notes[i]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isNote)(note)) { - // Only Note objects have getYs(). - // note is an instance of either StaveNote or TabNote. - ys = note.getYs(); - for (let n = 0; n < ys.length; n++) { - if (this.note === notes[i] || this.all_voices) { - topY = Math.min(topY, ys[n]); - botY = Math.max(botY, ys[n]); - } - } - } - } - let arrow = ''; - let arrow_shift_x = 0; - let arrow_y = 0; - let text_shift_x = 0; - let text_y = 0; - switch (this.type) { - case Stroke.Type.BRUSH_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - arrow_y = topY - line_space / 2 + 10; - botY += line_space / 2; - break; - case Stroke.Type.BRUSH_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = 0.5; - arrow_y = botY + line_space / 2; - topY -= line_space / 2; - break; - case Stroke.Type.ROLL_DOWN: - case Stroke.Type.RASQUEDO_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - text_shift_x = this.x_shift + arrow_shift_x - 2; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - topY += 1.5 * line_space; - if ((botY - topY) % 2 !== 0) { - botY += 0.5 * line_space; - } - else { - botY += line_space; - } - arrow_y = topY - line_space; - text_y = botY + line_space + 2; - } - else { - topY += 1.5 * line_space; - botY += line_space; - arrow_y = topY - 0.75 * line_space; - text_y = botY + 0.25 * line_space; - } - break; - case Stroke.Type.ROLL_UP: - case Stroke.Type.RASQUEDO_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = -4; - text_shift_x = this.x_shift + arrow_shift_x - 1; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - arrow_y = line_space / 2; - topY += 0.5 * line_space; - if ((botY - topY) % 2 === 0) { - botY += line_space / 2; - } - arrow_y = botY + 0.5 * line_space; - text_y = topY - 1.25 * line_space; - } - else { - topY += 0.25 * line_space; - botY += 0.5 * line_space; - arrow_y = botY + 0.25 * line_space; - text_y = topY - line_space; - } - break; - case Stroke.Type.ARPEGGIO_DIRECTIONLESS: - topY += 0.5 * line_space; - botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); - } - let strokeLine = 'straight'; - // Draw the stroke - if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { - ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); - } - else { - strokeLine = 'wiggly'; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - for (let i = topY; i <= botY; i += line_space) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - } - else { - let i; - for (i = topY; i <= botY; i += 10) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - if (this.type === Stroke.Type.RASQUEDO_DOWN) { - text_y = i + 0.25 * line_space; - } - } - } - if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { - return; // skip drawing arrow heads or text - } - // Draw the arrow head - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { - category: `stroke_${strokeLine}.${arrow}`, - }); - // Draw the rasquedo "R" - if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('R', x + text_shift_x, text_y); - ctx.restore(); - } - } -} -Stroke.Type = { - BRUSH_DOWN: 1, - BRUSH_UP: 2, - ROLL_DOWN: 3, - ROLL_UP: 4, - RASQUEDO_DOWN: 5, - RASQUEDO_UP: 6, - ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow -}; -Stroke.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/svgcontext.ts": -/*!***************************!*\ - !*** ./src/svgcontext.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// @author Gregory Ristow (2015) - - - - -/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ -const ATTRIBUTES_TO_IGNORE = { - path: { - x: true, - y: true, - width: true, - height: true, - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - rect: { - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - text: { - width: true, - height: true, - }, -}; -/** Create the SVG in the SVG namespace. */ -const SVG_NS = 'http://www.w3.org/2000/svg'; -const TWO_PI = 2 * Math.PI; -class MeasureTextCache { - constructor() { - // The cache is keyed first by the text string, then by the font attributes - // joined together. - this.cache = {}; - } - lookup(text, svg, attributes) { - let entries = this.cache[text]; - if (entries === undefined) { - entries = {}; - this.cache[text] = entries; - } - const family = attributes['font-family']; - const size = attributes['font-size']; - const weight = attributes['font-weight']; - const style = attributes['font-style']; - const key = `${family}%${size}%${weight}%${style}`; - let entry = entries[key]; - if (entry === undefined) { - entry = this.measureImpl(text, svg, attributes); - entries[key] = entry; - } - return entry; - } - measureImpl(text, svg, attributes) { - let txt = this.txt; - if (!txt) { - // Create the SVG text element that will be used to measure text in the event - // of a cache miss. - txt = document.createElementNS(SVG_NS, 'text'); - this.txt = txt; - } - txt.textContent = text; - if (attributes['font-family']) - txt.setAttributeNS(null, 'font-family', attributes['font-family']); - if (attributes['font-size']) - txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); - if (attributes['font-style']) - txt.setAttributeNS(null, 'font-style', attributes['font-style']); - if (attributes['font-weight']) - txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); - svg.appendChild(txt); - const bbox = txt.getBBox(); - svg.removeChild(txt); - return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; - } -} -/** - * SVG rendering context with an API similar to CanvasRenderingContext2D. - */ -class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { - constructor(element) { - super(); - this.width = 0; - this.height = 0; - this.precision = 1; - this.backgroundFillStyle = 'white'; - /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ - this.fontCSSString = ''; - this.element = element; - this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); - // Create a SVG element and add it to the container element. - const svg = this.create('svg'); - this.element.appendChild(svg); - this.svg = svg; - this.parent = this.svg; - this.groups = [this.svg]; - this.path = ''; - this.pen = { x: NaN, y: NaN }; - this.lineWidth = 1.0; - const defaultFontAttributes = { - 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', - 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, - }; - this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); - this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); - this.groupAttributes = []; - this.applyAttributes(svg, this.attributes); - this.groupAttributes.push(Object.assign({}, this.attributes)); - this.shadow_attributes = { - width: 0, - color: 'black', - }; - this.state_stack = []; - } - round(n) { - return Math.round(n * this.precision) / this.precision; - } - create(svgElementType) { - return document.createElementNS(SVG_NS, svgElementType); - } - // Allow grouping elements in containers for interactivity. - openGroup(cls, id, attrs) { - const group = this.create('g'); - this.groups.push(group); - this.parent.appendChild(group); - this.parent = group; - if (cls) - group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); - if (id) - group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); - if (attrs && attrs.pointerBBox) { - group.setAttribute('pointer-events', 'bounding-box'); - } - this.applyAttributes(group, this.attributes); - this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); - return group; - } - closeGroup() { - this.groups.pop(); - this.groupAttributes.pop(); - this.parent = this.groups[this.groups.length - 1]; - } - add(elem) { - this.parent.appendChild(elem); - } - setFillStyle(style) { - this.attributes.fill = style; - return this; - } - /** - * Used to set the fill color for `clearRect()`. This allows us to simulate - * cutting a "hole" into the SVG drawing. - */ - setBackgroundFillStyle(style) { - this.backgroundFillStyle = style; - return this; - } - setStrokeStyle(style) { - this.attributes.stroke = style; - return this; - } - setShadowColor(color) { - this.shadow_attributes.color = color; - return this; - } - /** - * @param blur A non-negative float specifying the level of shadow blur, where 0 - * represents no blur and larger numbers represent increasingly more blur. - * @returns this - */ - setShadowBlur(blur) { - this.shadow_attributes.width = blur; - return this; - } - /** - * @param width - * @returns this - */ - setLineWidth(width) { - this.attributes['stroke-width'] = width; - this.lineWidth = width; - return this; - } - /** - * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] - * @returns this - * - * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) - */ - setLineDash(lineDash) { - if (Object.prototype.toString.call(lineDash) === '[object Array]') { - this.attributes['stroke-dasharray'] = lineDash.join(','); - return this; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); - } - } - /** - * @param capType - * @returns this - */ - setLineCap(capType) { - this.attributes['stroke-linecap'] = capType; - return this; - } - // ### Sizing & Scaling Methods: - // TODO (GCR): See note at scale() -- separate our internal - // conception of pixel-based width/height from the style.width - // and style.height properties eventually to allow users to - // apply responsive sizing attributes to the SVG. - resize(width, height) { - this.width = width; - this.height = height; - this.element.style.width = width.toString(); - this.svg.style.width = width.toString(); - this.svg.style.height = height.toString(); - const attributes = { - width, - height, - }; - this.applyAttributes(this.svg, attributes); - this.scale(this.state.scaleX, this.state.scaleY); - return this; - } - scale(x, y) { - // uses viewBox to scale - // TODO (GCR): we may at some point want to distinguish the - // style.width / style.height properties that are applied to - // the SVG object from our internal conception of the SVG - // width/height. This would allow us to create automatically - // scaling SVG's that filled their containers, for instance. - // - // As this isn't implemented in Canvas contexts, - // I've left as is for now, but in using the viewBox to - // handle internal scaling, am trying to make it possible - // for us to eventually move in that direction. - this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; - this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; - const visibleWidth = this.width / this.state.scaleX; - const visibleHeight = this.height / this.state.scaleY; - this.setViewBox(0, 0, visibleWidth, visibleHeight); - return this; - } - /** - * 1 arg: string in the "x y w h" format - * 4 args: x:number, y:number, w:number, h:number - */ - setViewBox(viewBox_or_minX, minY, width, height) { - if (typeof viewBox_or_minX === 'string') { - this.svg.setAttribute('viewBox', viewBox_or_minX); - } - else { - const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; - this.svg.setAttribute('viewBox', viewBoxString); - } - } - // ### Drawing helper methods: - applyAttributes(element, attributes) { - const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; - for (const attrName in attributes) { - if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { - continue; - } - if (attributes[attrName] && - (this.groupAttributes.length == 0 || - attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) - element.setAttributeNS(null, attrName, attributes[attrName]); - } - return element; - } - // ### Shape & Path Methods: - clear() { - // Clear the SVG by removing all inner children. - // (This approach is usually slightly more efficient - // than removing the old SVG & adding a new one to - // the container element, since it does not cause the - // container to resize twice. Also, the resize - // triggered by removing the entire SVG can trigger - // a touchcancel event when the element resizes away - // from a touch point.) - while (this.svg.lastChild) { - this.svg.removeChild(this.svg.lastChild); - } - // Replace the viewbox attribute we just removed. - this.scale(this.state.scaleX, this.state.scaleY); - } - // ## Rectangles: - rect(x, y, width, height, attributes) { - // Avoid invalid negative height attributes by flipping the rectangle on its head: - if (height < 0) { - y += height; - height *= -1; - } - const rectangle = this.create('rect'); - attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; - x = this.round(x); - y = this.round(y); - width = this.round(width); - height = this.round(height); - this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); - this.add(rectangle); - return this; - } - fillRect(x, y, width, height) { - const attributes = { fill: this.attributes.fill, stroke: 'none' }; - this.rect(x, y, width, height, attributes); - return this; - } - clearRect(x, y, width, height) { - // Currently this fills a rect with the backgroundFillStyle, rather - // than "cut a hole" into the existing shapes. - // - // Since tabNote seems to be the only module that makes use of this - // it may be worth creating a separate tabStave that would - // draw lines around locations of tablature fingering. - this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); - return this; - } - // ## Paths: - beginPath() { - this.path = ''; - this.pen.x = NaN; - this.pen.y = NaN; - return this; - } - moveTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'M' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - lineTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'L' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - bezierCurveTo(x1, y1, x2, y2, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - x2 = this.round(x2); - y2 = this.round(y2); - this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - quadraticCurveTo(x1, y1, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - let x0 = x + radius * Math.cos(startAngle); - let y0 = y + radius * Math.sin(startAngle); - x0 = this.round(x0); - y0 = this.round(y0); - // svg behavior different from canvas. Don't normalize angles if - // we are drawing a circle because they both normalize to 0 - const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); - const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); - if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || - (counterclockwise && startAngle - endAngle >= TWO_PI) || - tmpStartTest === tmpEndTest) { - let x1 = x + radius * Math.cos(startAngle + Math.PI); - let y1 = y + radius * Math.sin(startAngle + Math.PI); - // There's no way to specify a completely circular arc in SVG so we have to - // use two semi-circular arcs. - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; - this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; - this.pen.x = x0; - this.pen.y = y0; - } - else { - let x1 = x + radius * Math.cos(endAngle); - let y1 = y + radius * Math.sin(endAngle); - startAngle = tmpStartTest; - endAngle = tmpEndTest; - let large; - if (Math.abs(endAngle - startAngle) < Math.PI) { - large = counterclockwise; - } - else { - large = !counterclockwise; - } - if (startAngle > endAngle) { - large = !large; - } - const sweep = !counterclockwise; - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; - this.pen.x = x1; - this.pen.y = y1; - } - return this; - } - closePath() { - this.path += 'Z'; - return this; - } - getShadowStyle() { - const sa = this.shadow_attributes; - // A CSS drop-shadow filter blur looks different than a canvas shadowBlur - // of the same radius, so we scale the drop-shadow radius here to make it - // look close to the canvas shadow. - return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; - } - fill(attributes) { - const path = this.create('path'); - if (typeof attributes === 'undefined') { - attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); - } - attributes.d = this.path; - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - stroke() { - const path = this.create('path'); - const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - // ## Text Methods: - measureText(text) { - return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); - } - fillText(text, x, y) { - if (!text || text.length <= 0) { - return this; - } - x = this.round(x); - y = this.round(y); - const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, - y }); - const txt = this.create('text'); - txt.textContent = text; - this.applyAttributes(txt, attributes); - this.add(txt); - return this; - } - // TODO: State should be deep-copied. - save() { - this.state_stack.push({ - state: { - 'font-family': this.state['font-family'], - 'font-weight': this.state['font-weight'], - 'font-style': this.state['font-style'], - 'font-size': this.state['font-size'], - scale: this.state.scale, - }, - attributes: { - 'font-family': this.attributes['font-family'], - 'font-weight': this.attributes['font-weight'], - 'font-style': this.attributes['font-style'], - 'font-size': this.attributes['font-size'], - fill: this.attributes.fill, - stroke: this.attributes.stroke, - 'stroke-width': this.attributes['stroke-width'], - 'stroke-dasharray': this.attributes['stroke-dasharray'], - }, - shadow_attributes: { - width: this.shadow_attributes.width, - color: this.shadow_attributes.color, - }, - lineWidth: this.lineWidth, - }); - return this; - } - // TODO: State should be deep-restored. - restore() { - const savedState = this.state_stack.pop(); - if (savedState) { - const state = savedState; - this.state['font-family'] = state.state['font-family']; - this.state['font-weight'] = state.state['font-weight']; - this.state['font-style'] = state.state['font-style']; - this.state['font-size'] = state.state['font-size']; - this.state.scale = state.state.scale; - this.attributes['font-family'] = state.attributes['font-family']; - this.attributes['font-weight'] = state.attributes['font-weight']; - this.attributes['font-style'] = state.attributes['font-style']; - this.attributes['font-size'] = state.attributes['font-size']; - this.attributes.fill = state.attributes.fill; - this.attributes.stroke = state.attributes.stroke; - this.attributes['stroke-width'] = state.attributes['stroke-width']; - this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; - this.shadow_attributes.width = state.shadow_attributes.width; - this.shadow_attributes.color = state.shadow_attributes.color; - this.lineWidth = state.lineWidth; - } - return this; - } - set fillStyle(style) { - this.setFillStyle(style); - } - get fillStyle() { - return this.attributes.fill; - } - set strokeStyle(style) { - this.setStrokeStyle(style); - } - get strokeStyle() { - return this.attributes.stroke; - } - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted - * into the font-weight attribute (e.g., font-weight="bold") - * @param style is a string (e.g., 'italic', 'normal') that is inserted into the - * font-style attribute (e.g., font-style="italic") - */ - setFont(f, size, weight, style) { - const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); - this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); - const fontAttributes = { - 'font-family': fontInfo.family, - 'font-size': fontInfo.size, - 'font-weight': fontInfo.weight, - 'font-style': fontInfo.style, - }; - this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); - this.state = Object.assign(Object.assign({}, this.state), fontAttributes); - return this; - } - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont() { - return this.fontCSSString; - } -} -SVGContext.measureTextCache = new MeasureTextCache(); - - -/***/ }), - -/***/ "./src/system.ts": -/*!***********************!*\ - !*** ./src/system.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "System": () => (/* binding */ System) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -/** - * System implements a musical system, which is a collection of staves, - * each which can have one or more voices. All voices across all staves in - * the system are formatted together. - */ -class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; - } - constructor(params = {}) { - super(); - this.setOptions(params); - this.partStaves = []; - this.partStaveInfos = []; - this.partVoices = []; - } - /** Set formatting options. */ - setOptions(options = {}) { - if (!options.factory) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); - } - this.factory = options.factory; - this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); - if (this.options.noJustification === false && typeof options.width === 'undefined') { - this.options.autoWidth = true; - } - } - /** Get origin X. */ - getX() { - return this.options.x; - } - /** Set origin X. */ - setX(x) { - this.options.x = x; - this.partStaves.forEach((s) => { - s.setX(x); - }); - } - /** Get origin y. */ - getY() { - return this.options.y; - } - /** Set origin y. */ - setY(y) { - this.options.y = y; - this.partStaves.forEach((s) => { - s.setY(y); - }); - } - /** Get associated staves. */ - getStaves() { - return this.partStaves; - } - /** Get associated voices. */ - getVoices() { - return this.partVoices; - } - /** Set associated context. */ - setContext(context) { - super.setContext(context); - this.factory.setContext(context); - return this; - } - /** - * Add connector between staves. - * @param type see {@link StaveConnector.typeString} - */ - addConnector(type = 'double') { - this.connector = this.factory.StaveConnector({ - top_stave: this.partStaves[0], - bottom_stave: this.partStaves[this.partStaves.length - 1], - type, - }); - return this.connector; - } - /** - * Add a stave to the system. - * - * Example (one voice): - * - * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` - * - * Example (two voices): - * - * `system.addStave({voices: [` - * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` - * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` - * `]});` - */ - addStave(params) { - var _a; - const staveOptions = Object.assign({ left_bar: false }, params.options); - const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); - const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); - const ctx = this.getContext(); - p.voices.forEach((voice) => { - voice - .setContext(ctx) - .setStave(stave) - .getTickables() - .forEach((tickable) => tickable.setStave(stave)); - this.partVoices.push(voice); - }); - this.partStaves.push(stave); - this.partStaveInfos.push(p); - return stave; - } - /** - * Add voices to the system with stave already assigned. - */ - addVoices(voices) { - const ctx = this.getContext(); - voices.forEach((voice) => { - voice.setContext(ctx); - this.partVoices.push(voice); - }); - } - /** Format the system. */ - format() { - const options_details = this.options.details; - let justifyWidth = 0; - const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); - this.formatter = formatter; - let y = this.options.y; - let startX = 0; - const debugNoteMetricsYs = []; - this.partStaves.forEach((part, index) => { - y = y + part.space(this.partStaveInfos[index].spaceAbove); - part.setY(y); - y = y + part.space(this.partStaveInfos[index].spaceBelow); - y = y + part.space(this.options.spaceBetweenStaves); - if (this.partStaveInfos[index].debugNoteMetrics) { - debugNoteMetricsYs.push({ y, stave: part }); - y += 15; - } - startX = Math.max(startX, part.getNoteStartX()); - }); - // Re-assign Stave to update y position - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - const stave = tickable.getStave(); - if (stave) - tickable.setStave(stave); - }); - }); - // Join the voices - formatter.joinVoices(this.partVoices); - // Update the start position of all staves. - this.partStaves.forEach((part) => part.setNoteStartX(startX)); - if (this.options.autoWidth && this.partVoices.length > 0) { - justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); - this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); - this.partStaves.forEach((part) => { - part.setWidth(this.options.width); - }); - } - else { - justifyWidth = this.options.noPadding - ? this.options.width - (startX - this.options.x) - : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - } - if (this.partVoices.length > 0) { - formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); - } - formatter.postFormat(); - for (let i = 0; i < this.options.formatIterations; i++) { - formatter.tune(options_details); - } - this.startX = startX; - this.debugNoteMetricsYs = debugNoteMetricsYs; - this.lastY = y; - this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); - } - /** Render the system. */ - draw() { - // Render debugging information, if requested. - const ctx = this.checkContext(); - if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); - } - this.setRendered(); - if (this.options.debugFormatter) { - _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); - } - this.debugNoteMetricsYs.forEach((d) => { - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - if (tickable.getStave() === d.stave) - _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); - }); - }); - }); - } -} - - -/***/ }), - -/***/ "./src/tables.ts": -/*!***********************!*\ - !*** ./src/tables.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tables": () => (/* binding */ Tables) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - -const RESOLUTION = 16384; -/** - * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. - * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. - */ -const durations = { - '1/2': RESOLUTION * 2, - 1: RESOLUTION / 1, - 2: RESOLUTION / 2, - 4: RESOLUTION / 4, - 8: RESOLUTION / 8, - 16: RESOLUTION / 16, - 32: RESOLUTION / 32, - 64: RESOLUTION / 64, - 128: RESOLUTION / 128, - 256: RESOLUTION / 256, -}; -const durationAliases = { - w: '1', - h: '2', - q: '4', - // This is the default duration used to render bars (BarNote). Bars no longer - // consume ticks, so this should be a no-op. - // TODO(0xfe): This needs to be cleaned up. - b: '256', -}; -const keySignatures = { - C: { num: 0 }, - Am: { num: 0 }, - F: { acc: 'b', num: 1 }, - Dm: { acc: 'b', num: 1 }, - Bb: { acc: 'b', num: 2 }, - Gm: { acc: 'b', num: 2 }, - Eb: { acc: 'b', num: 3 }, - Cm: { acc: 'b', num: 3 }, - Ab: { acc: 'b', num: 4 }, - Fm: { acc: 'b', num: 4 }, - Db: { acc: 'b', num: 5 }, - Bbm: { acc: 'b', num: 5 }, - Gb: { acc: 'b', num: 6 }, - Ebm: { acc: 'b', num: 6 }, - Cb: { acc: 'b', num: 7 }, - Abm: { acc: 'b', num: 7 }, - G: { acc: '#', num: 1 }, - Em: { acc: '#', num: 1 }, - D: { acc: '#', num: 2 }, - Bm: { acc: '#', num: 2 }, - A: { acc: '#', num: 3 }, - 'F#m': { acc: '#', num: 3 }, - E: { acc: '#', num: 4 }, - 'C#m': { acc: '#', num: 4 }, - B: { acc: '#', num: 5 }, - 'G#m': { acc: '#', num: 5 }, - 'F#': { acc: '#', num: 6 }, - 'D#m': { acc: '#', num: 6 }, - 'C#': { acc: '#', num: 7 }, - 'A#m': { acc: '#', num: 7 }, -}; -const clefs = { - treble: { line_shift: 0 }, - bass: { line_shift: 6 }, - tenor: { line_shift: 4 }, - alto: { line_shift: 3 }, - soprano: { line_shift: 1 }, - percussion: { line_shift: 0 }, - 'mezzo-soprano': { line_shift: 2 }, - 'baritone-c': { line_shift: 5 }, - 'baritone-f': { line_shift: 5 }, - subbass: { line_shift: 7 }, - french: { line_shift: -1 }, -}; -const notesInfo = { - C: { index: 0, int_val: 0 }, - CN: { index: 0, int_val: 0, accidental: 'n' }, - 'C#': { index: 0, int_val: 1, accidental: '#' }, - 'C##': { index: 0, int_val: 2, accidental: '##' }, - CB: { index: 0, int_val: 11, accidental: 'b' }, - CBB: { index: 0, int_val: 10, accidental: 'bb' }, - D: { index: 1, int_val: 2 }, - DN: { index: 1, int_val: 2, accidental: 'n' }, - 'D#': { index: 1, int_val: 3, accidental: '#' }, - 'D##': { index: 1, int_val: 4, accidental: '##' }, - DB: { index: 1, int_val: 1, accidental: 'b' }, - DBB: { index: 1, int_val: 0, accidental: 'bb' }, - E: { index: 2, int_val: 4 }, - EN: { index: 2, int_val: 4, accidental: 'n' }, - 'E#': { index: 2, int_val: 5, accidental: '#' }, - 'E##': { index: 2, int_val: 6, accidental: '##' }, - EB: { index: 2, int_val: 3, accidental: 'b' }, - EBB: { index: 2, int_val: 2, accidental: 'bb' }, - F: { index: 3, int_val: 5 }, - FN: { index: 3, int_val: 5, accidental: 'n' }, - 'F#': { index: 3, int_val: 6, accidental: '#' }, - 'F##': { index: 3, int_val: 7, accidental: '##' }, - FB: { index: 3, int_val: 4, accidental: 'b' }, - FBB: { index: 3, int_val: 3, accidental: 'bb' }, - G: { index: 4, int_val: 7 }, - GN: { index: 4, int_val: 7, accidental: 'n' }, - 'G#': { index: 4, int_val: 8, accidental: '#' }, - 'G##': { index: 4, int_val: 9, accidental: '##' }, - GB: { index: 4, int_val: 6, accidental: 'b' }, - GBB: { index: 4, int_val: 5, accidental: 'bb' }, - A: { index: 5, int_val: 9 }, - AN: { index: 5, int_val: 9, accidental: 'n' }, - 'A#': { index: 5, int_val: 10, accidental: '#' }, - 'A##': { index: 5, int_val: 11, accidental: '##' }, - AB: { index: 5, int_val: 8, accidental: 'b' }, - ABB: { index: 5, int_val: 7, accidental: 'bb' }, - B: { index: 6, int_val: 11 }, - BN: { index: 6, int_val: 11, accidental: 'n' }, - 'B#': { index: 6, int_val: 12, accidental: '#' }, - 'B##': { index: 6, int_val: 13, accidental: '##' }, - BB: { index: 6, int_val: 10, accidental: 'b' }, - BBB: { index: 6, int_val: 9, accidental: 'bb' }, - R: { index: 6, rest: true }, - X: { - index: 6, - accidental: '', - octave: 4, - code: 'noteheadXBlack', - shift_right: 5.5, - }, -}; -const validNoteTypes = { - n: { name: 'note' }, - r: { name: 'rest' }, - h: { name: 'harmonic' }, - m: { name: 'muted' }, - s: { name: 'slash' }, - g: { name: 'ghost' }, - d: { name: 'diamond' }, - x: { name: 'x' }, - ci: { name: 'circled' }, - cx: { name: 'circle x' }, - sf: { name: 'slashed' }, - sb: { name: 'slashed backward' }, - sq: { name: 'square' }, - tu: { name: 'triangle up' }, - td: { name: 'triangle down' }, -}; -const accidentals = { - '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, - '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, - b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, - bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, - n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, - '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, - '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, - db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, - d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, - '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, - '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, - '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, - bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, - bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, - o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, - k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, - bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, - '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 }, - ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, - afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, - accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, - accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlatAndFlat: { - code: 'accidentalNarrowReversedFlatAndFlat', - parenRightPaddingAdjustment: -1, - }, - accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, - accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, -}; -// Helps determine the layout of accidentals. -const accidentalColumns = { - 1: { - a: [1], - b: [1], - }, - 2: { - a: [1, 2], - }, - 3: { - a: [1, 3, 2], - b: [1, 2, 1], - second_on_bottom: [1, 2, 3], - }, - 4: { - a: [1, 3, 4, 2], - b: [1, 2, 3, 1], - spaced_out_tetrachord: [1, 2, 1, 2], - }, - 5: { - a: [1, 3, 5, 4, 2], - b: [1, 2, 4, 3, 1], - spaced_out_pentachord: [1, 2, 3, 2, 1], - very_spaced_out_pentachord: [1, 2, 1, 2, 1], - }, - 6: { - a: [1, 3, 5, 6, 4, 2], - b: [1, 2, 4, 5, 3, 1], - spaced_out_hexachord: [1, 3, 2, 1, 3, 2], - very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], - }, -}; -const articulations = { - 'a.': { code: 'augmentationDot', between_lines: true }, - av: { - aboveCode: 'articStaccatissimoAbove', - belowCode: 'articStaccatissimoBelow', - between_lines: true, - }, - 'a>': { - aboveCode: 'articAccentAbove', - belowCode: 'articAccentBelow', - between_lines: true, - }, - 'a-': { - aboveCode: 'articTenutoAbove', - belowCode: 'articTenutoBelow', - between_lines: true, - }, - 'a^': { - aboveCode: 'articMarcatoAbove', - belowCode: 'articMarcatoBelow', - between_lines: false, - }, - 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, - ao: { - aboveCode: 'pluckedSnapPizzicatoAbove', - belowCode: 'pluckedSnapPizzicatoBelow', - between_lines: false, - }, - ah: { code: 'stringsHarmonic', between_lines: false }, - 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, - 'a@a': { code: 'fermataAbove', between_lines: false }, - 'a@u': { code: 'fermataBelow', between_lines: false }, - 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, - 'a@as': { code: 'fermataShortAbove', between_lines: false }, - 'a@us': { code: 'fermataShortBelow', between_lines: false }, - 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, - 'a@al': { code: 'fermataLongAbove', between_lines: false }, - 'a@ul': { code: 'fermataLongBelow', between_lines: false }, - 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, - 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, - 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, - 'a|': { code: 'stringsUpBow', between_lines: false }, - am: { code: 'stringsDownBow', between_lines: false }, - 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked -}; -const ornaments = { - mordent: { code: 'ornamentShortTrill' }, - mordent_inverted: { code: 'ornamentMordent' }, - turn: { code: 'ornamentTurn' }, - turn_inverted: { code: 'ornamentTurnSlash' }, - tr: { code: 'ornamentTrill' }, - upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, - downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, - prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, - pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, - upmordent: { code: 'ornamentPrecompSlideTrillBach' }, - downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, - lineprall: { code: 'ornamentPrecompAppoggTrill' }, - prallprall: { code: 'ornamentTremblement' }, - scoop: { code: 'brassScoop' }, - doit: { code: 'brassDoitMedium' }, - fall: { code: 'brassFallLipShort' }, - doitLong: { code: 'brassLiftMedium' }, - fallLong: { code: 'brassFallRoughMedium' }, - bend: { code: 'brassBend' }, - plungerClosed: { code: 'brassMuteClosed' }, - plungerOpen: { code: 'brassMuteOpen' }, - flip: { code: 'brassFlip' }, - jazzTurn: { code: 'brassJazzTurn' }, - smear: { code: 'brassSmear' }, -}; -class Tables { - /** - * @returns the `Font` object at the head of the music font stack. - */ - static currentMusicFont() { - if (Tables.MUSIC_FONT_STACK.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); - } - else { - return Tables.MUSIC_FONT_STACK[0]; - } - } - static clefProperties(clef) { - if (!clef || !(clef in clefs)) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); - return clefs[clef]; - } - /** - * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). - * @param clef - * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). - * @returns properties for the specified note. - */ - static keyProperties(keyOctaveGlyph, clef = 'treble', params) { - let options = { octave_shift: 0, duration: '4' }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - const duration = Tables.sanitizeDuration(options.duration); - const pieces = keyOctaveGlyph.split('/'); - if (pieces.length < 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); - } - const key = pieces[0].toUpperCase(); - const value = notesInfo[key]; - if (!value) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); - if (value.octave) - pieces[1] = value.octave.toString(); - let octave = parseInt(pieces[1], 10); - // Octave_shift is the shift to compensate for clef 8va/8vb. - octave += -1 * options.octave_shift; - const baseIndex = octave * 7 - 4 * 7; - let line = (baseIndex + value.index) / 2; - line += Tables.clefProperties(clef).line_shift; - let stroke = 0; - if (line <= 0 && (line * 2) % 2 === 0) - stroke = 1; // stroke up - if (line >= 6 && (line * 2) % 2 === 0) - stroke = -1; // stroke down - // Integer value for note arithmetic. - const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; - // If the user specified a glyph, overwrite the glyph code. - const code = value.code; - const shift_right = value.shift_right; - let customNoteHeadProps = {}; - if (pieces.length > 2 && pieces[2]) { - const glyphName = pieces[2].toUpperCase(); - customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; - } - return Object.assign({ key, - octave, - line, - int_value, accidental: value.accidental, code, - stroke, - shift_right, displaced: false }, customNoteHeadProps); - } - static integerToNote(integer) { - if (typeof integer === 'undefined' || integer < 0 || integer > 11) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); - } - const table = { - 0: 'C', - 1: 'C#', - 2: 'D', - 3: 'D#', - 4: 'E', - 5: 'F', - 6: 'F#', - 7: 'G', - 8: 'G#', - 9: 'A', - 10: 'A#', - 11: 'B', - }; - const noteValue = table[integer]; - if (!noteValue) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); - } - return noteValue; - } - static tabToGlyphProps(fret, scale = 1.0) { - let glyph = undefined; - let width = 0; - let shift_y = 0; - if (fret.toUpperCase() === 'X') { - const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); - glyph = 'accidentalDoubleSharp'; - if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); - width = glyphMetrics.width; - shift_y = -glyphMetrics.height / 2; - } - else { - width = Tables.textWidth(fret); - } - return { - text: fret, - code: glyph, - getWidth: () => width * scale, - shift_y, - }; - } - // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. - // TODO: The actual width depends on the font family, size, weight, style. - static textWidth(text) { - return 7 * text.toString().length; - } - static articulationCodes(artic) { - return articulations[artic]; - } - static accidentalCodes(acc) { - return accidentals[acc]; - } - static ornamentCodes(acc) { - return ornaments[acc]; - } - static keySignature(spec) { - const keySpec = keySignatures[spec]; - if (!keySpec) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); - } - if (!keySpec.acc) { - return []; - } - const accidentalList = { - b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], - '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], - }; - const notes = accidentalList[keySpec.acc]; - const acc_list = []; - for (let i = 0; i < keySpec.num; ++i) { - const line = notes[i]; - acc_list.push({ type: keySpec.acc, line }); - } - return acc_list; - } - static getKeySignatures() { - return keySignatures; - } - static hasKeySignature(spec) { - return spec in keySignatures; - } - /** - * Convert duration aliases to the number based duration. - * If the input isn't an alias, simply return the input. - * @param duration - * @returns Example: 'q' -> '4', '8' -> '8' - */ - static sanitizeDuration(duration) { - const durationNumber = durationAliases[duration]; - if (durationNumber !== undefined) { - duration = durationNumber; - } - if (durations[duration] === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); - } - return duration; - } - /** Convert the `duration` to a fraction. */ - static durationToFraction(duration) { - return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); - } - /** Convert the `duration` to a number. */ - static durationToNumber(duration) { - return Tables.durationToFraction(duration).value(); - } - /* Convert the `duration` to total ticks. */ - static durationToTicks(duration) { - duration = Tables.sanitizeDuration(duration); - const ticks = durations[duration]; - if (ticks === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); - } - return ticks; - } - static codeNoteHead(type, duration) { - let code = ''; - switch (type) { - /* Diamond */ - case 'D0': - code = 'noteheadDiamondWhole'; - break; - case 'D1': - code = 'noteheadDiamondHalf'; - break; - case 'D2': - code = 'noteheadDiamondBlack'; - break; - case 'D3': - code = 'noteheadDiamondBlack'; - break; - /* Triangle */ - case 'T0': - code = 'noteheadTriangleUpWhole'; - break; - case 'T1': - code = 'noteheadTriangleUpHalf'; - break; - case 'T2': - code = 'noteheadTriangleUpBlack'; - break; - case 'T3': - code = 'noteheadTriangleUpBlack'; - break; - /* Cross */ - case 'X0': - code = 'noteheadXWhole'; - break; - case 'X1': - code = 'noteheadXHalf'; - break; - case 'X2': - code = 'noteheadXBlack'; - break; - case 'X3': - code = 'noteheadCircleX'; - break; - /* Square */ - case 'S1': - code = 'noteheadSquareWhite'; - break; - case 'S2': - code = 'noteheadSquareBlack'; - break; - /* Rectangle */ - case 'R1': - code = 'vexNoteHeadRectWhite'; // no smufl code - break; - case 'R2': - code = 'vexNoteHeadRectBlack'; // no smufl code - break; - case 'DO': - code = 'noteheadTriangleUpBlack'; - break; - case 'RE': - code = 'noteheadMoonBlack'; - break; - case 'MI': - code = 'noteheadDiamondBlack'; - break; - case 'FA': - code = 'noteheadTriangleLeftBlack'; - break; - case 'FAUP': - code = 'noteheadTriangleRightBlack'; - break; - case 'SO': - code = 'noteheadBlack'; - break; - case 'LA': - code = 'noteheadSquareBlack'; - break; - case 'TI': - code = 'noteheadTriangleRoundDownBlack'; - break; - case 'D': - case 'H': // left for backwards compatibility - switch (duration) { - case '1/2': - code = 'noteheadDiamondDoubleWhole'; - break; - case '1': - code = 'noteheadDiamondWhole'; - break; - case '2': - code = 'noteheadDiamondHalf'; - break; - default: - code = 'noteheadDiamondBlack'; - break; - } - break; - case 'N': - case 'G': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWhole'; - break; - case '1': - code = 'noteheadWhole'; - break; - case '2': - code = 'noteheadHalf'; - break; - default: - code = 'noteheadBlack'; - break; - } - break; - case 'M': // left for backwards compatibility - case 'X': - switch (duration) { - case '1/2': - code = 'noteheadXDoubleWhole'; - break; - case '1': - code = 'noteheadXWhole'; - break; - case '2': - code = 'noteheadXHalf'; - break; - default: - code = 'noteheadXBlack'; - break; - } - break; - case 'CX': - switch (duration) { - case '1/2': - code = 'noteheadCircleXDoubleWhole'; - break; - case '1': - code = 'noteheadCircleXWhole'; - break; - case '2': - code = 'noteheadCircleXHalf'; - break; - default: - code = 'noteheadCircleX'; - break; - } - break; - case 'CI': - switch (duration) { - case '1/2': - code = 'noteheadCircledDoubleWhole'; - break; - case '1': - code = 'noteheadCircledWhole'; - break; - case '2': - code = 'noteheadCircledHalf'; - break; - default: - code = 'noteheadCircledBlack'; - break; - } - break; - case 'SQ': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWholeSquare'; - break; - case '1': - code = 'noteheadSquareWhite'; - break; - case '2': - code = 'noteheadSquareWhite'; - break; - default: - code = 'noteheadSquareBlack'; - break; - } - break; - case 'TU': - switch (duration) { - case '1/2': - code = 'noteheadTriangleUpDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleUpWhole'; - break; - case '2': - code = 'noteheadTriangleUpHalf'; - break; - default: - code = 'noteheadTriangleUpBlack'; - break; - } - break; - case 'TD': - switch (duration) { - case '1/2': - code = 'noteheadTriangleDownDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleDownWhole'; - break; - case '2': - code = 'noteheadTriangleDownHalf'; - break; - default: - code = 'noteheadTriangleDownBlack'; - break; - } - break; - case 'SF': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole1'; - break; - case '1': - code = 'noteheadSlashedWhole1'; - break; - case '2': - code = 'noteheadSlashedHalf1'; - break; - default: - code = 'noteheadSlashedBlack1'; - } - break; - case 'SB': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole2'; - break; - case '1': - code = 'noteheadSlashedWhole2'; - break; - case '2': - code = 'noteheadSlashedHalf2'; - break; - default: - code = 'noteheadSlashedBlack2'; - } - break; - } - return code; - } - // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. - // The default type is a regular note ('n'). - static getGlyphProps(duration, type = 'n') { - duration = Tables.sanitizeDuration(duration); - // Lookup duration for default glyph head code - let code = durationCodes[duration]; - if (code === undefined) { - code = durationCodes['4']; - } - // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) - let glyphTypeProperties = code[type]; - // Try and get it from the custom list of note heads - const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); - if (codeNoteHead != '') - glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); - const code_head = glyphTypeProperties.code_head; - // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). - // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). - const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); - // Merge duration props for 'duration' with the note head properties. - return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); - } -} -Tables.SOFTMAX_FACTOR = 10; -Tables.STEM_WIDTH = 1.5; -Tables.STEM_HEIGHT = 35; -Tables.STAVE_LINE_THICKNESS = 1; -Tables.RENDER_PRECISION_PLACES = 3; -Tables.RESOLUTION = RESOLUTION; -/** - * Customize this by calling Flow.setMusicFont(...fontNames); - */ -Tables.MUSIC_FONT_STACK = []; -Tables.NOTATION_FONT_SCALE = 39; -Tables.TABLATURE_FONT_SCALE = 39; -Tables.SLASH_NOTEHEAD_WIDTH = 15; -Tables.STAVE_LINE_DISTANCE = 10; -// HACK: -// Since text origins are positioned at the baseline, we must -// compensate for the ascender of the text. Of course, 1 staff space is -// a very poor approximation. -// -// This will be deprecated in the future. This is a temporary solution until -// we have more robust text metrics. -Tables.TEXT_HEIGHT_OFFSET_HACK = 1; -Tables.accidentalMap = accidentals; -Tables.accidentalColumnsTable = accidentalColumns; -Tables.unicode = { - // ♯ accidental sharp - sharp: String.fromCharCode(0x266f), - // ♭ accidental flat - flat: String.fromCharCode(0x266d), - // ♮ accidental natural - natural: String.fromCharCode(0x266e), - // △ major seventh - triangle: String.fromCharCode(0x25b3), - // ø half-diminished - 'o-with-slash': String.fromCharCode(0x00f8), - // ° diminished - degrees: String.fromCharCode(0x00b0), - // ○ diminished - circle: String.fromCharCode(0x25cb), -}; -/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ -Tables.validTypes = validNoteTypes; -// Default time signature. -Tables.TIME4_4 = { - num_beats: 4, - beat_value: 4, - resolution: RESOLUTION, -}; -// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 -// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. -// For example, in durations has a 256 key, and sanitizeDuration() can return 256. -// The sanitizeDuration() bit may need to be removed by 0xfe. -const durationCodes = { - '1/2': { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Breve rest - code_head: 'restDoubleWhole', - rest: true, - position: 'B/5', - dot_shiftY: 0.5, - }, - s: { - // Breve note slash - - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 1: { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Whole rest - code_head: 'restWhole', - ledger_code_head: 'restWholeLegerLine', - rest: true, - position: 'D/5', - dot_shiftY: 0.5, - }, - s: { - // Whole note slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 2: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Half rest - code_head: 'restHalf', - ledger_code_head: 'restHalfLegerLine', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - }, - s: { - // Half note slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 4: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Quarter rest - code_head: 'restQuarter', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.5, - line_below: 1.5, - }, - s: { - // Quarter slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 8: { - common: { - code_head: '', - stem: true, - flag: true, - beam_count: 1, - stem_beam_extension: 0, - code_flag_upstem: 'flag8thUp', - code_flag_downstem: 'flag8thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Eighth rest - code_head: 'rest8th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 1.0, - }, - s: { - // Eighth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 16: { - common: { - code_head: '', - beam_count: 2, - stem_beam_extension: 0, - stem: true, - flag: true, - code_flag_upstem: 'flag16thUp', - code_flag_downstem: 'flag16thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Sixteenth rest - code_head: 'rest16th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 2.0, - }, - s: { - // Sixteenth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 32: { - common: { - code_head: '', - beam_count: 3, - stem_beam_extension: 7.5, - stem: true, - flag: true, - code_flag_upstem: 'flag32ndUp', - code_flag_downstem: 'flag32ndDown', - stem_up_extension: 9, - stem_down_extension: 9, - tabnote_stem_up_extension: 9, - tabnote_stem_down_extension: 9, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Thirty-second rest - code_head: 'rest32nd', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 2.0, - }, - s: { - // Thirty-second slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 64: { - common: { - code_head: '', - beam_count: 4, - stem_beam_extension: 15, - stem: true, - flag: true, - code_flag_upstem: 'flag64thUp', - code_flag_downstem: 'flag64thDown', - stem_up_extension: 13, - stem_down_extension: 13, - tabnote_stem_up_extension: 13, - tabnote_stem_down_extension: 13, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Sixty-fourth rest - code_head: 'rest64th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 3.0, - }, - s: { - // Sixty-fourth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 128: { - common: { - code_head: '', - beam_count: 5, - stem_beam_extension: 22.5, - stem: true, - flag: true, - code_flag_upstem: 'flag128thUp', - code_flag_downstem: 'flag128thDown', - stem_up_extension: 22, - stem_down_extension: 22, - tabnote_stem_up_extension: 22, - tabnote_stem_down_extension: 22, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Hundred-twenty-eight rest - code_head: 'rest128th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -2.5, - line_above: 3.0, - line_below: 3.0, - }, - s: { - // Hundred-twenty-eight slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, -}; - - -/***/ }), - -/***/ "./src/tabnote.ts": -/*!************************!*\ - !*** ./src/tabnote.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabNote": () => (/* binding */ TabNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// The file implements notes for Tablature notation. This consists of one or -// more fret positions, and can either be drawn with or without stems. -// -// See `tests/tabnote_tests.ts` for usage examples. - - - - - - - - -// Gets the unused strings grouped together if consecutive. -// -// Parameters: -// * num_lines - The number of lines -// * strings_used - An array of numbers representing which strings have fret positions -function getUnusedStringGroups(num_lines, strings_used) { - const stem_through = []; - let group = []; - for (let string = 1; string <= num_lines; string++) { - const is_used = strings_used.indexOf(string) > -1; - if (!is_used) { - group.push(string); - } - else { - stem_through.push(group); - group = []; - } - } - if (group.length > 0) - stem_through.push(group); - return stem_through; -} -// Gets groups of points that outline the partial stem lines -// between fret positions -// -// Parameters: -// * stem_Y - The `y` coordinate the stem is located on -// * unused_strings - An array of groups of unused strings -// * stave - The stave to use for reference -// * stem_direction - The direction of the stem -function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { - const up_stem = stem_direction !== 1; - const down_stem = stem_direction !== -1; - const line_spacing = stave.getSpacingBetweenLines(); - const total_lines = stave.getNumLines(); - const stem_lines = []; - unused_strings.forEach((strings) => { - const containsLastString = strings.indexOf(total_lines) > -1; - const containsFirstString = strings.indexOf(1) > -1; - if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { - return; - } - // If there's only one string in the group, push a duplicate value. - // We do this because we need 2 strings to convert into upper/lower y - // values. - if (strings.length === 1) { - strings.push(strings[0]); - } - const line_ys = []; - // Iterate through each group string and store it's y position - strings.forEach((string, index, strings) => { - const isTopBound = string === 1; - const isBottomBound = string === total_lines; - // Get the y value for the appropriate staff line, - // we adjust for a 0 index array, since string numbers are index 1 - let y = stave.getYForLine(string - 1); - // Unless the string is the first or last, add padding to each side - // of the line - if (index === 0 && !isTopBound) { - y -= line_spacing / 2 - 1; - } - else if (index === strings.length - 1 && !isBottomBound) { - y += line_spacing / 2 - 1; - } - // Store the y value - line_ys.push(y); - // Store a subsequent y value connecting this group to the main - // stem above/below the stave if it's the top/bottom string - if (stem_direction === 1 && isTopBound) { - line_ys.push(stem_y - 2); - } - else if (stem_direction === -1 && isBottomBound) { - line_ys.push(stem_y + 2); - } - }); - // Add the sorted y values to the - stem_lines.push(line_ys.sort((a, b) => a - b)); - }); - return stem_lines; -} -class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; - } - // Initialize the TabNote with a `noteStruct` full of properties - // and whether to `draw_stem` when rendering the note - constructor(noteStruct, draw_stem = false) { - super(noteStruct); - this.glyphPropsArr = []; - // Return the number of the greatest string, which is the string lowest on the display - this.greatestString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); - }; - // Return the number of the least string, which is the string highest on the display - this.leastString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); - }; - this.ghost = false; // Renders parenthesis around notes - // Note properties - // The fret positions in the note. An array of `{ str: X, fret: X }` - this.positions = noteStruct.positions || []; - // Render Options - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads and rests - glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, - // Flag to draw a stem - draw_stem, - // Flag to draw dot modifiers - draw_dots: draw_stem, - // Flag to extend the main stem through the stave and fret positions - draw_stem_through_stave: false, - // vertical shift from stave line - y_shift: 0, - // normal glyph scale - scale: 1.0, - // default tablature font - font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - this.buildStem(); - if (noteStruct.stem_direction) { - this.setStemDirection(noteStruct.stem_direction); - } - else { - this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); - } - // Renders parenthesis around notes - this.ghost = false; - this.updateWidth(); - } - reset() { - super.reset(); - if (this.stave) - this.setStave(this.stave); - return this; - } - // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. - // Often used for indicating frets that are being bent to - setGhost(ghost) { - this.ghost = ghost; - this.updateWidth(); - return this; - } - // Determine if the note has a stem - hasStem() { - if (this.render_options.draw_stem) - return true; - return false; - } - // Get the default stem extension for the note - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != null) { - return this.stem_extension_override; - } - if (glyphProps) { - return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? glyphProps.tabnote_stem_up_extension - : glyphProps.tabnote_stem_down_extension; - } - return 0; - } - // Calculate and store the width of the note - updateWidth() { - this.glyphPropsArr = []; - this.width = 0; - for (let i = 0; i < this.positions.length; ++i) { - let fret = this.positions[i].fret; - if (this.ghost) - fret = '(' + fret + ')'; - const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); - this.glyphPropsArr.push(glyphProps); - this.width = Math.max(glyphProps.getWidth(), this.width); - } - // For some reason we associate a notehead glyph with a TabNote, and this - // glyph is used for certain width calculations. Of course, this is totally - // incorrect since a notehead is a poor approximation for the dimensions of - // a fret number which can have multiple digits. As a result, we must - // overwrite getWidth() to return the correct width - this.glyphProps.getWidth = () => this.width; - } - // Set the `stave` to the note - setStave(stave) { - super.setStave(stave); - const ctx = stave.getContext(); - this.setContext(ctx); - // Calculate the fret number width based on font used - if (ctx) { - this.width = 0; - for (let i = 0; i < this.glyphPropsArr.length; ++i) { - const glyphProps = this.glyphPropsArr[i]; - const text = '' + glyphProps.text; - if (text.toUpperCase() !== 'X') { - ctx.save(); - ctx.setFont(this.render_options.font); - glyphProps.width = ctx.measureText(text).width; - ctx.restore(); - glyphProps.getWidth = () => glyphProps.width; - } - this.width = Math.max(glyphProps.getWidth(), this.width); - } - this.glyphProps.getWidth = () => this.width; - } - // we subtract 1 from `line` because getYForLine expects a 0-based index, - // while the position.str is a 1-based index - const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); - this.setYs(ys); - if (this.stem) { - this.stem.setYBounds(this.getStemY(), this.getStemY()); - } - return this; - } - // Get the fret positions for the note - getPositions() { - return this.positions; - } - // Get the default `x` and `y` coordinates for a modifier at a specific - // `position` at a fret position `index` - getModifierStartXY(position, index) { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - let x = 0; - if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { - x = -1 * 2; // FIXME: modifier padding, move to font file - } - else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { - x = this.width + 2; // FIXME: modifier padding, move to font file - } - else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { - const note_glyph_width = this.glyphProps.getWidth(); - x = note_glyph_width / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - // Get the default line for rest - getLineForRest() { - return Number(this.positions[0].str); - } - // Pre-render formatting - preFormat() { - if (this.preFormatted) - return; - if (this.modifierContext) - this.modifierContext.preFormat(); - // width is already set during init() - this.preFormatted = true; - } - // Get the x position for the stem - getStemX() { - return this.getCenterGlyphX(); - } - // Get the y position for the stem - getStemY() { - const num_lines = this.checkStave().getNumLines(); - // The decimal staff line amounts provide optimal spacing between the - // fret number and the stem - const stemUpLine = -0.5; - const stemDownLine = num_lines - 0.5; - const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; - return this.checkStave().getYForLine(stemStartLine); - } - // Get the stem extents for the tabnote - getStemExtents() { - return this.checkStem().getExtents(); - } - // Draw the fal onto the context - drawFlag() { - var _a; - const { beam, glyphProps, render_options: { draw_stem }, } = this; - const context = this.checkContext(); - const shouldDrawFlag = beam == undefined && draw_stem; - // Now it's the flag's turn. - if (glyphProps.flag && shouldDrawFlag) { - const flag_x = this.getStemX(); - const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN - ? // Down stems are below the note head and have flags on the right. - this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) - : // Up stems are above the note head and have flags on the right. - this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); - // Draw the Flag - //this.flag?.setOptions({ category: 'flag.tabStem' }); - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); - //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); - } - } - // Render the modifiers onto the context. - drawModifiers() { - this.modifiers.forEach((modifier) => { - // Only draw the dots if enabled. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { - return; - } - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - }); - } - // Render the stem extension through the fret positions - drawStemThrough() { - const stemX = this.getStemX(); - const stemY = this.getStemY(); - const ctx = this.checkContext(); - const drawStem = this.render_options.draw_stem; - const stemThrough = this.render_options.draw_stem_through_stave; - if (drawStem && stemThrough) { - const numLines = this.checkStave().getNumLines(); - const stringsUsed = this.positions.map((position) => Number(position.str)); - const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); - const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); - ctx.save(); - ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); - stemLines.forEach((bounds) => { - if (bounds.length === 0) - return; - ctx.beginPath(); - ctx.moveTo(stemX, bounds[0]); - ctx.lineTo(stemX, bounds[bounds.length - 1]); - ctx.stroke(); - ctx.closePath(); - }); - ctx.restore(); - } - } - // Render the fret positions onto the context - drawPositions() { - var _a; - const ctx = this.checkContext(); - const x = this.getAbsoluteX(); - const ys = this.ys; - for (let i = 0; i < this.positions.length; ++i) { - const y = ys[i] + this.render_options.y_shift; - const glyphProps = this.glyphPropsArr[i]; - // Center the fret text beneath the notation note head - const note_glyph_width = this.glyphProps.getWidth(); - const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; - // FIXME: Magic numbers. - ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); - if (glyphProps.code) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); - } - else { - ctx.save(); - ctx.setFont(this.render_options.font); - const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; - ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); - ctx.restore(); - } - } - } - // The main rendering function for the entire note. - draw() { - const ctx = this.checkContext(); - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); - } - this.setRendered(); - const render_stem = this.beam == undefined && this.render_options.draw_stem; - this.applyStyle(); - ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); - this.drawPositions(); - this.drawStemThrough(); - if (this.stem && render_stem) { - const stem_x = this.getStemX(); - this.stem.setNoteHeadXBounds(stem_x, stem_x); - this.stem.setContext(ctx).draw(); - } - this.drawFlag(); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(); - } -} - - -/***/ }), - -/***/ "./src/tabslide.ts": -/*!*************************!*\ - !*** ./src/tabslide.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - - - -class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; - } - static get SLIDE_UP() { - return 1; - } - static get SLIDE_DOWN() { - return -1; - } - static createSlideUp(notes) { - return new TabSlide(notes, TabSlide.SLIDE_UP); - } - static createSlideDown(notes) { - return new TabSlide(notes, TabSlide.SLIDE_DOWN); - } - /** - * @param notes is a struct of the form: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * @param notes.first_note the starting note of the slide - * @param notes.last_note the ending note of the slide - * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. - * @param notes.last_indices currently unused. we assume it's the same as first_indices. - * - * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN - */ - constructor(notes, direction) { - super(notes, 'sl.'); - // Determine the direction automatically if it is not provided. - if (!direction) { - let first_fret = notes.first_note.getPositions()[0].fret; - if (typeof first_fret === 'string') { - first_fret = parseInt(first_fret, 10); - } - let last_fret = notes.last_note.getPositions()[0].fret; - if (typeof last_fret === 'string') { - last_fret = parseInt(last_fret, 10); - } - // If either of the frets are 'X', parseInt() above will return NaN. - // Choose TabSlide.SLIDE_UP by default. - if (isNaN(first_fret) || isNaN(last_fret)) { - direction = TabSlide.SLIDE_UP; - } - else { - direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; - } - } - this.direction = direction; - this.render_options.cp1 = 11; - this.render_options.cp2 = 14; - this.render_options.y_shift = 0.5; - this.resetFont(); - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - const first_x_px = params.first_x_px; - const first_ys = params.first_ys; - const last_x_px = params.last_x_px; - const direction = params.direction; - if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); - } - // eslint-disable-next-line - const first_indices = this.notes.first_indices; - for (let i = 0; i < first_indices.length; ++i) { - const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; - if (isNaN(slide_y)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); - } - ctx.beginPath(); - ctx.moveTo(first_x_px, slide_y + 3 * direction); - ctx.lineTo(last_x_px, slide_y - 3 * direction); - ctx.closePath(); - ctx.stroke(); - } - this.setRendered(); - } -} -TabSlide.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 10, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/tabstave.ts": -/*!*************************!*\ - !*** ./src/tabstave.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabStave": () => (/* binding */ TabStave) -/* harmony export */ }); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - -class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; - } - constructor(x, y, width, options) { - const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); - super(x, y, width, tab_options); - } - getYForGlyphs() { - return this.getYForLine(2.5); - } - // Deprecated - addTabGlyph() { - this.addClef('tab'); - return this; - } -} - - -/***/ }), - -/***/ "./src/tabtie.ts": -/*!***********************!*\ - !*** ./src/tabtie.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabTie": () => (/* binding */ TabTie) -/* harmony export */ }); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - -class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; - } - static createHammeron(notes) { - return new TabTie(notes, 'H'); - } - static createPulloff(notes) { - return new TabTie(notes, 'P'); - } - /** - * @param notes is a struct that has: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes, text) { - super(notes, text); - this.render_options.cp1 = 9; - this.render_options.cp2 = 11; - this.render_options.y_shift = 3; - this.direction = -1; // Tab tie's are always face up. - } -} - - -/***/ }), - -/***/ "./src/textbracket.ts": -/*!****************************!*\ - !*** ./src/textbracket.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// -// This file implements `TextBrackets` which extend between two notes. -// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created -// using this class. - - - - - - -// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (TextBracket.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); -} -var TextBracketPosition; -(function (TextBracketPosition) { - TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; - TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; -})(TextBracketPosition || (TextBracketPosition = {})); -class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; - } - static get Position() { - return TextBracketPosition; - } - static get PositionString() { - return { - top: TextBracketPosition.TOP, - bottom: TextBracketPosition.BOTTOM, - }; - } - /** - * @deprecated Use `TextBracket.Position` instead. - */ - static get Positions() { - L('Positions is deprecated, use TextBracketPosition instead.'); - return TextBracketPosition; - } - /** - * @deprecated Use `TextBracket.PositionString` instead. - */ - static get PositionsString() { - L('PositionsString is deprecated, use PositionString instead.'); - return TextBracket.PositionString; - } - constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { - super(); - this.start = start; - this.stop = stop; - this.text = text; - this.superscript = superscript; - this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; - this.line = 1; - this.resetFont(); - this.render_options = { - dashed: true, - dash: [5], - color: 'black', - line_width: 1, - show_bracket: true, - bracket_height: 8, - // In the BOTTOM position, the bracket line can extend - // under the superscript. - underline_superscript: true, - }; - } - /** - * Apply the text backet styling to the provided context. - * @param ctx - * @returns this - */ - applyStyle(ctx) { - ctx.setFont(this.font); - const options = this.render_options; - ctx.setStrokeStyle(options.color); - ctx.setFillStyle(options.color); - ctx.setLineWidth(options.line_width); - return this; - } - // Set whether the bracket line should be `dashed`. You can also - // optionally set the `dash` pattern by passing in an array of numbers - setDashed(dashed, dash) { - this.render_options.dashed = dashed; - if (dash) - this.render_options.dash = dash; - return this; - } - // Set the rendering `context` for the octave bracket - setLine(line) { - this.line = line; - return this; - } - // Draw the octave bracket on the rendering context - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let y = 0; - switch (this.position) { - case TextBracketPosition.TOP: - y = this.start.checkStave().getYForTopText(this.line); - break; - case TextBracketPosition.BOTTOM: - y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); - } - // Get the preliminary start and stop coordintates for the bracket - const start = { x: this.start.getAbsoluteX(), y }; - const stop = { x: this.stop.getAbsoluteX(), y }; - L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); - const bracket_height = this.render_options.bracket_height * this.position; - ctx.save(); - this.applyStyle(ctx); - // Draw text - ctx.fillText(this.text, start.x, start.y); - // Get the width and height for the octave number - const main_measure = ctx.measureText(this.text); - const main_width = main_measure.width; - const main_height = main_measure.height; - // Calculate the y position for the super script - const super_y = start.y - main_height / 2.5; - // We called this.resetFont() in the constructor, so we know this.textFont is available. - // eslint-disable-next-line - const { family, size, weight, style } = this.textFont; - // To draw the superscript, we scale the font size by 1/1.4. - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, start.x + main_width + 1, super_y); - // Determine width and height of the superscript - const super_measure = ctx.measureText(this.superscript); - const super_width = super_measure.width; - const super_height = super_measure.height; - // Setup initial coordinates for the bracket line - let start_x = start.x; - let line_y = super_y; - const end_x = stop.x + this.stop.getGlyphProps().getWidth(); - // Adjust x and y coordinates based on position - if (this.position === TextBracketPosition.TOP) { - start_x += main_width + super_width + 5; - line_y -= super_height / 2.7; - } - else if (this.position === TextBracketPosition.BOTTOM) { - line_y += super_height / 2.7; - start_x += main_width + 2; - if (!this.render_options.underline_superscript) { - start_x += super_width; - } - } - if (this.render_options.dashed) { - // Main line - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); - // Ending Bracket - if (this.render_options.show_bracket) { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); - } - } - else { - ctx.beginPath(); - ctx.moveTo(start_x, line_y); - // Main line - ctx.lineTo(end_x, line_y); - if (this.render_options.show_bracket) { - // Ending bracket - ctx.lineTo(end_x, line_y + bracket_height); - } - ctx.stroke(); - ctx.closePath(); - } - ctx.restore(); - } -} -TextBracket.DEBUG = false; -TextBracket.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 15, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/textdynamics.ts": -/*!*****************************!*\ - !*** ./src/textdynamics.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (TextDynamics.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.TextDynamics', args); -} -/** - * `TextDynamics` renders traditional - * text dynamics markings, **ie: p, f, sfz, rfz, ppp** - * - * You can render any dynamics string that contains a combination of - * the following letters: P, M, F, Z, R, S - */ -class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TextDynamics; - } - /** The glyph data for each dynamics letter. */ - static get GLYPHS() { - return { - f: { - code: 'dynamicForte', - width: 12, - }, - p: { - code: 'dynamicPiano', - width: 14, - }, - m: { - code: 'dynamicMezzo', - width: 17, - }, - s: { - code: 'dynamicSforzando', - width: 10, - }, - z: { - code: 'dynamicZ', - width: 12, - }, - r: { - code: 'dynamicRinforzando', - width: 12, - }, - }; - } - /** - * Create the dynamics marking. - * - * A `TextDynamics` object inherits from `Note` so that it can be formatted - * within a `Voice`. - * - * @param noteStruct an object that contains a `duration` property and a - * `sequence` of letters that represents the letters to render. - */ - constructor(noteStruct) { - super(noteStruct); - this.sequence = (noteStruct.text || '').toLowerCase(); - this.line = noteStruct.line || 0; - this.glyphs = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 }); - L('New Dynamics Text: ', this.sequence); - } - /** Set the Stave line on which the note should be placed. */ - setLine(line) { - this.line = line; - return this; - } - /** Preformat the dynamics text. */ - preFormat() { - let total_width = 0; - // length of this.glyphs must be <= - // length of this.sequence, so if we're formatted before - // create new glyphs. - this.glyphs = []; - // Iterate through each letter - this.sequence.split('').forEach((letter) => { - // Get the glyph data for the letter - const glyph_data = TextDynamics.GLYPHS[letter]; - if (!glyph_data) - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('Invalid dynamics character: ' + letter); - const size = (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.render_options.glyph_font_size); - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); - // Add the glyph - this.glyphs.push(glyph); - total_width += glyph_data.width; - }); - // Store the width of the text - this.setWidth(total_width); - this.preFormatted = true; - return this; - } - /** Draw the dynamics text on the rendering context. */ - draw() { - this.setRendered(); - const x = this.getAbsoluteX(); - const y = this.checkStave().getYForLine(this.line + -3); - L('Rendering Dynamics: ', this.sequence); - let letter_x = x; - this.glyphs.forEach((glyph, index) => { - const current_letter = this.sequence[index]; - glyph.render(this.checkContext(), letter_x, y); - letter_x += TextDynamics.GLYPHS[current_letter].width; - }); - } -} -/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ -TextDynamics.DEBUG = false; - - -/***/ }), - -/***/ "./src/textformatter.ts": -/*!******************************!*\ - !*** ./src/textformatter.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - -// eslint-disable-next-line -function L(...args) { - if (TextFormatter.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); -} -/** - * Text widths are stored in a cache, so we don't have to recompute widths - * for the same font + string combination. - * - * The cache is first keyed by the font information. The key is of the form: - * `${family}-${size}-${weight}-${style}` - * The second level key is the specific text to be measured. - * - * The stored value is the measured width in `em` units. - * textWidth == textWidthCache[cacheKey][textToMeasure] - */ -const textWidthCache = {}; -const textHeightCache = {}; -/** - * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. - * The metrics for those fonts will be made available to the application. - */ -const registry = {}; -class TextFormatter { - /** - * Return all registered font families. - */ - static getFontFamilies() { - const registeredFonts = []; - for (const fontFamily in registry) { - const formatterInfo = registry[fontFamily]; - registeredFonts.push(Object.assign({}, formatterInfo)); - } - return registeredFonts; - } - /** - * Call `TextFormatter.registerInfo(info)` to register font information before using this method. - * - * This method creates a formatter for the font that most closely matches the requested font. - * We compare font family, bold, and italic attributes. - * This method will return a fallback formatter if there are no matches. - */ - static create(requestedFont = {}) { - L('create: ', requestedFont); - if (!requestedFont.family) { - requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; - } - // TODO: One potential (small) optimization is to cache the TextFormatter object - // returned for each font info. We would probably want to clear the cache if - // the registry is ever updated. - const candidates = []; - // The incoming font family is a string of comma-separated font family names. - // (e.g., `PetalumaScript, Arial, sans-serif`). - const requestedFamilies = requestedFont.family.split(/\s*,\s*/); - for (const requestedFamily of requestedFamilies) { - for (const fontFamily in registry) { - // Support cases where the registry contains 'Roboto Slab Medium', - // but the requestedFont.family is 'Roboto Slab'. - if (fontFamily.startsWith(requestedFamily)) { - candidates.push(registry[fontFamily]); - } - } - if (candidates.length > 0) { - break; - } - } - let formatter; - if (candidates.length === 0) { - // No match, so return a fallback text formatter. - formatter = new TextFormatter(Object.values(registry)[0]); - } - else if (candidates.length === 1) { - formatter = new TextFormatter(candidates[0]); - } - else { - const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); - const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); - const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); - if (perfectMatch) { - formatter = new TextFormatter(perfectMatch); - } - else { - const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); - if (partialMatch) { - formatter = new TextFormatter(partialMatch); - } - else { - formatter = new TextFormatter(candidates[0]); - } - } - } - const fontSize = requestedFont.size; - if (typeof fontSize !== 'undefined') { - const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); - formatter.setFontSize(fontSizeInPt); - } - return formatter; - } - /** - * @param fontFamily used as a key to the font registry. - * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` - */ - static getInfo(fontFamily) { - return registry[fontFamily]; - } - /** - * Apps may register their own fonts and metrics, and those metrics - * will be available to the app for formatting. - * - * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. - * @param info - * @param overwrite - */ - static registerInfo(info, overwrite = false) { - L('registerInfo: ', info, overwrite); - const fontFamily = info.family; - const currFontInfo = registry[fontFamily]; - if (currFontInfo === undefined || overwrite) { - registry[fontFamily] = info; - } - } - /** - * Use `TextFormatter.create(...)` to build an instance from information previously - * registered via `TextFormatter.registerInfo(info)`. - */ - constructor(formatterInfo) { - /** Font family. */ - this.family = ''; - /** Specified in `pt` units. */ - this.size = 14; - /** Font metrics are extracted at 1000 upem (units per em). */ - this.resolution = 1000; - /** - * For text formatting, we do not require glyph outlines, but instead rely on glyph - * bounding box metrics such as: - * ``` - * { - * x_min: 48, - * x_max: 235, - * y_min: -17, - * y_max: 734, - * ha: 751, - * leftSideBearing: 48, - * advanceWidth: 286, - * } - * ``` - */ - this.glyphs = {}; - this.serifs = false; - this.monospaced = false; - this.italic = false; - this.bold = false; - this.superscriptOffset = 0; - this.subscriptOffset = 0; - this.maxSizeGlyph = '@'; - // This is an internal key used to index the `textWidthCache`. - this.cacheKey = ''; - this.updateParams(formatterInfo); - } - get localHeightCache() { - var _a; - if (textHeightCache[this.cacheKey] === undefined) { - textHeightCache[this.cacheKey] = {}; - } - return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; - } - updateParams(params) { - if (params.family) - this.family = params.family; - if (params.resolution) - this.resolution = params.resolution; - if (params.glyphs) - this.glyphs = params.glyphs; - if (params.serifs) - this.serifs = params.serifs; - if (params.monospaced) - this.monospaced = params.monospaced; - if (params.italic) - this.italic = params.italic; - if (params.bold) - this.bold = params.bold; - if (params.maxSizeGlyph) - this.maxSizeGlyph = params.maxSizeGlyph; - if (params.superscriptOffset) - this.superscriptOffset = params.superscriptOffset; - if (params.subscriptOffset) - this.subscriptOffset = params.subscriptOffset; - this.updateCacheKey(); - } - /** Create a hash with the current font data, so we can cache computed widths. */ - updateCacheKey() { - const family = this.family.replace(/\s+/g, '_'); - const size = this.size; - const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; - const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; - // Use the same key format as SVGContext. - this.cacheKey = `${family}%${size}%${weight}%${style}`; - } - /** - * The glyphs table is indexed by the character (e.g., 'C', '@'). - * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. - */ - getGlyphMetrics(character) { - if (this.glyphs[character]) { - return this.glyphs[character]; - } - else { - return this.glyphs[this.maxSizeGlyph]; - } - } - get maxHeight() { - const metrics = this.getGlyphMetrics(this.maxSizeGlyph); - return (metrics.ha / this.resolution) * this.fontSizeInPixels; - } - /** - * Retrieve the character's advanceWidth as a fraction of an `em` unit. - * For the space character ' ' as defined in the: - * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. - * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. - */ - getWidthForCharacterInEm(c) { - var _a; - const metrics = this.getGlyphMetrics(c); - if (!metrics) { - // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. - return 0.65; - } - else { - const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; - return advanceWidth / this.resolution; - } - } - /** - * Retrieve the character's y bounds (ymin, ymax) and height. - */ - getYForCharacterInPx(c) { - const metrics = this.getGlyphMetrics(c); - const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - if (!metrics) { - return rv; - } - else { - if (typeof metrics.y_min === 'number') { - rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; - } - if (typeof metrics.y_max === 'number') { - rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; - } - rv.height = rv.yMax - rv.yMin; - return rv; - } - } - getYForStringInPx(str) { - const entry = this.localHeightCache; - const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - const cache = entry[str]; - if (cache !== undefined) { - return cache; - } - for (let i = 0; i < str.length; ++i) { - const curY = this.getYForCharacterInPx(str[i]); - extent.yMin = Math.min(extent.yMin, curY.yMin); - extent.yMax = Math.max(extent.yMax, curY.yMax); - extent.height = extent.yMax - extent.yMin; - } - entry[str] = extent; - return extent; - } - /** - * Retrieve the total width of `text` in `em` units. - */ - getWidthForTextInEm(text) { - const key = this.cacheKey; - // Get the cache for this specific font family, size, weight, style combination. - // The cache contains previously computed widths for different `text` strings. - let cachedWidths = textWidthCache[key]; - if (cachedWidths === undefined) { - cachedWidths = {}; - textWidthCache[key] = cachedWidths; - } - let width = cachedWidths[text]; - if (width === undefined) { - width = 0; - for (let i = 0; i < text.length; ++i) { - width += this.getWidthForCharacterInEm(text[i]); - } - cachedWidths[text] = width; - } - return width; - } - /** The width of the text (in `em`) is scaled by the font size (in `px`). */ - getWidthForTextInPx(text) { - return this.getWidthForTextInEm(text) * this.fontSizeInPixels; - } - /** - * @param size in pt. - */ - setFontSize(size) { - this.size = size; - // The width cache key depends on the current font size. - this.updateCacheKey(); - return this; - } - /** `this.size` is specified in points. Convert to pixels. */ - get fontSizeInPixels() { - return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; - } - getResolution() { - return this.resolution; - } -} -/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ -TextFormatter.DEBUG = false; - - -/***/ }), - -/***/ "./src/textnote.ts": -/*!*************************!*\ - !*** ./src/textnote.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), -/* harmony export */ "TextNote": () => (/* binding */ TextNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var TextJustification; -(function (TextJustification) { - TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; - TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; - TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; -})(TextJustification || (TextJustification = {})); -/** - * `TextNote` is a notation element that is positioned in time. Generally - * meant for objects that sit above/below the staff and inline with each other. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - * Examples of this would be such as dynamics, lyrics, chord changes, etc. - */ -class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextNote; - } - /** Glyph data. */ - static get GLYPHS() { - return { - segno: { - code: 'segno', - }, - tr: { - code: 'ornamentTrill', - }, - mordent: { - code: 'ornamentMordent', - }, - mordent_upper: { - code: 'ornamentShortTrill', - }, - mordent_lower: { - code: 'ornamentMordent', - }, - f: { - code: 'dynamicForte', - }, - p: { - code: 'dynamicPiano', - }, - m: { - code: 'dynamicMezzo', - }, - s: { - code: 'dynamicSforzando', - }, - z: { - code: 'dynamicZ', - }, - coda: { - code: 'coda', - }, - pedal_open: { - code: 'keyboardPedalPed', - }, - pedal_close: { - code: 'keyboardPedalUp', - }, - caesura_straight: { - code: 'caesura', - }, - caesura_curved: { - code: 'caesuraCurved', - }, - breath: { - code: 'breathMarkComma', - }, - tick: { - code: 'breathMarkTick', - }, - turn: { - code: 'ornamentTurn', - }, - turn_inverted: { - code: 'ornamentTurnSlash', - }, - }; - } - constructor(noteStruct) { - super(noteStruct); - this.text = noteStruct.text || ''; - this.superscript = noteStruct.superscript; - this.subscript = noteStruct.subscript; - this.setFont(noteStruct.font); - this.line = noteStruct.line || 0; - this.smooth = noteStruct.smooth || false; - this.ignore_ticks = noteStruct.ignore_ticks || false; - this.justification = TextJustification.LEFT; - // Determine and set initial note width. Note that the text width is - // an approximation and isn't very accurate. The only way to accurately - // measure the length of text is with `CanvasRenderingContext2D.measureText()`. - if (noteStruct.glyph) { - const struct = TextNote.GLYPHS[noteStruct.glyph]; - if (!struct) - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, 40, { category: 'textNote' }); - this.setWidth(this.glyph.getMetrics().width); - } - else { - this.glyph = undefined; - } - } - /** Set the horizontal justification of the TextNote. */ - setJustification(just) { - this.justification = just; - return this; - } - /** Set the Stave line on which the note should be placed. */ - setLine(line) { - this.line = line; - return this; - } - /** Return the Stave line on which the TextNote is placed. */ - getLine() { - return this.line; - } - /** Return the unformatted text of this TextNote. */ - getText() { - return this.text; - } - /** Pre-render formatting. */ - preFormat() { - if (this.preFormatted) - return; - const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); - if (this.smooth) { - this.setWidth(0); - } - else { - if (this.glyph) { - // Width already set. - } - else { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - this.setWidth(ctx.measureText(this.text).width); - } - } - if (this.justification === TextJustification.CENTER) { - this.leftDisplacedHeadPx = this.width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - this.leftDisplacedHeadPx = this.width; - } - // We reposition to the center of the note head - this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; - this.preFormatted = true; - } - /** - * Renders the TextNote. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - */ - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); - this.setRendered(); - // Reposition to center of note head - let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; - // Align based on tick-context width. - const width = this.getWidth(); - if (this.justification === TextJustification.CENTER) { - x -= width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - x -= width; - } - let y; - if (this.glyph) { - y = stave.getYForLine(this.line + -3); - this.glyph.render(ctx, x, y); - } - else { - y = stave.getYForLine(this.line + -3); - this.applyStyle(ctx); - ctx.setFont(this.textFont); - ctx.fillText(this.text, x, y); - const height = ctx.measureText(this.text).height; - // We called this.setFont(...) in the constructor, so we know this.textFont is available. - // eslint-disable-next-line - const { family, size, weight, style } = this.textFont; - // Scale the font size by 1/1.3. - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); - if (this.superscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); - } - if (this.subscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); - } - this.restoreStyle(ctx); - } - } -} -TextNote.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; -TextNote.Justification = TextJustification; - - -/***/ }), - -/***/ "./src/tickable.ts": -/*!*************************!*\ - !*** ./src/tickable.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tickable": () => (/* binding */ Tickable) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -/** - * Tickable represents a element that sit on a score and - * has a duration, i.e., Tickables occupy space in the musical rendering dimension. - */ -class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; - } - constructor() { - super(); - this._preFormatted = false; - this._postFormatted = false; - // These properties represent the duration of - // this tickable element. - this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks - this.intrinsicTicks = 0; // Floating point value of ticks - this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); - // Formatter metrics - this.width = 0; - this.x_shift = 0; // Shift from tick context - this.modifiers = []; - this.tupletStack = []; - this.align_center = false; - this.center_x_shift = 0; // Shift from tick context if center aligned - // This flag tells the formatter to ignore this tickable during - // formatting and justification. It is set by tickables such as BarNote. - this.ignore_ticks = false; - // This is a space for an external formatting class or function to maintain - // metrics. - this.formatterMetrics = { - // The freedom of a tickable is the distance it can move without colliding - // with neighboring elements. A formatter can set these values during its - // formatting pass, which a different formatter can then use to fine tune. - freedom: { left: 0, right: 0 }, - // The simplified rational duration of this tick as a string. It can be - // used as an index to a map or hashtable. - duration: '', - // The number of formatting iterations undergone. - iterations: 0, - // The space in pixels allocated by this formatter, along with the mean space - // for tickables of this duration, and the deviation from the mean. - space: { - used: 0, - mean: 0, - deviation: 0, - }, - }; - } - /** Reset the Tickable, this function will be overloaded. */ - reset() { - return this; - } - /** Return the ticks. */ - getTicks() { - return this.ticks; - } - /** Check if it ignores the ticks. */ - shouldIgnoreTicks() { - return this.ignore_ticks; - } - /** Ignore the ticks. */ - setIgnoreTicks(flag) { - this.ignore_ticks = flag; - return this; - } - /** Set width of note. Used by the formatter for positioning. */ - setWidth(width) { - this.width = width; - } - /** Get width of note. Used by the formatter for positioning. */ - getWidth() { - if (!this._preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); - } - return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); - } - /** Displace note by `x` pixels. Used by the formatter. */ - setXShift(x) { - this.x_shift = x; - return this; - } - /** Get the `x` displaced pixels of the note. */ - getXShift() { - return this.x_shift; - } - /** Get `x` position of this tick context. */ - getX() { - const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); - return tickContext.getX() + this.x_shift; - } - /** Return the formatterMetrics. */ - getFormatterMetrics() { - return this.formatterMetrics; - } - /** Return the center `x` shift. */ - getCenterXShift() { - if (this.isCenterAligned()) { - return this.center_x_shift; - } - return 0; - } - /** Set the center `x` shift. */ - setCenterXShift(centerXShift) { - this.center_x_shift = centerXShift; - return this; - } - // Check if tickable is center aligned. */ - isCenterAligned() { - return this.align_center; - } - // Set/unset center alignment. */ - setCenterAlignment(align_center) { - this.align_center = align_center; - return this; - } - /** - * Return the associated voice. Every tickable must be associated with a voice. - * This allows formatters and preFormatter to associate them with the right modifierContexts. - */ - getVoice() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); - } - /** Set the associated voice. */ - setVoice(voice) { - this.voice = voice; - } - /** Get the tuplet. */ - getTuplet() { - return this.tuplet; - } - /** Return a list of Tuplets. */ - getTupletStack() { - return this.tupletStack; - } - /** - * Reset the specific Tuplet (if this is not provided, all tuplets are reset). - * Remove any prior tuplets from the tick calculation and - * reset the intrinsic tick value. - */ - resetTuplet(tuplet) { - let noteCount; - let notesOccupied; - if (tuplet) { - const i = this.tupletStack.indexOf(tuplet); - if (i !== -1) { - this.tupletStack.splice(i, 1); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - // Revert old multiplier by inverting numerator & denom.: - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - while (this.tupletStack.length) { - tuplet = this.tupletStack.pop(); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - // Revert old multiplier by inverting numerator & denom.: - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - /** Attach to new tuplet. */ - setTuplet(tuplet) { - if (tuplet) { - this.tupletStack.push(tuplet); - const noteCount = tuplet.getNoteCount(); - const notesOccupied = tuplet.getNotesOccupied(); - this.applyTickMultiplier(notesOccupied, noteCount); - } - this.tuplet = tuplet; - return this; - } - /** - * Add self to the provided ModifierContext `mc`. - * If this tickable has modifiers, set modifierContext. - * @returns this - */ - addToModifierContext(mc) { - this.modifierContext = mc; - for (let i = 0; i < this.modifiers.length; ++i) { - this.modifierContext.addMember(this.modifiers[i]); - } - this.modifierContext.addMember(this); - this._preFormatted = false; - return this; - } - /** - * Optional, if tickable has modifiers, associate a Modifier. - * @param mod the modifier - */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - addModifier(modifier, index = 0) { - this.modifiers.push(modifier); - this._preFormatted = false; - return this; - } - /** Get the list of associated modifiers. */ - getModifiers() { - return this.modifiers; - } - /** Set the Tick Context. */ - setTickContext(tc) { - this.tickContext = tc; - this._preFormatted = false; - } - checkTickContext(message = 'Tickable has no tick context.') { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); - } - /** Preformat the Tickable. */ - preFormat() { - if (this._preFormatted) - return; - this.width = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - this.width += this.modifierContext.getWidth(); - } - } - /** Set preformatted status. */ - set preFormatted(value) { - this._preFormatted = value; - } - get preFormatted() { - return this._preFormatted; - } - /** Postformat the Tickable. */ - postFormat() { - if (this._postFormatted) - return this; - this._postFormatted = true; - return this; - } - /** Set postformatted status. */ - set postFormatted(value) { - this._postFormatted = value; - } - get postFormatted() { - return this._postFormatted; - } - /** Return the intrinsic ticks. */ - getIntrinsicTicks() { - return this.intrinsicTicks; - } - /** Set the intrinsic ticks. */ - setIntrinsicTicks(intrinsicTicks) { - this.intrinsicTicks = intrinsicTicks; - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - /** Get the tick multiplier. */ - getTickMultiplier() { - return this.tickMultiplier; - } - /** Apply a tick multiplier. */ - applyTickMultiplier(numerator, denominator) { - this.tickMultiplier.multiply(numerator, denominator); - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - /** Set the duration. */ - setDuration(duration) { - const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); - this.ticks = this.tickMultiplier.clone().multiply(ticks); - this.intrinsicTicks = this.ticks.value(); - } - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - return tickContext.getX(); - } - /** Attach this note to a modifier context. */ - setModifierContext(mc) { - this.modifierContext = mc; - return this; - } - /** Get `ModifierContext`. */ - getModifierContext() { - return this.modifierContext; - } - /** Check and get `ModifierContext`. */ - checkModifierContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); - } -} - - -/***/ }), - -/***/ "./src/tickcontext.ts": -/*!****************************!*\ - !*** ./src/tickcontext.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TickContext": () => (/* binding */ TickContext) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// A formatter for abstract tickable objects, such as notes, chords, -// tabs, etc. - - -/** - * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. - */ -class TickContext { - static getNextContext(tContext) { - const contexts = tContext.tContexts; - const index = contexts.indexOf(tContext); - if (index + 1 < contexts.length) - return contexts[index + 1]; - } - constructor(options) { - this.preFormatted = false; - this.postFormatted = false; - this.tickID = options && options.tickID ? options.tickID : 0; - this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - this.maxTickable = undefined; // Biggest tickable - this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks - this.minTickable = undefined; - this.padding = 1; // padding on each side (width += padding * 2) - this.x = 0; - this.xBase = 0; // base x position without xOffset - this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) - this.tickables = []; // Notes, tabs, chords, lyrics. - this.tickablesByVoice = {}; // Tickables indexed by voice number - // Formatting metrics - this.notePx = 0; // width of widest note in this context - this.glyphPx = 0; // width of glyph (note head) - this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes - this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes - this.modLeftPx = 0; // Left modifier pixels - this.modRightPx = 0; // Right modifier pixels - this.totalLeftPx = 0; // Total left pixels - this.totalRightPx = 0; // Total right pixels - this.tContexts = []; // Parent array of tick contexts - this.width = 0; - this.formatterMetrics = { - // The freedom of a tickcontext is the distance it can move without colliding - // with neighboring elements. A formatter can set these values during its - // formatting pass, which a different formatter can then use to fine tune. - freedom: { left: 0, right: 0 }, - }; - } - getTickID() { - return this.tickID; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - this.xBase = x; - this.xOffset = 0; - return this; - } - getXBase() { - return this.xBase; - } // use of xBase and xOffset is optional, avoids offset creep - setXBase(xBase) { - this.xBase = xBase; - this.x = xBase + this.xOffset; - } - getXOffset() { - return this.xOffset; - } - setXOffset(xOffset) { - this.xOffset = xOffset; - this.x = this.xBase + xOffset; - } - getWidth() { - return this.width + this.padding * 2; - } - setPadding(padding) { - this.padding = padding; - return this; - } - getMaxTicks() { - return this.maxTicks; - } - getMinTicks() { - return this.minTicks; - } - getMaxTickable() { - return this.maxTickable; - } - getMinTickable() { - return this.minTickable; - } - getTickables() { - return this.tickables; - } - /** - * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). - * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 - * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. - */ - getTickableForVoice(voiceIndex) { - return this.tickablesByVoice[voiceIndex]; - } - getTickablesByVoice() { - return this.tickablesByVoice; - } - getCenterAlignedTickables() { - return this.tickables.filter((tickable) => tickable.isCenterAligned()); - } - /** Gets widths context, note and left/right modifiers for formatting. */ - getMetrics() { - const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; - return { - width, - glyphPx, - notePx, - leftDisplacedHeadPx, - rightDisplacedHeadPx, - modLeftPx, - modRightPx, - totalLeftPx, - totalRightPx, - }; - } - getCurrentTick() { - return this.currentTick; - } - setCurrentTick(tick) { - this.currentTick = tick; - this.preFormatted = false; - } - addTickable(tickable, voiceIndex) { - if (!tickable) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); - } - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - if (ticks.greaterThan(this.maxTicks)) { - this.maxTicks = ticks.clone(); - this.maxTickable = tickable; - } - if (this.minTicks == null) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - else if (ticks.lessThan(this.minTicks)) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - } - tickable.setTickContext(this); - this.tickables.push(tickable); - this.tickablesByVoice[voiceIndex || 0] = tickable; - this.preFormatted = false; - return this; - } - preFormat() { - if (this.preFormatted) - return this; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - tickable.preFormat(); - const metrics = tickable.getMetrics(); - // Maintain max displaced head pixels from all tickables in the context - this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); - this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); - // Maintain the widest note for all tickables in the context - this.notePx = Math.max(this.notePx, metrics.notePx); - // Maintain the widest note head - this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); - // Total modifier shift - this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); - this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); - // Total shift - this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); - this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); - // Recalculate the tick context total width - this.width = this.notePx + this.totalLeftPx + this.totalRightPx; - } - return this; - } - postFormat() { - if (this.postFormatted) - return this; - this.postFormatted = true; - return this; - } - getFormatterMetrics() { - return this.formatterMetrics; - } -} - - -/***/ }), - -/***/ "./src/timesigglyph.ts": -/*!*****************************!*\ - !*** ./src/timesigglyph.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Renders time signatures glyphs for staffs -// This class is used by TimeSignature to render the associated glyphs - - -class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { - constructor(timeSignature, topDigits, botDigits, code, point, options) { - var _a; - super(code, point, options); - this.timeSignature = timeSignature; - this.topGlyphs = []; - this.botGlyphs = []; - let topWidth = 0; - for (let i = 0; i < topDigits.length; ++i) { - let timeSigType = topDigits[i]; - switch (topDigits[i]) { - case '-': - timeSigType = 'Minus'; - break; - case '+': - timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; - break; - case '(': - timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; - break; - case ')': - timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; - break; - } - const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.topGlyphs.push(topGlyph); - topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; - } - let botWidth = 0; - for (let i = 0; i < botDigits.length; ++i) { - let timeSigType = botDigits[i]; - switch (botDigits[i]) { - case '+': - timeSigType = 'PlusSmall'; - break; - case '(': - timeSigType = 'ParensLeftSmall'; - break; - case ')': - timeSigType = 'ParensRightSmall'; - break; - } - const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.botGlyphs.push(botGlyph); - botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); - } - this.width = Math.max(topWidth, botWidth); - this.xMin = this.getMetrics().x_min; - this.topStartX = (this.width - topWidth) / 2.0; - this.botStartX = (this.width - botWidth) / 2.0; - this.reset(); - } - getMetrics() { - return { - x_min: this.xMin, - x_max: this.xMin + this.width, - width: this.width, - }; - } - renderToStave(x) { - const stave = this.checkStave(); - const ctx = this.checkContext(); - let start_x = x + this.topStartX; - let y = 0; - if (this.botGlyphs.length > 0) - y = stave.getYForLine(this.timeSignature.topLine); - else - y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; - for (let i = 0; i < this.topGlyphs.length; ++i) { - const glyph = this.topGlyphs[i]; - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); - start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); - } - start_x = x + this.botStartX; - y = stave.getYForLine(this.timeSignature.bottomLine); - for (let i = 0; i < this.botGlyphs.length; ++i) { - const glyph = this.botGlyphs[i]; - this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); - start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); - } - } -} - - -/***/ }), - -/***/ "./src/timesignature.ts": -/*!******************************!*\ - !*** ./src/timesignature.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Implements time signatures glyphs for staffs -// See tables.js for the internal time signatures -// representation - - - - - - -const assertIsValidTimeSig = (timeSpec) => { - const numbers = timeSpec.split('/'); - if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); - } - numbers.forEach((number) => { - // Characters consisting in number 0..9, '+', '-', '(' or ')' - if (/^[0-9+\-()]+$/.test(number) == false) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); - } - }); -}; -/** - * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from - * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced - * such as "3/4(6/8)" or "2/4+5/8". - */ -class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; - } - static get glyphs() { - return { - C: { - code: 'timeSigCommon', - point: 40, - line: 2, - }, - 'C|': { - code: 'timeSigCutCommon', - point: 40, - line: 2, - }, - }; - } - constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { - super(); - this.timeSpec = '4/4'; - this.line = 0; - this.is_numeric = true; - this.validate_args = validate_args; - const padding = customPadding; - // point must be defined before parsing spec. - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); - this.point = musicFont.lookupMetric('digits.point'); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.topLine = 2 + fontLineShift; - this.bottomLine = 4 + fontLineShift; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.setTimeSig(timeSpec); - this.setPadding(padding); - } - /** - * Return TimeSignatureInfo given a string, consisting of line (number), - * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or - * TimeSignatureGlyph object). - */ - parseTimeSpec(timeSpec) { - var _a, _b; - if (timeSpec === 'C' || timeSpec === 'C|') { - const { line, code, point } = TimeSignature.glyphs[timeSpec]; - return { - line, - num: false, - glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, point), - }; - } - if (this.validate_args) { - assertIsValidTimeSig(timeSpec); - } - const parts = timeSpec.split('/'); - return { - line: 0, - num: true, - glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), - }; - } - /** - * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both - * top and bottom digits along with plus signs etc.) - */ - makeTimeSignatureGlyph(topDigits, botDigits) { - // note that 'code' is ignored by TimeSignatureGlyph when rendering. - return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); - } - /** - * Returns {line, num (=getIsNumeric), glyph} -- - * but these can also be accessed directly w/ getters and setters. - */ - getInfo() { - const { line, is_numeric, glyph } = this; - return { line, num: is_numeric, glyph }; - } - /** - * Set a new time signature specification without changing customPadding, etc. - * - * The getter for this is `getTimeSpec` not `getTimeSig`. - */ - setTimeSig(timeSpec) { - this.timeSpec = timeSpec; - const info = this.parseTimeSpec(timeSpec); - this.setGlyph(info.glyph); - this.is_numeric = info.num; - this.line = info.line; - return this; - } - /** - * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature - */ - getTimeSpec() { - return this.timeSpec; - } - /** - * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ - * denominator time signatures such as 3/4 and 2 for cut/common. - */ - getLine() { - return this.line; - } - /** - * Set the line number that the TimeSignature sits on. Half-values are acceptable - * for spaces, etc. Can be altered, for instance, for signatures that sit above the - * staff in large orchestral scores. - */ - setLine(line) { - this.line = line; - } - /** - * Get the Glyph object used to create the time signature. Numeric time signatures - * such as 3/8 have a composite Glyph stored as a single Glyph object. - */ - getGlyph() { - return this.glyph; - } - /** - * Set the Glyph object used to draw the time signature, and update the width of the - * TimeSignature to match. The Glyph must define width in its metrics. - */ - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); - } - /** - * Return a boolean on whether this TimeSignature is drawn with one or more numbers - * (such as 4/4) or not (as in cut time). - */ - getIsNumeric() { - return this.is_numeric; - } - /** - * Set whether this TimeSignature is drawn with one or more numbers. - */ - setIsNumeric(isNumeric) { - this.is_numeric = isNumeric; - } - /** - * Draw the time signature on a Stave using its RenderContext. Both setStave - * and setContext must already be run. - */ - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('timesignature', this.getAttribute('id')); - this.glyph.setStave(stave); - this.glyph.setContext(ctx); - this.placeGlyphOnLine(this.glyph, stave, this.line); - this.glyph.renderToStave(this.x); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} - - -/***/ }), - -/***/ "./src/timesignote.ts": -/*!****************************!*\ - !*** ./src/timesignote.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 - - - -class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; - } - constructor(timeSpec, customPadding) { - super({ duration: 'b' }); - this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); - this.setWidth(this.timeSig.getGlyph().getMetrics().width); - // Note properties - this.ignore_ticks = true; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const tsGlyph = this.timeSig.getGlyph(); - if (!tsGlyph.getContext()) { - tsGlyph.setContext(ctx); - } - tsGlyph.setStave(stave); - tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); - tsGlyph.renderToStave(this.getAbsoluteX()); - } -} - - -/***/ }), - -/***/ "./src/tremolo.ts": -/*!************************!*\ - !*** ./src/tremolo.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Mike Corrigan -// MIT License - - - - - - -/** Tremolo implements tremolo notation. */ -class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tremolo; - } - /** - * @param num number of bars - */ - constructor(num) { - super(); - this.num = num; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; - this.code = 'tremolo1'; - // big strokes scales initialised to 1 (no scale) - this.y_spacing_scale = 1; - this.extra_stroke_scale = 1; - } - /** Draw the tremolo on the rendering context. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDirection = note.getStemDirection(); - const start = note.getModifierStartXY(this.position, this.index); - let x = start.x; - const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note); - const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; - const category = `tremolo.${gn ? 'grace' : 'default'}`; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; - // add y_spacing_scale for big strokes (#1258) - y_spacing *= this.y_spacing_scale; - const height = this.num * y_spacing; - let y = note.getStemExtents().baseY - height; - if (stemDirection < 0) { - y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; - } - else { - y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; - } - const fontScale = musicFont.lookupMetric(`${category}.point`); - x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`); - for (let i = 0; i < this.num; ++i) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); - y += y_spacing; - } - } -} - - -/***/ }), - -/***/ "./src/tuning.ts": -/*!***********************!*\ - !*** ./src/tuning.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tuning": () => (/* binding */ Tuning) -/* harmony export */ }); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - -/** `Tuning` implements varies types of tunings for tablature. */ -class Tuning { - static get names() { - return { - standard: 'E/5,B/4,G/4,D/4,A/3,E/3', - dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', - dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', - eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', - standardBanjo: 'D/5,B/4,G/4,D/4,G/5', - }; - } - /** - * Constructor. - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { - this.tuningValues = []; - // Default to standard tuning. - this.setTuning(tuningString); - } - /** Return the note number associated to the note string. */ - noteToInteger(noteString) { - var _a; - return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; - } - /** - * Set tuning identified by tuning name (eg. 'dagdad') - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - setTuning(tuningString) { - if (Tuning.names[tuningString]) { - tuningString = Tuning.names[tuningString]; - } - this.tuningValues = []; - const keys = tuningString.split(/\s*,\s*/); - if (keys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); - } - for (let i = 0; i < keys.length; ++i) { - this.tuningValues[i] = this.noteToInteger(keys[i]); - } - } - /** Return the note number associated with a tablature string. */ - getValueForString(stringNum) { - const s = Number(stringNum); - if (s < 1 || s > this.tuningValues.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); - } - return this.tuningValues[s - 1]; - } - /** Return the note number associated with a tablature string and fret. */ - getValueForFret(fretNum, stringNum) { - const stringValue = this.getValueForString(stringNum); - const f = Number(fretNum); - if (f < 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); - } - return stringValue + f; - } - /** Return the note string associated with tablature string and fret. */ - getNoteForFret(fretNum, stringNum) { - const noteValue = this.getValueForFret(fretNum, stringNum); - const octave = Math.floor(noteValue / 12); - const value = noteValue % 12; - return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; - } -} - - -/***/ }), - -/***/ "./src/tuplet.ts": -/*!***********************!*\ - !*** ./src/tuplet.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), -/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -/** - * ## Description - * - * Create a new tuplet from the specified notes. The notes must - * be part of the same voice. If they are of different rhythmic - * values, then options.num_notes must be set. - * - * @constructor - * @param {Array.} A set of notes: staveNotes, - * notes, etc... any class that inherits stemmableNote at some - * point in its prototype chain. - * @param options: object { - * - * num_notes: fit this many notes into... - * notes_occupied: ...the space of this many notes - * - * Together, these two properties make up the tuplet ratio - * in the form of num_notes : notes_occupied. - * num_notes defaults to the number of notes passed in, so - * it is important that if you omit this property, all of - * the notes passed should be of the same note value. - * notes_occupied defaults to 2 -- so you should almost - * certainly pass this parameter for anything other than - * a basic triplet. - * - * location: - * default 1, which is above the notes: ┌─── 3 ───┐ - * -1 is below the notes └─── 3 ───┘ - * - * bracketed: boolean, draw a bracket around the tuplet number - * when true: ┌─── 3 ───┐ when false: 3 - * defaults to true if notes are not beamed, false otherwise - * - * ratioed: boolean - * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ - * defaults to true if the difference between num_notes and - * notes_occupied is greater than 1. - * - * y_offset: int, default 0 - * manually offset a tuplet, for instance to avoid collisions - * with articulations, etc... - * } - */ - - - - - - - -var TupletLocation; -(function (TupletLocation) { - TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; - TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; -})(TupletLocation || (TupletLocation = {})); -class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; - } - static get LOCATION_TOP() { - return TupletLocation.TOP; - } - static get LOCATION_BOTTOM() { - return TupletLocation.BOTTOM; - } - static get NESTING_OFFSET() { - return 15; - } - static get metrics() { - const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; - if (!tupletMetrics) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); - return tupletMetrics; - } - constructor(notes, options = {}) { - super(); - this.numerator_glyphs = []; - this.denom_glyphs = []; - if (!notes || !notes.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); - } - this.options = options; - this.notes = notes; - this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; - // We accept beats_occupied, but warn that it's deprecated: - // the preferred property name is now notes_occupied. - if (this.options.beats_occupied) { - this.beatsOccupiedDeprecationWarning(); - } - this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; - if (this.options.bracketed != undefined) { - this.bracketed = this.options.bracketed; - } - else { - this.bracketed = notes.some((note) => !note.hasBeam()); - } - this.ratioed = - this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; - this.point = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.tupletPoint'); - this.y_pos = 16; - this.x_pos = 100; - this.width = 200; - this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); - _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); - this.resolveGlyphs(); - this.attach(); - } - attach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.setTuplet(this); - } - } - detach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.resetTuplet(this); - } - } - /** - * Set whether or not the bracket is drawn. - */ - setBracketed(bracketed) { - this.bracketed = !!bracketed; - return this; - } - /** - * Set whether or not the ratio is shown. - */ - setRatioed(ratioed) { - this.ratioed = !!ratioed; - return this; - } - /** - * Set the tuplet indicator to be displayed either on the top or bottom of the stave. - */ - setTupletLocation(location) { - if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { - // eslint-disable-next-line - console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); - location = Tuplet.LOCATION_TOP; - } - this.location = location; - return this; - } - getNotes() { - return this.notes; - } - getNoteCount() { - return this.num_notes; - } - beatsOccupiedDeprecationWarning() { - // eslint-disable-next-line - console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); - } - getBeatsOccupied() { - this.beatsOccupiedDeprecationWarning(); - return this.getNotesOccupied(); - } - setBeatsOccupied(beats) { - this.beatsOccupiedDeprecationWarning(); - return this.setNotesOccupied(beats); - } - getNotesOccupied() { - return this.notes_occupied; - } - setNotesOccupied(notes) { - this.detach(); - this.notes_occupied = notes; - this.resolveGlyphs(); - this.attach(); - } - resolveGlyphs() { - this.numerator_glyphs = []; - let n = this.num_notes; - while (n >= 1) { - this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - this.denom_glyphs = []; - n = this.notes_occupied; - while (n >= 1) { - this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - } - // determine how many tuplets are nested within this tuplet - // on the same side (above/below), to calculate a y - // offset for this tuplet: - getNestedTupletCount() { - const location = this.location; - const first_note = this.notes[0]; - let maxTupletCount = countTuplets(first_note, location); - let minTupletCount = countTuplets(first_note, location); - // Count the tuplets that are on the same side (above/below) - // as this tuplet: - function countTuplets(note, location) { - return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; - } - this.notes.forEach((note) => { - const tupletCount = countTuplets(note, location); - maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; - minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; - }); - return maxTupletCount - minTupletCount; - } - // determine the y position of the tuplet: - getYPosition() { - // offset the tuplet for any nested tuplets between - // it and the notes: - const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; - // offset the tuplet for any manual y_offset: - const y_offset = this.options.y_offset || 0; - // now iterate through the notes and find our highest - // or lowest locations, to form a base y_pos - const first_note = this.notes[0]; - let y_pos; - if (this.location === Tuplet.LOCATION_TOP) { - y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; - // check modifiers above note to see if they will collide with tuplet beam - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - let modLines = 0; - const mc = note.getModifierContext(); - if (mc) { - modLines = Math.max(modLines, mc.getState().top_text_line); - } - const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; - if (note.hasStem() || note.isRest()) { - const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? note.getStemExtents().topY - Tuplet.metrics.stemOffset - : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; - y_pos = Math.min(top_y, y_pos); - if (modLines > 0) { - y_pos = Math.min(modY, y_pos); - } - } - } - } - else { - let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 - // check modifiers below note to see if they will collide with tuplet beam - this.notes.forEach((nn) => { - const mc = nn.getModifierContext(); - if (mc) { - lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); - } - }); - y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; - for (let i = 0; i < this.notes.length; ++i) { - if (this.notes[i].hasStem() || this.notes[i].isRest()) { - const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset - : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; - if (bottom_y > y_pos) { - y_pos = bottom_y; - } - } - } - } - return y_pos + nested_tuplet_y_offset + y_offset; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - // determine x value of left bound of tuplet - const first_note = this.notes[0]; - const last_note = this.notes[this.notes.length - 1]; - if (!this.bracketed) { - this.x_pos = first_note.getStemX(); - this.width = last_note.getStemX() - this.x_pos; - } - else { - this.x_pos = first_note.getTieLeftX() - 5; - this.width = last_note.getTieRightX() - this.x_pos + 5; - } - // determine y value for tuplet - this.y_pos = this.getYPosition(); - const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - // calculate total width of tuplet notation - let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); - if (this.ratioed) { - width = this.denom_glyphs.reduce(addGlyphWidth, width); - width += this.point * 0.32; - } - const notation_center_x = this.x_pos + this.width / 2; - const notation_start_x = notation_center_x - width / 2; - // draw bracket if the tuplet is not beamed - if (this.bracketed) { - const line_width = this.width / 2 - width / 2 - 5; - // only draw the bracket if it has positive length - if (line_width > 0) { - ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - } - } - // draw numerator glyphs - const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); - let x_offset = 0; - this.numerator_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - }); - // display colon and denominator if the ratio is to be shown - if (this.ratioed) { - const colon_x = notation_start_x + x_offset + this.point * 0.16; - const colon_radius = this.point * 0.06; - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - x_offset += this.point * 0.32; - this.denom_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - }); - } - } -} - - -/***/ }), - -/***/ "./src/typeguard.ts": -/*!**************************!*\ - !*** ./src/typeguard.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Category": () => (/* binding */ Category), -/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), -/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), -/* harmony export */ "isBarline": () => (/* binding */ isBarline), -/* harmony export */ "isCategory": () => (/* binding */ isCategory), -/* harmony export */ "isDot": () => (/* binding */ isDot), -/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), -/* harmony export */ "isNote": () => (/* binding */ isNote), -/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), -/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), -/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -/* eslint-disable @typescript-eslint/no-explicit-any */ -/** - * Use instead of `instanceof` as a more flexible type guard. - * @param obj check if this object's CATEGORY matches the provided category. - * @param category a string representing a category of VexFlow objects. - * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. - * If `false`, we do not check the superclass or other ancestors. - * @returns true if `obj` has a static `CATEGORY` property that matches `category`. - */ -function isCategory(obj, category, checkAncestors = true) { - // obj is undefined, a number, a primitive string, or null. - if (typeof obj !== 'object' || obj === null) { - return false; - } - // `obj.constructor` is a reference to the constructor function that created the `obj` instance. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor - let constructorFcn = obj.constructor; - // Check if the object's static .CATEGORY matches the provided category. - if (checkAncestors) { - // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. - while (obj !== null) { - constructorFcn = obj.constructor; - if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { - return true; - } - obj = Object.getPrototypeOf(obj); - } - return false; - } - else { - // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. - return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; - } -} -const isAccidental = (obj) => isCategory(obj, Category.Accidental); -const isAnnotation = (obj) => isCategory(obj, Category.Annotation); -const isBarline = (obj) => isCategory(obj, Category.Barline); -const isDot = (obj) => isCategory(obj, Category.Dot); -const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); -const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); -const isNote = (obj) => isCategory(obj, Category.Note); -const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); -const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); -const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); -const isTabNote = (obj) => isCategory(obj, Category.TabNote); -// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. -// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums -var Category; -(function (Category) { - Category["Accidental"] = "Accidental"; - Category["Annotation"] = "Annotation"; - Category["Articulation"] = "Articulation"; - Category["Barline"] = "Barline"; - Category["BarNote"] = "BarNote"; - Category["Beam"] = "Beam"; - Category["Bend"] = "Bend"; - Category["ChordSymbol"] = "ChordSymbol"; - Category["Clef"] = "Clef"; - Category["ClefNote"] = "ClefNote"; - Category["Crescendo"] = "Crescendo"; - Category["Curve"] = "Curve"; - Category["Dot"] = "Dot"; - Category["Element"] = "Element"; - Category["Fraction"] = "Fraction"; - Category["FretHandFinger"] = "FretHandFinger"; - Category["GhostNote"] = "GhostNote"; - Category["Glyph"] = "Glyph"; - Category["GlyphNote"] = "GlyphNote"; - Category["GraceNote"] = "GraceNote"; - Category["GraceNoteGroup"] = "GraceNoteGroup"; - Category["GraceTabNote"] = "GraceTabNote"; - Category["KeySignature"] = "KeySignature"; - Category["KeySigNote"] = "KeySigNote"; - Category["Modifier"] = "Modifier"; - Category["MultiMeasureRest"] = "MultiMeasureRest"; - Category["Note"] = "Note"; - Category["NoteHead"] = "NoteHead"; - Category["NoteSubGroup"] = "NoteSubGroup"; - Category["Ornament"] = "Ornament"; - Category["Parenthesis"] = "Parenthesis"; - Category["PedalMarking"] = "PedalMarking"; - Category["RenderContext"] = "RenderContext"; - Category["RepeatNote"] = "RepeatNote"; - Category["Repetition"] = "Repetition"; - Category["Stave"] = "Stave"; - Category["StaveConnector"] = "StaveConnector"; - Category["StaveHairpin"] = "StaveHairpin"; - Category["StaveLine"] = "StaveLine"; - Category["StaveModifier"] = "StaveModifier"; - Category["StaveNote"] = "StaveNote"; - Category["StaveSection"] = "StaveSection"; - Category["StaveTempo"] = "StaveTempo"; - Category["StaveText"] = "StaveText"; - Category["StaveTie"] = "StaveTie"; - Category["Stem"] = "Stem"; - Category["StemmableNote"] = "StemmableNote"; - Category["StringNumber"] = "StringNumber"; - Category["Stroke"] = "Stroke"; - Category["System"] = "System"; - Category["TabNote"] = "TabNote"; - Category["TabSlide"] = "TabSlide"; - Category["TabStave"] = "TabStave"; - Category["TabTie"] = "TabTie"; - Category["TextBracket"] = "TextBracket"; - Category["TextDynamics"] = "TextDynamics"; - Category["TextNote"] = "TextNote"; - Category["Tickable"] = "Tickable"; - Category["TimeSignature"] = "TimeSignature"; - Category["TimeSigNote"] = "TimeSigNote"; - Category["Tremolo"] = "Tremolo"; - Category["Tuplet"] = "Tuplet"; - Category["Vibrato"] = "Vibrato"; - Category["VibratoBracket"] = "VibratoBracket"; - Category["Voice"] = "Voice"; - Category["Volta"] = "Volta"; -})(Category || (Category = {})); - - -/***/ }), - -/***/ "./src/util.ts": -/*!*********************!*\ - !*** ./src/util.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), -/* harmony export */ "defined": () => (/* binding */ defined), -/* harmony export */ "globalObject": () => (/* binding */ globalObject), -/* harmony export */ "log": () => (/* binding */ log), -/* harmony export */ "midLine": () => (/* binding */ midLine), -/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), -/* harmony export */ "prefix": () => (/* binding */ prefix), -/* harmony export */ "sumArray": () => (/* binding */ sumArray), -/* harmony export */ "warn": () => (/* binding */ warn) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Note: Keep this module free of imports to reduce the chance of circular dependencies. -/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ -class RuntimeError extends Error { - constructor(code, message = '') { - super('[RuntimeError] ' + code + ': ' + message); - this.code = code; - } -} -/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ -// eslint-disable-next-line -function globalObject() { - if (typeof globalThis !== 'undefined') { - return globalThis; - } - if (typeof self !== 'undefined') { - return self; - } - if (typeof window !== 'undefined') { - return window; - } - if (typeof __webpack_require__.g !== 'undefined') { - return __webpack_require__.g; - } - return Function('return this')(); -} -/** - * Check that `x` is of type `T` and not `undefined`. - * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. - */ -function defined(x, code = 'undefined', message = '') { - if (x === undefined) { - throw new RuntimeError(code, message); - } - return x; -} -/** Default log function sends all arguments to console. */ -// eslint-disable-next-line -function log(block, ...args) { - if (!args) - return; - const line = Array.prototype.slice.call(args).join(' '); - globalObject().console.log(block + ': ' + line); -} -/** Dump warning to console. */ -// eslint-disable-next-line -function warn(...args) { - const line = args.join(' '); - const err = new Error(); - globalObject().console.log('Warning: ', line, err.stack); -} -/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ -function roundN(x, n) { - return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; -} -/** Locate the mid point between stave lines. Returns a fractional line if a space. */ -function midLine(a, b) { - let mid_line = b + (a - b) / 2; - if (mid_line % 2 > 0) { - mid_line = roundN(mid_line * 10, 5) / 10; - } - return mid_line; -} -/** - * Used by various classes (e.g., SVGContext) to provide a - * unique prefix to element names (or other keys in shared namespaces). - */ -function prefix(text) { - return `vf-${text}`; -} -/** - * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). - */ -function normalizeAngle(a) { - a = a % (2 * Math.PI); - if (a < 0) { - a += 2 * Math.PI; - } - return a; -} -/** - * Return the sum of an array of numbers. - */ -function sumArray(arr) { - return arr.reduce((a, b) => a + b, 0); -} - - -/***/ }), - -/***/ "./src/vex.ts": -/*!********************!*\ - !*** ./src/vex.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Vex": () => (/* binding */ Vex) -/* harmony export */ }); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Utility methods used by the rest of the VexFlow codebase. - - -class Vex { - // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. - // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { - // arr.forEach(callbackFn); - // } - /** - * Take `arr` and return a new list consisting of the sorted, unique, - * contents of arr. Does not modify `arr`. - */ - // eslint-disable-next-line - static sortAndUnique(arr, cmp, eq) { - if (arr.length > 1) { - const newArr = []; - let last; - arr.sort(cmp); - for (let i = 0; i < arr.length; ++i) { - if (i === 0 || !eq(arr[i], last)) { - newArr.push(arr[i]); - } - last = arr[i]; - } - return newArr; - } - else { - return arr; - } - } - /** Check if array `arr` contains `obj`. */ - // eslint-disable-next-line - static contains(arr, obj) { - let i = arr.length; - while (i--) { - if (arr[i] === obj) { - return true; - } - } - return false; - } - // Get the 2D Canvas context from DOM element `canvas_sel`. - static getCanvasContext(canvasSelector) { - if (!canvasSelector) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); - } - const canvas = document.getElementById(canvasSelector); - if (!(canvas && canvas.getContext)) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); - } - return canvas.getContext('2d'); - } - /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ - // eslint-disable-next-line - static benchmark(s, f) { - const start_time = new Date().getTime(); - f(); - const elapsed = new Date().getTime() - start_time; - (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); - } - // Get stack trace. - static stackTrace() { - const err = new Error(); - return err.stack; - } -} -Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; - - -/***/ }), - -/***/ "./src/vibrato.ts": -/*!************************!*\ - !*** ./src/vibrato.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) -/* harmony export */ }); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -/** `Vibrato` implements diverse vibratos. */ -class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; - } - /** Arrange vibratos inside a `ModifierContext`. */ - static format(vibratos, state, context) { - if (!vibratos || vibratos.length === 0) - return false; - // Vibratos are always on top. - let text_line = state.top_text_line; - let width = 0; - let shift = state.right_shift - 7; - // If there's a bend, drop the text line - const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); - if (bends && bends.length > 0) { - const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; - text_line = text_line - (bendHeight + 1); - } - else { - state.top_text_line += 1; - } - // Format Vibratos - for (let i = 0; i < vibratos.length; ++i) { - const vibrato = vibratos[i]; - vibrato.setXShift(shift); - vibrato.setTextLine(text_line); - width += vibrato.getWidth(); - shift += width; - } - state.right_shift += width; - return true; - } - constructor() { - super(); - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; - this.render_options = { - harsh: false, - vibrato_width: 20, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - }; - this.setVibratoWidth(this.render_options.vibrato_width); - } - /** Set harsh vibrato. */ - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - /** Set vibrato width in pixels. */ - setVibratoWidth(width) { - this.render_options.vibrato_width = width; - this.setWidth(width); - return this; - } - /** Draw the vibrato on the rendering context. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); - const vx = start.x + this.x_shift; - const vy = note.getYForTopText(this.text_line) + 2; - Vibrato.renderVibrato(ctx, vx, vy, this.render_options); - } - /** - * Static rendering method that can be called from - * other classes (e.g. VibratoBracket). - */ - static renderVibrato(ctx, x, y, opts) { - const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; - const num_waves = vibrato_width / wave_width; - ctx.beginPath(); - let i; - if (harsh) { - ctx.moveTo(x, y + wave_girth + 1); - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x + wave_width, y - wave_height / 2); - x += wave_width; - ctx.lineTo(x + wave_width, y + wave_height / 2); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); - x -= wave_width; - ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); - x -= wave_width; - } - ctx.fill(); - } - else { - ctx.moveTo(x, y + wave_girth); - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); - x += wave_width; - ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - } - ctx.fill(); - } - } -} - - -/***/ }), - -/***/ "./src/vibratobracket.ts": -/*!*******************************!*\ - !*** ./src/vibratobracket.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Balazs Forian-Szabo -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (VibratoBracket.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); -} -/** `VibratoBracket` renders vibrato effect between two notes. */ -class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; - } - /** - * Either the stop or start note must be set, or both of them. - * An undefined value for the start or stop note indicates that the vibrato - * is drawn from the beginning or until the end of the stave accordingly. - */ - constructor(bracket_data) { - super(); - if (bracket_data.start) - this.start = bracket_data.start; - if (bracket_data.stop) - this.stop = bracket_data.stop; - this.line = 1; - this.render_options = { - harsh: false, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - vibrato_width: 0, - }; - } - /** Set line position of the vibrato bracket. */ - setLine(line) { - this.line = line; - return this; - } - /** Set harsh vibrato bracket. */ - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - /** Draw the vibrato bracket on the rendering context. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || - (this.stop && this.stop.checkStave().getYForTopText(this.line)) || - 0; - // If start note is not set then vibrato will be drawn - // from the beginning of the stave - const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; - // If stop note is not set then vibrato will be drawn - // until the end of the stave - const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || - (this.start && this.start.checkStave().getTieEndX() - 10) || - 0; - this.render_options.vibrato_width = stop_x - start_x; - L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); - _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); - } -} -/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ -VibratoBracket.DEBUG = false; - - -/***/ }), - -/***/ "./src/voice.ts": -/*!**********************!*\ - !*** ./src/voice.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Voice": () => (/* binding */ Voice), -/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var VoiceMode; -(function (VoiceMode) { - VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; - VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; - VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; -})(VoiceMode || (VoiceMode = {})); -/** - * `Voice` is mainly a container object to group `Tickables` for formatting. - */ -class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; - } - /** - * Modes allow the addition of ticks in three different ways: - * - STRICT: This is the default. Ticks must fill the voice. - * - SOFT: Ticks can be added without restrictions. - * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. - */ - static get Mode() { - return VoiceMode; - } - constructor(time) { - super(); - this.resolutionMultiplier = 1; - this.mode = VoiceMode.STRICT; - this.preFormatted = false; - this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - this.largestTickWidth = 0; - this.tickables = []; - this.options = { - softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, - }; - // Convert the `time` string into a VoiceTime object if necessary. - let voiceTime; - if (typeof time === 'string') { - // Time signature shortcut: "4/4", "3/8", etc. - const match = time.match(/(\d+)\/(\d+)/); - if (match) { - voiceTime = { - num_beats: parseInt(match[1]), - beat_value: parseInt(match[2]), - }; - } - } - else { - voiceTime = time; - } - // Default time signature is 4/4. - this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); - // Recalculate total ticks. - this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); - // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. - this.smallestTickCount = this.totalTicks.clone(); - } - /** Get the total ticks in the voice. */ - getTotalTicks() { - return this.totalTicks; - } - /** Get the total ticks used in the voice by all the tickables. */ - getTicksUsed() { - return this.ticksUsed; - } - /** Get the largest width of all the tickables. */ - getLargestTickWidth() { - return this.largestTickWidth; - } - /** Get the tick count for the shortest tickable */ - getSmallestTickCount() { - return this.smallestTickCount; - } - /** Get the tickables in the voice. */ - getTickables() { - return this.tickables; - } - /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ - getMode() { - return this.mode; - } - /** - * Set the voice mode. - * @param mode value from `VoiceMode` or Voice.Mode - */ - setMode(mode) { - this.mode = mode; - return this; - } - /** Get the resolution multiplier for the voice. */ - getResolutionMultiplier() { - return this.resolutionMultiplier; - } - /** Get the actual tick resolution for the voice. */ - getActualResolution() { - return this.resolutionMultiplier * this.time.resolution; - } - /** Set the voice's stave. */ - setStave(stave) { - this.stave = stave; - // Reset the bounding box so we can reformat. - this.boundingBox = undefined; - return this; - } - getStave() { - return this.stave; - } - /** Get the bounding box for the voice. */ - getBoundingBox() { - if (!this.boundingBox) { - const stave = this.checkStave(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - if (!tickable.getStave()) - tickable.setStave(stave); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - } - this.boundingBox = boundingBox; - } - return this.boundingBox; - } - /** Set the voice mode to strict or soft. */ - setStrict(strict) { - this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; - return this; - } - /** Determine if the voice is complete according to the voice mode. */ - isComplete() { - if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { - return this.ticksUsed.equals(this.totalTicks); - } - else { - return true; - } - } - /** - * We use softmax to layout the tickables proportional to the exponent of - * their duration. The softmax factor is used to determine the 'linearness' of - * the layout. - * - * The softmax of all the tickables in this voice should sum to 1. - */ - setSoftmaxFactor(factor) { - this.options.softmaxFactor = factor; - this.expTicksUsed = 0; // reset - return this; - } - /** - * Calculate the sum of the exponents of all the ticks in this voice to use - * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) - * - * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, - * not "expected" ticks used. - */ - reCalculateExpTicksUsed() { - const totalTicks = this.ticksUsed.value(); - const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); - this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); - return this.expTicksUsed; - } - /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ - softmax(tickValue) { - if (!this.expTicksUsed) { - this.expTicksUsed = this.reCalculateExpTicksUsed(); - } - const totalTicks = this.ticksUsed.value(); - const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); - const sm = exp(tickValue) / this.expTicksUsed; - return sm; - } - /** Add a tickable to the voice. */ - addTickable(tickable) { - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - // Update the total ticks for this line. - this.ticksUsed.add(ticks); - this.expTicksUsed = 0; // reset - if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && - this.ticksUsed.greaterThan(this.totalTicks)) { - this.ticksUsed.subtract(ticks); - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); - } - // Track the smallest tickable for formatting. - if (ticks.lessThan(this.smallestTickCount)) { - this.smallestTickCount = ticks.clone(); - } - this.resolutionMultiplier = this.ticksUsed.denominator; - // Expand total ticks using denominator from ticks used. - this.totalTicks.add(0, this.ticksUsed.denominator); - } - // Add the tickable to the line. - this.tickables.push(tickable); - tickable.setVoice(this); - return this; - } - /** Add an array of tickables to the voice. */ - addTickables(tickables) { - for (let i = 0; i < tickables.length; ++i) { - this.addTickable(tickables[i]); - } - return this; - } - /** Preformat the voice by applying the voice's stave to each note. */ - preFormat() { - if (this.preFormatted) - return this; - const stave = this.checkStave(); - this.tickables.forEach((tickable) => { - if (!tickable.getStave()) { - tickable.setStave(stave); - } - }); - this.preFormatted = true; - return this; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - /** - * Render the voice onto the canvas `context` and an optional `stave`. - * If `stave` is omitted, it is expected that the notes have staves - * already set. - * - * This method also calculates the voice's boundingBox while drawing - * the notes. Note the similarities with this.getBoundingBox(). - */ - draw(context = this.checkContext(), stave) { - stave = stave !== null && stave !== void 0 ? stave : this.stave; - this.setRendered(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - // Set the stave if provided. - if (stave) { - tickable.setStave(stave); - } - (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - tickable.setContext(context); - tickable.drawWithStyle(); - } - this.boundingBox = boundingBox; - } -} - - -/***/ }), - -/***/ "./src/web.ts": -/*!********************!*\ - !*** ./src/web.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -// -// Utilities for working with Web APIs. -// See: https://developer.mozilla.org/en-US/docs/Web/API - -// eslint-disable-next-line -function isHTMLCanvas(element) { - if (!element) - return false; - const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); - return ( - // It's either an instance of the HTMLCanvasElement class, - (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || - // OR it's pretending to be a element. Good enough! - // Do not rely on .tagName, because node-canvas doesn't provide a tagName. - (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); -} -// eslint-disable-next-line -function isHTMLDiv(element) { - if (!element) - return false; - const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); - return ( - // It's either an instance of the HTMLDivElement class. - (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || - // OR it's pretending to be a
. See: svgcontext.ts. - (typeof element.appendChild === 'function' && typeof element.style === 'object')); -} - - -/***/ }), - -/***/ "./tests/accidental_tests.ts": -/*!***********************************!*\ - !*** ./tests/accidental_tests.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AccidentalTests": () => (/* binding */ AccidentalTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _src_timesignote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Accidental Tests - - - - - - - - - - - - - - - -const AccidentalTests = { - Start() { - QUnit.module('Accidental'); - test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Accidental Padding', formatAccidentalSpaces); - run('Basic', basic); - run('Stem Down', basicStemDown); - run('Cautionary Accidental', cautionary); - run('Accidental Arrangement Special Cases', specialCases); - run('Multi Voice', multiVoice); - run('Microtonal', microtonal); - run('Microtonal (Iranian)', microtonal_iranian); - run('Sagittal', sagittal); - run('Automatic Accidentals', automaticAccidentals0); - run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); - run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); - run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); - run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); - run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); - run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); - run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); - run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); - run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); - run('Factory API', factoryAPI); - }, -}; -// Check that at least one of the note's modifiers is an Accidental. -function hasAccidental(note) { - return note.getModifiers().some((modifier) => (0,_src_typeguard__WEBPACK_IMPORTED_MODULE_13__.isAccidental)(modifier)); -} -// Return a convenience function for building accidentals from a string. -function makeNewAccid(factory) { - return (type) => factory.Accidental({ type }); -} -/** - * - */ -function autoAccidentalWorking() { - const createStaveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); - let notes = [ - { keys: ['bb/4'], duration: '4' }, - { keys: ['bb/4'], duration: '4' }, - { keys: ['g#/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['a#/4'], duration: '4' }, - { keys: ['g#/4'], duration: '4' }, - ].map(createStaveNote); - let voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - // F Major (Bb) - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'F'); - equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); - equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); - equal(hasAccidental(notes[2]), true, 'Added a sharp'); - equal(hasAccidental(notes[3]), true, 'Back to natural'); - equal(hasAccidental(notes[4]), true, 'Back to natural'); - equal(hasAccidental(notes[5]), false, 'Natural remembered'); - equal(hasAccidental(notes[6]), true, 'Added sharp'); - equal(hasAccidental(notes[7]), true, 'Added sharp'); - notes = [ - { keys: ['e#/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['fb/4'], duration: '4' }, - { keys: ['b#/4'], duration: '4' }, - { keys: ['b#/4'], duration: '4' }, - { keys: ['cb/5'], duration: '4' }, - { keys: ['fb/5'], duration: '4' }, - { keys: ['e#/4'], duration: '4' }, - ].map(createStaveNote); - voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - // A Major (F#,G#,C#) - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); - equal(hasAccidental(notes[0]), true, 'Added sharp'); - equal(hasAccidental(notes[1]), true, 'Added flat'); - equal(hasAccidental(notes[2]), true, 'Added flat'); - equal(hasAccidental(notes[3]), true, 'Added sharp'); - equal(hasAccidental(notes[4]), false, 'Sharp remembered'); - equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); - equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); - equal(hasAccidental(notes[7]), false, 'sharp remembered'); - notes = [ - { keys: ['c/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['c#/4'], duration: '4' }, - { keys: ['c#/4'], duration: '4' }, - { keys: ['cbb/4'], duration: '4' }, - { keys: ['cbb/4'], duration: '4' }, - { keys: ['c##/4'], duration: '4' }, - { keys: ['c##/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - ].map(createStaveNote); - voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - // C Major (no sharps/flats) - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); - equal(hasAccidental(notes[0]), false, 'No accidental'); - equal(hasAccidental(notes[1]), true, 'Added flat'); - equal(hasAccidental(notes[2]), false, 'Flat remembered'); - equal(hasAccidental(notes[3]), true, 'Sharp added'); - equal(hasAccidental(notes[4]), false, 'Sharp remembered'); - equal(hasAccidental(notes[5]), true, 'Added doubled flat'); - equal(hasAccidental(notes[6]), false, 'Double flat remembered'); - equal(hasAccidental(notes[7]), true, 'Added double sharp'); - equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); - equal(hasAccidental(notes[9]), true, 'Added natural'); - equal(hasAccidental(notes[10]), false, 'Natural remembered'); -} -/** - * - */ -function formatAccidentalSpaces(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); - const context = f.getContext(); - const softmaxFactor = 100; - // Create the notes - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['e##/5'], - duration: '8d', - }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['b/4'], - duration: '16', - }).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['f/3'], - duration: '8', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['a/3'], - duration: '16', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['e/4', 'g/4'], - duration: '16', - }) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 0) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('bb'), 1), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['d/4'], - duration: '16', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['e/4', 'g/4'], - duration: '16', - }) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['g/4'], - duration: '32', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['a/4'], - duration: '32', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['g/4'], - duration: '16', - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ - keys: ['d/4'], - duration: 'q', - }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([notes[0]], { all: true }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice({ - num_beats: 4, - beat_value: 4, - }); - voice.addTickables(notes); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter({ softmaxFactor }).joinVoices([voice]); - const width = formatter.preCalculateMinTotalWidth([voice]); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_8__.Stave(10, 40, width + 20); - stave.setContext(context).draw(); - formatter.format([voice], width); - voice.draw(context, stave); - beams.forEach((b) => b.setContext(context).draw()); - notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(context, note, 30)); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(context, 300, 150); - ok(true); -} -function basic(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - // Notes keys out of alphabetic order - f - .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) - .addModifier(accid('##'), 6) - .addModifier(accid('n'), 0) - .addModifier(accid('bb'), 1) - .addModifier(accid('b'), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('n'), 4) - .addModifier(accid('bb'), 5), - // Notes keys out of alphabetic order - f - .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('b'), 4) - .addModifier(accid('bb'), 5) - .addModifier(accid('##'), 6) - .addModifier(accid('#'), 0), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('##').setAsCautionary(), 1) - .addModifier(accid('#').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb').setAsCautionary(), 4) - .addModifier(accid('b').setAsCautionary(), 5), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); - notes.forEach((note, index) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function cautionary(options) { - const staveCount = 12; - const scale = 0.85; - const staveWidth = 840; - let i = 0; - let j = 0; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); - f.getContext().scale(scale, scale); - const accids = Object.keys(_src_flow__WEBPACK_IMPORTED_MODULE_4__.Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); - const mod = Math.round(accids.length / staveCount); - for (i = 0; i < staveCount; ++i) { - const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); - const score = f.EasyScore(); - const rowMap = []; - for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { - rowMap.push(accids[j + i * staveCount]); - } - const notes = rowMap.map((accidType) => f - .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.UP }) - .addModifier(f.Accidental({ type: accidType }), 0)); - const voice = score.voice(notes, { time: rowMap.length + '/4' }); - voice.getTickables().forEach((tickable) => { - tickable - .getModifiers() - .filter((modifier) => modifier.getAttribute('type') === _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.CATEGORY) - .forEach((accid) => accid.setAsCautionary()); - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - ok(true, 'Must successfully render cautionary accidentals'); -} -function specialCases(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('b'), 1), - f - .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) - .addModifier(accid('##'), 0) - .addModifier(accid('##'), 1), - f - .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) - .addModifier(accid('#'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('##'), 2), - f - .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) - .addModifier(accid('b'), 0) - .addModifier(accid('b'), 1) - .addModifier(accid('n'), 3), - f - .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) - .addModifier(accid('b').setAsCautionary(), 0) - .addModifier(accid('b').setAsCautionary(), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3), - f - .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) - .addModifier(accid('bb'), 0) - .addModifier(accid('b').setAsCautionary(), 1) - .addModifier(accid('n').setAsCautionary(), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('n').setAsCautionary(), 4), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); - notes.forEach((note, index) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function basicStemDown(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('##'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('n'), 5) - .addModifier(accid('bb'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) - .addModifier(accid('n'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); - notes.forEach((note, noteIndex) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { - ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function multiVoice(options) { - // Helper function for visualizing - function showNotes(note1, note2, stave, ctx, x) { - const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_6__.ModifierContext(); - note1.addToModifierContext(modifierContext); - note2.addToModifierContext(modifierContext); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_11__.TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); - note1.setContext(ctx).draw(); - note2.setContext(ctx).draw(); - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note1, 180); - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(ctx, note2, 15); - } - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 460, 250); - const accid = makeNewAccid(f); - const stave = f.Stave({ x: 10, y: 45, width: 420 }); - const ctx = f.getContext(); - stave.draw(); - let note1 = f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - let note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('bb'), 1) - .addModifier(accid('##'), 2) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 60); - note1 = f - .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 150); - note1 = f - .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 250); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); - ok(true, 'Full Accidental'); -} -function microtonal(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('db'), 0) - .addModifier(accid('d'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) - .addModifier(accid('bbs'), 0) - .addModifier(accid('++'), 1) - .addModifier(accid('+'), 2) - .addModifier(accid('d'), 3) - .addModifier(accid('db'), 4) - .addModifier(accid('+'), 5) - .addModifier(accid('##'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('++'), 0) - .addModifier(accid('bbs'), 1) - .addModifier(accid('+'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('db'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('db').setAsCautionary(), 1) - .addModifier(accid('bbs').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('++').setAsCautionary(), 4) - .addModifier(accid('d').setAsCautionary(), 5), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) - .addModifier(accid('++-'), 0) - .addModifier(accid('+-'), 1) - .addModifier(accid('bs'), 2) - .addModifier(accid('bss'), 3) - .addModifier(accid('afhf'), 4) - .addModifier(accid('ashs'), 5), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); - notes.forEach((note, index) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Microtonal Accidental'); -} -function microtonal_iranian(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('k'), 0) - .addModifier(accid('o'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) - .addModifier(accid('b'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('n'), 2) - .addModifier(accid('o'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('bb'), 5) - .addModifier(accid('##'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('o'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('n'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('o').setAsCautionary(), 1) - .addModifier(accid('n').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('k').setAsCautionary(), 4), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) - .addModifier(accid('k'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('k'), 2) - .addModifier(accid('k'), 3), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); - notes.forEach((note, index) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Microtonal Accidental (Iranian)'); -} -function sagittal(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal11MediumDiesisUp'), 1) - .addModifier(accid('accSagittal5CommaDown'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('accSagittal7CommaDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal35LargeDiesisDown'), 2), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) - .addModifier(accid('b'), 1) - .addModifier(accid('accSagittal7CommaDown'), 1) - .addModifier(accid('accSagittal11LargeDiesisDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal11MediumDiesisUp'), 1) - .addModifier(accid('accSagittal5CommaDown'), 2) - .addModifier(accid('accSagittalFlat7CDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal35LargeDiesisDown'), 2), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) - .addModifier(accid('accSagittalFlat7CDown'), 1) - .addModifier(accid('accSagittal11LargeDiesisDown'), 3), - ]; - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - }); - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [3], - last_indices: [3], - options: { - direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, - }, - }); - f.StaveTie({ - from: notes[4], - to: notes[5], - first_indices: [0, 1], - last_indices: [0, 1], - }); - f.StaveTie({ - from: notes[4], - to: notes[5], - first_indices: [3], - last_indices: [3], - options: { - direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN, - }, - }); - f.Beam({ notes: notes.slice(2, 4) }); - f.Beam({ notes: notes.slice(6, 8) }); - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); - notes.forEach((note, index) => { - _src_note__WEBPACK_IMPORTED_MODULE_7__.Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Sagittal'); -} -function automaticAccidentals0(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); - const stave = f.Stave(); - const notes = [ - { keys: ['c/4', 'c/5'], duration: '4' }, - { keys: ['c#/4', 'c#/5'], duration: '4' }, - { keys: ['c#/4', 'c#/5'], duration: '4' }, - { keys: ['c##/4', 'c##/5'], duration: '4' }, - { keys: ['c##/4', 'c##/5'], duration: '4' }, - { keys: ['c/4', 'c/5'], duration: '4' }, - { keys: ['cn/4', 'cn/5'], duration: '4' }, - { keys: ['cbb/4', 'cbb/5'], duration: '4' }, - { keys: ['cbb/4', 'cbb/5'], duration: '4' }, - { keys: ['cb/4', 'cb/5'], duration: '4' }, - { keys: ['cb/4', 'cb/5'], duration: '4' }, - { keys: ['c/4', 'c/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); - notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); - const voice = f - .Voice() - .setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT) - .addTickable(new _src_timesignote__WEBPACK_IMPORTED_MODULE_12__.TimeSigNote('12/4').setStave(stave)) - .addTickables(notes); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'C'); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Ab'); - const notes = [ - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '4' }, - { keys: ['e/4'], duration: '4' }, - { keys: ['f/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['c/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'Ab'); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('A'); - const notes = [ - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['c#/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f#/5'], duration: '4' }, - { keys: ['g#/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals3(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('A'); - const score = f.EasyScore(); - score.set({ time: '8/4' }); - const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); - const voice = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice], 'A'); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsMultiVoiceInline(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Ab'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['d/4'], duration: '4', stem_direction: -1 }, - { keys: ['e/4'], duration: '4', stem_direction: -1 }, - { keys: ['f/4'], duration: '4', stem_direction: -1 }, - { keys: ['g/4'], duration: '4', stem_direction: -1 }, - { keys: ['a/4'], duration: '4', stem_direction: -1 }, - { keys: ['b/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const notes1 = [ - { keys: ['c/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f/5'], duration: '4' }, - { keys: ['g/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - { keys: ['b/5'], duration: '4' }, - { keys: ['c/6'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); - // Ab Major - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Ab'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[3]), false); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[7]), false); - equal(hasAccidental(notes1[0]), false); - equal(hasAccidental(notes1[1]), true); - equal(hasAccidental(notes1[2]), true); - equal(hasAccidental(notes1[3]), false); - equal(hasAccidental(notes1[4]), false); - equal(hasAccidental(notes1[5]), true); - equal(hasAccidental(notes1[6]), true); - equal(hasAccidental(notes1[7]), false); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsMultiVoiceOffset(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Cb'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['d/4'], duration: '4', stem_direction: -1 }, - { keys: ['e/4'], duration: '4', stem_direction: -1 }, - { keys: ['f/4'], duration: '4', stem_direction: -1 }, - { keys: ['g/4'], duration: '4', stem_direction: -1 }, - { keys: ['a/4'], duration: '4', stem_direction: -1 }, - { keys: ['b/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const notes1 = [ - { keys: ['c/5'], duration: '8' }, - { keys: ['c/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f/5'], duration: '4' }, - { keys: ['g/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - { keys: ['b/5'], duration: '4' }, - { keys: ['c/6'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - const voice1 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes1); - // Cb Major (All flats) - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0, voice1], 'Cb'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), true); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); - equal(hasAccidental(notes1[0]), true); - equal(hasAccidental(notes1[1]), false); - equal(hasAccidental(notes1[2]), true); - equal(hasAccidental(notes1[3]), true); - equal(hasAccidental(notes1[4]), true); - equal(hasAccidental(notes1[5]), true); - equal(hasAccidental(notes1[6]), true); - equal(hasAccidental(notes1[7]), true); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[8]), false); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[8]), false); - equal(hasAccidental(notes0[10]), true); - equal(hasAccidental(notes0[12]), false); - equal(hasAccidental(notes0[14]), true); - equal(hasAccidental(notes0[16]), false); - equal(hasAccidental(notes0[1]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[5]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[9]), false); - equal(hasAccidental(notes0[11]), true); - equal(hasAccidental(notes0[13]), false); - equal(hasAccidental(notes0[15]), true); - equal(hasAccidental(notes0[17]), false); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases3(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C#'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[8]), false); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases4(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C#'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_14__.Voice.Mode.SOFT).addTickables(notes0); - _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental.applyAccidentals([voice0], 'C#'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[8]), false); - equal(hasAccidental(notes0[10]), true); - equal(hasAccidental(notes0[12]), false); - equal(hasAccidental(notes0[14]), true); - equal(hasAccidental(notes0[16]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[5]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[9]), false); - equal(hasAccidental(notes0[11]), true); - equal(hasAccidental(notes0[13]), false); - equal(hasAccidental(notes0[15]), true); - equal(hasAccidental(notes0[17]), false); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function factoryAPI(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 240); - f.Stave({ x: 10, y: 10, width: 550 }); - const accid = makeNewAccid(f); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) - .addModifier(accid('##'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('n'), 5) - .addModifier(accid('bb'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('n'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) - .addModifier(accid('#'), 0) - .addModifier(accid('##').setAsCautionary(), 1) - .addModifier(accid('#').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb').setAsCautionary(), 4) - .addModifier(accid('b').setAsCautionary(), 5), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.SimpleFormat(notes); - notes.forEach((n, i) => { - ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); - n.getModifiersByType('Accidental').forEach((accid, i) => { - ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); - }); - }); - f.draw(); - ok(true, 'Factory API'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AccidentalTests); - - - -/***/ }), - -/***/ "./tests/annotation_tests.ts": -/*!***********************************!*\ - !*** ./tests/annotation_tests.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AnnotationTests": () => (/* binding */ AnnotationTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_vibrato__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Annotation Tests -// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???); -// Did a previous version of the API accept a number as the fourth argument? -// We removed the fourth argument from all of our test cases. - - - - - - - - - - - - - - - - - -const AnnotationTests = { - Start() { - QUnit.module('Annotation'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Placement', placement); - run('Lyrics', lyrics); - run('Simple Annotation', simple); - run('Styled Annotation', styling); - run('Standard Notation Annotation', standard); - run('Harmonics', harmonic); - run('Fingerpicking', picking); - run('Bottom Annotation', bottom); - run('Bottom Annotations with Beams', bottomWithBeam); - run('Test Justification Annotation Stem Up', justificationStemUp); - run('Test Justification Annotation Stem Down', justificationStemDown); - run('TabNote Annotations', tabNotes); - }, -}; -const FONT_SIZE = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size; -// Helper functions to create TabNote and StaveNote objects. -const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteStruct); -const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote(noteStruct); -/** - * Show lyrics using Annotation objects. - */ -function lyrics(options) { - let fontSize = FONT_SIZE; - let x = 10; - let width = 170; - let ratio = 1; - const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry(); - _src_registry__WEBPACK_IMPORTED_MODULE_9__.Registry.enableDefaultRegistry(registry); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 260); - // Add three groups of staves. Each time we increase the fontSize by 2. - for (let i = 0; i < 3; ++i) { - const score = f.EasyScore(); - score.set({ time: '3/4' }); - const system = f.System({ width, x }); - system.addStave({ - voices: [ - score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), - ], - }); - // Add lyrics under the first row. - ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { - const verse = Math.floor(ix / 3); - const noteGroupID = 'n' + (ix % 3); - const noteGroup = registry.getElementById(noteGroupID); - const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); - lyricsAnnotation.setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW); - noteGroup.addModifier(lyricsAnnotation, verse); - }); - // Second row doesn't have any lyrics. - system.addStave({ - voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], - }); - f.draw(); - ratio = (fontSize + 2) / fontSize; - width = width * ratio; - x = x + width; - fontSize = fontSize + 2; - } - ok(true); -} -function simple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial, sans-serif'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_4__.Bend('Full').setTap('T'), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Annotation'); -} -function standard(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); - const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic'); - const notes = [ - staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Standard Notation Annotation'); -} -function styling(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); - const annotation = (text, style) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); - const notes = [ - staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Standard Notation Annotation'); -} -function harmonic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 12 }, - { str: 3, fret: 12 }, - ], - duration: 'h', - }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Harm.'), 0), - tabNote({ - positions: [{ str: 2, fret: 9 }], - duration: 'h', - }) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('(8va)').setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('A.H.'), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Annotation'); -} -function picking(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); - const notes = [ - tabNote({ - positions: [ - { str: 1, fret: 0 }, - { str: 2, fret: 1 }, - { str: 3, fret: 2 }, - { str: 4, fret: 2 }, - { str: 5, fret: 0 }, - ], - duration: 'h', - }).addModifier(new _src_vibrato__WEBPACK_IMPORTED_MODULE_15__.Vibrato().setVibratoWidth(40), 0), - tabNote({ - positions: [{ str: 6, fret: 9 }], - duration: '8', - }).addModifier(annotation('p').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 3, fret: 9 }], - duration: '8', - }).addModifier(annotation('i').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 2, fret: 9 }], - duration: '8', - }).addModifier(annotation('m').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 1, fret: 9 }], - duration: '8', - }).addModifier(annotation('a').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Fingerpicking'); -} -function placement(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const annotation = (text, fontSize, vj) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, fontSize).setVerticalJustification(vj); - const notes = [ - staveNote({ keys: ['e/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['c/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(annotation('v1', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 14, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(annotation('v1', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 12, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_12__.Stem.DOWN }) - .addModifier(annotation('v1', 10, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'w' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_8__.ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 11, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 16, _src_annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement'); -} -function bottom(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); - const annotation = (text) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text).setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SERIF, FONT_SIZE).setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), - staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), - staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), - staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Bottom Annotation'); -} -function bottomWithBeam(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('good').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('even').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('under').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('beam').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.VerticalJustify.BOTTOM)), - ]; - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_3__.Beam(notes.slice(1)); - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - beam.setContext(ctx).draw(); - ok(true, 'Bottom Annotation with Beams'); -} -function justificationStemUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 650, 950); - ctx.scale(1.5, 1.5); - const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) - .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) - .setJustification(hJustification) - .setVerticalJustification(vJustification); - for (let v = 1; v <= 4; ++v) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), - staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), - staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - } - ok(true, 'Test Justification Annotation'); -} -function justificationStemDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 650, 1000); - ctx.scale(1.5, 1.5); - const annotation = (text, hJustification, vJustification) => new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(text) - .setFont(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF, FONT_SIZE) - .setJustification(hJustification) - .setVerticalJustification(vJustification); - for (let v = 1; v <= 4; ++v) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_10__.Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), - staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), - staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - } - ok(true, 'Test Justification Annotation'); -} -function tabNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial, sans-serif'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_14__.TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '8', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - ]; - const notes1 = specs.map((noteSpec) => { - const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); - note.render_options.draw_stem = true; - return note; - }); - const notes2 = specs.map((noteSpec) => { - const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec); - note.render_options.draw_stem = true; - note.setStemDirection(-1); - return note; - }); - const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_13__.TabNote(noteSpec)); - notes1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(1).setVerticalJustification(1)); // U - notes1[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(2).setVerticalJustification(2)); // D - notes1[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U - notes1[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(4).setVerticalJustification(4)); // D - notes2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(1)); // U - notes2[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(2)); // D - notes2[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(3)); // U - notes2[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setJustification(3).setVerticalJustification(4)); // D - notes3[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(1)); // U - notes3[1].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(2)); // D - notes3[2].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(3)); // U - notes3[3].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('Text').setVerticalJustification(4)); // D - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_16__.Voice.Mode.SOFT); - voice.addTickables(notes1); - voice.addTickables(notes2); - voice.addTickables(notes3); - // Alternatively, you could add all the notes in one big array with spread syntax. - // voice.addTickables([...notes1, ...notes2, ...notes3]); - new _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AnnotationTests); - - - -/***/ }), - -/***/ "./tests/articulation_tests.ts": -/*!*************************************!*\ - !*** ./tests/articulation_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ArticulationTests": () => (/* binding */ ArticulationTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Articulation Tests - - - - - - - - - - - - - - -const ArticulationTests = { - Start() { - QUnit.module('Articulation'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Articulation - Vertical Placement', verticalPlacement); - run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); - run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); - run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); - run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); - run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); - run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); - run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); - run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); - run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); - run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); - run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); - run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); - }, -}; -// Helper function for creating StaveNotes. -function drawArticulations(options) { - const sym1 = options.params.sym1; - const sym2 = options.params.sym2; - const width = 125 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 675, 195); - const ctx = f.getContext(); - expect(0); - let x = 10; - const y = 30; - const score = f.EasyScore(); - const formatAndDrawToWidth = (x, y, width, notes, barline) => { - const voices = [score.voice(notes, { time: '4/4' })]; - const formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); - formatter.format(voices, nwidth); - const stave = f - .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) - .setEndBarType(barline) - .setContext(ctx) - .draw(); - voices.forEach((voice) => voice.draw(ctx, stave)); - return stave.getWidth(); - }; - // bar 1 - const notesBar1 = [ - f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - ]; - notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); - notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); - notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - // Helper function to justify and draw a 4/4 voice - x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); - // bar 2 - juxtaposing second bar next to first bar - const notesBar2 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); - notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(4), 0); - // Helper function to justify and draw a 4/4 voice - x += formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); - // bar 3 - juxtaposing second bar next to first bar - const notesBar3 = [ - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - ]; - notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - notesBar3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - notesBar3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); - notesBar3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); - // Helper function to justify and draw a 4/4 voice - x += formatAndDrawToWidth(x, y, width, notesBar3, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); - // bar 4 - juxtaposing second bar next to first bar - const notesBar4 = [ - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar4[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); - notesBar4[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(3), 0); - notesBar4[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - notesBar4[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - // Helper function to justify and draw a 4/4 voice - formatAndDrawToWidth(x, y, width, notesBar4, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.END); -} -function drawFermata(options) { - const sym1 = options.params.sym1; - const sym2 = options.params.sym2; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 195); - const ctx = f.getContext(); - const score = f.EasyScore(); - const width = 150 - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding; - let x = 50; - const y = 30; - const formatAndDrawToWidth = (x, y, width, notes, barline) => { - const voices = [score.voice(notes, { time: '4/4' })]; - const formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); - formatter.format(voices, nwidth); - const stave = f - .Stave({ x, y, width: nwidth + _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding }) - .setEndBarType(barline) - .setContext(ctx) - .draw(); - voices.forEach((voice) => voice.draw(ctx, stave)); - return stave.getWidth(); - }; - expect(0); - const notesBar1 = [ - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), - ]; - notesBar1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - notesBar1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - x += formatAndDrawToWidth(x, y, width, notesBar1, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.NONE); - // bar 2 - juxtaposing second bar next to first bar - const notesBar2 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym1).setPosition(3), 0); - notesBar2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - notesBar2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation(sym2).setPosition(4), 0); - // Helper function to justify and draw a 4/4 voice - formatAndDrawToWidth(x, y, width, notesBar2, _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline.type.DOUBLE); -} -function verticalPlacement(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement'); -} -function verticalPlacement2(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const staveNote = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote(noteStruct); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortBelow'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongBelow'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortBelow'), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongBelow'), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.BELOW).setBetweenLines(), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoBelow').setBetweenLines(), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataBelow'), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataShortAbove'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataLongAbove'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryShortAbove'), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove'), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataVeryLongAbove'), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_10__.Stem.DOWN }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('augmentationDot').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_6__.ModifierPosition.ABOVE).setBetweenLines(), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('articTenutoAbove').setBetweenLines(), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('fermataAbove'), 0), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement (Glyph codes)'); -} -function drawArticulations2(options) { - expect(0); - const scale = 0.8; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 195); - // Get the rendering context - const ctx = f.getContext(); - ctx.scale(scale, scale); - // bar 1 - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 500).setContext(ctx).draw(); - const notesBar1 = [ - f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), - ]; - let i; - for (i = 0; i < 16; i++) { - notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); - notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); - if (i === 15) { - notesBar1[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); - } - } - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(0, 8)); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1.slice(8, 16)); - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave1, notesBar1); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - // bar 2 - juxtaposing second bar next to first bar - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(510, 50, 500).setContext(ctx).draw(); - const notesBar2 = [ - f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), - ]; - for (i = 0; i < 16; i++) { - notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); - notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a^').setPosition(3), 0); - if (i === 15) { - notesBar2[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@u').setPosition(4), 0); - } - } - const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(0, 8)); - const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2.slice(8, 16)); - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave2, notesBar2); - beam3.setContext(ctx).draw(); - beam4.setContext(ctx).draw(); - // bar 3 - juxtaposing second bar next to first bar - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1010, 50, 100).setContext(ctx).draw(); - const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; - notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(3), 0); - notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); - notesBar3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a@a').setPosition(3), 0); - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave3, notesBar3); - // bar 4 - juxtaposing second bar next to first bar - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(1110, 50, 250).setContext(ctx).draw(); - const notesBar4 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - for (i = 0; i < 4; i++) { - let position1 = 3; - if (i > 1) { - position1 = 4; - } - notesBar4[i].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a-').setPosition(position1), 0); - } - _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter.FormatAndDraw(ctx, stave4, notesBar4); -} -function tabNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt ' + _src_font__WEBPACK_IMPORTED_MODULE_4__.Font.SANS_SERIF; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_12__.TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '8', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - ]; - const notes1 = specs.map((noteSpec) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - const notes2 = specs.map((noteSpec) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec); - tabNote.render_options.draw_stem = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - const notes3 = specs.map((noteSpec) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_11__.TabNote(noteSpec)); - notes1[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); // U - notes1[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); // D - notes1[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); // U - notes1[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); // D - notes2[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); - notes2[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); - notes2[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); - notes2[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); - notes3[0].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(3), 0); - notes3[1].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a>').setPosition(4), 0); - notes3[2].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(3), 0); - notes3[3].addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation('a.').setPosition(4), 0); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_13__.Voice.Mode.SOFT); - voice.addTickables(notes1); - voice.addTickables(notes2); - voice.addTickables(notes3); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ArticulationTests); - - - -/***/ }), - -/***/ "./tests/auto_beam_formatting_tests.ts": -/*!*********************************************!*\ - !*** ./tests/auto_beam_formatting_tests.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AutoBeamFormattingTests": () => (/* binding */ AutoBeamFormattingTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Auto Beaming Tests -// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[]. -// Is there a cleaner way to handle this? - - - - - -const AutoBeamFormattingTests = { - Start() { - QUnit.module('Auto-Beaming'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Auto Beaming', simpleAuto); - run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); - run('Even Group Stem Directions', evenGroupStemDirections); - run('Odd Group Stem Directions', oddGroupStemDirections); - run('Odd Beam Groups Auto Beaming', oddBeamGroups); - run('More Simple Auto Beaming 0', moreSimple0); - run('More Simple Auto Beaming 1', moreSimple1); - run('Beam Across All Rests', beamAcrossAllRests); - run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); - run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); - run('Break Beams on Rest', breakBeamsOnRests); - run('Maintain Stem Directions', maintainStemDirections); - run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); - run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); - run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); - run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); - run('Custom Beam Groups', customBeamGroups); - run('Simple Tuplet Auto Beaming', simpleTuplets); - run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); - run('More Automatic Beaming', moreBeaming); - run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); - run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); - run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); - run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); - run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); - run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); - run('Flat Beams Up', flatBeamsUp); - run('Flat Beams Down', flatBeamsDown); - run('Flat Beams Mixed Direction', flatBeamsMixed); - run('Flat Beams Up (uniform)', flatBeamsUpUniform); - run('Flat Beams Down (uniform)', flatBeamsDownUniform); - run('Flat Beams Up Bounds', flatBeamsUpBounds); - run('Flat Beams Down Bounds', flatBeamsDownBounds); - }, -}; -function simpleAuto(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); - // Takes a voice and returns its auto beams. - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function simpleAutoWithOverflowGroup(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - // Add a . after a note (e.g., f5/4.) to make it a dotted note. - const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { - time: '4/4', - }); - // Takes a voice and returns its auto beams. - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function evenGroupStemDirections(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); - // Takes a voice and returns its auto beams. - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); - equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); - equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); - equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); - equal(beams[4].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); - equal(beams[5].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); - ok(true, 'Auto Beaming Applicator Test'); -} -function oddGroupStemDirections(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { - time: '15/8', - }); - const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]; - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); - equal(beams[0].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); - equal(beams[1].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN); - equal(beams[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.UP); - equal(beams[3].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_4__.Stem.DOWN, 'Notes are equidistant from middle line'); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function oddBeamGroups(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); - const groups = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(1, 8)]; - // Takes a voice and returns its auto beams. - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, groups); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimple0(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimple1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function breakBeamsOnRests(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: false, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossAllRestsWithStemlets(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - show_stemlets: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossAllRests(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossMiddleRests(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - beam_middle_only: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function maintainStemDirections(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave(); - const score = f.EasyScore(); - // EasyScore.notes(line, ...) ignores whitespace in the line string. - const voice = score.voice(score.notes([ - 'b4/16, b4, b4[stem="down"], b4/r', - 'b4/r, b4[stem="down"], b4, b4', - 'b4[stem="down"], b4[stem="down"], b4, b4/r', - 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', - ].join(', '), { stem: 'up' }), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function maintainStemDirectionsBeamAcrossRests(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'b4/16, b4, b4[stem="down"], b4/r', - 'b4/r, b4[stem="down"], b4, b4', - 'b4[stem="down"], b4[stem="down"], b4, b4/r', - 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', - ].join(', '), { stem: 'up' }), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function groupWithUnbeamableNote(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave().addTimeSignature('2/4'); - const score = f.EasyScore(); - const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 2)], - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function groupWithUnbeamableNote1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave().addTimeSignature('6/8'); - const score = f.EasyScore(); - const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - groups: [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)], - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function autoOddBeamGroups(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); - const score = f.EasyScore(); - const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); - const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); - const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); - const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); - const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); - const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { - time: '13/16', - }); - // Flatten the arrays into a single Beam[]. - const beams = [ - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/4')), - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('5/8')), - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('13/16')), - ]; - f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); - _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function customBeamGroups(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 400); - const score = f.EasyScore(); - const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); - const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); - const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); - const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); - const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); - const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); - const group1 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(5, 8)]; - const group2 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]; - const group3 = [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(7, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 16), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(4, 16)]; - // Flatten the three Beam[] into a single Beam[]. - // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b). - const beams = [ - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice1, undefined, group1), - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice2, undefined, group2), - ..._src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice3, undefined, group3), - ]; - f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); - _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers([stave1, stave2, stave3]); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -/** - * Helper function which uses Function.prototype.bind() to create shortcut methods. - * This can improve the readability of large blocks of EasyScore code. - */ -function createShortcuts(score) { - return { - notes: score.notes.bind(score), - tuplet: score.tuplet.bind(score), - }; -} -function simpleTuplets(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4, c5')), - ...notes('g5/8, a5'), - ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), - ], { time: '3/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimpleTuplets(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreBeaming(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.getDefaultBeamGroups('9/8')); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroups1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { - time: '8/4', - }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow3(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, undefined, [new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(2, 8), new _src_fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(3, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function secondaryBreaks1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'f5/32, f5, f5, f5, f5/16., f5/32', - 'f5/16, f5/8, f5/16', - 'f5/32, f5/16., f5., f5/32', - 'f5/16., f5/32, f5, f5/16.', - ].join(','))); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Duration-Based Secondary Breaks Test'); -} -function secondaryBreaks2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - tuplet(notes('e5/16, f5, f5')), - tuplet(notes('f5/16, f5, c5')), - notes('a4/16., f4/32'), - tuplet(notes('d4/16, d4, d4')), - tuplet(notes('a5/8, (e5 g5), a5')), - tuplet(notes('f5/16, f5, f5')), - tuplet(notes('f5/16, f5, a4')), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Duration-Based Secondary Breaks Test'); -} -function flatBeamsUp(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - tuplet(notes('c4/8, g4, f5')), - notes('d5/8'), - tuplet(notes('c5/16, (c4 e4 g4), f4')), - notes('d5/8, e5, c4, f5/32, f5, f5, f5'), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up Test'); -} -function flatBeamsDown(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down Test'); -} -function flatBeamsMixed(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { flat_beams: true }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Mixed Direction Test'); -} -function flatBeamsUpUniform(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4, g5')), - ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), - ]); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 50, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up (uniform) Test'); -} -function flatBeamsDownUniform(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 155, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down (uniform) Test'); -} -function flatBeamsUpBounds(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4/8, g5/8')), - ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), - ]); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 60, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up (uniform) Test'); -} -function flatBeamsDownBounds(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', - 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', - 'g5/8, (e4 g4 b4)/16, e5/16', - 'd5/8, e5/8', - ].join(','), { stem: 'down' })); - const beams = _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 145, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down (uniform) Test'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(AutoBeamFormattingTests); - - - -/***/ }), - -/***/ "./tests/bach_tests.ts": -/*!*****************************!*\ - !*** ./tests/bach_tests.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BachDemoTests": () => (/* binding */ BachDemoTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Bach Demo - - -const BachDemoTests = { - Start() { - QUnit.module('Bach Demo'); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Minuet 1', minuet1); - }, -}; -function minuet1(options) { - const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); - // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later. - const id = (id) => registry.getElementById(id); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1100, 900); - const score = f.EasyScore({ throwOnError: true }); - // Bind these three functions so the code looks cleaner. - // Instead of score.voice(...), just call voice(...). - const voice = score.voice.bind(score); - const notes = score.notes.bind(score); - const beam = score.beam.bind(score); - let x = 120; - let y = 80; - function appendSystem(width) { - const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); - x += width; - return system; - } - score.set({ time: '3/4' }); - /* Measure 1 */ - let system = appendSystem(220); - system - .addStave({ - voices: [ - voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), - ], - }) - .addClef('treble') - .addKeySignature('G') - .addTimeSignature('3/4') - .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); - system - .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G') - .addTimeSignature('3/4'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m1a').addModifier(f.Fingering({ number: '5' }), 0); - /* Measure 2 */ - system = appendSystem(150); - system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); - system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - f.Curve({ - from: id('m1a'), - to: id('m2a'), - options: { - cps: [ - { x: 0, y: 40 }, - { x: 0, y: 40 }, - ], - }, - }); - /* Measure 3 */ - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], - }); - id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - /* Measure 4 */ - system = appendSystem(150); - system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); - system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - f.Curve({ - from: id('m3a'), - to: id('m4a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - }, - }); - /* Measure 5 */ - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], - }); - id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - /* Measure 6 */ - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], - }); - system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - f.Curve({ - from: id('m5a'), - to: id('m6a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - invert: true, - position_end: 'nearTop', - y_shift: 20, - }, - }); - /* Measure 7 (New system) */ - x = 20; - y += 230; - system = appendSystem(220); - system - .addStave({ - voices: [ - voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }) - .addClef('treble') - .addKeySignature('G'); - system - .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); - id('m7b').addModifier(f.Fingering({ number: '1' }), 0); - id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - /* Measure 8 */ - system = appendSystem(180); - const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '8', slash: true }); - system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); - system.addStave({ - voices: [ - score - .set({ clef: 'bass' }) - .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addConnector('singleRight'); - id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); - id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); - f.Curve({ - from: id('m7a'), - to: id('m8c'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - invert: true, - position: 'nearTop', - position_end: 'nearTop', - }, - }); - f.StaveTie({ from: grace, to: id('m8c') }); - /* Measure 9 */ - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m9a').addModifier(f.Fingering({ number: '5' }), 0); - /* Measure 10 */ - system = appendSystem(170); - system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); - system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m10d').addModifier(f.Fingering({ number: '4' }), 0); - f.Curve({ - from: id('m9a'), - to: id('m10a'), - options: { - cps: [ - { x: 0, y: 40 }, - { x: 0, y: 40 }, - ], - }, - }); - /* Measure 11 */ - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], - }); - id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - /* Measure 12 */ - system = appendSystem(170); - system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); - system.addStave({ - voices: [ - score - .set({ clef: 'bass' }) - .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addConnector('singleRight'); - id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); - id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - f.Curve({ - from: id('m11a'), - to: id('m12a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - }, - }); - /* Measure 13 (New system) */ - x = 20; - y += 230; - system = appendSystem(220); - system - .addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }) - .addClef('treble') - .addKeySignature('G'); - system - .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - id('m13b').addModifier(f.Fingering({ number: '1' }), 0); - id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - /* Measure 14 */ - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m14a').addModifier(f.Fingering({ number: '2' }), 0); - id('m14b').addModifier(f.Fingering({ number: '1' }), 0); - /* Measure 15 */ - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m15a').addModifier(f.Fingering({ number: '2' }), 0); - id('m15b').addModifier(f.Fingering({ number: '2' }), 0); - /* Measure 16 */ - system = appendSystem(130); - system - .addStave({ - voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat))], - }) - .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); - system - .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) - .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_END); - system.addConnector('boldDoubleRight'); - id('m16a').addModifier(f.Fingering({ number: '1' }), 0); - id('m16b').addModifier(f.Fingering({ number: '1' }), 0); - f.Curve({ - from: id('m13a'), - to: id('m16a'), - options: { - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 20 }, - ], - invert: true, - position_end: 'nearTop', - }, - }); - /* Measure 17 */ - system = appendSystem(180); - system - .addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), - ], - }) - .setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); - system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarlineType.REPEAT_BEGIN); - system.addConnector('boldDoubleLeft'); - system.addConnector('singleRight'); - id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); - /* Measure 18 */ - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ], - }); - system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - f.Curve({ - from: id('m17a'), - to: id('m18b'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 30 }, - ], - }, - }); - /* Done */ - f.draw(); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.disableDefaultRegistry(); - ok(true, 'Bach Minuet 1'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BachDemoTests); - - - -/***/ }), - -/***/ "./tests/barline_tests.ts": -/*!********************************!*\ - !*** ./tests/barline_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BarlineTests": () => (/* binding */ BarlineTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Barline Tests - - -const BarlineTests = { - Start() { - QUnit.module('Barline'); - test('Enums', enums); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple BarNotes', simple); - run('Style BarNotes', style); - }, -}; -function enums() { - // VexFlow 4.0 renamed Barline.type => BarlineType. - // The old way still works, for backwards compatibility. - equal(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type, _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType); - const a = _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.DOUBLE; - const b = _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.DOUBLE; - equal(a, b); -} -function simple(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); - const stave = f.Stave(); - const notes = [ - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), - f.BarNote({ type: 'single' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]; - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function style(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 380, 160); - const stave = f.Stave(); - const notes = [ - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), - f.BarNote({ type: 'single' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]; - notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Style'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BarlineTests); - - - -/***/ }), - -/***/ "./tests/beam_tests.ts": -/*!*****************************!*\ - !*** ./tests/beam_tests.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BeamTests": () => (/* binding */ BeamTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Beam Tests -// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[]. - - -const BeamTests = { - Start() { - QUnit.module('Beam'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Beam', simple); - run('Multi Beam', multi); - run('Sixteenth Beam', sixteenth); - run('Slopey Beam', slopey); - run('Auto-stemmed Beam', autoStem); - run('Mixed Beam 1', mixed); - run('Mixed Beam 2', mixed2); - run('Dotted Beam', dotted); - run('Partial Beam', partial); - run('Close Trade-offs Beam', tradeoffs); - run('Insane Beam', insane); - run('Lengthy Beam', lenghty); - run('Outlier Beam', outlier); - run('Break Secondary Beams', breakSecondaryBeams); - run('Partial Beam Direction', partialBeamDirection); - run('TabNote Beams Up', tabBeamsUp); - run('TabNote Beams Down', tabBeamsDown); - run('TabNote Auto Create Beams', autoTabBeams); - run('TabNote Beams Auto Stem', tabBeamsAutoStem); - run('Complex Beams with Annotations', complexWithAnnotation); - run('Complex Beams with Articulations', complexWithArticulation); - run('Complex Beams with Articulations two Staves', complexWithArticulation2); - }, -}; -function simple(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voice = score.voice([ - notes('(cb4 e#4 a4)/2'), - beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '2/2' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function multi(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Multi Test'); -} -function sixteenth(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), - beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), - notes('f5/2', { stem: 'up' }), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - voice([ - beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), - beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), - notes('f4/2', { stem: 'down' }), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Sixteenth Test'); -} -function breakSecondaryBeams(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), - beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), - voice([ - beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { - secondaryBeamBreaks: [3, 7], - }), - beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '3/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Breaking Secondary Beams Test'); -} -function partialBeamDirection(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - // Default beaming: - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), - // Force first 16th beam right - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), - // Force first 16th beam left - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat), { time: '9/8' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Partial beam direction test'); -} -function slopey(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voice = score.voice([ - beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), - beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Slopey Test'); -} -function autoStem(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { - time: '6/4', - }); - const notes = voice.getTickables(); - const beams = [ - f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), - ]; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - const UP = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.UP; - const DOWN = _src_index__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN; - equal(beams[0].getStemDirection(), UP); - equal(beams[1].getStemDirection(), UP); - equal(beams[2].getStemDirection(), UP); - equal(beams[3].getStemDirection(), UP); - equal(beams[4].getStemDirection(), DOWN); - equal(beams[5].getStemDirection(), DOWN); - f.draw(); - ok(true, 'AutoStem Beam Test'); -} -function mixed(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); - const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); - [ - [0, 4], - [4, 8], - [8, 12], - ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); - [ - [0, 4], - [4, 8], - [8, 12], - ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true, 'Multi Test'); -} -function mixed2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { - stem: 'up', - }), { time: '31/64' }); - const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { - stem: 'down', - }), { time: '31/64' }); - f.Beam({ notes: voice.getTickables().slice(0, 12) }); - f.Beam({ notes: voice2.getTickables().slice(0, 12) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - ok(true, 'Multi Test'); -} -function dotted(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes.slice(8, 12) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Dotted Test'); -} -function partial(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 3) }); - f.Beam({ notes: notes.slice(3, 9) }); - f.Beam({ notes: notes.slice(9, 13) }); - f.Beam({ notes: notes.slice(13, 17) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Partial Test'); -} -function tradeoffs(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Close Trade-offs Test'); -} -function insane(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 7) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Insane Test'); -} -function lenghty(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Lengthy Test'); -} -function outlier(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', - 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', - ].join())); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - f.draw(); - ok(true, 'Outlier Test'); -} -function tabBeamsUp(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = f.TabStave({ y: 20 }); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - f.Beam({ notes: notes.slice(1, 7) }); - f.Beam({ notes: notes.slice(8, 11) }); - f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); - const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function tabBeamsDown(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); - const stave = f.TabStave({ options: { num_lines: 10 } }); - const specs = [ - { - stem_direction: -1, - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - stem_direction: -1, - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8dd', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[1], notes[1]]); - f.Beam({ notes: notes.slice(1, 7) }); - f.Beam({ notes: notes.slice(8, 11) }); - f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); - f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); - const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function autoTabBeams(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = f.TabStave(); - const specs = [ - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 6, fret: 6 }], duration: '32' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); - const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice, -1); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'All objects have been drawn'); -} -// This tests makes sure the auto_stem functionality is works. -// TabNote stems within a beam group should end up normalized -function tabBeamsAutoStem(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); - const stave = f.TabStave(); - const specs = [ - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - stem_direction: 1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: 1, - }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - // Stems should format down - f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); - // Stems should format up - f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); - const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function complexWithAnnotation(options) { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); - const stave = factory.Stave({ y: 40 }); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const font = { - family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 14, - weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, - style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, - }; - const notes1 = s1.map((struct) => factory - .StaveNote(struct) // - .addModifier(factory.Annotation({ text: '1', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.TOP, font }), 0)); - const notes2 = s2.map((struct) => factory - .StaveNote(struct) // - .addModifier(factory.Annotation({ text: '3', vJustify: _src_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM, font }), 0)); - factory.Beam({ notes: notes1 }); - factory.Beam({ notes: notes2 }); - const voice = factory.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - factory.draw(); - ok(true, 'Complex beam annotations'); -} -function complexWithArticulation(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); - const stave = f.Stave({ y: 40 }); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - f.Beam({ notes: notes1 }); - f.Beam({ notes: notes2 }); - const voice = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - f.draw(); - ok(true, 'Complex beam articulations'); -} -function complexWithArticulation2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); - const system = f.System(); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - f.Beam({ notes: notes1 }); - f.Beam({ notes: notes2 }); - f.Beam({ notes: notes3 }); - f.Beam({ notes: notes4 }); - const voice1 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - const voice2 = f.Voice().setMode(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); - system.addStave({ voices: [voice1] }); - system.addStave({ voices: [voice2] }); - f.draw(); - ok(true, 'Complex beam articulations two staves'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BeamTests); - - - -/***/ }), - -/***/ "./tests/bend_tests.ts": -/*!*****************************!*\ - !*** ./tests/bend_tests.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BendTests": () => (/* binding */ BendTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Bend Tests - - - - - - - - - -const BendTests = { - Start() { - QUnit.module('Bend'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Double Bends', doubleBends); - run('Reverse Bends', reverseBends); - run('Bend Phrase', bendPhrase); - run('Double Bends With Release', doubleBendsWithRelease); - run('Whako Bend', whackoBends); - // TODO: Rename 'Whako Bend' => 'Whacko' - }, -}; -// Helper functions for creating TabNote and Bend objects. -const note = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); -const bendWithText = (text, release = false) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend(text, release); -const bendWithPhrase = (phrase) => new _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend('', false, phrase); -/** - * Bend two strings at a time. - */ -function doubleBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('Full'), 0) - .addModifier(bendWithText('1/2'), 1), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/4'), 0) - .addModifier(bendWithText('1/4'), 1), - // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top. - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'h', - }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); - notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); - ok(true, 'Double Bends'); -} -function doubleBendsWithRelease(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 240); - ctx.scale(1.0, 1.0); - ctx.setBackgroundFillStyle('#FFF'); - ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 1, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/2', true), 0) - .addModifier(bendWithText('Full', true), 1), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - { str: 4, fret: 5 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/4', true), 0) - .addModifier(bendWithText('Monstrous', true), 1) - .addModifier(bendWithText('1/4', true), 2), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'q', - }), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'q', - }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); - notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140)); - ok(true, 'Bend Release'); -} -/** - * Add the bend for note 1 before adding the bend for note 0, - * by swapping the two indexes in .addModifier(modifier, index). - * As a result, the bend curves intersect. - */ -function reverseBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.setFont('10pt Arial'); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'w', - }) - .addModifier(bendWithText('Full'), 1) - .addModifier(bendWithText('1/2'), 0), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - ], - duration: 'w', - }) - .addModifier(bendWithText('1/4'), 1) - .addModifier(bendWithText('1/4'), 0), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'w', - }), - ]; - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const mc = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); - note.addToModifierContext(mc); - const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); - tickContext - .addTickable(note) - .preFormat() - .setX(75 * i); - note.setStave(stave).setContext(ctx).draw(); - _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); - ok(true, 'Bend ' + i); - } -} -function bendPhrase(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SIZE + 'pt ' + _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SANS_SERIF; // Optionally use constants defined in Font. - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const phrase1 = [ - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Monstrous' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, - ]; - const bend1 = bendWithPhrase(phrase1).setContext(ctx); - const notes = [ - note({ - positions: [{ str: 2, fret: 10 }], - duration: 'w', - }).addModifier(bend1, 0), - ]; - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext()); - const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); - tickContext - .addTickable(note) - .preFormat() - .setX(75 * i); - note.setStave(stave).setContext(ctx).draw(); - _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 140); - ok(true, 'Bend ' + i); - } -} -function whackoBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 240); - ctx.scale(1.0, 1.0); - ctx.setBackgroundFillStyle('#FFF'); - ctx.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); - const phrase1 = [ - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, - ]; - const phrase2 = [ - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: 'Full' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.UP, text: '1/2' }, - { type: _src_bend__WEBPACK_IMPORTED_MODULE_1__.Bend.DOWN, text: '' }, - ]; - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 3, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithPhrase(phrase1), 0) - .addModifier(bendWithPhrase(phrase2), 1), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, stave, notes); - _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, notes[0], 140); - ok(true, 'Whacko Bend & Release'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BendTests); - - - -/***/ }), - -/***/ "./tests/boundingbox_tests.ts": -/*!************************************!*\ - !*** ./tests/boundingbox_tests.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBoxTests": () => (/* binding */ BoundingBoxTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Bounding Box Tests - - -const BoundingBoxTests = { - Start() { - QUnit.module('BoundingBox'); - test('Initialization Test', initialization); - test('Merging Text', merging); - }, -}; -function initialization() { - const bb = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(4, 5, 6, 7); - equal(bb.getX(), 4, 'Bad X'); - equal(bb.getY(), 5, 'Bad Y'); - equal(bb.getW(), 6, 'Bad W'); - equal(bb.getH(), 7, 'Bad H'); - bb.setX(5); - equal(bb.getX(), 5, 'Bad X'); -} -function merging() { - const tests = [ - { - type: 'Intersection', - bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 10, 10), - bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 20, 10, 10), - merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 15, 20), - }, - { - type: '1 contains 2', - bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), - bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), - merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), - }, - { - type: '2 contains 1', - bb1: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(15, 15, 10, 10), - bb2: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), - merged: new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox(10, 10, 30, 30), - }, - ]; - tests.forEach((test) => { - const type = test.type; - const bb1 = test.bb1; - const bb2 = test.bb2; - const merged = test.merged; - bb1.mergeWith(bb2); - equal(bb1.getX(), merged.getX(), type + ' - Bad X'); - equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); - equal(bb1.getW(), merged.getW(), type + ' - Bad W'); - equal(bb1.getH(), merged.getH(), type + ' - Bad H'); - }); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BoundingBoxTests); - - - -/***/ }), - -/***/ "./tests/boundingboxcomputation_tests.ts": -/*!***********************************************!*\ - !*** ./tests/boundingboxcomputation_tests.ts ***! - \***********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBoxComputationTests": () => (/* binding */ BoundingBoxComputationTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// BoundingBoxComputation Tests - - -const BoundingBoxComputationTests = { - Start() { - QUnit.module('BoundingBoxComputation'); - test('Point Test', point); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - quadraticParams.forEach((params, index) => { - run(`Quadratic Test ${index}`, quadratic, params); - }); - cubicParams.forEach((params, index) => { - run(`Cubic Test ${index}`, cubic, params); - }); - }, -}; -function point() { - const bboxComp = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); - bboxComp.addPoint(2, 3); - equal(bboxComp.getX1(), 2, 'Bad X1'); - equal(bboxComp.getY1(), 3, 'Bad Y1'); - equal(bboxComp.width(), 0, 'Bad width'); - equal(bboxComp.height(), 0, 'Bad height'); - bboxComp.addPoint(-5, 7); - equal(bboxComp.getX1(), -5, 'Bad X1'); - equal(bboxComp.getY1(), 3, 'Bad Y1'); - equal(bboxComp.width(), 7, 'Bad width'); - equal(bboxComp.height(), 4, 'Bad height'); -} -/** - * Size the context to fit all the points and a small margin. - */ -function createContext(options) { - const points = options.params.points; - let w = points[0]; - let h = points[1]; - for (let i = 2; i < points.length; i += 2) { - w = Math.max(w, points[i]); - h = Math.max(h, points[i + 1]); - } - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, w + 20, h + 20); - const ctx = f.getContext(); - ctx.setLineCap('square'); - return ctx; -} -/** - * Draw a rectangle on the RenderContext. - */ -function rect(ctx, style, lineWidth, x, y, w, h) { - ctx.strokeStyle = style; - ctx.setLineWidth(lineWidth); - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + w, y); - ctx.lineTo(x + w, y + h); - ctx.lineTo(x, y + h); - ctx.lineTo(x, y); - ctx.stroke(); -} -// Each test consists of the control points for a single curve and its expected bounding box. -const quadraticParams = [ - { - points: [10, 10, 100, 20, 110, 110], - box: [10, 10, 100, 100], - }, - { - points: [110, 10, 60, 110, 10, 20], - box: [10, 10, 100, 52.63], - }, - { - points: [10, 10, 30, 20, 50, 30], - box: [10, 10, 40, 20], - }, - { - points: [100, 30, 30, 110, 20, 30], - box: [20, 30, 80, 40], - }, -]; -/** - * - */ -function quadratic(options) { - const points = options.params.points; - const box = options.params.box; - const ctx = createContext(options); - const [x0, y0, x1, y1, x2, y2] = points; - // Draw expected bounding box. - let [bx, by, bw, bh] = box; - rect(ctx, '#0f0', 5, bx, by, bw, bh); - // Compute the bounding box. - const bboxComp = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); - bboxComp.addQuadraticCurve(x0, y0, x1, y1, x2, y2); - // Draw computed bounding box. - [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; - rect(ctx, '#00f', 3, bx, by, bw, bh); - // Regression test for a prior bug: compute the bounding box again, - // this time using the Glyph.getOutlineBoundingBox code path. - const o = [_src_index__WEBPACK_IMPORTED_MODULE_1__.OutlineCode.MOVE, x0, -y0, _src_index__WEBPACK_IMPORTED_MODULE_1__.OutlineCode.QUADRATIC, x2, -y2, x1, -y1]; - const bbox = _src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph.getOutlineBoundingBox(o, 1, 0, 0); - rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); - // Draw curve. - ctx.setLineWidth(1); - ctx.fillStyle = '#000'; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderOutline(ctx, o, 1, 0, 0); - // Draw control points. - ctx.strokeStyle = '#f00'; - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.stroke(); - // Check the expected and computed bounding boxes are close enough. - ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); - ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); - ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); - ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); - ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); - ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); - ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); - ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); -} -// Each test consists of the control points for a single curve and its expected bounding box. -const cubicParams = [ - { - points: [10, 10, 60, 20, 100, 60, 110, 110], - box: [10, 10, 100, 100], - }, - { - points: [10, 10, 35, 110, 85, 110, 110, 10], - box: [10, 10, 100, 75], - }, - { - points: [10, 110, 90, 10, 30, 10, 110, 110], - box: [10, 35, 100, 75], - }, - { - points: [10, 10, 110, 110, 110, 10, 10, 110], - box: [10, 10, 75, 100], - }, - { - points: [10, 10, 130, 110, -10, 110, 110, 10], - box: [10, 10, 100, 75], - }, - { - points: [50, 10, 10, 110, 110, 110, 74, 10], - box: [40.38, 10, 41.59, 75], - }, - { - points: [10, 30, 35, 60, 110, 110, 60, 10], - box: [10, 10, 66.82, 59.37], - }, - { - points: [210, 70, 10, 10, 190, 10, 120, 90], - box: [112.02, 27.23, 97.98, 62.77], - }, - { - points: [20, 10, 210, 90, 10, 90, 100, 38], - box: [20, 10, 85.33, 64.06], - }, - { - points: [60, 14, 10, 14, 90, 14, 70, 14], - box: [43.28, 14, 30.01, 0], - }, - { - points: [10, 60, 20, 100, 100, 20, 110, 60], - box: [10, 48.45, 100, 23.1], - }, -]; -function cubic(options) { - const points = options.params.points; - const box = options.params.box; - const ctx = createContext(options); - const [x0, y0, x1, y1, x2, y2, x3, y3] = points; - // Draw expected bounding box. - let [bx, by, bw, bh] = box; - rect(ctx, '#0f0', 5, bx, by, bw, bh); - // Compute the bounding box. - const bboxComp = new _src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); - bboxComp.addBezierCurve(x0, y0, x1, y1, x2, y2, x3, y3); - // Draw computed bounding box. - [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; - rect(ctx, '#00f', 3, bx, by, bw, bh); - // Regression test for a prior bug: compute the bounding box again, - // this time using the Glyph.getOutlineBoundingBox code path. - const o = [_src_index__WEBPACK_IMPORTED_MODULE_1__.OutlineCode.MOVE, x0, -y0, _src_index__WEBPACK_IMPORTED_MODULE_1__.OutlineCode.BEZIER, x3, -y3, x1, -y1, x2, -y2]; - const bbox = _src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph.getOutlineBoundingBox(o, 1, 0, 0); - rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); - // Draw curve. - ctx.setLineWidth(1); - ctx.fillStyle = '#000'; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderOutline(ctx, o, 1, 0, 0); - // Draw control points. - ctx.strokeStyle = '#f00'; - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.lineTo(x3, y3); - ctx.stroke(); - // Check the expected and computed bounding boxes are close enough. - ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); - ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); - ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); - ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); - ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); - ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); - ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); - ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(BoundingBoxComputationTests); - - - -/***/ }), - -/***/ "./tests/chordsymbol_tests.ts": -/*!************************************!*\ - !*** ./tests/chordsymbol_tests.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ChordSymbolTests": () => (/* binding */ ChordSymbolTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// ChordSymbol Tests - - - - - - - - - -const ChordSymbolTests = { - Start() { - QUnit.module('ChordSymbol'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Chord Symbol With Modifiers', withModifiers); - run('Chord Symbol Font Size Tests', fontSize); - run('Chord Symbol Kerning Tests', kern); - run('Top Chord Symbols', top); - run('Top Chord Symbols Justified', topJustify); - run('Bottom Chord Symbols', bottom); - run('Bottom Stem Down Chord Symbols', bottomStemDown); - run('Double Bottom Chord Symbols', doubleBottom); - }, -}; -// Options for customizing addGlyphOrText() or addGlyph(). -const superscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUPERSCRIPT }; -const subscript = { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_2__.ChordSymbol.symbolModifiers.SUBSCRIPT }; -// Helper function for creating StaveNotes. -const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); -/** Calculate the glyph's width in the current music font. */ -// How is this different from Glyph.getWidth()? The numbers don't match up. -function getGlyphWidth(glyphName) { - // `38` seems to be the `font_scale` specified in many classes, such as - // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? - // - // However, tables.ts specifies: - // NOTATION_FONT_SCALE: 39, - // TABLATURE_FONT_SCALE: 39, - const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_8__.Tables.currentMusicFont(); - const glyph = musicFont.getGlyphs()[glyphName]; - const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); - return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.scaleToPxFrom.pt; -} -function withModifiers(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const notes = [ - note(f, ['c/4'], 'q', chords[0]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('doit')), - note(f, ['c/4'], 'q', chords[1]), - note(f, ['c/4'], 'q', chords[2]).addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_5__.Ornament('fall')), - note(f, ['c/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - const formatter = f.Formatter(); - formatter.joinVoices([voice]); - const voiceW = formatter.preCalculateMinTotalWidth([voice]); - const staffW = voiceW + _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave.defaultPadding + getGlyphWidth('gClef'); - formatter.format([voice], voiceW); - const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); - voice.draw(ctx, staff); - } - let chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall')); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 14 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('add 3', superscript) - .addGlyphOrText('omit 9', subscript) - .addGlyph('rightParenTall')); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall')); - draw(chords, 40); - chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .setFontSize(10) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .setFontSize(16) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - draw(chords, 140); - chords = [ - f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - ]; - draw(chords, 240); - ok(true, 'Font Size Chord Symbol'); -} -function fontSize(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 580); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); - const notes = [ - note(f, ['c/4'], 'q', chords[0]), - note(f, ['c/4'], 'q', chords[1]), - note(f, ['c/4'], 'q', chords[2]), - note(f, ['c/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 12 }) - .addText('F7') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 14 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('add 3', superscript) - .addGlyphOrText('omit 9', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - draw(chords, 40); - chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .setFontSize(10) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .setFontSize(16) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - draw(chords, 140); - chords = [ - f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - ]; - draw(chords, 240); - ok(true, 'Font Size Chord Symbol'); -} -function kern(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['C/4'], 'q', chords[0]), - note(f, ['C/4'], 'q', chords[1]), - note(f, ['C/4'], 'q', chords[2]), - note(f, ['C/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chords = [ - f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), - f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), - f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), - ]; - draw(chords, 10); - chords = [ - f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), - f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), - ]; - draw(chords, 110); - chords = [ - f.ChordSymbol().addText('A').addGlyph('-'), - f.ChordSymbol().addText('E').addGlyph('-'), - f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), - ]; - draw(chords, 210); - chords = [ - f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('V/V'), - f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), - ]; - draw(chords, 310); - ok(true, 'Chord Symbol Kerning Tests'); -} -function top(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650 * 1.5, 650); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - // Helper function for creating StaveNotes. - const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); - function draw(c1, c2, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), - note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chord1 = f - .ChordSymbol({ reportWidth: false }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', superscript); - let chord2 = f - .ChordSymbol({ reportWidth: false }) - .addText('C') - .setHorizontal('left') - .addGlyphSuperscript('majorSeventh'); - draw(chord1, chord2, 40); - chord1 = f - .ChordSymbol() - .addText('F7') - .addTextSuperscript('(') - .addGlyphOrText('#11b9', superscript) - .addTextSuperscript(')'); - chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); - draw(chord1, chord2, 140); - chord1 = f - .ChordSymbol() - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); - draw(chord1, chord2, 240); - ok(true, 'Top Chord Symbol'); -} -function topJustify(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500 * 1.5, 680); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chord1, chord2, y) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0), - note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); - } - let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); - let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); - draw(chord1, chord2, 40); - chord1 = f - .ChordSymbol({ hJustify: 'center' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', superscript); - chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 140); - chord1 = f - .ChordSymbol({ hJustify: 'right' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 240); - chord1 = f - .ChordSymbol({ hJustify: 'left' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 340); - ok(true, 'Top Chord Justified'); -} -function bottom(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 230); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), - note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), - note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), - note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), - ]; - draw(chords, 10); - ok(true, 'Bottom Chord Symbol'); -} -function bottomStemDown(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 330); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down. - const note = (keys, duration, chordSymbol) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), - note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 2), - note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), - note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords = [ - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), - ]; - draw(chords, 10); - ok(true, 'Bottom Stem Down Chord Symbol'); -} -function doubleBottom(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600 * 1.5, 260); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, chords2, y) { - // Helper function to create a StaveNote with two ChordSymbols attached. - const note = (keys, duration, chordSymbol1, chordSymbol2) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), - note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), - note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), - note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords1 = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), - ]; - const chords2 = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), - ]; - draw(chords1, chords2, 10); - ok(true, '2 Bottom Chord Symbol'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ChordSymbolTests); - - - -/***/ }), - -/***/ "./tests/clef_tests.ts": -/*!*****************************!*\ - !*** ./tests/clef_tests.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ClefTests": () => (/* binding */ ClefTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Clef Tests - -const ClefTests = { - Start() { - QUnit.module('Clef'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Clef Test', draw); - run('Clef End Test', drawEnd); - run('Small Clef Test', drawSmall); - run('Small Clef End Test', drawSmallEnd); - run('Clef Change Test', drawClefChange); - }, -}; -function draw(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('treble') - .addClef('treble', 'default', '8va') - .addClef('treble', 'default', '8vb') - .addClef('alto') - .addClef('tenor') - .addClef('soprano') - .addClef('bass') - .addClef('bass', 'default', '8vb') - .addClef('mezzo-soprano') - .addClef('baritone-c') - .addClef('baritone-f') - .addClef('subbass') - .addClef('percussion') - .addClef('french') - .addEndClef('treble'); - f.draw(); - ok(true, 'all pass'); -} -function drawEnd(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('bass') - .addEndClef('treble') - .addEndClef('treble', 'default', '8va') - .addEndClef('treble', 'default', '8vb') - .addEndClef('alto') - .addEndClef('tenor') - .addEndClef('soprano') - .addEndClef('bass') - .addEndClef('bass', 'default', '8vb') - .addEndClef('mezzo-soprano') - .addEndClef('baritone-c') - .addEndClef('baritone-f') - .addEndClef('subbass') - .addEndClef('percussion') - .addEndClef('french'); - f.draw(); - ok(true, 'all pass'); -} -function drawSmall(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('treble', 'small') - .addClef('treble', 'small', '8va') - .addClef('treble', 'small', '8vb') - .addClef('alto', 'small') - .addClef('tenor', 'small') - .addClef('soprano', 'small') - .addClef('bass', 'small') - .addClef('bass', 'small', '8vb') - .addClef('mezzo-soprano', 'small') - .addClef('baritone-c', 'small') - .addClef('baritone-f', 'small') - .addClef('subbass', 'small') - .addClef('percussion', 'small') - .addClef('french', 'small') - .addEndClef('treble', 'small'); - f.draw(); - ok(true, 'all pass'); -} -function drawSmallEnd(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('bass', 'small') - .addEndClef('treble', 'small') - .addEndClef('treble', 'small', '8va') - .addEndClef('treble', 'small', '8vb') - .addEndClef('alto', 'small') - .addEndClef('tenor', 'small') - .addEndClef('soprano', 'small') - .addEndClef('bass', 'small') - .addEndClef('bass', 'small', '8vb') - .addEndClef('mezzo-soprano', 'small') - .addEndClef('baritone-c', 'small') - .addEndClef('baritone-f', 'small') - .addEndClef('subbass', 'small') - .addEndClef('percussion', 'small') - .addEndClef('french', 'small'); - f.draw(); - ok(true, 'all pass'); -} -function drawClefChange(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 180); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.ClefNote({ type: 'alto', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), - f.ClefNote({ type: 'tenor', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), - f.ClefNote({ type: 'soprano', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), - f.ClefNote({ type: 'bass', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), - f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), - f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), - f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), - f.ClefNote({ type: 'subbass', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), - f.ClefNote({ type: 'french', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), - f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), - f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), - ]; - const voice = f.Voice({ time: '12/4' }).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefTests); - - - -/***/ }), - -/***/ "./tests/crossbeam_tests.ts": -/*!**********************************!*\ - !*** ./tests/crossbeam_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CrossBeamTests": () => (/* binding */ CrossBeamTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Formatter Tests - - -const CrossBeamTests = { - Start() { - QUnit.module('CrossBeam'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - const crossStaveTests = []; - crossStaveTests.push({ - title: 'Single clef mixed 1', - time: '3/4', - voices: [ - { - notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0, 0, 0], - beammask: [1, 1, -1, -1, 0, -1, 1], - clef: 'treble', - }, - ], - }); - crossStaveTests.push({ - title: 'Single clef mixed 2', - time: '3/4', - voices: [ - { - notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0, 0, 0], - beammask: [1, -1, 1, -1, 0, -1, 1], - clef: 'treble', - }, - ], - }); - crossStaveTests.push({ - title: 'Mixed clef voice middle', - time: '2/4', - voices: [ - { - notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0], - beammask: [0, 0, 1, 1, 1], - clef: 'treble', - }, - { - notes: [ - { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, - { notestring: 'E#4/16', clef: 'treble' }, - { notestring: 'C4/4', clef: 'bass' }, - ], - stavemask: [1, 1, 1, 0, 1], - beammask: [1, 1, 1, -1, 0], - clef: 'bass', - }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.forEach((cst) => { - run(cst.title, crossClef, cst); - }); - }, -}; -function crossClef(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.defaultPadding, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - details: { softmaxFactor: 100 }, - autoWidth: true, - debugFormatter: false, - }); - const testdata = options.params; - const voicedata = testdata.voices; - const stavemap = []; - for (let i = 0; i < voicedata.length; ++i) { - const clef = voicedata[i].clef; - stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); - } - for (let i = 0; i < voicedata.length; ++i) { - const stavemask = voicedata[i].stavemask; - let scoreNotes = []; - const voicenotes = voicedata[i].notes; - for (let k = 0; k < voicenotes.length; ++k) { - scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); - } - const beammask = voicedata[i].beammask; - let curGroup = []; - const beamGroups = []; - for (let j = 0; j < scoreNotes.length; ++j) { - const note = scoreNotes[j]; - note.setStave(stavemap[stavemask[j]]); - if (beammask[j] !== 0) { - note.setStemDirection(beammask[j]); - curGroup.push(note); - } - else { - if (curGroup.length) { - beamGroups.push(curGroup); - curGroup = []; - } - } - } - if (curGroup.length) { - beamGroups.push(curGroup); - } - beamGroups.forEach((bg) => { - score.beam(bg); - }); - if (scoreNotes.length > 0) { - const voice = score.voice(scoreNotes, { time: testdata.time }); - system.addVoices([voice]); - } - } - f.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CrossBeamTests); - - - -/***/ }), - -/***/ "./tests/curve_tests.ts": -/*!******************************!*\ - !*** ./tests/curve_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CurveTests": () => (/* binding */ CurveTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_curve__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/curve */ "./src/curve.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Curve Tests - - -const CurveTests = { - Start() { - QUnit.module('Curve'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Curve', simple); - run('Rounded Curve', rounded); - run('Thick Thin Curves', thickThin); - run('Top Curve', top); - }, -}; -/** - * Helper function. Each test case passes in a set of notes and - * a setupCurves() callback which uses Factory.Curve(...) to build the curves. - * Curves can be used to indicate slurs (legato articulation). - */ -function createTest(noteGroup1, noteGroup2, setupCurves) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 200); - const stave = factory.Stave({ y: 50 }); - const score = factory.EasyScore(); - // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[]. - const staveNotes = [ - score.beam(score.notes(...noteGroup1)), - score.beam(score.notes(...noteGroup2)), // group 2 - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); - setupCurves(factory, staveNotes); - const voices = [score.voice(staveNotes, { time: '4/4' })]; - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - ok('Simple Curve'); - }; -} -const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1 -['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2 -(f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - cps: [ - { x: 0, y: 10 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - cps: [ - { x: 0, y: 10 }, - { x: 0, y: 20 }, - ], - }, - }); -}); -const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 -['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 -(f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - x_shift: -10, - y_shift: 30, - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 50 }, - ], - }, - }); -}); -const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 -['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 -(f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - thickness: 10, - x_shift: -10, - y_shift: 30, - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - thickness: 0, - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 50 }, - ], - }, - }); -}); -const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1 -['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2 -(f, notes) => { - f.Curve({ - from: notes[0], - to: notes[7], - options: { - x_shift: -3, - y_shift: 10, - position: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_TOP, - position_end: _src_curve__WEBPACK_IMPORTED_MODULE_1__.CurvePosition.NEAR_HEAD, - cps: [ - { x: 0, y: 20 }, - { x: 40, y: 80 }, - ], - }, - }); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(CurveTests); - - - -/***/ }), - -/***/ "./tests/dot_tests.ts": -/*!****************************!*\ - !*** ./tests/dot_tests.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "DotTests": () => (/* binding */ DotTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Dot Tests - - - - - - - - - - -const DotTests = { - Start() { - QUnit.module('Dot'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Basic', basic); - run('Multi Voice', multiVoice); - }, -}; -/** - * Helper function for the basic test case below. - */ -function showOneNote(note1, stave, ctx, x) { - const modifierContext = new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_4__.ModifierContext(); - note1.setStave(stave).addToModifierContext(modifierContext); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note1).preFormat().setX(x); - note1.setContext(ctx).draw(); - _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note1, 140); -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 1000, 240); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(10, 10, 975); - stave.setContext(ctx); - stave.draw(); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ - keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], - duration: '4', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ - keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], - duration: '16', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ - keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], - duration: '16', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ - keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], - duration: '16', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes[8], notes[9]], { all: true }); - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(notes.length - 2)); - for (let i = 0; i < notes.length; i++) { - showOneNote(notes[i], stave, ctx, 30 + i * 65); - const dots = notes[i].getModifiersByType('Dot'); - ok(dots.length > 0, 'Note ' + i + ' has dots'); - for (let j = 0; j < dots.length; ++j) { - ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); - } - } - beam.setContext(ctx).draw(); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); - ok(true, 'Full Dot'); -} -function multiVoice(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_6__.Stave(30, 45, 700).setContext(ctx).draw(); - const notes1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 0 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 1 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[1]], { index: 2 }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); - const notes2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_7__.StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes2, { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach([notes2[1]], { all: true }); - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes1); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice.Mode.SOFT).addTickables(notes2); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice1, voice2]); - formatter.format([voice1, voice2], 700); - voice1.draw(ctx, stave); - voice2.draw(ctx, stave); - notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 190)); - notes2.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_5__.Note.plotMetrics(ctx, note, 20)); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); - ok(true, 'Full Dot'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(DotTests); - - - -/***/ }), - -/***/ "./tests/easyscore_tests.ts": -/*!**********************************!*\ - !*** ./tests/easyscore_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "EasyScoreTests": () => (/* binding */ EasyScoreTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_easyscore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); -// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// EasyScore Tests - - - - - - - - - -const EasyScoreTests = { - Start() { - QUnit.module('EasyScore'); - test('Basic', basic); - test('Accidentals', accidentals); - test('Durations', durations); - test('Chords', chords); - test('Dots', dots); - test('Types', types); - test('Options', options); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Draw Basic', drawBasicTest); - run('Draw Different KeySignature', drawDiffKeysig); - run('Draw Basic Muted', drawBasicMutedTest); - run('Draw Basic Harmonic', drawBasicHarmonicTest); - run('Draw Basic Slash', drawBasicSlashTest); - run('Draw Ghostnote Basic', drawGhostBasicTest); - run('Draw Ghostnote Dotted', drawGhostDottedTest); - run('Draw Parenthesised', drawParenthesisedTest); - run('Draw Accidentals', drawAccidentalsTest); - run('Draw Beams', drawBeamsTest); - run('Draw Tuplets', drawTupletsTest); - run('Draw Dots', drawDotsTest); - run('Draw Options', drawOptionsTest); - run('Draw Fingerings', drawFingeringsTest); - run('Keys', keys); - }, -}; -/** - * Use Function.prototype.bind() to create shortcut methods. - * This can improve the readability of your EasyScore code. - */ -function createShortcuts(score) { - return { - voice: score.voice.bind(score), - notes: score.notes.bind(score), - beam: score.beam.bind(score), - tuplet: score.tuplet.bind(score), - }; -} -/** - * Test case verifies: - * - all strings in `mustPass` parse correctly - * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`). - */ -function basic() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; - const mustFail = ['', '()', '7', '(c#4 e5 g6']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function accidentals() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = [ - 'c3', - 'c##3, cb3', - 'Cn3', - 'f3//m', - '(c##3 cbb3 cn3), cb3', - 'cbbs7', - 'cbb7', - 'cbss7', - 'cbs7', - 'cb7', - 'cdb7', - 'cd7', - 'c##7', - 'c#7', - 'cn7', - 'c++-7', - 'c++7', - 'c+-7', - 'c+7', - '(cbs3 bbs3 dbs3), ebs3', - '(cd7 cbb3 cn3), cb3', - 'co7', - 'ck7', - ]; - const mustFail = [ - 'ct3', - 'cdbb7', - '(cq cbb3 cn3), cb3', - '(cdd7 cbb3 cn3), cb3', - 'cbbbs7', - 'cbbss7', - 'cbsss7', - 'csbs7', - 'cddb7', - 'cddbb7', - 'cdd7', - 'c##b7', - 'c#bs7', - 'cnb#7', - 'c+#+b-d7', - 'c+--7', - 'c++--7', - 'c+++7', - 'cbk7', - 'cok7', - 'cko7', - 'c#s7', - ]; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function durations() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; - const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function chords() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = [ - '(c5)', - '(c3 e0 g9)', - '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', - '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', - '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', - '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', - ]; - const mustFail = ['(c)']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function dots() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = [ - 'c3/4.', - 'c##3/w.., cb3', - 'f##3/s, cb3/q...', - 'c##3/q, cb3/32', - '(c##3 cbb3 cn3)., cb3', - '(c5).', - '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', - ]; - const mustFail = ['.', 'c.#', 'c#4./4']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function types() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; - const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function options() { - const score = new _src_easyscore__WEBPACK_IMPORTED_MODULE_2__.EasyScore(); - const mustPass = [ - 'c3/4.[foo="bar"]', - 'c##3/w.., cb3[id="blah"]', - 'c##3/q, cb3/32', - '(c##3 cbb3 cn3).[blah="bod4o"], cb3', - '(c5)[fooooo="booo"]', - 'c#5[id="foobar"]', - ]; - const mustFail = ['.[', 'f##3/w[], cb3/q...']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function drawBasicTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice(notes('c#5/h., c5/q', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawDiffKeysig(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice(notes('c5/h., c5/q', { stem: 'up' })), - ], - }) - .addClef('treble') - .addTimeSignature('4/4') - .addKeySignature('D'); - system - .addStave({ - voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass') - .addTimeSignature('4/4'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicMutedTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), - voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicHarmonicTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), - voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicSlashTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), - voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawGhostBasicTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); - const score = f.EasyScore(); - const system = f.System(); - system.addStave({ - voices: [ - score.voice([ - ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), - ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), - ...score.beam(score.notes('d5, c5', { stem: 'up' })), - ], { time: '7/4' }), - score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { - time: '7/4', - }), - ], - }); - f.draw(); - expect(0); -} -function drawGhostDottedTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); - const score = f.EasyScore(); - const system = f.System(); - system.addStave({ - voices: [ - score.voice([ - ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), - ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), - ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), - ], { time: '8/4' }), - score.voice([ - ...score.notes('f#4/4', { stem: 'down' }), - ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), - ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), - ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), - ], { time: '8/4' }), - ], - }); - f.draw(); - expect(0); -} -function drawParenthesisedTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); - _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes1[0], notes1[3]]); - const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); - _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach([notes2[0], notes2[1]]); - system - .addStave({ - voices: [voice(notes1), voice(notes2)], - }) - .addClef('treble'); - const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); - _src_parenthesis__WEBPACK_IMPORTED_MODULE_5__.Parenthesis.buildAndAttach(notes3); - system - .addStave({ - voices: [voice(notes3)], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawAccidentalsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), - voice(notes('c++-5/h., c++5/q', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_6__.StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBeamsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes, beam } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), - ], - }) - .addClef('treble'); - f.draw(); - expect(0); -} -function drawTupletsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes, tuplet, beam } = createShortcuts(score); - // Voice 1, with stems pointed down. - const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { - location: _src_tuplet__WEBPACK_IMPORTED_MODULE_8__.Tuplet.LOCATION_BOTTOM, - }); - const v1_halfNote = notes('c4/h', { stem: 'down' }); - const v1 = voice([...v1_tuplet, ...v1_halfNote]); - // Voice 2, with stems pointed up. - const v2_halfNote = notes('c#5/h.', { stem: 'up' }); - const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); - const v2 = voice([...v2_halfNote, ...v2_tuplet]); - system.addStave({ voices: [v1, v2] }).addClef('treble'); - f.draw(); - expect(0); -} -function drawDotsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], - }) - .addClef('treble'); - f.draw(); - expect(0); -} -function drawOptionsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); - system.addStave({ voices: [score.voice(notes)] }); - f.draw(); - const note0 = notes[0]; - const note1 = notes[1]; - const note0_modifier0 = note0.getModifiers()[0]; - const note0_modifier1 = note0.getModifiers()[1]; - const note1_modifier0 = note1.getModifiers()[0]; - equal(note0.getAttribute('id'), 'foobar'); - ok(note0.hasClass('red')); - ok(note0.hasClass('bold')); - equal(note0_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); - equal(note0_modifier0.type, 'a.'); - equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); - equal(note0_modifier1.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); - equal(note0_modifier1.type, 'a-'); - equal(note0_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); - equal(note0.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.UP); - equal(note1_modifier0.getCategory(), _src_articulation__WEBPACK_IMPORTED_MODULE_1__.Articulation.CATEGORY); - equal(note1_modifier0.type, 'a>'); - equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); - equal(notes[2].getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_7__.Stem.DOWN); -} -function drawFingeringsTest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); - system.addStave({ voices: [score.voice(notes)] }); - f.draw(); - const note0_modifier0 = notes[0].getModifiers()[0]; - equal(note0_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note0_modifier0.getFretHandFinger(), '1'); - equal(note0_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); - const note1_modifier0 = notes[1].getModifiers()[0]; - equal(note1_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note1_modifier0.getFretHandFinger(), '3'); - equal(note1_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.ABOVE); - const note2_modifier0 = notes[2].getModifiers()[0]; - equal(note2_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note2_modifier0.getFretHandFinger(), '5'); - equal(note2_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.BELOW); - const note3_modifiers = notes[3].getModifiers(); - const note3_modifier0 = note3_modifiers[0]; - const note3_modifier1 = note3_modifiers[1]; - const note3_modifier2 = note3_modifiers[2]; - equal(note3_modifier0.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note3_modifier0.getFretHandFinger(), '1'); - equal(note3_modifier0.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); - equal(note3_modifier1.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note3_modifier1.getFretHandFinger(), '3'); - equal(note3_modifier1.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); - equal(note3_modifier2.getCategory(), _src_frethandfinger__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger.CATEGORY); - equal(note3_modifier2.getFretHandFinger(), '5'); - equal(note3_modifier2.getPosition(), _src_modifier__WEBPACK_IMPORTED_MODULE_4__.Modifier.Position.LEFT); -} -function keys(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); - system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); - f.draw(); - equal(notes[0].keys, 'c#/3'); - equal(notes[1].keys, 'c##/3'); - equal(notes[2].keys, 'cb/3'); - equal(notes[3].keys, 'cbb/3'); - equal(notes[4].keys, 'cn/3'); - for (let i = 5; i < notes.length; i++) { - equal(notes[i].keys, 'c/3'); - } -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(EasyScoreTests); - - - -/***/ }), - -/***/ "./tests/factory_tests.ts": -/*!********************************!*\ - !*** ./tests/factory_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FactoryTests": () => (/* binding */ FactoryTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/factory */ "./src/factory.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Factory Tests - - - -const FactoryTests = { - Start() { - QUnit.module('Factory'); - test('Defaults', defaults); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Draw', draw); - run('Draw Tab (repeat barlines must be aligned)', drawTab); - }, -}; -function defaults() { - // Throws RuntimeError: 'HTML DOM element not set in Factory' - throws(() => new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); - const factory = new _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory({ - renderer: { elementId: null, width: 700, height: 500 }, - }); - // eslint-disable-next-line - // @ts-ignore access a protected member for testing purposes. - const options = factory.options; - equal(options.renderer.width, 700); - equal(options.renderer.height, 500); - equal(options.renderer.elementId, null); - equal(options.stave.space, 10); -} -function draw(options) { - const f = _src_factory__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(options.elementId); - f.Stave().setClef('treble'); - f.draw(); - expect(0); -} -function drawTab(options) { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 400); - const system = factory.System({ width: 500 }); - const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); - const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; - system.addStave({ stave, voices }); - const tabStave = factory.TabStave().setClef('tab').setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.Barline.type.REPEAT_BEGIN); - const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; - system.addStave({ stave: tabStave, voices: tabVoices }); - factory.draw(); - equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); - expect(1); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FactoryTests); - - - -/***/ }), - -/***/ "./tests/font_tests.ts": -/*!*****************************!*\ - !*** ./tests/font_tests.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FontTests": () => (/* binding */ FontTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); -/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _src_element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/element */ "./src/element.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_textbracket__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Font Tests - - - - - - - - - - - - -const FontTests = { - Start() { - QUnit.module('Font'); - test('setFont', setFont); - test('Parsing', fontParsing); - test('Sizes', fontSizes); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Set Text Font to Georgia', setTextFontToGeorgia); - run('Set Music Font to Petaluma', setMusicFontToPetaluma); - }, -}; -/** - * Test out the setFont method in various classes. - */ -function setFont() { - // Create a CanvasCntext and call setFont on it. - const canvas = document.createElement('canvas'); - canvas.width = 800; - canvas.height = 400; - // Set the font and get the font to verify that it matches. - // NOTE: Safari has a bug where it does not return the font-weight! - // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088 - const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_3__.CanvasContext(canvas.getContext('2d')); - ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); - equal(ctx.font, 'italic 100px PetalumaScript'); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_11__.Voice(); - // Many elements do not override the default Element.TEXT_FONT. - propEqual(voice.fontInfo, _src_element__WEBPACK_IMPORTED_MODULE_4__.Element.TEXT_FONT); - voice.setFont('bold 32pt Arial'); - const fontInfo = voice.fontInfo; - equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); - const flat = new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'); - // eslint-disable-next-line - // @ts-ignore access a protected member for testing purposes. - equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default. - // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT). - flat.setFont(undefined, undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); - equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); - // Anything that is not set will be reset to the defaults. - flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, undefined); - equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); - equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.BOLD, 'oblique'); - equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); - // '' is equivalent to 'normal'. Neither will be included in the CSS font string. - flat.setFont(undefined, undefined, 'normal', ''); - equal(flat.getFont(), '10pt Arial, sans-serif'); -} -function fontParsing() { - const b = new _src_bend__WEBPACK_IMPORTED_MODULE_2__.Bend('1/2', true); - const bFont = b.fontInfo; - // Check the default font. - equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SANS_SERIF); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.SIZE); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontWeight.NORMAL); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.NORMAL); - const f1 = 'Roboto Slab, serif'; - const t = new _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote({ duration: '4', font: { family: f1 } }); - equal(f1, t.fontInfo.family); - const n1 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['e/5'], duration: '4' }); - const n2 = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['c/5'], duration: '4' }); - const tb = new _src_textbracket__WEBPACK_IMPORTED_MODULE_9__.TextBracket({ start: n1, stop: n2 }); - const f2 = tb.fontInfo; - equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); - equal(f2 === null || f2 === void 0 ? void 0 : f2.style, _src_font__WEBPACK_IMPORTED_MODULE_6__.FontStyle.ITALIC); - // The line-height /3 is currently ignored. - const f3 = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); - const f3SizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(f3.size); - equal(f3SizeInPx, 24); -} -function fontSizes() { - { - const size = '17px'; - const sizeInEm = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size) / _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleToPxFrom.em; - equal(sizeInEm, 1.0625); - } - { - const size = '2em'; - const sizeInPx = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.convertSizeToPixelValue(size); - equal(sizeInPx, 32); - } - { - const pedal = new _src_pedalmarking__WEBPACK_IMPORTED_MODULE_7__.PedalMarking([]); - equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); - equal(pedal.fontSizeInPoints, 12); - equal(pedal.fontSizeInPixels, 16); - const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size. - equal(doubledSizePx, 32); - const doubledSizePt = _src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size. - equal(doubledSizePt, 24); - equal(_src_font__WEBPACK_IMPORTED_MODULE_6__.Font.scaleSize('1.5em', 3), '4.5em'); - } -} -function setTextFontToGeorgia(options) { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); - const stave = factory.Stave({ y: 40 }); - const score = factory.EasyScore(); - const voice1 = score.voice([ - factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), - factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), - factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), - ]); - const defaultFont = _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT; - // Set the default before we instantiate TextNote objects with the factory. - _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = { - family: 'Georgia, Courier New, serif', - size: 14, - weight: 'bold', - style: 'italic', - }; - const voice2 = score.voice([ - factory - .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) - .setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.Justification.LEFT), - ]); - const formatter = factory.Formatter(); - formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - factory.draw(); - // Restore the previous default, or else it will affect the rest of the tests. - _src_textnote__WEBPACK_IMPORTED_MODULE_10__.TextNote.TEXT_FONT = defaultFont; - ok(true); -} -function setMusicFontToPetaluma(options) { - _src_flow__WEBPACK_IMPORTED_MODULE_5__.Flow.setMusicFont('Petaluma'); - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); - const stave = factory.Stave({ y: 40 }); - const score = factory.EasyScore(); - const voice = score.voice([ - factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), - factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), - factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), - ]); - const formatter = factory.Formatter(); - formatter.joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FontTests); - - - -/***/ }), - -/***/ "./tests/formatter_tests.ts": -/*!**********************************!*\ - !*** ./tests/formatter_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FormatterTests": () => (/* binding */ FormatterTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _src_tables__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../src/tables */ "./src/tables.ts"); -/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Formatter Tests - - - - - - - - - - - - - - - - - - - - - - - -const FormatterTests = { - Start() { - QUnit.module('Formatter'); - test('TickContext Building', buildTickContexts); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Penultimate Note Padding', penultimateNote); - run('Whitespace and justify', rightJustify); - run('Notehead padding', noteHeadPadding); - run('Justification and alignment with accidentals', accidentalJustification); - run('Long measure taking full space', longMeasureProblems); - run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); - run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); - run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); - run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); - run('StaveNote - Justification', justifyStaveNotes); - run('Notes with Tab', notesWithTab); - run('Multiple Staves - Justified', multiStaves, { debug: true }); - run('Softmax', softMax); - run('Mixtime', mixTime); - run('Tight', tightNotes1); - run('Tight 2', tightNotes2); - run('Annotations', annotations); - run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); - run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); - run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); - }, -}; -/** Calculate the glyph's width in the current music font. */ -// How is this different from Glyph.getWidth()? The numbers don't match up. -function getGlyphWidth(glyphName) { - // `38` seems to be the `font_scale` specified in many classes, such as - // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`??? - // - // However, tables.ts specifies: - // NOTATION_FONT_SCALE: 39, - // TABLATURE_FONT_SCALE: 39, - const musicFont = _src_tables__WEBPACK_IMPORTED_MODULE_19__.Tables.currentMusicFont(); - const glyph = musicFont.getGlyphs()[glyphName]; - const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); - return widthInEm * 38 * _src_font__WEBPACK_IMPORTED_MODULE_8__.Font.scaleToPxFrom.pt; -} -function buildTickContexts() { - function createTickable(beat) { - return new _mocks__WEBPACK_IMPORTED_MODULE_22__.MockTickable().setTicks(beat); - } - const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.RESOLUTION) / 4; - const tickables1 = [ - createTickable(BEAT).setWidth(10), - createTickable(BEAT * 2).setWidth(20), - createTickable(BEAT).setWidth(30), - ]; - const tickables2 = [ - createTickable(BEAT * 2).setWidth(10), - createTickable(BEAT).setWidth(20), - createTickable(BEAT).setWidth(30), - ]; - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_7__.Flow.TIME4_4); - voice1.addTickables(tickables1); - voice2.addTickables(tickables2); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); - const tContexts = formatter.createTickContexts([voice1, voice2]); - equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); - throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); - ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); - equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); - formatter.preFormat(); - equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); - equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); - equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); - ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); -} -function rightJustify(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1200, 150); - const getTickables = (time, n, duration, duration2) => { - const tickar = []; - let i = 0; - for (i = 0; i < n; ++i) { - const dd = i === n - 1 ? duration2 : duration; - tickar.push(new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['f/4'], duration: dd })); - } - return new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice(time).addTickables(tickar); - }; - const renderTest = (time, n, duration, duration2, x, width) => { - const formatter = f.Formatter(); - const stave = f.Stave({ x, y: 20, width }); - // stave.addClef('treble').addTimeSignature('4/4'); - const voice = getTickables(time, n, duration, duration2); - formatter.joinVoices([voice]).formatToStave([voice], stave); - stave.draw(); - voice.draw(f.getContext(), stave); - }; - renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); - renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); - renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); - renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); - ok(true); -} -function penultimateNote(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 550); - const score = f.EasyScore(); - const staffWidth = 310; - let system = undefined; - let voices = []; - let notes = []; - let note = undefined; - let stave = undefined; - let y = 10; - const draw = (softmax) => { - system = f.System({ - width: staffWidth, - y, - formatOptions: { align_rests: true }, - details: { softmaxFactor: softmax }, - }); - notes = []; - voices = []; - note = score.notes('C4/8/r', { clef: 'bass' })[0]; - notes.push(note); - note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; - notes.push(note); - note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; - notes.push(note); - voices.push(score.voice(notes).setMode(2)); - notes = []; - note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; - notes.push(note); - note = score.notes('B4/4/r', {})[0]; - notes.push(note); - voices.push(score.voice(notes).setMode(2)); - notes = []; - stave = system.addStave({ voices: voices }); - stave.addClef('bass'); - stave.addTimeSignature('2/4'); - voices = []; - f.draw(); - f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); - y += 100; - }; - draw(15); - draw(10); - draw(5); - draw(2); - draw(1); - ok(true); -} -function noteHeadPadding(options) { - const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); - _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); - const score = f.EasyScore(); - score.set({ time: '9/8' }); - const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); - const beams = [new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes1.slice(0, 3), true)]; - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - voice2.addTickables(notes2); - voice1.addTickables(notes1); - const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; - const stave1 = f.Stave({ y: 50, width: staveWidth }); - const stave2 = f.Stave({ y: 150, width: staveWidth }); - stave1.draw(); - stave2.draw(); - voice1.draw(f.getContext(), stave1); - voice2.draw(f.getContext(), stave2); - beams.forEach((b) => b.setContext(f.getContext()).draw()); - ok(true); -} -function longMeasureProblems(options) { - const registry = new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry(); - _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(registry); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 1500, 300); - const score = f.EasyScore(); - score.set({ time: '4/4' }); - const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice().setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - voice2.addTickables(notes2); - voice1.addTickables(notes1); - const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const stave1 = f.Stave({ y: 50, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - const stave2 = f.Stave({ y: 200, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - stave1.draw(); - stave2.draw(); - voice1.draw(f.getContext(), stave1); - voice2.draw(f.getContext(), stave2); - ok(true); -} -function accidentalJustification(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 300); - const score = f.EasyScore(); - const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); - const voice11 = score.voice(notes11, { time: '4/4' }); - const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); - const voice21 = score.voice(notes21, { time: '4/4' }); - let beams = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11.slice(2)); - beams = beams.concat(beams, _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(1, 3))); - beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21.slice(3))); - const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); - const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); - const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - formatter.format([voice11, voice21], width); - const ctx = f.getContext(); - stave11.setContext(ctx).draw(); - stave21.setContext(ctx).draw(); - voice11.draw(ctx, stave11); - voice21.draw(ctx, stave21); - beams.forEach((b) => b.setContext(ctx).draw()); - ok(true); -} -function unalignedNoteDurations1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const notes11 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8' }), - ]; - const notes21 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4.'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '8d' }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([notes21[2]], { all: true }); - const ctx = f.getContext(); - const voice11 = score.voice(notes11, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - const voice21 = score.voice(notes21, { time: '2/4' }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT); - const beams21 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes21); - const beams11 = _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam.generateBeams(notes11); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter(); - formatter.joinVoices([voice11]); - formatter.joinVoices([voice21]); - const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); - const stave11 = f.Stave({ y: 20, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - const stave21 = f.Stave({ y: 130, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding }); - formatter.format([voice11, voice21], width); - stave11.setContext(ctx).draw(); - stave21.setContext(ctx).draw(); - voice11.draw(ctx, stave11); - voice21.draw(ctx, stave21); - beams21.forEach((b) => b.setContext(ctx).draw()); - beams11.forEach((b) => b.setContext(ctx).draw()); - ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); -} -function unalignedNoteDurations2(options) { - const notes1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: '8r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['g/4'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '16' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/5'], duration: '16' }), - ]; - const notes2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['a/4'], duration: '16r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4.'], duration: '8d' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['e/4'], duration: '4' }), - ]; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 280); - const context = f.getContext(); - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); - voice1.addTickables(notes1); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: 4, beat_value: 4 }); - voice2.addTickables(notes2); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ globalSoftmax: options.params.globalSoftmax }); - formatter.joinVoices([voice1]); - formatter.joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 40, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 100, width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding); - stave1.setContext(context).draw(); - stave2.setContext(context).draw(); - voice1.draw(context, stave1); - voice2.draw(context, stave2); - ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); -} -function alignedMixedElements(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); - const context = f.getContext(); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, 200, 400); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(410, 200, 400); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'), 0) - .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) - .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.BELOW), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), - ]; - const notes2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }) - .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_17__.Stem.DOWN }) - .addModifier(new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_10__.FretHandFinger('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_18__.StringNumber('3').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a.').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a^').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('am').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@u').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_11__.ModifierPosition.ABOVE), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('yyyy').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('xxxx').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('ttt').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['c/5'], duration: '8' }), - ]; - const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes).setTupletLocation(-1); - const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_20__.Tuplet(notes2).setTupletLocation(1); - _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave, notes); - _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter.FormatAndDraw(context, stave2, notes2); - stave.setContext(context).draw(); - stave2.setContext(context).draw(); - tuplet.setContext(context).draw(); - tuplet2.setContext(context).draw(); - ok(true); -} -function justifyStaveNotes(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 520, 280); - const ctx = f.getContext(); - const score = f.EasyScore(); - let y = 30; - function justifyToWidth(width) { - f.Stave({ y: y }).addClef('treble'); - const voices = [ - score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), - score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), - ]; - f.Formatter() - .joinVoices(voices) - .format(voices, width - (_src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding + getGlyphWidth('gClef'))); - // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators. - voices[0].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y + 140)); // Bottom line. - voices[1].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, y - 20)); // Top Line - y += 210; - } - justifyToWidth(520); - f.draw(); - ok(true); -} -function notesWithTab(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 420, 580); - const score = f.EasyScore(); - let y = 10; - function justifyToWidth(width) { - const stave = f.Stave({ y: y }).addClef('treble'); - const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); - y += 100; - f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); - const tabVoice = score.voice([ - f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Full'), 0), - f - .TabNote({ - positions: [ - { str: 2, fret: 3 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }) - .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_5__.Bend('Unison'), 1), - f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), - f.TabNote({ - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 2, fret: 5 }, - ], - duration: '4', - }), - ]); - f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); - y += 150; - } - justifyToWidth(0); - justifyToWidth(300); - f.draw(); - ok(true); -} -function multiStaves(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 400); - const ctx = f.getContext(); - const score = f.EasyScore(); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Draw 3 Staves (one measure each). - const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); - const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); - const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - let voices = [ - score.voice(notes11, { time: '6/8' }), - score.voice(notes21, { time: '6/8' }), - score.voice(notes31, { time: '6/8' }), - ]; - let formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - let width = formatter.preCalculateMinTotalWidth(voices); - formatter.format(voices, width); - let beams = [ - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(0, 3), true), - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes21.slice(3, 6), true), - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(0, 3), true), - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes31.slice(3, 6), true), - ]; - const staveYs = [20, 130, 250]; - let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; - let staves = [ - f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), - f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), - f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), - ]; - f.StaveConnector({ - top_stave: staves[1], - bottom_stave: staves[2], - type: 'brace', - }); - for (let i = 0; i < staves.length; ++i) { - staves[i].setContext(ctx).draw(); - voices[i].draw(ctx, staves[i]); - } - beams.forEach((beam) => beam.setContext(ctx).draw()); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Draw 3 more staves (one measure each). - // These are adjacent to the first set of staves, representing the second measure of each stave. - const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); - const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); - const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - voices = [ - score.voice(notes12, { time: '6/8' }), - score.voice(notes22, { time: '6/8' }), - score.voice(notes32, { time: '6/8' }), - ]; - formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - width = formatter.preCalculateMinTotalWidth(voices); - const staveX = staves[0].getX() + staves[0].getWidth(); - staveWidth = width + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding; - staves = [ - f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), - f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), - f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), - ]; - formatter.format(voices, width); - beams = [ - // Add beams to each group of 3 notes. - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(0, 3), true), - new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notes32.slice(3, 6), true), - ]; - for (let i = 0; i < staves.length; ++i) { - staves[i].setContext(ctx).draw(); - voices[i].draw(ctx, staves[i]); - voices[i].getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_12__.Note.plotMetrics(ctx, note, staveYs[i] - 20)); - } - beams.forEach((beam) => beam.setContext(ctx).draw()); - ok(true); -} -function proportional(options) { - const debug = options.params.debug; - _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry()); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 750); - const system = f.System({ - x: 50, - autoWidth: true, - debugFormatter: debug, - noJustification: !(options.params.justify === undefined && true), - formatIterations: options.params.iterations, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const voices = [ - score.notes('c5/8, c5'), - score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), - score.notes('c5/16, c5, c5, c5'), - score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), - score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), - ]; - const createVoice = (notes) => score.voice(notes, { time: '1/4' }); - const createStave = (voice) => system - .addStave({ voices: [voice], debugNoteMetrics: debug }) - .addClef('treble') - .addTimeSignature('1/4'); - voices.map(createVoice).forEach(createStave); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_15__.StaveConnector.type.BRACKET); - f.draw(); - // Debugging: Show how many elements of each type we have added. - // const typeMap = Registry.getDefaultRegistry().index.type; - // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length); - // console.log(table); - _src_registry__WEBPACK_IMPORTED_MODULE_13__.Registry.disableDefaultRegistry(); - ok(true); -} -function softMax(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 500); - const textX = 450 / 0.8; - f.getContext().scale(0.8, 0.8); - function draw(y, factor) { - const score = f.EasyScore(); - const system = f.System({ - x: 100, - y, - details: { softmaxFactor: factor }, - autoWidth: true, - }); - system - .addStave({ - voices: [ - score.voice(score - .notes('C#5/h, a4/q') - .concat(score.beam(score.notes('Abb4/8, A4/8'))) - .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), - ], - }) - .addClef('treble') - .addTimeSignature('5/4'); - f.draw(); - f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); - ok(true); - } - draw(50, 1); - draw(150, 2); - draw(250, 5); - draw(350, 10); - draw(450, 15); -} -function mixTime(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400 + _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave.defaultPadding, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - details: {}, - autoWidth: true, - debugFormatter: true, - }); - system - .addStave({ - voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function tightNotes1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - autoWidth: true, - debugFormatter: true, - details: { maxIterations: 10 }, - }); - system - .addStave({ - voices: [ - score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [ - score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function tightNotes2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 440, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - autoWidth: true, - debugFormatter: true, - }); - system - .addStave({ - voices: [ - score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [score.voice(score.notes('B4/w'))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function annotations(options) { - const pageWidth = 916; - const pageHeight = 600; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, pageWidth, pageHeight); - const context = f.getContext(); - const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; - const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; - const smar = [ - { - sm: 5, - width: 550, - lyrics: lyrics1, - title: '550px,softMax:5', - }, - { - sm: 5, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:5,different word order', - }, - { - sm: 10, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:10', - }, - { - sm: 15, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:15', - }, - ]; - const rowSize = 140; - const beats = 12; - const beatsPer = 8; - const beamGroup = 3; - const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; - const beams = []; - let y = 40; - smar.forEach((sm) => { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_14__.Stave(10, y, sm.width); - const notes = []; - let iii = 0; - context.fillText(sm.title, 100, y); - y += rowSize; - durations.forEach((dd) => { - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_16__.StaveNote({ keys: ['b/4'], duration: dd }); - if (dd.indexOf('d') >= 0) { - _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); - } - if (sm.lyrics.length > iii) { - note.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation(sm.lyrics[iii]) - .setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation.VerticalJustify.BOTTOM) - .setFont(_src_font__WEBPACK_IMPORTED_MODULE_8__.Font.SERIF, 12, _src_font__WEBPACK_IMPORTED_MODULE_8__.FontWeight.NORMAL)); - } - notes.push(note); - iii += 1; - }); - notes.forEach((note) => { - if (note.getDuration().indexOf('d') >= 0) { - _src_dot__WEBPACK_IMPORTED_MODULE_6__.Dot.buildAndAttach([note], { all: true }); - } - }); - // Don't beam the last group - let notesToBeam = []; - notes.forEach((note) => { - if (note.getIntrinsicTicks() < 4096) { - notesToBeam.push(note); - if (notesToBeam.length >= beamGroup) { - beams.push(new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(notesToBeam)); - notesToBeam = []; - } - } - else { - notesToBeam = []; - } - }); - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice({ num_beats: beats, beat_value: beatsPer }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_21__.Voice.Mode.SOFT).addTickables(notes); - const fmt = new _src_formatter__WEBPACK_IMPORTED_MODULE_9__.Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); - fmt.format([voice1], sm.width - 11); - stave.setContext(context).draw(); - voice1.draw(context, stave); - beams.forEach((b) => b.setContext(context).draw()); - }); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FormatterTests); - - - -/***/ }), - -/***/ "./tests/fraction_tests.ts": -/*!*********************************!*\ - !*** ./tests/fraction_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FractionTests": () => (/* binding */ FractionTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Fraction Tests - - -const FractionTests = { - Start() { - QUnit.module('Fraction'); - test('Basic', basic); - test('With Other Fractions', withOtherFractions); - }, -}; -function basic() { - const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); - ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); - ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); - ok(f_1_2.equals(new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); - notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); - ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); - ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); - ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); - notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); - notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); - ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); - ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); - ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); - notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); - const f_05 = f_1_2.copy(0.5); - strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); - strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); - strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); - const tF_n = f_05.clone(); - notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); - notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); - deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); - notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); - tF_n.subtract(-0.5); - ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); - tF_n.add(1); - ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); - tF_n.multiply(2); - ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); - tF_n.divide(2); - ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); - // Lowest common multiple. - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([]), 0); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([17]), 17); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 5]), 10); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([15, 3, 5]), 15); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 4, 6]), 12); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([2, 3, 4, 5]), 60); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.LCMM([12, 15, 10, 75]), 300); - // Greatest common divisor. - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 0), 0); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(0, 99), 99); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(77, 0), 77); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(42, 14), 14); - equal(_src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction.GCD(15, 10), 5); -} -function withOtherFractions() { - const f_1_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 2); - const f_1_4 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4); - const f_1_8 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 8); - const f_2 = new _src_fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 1); - // IMPORTANT NOTE: Fraction methods modify the existing Fraction object. - // They do not return new objects. - // Use clone() if you don't want to modify the original object. - const a = f_1_2.clone().multiply(f_1_2); - ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); - const b = f_1_2.clone().divide(f_1_4); - ok(b.equals(f_2), '1/2 / 1/4 == 2'); - const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4 - const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); - ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); - equal(c.value(), 0.75, '3/4 == 0.75'); - const e = f_1_8.clone().add(f_1_4).add(f_1_8); - ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(FractionTests); - - - -/***/ }), - -/***/ "./tests/ghostnote_tests.ts": -/*!**********************************!*\ - !*** ./tests/ghostnote_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GhostNoteTests": () => (/* binding */ GhostNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// GhostNote Tests - -const GhostNoteTests = { - Start() { - QUnit.module('GhostNote'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('GhostNote Basic', basic); - run('GhostNote Dotted', dotted); - }, -}; -/** - * Helper function to set up the stave, easyscore, voice, and to format & draw. - */ -function createTest(addItems) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); - const stave = factory.Stave(); - const score = factory.EasyScore(); - addItems(factory, score); - const voices = factory.getVoices(); - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - ok(true, 'all pass'); - }; -} -const basic = createTest((f, score) => { - // Top Voice - const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { - time: '7/4', - }); - const notesTop = voiceTop.getTickables(); - f.Beam({ notes: notesTop.slice(4, 8) }); - f.Beam({ notes: notesTop.slice(8, 10) }); - // Bottom Voice - score.voice([ - f.GhostNote({ duration: '2' }), - f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - f.GhostNote({ duration: '4' }), - f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), - f.GhostNote({ duration: '8' }), - f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), - f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), - ], { time: '7/4' }); -}); -/** - * A ghost note is invisible, but takes up space on the stave corresponding to its duration. - * '4d' is a dotted quarter note, equivalent to a quarter + eighth note. - */ -const dotted = createTest((f, score) => { - const voice1 = score.voice([ - f.GhostNote({ duration: '4d' }), - f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), - f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), - f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), - f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), - f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), - f.GhostNote({ duration: '2dd' }), - f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), - ], { time: '8/4' }); - const voice2 = score.voice([ - f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), - f.GhostNote({ duration: '4dd' }), - f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), - f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), - f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), - ], { time: '8/4' }); - const notes1 = voice1.getTickables(); - const notes2 = voice2.getTickables(); - const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); - addAccidental(notes1[1], 'bb'); - addAccidental(notes1[4], '#'); - addAccidental(notes1[7], 'n'); - addAccidental(notes2[0], '#'); - addAccidental(notes2[4], 'b'); - addAccidental(notes2[5], '#'); - addAccidental(notes2[7], 'n'); - f.Beam({ notes: notes1.slice(3, 6) }); - f.Beam({ notes: notes2.slice(1, 3) }); - f.Beam({ notes: notes2.slice(7, 9) }); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GhostNoteTests); - - - -/***/ }), - -/***/ "./tests/glyphnote_tests.ts": -/*!**********************************!*\ - !*** ./tests/glyphnote_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GlyphNoteTests": () => (/* binding */ GlyphNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); -/* harmony import */ var _src_registry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/registry */ "./src/registry.ts"); -/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// GlyphNote Tests - - - - - -const GlyphNoteTests = { - Start() { - QUnit.module('GlyphNote'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); - run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); - run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); - run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); - }, -}; -function chordChanges(options) { - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 200); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const notes = [ - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: 'q' }), - ]; - const chord1 = f - .ChordSymbol({ reportWidth: false }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }); - const chord2 = f - .ChordSymbol() - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUPERSCRIPT }) - .addGlyphOrText('b9', { symbolModifier: _src_chordsymbol__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol.symbolModifiers.SUBSCRIPT }); - notes[0].addModifier(chord1, 0); - notes[2].addModifier(chord2, 0); - const voice = score.voice(notes); - system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); - f.draw(); - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); - ok(true); -} -function basic(options) { - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 400); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const newVoice = (notes) => score.voice(notes, { time: '1/4' }); - const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - const voices = [ - [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], - [f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], - [ - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeat4Bars', 40), { duration: '16' }), - f.GlyphNote(new _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('repeatBarSlash', 40), { duration: '16' }), - ], - ]; - voices.map(newVoice).forEach(newStave); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); - f.draw(); - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); - ok(true); -} -function repeatNote(options) { - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.enableDefaultRegistry(new _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry()); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300, 500); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const createVoice = (notes) => score.voice(notes, { time: '1/4' }); - const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - const voices = [ - [f.RepeatNote('1')], - [f.RepeatNote('2')], - [f.RepeatNote('4')], - [ - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - ], - ]; - voices.map(createVoice).forEach(addStaveWithVoice); - system.addConnector().setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_4__.StaveConnector.type.BRACKET); - f.draw(); - _src_registry__WEBPACK_IMPORTED_MODULE_3__.Registry.disableDefaultRegistry(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GlyphNoteTests); - - - -/***/ }), - -/***/ "./tests/gracenote_tests.ts": -/*!**********************************!*\ - !*** ./tests/gracenote_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceNoteTests": () => (/* binding */ GraceNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// GraceNote Tests -// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly. - - - - - - -const GraceNoteTests = { - Start() { - QUnit.module('Grace Notes'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Grace Note Basic', basic); - run('With Articulation and Annotation on Parent Note', graceNoteModifiers); - run('Grace Note Basic with Slurs', basicSlurred); - run('Grace Note Stem', stem); - run('Grace Note Stem with Beams 1', stemWithBeamed, { - keys1: ['g/4'], - stemDirection1: 1, - keys2: ['d/5'], - stemDirection2: -1, - }); - run('Grace Note Stem with Beams 2', stemWithBeamed, { - keys1: ['a/3'], - stemDirection1: 1, - keys2: ['a/5'], - stemDirection2: -1, - }); - run('Grace Note Stem with Beams 3', stemWithBeamed, { - keys1: ['c/4'], - stemDirection1: 1, - keys2: ['c/6'], - stemDirection2: -1, - }); - run('Grace Note Slash', slash); - run('Grace Note Slash with Beams', slashWithBeams); - run('Grace Notes Multiple Voices', multipleVoices); - run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); - }, -}; -function basic(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['a/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4', 'g/4'], duration: '8' }, - { keys: ['a/4'], duration: '32' }, - { keys: ['b/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['g/4'], duration: '8' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - ].map(f.GraceNote.bind(f)); - gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); - gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); - _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); - const notes = [ - f - .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteBasic'); -} -function graceNoteModifiers(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const notes = [ - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#')), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('words')), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a-').setPosition(3), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a>').setPosition(3), 0) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteModifiers'); -} -function basicSlurred(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes0 = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['a/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4', 'g/4'], duration: '8' }, - { keys: ['a/4'], duration: '32' }, - { keys: ['b/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['a/4'], duration: '8' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - ].map(f.GraceNote.bind(f)); - gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); - gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); - gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); - _src_dot__WEBPACK_IMPORTED_MODULE_4__.Dot.buildAndAttach([gracenotes4[0]], { all: true }); - const notes = [ - f - .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), - f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_5__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteBasic'); -} -/** - * Helper function for three tests below: stem, stemWithBeamed, slash. - */ -const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { - const struct = { duration, slash }; - struct.stem_direction = stem_direction; - struct.keys = keys; - return noteBuilder(struct); -}; -// Used in three tests below. -const durationsForStemTest = ['8', '16', '32', '64', '128']; -function stem(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createNotes(noteBuilder, keys, stem_direction) { - return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); - } - function createNoteBlock(keys, stem_direction) { - const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); - const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); - // Add a bunch of GraceNotes in front of the first StaveNote. - staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); - return staveNotes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['g/4'], 1)); - voice.addTickables(createNoteBlock(['d/5'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteStem'); -} -function stemWithBeamed(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { - const ret = []; - durationsForStemTest.map((duration) => { - const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); - const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); - ret.push(n0); - ret.push(n1); - if (notesToBeam) { - notesToBeam.push([n0, n1]); - } - if (!isGrace) { - beams.push(f.Beam({ notes: [n0, n1] })); - } - }); - return ret; - } - function createBeamedNoteBlock(keys, stem_direction, beams) { - const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); - const notesToBeam = []; - const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); - const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); - notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); - bnotes[0].addModifier(graceNoteGroup, 0); - return bnotes; - } - const beams = []; - const voice = f.Voice().setStrict(false); - voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); - voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteStem'); -} -function slash(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createNotes(noteT, keys, stem_direction, slash) { - return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); - } - function createNoteBlock(keys, stem_direction) { - const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; - let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); - const duration = '8'; - const gns = [ - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - ].map(f.GraceNote.bind(f)); - const notesToBeam = []; - notesToBeam.push([gns[0], gns[1], gns[2]]); - notesToBeam.push([gns[3], gns[4], gns[5]]); - notesToBeam.push([gns[6], gns[7], gns[8]]); - // Merge the two GraceNote[]. - graceNotes = graceNotes.concat(gns); - const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); - notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); - notes[0].addModifier(graceNoteGroup, 0); - return notes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteSlash'); -} -function slashWithBeams(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 130); - const stave = f.Stave({ x: 10, y: 10, width: 750 }); - function createNoteBlock(keys, stem_direction) { - const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; - let allGraceNotes = []; - const graceNotesToBeam = []; - ['8', '16', '32', '64'].forEach(function (duration) { - const graceNotes = [ - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, - ].map(f.GraceNote.bind(f)); - graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); - graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); - graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); - allGraceNotes = allGraceNotes.concat(graceNotes); - }); - const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); - graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); - notes[0].addModifier(graceNoteGroup, 0); - return notes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteSlashWithBeams'); -} -function multipleVoices(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); - const stave = f.Stave({ x: 10, y: 10, width: 450 }); - const notes = [ - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['e/5'], stem_direction: 1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const notes2 = [ - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['f/4'], duration: '32', stem_direction: -1 }, - { keys: ['e/4'], duration: '32', stem_direction: -1 }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['f/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '8', stem_direction: 1 }, - ].map(f.GraceNote.bind(f)); - gracenotes2[0].setStemDirection(-1); - gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); - notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); - notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); - notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); - notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); - const voice = f.Voice().setStrict(false).addTickables(notes); - const voice2 = f.Voice().setStrict(false).addTickables(notes2); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - ok(true, 'Sixteenth Test'); -} -function multipleVoicesMultipleDraws(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 450, 140); - const stave = f.Stave({ x: 10, y: 10, width: 450 }); - const notes = [ - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['e/5'], stem_direction: 1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const notes2 = [ - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['f/4'], duration: '32', stem_direction: -1 }, - { keys: ['e/4'], duration: '32', stem_direction: -1 }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['f/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '8', stem_direction: 1 }, - ].map(f.GraceNote.bind(f)); - gracenotes2[0].setStemDirection(-1); - gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); - notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); - notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); - notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); - notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); - const voice = f.Voice().setStrict(false).addTickables(notes); - const voice2 = f.Voice().setStrict(false).addTickables(notes2); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - f.draw(); - ok(true, 'Seventeenth Test'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceNoteTests); - - - -/***/ }), - -/***/ "./tests/gracetabnote_tests.ts": -/*!*************************************!*\ - !*** ./tests/gracetabnote_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceTabNoteTests": () => (/* binding */ GraceTabNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// GraceTabNote Tests - - - - - - - - -const GraceTabNoteTests = { - Start() { - QUnit.module('Grace Tab Notes'); - // TODO: Rename tests below since it is redundant with the module name. - // Remove "Grace Tab Note " - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Grace Tab Note Simple', simple); - run('Grace Tab Note Slurred', slurred); - }, -}; -// Helper functions to create TabNote and GraceTabNote objects. -const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_5__.TabNote(noteStruct); -const graceTabNote = (noteStruct) => new _src_gracetabnote__WEBPACK_IMPORTED_MODULE_4__.GraceTabNote(noteStruct); -/** - * Helper function to build a RenderContext and TabStave. - */ -function setupContext(opts, ctxBuilder) { - const context = ctxBuilder(opts.elementId, 350, 140); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_6__.TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -function simple(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder); - const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); - const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); - const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); - const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); - const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; - const gracenote_group1 = [ - { positions: [{ str: 4, fret: 9 }], duration: '16' }, - { positions: [{ str: 4, fret: 10 }], duration: '16' }, - ]; - const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; - const gracenote_group3 = [ - { positions: [{ str: 5, fret: 10 }], duration: '8' }, - { positions: [{ str: 4, fret: 9 }], duration: '8' }, - ]; - const gracenotes0 = gracenote_group0.map(graceTabNote); - const gracenotes1 = gracenote_group1.map(graceTabNote); - const gracenotes2 = gracenote_group2.map(graceTabNote); - gracenotes2[0].setGhost(true); - const gracenotes3 = gracenote_group3.map(graceTabNote); - note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0), 0); - note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1), 0); - note2.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes2), 0); - note3.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes3), 0); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); - voice.addTickables([note0, note1, note2, note3]); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 250); - voice.draw(context, stave); - ok(true, 'Simple Test'); -} -function slurred(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder); - const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); - const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); - const gracenote_group0 = [ - { positions: [{ str: 4, fret: 9 }], duration: '8' }, - { positions: [{ str: 4, fret: 10 }], duration: '8' }, - ]; - const gracenote_group1 = [ - { positions: [{ str: 4, fret: 7 }], duration: '16' }, - { positions: [{ str: 4, fret: 8 }], duration: '16' }, - { positions: [{ str: 4, fret: 9 }], duration: '16' }, - ]; - const gracenotes0 = gracenote_group0.map(graceTabNote); - const gracenotes1 = gracenote_group1.map(graceTabNote); - note0.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes0, true), 0); - note1.addModifier(new _src_gracenotegroup__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup(gracenotes1, true), 0); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); - voice.addTickables([note0, note1]); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 200); - voice.draw(context, stave); - ok(true, 'Slurred Test'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(GraceTabNoteTests); - - - -/***/ }), - -/***/ "./tests/index.ts": -/*!************************!*\ - !*** ./tests/index.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _accidental_tests__WEBPACK_IMPORTED_MODULE_0__.AccidentalTests), -/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _annotation_tests__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), -/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _articulation_tests__WEBPACK_IMPORTED_MODULE_2__.ArticulationTests), -/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__.AutoBeamFormattingTests), -/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _bach_tests__WEBPACK_IMPORTED_MODULE_4__.BachDemoTests), -/* harmony export */ "BarlineTests": () => (/* reexport safe */ _barline_tests__WEBPACK_IMPORTED_MODULE_5__.BarlineTests), -/* harmony export */ "BeamTests": () => (/* reexport safe */ _beam_tests__WEBPACK_IMPORTED_MODULE_6__.BeamTests), -/* harmony export */ "BendTests": () => (/* reexport safe */ _bend_tests__WEBPACK_IMPORTED_MODULE_7__.BendTests), -/* harmony export */ "BoundingBoxComputationTests": () => (/* reexport safe */ _boundingboxcomputation_tests__WEBPACK_IMPORTED_MODULE_9__.BoundingBoxComputationTests), -/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__.BoundingBoxTests), -/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_10__.ChordSymbolTests), -/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _key_clef_tests__WEBPACK_IMPORTED_MODULE_24__.ClefKeySignatureTests), -/* harmony export */ "ClefTests": () => (/* reexport safe */ _clef_tests__WEBPACK_IMPORTED_MODULE_11__.ClefTests), -/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _crossbeam_tests__WEBPACK_IMPORTED_MODULE_12__.CrossBeamTests), -/* harmony export */ "CurveTests": () => (/* reexport safe */ _curve_tests__WEBPACK_IMPORTED_MODULE_13__.CurveTests), -/* harmony export */ "DotTests": () => (/* reexport safe */ _dot_tests__WEBPACK_IMPORTED_MODULE_14__.DotTests), -/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _easyscore_tests__WEBPACK_IMPORTED_MODULE_15__.EasyScoreTests), -/* harmony export */ "FactoryTests": () => (/* reexport safe */ _factory_tests__WEBPACK_IMPORTED_MODULE_16__.FactoryTests), -/* harmony export */ "FontTests": () => (/* reexport safe */ _font_tests__WEBPACK_IMPORTED_MODULE_17__.FontTests), -/* harmony export */ "FormatterTests": () => (/* reexport safe */ _formatter_tests__WEBPACK_IMPORTED_MODULE_18__.FormatterTests), -/* harmony export */ "FractionTests": () => (/* reexport safe */ _fraction_tests__WEBPACK_IMPORTED_MODULE_19__.FractionTests), -/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _ghostnote_tests__WEBPACK_IMPORTED_MODULE_20__.GhostNoteTests), -/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _glyphnote_tests__WEBPACK_IMPORTED_MODULE_21__.GlyphNoteTests), -/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _gracenote_tests__WEBPACK_IMPORTED_MODULE_22__.GraceNoteTests), -/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_23__.GraceTabNoteTests), -/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _keymanager_tests__WEBPACK_IMPORTED_MODULE_25__.KeyManagerTests), -/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _keysignature_tests__WEBPACK_IMPORTED_MODULE_26__.KeySignatureTests), -/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _modifier_tests__WEBPACK_IMPORTED_MODULE_27__.ModifierContextTests), -/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_28__.MultiMeasureRestTests), -/* harmony export */ "MusicTests": () => (/* reexport safe */ _music_tests__WEBPACK_IMPORTED_MODULE_29__.MusicTests), -/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _notehead_tests__WEBPACK_IMPORTED_MODULE_30__.NoteHeadTests), -/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_31__.NoteSubGroupTests), -/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_32__.OffscreenCanvasTests), -/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _ornament_tests__WEBPACK_IMPORTED_MODULE_33__.OrnamentTests), -/* harmony export */ "ParserTests": () => (/* reexport safe */ _parser_tests__WEBPACK_IMPORTED_MODULE_34__.ParserTests), -/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_35__.PedalMarkingTests), -/* harmony export */ "PercussionTests": () => (/* reexport safe */ _percussion_tests__WEBPACK_IMPORTED_MODULE_36__.PercussionTests), -/* harmony export */ "RegistryTests": () => (/* reexport safe */ _registry_tests__WEBPACK_IMPORTED_MODULE_37__.RegistryTests), -/* harmony export */ "RendererTests": () => (/* reexport safe */ _renderer_tests__WEBPACK_IMPORTED_MODULE_38__.RendererTests), -/* harmony export */ "RestsTests": () => (/* reexport safe */ _rests_tests__WEBPACK_IMPORTED_MODULE_39__.RestsTests), -/* harmony export */ "RhythmTests": () => (/* reexport safe */ _rhythm_tests__WEBPACK_IMPORTED_MODULE_40__.RhythmTests), -/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _staveconnector_tests__WEBPACK_IMPORTED_MODULE_42__.StaveConnectorTests), -/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_43__.StaveHairpinTests), -/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _staveline_tests__WEBPACK_IMPORTED_MODULE_44__.StaveLineTests), -/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_45__.StaveModifierTests), -/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _stavenote_tests__WEBPACK_IMPORTED_MODULE_46__.StaveNoteTests), -/* harmony export */ "StaveTests": () => (/* reexport safe */ _stave_tests__WEBPACK_IMPORTED_MODULE_41__.StaveTests), -/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _stavetie_tests__WEBPACK_IMPORTED_MODULE_47__.StaveTieTests), -/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _stringnumber_tests__WEBPACK_IMPORTED_MODULE_48__.StringNumberTests), -/* harmony export */ "StrokesTests": () => (/* reexport safe */ _strokes_tests__WEBPACK_IMPORTED_MODULE_49__.StrokesTests), -/* harmony export */ "StyleTests": () => (/* reexport safe */ _style_tests__WEBPACK_IMPORTED_MODULE_50__.StyleTests), -/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tabnote_tests__WEBPACK_IMPORTED_MODULE_51__.TabNoteTests), -/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tabslide_tests__WEBPACK_IMPORTED_MODULE_52__.TabSlideTests), -/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tabstave_tests__WEBPACK_IMPORTED_MODULE_53__.TabStaveTests), -/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tabtie_tests__WEBPACK_IMPORTED_MODULE_54__.TabTieTests), -/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _textbracket_tests__WEBPACK_IMPORTED_MODULE_55__.TextBracketTests), -/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _textformatter_tests__WEBPACK_IMPORTED_MODULE_56__.TextFormatterTests), -/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _textnote_tests__WEBPACK_IMPORTED_MODULE_57__.TextNoteTests), -/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _threevoice_tests__WEBPACK_IMPORTED_MODULE_58__.ThreeVoicesTests), -/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tickcontext_tests__WEBPACK_IMPORTED_MODULE_59__.TickContextTests), -/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _timesignature_tests__WEBPACK_IMPORTED_MODULE_60__.TimeSignatureTests), -/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tremolo_tests__WEBPACK_IMPORTED_MODULE_61__.TremoloTests), -/* harmony export */ "TuningTests": () => (/* reexport safe */ _tuning_tests__WEBPACK_IMPORTED_MODULE_62__.TuningTests), -/* harmony export */ "TupletTests": () => (/* reexport safe */ _tuplet_tests__WEBPACK_IMPORTED_MODULE_63__.TupletTests), -/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _typeguard_tests__WEBPACK_IMPORTED_MODULE_64__.TypeGuardTests), -/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__.VFPrefixTests), -/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__.VibratoBracketTests), -/* harmony export */ "VibratoTests": () => (/* reexport safe */ _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__.VibratoTests), -/* harmony export */ "VoiceTests": () => (/* reexport safe */ _voice_tests__WEBPACK_IMPORTED_MODULE_68__.VoiceTests) -/* harmony export */ }); -/* harmony import */ var _accidental_tests__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental_tests */ "./tests/accidental_tests.ts"); -/* harmony import */ var _annotation_tests__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation_tests */ "./tests/annotation_tests.ts"); -/* harmony import */ var _articulation_tests__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation_tests */ "./tests/articulation_tests.ts"); -/* harmony import */ var _auto_beam_formatting_tests__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./auto_beam_formatting_tests */ "./tests/auto_beam_formatting_tests.ts"); -/* harmony import */ var _bach_tests__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./bach_tests */ "./tests/bach_tests.ts"); -/* harmony import */ var _barline_tests__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./barline_tests */ "./tests/barline_tests.ts"); -/* harmony import */ var _beam_tests__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./beam_tests */ "./tests/beam_tests.ts"); -/* harmony import */ var _bend_tests__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./bend_tests */ "./tests/bend_tests.ts"); -/* harmony import */ var _boundingbox_tests__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./boundingbox_tests */ "./tests/boundingbox_tests.ts"); -/* harmony import */ var _boundingboxcomputation_tests__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./boundingboxcomputation_tests */ "./tests/boundingboxcomputation_tests.ts"); -/* harmony import */ var _chordsymbol_tests__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./chordsymbol_tests */ "./tests/chordsymbol_tests.ts"); -/* harmony import */ var _clef_tests__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clef_tests */ "./tests/clef_tests.ts"); -/* harmony import */ var _crossbeam_tests__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crossbeam_tests */ "./tests/crossbeam_tests.ts"); -/* harmony import */ var _curve_tests__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve_tests */ "./tests/curve_tests.ts"); -/* harmony import */ var _dot_tests__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot_tests */ "./tests/dot_tests.ts"); -/* harmony import */ var _easyscore_tests__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore_tests */ "./tests/easyscore_tests.ts"); -/* harmony import */ var _factory_tests__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./factory_tests */ "./tests/factory_tests.ts"); -/* harmony import */ var _font_tests__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./font_tests */ "./tests/font_tests.ts"); -/* harmony import */ var _formatter_tests__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./formatter_tests */ "./tests/formatter_tests.ts"); -/* harmony import */ var _fraction_tests__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./fraction_tests */ "./tests/fraction_tests.ts"); -/* harmony import */ var _ghostnote_tests__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ghostnote_tests */ "./tests/ghostnote_tests.ts"); -/* harmony import */ var _glyphnote_tests__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./glyphnote_tests */ "./tests/glyphnote_tests.ts"); -/* harmony import */ var _gracenote_tests__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./gracenote_tests */ "./tests/gracenote_tests.ts"); -/* harmony import */ var _gracetabnote_tests__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./gracetabnote_tests */ "./tests/gracetabnote_tests.ts"); -/* harmony import */ var _key_clef_tests__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./key_clef_tests */ "./tests/key_clef_tests.ts"); -/* harmony import */ var _keymanager_tests__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./keymanager_tests */ "./tests/keymanager_tests.ts"); -/* harmony import */ var _keysignature_tests__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./keysignature_tests */ "./tests/keysignature_tests.ts"); -/* harmony import */ var _modifier_tests__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./modifier_tests */ "./tests/modifier_tests.ts"); -/* harmony import */ var _multimeasurerest_tests__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./multimeasurerest_tests */ "./tests/multimeasurerest_tests.ts"); -/* harmony import */ var _music_tests__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./music_tests */ "./tests/music_tests.ts"); -/* harmony import */ var _notehead_tests__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./notehead_tests */ "./tests/notehead_tests.ts"); -/* harmony import */ var _notesubgroup_tests__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./notesubgroup_tests */ "./tests/notesubgroup_tests.ts"); -/* harmony import */ var _offscreencanvas_tests__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./offscreencanvas_tests */ "./tests/offscreencanvas_tests.ts"); -/* harmony import */ var _ornament_tests__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./ornament_tests */ "./tests/ornament_tests.ts"); -/* harmony import */ var _parser_tests__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./parser_tests */ "./tests/parser_tests.ts"); -/* harmony import */ var _pedalmarking_tests__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./pedalmarking_tests */ "./tests/pedalmarking_tests.ts"); -/* harmony import */ var _percussion_tests__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./percussion_tests */ "./tests/percussion_tests.ts"); -/* harmony import */ var _registry_tests__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./registry_tests */ "./tests/registry_tests.ts"); -/* harmony import */ var _renderer_tests__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./renderer_tests */ "./tests/renderer_tests.ts"); -/* harmony import */ var _rests_tests__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./rests_tests */ "./tests/rests_tests.ts"); -/* harmony import */ var _rhythm_tests__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./rhythm_tests */ "./tests/rhythm_tests.ts"); -/* harmony import */ var _stave_tests__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./stave_tests */ "./tests/stave_tests.ts"); -/* harmony import */ var _staveconnector_tests__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./staveconnector_tests */ "./tests/staveconnector_tests.ts"); -/* harmony import */ var _stavehairpin_tests__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./stavehairpin_tests */ "./tests/stavehairpin_tests.ts"); -/* harmony import */ var _staveline_tests__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./staveline_tests */ "./tests/staveline_tests.ts"); -/* harmony import */ var _stavemodifier_tests__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./stavemodifier_tests */ "./tests/stavemodifier_tests.ts"); -/* harmony import */ var _stavenote_tests__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stavenote_tests */ "./tests/stavenote_tests.ts"); -/* harmony import */ var _stavetie_tests__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavetie_tests */ "./tests/stavetie_tests.ts"); -/* harmony import */ var _stringnumber_tests__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stringnumber_tests */ "./tests/stringnumber_tests.ts"); -/* harmony import */ var _strokes_tests__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./strokes_tests */ "./tests/strokes_tests.ts"); -/* harmony import */ var _style_tests__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./style_tests */ "./tests/style_tests.ts"); -/* harmony import */ var _tabnote_tests__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./tabnote_tests */ "./tests/tabnote_tests.ts"); -/* harmony import */ var _tabslide_tests__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./tabslide_tests */ "./tests/tabslide_tests.ts"); -/* harmony import */ var _tabstave_tests__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./tabstave_tests */ "./tests/tabstave_tests.ts"); -/* harmony import */ var _tabtie_tests__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./tabtie_tests */ "./tests/tabtie_tests.ts"); -/* harmony import */ var _textbracket_tests__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./textbracket_tests */ "./tests/textbracket_tests.ts"); -/* harmony import */ var _textformatter_tests__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./textformatter_tests */ "./tests/textformatter_tests.ts"); -/* harmony import */ var _textnote_tests__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./textnote_tests */ "./tests/textnote_tests.ts"); -/* harmony import */ var _threevoice_tests__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./threevoice_tests */ "./tests/threevoice_tests.ts"); -/* harmony import */ var _tickcontext_tests__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./tickcontext_tests */ "./tests/tickcontext_tests.ts"); -/* harmony import */ var _timesignature_tests__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./timesignature_tests */ "./tests/timesignature_tests.ts"); -/* harmony import */ var _tremolo_tests__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./tremolo_tests */ "./tests/tremolo_tests.ts"); -/* harmony import */ var _tuning_tests__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tuning_tests */ "./tests/tuning_tests.ts"); -/* harmony import */ var _tuplet_tests__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tuplet_tests */ "./tests/tuplet_tests.ts"); -/* harmony import */ var _typeguard_tests__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./typeguard_tests */ "./tests/typeguard_tests.ts"); -/* harmony import */ var _vf_prefix_tests__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./vf_prefix_tests */ "./tests/vf_prefix_tests.ts"); -/* harmony import */ var _vibrato_tests__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./vibrato_tests */ "./tests/vibrato_tests.ts"); -/* harmony import */ var _vibratobracket_tests__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./vibratobracket_tests */ "./tests/vibratobracket_tests.ts"); -/* harmony import */ var _voice_tests__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./voice_tests */ "./tests/voice_tests.ts"); -// vexflow-debug-with-tests.ts includes this module via: -// export * from '../../tests'; -// -// To add a new test module, add a new line: -// `export * from './xxxx_tests';` -// to this file that points to the new file `xxxx_tests.ts`. -// -// The test module needs to call VexFlowTests.register(...). -// For example, in annotation_tests.ts, the last two lines are: -// VexFlowTests.register(AnnotationTests); -// export { AnnotationTests }; -// -// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests. -// -// To iterate faster during development, you can comment out most of this file -// and focus on just testing the module(s) you are currently working on. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), - -/***/ "./tests/key_clef_tests.ts": -/*!*********************************!*\ - !*** ./tests/key_clef_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ClefKeySignatureTests": () => (/* binding */ ClefKeySignatureTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); -/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Clef Key Signature Tests -// - - - - -const ClefKeySignatureTests = { - Start() { - QUnit.module('Clef Keys'); - // Removed an identical 'Key Parser Test'. See keysignature_tests.ts. - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Major Key Clef Test', keys, { majorKeys: true }); - run('Minor Key Clef Test', keys, { majorKeys: false }); - run('Stave Helper', staveHelper); - }, -}; -const fontWidths = () => { - const glyphScale = 39; // default font scale - const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; - const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; - const ksPadding = 10; // hard-coded in keysignature.ts - const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; - const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef - return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; -}; -function keys(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; // total number in all the keys - const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; - const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 6 * w.ksPadding; - const clefs = [ - 'treble', - 'soprano', - 'mezzo-soprano', - 'alto', - 'tenor', - 'baritone-f', - 'baritone-c', - 'bass', - 'french', - 'subbass', - 'percussion', - ]; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); - const staves = []; - const keys = options.params.majorKeys ? _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS : _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; - let i; - let flat; - let sharp; - let keySig; - const yOffsetForFlatStaves = 10 + 80 * clefs.length; - for (i = 0; i < clefs.length; i++) { - // Render all the sharps first, then all the flats: - staves[i] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10 + 80 * i, flatTestWidth); - staves[i].addClef(clefs[i]); - staves[i + clefs.length] = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); - staves[i + clefs.length].addClef(clefs[i]); - for (flat = 0; flat < 8; flat++) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[flat]); - keySig.addToStave(staves[i]); - } - for (sharp = 8; sharp < keys.length; sharp++) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_2__.KeySignature(keys[sharp]); - keySig.addToStave(staves[i + clefs.length]); - } - } - _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.formatBegModifiers(staves); - for (i = 0; i < clefs.length; i++) { - staves[i].setContext(ctx); - staves[i].draw(); - staves[i + clefs.length].setContext(ctx); - staves[i + clefs.length].draw(); - } - ok(true, 'all pass'); -} -function staveHelper(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; // total number in all the keys - const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; - const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 7 * w.ksPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 10, flatTestWidth); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 90, flatTestWidth); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 170, sharpTestWidth); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 260, sharpTestWidth); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; - stave1.addClef('treble'); - stave2.addClef('bass'); - stave3.addClef('alto'); - stave4.addClef('tenor'); - for (let n = 0; n < 8; ++n) { - stave1.addKeySignature(keys[n]); - stave2.addKeySignature(keys[n]); - } - for (let i = 8; i < keys.length; ++i) { - stave3.addKeySignature(keys[i]); - stave4.addKeySignature(keys[i]); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ClefKeySignatureTests); - - - -/***/ }), - -/***/ "./tests/keymanager_tests.ts": -/*!***********************************!*\ - !*** ./tests/keymanager_tests.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeyManagerTests": () => (/* binding */ KeyManagerTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Music Key Management Tests -// -// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined. -// However, we check it against null. - - -const KeyManagerTests = { - Start() { - QUnit.module('KeyManager'); - test('Valid Notes', works); - test('Select Notes', selectNotes); - }, -}; -function works() { - const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('g'); - equal(manager.getAccidental('f').accidental, '#'); - manager.setKey('a'); - equal(manager.getAccidental('c').accidental, '#'); - equal(manager.getAccidental('a').accidental, null); - equal(manager.getAccidental('f').accidental, '#'); - manager.setKey('A'); - equal(manager.getAccidental('c').accidental, '#'); - equal(manager.getAccidental('a').accidental, null); - equal(manager.getAccidental('f').accidental, '#'); -} -function selectNotes() { - const manager = new _src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager('f'); - equal(manager.selectNote('bb').note, 'bb'); - equal(manager.selectNote('bb').accidental, 'b'); - equal(manager.selectNote('g').note, 'g'); - equal(manager.selectNote('g').accidental, null); - equal(manager.selectNote('b').note, 'b'); - equal(manager.selectNote('b').accidental, null); - equal(manager.selectNote('a#').note, 'bb'); - equal(manager.selectNote('g#').note, 'g#'); - // Changes have no effect? - equal(manager.selectNote('g#').note, 'g#'); - equal(manager.selectNote('bb').note, 'bb'); - equal(manager.selectNote('bb').accidental, 'b'); - equal(manager.selectNote('g').note, 'g'); - equal(manager.selectNote('g').accidental, null); - equal(manager.selectNote('b').note, 'b'); - equal(manager.selectNote('b').accidental, null); - equal(manager.selectNote('a#').note, 'bb'); - equal(manager.selectNote('g#').note, 'g#'); - // Changes should propagate - manager.reset(); - equal(manager.selectNote('g#').change, true); - equal(manager.selectNote('g#').change, false); - equal(manager.selectNote('g').change, true); - equal(manager.selectNote('g').change, false); - equal(manager.selectNote('g#').change, true); - manager.reset(); - let note = manager.selectNote('bb'); - equal(note.change, false); - equal(note.accidental, 'b'); - note = manager.selectNote('g'); - equal(note.change, false); - equal(note.accidental, null); - note = manager.selectNote('g#'); - equal(note.change, true); - equal(note.accidental, '#'); - note = manager.selectNote('g'); - equal(note.change, true); - equal(note.accidental, null); - note = manager.selectNote('g'); - equal(note.change, false); - equal(note.accidental, null); - note = manager.selectNote('g#'); - equal(note.change, true); - equal(note.accidental, '#'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeyManagerTests); - - - -/***/ }), - -/***/ "./tests/keysignature_tests.ts": -/*!*************************************!*\ - !*** ./tests/keysignature_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeySignatureTests": () => (/* binding */ KeySignatureTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); -/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Key Signature Tests -// - - - - - - -const KeySignatureTests = { - Start() { - QUnit.module('KeySignature'); - test('Key Parser Test', parser); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Major Key Test', majorKeys); - run('Minor Key Test', minorKeys); - run('Stave Helper', staveHelper); - run('Cancelled key test', majorKeysCanceled); - run('Cancelled key (for each clef) test', keysCanceledForEachClef); - run('Altered key test', majorKeysAltered); - run('End key with clef test', endKeyWithClef); - run('Key Signature Change test', changeKey); - }, -}; -const fontWidths = () => { - const glyphScale = 39; // default font scale - const sharpWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalSharp', glyphScale) + 1; - const flatWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalFlat', glyphScale) + 1; - const naturalWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('accidentalNatural', glyphScale) + 2; - const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.getWidth('gClef', glyphScale) * 2; // widest clef - return { sharpWidth, flatWidth, naturalWidth, clefWidth }; -}; -function parser() { - expect(11); - function catchError(spec) { - throws(() => _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature(spec), /BadKeySignature/); - } - catchError('asdf'); - catchError('D!'); - catchError('E#'); - catchError('D#'); - catchError('#'); - catchError('b'); - catchError('Kb'); - catchError('Fb'); - catchError('Dbm'); - catchError('B#m'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('B'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('C'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Fm'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Ab'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('Abm'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('F#'); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.keySignature('G#m'); - ok(true, 'all pass'); -} -function majorKeys(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; // total number in all the keys - const casePadding = 10; // hard-coded in staveModifier - const testCases = 7; // all keys, but includes key of C - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; - let keySig = null; - for (let i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.addToStave(stave1); - } - for (let n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.addToStave(stave2); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function majorKeysCanceled(options, contextBuilder) { - const scale = 0.9; - const w = fontWidths(); - const flatPadding = 18; - const sharpPadding = 20; - const flatTestCases = 8; - const sharpTestCases = 7; - // magic numbers are the numbers of that symbol that appear in the test case - const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; - const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; - const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; - const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; - const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); - const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); - ctx.scale(scale, scale); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth).addClef('treble'); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth).addClef('treble'); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, eFlatTestWidth).addClef('treble'); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, eSharpTestWidth).addClef('treble'); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; - let keySig = null; - let i; - let n; - for (i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.cancelKey('Cb'); - keySig.setPadding(flatPadding); - keySig.addToStave(stave1); - } - for (n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.cancelKey('C#'); - keySig.setPadding(sharpPadding); - keySig.addToStave(stave2); - } - for (i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.cancelKey('E'); - keySig.setPadding(flatPadding); - keySig.addToStave(stave3); - } - for (n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.cancelKey('Ab'); - keySig.setPadding(sharpPadding); - keySig.addToStave(stave4); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -function keysCanceledForEachClef(options, contextBuilder) { - const scale = 0.8; - const w = fontWidths(); - const keyPadding = 10; - const keys = ['C#', 'Cb']; - const flatsKey = [7, 14]; - const sharpsKey = [14, 7]; - const natsKey = [7, 7]; - const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding + w.clefWidth; - const ctx = contextBuilder(options.elementId, max + 100, 380); - ctx.scale(scale, scale); - const x = 20; - let y = 20; - let tx = x; - ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { - keys.forEach((key, keyIx) => { - const cancelKey = keys[(keyIx + 1) % 2]; - const width = flatsKey[keyIx] * w.flatWidth + - natsKey[keyIx] * w.naturalWidth + - sharpsKey[keyIx] * w.sharpWidth + - keyPadding * 3 + - w.clefWidth + - _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(tx, y, width); - stave.setClef(clef); - stave.addKeySignature(cancelKey); - stave.addKeySignature(key, cancelKey); - stave.addKeySignature(key); - stave.setContext(ctx).draw(); - tx += width; - }); - tx = x; - y += 80; - }); - ok(true, 'all pass'); -} -function majorKeysAltered(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 780, 500); - ctx.scale(0.9, 0.9); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 750).addClef('treble'); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 750).addClef('treble'); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 170, 750).addClef('treble'); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 250, 750).addClef('treble'); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; - let keySig = null; - let i; - let n; - for (i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.alterKey(['bs', 'bs']); - keySig.setPadding(18); - keySig.addToStave(stave1); - } - for (n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.alterKey(['+', '+', '+']); - keySig.setPadding(20); - keySig.addToStave(stave2); - } - for (i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.alterKey(['n', 'bs', 'bb']); - keySig.setPadding(18); - keySig.addToStave(stave3); - } - for (n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.alterKey(['++', '+', 'n', '+']); - keySig.setPadding(20); - keySig.addToStave(stave4); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -function minorKeys(options, contextBuilder) { - const accidentalCount = 28; // total number in all the keys - const w = fontWidths(); - const casePadding = 10; // hard-coded in staveModifier - const testCases = 7; // all keys, but includes key of C - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MINOR_KEYS; - let keySig = null; - for (let i = 0; i < 8; ++i) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[i]); - keySig.addToStave(stave1); - } - for (let n = 8; n < keys.length; ++n) { - keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_3__.KeySignature(keys[n]); - keySig.addToStave(stave2); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function endKeyWithClef(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 200); - ctx.scale(0.9, 0.9); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, 350); - stave1 - .setKeySignature('G') - .setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_END) - .setClef('treble') - .addTimeSignature('4/4') - .setEndClef('bass') - .setEndKeySignature('Cb'); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, 350); - stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); - stave1.setContext(ctx).draw(); - stave2.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function staveHelper(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; // total number in all the keys - const casePadding = 10; // hard-coded in staveModifier - const testCases = 7; // all keys, but includes key of C - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, flatTestWidth); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 90, sharpTestWidth); - const keys = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.MAJOR_KEYS; - for (let i = 0; i < 8; ++i) { - stave1.addKeySignature(keys[i]); - } - for (let n = 8; n < keys.length; ++n) { - stave2.addKeySignature(keys[n]); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function changeKey(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); - // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument. - const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); - const voice = f - .Voice() - .setStrict(false) - .addTickables([ - f.KeySigNote({ key: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - ]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(KeySignatureTests); - - - -/***/ }), - -/***/ "./tests/mocks.ts": -/*!************************!*\ - !*** ./tests/mocks.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MockTickable": () => (/* binding */ MockTickable) -/* harmony export */ }); -/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); -/* harmony import */ var _src_tickable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tickable */ "./src/tickable.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TickContext Mocks - - -class MockTickable extends _src_tickable__WEBPACK_IMPORTED_MODULE_1__.Tickable { - constructor() { - super(...arguments); - this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(1, 1); - this.width = 0; - this.ignore_ticks = false; - } - init() { - // DO NOTHING. - } - getX() { - // eslint-disable-next-line - return this.tickContext.getX(); - } - getIntrinsicTicks() { - return this.ticks.value(); - } - getTicks() { - return this.ticks; - } - setTicks(t) { - this.ticks = new _src_fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(t, 1); - return this; - } - // Called by TickContext.preFormat(). - getMetrics() { - return { - width: 0, - glyphWidth: 0, - notePx: this.width, - modLeftPx: 0, - modRightPx: 0, - leftDisplacedHeadPx: 0, - rightDisplacedHeadPx: 0, - glyphPx: 0, - }; - } - getWidth() { - return this.width; - } - setWidth(w) { - this.width = w; - return this; - } - setVoice(v) { - this.voice = v; - return this; - } - setStave(stave) { - this.stave = stave; - return this; - } - getStave() { - return this.stave; - } - setTickContext(tc) { - this.tickContext = tc; - return this; - } - setIgnoreTicks(flag) { - this.ignore_ticks = flag; - return this; - } - shouldIgnoreTicks() { - return this.ignore_ticks; - } - preFormat() { - // DO NOTHING. - } - // eslint-disable-next-line - draw(...args) { - // DO NOTHING. - } -} - - - -/***/ }), - -/***/ "./tests/modifier_tests.ts": -/*!*********************************!*\ - !*** ./tests/modifier_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ModifierContextTests": () => (/* binding */ ModifierContextTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// ModifierContext Tests - - -const ModifierContextTests = { - Start() { - QUnit.module('ModifierContext'); - test('Modifier Width Test', width); - test('Modifier Management', management); - }, -}; -function width() { - const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); - equal(mc.getWidth(), 0, 'New modifier context has no width'); -} -function management() { - const mc = new _src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext(); - const modifier1 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); - const modifier2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier(); - mc.addMember(modifier1); - mc.addMember(modifier2); - const modifiers = mc.getMembers(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier.CATEGORY); - equal(modifiers.length, 2, 'Added two modifiers'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ModifierContextTests); - - - -/***/ }), - -/***/ "./tests/multimeasurerest_tests.ts": -/*!*****************************************!*\ - !*** ./tests/multimeasurerest_tests.ts ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MultiMeasureRestTests": () => (/* binding */ MultiMeasureRestTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// MultiMeasureRest Tests - - - -const MultiMeasureRestTests = { - Start() { - QUnit.module('MultiMeasureRest'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Test', simple); - run('Stave with modifiers Test', staveWithModifiers); - }, -}; -function simple(options) { - const width = 910; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 300); - const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; - // Each item below is an array that contains: - // item[0] => staveParams to adjust vertical spacing between lines - // item[1] => multiMeasureRestParams - // eslint-disable-next-line - const params = [ - [{}, { number_of_measures: 2, show_number: false }], - [{}, { number_of_measures: 2 }], - [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], - [{}, { number_of_measures: 1, use_symbols: true }], - [{}, { number_of_measures: 2, use_symbols: true }], - [{}, { number_of_measures: 3, use_symbols: true }], - [{}, { number_of_measures: 4, use_symbols: true }], - [{}, { number_of_measures: 5, use_symbols: true }], - [{}, { number_of_measures: 6, use_symbols: true }], - [{}, { number_of_measures: 7, use_symbols: true }], - [{}, { number_of_measures: 8, use_symbols: true }], - [{}, { number_of_measures: 9, use_symbols: true }], - [{}, { number_of_measures: 10, use_symbols: true }], - [{}, { number_of_measures: 11, use_symbols: true }], - [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], - [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], - [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], - [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], - [line_spacing_15px, { number_of_measures: 12 }], - [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], - [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], - [ - line_spacing_15px, - { - number_of_measures: 9, - spacing_between_lines_px: 15, - use_symbols: true, - number_glyph_point: 40 * 1.5, - }, - ], - [ - line_spacing_15px, - { - number_of_measures: 9, - spacing_between_lines_px: 15, - use_symbols: true, - number_glyph_point: 40 * 1.5, - semibreve_rest_glyph_scale: _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.NOTATION_FONT_SCALE * 1.5, - }, - ], - ]; - const staveWidth = 100; - let x = 0; - let y = 0; - const mmRests = params.map((param) => { - if (x + staveWidth * 2 > width) { - x = 0; - y += 80; - } - const staveParams = param[0]; - const mmRestParams = param[1]; - staveParams.x = x; - staveParams.y = y; - staveParams.width = staveWidth; - x += staveWidth; - const stave = f.Stave(staveParams); - return f.MultiMeasureRest(mmRestParams).setStave(stave); - }); - f.draw(); - const xs = mmRests[0].getXs(); - // eslint-disable-next-line - const strY = mmRests[0].getStave().getYForLine(-0.5); - const str = 'TACET'; - const context = f.getContext(); - context.save(); - context.setFont(_src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, 16, 'bold'); - const metrics = context.measureText(str); - context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); - context.restore(); - ok(true, 'Simple Test'); -} -function staveWithModifiers(options) { - const width = 910; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, width, 200); - let x = 0; - let y = 0; - // eslint-disable-next-line - const params = [ - [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], - [ - { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, - { number_of_measures: 5, use_symbols: true }, - ], - ]; - params.forEach((param) => { - const staveOptions = param[0]; - // eslint-disable-next-line - const staveParams = staveOptions.params; - const mmrestParams = param[1]; - if (x + staveParams.width > width) { - x = 0; - y += 80; - } - staveParams.x = x; - x += staveParams.width; - staveParams.y = y; - const stave = f.Stave(staveParams); - if (staveOptions.clef) { - stave.addClef(staveOptions.clef); - } - if (staveOptions.timeSig) { - stave.addTimeSignature(staveOptions.timeSig); - } - if (staveOptions.keySig) { - stave.addKeySignature(staveOptions.keySig); - } - if (staveOptions.endClef) { - stave.addEndClef(staveOptions.endClef); - } - if (staveOptions.endKeySig) { - stave.setEndKeySignature(staveOptions.endKeySig); - } - if (staveOptions.endTimeSig) { - stave.setEndTimeSignature(staveOptions.endTimeSig); - } - return f.MultiMeasureRest(mmrestParams).setStave(stave); - }); - f.draw(); - ok(true, 'Stave with modifiers Test'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MultiMeasureRestTests); - - - -/***/ }), - -/***/ "./tests/music_tests.ts": -/*!******************************!*\ - !*** ./tests/music_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MusicTests": () => (/* binding */ MusicTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_keymanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _src_music__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/music */ "./src/music.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Music Tests - - - -const MusicTests = { - Start() { - QUnit.module('MusicTests'); - test('Valid Notes', validNotes); - test('Valid Keys', validKeys); - test('Note Values', noteValue); - test('Interval Values', intervalValue); - test('Relative Notes', relativeNotes); - test('Relative Note Names', relativeNoteNames); - test('Canonical Notes', canonicalNotes); - test('Canonical Intervals', canonicalIntervals); - test('Scale Tones', scaleTones); - test('Scale Intervals', scaleIntervals); - }, -}; -function validNotes() { - expect(10); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - let parts = music.getNoteParts('c'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - // getNoteParts() converts its argument to lowercase. - parts = music.getNoteParts('C'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - parts = music.getNoteParts('c#'); - equal(parts.root, 'c'); - equal(parts.accidental, '#'); - parts = music.getNoteParts('c##'); - equal(parts.root, 'c'); - equal(parts.accidental, '##'); - throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); - throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); -} -function validKeys() { - expect(18); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - let parts = music.getKeyParts('c'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - equal(parts.type, 'M'); - parts = music.getKeyParts('d#'); - equal(parts.root, 'd'); - equal(parts.accidental, '#'); - equal(parts.type, 'M'); - parts = music.getKeyParts('fbm'); - equal(parts.root, 'f'); - equal(parts.accidental, 'b'); - equal(parts.type, 'm'); - parts = music.getKeyParts('c#mel'); - equal(parts.root, 'c'); - equal(parts.accidental, '#'); - equal(parts.type, 'mel'); - parts = music.getKeyParts('g#harm'); - equal(parts.root, 'g'); - equal(parts.accidental, '#'); - equal(parts.type, 'harm'); - throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); - throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); - throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); -} -function noteValue() { - expect(3); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - let note = music.getNoteValue('c'); - equal(note, 0); - throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); - note = music.getNoteValue('f#'); - equal(note, 6); -} -function intervalValue() { - expect(2); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - const value = music.getIntervalValue('b2'); - equal(value, 1); - throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); -} -function relativeNotes() { - expect(8); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); - equal(value, 6); - throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); - throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); - // Direction - value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); - equal(value, 0); - throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); - // Rollover - value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); - equal(value, 5); - // Reverse rollover - value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); - equal(value, 11); - // Practical tests - value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); - equal(value, 2); -} -function relativeNoteNames() { - expect(9); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); - equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); - equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); - equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); - equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); - equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); - equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); - equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); - throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); -} -function canonicalNotes() { - expect(3); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - equal(music.getCanonicalNoteName(0), 'c'); - equal(music.getCanonicalNoteName(2), 'd'); - throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); -} -function canonicalIntervals() { - expect(3); - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - equal(music.getCanonicalIntervalName(0), 'unison'); - equal(music.getCanonicalIntervalName(2), 'M2'); - throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); -} -function scaleTones() { - expect(24); - // C Major - const music = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - const manager = new _src_keymanager__WEBPACK_IMPORTED_MODULE_1__.KeyManager('CM'); - const c_major = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.major); - let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; - equal(c_major.length, 7); - for (let i = 0; i < c_major.length; ++i) { - equal(music.getCanonicalNoteName(c_major[i]), values[i]); - } - // Dorian - const c_dorian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.dorian); - values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; - let note = null; - equal(c_dorian.length, 7); - for (let i = 0; i < c_dorian.length; ++i) { - note = music.getCanonicalNoteName(c_dorian[i]); - equal(manager.selectNote(note).note, values[i]); - } - // Mixolydian - const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), _src_music__WEBPACK_IMPORTED_MODULE_2__.Music.scales.mixolydian); - values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; - equal(c_mixolydian.length, 7); - for (let i = 0; i < c_mixolydian.length; ++i) { - note = music.getCanonicalNoteName(c_mixolydian[i]); - equal(manager.selectNote(note).note, values[i]); - } -} -function scaleIntervals() { - expect(6); - const m = new _src_music__WEBPACK_IMPORTED_MODULE_2__.Music(); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); - // Forwards and backwards - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(MusicTests); - - - -/***/ }), - -/***/ "./tests/notehead_tests.ts": -/*!*********************************!*\ - !*** ./tests/notehead_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteHeadTests": () => (/* binding */ NoteHeadTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_notehead__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/notehead */ "./src/notehead.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// NoteHead Tests -// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected. -// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale. -// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it. -// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale - - - - - - - - -const NoteHeadTests = { - Start() { - QUnit.module('NoteHead'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Basic', basic); - run('Various Note Heads 1', variousNoteHeads); - run('Various Note Heads 2', variousNoteHeads2); - run('Various Heads', variousHeads); - run('Drum Chord Heads', drumChordHeads); - run('Bounding Boxes', basicBoundingBoxes); - }, -}; -function setContextStyle(ctx) { - // The final scale should be 1.8. - ctx.scale(0.9, 0.9); - ctx.scale(2.0, 2.0); - //ctx.scale(1.8, 1.8); - ctx.font = '10pt Arial'; -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 250); - setContextStyle(ctx); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); - stave.setContext(ctx).draw(); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); - const note_head1 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '4', line: 3 }); - const note_head2 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 2.5 }); - const note_head3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '2', line: 0 }); - voice.addTickables([note_head1, note_head2, note_head3]); - formatter.joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok('Basic NoteHead test'); -} -/** - * Used by the next two test cases to draw a note. - */ -function showNote(noteStruct, stave, ctx, x) { - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote(noteStruct).setStave(stave); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_6__.TickContext().addTickable(note).preFormat().setX(x); - note.setContext(ctx).draw(); - return note; -} -function variousHeads(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d0'], duration: '4' }, - { keys: ['g/5/d1'], duration: '4' }, - { keys: ['g/5/d2'], duration: '4' }, - { keys: ['g/5/d3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/t0'], duration: '1' }, - { keys: ['g/5/t1'], duration: '4' }, - { keys: ['g/5/t2'], duration: '4' }, - { keys: ['g/5/t3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x0'], duration: '1' }, - { keys: ['g/5/x1'], duration: '4' }, - { keys: ['g/5/x2'], duration: '4' }, - { keys: ['g/5/x3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/s1'], duration: '4' }, - { keys: ['g/5/s2'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/r1'], duration: '4' }, - { keys: ['g/5/r2'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - // Draw two staves, one with up-stems and one with down-stems. - for (let staveNum = 0; staveNum < 2; ++staveNum) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) - .addClef('percussion') - .setContext(ctx) - .draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = staveNum === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function variousNoteHeads(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d'], duration: '1/2' }, - { keys: ['g/5/d'], duration: '1' }, - { keys: ['g/5/d'], duration: '2' }, - { keys: ['g/5/d'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x'], duration: '1/2' }, - { keys: ['g/5/x'], duration: '1' }, - { keys: ['g/5/x'], duration: '2' }, - { keys: ['g/5/x'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/cx'], duration: '1/2' }, - { keys: ['g/5/cx'], duration: '1' }, - { keys: ['g/5/cx'], duration: '2' }, - { keys: ['g/5/cx'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/tu'], duration: '1/2' }, - { keys: ['g/5/tu'], duration: '1' }, - { keys: ['g/5/tu'], duration: '2' }, - { keys: ['g/5/tu'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/td'], duration: '1/2' }, - { keys: ['g/5/td'], duration: '1' }, - { keys: ['g/5/td'], duration: '2' }, - { keys: ['g/5/td'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sf'], duration: '1/2' }, - { keys: ['g/5/sf'], duration: '1' }, - { keys: ['g/5/sf'], duration: '2' }, - { keys: ['g/5/sf'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sb'], duration: '1/2' }, - { keys: ['g/5/sb'], duration: '1' }, - { keys: ['g/5/sb'], duration: '2' }, - { keys: ['g/5/sb'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/ci'], duration: '1/2' }, - { keys: ['g/5/ci'], duration: '1' }, - { keys: ['g/5/ci'], duration: '2' }, - { keys: ['g/5/ci'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sq'], duration: '1/2' }, - { keys: ['g/5/sq'], duration: '1' }, - { keys: ['g/5/sq'], duration: '2' }, - { keys: ['g/5/sq'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - // Draw two staves, one with up-stems and one with down-stems. - for (let staveNum = 0; staveNum < 2; ++staveNum) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) - .addClef('percussion') - .setContext(ctx) - .draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = staveNum === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function variousNoteHeads2(options, contextBuilder) { - const notes = [ - { keys: ['g/5/do'], duration: '4', auto_stem: true }, - { keys: ['g/5/re'], duration: '4', auto_stem: true }, - { keys: ['g/5/mi'], duration: '4', auto_stem: true }, - { keys: ['g/5/fa'], duration: '4', auto_stem: true }, - { keys: ['e/4/faup'], duration: '4', auto_stem: true }, - { keys: ['g/5/so'], duration: '4', auto_stem: true }, - { keys: ['g/5/la'], duration: '4', auto_stem: true }, - { keys: ['g/5/ti'], duration: '4', auto_stem: true }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drumChordHeads(options, contextBuilder) { - const notes = [ - { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, - { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, - { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, - { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, - { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, - { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, - { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, - { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, - { keys: ['a/4', 'g/5/d0'], duration: '4' }, - { keys: ['a/4/x3', 'g/5'], duration: '4' }, - { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, - { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, - { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, - { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, - { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, - { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, - { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, - { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - // Draw two staves, one with up-stems and one with down-stems. - for (let h = 0; h < 2; ++h) { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = h === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function basicBoundingBoxes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 250); - setContextStyle(ctx); - // 250 is 450/1.8 - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 0, 250).addClef('treble'); - stave.setContext(ctx).draw(); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setStrict(false); - const nh1 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '4', line: 3 }); - const nh2 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '2', line: 2.5 }); - const nh3 = new _src_notehead__WEBPACK_IMPORTED_MODULE_3__.NoteHead({ duration: '1', line: 0 }); - voice.addTickables([nh1, nh2, nh3]); - formatter.joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - for (const bb of [nh1.getBoundingBox(), nh2.getBoundingBox(), nh3.getBoundingBox()]) { - ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - } - ctx.stroke(); - ok('NoteHead Bounding Boxes'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteHeadTests); - - - -/***/ }), - -/***/ "./tests/notesubgroup_tests.ts": -/*!*************************************!*\ - !*** ./tests/notesubgroup_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteSubGroupTests": () => (/* binding */ NoteSubGroupTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_barnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/barnote */ "./src/barnote.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Author: Taehoon Moon 2016 -// -// NoteSubGroup Tests - - - - -const NoteSubGroupTests = { - Start() { - QUnit.module('NoteSubGroup'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Basic - ClefNote, TimeSigNote and BarNote', basic); - run('Multi Voice', multiVoiceSingleDraw); - run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); - run('Multi Staff', multiStaff); - }, -}; -// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes. -function createShortcuts(f) { - return { - createStaveNote: (noteStruct) => f.StaveNote(noteStruct), - addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), - addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), - }; -} -function basic(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750, 200); - const ctx = f.getContext(); - const stave = f.Stave({ width: 600 }).addClef('treble'); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const notes = [ - { keys: ['f/5'], stem_direction: -1, duration: '4' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - ].map(createStaveNote); - addAccidental(notes[1], '#'); - addAccidental(notes[2], 'n'); - addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); - addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); - addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote()]); - addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); - addSubGroup(notes[6], [new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN)]); - addAccidental(notes[4], 'b'); - addAccidental(notes[6], 'bb'); - const voice = f.Voice().setStrict(false).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - notes.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); - ok(true, 'all pass'); -} -function multiVoiceSingleDraw(options) { - multiVoiceHelper(options, 1); -} -/** - * Call Factory.draw() twice. It should look identical to the multiVoice test case above. - */ -function multiVoiceDoubleDraw(options) { - multiVoiceHelper(options, 2); -} -/** - * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above. - */ -function multiVoiceHelper(options, numDraws) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); - const ctx = f.getContext(); - const stave = f.Stave().addClef('treble'); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const notes1 = [ - { keys: ['f/5'], stem_direction: 1, duration: '4' }, - { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const notes2 = [ - { keys: ['c/4'], stem_direction: -1, duration: '4' }, - { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - addAccidental(notes1[1], '#'); - addSubGroup(notes1[1], [ - f.ClefNote({ type: 'bass', options: { size: 'small' } }), - new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.REPEAT_BEGIN), - f.TimeSigNote({ time: '3/4' }), - ]); - addSubGroup(notes2[2], [ - f.ClefNote({ type: 'alto', options: { size: 'small' } }), - f.TimeSigNote({ time: '9/8' }), - new _src_barnote__WEBPACK_IMPORTED_MODULE_1__.BarNote(_src_stavebarline__WEBPACK_IMPORTED_MODULE_3__.BarlineType.DOUBLE), - ]); - addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); - addAccidental(notes1[2], 'b'); - addAccidental(notes2[3], '#'); - const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - for (let i = 0; i < numDraws; i++) { - f.draw(); - } - notes1.forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_2__.Note.plotMetrics(ctx, note, 150)); - ok(true, 'all pass'); -} -function multiStaff(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 400); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); - const notes1 = [ - { keys: ['f/5'], stem_direction: 1, duration: '4' }, - { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const notes2 = [ - { keys: ['c/4'], stem_direction: -1, duration: '4' }, - { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); - const notes3 = [ - { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - ].map(createStaveNote); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); - f.Beam({ notes: notes3.slice(1, 4) }); - f.Beam({ notes: notes3.slice(5) }); - addAccidental(notes1[1], '#'); - addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); - addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); - addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); - addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); - addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); - addAccidental(notes3[0], '#'); - addAccidental(notes3[3], 'b'); - addAccidental(notes3[5], '#'); - addAccidental(notes1[2], 'b'); - addAccidental(notes2[3], '#'); - const voice1 = f.Voice().addTickables(notes1); - const voice2 = f.Voice().addTickables(notes2); - const voice3 = f.Voice().addTickables(notes3); - f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); - f.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(NoteSubGroupTests); - - - -/***/ }), - -/***/ "./tests/offscreencanvas_tests.ts": -/*!****************************************!*\ - !*** ./tests/offscreencanvas_tests.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "OffscreenCanvasTests": () => (/* binding */ OffscreenCanvasTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. -// MIT License -// -// OffscreenCanvas Tests - - - - - - - -const OffscreenCanvasTests = { - Start() { - // At the time of writing, OffscreenCanvas is still an experimental technology. - if ((0,_src_util__WEBPACK_IMPORTED_MODULE_6__.globalObject)().OffscreenCanvas === undefined) { - return; - } - QUnit.module('OffscreenCanvas'); - test('Simple Test', simpleTest); - }, -}; -function simpleTest() { - // Create a CanvasContext from an OffscreenCanvas. - // eslint-disable-next-line - // @ts-ignore - const offscreenCanvas = new OffscreenCanvas(550, 200); - // eslint-disable-next-line - // @ts-ignore - const offscreenCtx = offscreenCanvas.getContext('2d'); - if (offscreenCtx == null) { - throw new Error("Couldn't create offscreen context"); - } - const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(offscreenCtx); - // Render to the OffscreenCavans. - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 200); - stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave.addClef('treble').setContext(ctx).draw(); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['b/4'], duration: 'qr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.FormatAndDraw(ctx, stave, notes); - // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement. - const imgBmp = offscreenCanvas.transferToImageBitmap(); - const canvas = document.createElement('canvas'); - canvas.width = offscreenCanvas.width; - canvas.height = offscreenCanvas.height; - const canvasCtx = canvas.getContext('2d'); - if (canvasCtx == null) { - throw new Error("Couldn't create canvas context"); - } - canvasCtx.drawImage(imgBmp, 0, 0); - document.body.appendChild(canvas); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OffscreenCanvasTests); - - - -/***/ }), - -/***/ "./tests/ornament_tests.ts": -/*!*********************************!*\ - !*** ./tests/ornament_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "OrnamentTests": () => (/* binding */ OrnamentTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); -/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Author: Cyril Silverman -// -// Ornament Tests -// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure. - - - - - - - - - - -const OrnamentTests = { - Start() { - QUnit.module('Ornament'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Ornaments', drawOrnaments); - run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); - run('Ornaments - Delayed turns', drawOrnamentsDelayed); - run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); - run('Stacked', drawOrnamentsStacked); - run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); - run('Jazz Ornaments', jazzOrnaments); - }, -}; -function drawOrnaments(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 750, 195); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); - stave.setContext(ctx).draw(); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); - notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); - notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); - notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); - notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); - notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); - notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); - notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); - notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); - notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); - notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); - notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); - notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); -} -function drawOrnamentsDisplaced(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 750, 195); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 30, 700); - stave.setContext(ctx).draw(); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent'), 0); - notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); - notes[1].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('mordent_inverted'), 0); - notes[2].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn'), 0); - notes[3].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('turn_inverted'), 0); - notes[4].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('tr'), 0); - notes[5].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upprall'), 0); - notes[6].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downprall'), 0); - notes[7].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallup'), 0); - notes[8].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('pralldown'), 0); - notes[9].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('upmordent'), 0); - notes[10].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('downmordent'), 0); - notes[11].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('lineprall'), 0); - notes[12].addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_6__.Ornament('prallprall'), 0); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); -} -/** - * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws. - * setDelayed(true) shifts the turn symbol to the right (after its note). - */ -const addDelayedTurns = (f) => { - // Get the rendering context - const context = f.getContext(); - const stave = f.Stave({ x: 10, y: 30, width: 500 }); - stave.setContext(context).draw(); - const notes = [ - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); - notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); - notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); - notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); - return { context, stave, notes }; -}; -function drawOrnamentsDelayed(options) { - expect(0); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); - const { context, stave, notes } = addDelayedTurns(f); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); -} -function drawOrnamentsDelayedMultipleDraws(options) { - expect(0); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); - const { context, stave, notes } = addDelayedTurns(f); - // We can FormatAndDraw() two times, and it looks fine. - // However, if you inspect the SVG element, you will see duplicate paths. - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); -} -function drawOrnamentsStacked(options) { - expect(0); - // Get the rendering context - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 195); - const ctx = f.getContext(); - const stave = f.Stave({ x: 10, y: 30, width: 500 }); - stave.setContext(ctx).draw(); - const notes = [ - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('mordent'), 0); - notes[1].addModifier(f.Ornament('turn_inverted'), 0); - notes[2].addModifier(f.Ornament('turn'), 0); - notes[3].addModifier(f.Ornament('turn_inverted'), 0); - notes[0].addModifier(f.Ornament('turn'), 0); - notes[1].addModifier(f.Ornament('prallup'), 0); - notes[2].addModifier(f.Ornament('upmordent'), 0); - notes[3].addModifier(f.Ornament('lineprall'), 0); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); -} -function drawOrnamentsWithAccidentals(options) { - expect(0); - // Get the rendering context - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 250); - const ctx = f.getContext(); - const stave = f.Stave({ x: 10, y: 60, width: 600 }); - stave.setContext(ctx).draw(); - const notes = [ - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); - notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); - notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); - notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); - notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); - notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); - notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); - notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); - notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); - notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); - notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); -} -function jazzOrnaments(options) { - const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_5__.Glyph.getWidth('gClef', 38); // widest clef - // Helper function. - function draw(modifiers, keys, x, width, y, stemDirection) { - // Helper function to create a StaveNote. - const note = (keys, duration, modifier, stemDirection) => { - const n = new _src_stavenote__WEBPACK_IMPORTED_MODULE_8__.StaveNote({ keys, duration, stem_direction: stemDirection }) - .addModifier(modifier, 0) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); - const dot = duration.indexOf('d') >= 0; - if (dot) { - _src_dot__WEBPACK_IMPORTED_MODULE_3__.Dot.buildAndAttach([n], { all: true }); - } - return n; - }; - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(keys, '4d', modifiers[0], stemDirection), - note(keys, '8', modifiers[1], stemDirection), - note(keys, '4d', modifiers[2], stemDirection), - note(keys, '8', modifiers[3], stemDirection), - ]; - if (modifiers.length > 4) { - notes[3].addModifier(modifiers[4], 0); - } - _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam.generateBeams(notes); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ - num_beats: 4, - beat_value: 4, - }).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - const formatter = new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]); - formatter.format([voice], width - _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave.defaultPadding - clefWidth); - stave.setContext(ctx).draw(); - voice.draw(ctx, stave); - } - expect(0); - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 950, 400); - const ctx = f.getContext(); - ctx.scale(1, 1); - const xStart = 10; - const width = 300; - const yStart = 50; - const staffHeight = 70; - let curX = xStart; - let curY = yStart; - let mods = [ - // measure 1 - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['a/5'], curX, width, curY, -1); - curX += width; - mods = [ - // measure 2 - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['a/5'], curX, width, curY, -1); - curX += width; - mods = [ - // measure 3 - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['a/5'], curX, width, curY, 1); - // second line - curX = xStart; - curY += staffHeight; - mods = [ - // measure 4 - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['e/5'], curX, width, curY); - curX += width; - mods = [ - // measure 5 - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['e/5'], curX, width, curY); - curX += width; - mods = [ - // measure 6 - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['e/5'], curX, width, curY); - // third line - curX = xStart; - curY += staffHeight; - mods = [ - // measure 7 - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['e/4'], curX, width, curY); - curX += width; - mods = [ - // measure 8 - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['e/4'], curX, width, curY); - curX += width; - mods = [ - // measure 9 - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['e/4'], curX, width, curY); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(OrnamentTests); - - - -/***/ }), - -/***/ "./tests/parser_tests.ts": -/*!*******************************!*\ - !*** ./tests/parser_tests.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ParserTests": () => (/* binding */ ParserTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/parser */ "./src/parser.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Parser Tests - - -const ParserTests = { - Start() { - QUnit.module('Parser'); - test('Basic', basic); - test('Advanced', advanced); - test('Mixed', mixed); - test('Micro Score', microscore); - }, -}; -/** - * Grammar used in the first three test cases: basic, advanced, mixed. - */ -class TestGrammar { - // The begin() function is the only requirement when implementing the Grammar interface. - begin() { - return () => ({ expect: this.expect }); - } - BIGORLITTLE() { - return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; - } - BIGLINE() { - return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; - } - LITTLELINE() { - return { expect: [this.WORD, this.WORDS] }; - } - WORDS() { - return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; - } - MAYBEEXCLAIM() { - return { expect: [this.EXCLAIM], maybe: true }; - } - LBRACE() { - return { token: '[{]' }; - } - RBRACE() { - return { token: '[}]' }; - } - WORD() { - return { token: '[a-zA-Z]+' }; - } - COMMA() { - return { token: '[,]' }; - } - EXCLAIM() { - return { token: '[!]' }; - } - EOL() { - return { token: '$' }; - } -} -/** - * Grammar used in the microscore test case. - * It represents a series of piano key numbers (Middle C == 40) separated by whitespace. - * C Major Scale => 40 42 44 45 47 49 51 52 - * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS - * C Major == [40.44.47] - * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56] - */ -class MicroScoreGrammar { - constructor() { - this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); - this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); - this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); - this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); - this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); - this.NUM = () => ({ token: '\\d+' }); - this.WHITESPACE = () => ({ token: '\\s+' }); - this.PERIOD = () => ({ token: '\\.' }); - this.LEFT_BRACKET = () => ({ token: '\\[' }); - this.RIGHT_BRACKET = () => ({ token: '\\]' }); - this.EOL = () => ({ token: '$' }); - } - begin() { - return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); - } -} -/** - * Check that the result is a parse failure, and verify the error position. - */ -function fails(result, expectedErrorPos, msg) { - notOk(result.success, msg); - equal(result.errorPos, expectedErrorPos, msg); -} -function basic() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.LITTLELINE, grammar.EOL]; - const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); - // Each of these strings will parse correctly. - const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse(''), 0); - fails(parser.parse('first second'), 6); - fails(parser.parse('first,,'), 5); - fails(parser.parse('first,'), 5); - fails(parser.parse(',,'), 0); -} -function advanced() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.BIGLINE, grammar.EOL]; - const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); - const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse('{first,second,third,}'), 19); - fails(parser.parse('first,second,third'), 0); - fails(parser.parse('{first,second,third'), 19); - fails(parser.parse('{!}'), 1); -} -function mixed() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; - const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); - const mustPass = ['{first,second,third!}', 'first, second']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse('first second'), 6); -} -function microscore() { - const grammar = new MicroScoreGrammar(); - const parser = new _src_parser__WEBPACK_IMPORTED_MODULE_1__.Parser(grammar); - const mustPass = [ - '40 42 44 45 47 49 51 52', - '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', - '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor] - ]; - mustPass.forEach((line) => { - var _a; - const result = parser.parse(line); - equal(result.success, true, line); - equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); - }); - fails(parser.parse('40 42 44 45 47 49 5A 52'), 19); - fails(parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); - fails(parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed. -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ParserTests); - - - -/***/ }), - -/***/ "./tests/pedalmarking_tests.ts": -/*!*************************************!*\ - !*** ./tests/pedalmarking_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PedalMarkingTests": () => (/* binding */ PedalMarkingTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// PedalMarking Tests -// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'. - -const PedalMarkingTests = { - Start() { - QUnit.module('PedalMarking'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Pedal 1', simple1); - run('Simple Pedal 2', simple2); - run('Simple Pedal 3', simple3); - run('Release and Depress on Same Note 1', releaseDepress1); - run('Release and Depress on Same Note 2', releaseDepress2); - run('Custom Text 1', customTest1); - run('Custom Text 2', customTest2); - }, -}; -/** - * Every test below uses this to set up the score and two staves/voices. - */ -function createTest(makePedal) { - return (options) => { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550, 200); - const score = f.EasyScore(); - const stave0 = f.Stave({ width: 250 }).addClef('treble'); - const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); - f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); - const stave1 = f.Stave({ width: 260, x: 250 }); - const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - makePedal(f, voice0.getTickables(), voice1.getTickables()); - f.draw(); - ok(true, 'Must render'); - }; -} -function withSimplePedal(style) { - return (factory, notes0, notes1) => factory.PedalMarking({ - notes: [notes0[0], notes0[2], notes0[3], notes1[3]], - options: { style }, - }); -} -function withReleaseAndDepressedPedal(style) { - return (factory, notes0, notes1) => factory.PedalMarking({ - notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], - options: { style }, - }); -} -const simple1 = createTest(withSimplePedal('text')); -const simple2 = createTest(withSimplePedal('bracket')); -const simple3 = createTest(withSimplePedal('mixed')); -const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); -const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); -const customTest1 = createTest((factory, notes0, notes1) => { - const pedal = factory.PedalMarking({ - notes: [notes0[0], notes1[3]], - options: { style: 'text' }, - }); - pedal.setCustomText('una corda', 'tre corda'); - return pedal; -}); -const customTest2 = createTest((factory, notes0, notes1) => { - const pedal = factory.PedalMarking({ - notes: [notes0[0], notes1[3]], - options: { style: 'mixed' }, - }); - pedal.setCustomText('Sost. Ped.'); - return pedal; -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PedalMarkingTests); - - - -/***/ }), - -/***/ "./tests/percussion_tests.ts": -/*!***********************************!*\ - !*** ./tests/percussion_tests.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PercussionTests": () => (/* binding */ PercussionTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Author: Mike Corrigan 2012 -// -// Percussion Tests -// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'. - - -const PercussionTests = { - Start() { - QUnit.module('Percussion'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Percussion Clef', draw); - run('Percussion Notes', drawNotes); - run('Percussion Basic0', basic0); - run('Percussion Basic1', basic1); - run('Percussion Basic2', basic2); - run('Percussion Snare0', snare0); - run('Percussion Snare1', snare1); - run('Percussion Snare2', snare2); - run('Percussion Snare3', snare3); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); - ok(true); -} -/** - * Helper function used by the drawNotes() test case below. - */ -function showNote(struct, stave, ctx, x) { - const staveNote = new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote(struct).setStave(stave); - new _src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext().addTickable(staveNote).preFormat().setX(x); - staveNote.setContext(ctx).draw(); - return staveNote; -} -function drawNotes(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d0'], duration: '4' }, - { keys: ['g/5/d1'], duration: '4' }, - { keys: ['g/5/d2'], duration: '4' }, - { keys: ['g/5/d3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/t0'], duration: '1' }, - { keys: ['g/5/t1'], duration: '4' }, - { keys: ['g/5/t2'], duration: '4' }, - { keys: ['g/5/t3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x0'], duration: '1' }, - { keys: ['g/5/x1'], duration: '4' }, - { keys: ['g/5/x2'], duration: '4' }, - { keys: ['g/5/x3'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - // Draw two staves, one with up-stems and one with down-stems. - for (let h = 0; h < 2; ++h) { - const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = h === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -/** - * Helper function for the seven test cases below. - * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave. - */ -function createSingleMeasureTest(setup) { - return (options) => { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500); - const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); - setup(f); - f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); - f.draw(); - ok(true); - }; -} -const basic0 = createSingleMeasureTest((f) => { - const voice0 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - ]); - const voice1 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - ]); - f.Beam({ notes: voice0.getTickables() }); - f.Beam({ notes: voice1.getTickables().slice(0, 2) }); - f.Beam({ notes: voice1.getTickables().slice(3, 5) }); -}); -const basic1 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - ]); - f.Voice().addTickables([ - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - ]); -}); -const basic2 = createSingleMeasureTest((f) => { - const voice0 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5'], duration: '8' }), - f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - ]); - f.Beam({ notes: voice0.getTickables().slice(1, 8) }); - const notes1 = [ - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), - ]; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[4]], { all: true }); - const voice1 = f.Voice().addTickables(notes1); - f.Beam({ notes: voice1.getTickables().slice(0, 2) }); - f.Beam({ notes: voice1.getTickables().slice(4, 6) }); -}); -const snare0 = createSingleMeasureTest((f) => { - const font = { - family: _src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 14, - weight: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, - style: _src_index__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, - }; - f.Voice().addTickables([ - f - .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) - .addModifier(f.Articulation({ type: 'a>' }), 0) - .addModifier(f.Annotation({ text: 'L', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), - ]); -}); -const snare1 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), - f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), - ]); -}); -const snare2 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), - f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(1), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(5), 0), - ]); -}); -const snare3 = createSingleMeasureTest((factory) => { - factory - .Voice() - .addTickables([ - factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), - factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(2), 0), - factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(3), 0), - factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo(5), 0), - ]); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(PercussionTests); - - - -/***/ }), - -/***/ "./tests/registry_tests.ts": -/*!*********************************!*\ - !*** ./tests/registry_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RegistryTests": () => (/* binding */ RegistryTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Registry Tests - - -const RegistryTests = { - Start() { - QUnit.module('Registry'); - test('Register and Clear', registerAndClear); - test('Default Registry', defaultRegistry); - test('Multiple Classes', classes); - }, -}; -function registerAndClear() { - const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); - const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); - registry.register(score.notes('C4')[0], 'foobar'); - const foobar = registry.getElementById('foobar'); - ok(foobar); - equal(foobar.getAttribute('id'), 'foobar'); - registry.clear(); - notOk(registry.getElementById('foobar')); - // eslint-disable-next-line - // @ts-ignore: intentional type mismatch to trigger an error. - throws(() => registry.register(score.notes('C4'))); - registry.clear(); - ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); -} -function defaultRegistry() { - const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); - const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); - score.notes('C4[id="foobar"]'); - const note = registry.getElementById('foobar'); - ok(note); - note.setAttribute('id', 'boobar'); - ok(registry.getElementById('boobar')); - notOk(registry.getElementById('foobar')); - registry.clear(); - equal(registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY).length, 0); - score.notes('C5'); - const elements = registry.getElementsByType(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote.CATEGORY); - equal(elements.length, 1); -} -function classes() { - const registry = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry(); - const score = new _src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore({ factory: _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory.newFromElementId(null) }); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Registry.enableDefaultRegistry(registry); - score.notes('C4[id="foobar"]'); - const note = registry.getElementById('foobar'); - note.addClass('foo'); - ok(note.hasClass('foo')); - notOk(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 1); - equal(registry.getElementsByClass('boo').length, 0); - note.addClass('boo'); - ok(note.hasClass('foo')); - ok(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 1); - equal(registry.getElementsByClass('boo').length, 1); - note.removeClass('boo'); - note.removeClass('foo'); - notOk(note.hasClass('foo')); - notOk(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 0); - equal(registry.getElementsByClass('boo').length, 0); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RegistryTests); - - - -/***/ }), - -/***/ "./tests/renderer_tests.ts": -/*!*********************************!*\ - !*** ./tests/renderer_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RendererTests": () => (/* binding */ RendererTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -// -// Renderer Tests - - -// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div? -const STAVE_WIDTH = 700; -const STAVE_HEIGHT = 100; -// FactoryOptions.stave.space defaults to 10. -// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI(). -const STAVE_RIGHT_MARGIN = 10; -const USE_RENDERER = { useRendererAPI: true }; -const USE_FACTORY = { useRendererAPI: false }; -const RendererTests = { - Start() { - QUnit.module('Renderer'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - // Randomly choose one of four setup paths. See below for a description. - // Refresh `flow.html` to see the test change each time. - // We can manually check that they look identical - // by opening `flow.html` in multiple tabs & quickly switching between tabs. - run('Random', random); - // These are the four setup paths. They should all produce the same output. - // Use the: Renderer API OR Factory API - // Pass in: element ID string OR canvas/div element. - run('Renderer API with element ID string', stringElementId, USE_RENDERER); - run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); - run('Renderer API with context', passRenderContext); - run('Factory API with element ID string', stringElementId, USE_FACTORY); - run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); - }, -}; -/** - * Helper function to add three notes to a stave. - */ -function drawStave(stave, context) { - stave.addClef('bass').addTimeSignature('3/4').draw(); - _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(context, stave, [ - new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['C/4'], duration: '4' }), - new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['E/4'], duration: '4' }), - new _src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote({ keys: ['G/4'], duration: '4' }), - ]); -} -/** - * Randomize the test upon each refresh (for verifying that the output is identical). - * Draw a colored outline to indicate which of the four options is shown. - * - blue = element is a SVG or Canvas element - * - gray = element ID is a string - * - solid outline = use the Renderer API directly - * - dashed outline = use the Factory API - */ -function random(options) { - const useElementIDString = Math.random() > 0.5; - const useRendererAPI = Math.random() > 0.5; - options.params = { useRendererAPI }; - if (useElementIDString) { - stringElementId(options); - } - else { - canvasOrDivElement(options); - } - // eslint-disable-next-line - const element = document.getElementById(options.elementId); - const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */ - const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; - const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; - let elementType; - if (options.backend === _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer.Backends.CANVAS) { - // If the backend is canvas, we draw a border around the canvas directly. - element.style.border = borderStyle; - elementType = '<canvas> element object'; - } - else { - // If the backend is SVG, we draw a border around the SVG child of the DIV. - element.children[0].style.border = borderStyle; - elementType = '<svg> element object'; - } - if (useElementIDString) { - elementType = 'elementID string'; - } - const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; - element.parentElement.insertAdjacentHTML('beforeend', `
` + - `${whichAPI}` + - ` with ` + - `${elementType}` + - `

`); -} -function useRendererAPI(e, backend) { - const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(e, backend); - renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); - const context = renderer.getContext(); - drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); -} -/** - * Alternatively, use the Factory API! - * The Factory API declares elementId to be string | null. - * However, if we pass in a canvas or div element, it will still work. - * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext(). - */ -function useFactoryAPI(e, backend) { - const opts = { - renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, - }; - const factory = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Factory(opts); - drawStave(factory.Stave(), factory.getContext()); -} -/** - * Pass in a elementId string. Renderer will call document.getElementById(). - */ -function stringElementId(options) { - const elementId = options.elementId; - if (options.params.useRendererAPI) { - useRendererAPI(elementId, options.backend); - } - else { - useFactoryAPI(elementId, options.backend); - } - ok(true); -} -/** - * Pass a canvas or div element directly to the Renderer constructor. - */ -function canvasOrDivElement(options) { - const element = document.getElementById(options.elementId); - if (options.params.useRendererAPI) { - useRendererAPI(element, options.backend); - } - else { - useFactoryAPI(element, options.backend); - } - ok(true); -} -/** - * Pass the render context directly to the Renderer constructor. - */ -function passRenderContext(options) { - let context; - const element = document.getElementById(options.elementId); - if ((0,_src_index__WEBPACK_IMPORTED_MODULE_1__.isHTMLCanvas)(element)) { - const ctx = element.getContext('2d'); - if (!ctx) { - throw new _src_index__WEBPACK_IMPORTED_MODULE_1__.RuntimeError(`Couldn't get context from element "${options.elementId}"`); - } - context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(ctx); - } - else { - context = new _src_index__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); - } - const renderer = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer(context); - renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); - drawStave(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RendererTests); - - - -/***/ }), - -/***/ "./tests/rests_tests.ts": -/*!******************************!*\ - !*** ./tests/rests_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RestsTests": () => (/* binding */ RestsTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Rests Tests - - - - - - - - - -const RestsTests = { - Start() { - QUnit.module('Rests'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Outside Stave', ledgerRest); - run('Dotted', basic); - run('Auto Align - Beamed Notes Stems Up', beamsUp); - run('Auto Align - Beamed Notes Stems Down', beamsDown); - run('Auto Align - Tuplets Stems Up', tupletsUp); - run('Auto Align - Tuplets Stems Down', tupletsDown); - run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); - run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); - run('Auto Align - Multi Voice', multiVoice); - }, -}; -/** - * Helper function to create a context and stave. - * - * @param options - * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext). - * @param width - * @param height - * @returns object with .context and .stave properties - */ -function setupContext(options, contextBuilder, width = 350, height = 150) { - // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true). - const context = contextBuilder(options.elementId, width, height); - context.scale(0.9, 0.9); - context.font = '10pt Arial'; - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); - return { context, stave }; -} -/** - * Dotted rests (whole to 128th). - * The rest duration is specified as 'wr', 'hr', ..., '128r'. - */ -function basic(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 700); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_2__.Dot.buildAndAttach(notes, { all: true }); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - ok(true, 'Dotted Rest Test'); -} -/** - * Use the ledger glyph if the whole or half rest is above/below the staff - */ -function ledgerRest(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 700); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - ok(true, 'Leger/Ledger Rest Test'); -} -// Optional: Use a helper function to make your code more concise. -const note = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct); -/** - * Rests are intermixed within beamed notes (with the stems and beams at the top). - */ -function beamsUp(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), - ]; - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); - const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - ok(true, 'Auto Align Rests - Beams Up Test'); -} -/** - * Rests are intermixed within beamed notes (with the stems and beams at the bottom). - */ -function beamsDown(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), - ]; - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 4)); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(4, 8)); - const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(8, 12)); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - ok(true, 'Auto Align Rests - Beams Down Test'); -} -/** - * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the - * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional. - */ -function tupletsUp(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - ]; - const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - tuplet1.setContext(context).draw(); - tuplet2.setContext(context).draw(); - tuplet3.setContext(context).draw(); - tuplet4.setContext(context).draw(); - ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); -} -/** - * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the - * bottom of the group of notes. - */ -function tupletsDown(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - ]; - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(0, 3)); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(3, 6)); - const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(6, 9)); - const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(9, 12)); - const tuplet1 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(0, 3)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); - const tuplet2 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(3, 6)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); - const tuplet3 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(6, 9)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); - const tuplet4 = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_BOTTOM); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - tuplet1.setContext(context).draw(); - tuplet2.setContext(context).draw(); - tuplet3.setContext(context).draw(); - tuplet4.setContext(context).draw(); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - beam4.setContext(context).draw(); - ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); -} -/** - * By default rests are centered vertically within the stave, except - * when they are inside a group of beamed notes (in which case they are - * centered vertically within that group). - */ -function singleVoiceDefaultAlignment(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - ]; - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); - const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes); - tuplet.setContext(context).draw(); - beam.setContext(context).draw(); - ok(true, 'Auto Align Rests - Default Test'); -} -/** - * The only difference between staveRestsAll() and staveRests() is that this test case - * passes { align_rests: true } to Formatter.FormatAndDraw(...). - */ -function singleVoiceAlignAll(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - ]; - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes.slice(5, 9)); - const tuplet = new _src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet(notes.slice(9, 12)).setTupletLocation(_src_tuplet__WEBPACK_IMPORTED_MODULE_7__.Tuplet.LOCATION_TOP); - // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); - tuplet.setContext(context).draw(); - beam.setContext(context).draw(); - ok(true, 'Auto Align Rests - Align All Test'); -} -/** - * Multi Voice - * The top voice shows quarter-note chords alternating with quarter rests. - * The bottom voice shows two groups of beamed eighth notes, with eighth rests. - */ -function multiVoice(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); - const noteOnStave = (noteStruct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote(noteStruct).setStave(stave); - const notes1 = [ - noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), - noteOnStave({ keys: ['b/4'], duration: '4r' }), - noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), - noteOnStave({ keys: ['b/4'], duration: '4r' }), - ]; - const notes2 = [ - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - ]; - const voice1 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes1); - const voice2 = new _src_voice__WEBPACK_IMPORTED_MODULE_8__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_3__.Flow.TIME4_4).addTickables(notes2); - // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice. - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); - const beam2_1 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(0, 4)); - const beam2_2 = new _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam(notes2.slice(4, 8)); - // Important Note: we need to draw voice2 first, since voice2 generates ledger lines. - // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1. - voice2.draw(ctx); - voice1.draw(ctx); - beam2_1.setContext(ctx).draw(); - beam2_2.setContext(ctx).draw(); - ok(true, 'Strokes Test Multi Voice'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RestsTests); - - - -/***/ }), - -/***/ "./tests/rhythm_tests.ts": -/*!*******************************!*\ - !*** ./tests/rhythm_tests.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RhythmTests": () => (/* binding */ RhythmTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Rhythm Tests - - - - - - - -const RhythmTests = { - Start() { - QUnit.module('Rhythm'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - // TODO: Simplify test names by removing 'Rhythm Draw - '. - run('Rhythm Draw - slash notes', drawBasic); - run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); - run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); - run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); - run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); - }, -}; -// CURRENTLY UNUSED. Draws 7 different slash notes without beams. -/* -function drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void { - const ctx = contextBuilder(options.elementId, 350, 180); - const stave = new Stave(10, 10, 350); - stave.setContext(ctx); - stave.draw(); - - const notes: StaveNoteStruct[] = [ - { keys: ['b/4'], duration: 'ws', stem_direction: -1 }, - { keys: ['b/4'], duration: 'hs', stem_direction: -1 }, - { keys: ['b/4'], duration: 'qs', stem_direction: -1 }, - { keys: ['b/4'], duration: '8s', stem_direction: -1 }, - { keys: ['b/4'], duration: '16s', stem_direction: -1 }, - { keys: ['b/4'], duration: '32s', stem_direction: -1 }, - { keys: ['b/4'], duration: '64s', stem_direction: -1 }, - ]; - expect(notes.length * 2); - - for (let i = 0; i < notes.length; ++i) { - const staveNote = new StaveNote(notes[i]).setStave(stave); - new TickContext() - .addTickable(staveNote) - .preFormat() - .setX((i + 1) * 25); - staveNote.setContext(ctx).draw(); - - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -*/ -function drawBasic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 150); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('C'); - staveBar1.setContext(ctx).draw(); - const notesBar1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - // bar 2 - juxtaposing second bar next to first bar - const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); - staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar2.setContext(ctx).draw(); - // bar 2 - const notesBar2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - // bar 3 - juxtaposing second bar next to first bar - const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); - staveBar3.setContext(ctx).draw(); - // bar 3 - const notesBar3 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); - // bar 4 - juxtaposing second bar next to first bar - const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); - staveBar4.setContext(ctx).draw(); - // bar 4 - const notesBar4 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); - expect(0); -} -function drawBeamedSlashNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('C'); - staveBar1.setContext(ctx).draw(); - // bar 4 - const notesBar1_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - const notesBar1_part2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - // create the beams for 8th notes in 2nd measure - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); - const notesBar1 = notesBar1_part1.concat(notesBar1_part2); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - // Render beams - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - expect(0); -} -function drawSlashAndBeamAndRests(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - // bar 1 - const notesBar1_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), - ]; - notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); - const notesBar1_part2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - // create the beams for 8th notes in 2nd measure - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); - // Render beams - beam1.setContext(ctx).draw(); - // bar 2 - juxtaposing second bar next to first bar - const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); - staveBar2.setContext(ctx).draw(); - const notesBar2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '1s', - stem_direction: -1, - }), - ]; - notesBar2[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('F').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 2), 0); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - expect(0); -} -function drawSixtenthWithScratches(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - // bar 1 - const notesBar1_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16m', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - ]; - const notesBar1_part2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16m', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16r', - stem_direction: -1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - ]; - notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); - // create the beams for 8th notes in 2nd measure - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part2); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); - // Render beams - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - expect(0); -} -function drawThirtySecondWithScratches(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_4__.Stave(10, 30, 300); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.DOUBLE); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - // bar 1 - const notesBar1_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32m', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32m', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32r', - stem_direction: 1, - }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_6__.StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - ]; - notesBar1_part1[0].addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('C7').setFont('Times', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size + 3), 0); - // Create the beams for 8th notes in 2nd measure. - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar1_part1); - // Helper function to justify and draw a 4/4 voice. - _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); - // Render beams - beam1.setContext(ctx).draw(); - expect(0); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(RhythmTests); - - - -/***/ }), - -/***/ "./tests/stave_tests.ts": -/*!******************************!*\ - !*** ./tests/stave_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTests": () => (/* binding */ StaveTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_clef__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/clef */ "./src/clef.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_staverepetition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _src_stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); -/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Basic Stave Tests -// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions. -// This helps developers because they can use the named type in their code for type checking. - - - - - - - - - - - - - - -const StaveTests = { - Start() { - QUnit.module('Stave'); - test('StaveModifiers SortByCategory', sortByCategory); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Stave Draw Test', draw); - run('Open Stave Draw Test', drawOpenStave); - run('Multiple Stave Barline Test', drawMultipleMeasures); - run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); - run('Multiple Stave Repeats Test', drawRepeats); - run('Stave End Modifiers Test', drawEndModifiers); - run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); - run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); - run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); - run('Multiple Staves Volta Test', drawVolta); - run('Volta + Modifier Measure Test', drawVoltaModifier); - run('Tempo Test', drawTempo); - run('Single Line Configuration Test', configureSingleLine); - run('Batch Line Configuration Test', configureAllLines); - run('Stave Text Test', drawStaveText); - run('Multiple Line Stave Text Test', drawStaveTextMultiLine); - run('Factory API', factoryAPI); - }, -}; -function sortByCategory() { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(0, 0, 300); - const clef0 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('treble'); - const clef1 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('alto'); - const clef2 = new _src_clef__WEBPACK_IMPORTED_MODULE_3__.Clef('bass'); - const time0 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C'); - const time1 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('C|'); - const time2 = new _src_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature('9/8'); - const key0 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('G'); - const key1 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('F'); - const key2 = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); - const bar0 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); - const bar1 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - const bar2 = new _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.Barline(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.NONE); - // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 }; - // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 }; - const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; - const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; - const sortAndCompare = (title, a, b, order) => { - stave.sortByCategory(a, order); - // Verify that the two arrays are identical. - let isSame = true; - if (a.length !== b.length) - isSame = false; - for (let i = 0; i < a.length; ++i) { - if (a[i] !== b[i]) - isSame = false; - } - ok(isSame, title); - }; - sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); - sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); - sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); - sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); - sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); -} -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 150); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 100, 'getYForNote(0)'); - equal(stave.getYForLine(5), 100, 'getYForLine(5)'); - equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -function drawOpenStave(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 350); - let stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300, { left_bar: false }); - stave.setContext(ctx); - stave.draw(); - stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 150, 300, { right_bar: false }); - stave.setContext(ctx); - stave.draw(); - ok(true, 'all pass'); -} -function drawMultipleMeasures(options, contextBuilder) { - var _a, _b; - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 550, 200); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 200); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); - staveBar1.addClef('treble').setContext(ctx).draw(); - const notesBar1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - // bar 2 - juxtaposing second bar next to first bar - const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); - staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); - staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); - staveBar2.setContext(ctx).draw(); - const notesBar2_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - const notesBar2_part2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - // create the beams for 8th notes in 2nd measure - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); - const notesBar2 = notesBar2_part1.concat(notesBar2_part2); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - // Render beams - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); -} -function drawRepeats(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 750, 120); - // bar 1 - const staveBar1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 0, 250); - staveBar1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - staveBar1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); - staveBar1.addClef('treble'); - staveBar1.addKeySignature('A'); - staveBar1.setContext(ctx).draw(); - const notesBar1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - // bar 2 - juxtaposing second bar next to first bar - const staveBar2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); - staveBar2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - staveBar2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); - staveBar2.setContext(ctx).draw(); - const notesBar2_part1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - const notesBar2_part2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - notesBar2_part2[0].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); - notesBar2_part2[1].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 0); - notesBar2_part2[3].addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 0); - // create the beams for 8th notes in 2nd measure - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part1); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_2__.Beam(notesBar2_part2); - const notesBar2 = notesBar2_part1.concat(notesBar2_part2); - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - // Render beams - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - // bar 3 - juxtaposing third bar next to second bar - const staveBar3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); - staveBar3.setContext(ctx).draw(); - const notesBar3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'wr' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); - // bar 4 - juxtaposing third bar next to third bar - const staveBar4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); - staveBar4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - staveBar4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); - staveBar4.setContext(ctx).draw(); - const notesBar4 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); -} -function drawEndModifiers(options, contextBuilder) { - expect(0); - const staveWidth = 230; - const blockHeight = 80; - let x = 10; - let y = 0; - const ctx = contextBuilder(options.elementId, 800, 700); - function drawStavesInTwoLines(endBarLine) { - // Draw a stave with one measure. Change the ending modifiers. - // eslint-disable-next-line - function drawStave(x, y, width, begMods, endMods) { - const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(x, y, width - 10); - if (begMods) { - if (begMods.barLine !== undefined) { - staveBar.setBegBarType(begMods.barLine); - } - if (begMods.clef !== undefined) { - staveBar.addClef(begMods.clef); - } - if (begMods.keySig !== undefined) { - staveBar.addKeySignature(begMods.keySig); - } - if (begMods.timeSig !== undefined) { - staveBar.setTimeSignature(begMods.timeSig); - } - } - if (endMods) { - if (endMods.barLine !== undefined) { - staveBar.setEndBarType(endMods.barLine); - } - if (endMods.clef !== undefined) { - staveBar.addEndClef(endMods.clef); - } - if (endMods.keySig !== undefined) { - staveBar.setEndKeySignature(endMods.keySig); - } - if (endMods.timeSig !== undefined) { - staveBar.setEndTimeSignature(endMods.timeSig); - } - } - staveBar.setContext(ctx).draw(); - const notesBar = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'qr' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); - } - drawStave(x, y, staveWidth + 50, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); - x += staveWidth + 50; - drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); - x += staveWidth; - x = 10; - y += blockHeight; - drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: _src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); - x += staveWidth; - } - y = 0; - x = 10; - // First pair of staves. - drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.SINGLE); - y += blockHeight + 10; - x = 10; - // Second pair of staves, with double barlines. - drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - y += blockHeight + 10; - x = 10; - // Third pair of staves, with "two dot" repeat barlines. - drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); - y += blockHeight + 10; - x = 10; - // Fourth pair of staves, with "two dots" on each side of the barlines. - drawStavesInTwoLines(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BOTH); -} -function drawStaveRepetition(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 725, 200); - // bar 1 - const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 150); - mm1.addClef('treble'); - mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_FINE, options.params.yShift); - mm1.setMeasure(1); - mm1.setContext(ctx).draw(); - const notesmm1 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); - // bar 2 - juxtapose second measure - const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); - mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.TO_CODA, options.params.yShift); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); - // bar 3 - juxtapose third measure - const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); - mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA, options.params.yShift); - mm3.setMeasure(3); - mm3.setContext(ctx).draw(); - const notesmm3 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); - // bar 4 - juxtapose fourth measure - const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); - mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT, options.params.yShift); - mm4.setMeasure(4); - mm4.setContext(ctx).draw(); - const notesmm4 = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); -} -function drawVolta(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 725, 200); - // bar 1 - const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 125); - mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - mm1.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.SEGNO_LEFT); - mm1.addClef('treble'); - mm1.addKeySignature('A'); - mm1.setMeasure(1); - mm1.setSection('A', 0); - mm1.setContext(ctx).draw(); - const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); - // bar 2 - juxtapose second measure - const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); - mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_RIGHT); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); - // bar 3 - juxtapose third measure - const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); - mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '1.', -5); - mm3.setMeasure(3); - mm3.setContext(ctx).draw(); - const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); - // bar 4 - juxtapose fourth measure - const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); - mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); - mm4.setMeasure(4); - mm4.setContext(ctx).draw(); - const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['f/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); - // bar 5 - juxtapose fifth measure - const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); - mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_END); - mm5.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '', -5); - mm5.setMeasure(5); - mm5.setContext(ctx).draw(); - const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); - // bar 6 - juxtapose sixth measure - const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); - mm6.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '2.', -5); - mm6.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - mm6.setMeasure(6); - mm6.setContext(ctx).draw(); - const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['a/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); - // bar 7 - juxtapose seventh measure - const mm7 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); - mm7.setMeasure(7); - mm7.setSection('B', 0); - mm7.setContext(ctx).draw(); - const notesmm7 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm7, notesmm7); - // bar 8 - juxtapose eighth measure - const mm8 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); - mm8.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - mm8.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS_AL_CODA); - mm8.setMeasure(8); - mm8.setContext(ctx).draw(); - const notesmm8 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/5'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm8, notesmm8); - // bar 9 - juxtapose ninth measure - const mm9 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); - mm9.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.END); - mm9.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.CODA_LEFT); - mm9.addClef('treble'); - mm9.addKeySignature('A'); - mm9.setMeasure(9); - mm9.setContext(ctx).draw(); - const notesmm9 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/5'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm9, notesmm9); -} -function drawVoltaModifier(options, contextBuilder) { - expect(0); - // Get the rendering context - const ctx = contextBuilder(options.elementId, 1100, 200); - // bar 1: volta begin, with modifiers (clef, keysignature) - const mm1 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 50, 175); - mm1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - mm1.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN_END, '1.', -5); - mm1.addClef('treble'); - mm1.addKeySignature('A'); - mm1.setMeasure(1); - mm1.setSection('A', 0); - mm1.setContext(ctx).draw(); - const notesmm1 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - // Helper function to justify and draw a 4/4 voice - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm1, notesmm1); - // bar 2: volta begin_mid, with modifiers (clef, keysignature) - const mm2 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); - mm2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.REPEAT_BEGIN); - mm2.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); - mm2.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.BEGIN, '2.', -5); - mm2.addClef('treble'); - mm2.addKeySignature('A'); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm2, notesmm2); - // bar 3: volta mid, with modifiers (clef, keysignature) - const mm3 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); - mm3.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.MID, '', -5); - mm3.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); - mm3.addClef('treble'); - mm3.addKeySignature('B'); - mm3.setMeasure(3); - mm3.setSection('B', 0); - mm3.setContext(ctx).draw(); - const notesmm3 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm3, notesmm3); - // bar 4: volta end, with modifiers (clef, keysignature) - const mm4 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); - mm4.setVoltaType(_src_stavevolta__WEBPACK_IMPORTED_MODULE_11__.VoltaType.END, '1.', -5); - mm4.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); - mm4.addClef('treble'); - mm4.addKeySignature('A'); - mm4.setMeasure(4); - mm4.setSection('C', 0); - mm4.setContext(ctx).draw(); - const notesmm4 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm4, notesmm4); - // bar 5: d.s. shift (similar potential x-shift concern) - const mm5 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); - // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); - mm5.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_8__.BarlineType.DOUBLE); - mm5.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); - mm5.addClef('treble'); - mm5.addKeySignature('A'); - mm5.setMeasure(5); - mm5.setSection('D', 0); - mm5.setContext(ctx).draw(); - const notesmm5 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm5, notesmm5); - // bar 6: d.s. without modifiers - const mm6 = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); - // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT); - mm6.setRepetitionType(_src_staverepetition__WEBPACK_IMPORTED_MODULE_10__.Repetition.type.DS); - mm6.setMeasure(6); - mm6.setSection('E', 0); - mm6.setContext(ctx).draw(); - const notesmm6 = [new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'w' })]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, mm6, notesmm6); -} -function drawTempo(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 725, 350); - const padding = 10; - let x = 0; - let y = 50; - function drawTempoStaveBar(width, tempo, tempo_y, notes) { - const staveBar = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(padding + x, y, width); - if (x === 0) - staveBar.addClef('treble'); - staveBar.setTempo(tempo, tempo_y); - staveBar.setContext(ctx).draw(); - const notesBar = notes || [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['b/4'], duration: 'q' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: 'q' }), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, staveBar, notesBar); - x += width; - } - drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); - drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); - drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); - drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); - drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/5'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]); - x = 0; - y += 150; - drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); - drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); - drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); - drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); - drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['c/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['d/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['g/4'], duration: '8' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_9__.StaveNote({ keys: ['e/4'], duration: '8' }), - ]); -} -function configureSingleLine(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); - stave - .setConfigForLine(0, { visible: true }) - .setConfigForLine(1, { visible: false }) - .setConfigForLine(2, { visible: true }) - .setConfigForLine(3, { visible: false }) - .setConfigForLine(4, { visible: true }); - stave.setContext(ctx).draw(); - const config = stave.getConfigForLines(); - equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); - equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); - equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); - equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); - equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); - ok(true, 'all pass'); -} -function configureAllLines(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(10, 10, 300); - stave - .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) - .setContext(ctx) - .draw(); - const config = stave.getConfigForLines(); - equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); - equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); - equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); - equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); - equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); - ok(true, 'all pass'); -} -function drawStaveText(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 900, 140); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 10, 300); - stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT); - stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT); - stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE); - stave.setText('Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW); - stave.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function drawStaveTextMultiLine(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 900, 200); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_7__.Stave(300, 40, 300); - stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); - stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); - stave.setText('Right Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: -10 }); - stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.RIGHT, { shift_y: 10 }); - stave.setText('Above Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: -10 }); - stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.ABOVE, { shift_y: 10 }); - stave.setText('Left Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: -10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.LEFT }); - stave.setText('Right Below Text', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.BELOW, { shift_y: 10, justification: _src_textnote__WEBPACK_IMPORTED_MODULE_12__.TextJustification.RIGHT }); - stave.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function factoryAPI(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); - const stave = f.Stave({ x: 300, y: 40, width: 300 }); - stave.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: -10 }); - stave.setText('2nd line', _src_modifier__WEBPACK_IMPORTED_MODULE_6__.Modifier.Position.LEFT, { shift_y: 10 }); - f.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTests); - - - -/***/ }), - -/***/ "./tests/staveconnector_tests.ts": -/*!***************************************!*\ - !*** ./tests/staveconnector_tests.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveConnectorTests": () => (/* binding */ StaveConnectorTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StaveConnector Tests -// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this. - - - - - - -const StaveConnectorTests = { - Start() { - QUnit.module('StaveConnector'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Single Draw Test', drawSingle); - run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); - run('Single Both Sides Test', drawSingleBoth); - run('Double Draw Test', drawDouble); - run('Bold Double Line Left Draw Test', drawRepeatBegin); - run('Bold Double Line Right Draw Test', drawRepeatEnd); - run('Thin Double Line Right Draw Test', drawThinDouble); - run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); - run('Bold Double Lines Offset Draw Test', drawRepeatOffset); - run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); - run('Brace Draw Test', drawBrace); - run('Brace Wide Draw Test', drawBraceWide); - run('Bracket Draw Test', drawBracket); - run('Combined Draw Test', drawCombined); - }, -}; -function drawSingle(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - ok(true, 'all pass'); -} -function drawSingle4pxStaveLines(options, contextBuilder) { - const oldThickness = _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS; - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = 4; - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.STAVE_LINE_THICKNESS = oldThickness; - ok(true, 'all pass'); -} -function drawSingleBoth(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); - connector1.setContext(ctx); - const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_RIGHT); - connector2.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector1.draw(); - connector2.draw(); - ok(true, 'all pass'); -} -function drawDouble(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); - connector.setContext(ctx); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBrace(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(100, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); - connector.setContext(ctx); - connector.setText('Piano'); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBraceWide(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, -20, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 200, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); - connector.setContext(ctx); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBracket(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - connector.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); - connector.setContext(ctx); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatBegin(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatEnd(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawThinDouble(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); - stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); - const line = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - line.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.THIN_DOUBLE); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatAdjacent(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - ok(true, 'all pass'); -} -function drawRepeatOffset2(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 10, 150); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(175, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.addClef('treble'); - stave2.addClef('bass'); - stave3.addClef('alto'); - stave4.addClef('treble'); - stave1.addTimeSignature('4/4'); - stave2.addTimeSignature('4/4'); - stave3.addTimeSignature('6/8'); - stave4.addTimeSignature('6/8'); - stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector5.setContext(ctx); - connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); - connector1.setXShift(stave1.getModifierXShift()); - connector3.setXShift(stave3.getModifierXShift()); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - connector5.draw(); - ok(true, 'all pass'); -} -function drawRepeatOffset(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 10, 150); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(25, 120, 150); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 10, 150); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(185, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.addClef('bass'); - stave2.addClef('alto'); - stave3.addClef('treble'); - stave4.addClef('tenor'); - stave3.addKeySignature('Ab'); - stave4.addKeySignature('Ab'); - stave1.addTimeSignature('4/4'); - stave2.addTimeSignature('4/4'); - stave3.addTimeSignature('6/8'); - stave4.addTimeSignature('6/8'); - stave1.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave2.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_END); - stave3.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave4.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - stave1.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.REPEAT_BEGIN); - const connector1 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector2 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave2); - const connector3 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - const connector4 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - const connector5 = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector5.setContext(ctx); - connector1.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector5.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE_LEFT); - connector1.setXShift(stave1.getModifierXShift()); - connector3.setXShift(stave3.getModifierXShift()); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - connector5.draw(); - ok(true, 'all pass'); -} -function drawCombined(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 700); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 10, 300); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 100, 300); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 190, 300); - const stave4 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 280, 300); - const stave5 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 370, 300); - const stave6 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 460, 300); - const stave7 = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(150, 560, 300); - stave1.setText('Violin', _src_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave5.setContext(ctx); - stave6.setContext(ctx); - stave7.setContext(ctx); - const conn_single = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave1, stave7); - const conn_double = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave2, stave3); - const conn_bracket = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave7); - const conn_none = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave4, stave5); - const conn_brace = new _src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave6, stave7); - conn_single.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.SINGLE); - conn_double.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.DOUBLE); - conn_bracket.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACKET); - conn_brace.setType(_src_staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector.type.BRACE); - conn_brace.setXShift(-5); - conn_double.setText('Piano'); - conn_none.setText('Multiple', { shift_y: -15 }); - conn_none.setText('Line Text', { shift_y: 15 }); - conn_brace.setText('Harpsichord'); - conn_single.setContext(ctx); - conn_double.setContext(ctx); - conn_bracket.setContext(ctx); - conn_none.setContext(ctx); - conn_brace.setContext(ctx); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - stave5.draw(); - stave6.draw(); - stave7.draw(); - conn_single.draw(); - conn_double.draw(); - conn_bracket.draw(); - conn_none.draw(); - conn_brace.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveConnectorTests); - - - -/***/ }), - -/***/ "./tests/stavehairpin_tests.ts": -/*!*************************************!*\ - !*** ./tests/stavehairpin_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveHairpinTests": () => (/* binding */ StaveHairpinTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavehairpin */ "./src/stavehairpin.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Author: Raffaele Viglianti, 2012 -// -// StaveHairpin Tests -// TODO: Incorrect property names in the options object: vo, left_ho, right_ho. - - -const StaveHairpinTests = { - Start() { - QUnit.module('StaveHairpin'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple StaveHairpin', simple); - run('Horizontal Offset StaveHairpin', horizontal); - run('Vertical Offset StaveHairpin', vertical); - run('Height StaveHairpin', height); - }, -}; -/** - * Helper function to draw a single hairpin (either crescendo or decrescendo). - * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC. - * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW. - */ -function drawHairpin(first_note, last_note, ctx, type, position, options) { - const hairpin = new _src_stavehairpin__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin({ first_note, last_note }, type); - hairpin.setContext(ctx); - hairpin.setPosition(position); - if (options) { - hairpin.setRenderOptions(options); - } - hairpin.draw(); -} -/** - * Helper function - */ -function createTest(drawTwoHairpins) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const ctx = factory.getContext(); - const stave = factory.Stave(); - const notes = [ - factory - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(factory.Accidental({ type: 'b' }), 0) - .addModifier(factory.Accidental({ type: '#' }), 1), - factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), - factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), - factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), - ]; - const voice = factory.Voice().addTickables(notes); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - drawTwoHairpins(ctx, notes); - ok(true, 'Simple Test'); - }; -} -const simple = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4); - drawHairpin(notes[1], notes[3], ctx, 2, 3); -}); -const horizontal = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 3, { - height: 10, - // TODO: these three property names seem to be incorrect. - // vo => should it be 'y_shift'? - // left_ho => should it be 'left_shift_px'? - // right_ho => should it be 'right_shift_px'? - vo: 20, - left_ho: 20, - right_ho: -20, // right horizontal offset - }); - drawHairpin(notes[3], notes[3], ctx, 2, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 120, // right horizontal offset - }); -}); -const vertical = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, // right horizontal offset - }); - drawHairpin(notes[2], notes[3], ctx, 2, 4, { - height: 10, - y_shift: -15, - left_shift_px: 2, - right_shift_px: 0, // right horizontal offset - }); -}); -const height = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, // right horizontal offset - }); - drawHairpin(notes[2], notes[3], ctx, 2, 4, { - height: 15, - y_shift: 0, - left_shift_px: 2, - right_shift_px: 0, // right horizontal offset - }); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveHairpinTests); - - - -/***/ }), - -/***/ "./tests/staveline_tests.ts": -/*!**********************************!*\ - !*** ./tests/staveline_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveLineTests": () => (/* binding */ StaveLineTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StaveLine Tests - - - -const StaveLineTests = { - Start() { - QUnit.module('StaveLine'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple StaveLine', simple0); - run('StaveLine Arrow Options', simple1); - }, -}; -function simple0(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), - ]; - const voice = f.Voice().addTickables(notes); - f.StaveLine({ - from: notes[0], - to: notes[1], - first_indices: [0], - last_indices: [0], - options: { - font: { family: _src_font__WEBPACK_IMPORTED_MODULE_2__.Font.SERIF, size: 12, style: _src_font__WEBPACK_IMPORTED_MODULE_2__.FontStyle.ITALIC }, - text: 'gliss.', - }, - }); - const staveLine2 = f.StaveLine({ - from: notes[2], - to: notes[3], - first_indices: [2, 1, 0], - last_indices: [0, 1, 2], - }); - staveLine2.render_options.line_dash = [10, 10]; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function simple1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 770); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), - f - .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) - .addModifier(f.Accidental({ type: '#' }), 2), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), - f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), - f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), - f - .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) - .addModifier(f.Accidental({ type: '#' }), 2), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0]], { all: true }); - const voice = f.Voice().setStrict(false).addTickables(notes); - const staveLine0 = f.StaveLine({ - from: notes[0], - to: notes[1], - first_indices: [0], - last_indices: [0], - options: { text: 'Left' }, - }); - const staveLine4 = f.StaveLine({ - from: notes[2], - to: notes[3], - first_indices: [1], - last_indices: [1], - options: { text: 'Right' }, - }); - const staveLine1 = f.StaveLine({ - from: notes[4], - to: notes[5], - first_indices: [0], - last_indices: [0], - options: { text: 'Center' }, - }); - const staveLine2 = f.StaveLine({ - from: notes[6], - to: notes[7], - first_indices: [1], - last_indices: [0], - }); - const staveLine3 = f.StaveLine({ - from: notes[6], - to: notes[7], - first_indices: [2], - last_indices: [2], - options: { text: 'Top' }, - }); - staveLine0.render_options.draw_end_arrow = true; - staveLine0.render_options.text_justification = 1; - staveLine0.render_options.text_position_vertical = 2; - staveLine1.render_options.draw_end_arrow = true; - staveLine1.render_options.arrowhead_length = 30; - staveLine1.render_options.line_width = 5; - staveLine1.render_options.text_justification = 2; - staveLine1.render_options.text_position_vertical = 2; - staveLine4.render_options.line_width = 2; - staveLine4.render_options.draw_end_arrow = true; - staveLine4.render_options.draw_start_arrow = true; - staveLine4.render_options.arrowhead_angle = 0.5; - staveLine4.render_options.arrowhead_length = 20; - staveLine4.render_options.text_justification = 3; - staveLine4.render_options.text_position_vertical = 2; - staveLine2.render_options.draw_start_arrow = true; - staveLine2.render_options.line_dash = [5, 4]; - staveLine3.render_options.draw_end_arrow = true; - staveLine3.render_options.draw_start_arrow = true; - staveLine3.render_options.color = 'red'; - staveLine3.render_options.text_position_vertical = 1; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveLineTests); - - - -/***/ }), - -/***/ "./tests/stavemodifier_tests.ts": -/*!**************************************!*\ - !*** ./tests/stavemodifier_tests.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveModifierTests": () => (/* binding */ StaveModifierTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StaveModifier Tests - - - - -const StaveModifierTests = { - Start() { - QUnit.module('StaveModifier'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Stave Draw Test', draw); - run('Begin & End StaveModifier Test', drawBeginAndEnd); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 100, 'getYForNote(0)'); - equal(stave.getYForLine(5), 100, 'getYForLine(5)'); - equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -function drawBeginAndEnd(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 400); - stave.setContext(ctx); - stave.setTimeSignature('C|'); - stave.setKeySignature('Db'); - stave.setClef('treble'); - stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.REPEAT_BEGIN); - stave.setEndClef('alto'); - stave.setEndTimeSignature('9/8'); - stave.setEndKeySignature('G', 'C#'); - stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.DOUBLE); - stave.draw(); - // change - const END = _src_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.END; - stave.setY(100); - stave.setTimeSignature('3/4'); - stave.setKeySignature('G', 'C#'); - stave.setClef('bass'); - stave.setBegBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); - stave.setClef('treble', undefined, undefined, END); - stave.setTimeSignature('C', undefined, END); - stave.setKeySignature('F', undefined, END); - stave.setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_2__.BarlineType.SINGLE); - stave.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveModifierTests); - - - -/***/ }), - -/***/ "./tests/stavenote_tests.ts": -/*!**********************************!*\ - !*** ./tests/stavenote_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveNoteTests": () => (/* binding */ StaveNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/accidental */ "./src/accidental.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_fraction__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/fraction */ "./src/fraction.ts"); -/* harmony import */ var _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _src_modifier__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/modifier */ "./src/modifier.ts"); -/* harmony import */ var _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../src/stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StaveNote Tests -// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding? -// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers). - - - - - - - - - - - - - - - - - - -const StaveNoteTests = { - Start() { - QUnit.module('StaveNote'); - test('Tick', ticks); - test('Tick - New API', ticksNewAPI); - test('Stem', stem); - test('Automatic Stem Direction', autoStem); - test('Stem Extension Pitch', stemExtensionPitch); - test('Displacement after calling setStemDirection', setStemDirectionDisplacement); - test('StaveLine', staveLine); - test('Width', width); - test('TickContext', tickContext); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); - run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); - run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); - run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); - run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); - run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); - run('StaveNote Draw - Slash', drawSlash); - run('Displacements', displacements); - run('StaveNote Draw - Bass 2', drawBass); - run('StaveNote Draw - Key Styles', drawKeyStyles); - run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); - run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); - run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); - run('StaveNote Draw - StaveNote Styles', drawNoteStyles); - run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); - run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); - run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); - run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); - run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); - run('No Padding', noPadding); - run('Note Heads Placement - Simple', noteHeadsSimple); - run('Note Heads Placement - Hidden Notes', noteHeadsHidden); - run('Center Aligned Note', centerAlignedRest); - run('Center Aligned Note with Articulation', centerAlignedRestFermata); - run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); - run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); - run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); - // This interactivity test currently only works with the SVG backend. - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { - clef: 'treble', - octaveShift: 0, - restKey: 'r/4', - ui: true, - }); - }, -}; -// Helper function to create StaveNotes. -const staveNote = (struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct); -/** - * Helper function to draw a note with an optional bounding box. - */ -function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { - // Associate the note with the stave. - note.setStave(stave); - // A ModifierContext is required for dots and other modifiers to be drawn properly. - // If added, it changes the bounding box of a note, even if there are no modifiers to draw. - // See StaveNote.minNoteheadPadding in stavenote.ts. - if (addModifierContext) { - note.addToModifierContext(new _src_modifiercontext__WEBPACK_IMPORTED_MODULE_11__.ModifierContext()); - } - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(x); - note.setContext(context).draw(); - if (drawBoundingBox) { - const bb = note.getBoundingBox(); - context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - context.stroke(); - } - return note; -} -function ticks() { - const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; - // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]` - const tickTests = { - 'Breve note': ['1/2', 8.0, 'n'], - 'Whole note': ['w', 4.0, 'n'], - 'Quarter note': ['q', 1.0, 'n'], - 'Dotted half note': ['hd', 3.0, 'n'], - 'Doubled-dotted half note': ['hdd', 3.5, 'n'], - 'Triple-dotted half note': ['hddd', 3.75, 'n'], - 'Dotted half rest': ['hdr', 3.0, 'r'], - 'Double-dotted half rest': ['hddr', 3.5, 'r'], - 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], - 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], - 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], - 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], - 'Dotted muted 8th note': ['8dm', 0.75, 'm'], - 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], - 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], - }; - Object.keys(tickTests).forEach((testName) => { - const testData = tickTests[testName]; - const durationString = testData[0]; - const expectedBeats = testData[1]; - const expectedNoteType = testData[2]; - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); - equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); - equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); - }); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); -} -function ticksNewAPI() { - const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_6__.Flow.RESOLUTION) / 4; - // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]` - const tickTests = { - 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], - 'Whole note': [{ duration: 'w' }, 4.0, 'n'], - 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], - 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], - 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], - 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], - 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], - 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], - 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], - 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], - 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], - 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], - 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], - 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], - 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], - }; - Object.keys(tickTests).forEach(function (testName) { - const testData = tickTests[testName]; - const noteData = testData[0]; - const expectedBeats = testData[1]; - const expectedNoteType = testData[2]; - noteData.keys = ['c/4', 'e/4', 'g/4']; - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(noteData); - equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); - equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); - }); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); - throws(() => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); -} -function stem() { - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); - equal(note.getStemDirection(), _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, 'Default note has UP stem'); -} -function autoStem() { - const testData = [ - [['c/5', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - [['e/4', 'g/4', 'c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], - [['c/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - [['a/4', 'e/5', 'g/5'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - [['b/4'], _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - ]; - testData.forEach((td) => { - const keys = td[0]; - const expectedStemDirection = td[1]; - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '8' }); - equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP ? 'up' : 'down')); - }); -} -function stemExtensionPitch() { - // [keys, expectedStemExtension, override stem direction] - const testData = [ - [['c/5', 'e/5', 'g/5'], 0, 0], - [['e/4', 'g/4', 'c/5'], 0, 0], - [['c/5'], 0, 0], - [['f/3'], 15, 0], - [['f/3'], 15, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], - [['f/3'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - [['f/3', 'e/5'], 0, 0], - [['g/6'], 25, 0], - [['g/6'], 25, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN], - [['g/6'], 0, _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP], - ]; - testData.forEach((td) => { - const keys = td[0]; - const expectedStemExtension = td[1]; - const overrideStemDirection = td[2]; - let note; - if (overrideStemDirection === 0) { - note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, auto_stem: true, duration: '4' }); - } - else { - note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); - } - equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); - // set to weird Stave - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300, { spacing_between_lines_px: 20 }); - note.setStave(stave); - equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); - // const whole_note = new StaveNote({ keys: keys, duration: 'w' }); - // equal( - // whole_note.getStemExtension(), - // -1 * Flow.STEM_HEIGHT, - // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT' - // ); - }); -} -function setStemDirectionDisplacement() { - function getDisplacements(note) { - return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); - } - const stemUpDisplacements = [false, true, false]; - const stemDownDisplacements = [true, false, false]; - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP, duration: '4' }); - deepEqual(getDisplacements(note), stemUpDisplacements); - note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN); - deepEqual(getDisplacements(note), stemDownDisplacements); - note.setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP); - deepEqual(getDisplacements(note), stemUpDisplacements); -} -function staveLine() { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 300); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); - note.setStave(stave); - const props = note.getKeyProps(); - equal(props[0].line, 0, 'C/4 on line 0'); - equal(props[1].line, 1, 'E/4 on line 1'); - equal(props[2].line, 2.5, 'A/4 on line 2.5'); - const ys = note.getYs(); - equal(ys.length, 3, 'Chord should be rendered on three lines'); - equal(ys[0], 100, 'Line for C/4'); - equal(ys[1], 90, 'Line for E/4'); - equal(ys[2], 75, 'Line for A/4'); -} -function width() { - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); - throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); -} -function tickContext() { - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 400); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); - expect(0); -} -function drawBasic(options, contextBuilder) { - const clef = options.params.clef; - const octaveShift = options.params.octaveShift; - const restKey = options.params.restKey; - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); - stave.setContext(ctx); - stave.addClef(clef); - stave.draw(); - const lowerKeys = ['c/', 'e/', 'a/']; - const higherKeys = ['c/', 'e/', 'a/']; - for (let k = 0; k < lowerKeys.length; k++) { - lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); - higherKeys[k] = higherKeys[k] + (5 + octaveShift); - } - const restKeys = [restKey]; - const noteStructs = [ - { clef: clef, keys: higherKeys, duration: '1/2' }, - { clef: clef, keys: lowerKeys, duration: 'w' }, - { clef: clef, keys: higherKeys, duration: 'h' }, - { clef: clef, keys: lowerKeys, duration: 'q' }, - { clef: clef, keys: higherKeys, duration: '8' }, - { clef: clef, keys: lowerKeys, duration: '16' }, - { clef: clef, keys: higherKeys, duration: '32' }, - { clef: clef, keys: higherKeys, duration: '64' }, - { clef: clef, keys: higherKeys, duration: '128' }, - { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: restKeys, duration: '1/2r' }, - { clef: clef, keys: restKeys, duration: 'wr' }, - { clef: clef, keys: restKeys, duration: 'hr' }, - { clef: clef, keys: restKeys, duration: 'qr' }, - { clef: clef, keys: restKeys, duration: '8r' }, - { clef: clef, keys: restKeys, duration: '16r' }, - { clef: clef, keys: restKeys, duration: '32r' }, - { clef: clef, keys: restKeys, duration: '64r' }, - { clef: clef, keys: restKeys, duration: '128r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - expect(noteStructs.length * 2); - const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { - child.setAttribute('fill', color); - child.setAttribute('stroke', color); - }); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); - // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes. - if (options.params.ui) { - const item = note.getSVGElement(); - if (item) { - item.addEventListener('mouseover', colorDescendants(item, 'green'), false); - item.addEventListener('mouseout', colorDescendants(item, 'black'), false); - } - } - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawBoundingBoxes(options, contextBuilder) { - const clef = options.params.clef; - const octaveShift = options.params.octaveShift; - const restKey = options.params.restKey; - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 30, 750); - stave.setContext(ctx); - stave.addClef(clef); - stave.draw(); - const lowerKeys = ['c/', 'e/', 'a/']; - const higherKeys = ['c/', 'e/', 'a/']; - for (let k = 0; k < lowerKeys.length; k++) { - lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); - higherKeys[k] = higherKeys[k] + (5 + octaveShift); - } - const restKeys = [restKey]; - const noteStructs = [ - { clef: clef, keys: higherKeys, duration: '1/2' }, - { clef: clef, keys: lowerKeys, duration: 'w' }, - { clef: clef, keys: higherKeys, duration: 'h' }, - { clef: clef, keys: lowerKeys, duration: 'q' }, - { clef: clef, keys: higherKeys, duration: '8' }, - { clef: clef, keys: lowerKeys, duration: '16' }, - { clef: clef, keys: higherKeys, duration: '32' }, - { clef: clef, keys: higherKeys, duration: '64' }, - { clef: clef, keys: higherKeys, duration: '128' }, - { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '128' }, - { clef: clef, keys: restKeys, duration: '1/2r' }, - { clef: clef, keys: restKeys, duration: 'wr' }, - { clef: clef, keys: restKeys, duration: 'hr' }, - { clef: clef, keys: restKeys, duration: 'qr' }, - { clef: clef, keys: restKeys, duration: '8r' }, - { clef: clef, keys: restKeys, duration: '16r' }, - { clef: clef, keys: restKeys, duration: '32r' }, - { clef: clef, keys: restKeys, duration: '64r' }, - { clef: clef, keys: restKeys, duration: '128r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawBass(options, contextBuilder) { - expect(40); - const ctx = contextBuilder(options.elementId, 600, 280); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); - stave.setContext(ctx); - stave.addClef('bass'); - stave.draw(); - const noteStructs = [ - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['r/4'], duration: '1/2r' }, - { keys: ['r/4'], duration: 'wr' }, - { keys: ['r/4'], duration: 'hr' }, - { keys: ['r/4'], duration: 'qr' }, - { keys: ['r/4'], duration: '8r' }, - { keys: ['r/4'], duration: '16r' }, - { keys: ['r/4'], duration: '32r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function displacements(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 700, 155); - ctx.scale(0.9, 0.9); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 675); - stave.setContext(ctx); - stave.draw(); - const noteStructs = [ - { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, - { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, - { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, - { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, - { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, - { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, - { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, - { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { - keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], - duration: '64', - stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN, - }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawHarmonicAndMuted(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 1000, 180); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 950); - stave.setContext(ctx); - stave.draw(); - const noteStructs = [ - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawSlash(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 650); - stave.setContext(ctx); - stave.draw(); - const notes = [ - { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '1/2s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: 'ws', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: 'hs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: 'qs', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '16s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '32s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '64s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '128s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - // Beam - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '8s', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - ]; - const stave_notes = notes.map((struct) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(struct)); - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[16], stave_notes[17]]); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam([stave_notes[18], stave_notes[19]]); - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, stave_notes, false); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - ok('Slash Note Heads'); -} -function drawKeyStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - ctx.scale(3, 3); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) - .setStave(stave) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1) - .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawNoteStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) - .setStave(stave) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); - note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawNoteStemStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) - .setStave(stave) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); - note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok('Note Stem Style'); -} -function drawNoteStemLengths(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 975, 150); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); - stave.setContext(ctx).draw(); - const keys = [ - 'e/3', - 'f/3', - 'g/3', - 'a/3', - 'b/3', - 'c/4', - 'd/4', - 'e/4', - 'f/4', - 'g/4', - 'f/5', - 'g/5', - 'a/5', - 'b/5', - 'c/6', - 'd/6', - 'e/6', - 'f/6', - 'g/6', - 'a/6', - ]; - const notes = []; - let note; - let i; - for (i = 0; i < keys.length; i++) { - let duration = 'q'; - if (i % 2 === 1) { - duration = '8'; - } - note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); - note.setContext(ctx); - notes.push(note); - } - const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; - for (i = 0; i < whole_keys.length; i++) { - note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note); - note.setContext(ctx); - notes.push(note); - } - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, notes); - ok('Note Stem Length'); -} -function drawNoteStylesWithFlag(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) - .setStave(stave) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('b'), 1); - note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new _src_tickcontext__WEBPACK_IMPORTED_MODULE_17__.TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawBeamStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 160); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 380); - stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); - stave.setContext(ctx); - stave.draw(); - const notes = [ - // beam1 - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - // should be unstyled... - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - // beam2 should also be unstyled - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - // beam3 - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - { keys: ['b/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }, - // beam4 - { keys: ['d/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - { keys: ['c/6', 'd/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - // unbeamed - { keys: ['d/6', 'e/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - // unbeamed, unstyled - { keys: ['e/6', 'f/6'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }, - ]; - const staveNotes = notes.map((note) => new _src_stavenote__WEBPACK_IMPORTED_MODULE_13__.StaveNote(note)); - const beam1 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(0, 2)); - const beam2 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(3, 5)); - const beam3 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(5, 7)); - const beam4 = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes.slice(7, 9)); - // stem, key, ledger, flag; beam.setStyle - beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); - staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); - staveNotes[0].setStemStyle({ strokeStyle: 'green' }); - staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); - staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); - staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); - beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); - staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); - staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); - _src_formatter__WEBPACK_IMPORTED_MODULE_7__.Formatter.FormatAndDraw(ctx, stave, staveNotes, false); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - beam3.setContext(ctx).draw(); - beam4.setContext(ctx).draw(); - ok('draw beam styles'); -} -function dotsAndFlagsStemUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - ctx.scale(1.0, 1.0); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); - const notes = [ - staveNote({ keys: ['f/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '32' }), - staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(notes, { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([notes[5], notes[11]], { all: true }); - stave.setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - draw(notes[i], stave, ctx, i * 65); - } - ok(true, 'Full Dot'); -} -function dotsAndFlagsStemDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 160); - ctx.scale(1.0, 1.0); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['e/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '4', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - ok(true, 'Full Dot'); -} -function dotsAndBeamsUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - ctx.scale(1.0, 1.0); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['f/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['f/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '32' }), - staveNote({ keys: ['g/4'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - staveNote({ keys: ['g/4'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.UP }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - beam.setContext(ctx).draw(); - ok(true, 'Full Dot'); -} -function dotsAndBeamsDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 160); - ctx.scale(1.0, 1.0); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_12__.Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['e/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '8', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '16', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '32', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '64', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '128', stem_direction: _src_stem__WEBPACK_IMPORTED_MODULE_14__.Stem.DOWN }), - ]; - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach(staveNotes, { all: true }); - const beam = new _src_beam__WEBPACK_IMPORTED_MODULE_4__.Beam(staveNotes); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - beam.setContext(ctx).draw(); - ok(true, 'Full Dot'); -} -function noteHeadsSimple(options) { - const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); - const score = vf.EasyScore(); - const system1 = vf.System({ y: 100, x: 50, width: 200 }); - system1 - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), - score.voice(score.notes('g4/w')), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - const system2 = vf.System({ y: 100, x: 250, width: 150 }); - system2.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], - }); - const system3 = vf.System({ y: 100, x: 400, width: 150 }); - system3.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], - }); - const system4 = vf.System({ y: 100, x: 550, width: 150 }); - system4.addStave({ - voices: [ - score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), - score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), - ], - }); - vf.draw(); - expect(0); -} -function noPadding(options) { - const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 500); - const score = vf.EasyScore(); - function newStave(y, noPadding) { - let system = vf.System({ y, x: 50, width: 200, noPadding }); - system - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), - score.voice(score.notes('g4/w')), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system = vf.System({ y, x: 250, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], - }); - system = vf.System({ y, x: 400, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], - }); - system = vf.System({ y, x: 550, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], - }); - } - newStave(100, true); - newStave(200, false); - vf.draw(); - expect(0); -} -function noteHeadsHidden(options) { - const vf = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 800, 250); - const score = vf.EasyScore(); - const system1 = vf.System({ y: 100, x: 50, width: 200 }); - const notes1 = score.notes('g4/w'); - notes1[0].render_options.draw = false; - system1 - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), - score.voice(notes1), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - const system2 = vf.System({ y: 100, x: 250, width: 150 }); - const notes2 = score.notes('b4/w'); - notes2[0].render_options.draw = false; - system2.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], - }); - const system3 = vf.System({ y: 100, x: 400, width: 150 }); - system3.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], - }); - const system4 = vf.System({ y: 100, x: 550, width: 150 }); - const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); - notes4[0].render_options.draw = false; - notes4[2].render_options.draw = false; - system4.addStave({ - voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], - }); - vf.draw(); - expect(0); -} -function centerAlignedRest(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedRestFermata(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f - .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) - .addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_3__.Articulation('a@a').setPosition(3), 0); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedRestAnnotation(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f - .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Whole measure rest').setVerticalJustification(_src_annotation__WEBPACK_IMPORTED_MODULE_2__.AnnotationVerticalJustify.TOP), 0); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedNoteMultiModifiers(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - function newFinger(num, pos) { - return new _src_frethandfinger__WEBPACK_IMPORTED_MODULE_9__.FretHandFinger(num).setPosition(pos); - } - const note = f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) - .addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_2__.Annotation('Test').setPosition(3), 0) - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_16__.Stroke(2)) - .addModifier(new _src_accidental__WEBPACK_IMPORTED_MODULE_1__.Accidental('#'), 1) - .addModifier(newFinger('3', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 0) - .addModifier(newFinger('2', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.LEFT), 2) - .addModifier(newFinger('1', _src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.RIGHT), 1) - .addModifier(new _src_stringnumber__WEBPACK_IMPORTED_MODULE_15__.StringNumber('4').setPosition(_src_modifier__WEBPACK_IMPORTED_MODULE_10__.Modifier.Position.BELOW), 2); - _src_dot__WEBPACK_IMPORTED_MODULE_5__.Dot.buildAndAttach([note], { all: true }); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedMultiVoice(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); - // Set a custom duration of 3 / 8. - const custom_duration = new _src_fraction__WEBPACK_IMPORTED_MODULE_8__.Fraction(3, 8); - // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest? - const notes0 = [ - f.StaveNote({ - keys: ['c/4'], - duration: '1r', - align_center: true, - duration_override: custom_duration, - }), - ]; - const createStaveNote = (struct) => f.StaveNote(struct); - const notes1 = [ - { keys: ['b/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ].map(createStaveNote); - notes1[1].addModifier(f.Accidental({ type: '#' }), 0); - f.Beam({ notes: notes1 }); - const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); - const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); - f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveNoteTests); - - - -/***/ }), - -/***/ "./tests/stavetie_tests.ts": -/*!*********************************!*\ - !*** ./tests/stavetie_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTieTests": () => (/* binding */ StaveTieTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StaveTie Tests - - -const StaveTieTests = { - Start() { - QUnit.module('StaveTie'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple StaveTie', simple); - run('Chord StaveTie', chord); - run('Stem Up StaveTie', stemUp); - run('No End Note With Clef', noEndNote1); - run('No End Note', noEndNote2); - run('No Start Note With Clef', noStartNote1); - run('No Start Note', noStartNote2); - run('Set Direction Down', setDirectionDown); - run('Set Direction Up', setDirectionUp); - }, -}; -/** - * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw. - */ -function createTest(notesData, setupTies) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 300); - const stave = factory.Stave(); - const score = factory.EasyScore(); - const notes = score.notes(notesData[0], notesData[1]); - const voice = score.voice(notes); - // const tickables = voice.getTickables(); // same as the notes that we passed in. - setupTies(factory, notes, stave); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); - }; -} -const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - }); -}); -const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1, 2], - last_indices: [0, 1, 2], - }); -}); -const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1, 2], - last_indices: [0, 1, 2], - }); -}); -const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { - stave.addEndClef('treble'); - f.StaveTie({ - from: notes[1], - first_indices: [2], - last_indices: [2], - text: 'slow.', - }); -}); -const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[1], - first_indices: [2], - last_indices: [2], - text: 'slow.', - }); -}); -const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { - stave.addClef('treble'); - f.StaveTie({ - to: notes[0], - first_indices: [2], - last_indices: [2], - text: 'H', - }); -}); -const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - to: notes[0], - first_indices: [2], - last_indices: [2], - text: 'H', - }); -}); -const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN }, - }); -}); -const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - options: { direction: _src_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP }, - }); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StaveTieTests); - - - -/***/ }), - -/***/ "./tests/stringnumber_tests.ts": -/*!*************************************!*\ - !*** ./tests/stringnumber_tests.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StringNumberTests": () => (/* binding */ StringNumberTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/glyph */ "./src/glyph.ts"); -/* harmony import */ var _src_renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/renderer */ "./src/renderer.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// StringNumber Tests - - - - - - -const StringNumberTests = { - Start() { - QUnit.module('StringNumber'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('String Number In Notation', drawMultipleMeasures); - run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); - run('Fret Hand Finger In Notation', drawFretHandFingers); - run('Multi Voice With Strokes, String & Finger Numbers', multi); - run('Complex Measure With String & Finger Numbers', drawAccidentals); - }, -}; -function drawMultipleMeasures(options) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 775, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ width: 300 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); - const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); - notes1[0] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); - notes1[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) - .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) - .addModifier(f - .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) - .setLastNote(notes1[3]) - .setLineEndType(_src_renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN), 2); - notes1[2] - .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes1[3] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - // bar 2 - juxtaposing second bar next to first bar - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE); - const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); - notes2[0] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); - notes2[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f - .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) - .setLastNote(notes2[3]) - .setDashed(false), 2); - notes2[2] - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes2[3] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - // bar 3 - juxtaposing third bar next to second bar - const stave3 = f - .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); - notesBar3[0] - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) - .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); - const voice3 = score.voice(notesBar3, { time: '6/4' }); - f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); - f.draw(); - ok(true, 'String Number'); -} -function drawFretHandFingers(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 725, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ width: 350 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE).addClef('treble'); - const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); - notes1[0] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes1[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes1[2] - .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes1[3] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) - .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) - .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - // bar 2 - juxtaposing second bar next to first bar - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.END); - const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { - stem: 'up', - }); - notes2[0] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); - notes2[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes2[2] - .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2); - notes2[3] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) - .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) - .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'String Number'); -} -function multi(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - const stave = f.Stave(); - const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); - notes1[0] - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(5)) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); - notes1[1] - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(6)) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2); - notes1[2] - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(2)) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); - notes1[3] - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_5__.Stroke(1)) - .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); - const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); - notes2[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); - notes2[2].addModifier(f.Accidental({ type: '#' }), 0); - notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); - // Position string number 6 beneath the strum arrow: left (15) and down (18) - notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); - // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1! - // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line. - const voices = [score.voice(notes2), score.voice(notes1)]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.draw(); - ok(true, 'Strokes Test Multi Voice'); -} -function drawAccidentals(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 750); - const glyphScale = 39; // default font scale - const clefWidth = _src_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth('gClef', glyphScale); // widest clef - const notes = [ - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), - ]; - notes[0] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[2] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[3] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Accidental({ type: '#' }), 5); - const voice = f.Voice().addTickables(notes); - const ctx = f.getContext(); - const formatter = f.Formatter().joinVoices([voice]); - const stavePadding = clefWidth + _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave.defaultPadding + 10; - const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); - formatter.format([voice], nwidth); - const stave = f - .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) - .setContext(ctx) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.BarlineType.DOUBLE) - .addClef('treble') - .draw(); - voice.draw(ctx, stave); - ok(true, 'String Number'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StringNumberTests); - - - -/***/ }), - -/***/ "./tests/strokes_tests.ts": -/*!********************************!*\ - !*** ./tests/strokes_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StrokesTests": () => (/* binding */ StrokesTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Strokes Tests - - -const StrokesTests = { - Start() { - QUnit.module('Strokes'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name. - // This will make flow.html easier to read. - run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); - run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); - run('Strokes - Multi Voice', multiVoice); - run('Strokes - Notation and Tab', notesWithTab); - run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); - }, -}; -function brushRollRasquedo(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); - notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - notes1[1] - .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 0); - notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - // bar 2 - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); - notes2[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); - notes2[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); - notes2[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); - notes2[3] - .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) - .addModifier(f.Accidental({ type: 'bb' }), 0) - .addModifier(f.Accidental({ type: 'bb' }), 1) - .addModifier(f.Accidental({ type: 'bb' }), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Brush/Roll/Rasquedo'); -} -function arpeggioDirectionless(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); - const graceNoteStructs = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - ]; - const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); - const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); - graceNoteGroup.beamNotes(); - notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)); - notes1[1] - .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3); - notes1[2] - .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)) - .addModifier(f.Accidental({ type: 'b' }), 1) - .addModifier(graceNoteGroup, 0); - notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(7)).addModifier(f.NoteSubGroup({ - notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], - }), 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - f.draw(); - ok(true, 'Arpeggio directionless (without arrows)'); -} -function multiVoice(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const stave = f.Stave(); - const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); - notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); - notes1[1] - .addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 2); - notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); - notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - const voices = [notes1, notes2].map((notes) => score.voice(notes)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Strokes Test Multi Voice'); -} -function multiNotationAndTab(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 275); - const score = f.EasyScore(); - const stave = f.Stave().addClef('treble'); - // notation upper voice notes - const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); - notes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); - notes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); - notes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); - notes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); - f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); - // tablature upper voice notes - const tabNotes1 = [ - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - ]; - tabNotes1[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3, { all_voices: false })); - tabNotes1[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); - tabNotes1[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2, { all_voices: false })); - tabNotes1[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - const tabNotes2 = [ - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - ]; - const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Strokes Test Notation & Tab Multi Voice'); -} -/* -function drawTabStrokes(options: TestOptions): void { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); - - const tabNotes1 = [ - f.TabNote({ - positions: [ - { str: 2, fret: 8 }, - { str: 3, fret: 9 }, - { str: 4, fret: 10 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 7 }, - { str: 4, fret: 8 }, - { str: 5, fret: 9 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 6 }, - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 5 }, - { str: 6, fret: 5 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 4, fret: 3 }, - { str: 5, fret: 4 }, - { str: 6, fret: 5 }, - ], - duration: '4', - }), - ]; - - tabNotes1[0].addStroke(0, new Stroke(1)); - tabNotes1[1].addStroke(0, new Stroke(2)); - tabNotes1[2].addStroke(0, new Stroke(3)); - tabNotes1[3].addStroke(0, new Stroke(4)); - - const tabVoice1 = f.Voice().addTickables(tabNotes1); - - f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1); - - // bar 2 - const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE); - - const tabNotes2 = [ - f.TabNote({ - positions: [ - { str: 2, fret: 7 }, - { str: 3, fret: 8 }, - { str: 4, fret: 9 }, - ], - duration: '2', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 6 }, - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 5 }, - { str: 6, fret: 5 }, - ], - duration: '2', - }), - ]; - - tabNotes2[0].addStroke(0, new Stroke(6)); - tabNotes2[1].addStroke(0, new Stroke(5)); - - const tabVoice2 = f.Voice().addTickables(tabNotes2); - - f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2); - - f.draw(); - - ok(true, 'Strokes Tab test'); -} -*/ -function notesWithTab(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 500, 300); - const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); - const notes = [ - f - .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 1) - .addModifier(f.Accidental({ type: 'b' }), 0), - f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), - f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), - f - .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) - .addModifier(f.Accidental({ type: '#' }), 3), - f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), - f - .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4), - ]; - const tabstave = f - .TabStave({ x: stave.getX(), y: 140, width: 450 }) - .addClef('tab') - .setNoteStartX(stave.getNoteStartX()); - const tabNotes = [ - f - .TabNote({ - positions: [ - { str: 1, fret: 3 }, - { str: 2, fret: 2 }, - { str: 3, fret: 3 }, - ], - duration: '4', - }) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full'), 0), - f - .TabNote({ - positions: [ - { str: 2, fret: 3 }, - { str: 3, fret: 5 }, - ], - duration: '4', - }) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Unison'), 1), - f.TabNote({ - positions: [ - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 7 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 5 }, - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 5 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 7 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 5 }, - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 5 }, - ], - duration: '8', - }), - ]; - notes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - notes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); - notes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); - notes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); - notes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); - notes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); - tabNotes[0].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(1)); - tabNotes[1].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(2)); - tabNotes[2].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(3)); - tabNotes[3].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(4)); - tabNotes[4].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(5)); - tabNotes[5].addStroke(0, new _src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke(6)); - f.StaveConnector({ - top_stave: stave, - bottom_stave: tabstave, - type: 'bracket', - }); - f.StaveConnector({ - top_stave: stave, - bottom_stave: tabstave, - type: 'single', - }); - const voice = f.Voice().addTickables(notes); - const tabVoice = f.Voice().addTickables(tabNotes); - const beams = _src_index__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); - f.draw(); - beams.forEach(function (beam) { - beam.setContext(f.getContext()).draw(); - }); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StrokesTests); - - - -/***/ }), - -/***/ "./tests/style_tests.ts": -/*!******************************!*\ - !*** ./tests/style_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StyleTests": () => (/* binding */ StyleTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/articulation */ "./src/articulation.ts"); -/* harmony import */ var _src_bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/bend */ "./src/bend.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_keysignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _src_ornament__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/ornament */ "./src/ornament.ts"); -/* harmony import */ var _src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _src_strokes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/strokes */ "./src/strokes.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Style Tests -// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font. -// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it? -// Annotation sets its own font. -// TabNote sets its own font. -// Is there a way to set all the text fonts in one go? - - - - - - - - - - - - - -const StyleTests = { - Start() { - QUnit.module('Style'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Basic Style', stave); - run('TabNote modifiers Style', tab); - }, -}; -/** - * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }. - * Used for updating the fillStyle and optionally the strokeStyle. - */ -function FS(fillStyle, strokeStyle) { - const ret = { fillStyle }; - if (strokeStyle) { - ret.strokeStyle = strokeStyle; - } - return ret; -} -/** - * Color elements on a stave. - */ -function stave(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 150); - const stave = f.Stave({ x: 25, y: 20, width: 500 }); - // Stave modifiers test. - const keySig = new _src_keysignature__WEBPACK_IMPORTED_MODULE_5__.KeySignature('D'); - keySig.addToStave(stave); - keySig.setStyle(FS('blue')); - stave.addTimeSignature('4/4'); - const timeSig = stave.getModifiers(_src_stavemodifier__WEBPACK_IMPORTED_MODULE_8__.StaveModifierPosition.BEGIN, _src_timesignature__WEBPACK_IMPORTED_MODULE_12__.TimeSignature.CATEGORY); - timeSig[0].setStyle(FS('brown')); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), - // voice.draw() test. - f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), - // GhostNote modifiers test. - f.GhostNote({ duration: '16' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('GhostNote green text').setStyle(FS('green')), 0), - ]; - const notes0 = notes[0]; - const notes1 = notes[1]; - notes0.setKeyStyle(0, FS('red')); - notes1.setKeyStyle(0, FS('red')); - // StaveNote modifiers test. - const mods1 = notes1.getModifiers(); - mods1[0].setStyle(FS('green')); - notes0.addModifier(new _src_articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation('a.').setPosition(4).setStyle(FS('green')), 0); - notes0.addModifier(new _src_ornament__WEBPACK_IMPORTED_MODULE_7__.Ornament('mordent').setStyle(FS('lightgreen')), 0); - notes1.addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('blue').setStyle(FS('blue')), 0); - notes1.addModifier(new _src_notesubgroup__WEBPACK_IMPORTED_MODULE_6__.NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Basic Style'); -} -/** - * Color elements on a guitar tab. - */ -function tab(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 140); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_11__.TabStave(10, 10, 450).addTabGlyph(); - stave.getModifiers()[2].setStyle(FS('blue')); - stave.setContext(ctx).draw(); - const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_10__.TabNote(noteStruct); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('green text').setStyle(FS('green')), 0), - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }) - .addModifier(new _src_bend__WEBPACK_IMPORTED_MODULE_3__.Bend('Full').setStyle(FS('brown')), 0) - .addStroke(0, new _src_strokes__WEBPACK_IMPORTED_MODULE_9__.Stroke(1, { all_voices: false }).setStyle(FS('blue'))), - ]; - _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'TabNote Modifiers Style'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(StyleTests); - - - -/***/ }), - -/***/ "./tests/tabnote_tests.ts": -/*!********************************!*\ - !*** ./tests/tabnote_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabNoteTests": () => (/* binding */ TabNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TabNote Tests - - - - - - - - - - -const TabNoteTests = { - Start() { - QUnit.module('TabNote'); - test('Tick', ticks); - test('TabStave Line', tabStaveLine); - test('Width', width); - test('TickContext', tickContext); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('TabNote Draw', draw); - run('TabNote Stems Up', drawStemsUp); - run('TabNote Stems Down', drawStemsDown); - run('TabNote Stems Up Through Stave', drawStemsUpThrough); - run('TabNote Stems Down Through Stave', drawStemsDownThrough); - run('TabNote Stems with Dots', drawStemsDotted); - }, -}; -function ticks() { - const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.RESOLUTION) / 4; - let note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); - equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); - note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); - equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); -} -function tabStaveLine() { - const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - const positions = note.getPositions(); - equal(positions[0].str, 6, 'String 6, Fret 6'); - equal(positions[0].fret, 6, 'String 6, Fret 6'); - equal(positions[1].str, 4, 'String 4, Fret 5'); - equal(positions[1].fret, 5, 'String 4, Fret 5'); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave(10, 10, 300); - note.setStave(stave); - const ys = note.getYs(); - equal(ys.length, 2, 'Chord should be rendered on two lines'); - equal(ys[0], 100, 'Line for String 6, Fret 6'); - equal(ys[1], 80, 'Line for String 4, Fret 5'); -} -function width() { - expect(1); - const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); -} -function tickContext() { - const note = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext().addTickable(note).preFormat().setX(10).setPadding(0); - equal(tickContext.getWidth(), 7); -} -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 140); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const notes = [ - { positions: [{ str: 6, fret: 6 }], duration: '4' }, - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 'x' }, - { str: 5, fret: 15 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 'x' }, - { str: 5, fret: 5 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '4', - }, - { - positions: [ - { str: 6, fret: 0 }, - { str: 5, fret: 5 }, - { str: 4, fret: 5 }, - { str: 3, fret: 4 }, - { str: 2, fret: 3 }, - { str: 1, fret: 0 }, - ], - duration: '4', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '4', - }, - ]; - // Helper function - function showNote(noteStruct, stave, ctx, x) { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(noteStruct); - const tickContext = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_8__.TickContext(); - tickContext.addTickable(tabNote).preFormat().setX(x); - tabNote.setContext(ctx).setStave(stave); - tabNote.draw(); - return tabNote; - } - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const tabNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawStemsUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -function drawStemsDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'All objects have been drawn'); -} -function drawStemsUpThrough(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 30, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_stem_through_stave = true; - return tabNote; - }); - ctx.setFont(_src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, 10, _src_font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.BOLD); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -function drawStemsDownThrough(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 250); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550, { num_lines: 8 }); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - { str: 6, fret: 10 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - { str: 5, fret: 5 }, - { str: 7, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_stem_through_stave = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - ctx.setFont('Arial', 10, 'bold'); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'All objects have been drawn'); -} -function drawStemsDotted(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_7__.TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4d', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '4dd', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: -1, - }, - ]; - const notes = specs.map((struct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_6__.TabNote(struct, true /* draw_stem */)); - _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes[0], notes[2], notes[2]]); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_9__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_9__.VoiceMode.SOFT); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_4__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabNoteTests); - - - -/***/ }), - -/***/ "./tests/tabslide_tests.ts": -/*!*********************************!*\ - !*** ./tests/tabslide_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabSlideTests": () => (/* binding */ TabSlideTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabslide__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TabSlide Tests - - - - - - - -const TabSlideTests = { - Start() { - QUnit.module('TabSlide'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple TabSlide', simple); - run('Slide Up', slideUp); - run('Slide Down', slideDown); - }, -}; -function tieNotes(notes, indices, stave, ctx) { - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 100); - voice.draw(ctx, stave); - const tie = new _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide({ - first_note: notes[0], - last_note: notes[1], - first_indices: indices, - last_indices: indices, - }, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.SLIDE_UP); - tie.setContext(ctx); - tie.draw(); -} -function setupContext(options, width) { - // eslint-disable-next-line - const context = options.contextBuilder(options.elementId, 350, 140); - context.scale(0.9, 0.9); - context.font = '10pt Arial'; - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -// Helper function to create TabNote objects. -const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_3__.TabNote(noteStruct); -/** - * Test Case - */ -function simple(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { stave, context } = setupContext(options); - tieNotes([ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), - tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), - ], [0], stave, context); - ok(true, 'Simple Test'); -} -/** - * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown. - */ -function multiTest(options, buildTabSlide) { - const { context, stave } = setupContext(options, 440); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ - positions: [ - { str: 4, fret: 4 }, - { str: 5, fret: 4 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 4, fret: 6 }, - { str: 5, fret: 6 }, - ], - duration: '8', - }), - tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), - tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), - tabNote({ - positions: [ - { str: 2, fret: 14 }, - { str: 3, fret: 14 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 2, fret: 16 }, - { str: 3, fret: 16 }, - ], - duration: '8', - }), - ]; - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - buildTabSlide({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note'); - buildTabSlide({ - first_note: notes[2], - last_note: notes[3], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord'); - buildTabSlide({ - first_note: notes[4], - last_note: notes[5], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note high-fret'); - buildTabSlide({ - first_note: notes[6], - last_note: notes[7], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord high-fret'); -} -function slideUp(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideUp); -} -function slideDown(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, _src_tabslide__WEBPACK_IMPORTED_MODULE_4__.TabSlide.createSlideDown); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabSlideTests); - - - -/***/ }), - -/***/ "./tests/tabstave_tests.ts": -/*!*********************************!*\ - !*** ./tests/tabstave_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabStaveTests": () => (/* binding */ TabStaveTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TabStave Tests - - -const TabStaveTests = { - Start() { - QUnit.module('TabStave'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('TabStave Draw Test', draw); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 160); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 300); - stave.setNumLines(6); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 127, 'getYForNote(0)'); - equal(stave.getYForLine(5), 127, 'getYForLine(5)'); - equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabStaveTests); - - - -/***/ }), - -/***/ "./tests/tabtie_tests.ts": -/*!*******************************!*\ - !*** ./tests/tabtie_tests.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabTieTests": () => (/* binding */ TabTieTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/annotation */ "./src/annotation.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_tabstave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _src_tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TabTie Tests - - - - - - - - -const TabTieTests = { - Start() { - QUnit.module('TabTie'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple TabTie', simple); - run('Hammerons', simpleHammerOn); - run('Pulloffs', simplePullOff); - run('Tapping', tap); - run('Continuous', continuous); - }, -}; -/** - * Helper function to create TabNote objects. - */ -const tabNote = (noteStruct) => new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote(noteStruct); -/** - * Helper function to create a RenderContext and TabStave. - */ -function setupContext(options, w = 0, h = 0) { - // eslint-disable-next-line - const context = options.contextBuilder(options.elementId, w || 350, h || 160); - context.setFont('Arial', _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); - const stave = new _src_tabstave__WEBPACK_IMPORTED_MODULE_5__.TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -/** - * Helper function to create the TabTie between two Note objects. - */ -function tieNotes(notes, indices, stave, ctx, text) { - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4); - voice.addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 100); - voice.draw(ctx, stave); - const tie = new _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie({ - first_note: notes[0], - last_note: notes[1], - first_indices: indices, - last_indices: indices, - }, text !== null && text !== void 0 ? text : 'Annotation'); - tie.setContext(ctx); - tie.draw(); -} -/** - * Two notes on string 4 with a tie drawn between them. - */ -function simple(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options); - const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); - const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); - tieNotes([note1, note2], [0], stave, context); - ok(true, 'Simple Test'); -} -function simpleHammerOn(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron); -} -function simplePullOff(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff); -} -/** - * Helper function for the two test cases above (simpleHammerOn and simplePullOff). - */ -function multiTest(options, createTabTie) { - const { context, stave } = setupContext(options, 440, 140); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ - positions: [ - { str: 4, fret: 4 }, - { str: 5, fret: 4 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 4, fret: 6 }, - { str: 5, fret: 6 }, - ], - duration: '8', - }), - tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), - tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), - tabNote({ - positions: [ - { str: 2, fret: 14 }, - { str: 3, fret: 14 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 2, fret: 16 }, - { str: 3, fret: 16 }, - ], - duration: '8', - }), - ]; - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - createTabTie({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note'); - createTabTie({ - first_note: notes[2], - last_note: notes[3], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord'); - createTabTie({ - first_note: notes[4], - last_note: notes[5], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note high-fret'); - createTabTie({ - first_note: notes[6], - last_note: notes[7], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord high-fret'); -} -function tap(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options); - const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new _src_annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation('T'), 0); - const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); - tieNotes([note1, note2], [0], stave, context, 'P'); - ok(true, 'Tapping Test'); -} -function continuous(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options, 440, 140); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), - tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), - tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), - ]; - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_7__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.TIME4_4).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createHammeron({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - _src_tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie.createPulloff({ - first_note: notes[1], - last_note: notes[2], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Continuous Hammeron'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TabTieTests); - - - -/***/ }), - -/***/ "./tests/textbracket_tests.ts": -/*!************************************!*\ - !*** ./tests/textbracket_tests.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextBracketTests": () => (/* binding */ TextBracketTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TextBracket Tests - -const TextBracketTests = { - Start() { - QUnit.module('TextBracket'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple TextBracket', simple0); - run('TextBracket Styles', simple1); - }, -}; -function simple0(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); - const stave = f.Stave(); - const score = f.EasyScore(); - const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); - const voice = score.voice(notes, { time: '5/4' }); - f.TextBracket({ - from: notes[0], - to: notes[4], - text: '15', - options: { - superscript: 'va', - position: 'top', - }, - }); - f.TextBracket({ - from: notes[0], - to: notes[4], - text: '8', - options: { - superscript: 'vb', - position: 'bottom', - line: 3, - }, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function simple1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 550); - const stave = f.Stave(); - const score = f.EasyScore(); - const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); - const voice = score.voice(notes, { time: '5/4' }); - const topOctaves = [ - f.TextBracket({ - from: notes[0], - to: notes[1], - text: 'Cool notes', - options: { - superscript: '', - position: 'top', - }, - }), - f.TextBracket({ - from: notes[2], - to: notes[4], - text: 'Testing', - options: { - position: 'top', - superscript: 'superscript', - // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts. - font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, - }, - }), - ]; - const bottomOctaves = [ - f.TextBracket({ - from: notes[0], - to: notes[1], - text: '8', - options: { - superscript: 'vb', - position: 'bottom', - line: 3, - font: { size: 30 }, - }, - }), - f.TextBracket({ - from: notes[2], - to: notes[4], - text: 'Not cool notes', - options: { - superscript: ' super uncool', - position: 'bottom', - line: 4, - }, - }), - ]; - topOctaves[1].render_options.line_width = 2; - topOctaves[1].render_options.show_bracket = false; - bottomOctaves[0].render_options.underline_superscript = false; - bottomOctaves[0].setDashed(false); - bottomOctaves[1].render_options.bracket_height = 40; - bottomOctaves[1].setDashed(true, [2, 2]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextBracketTests); - - - -/***/ }), - -/***/ "./tests/textformatter_tests.ts": -/*!**************************************!*\ - !*** ./tests/textformatter_tests.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextFormatterTests": () => (/* binding */ TextFormatterTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/textformatter */ "./src/textformatter.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TextFormatter Tests - - - -const TextFormatterTests = { - Start() { - QUnit.module('TextFormatter'); - test('Basic', basic); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTextTests; - run('Accuracy', accuracy); - run('Box Text', textBoxAccuracy); - }, -}; -function basic() { - var _a; - // See: src/fonts/textfonts.ts > loadTextFonts() - const registeredFamilies = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getFontFamilies(); - equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); - // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector: - // https://fontdrop.info/ - // https://opentype.js.org/glyph-inspector.html - const petalumaFormatterInfo = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.getInfo('PetalumaScript'); - equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); - const formatterForPetalumaScript = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); - const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); - equal(metricsPetalumaScriptH.leftSideBearing, 37); - const formatterForRobotoSlab = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); - const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); - equal(metricsRobotoSlabH.advanceWidth, 1578); - // eslint-disable-next-line - // @ts-ignore direct access to protected variable .cacheKey - equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); -} -function accuracy(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 500); - const lineHeight = 30; - const startX = 50; - const fonts = [ - { - family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - { - family: 'Roboto Slab', - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - { - family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - ]; - let startY = 20; - for (let j = 0; j < fonts.length; ++j) { - const font = fonts[j]; - const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); - ctx.setFont(font); - const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; - for (let i = 0; i < texts.length; i++) { - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX, startY); - startY += 5; - ctx.setFillStyle('#3a2'); - ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); - ctx.setFillStyle('#32a'); - startY += 5; - ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); - startY += lineHeight; - } - } - ok(true, 'all pass'); -} -function textBoxAccuracy(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 800); - let startY = 35; - const boxBorder = 2; - const boxPadding = 3; - const startX = 50; - const fonts = [ - { - family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - { - family: 'Roboto Slab', - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - { - family: _src_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, - size: 14, - weight: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _src_font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, - }, - ]; - const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; - for (let j = 0; j < fonts.length; ++j) { - const font = fonts[j]; - const textFormatter = _src_textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(font); - ctx.save(); - ctx.setFont(font); - for (let i = 0; i < texts.length; i++) { - const textY = textFormatter.getYForStringInPx(texts[i]); - const height = textY.height + 2 * boxPadding; - const headroom = -1 * textY.yMin; - const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); - ctx.setLineWidth(boxBorder); - ctx.setStrokeStyle('#3a2'); - ctx.setFillStyle('#3a2'); - ctx.beginPath(); - ctx.rect(startX, startY - height + headroom, width, height); - ctx.stroke(); - startY += height * 1.5 + boxBorder * 3; - const measureBox = ctx.measureText(texts[i]); - const mwidth = measureBox.width + boxBorder * 2; - const mheight = measureBox.height + boxBorder * 2; - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); - ctx.setStrokeStyle('#32a'); - ctx.setFillStyle('#32a'); - ctx.beginPath(); - ctx.rect(startX, startY - mheight, mwidth, mheight); - ctx.stroke(); - startY += mheight * 1.5 + boxBorder * 3; - } - ctx.restore(); - } - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextFormatterTests); - - - -/***/ }), - -/***/ "./tests/textnote_tests.ts": -/*!*********************************!*\ - !*** ./tests/textnote_tests.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextNoteTests": () => (/* binding */ TextNoteTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_crescendo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/font */ "./src/font.ts"); -/* harmony import */ var _src_note__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/note */ "./src/note.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_textnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/textnote */ "./src/textnote.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Text Note Tests - - - - - - - -const TextNoteTests = { - Start() { - QUnit.module('TextNote'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('TextNote Formatting', formatTextNotes); - run('TextNote Formatting 2', formatTextNotes2); - run('TextNote Superscript and Subscript', superscriptAndSubscript); - run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); - run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); - run('Crescendo', crescendo); - run('Text Dynamics', textDynamics); - }, -}; -function formatTextNotes(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 400, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), - f.TextNote({ text: 'Right', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - ]); - const formatter = f.Formatter(); - formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextNotes2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - f.TextNote({ text: 'R', duration: 'q' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.RIGHT), - ]); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - voice2.getTickables().forEach((note) => _src_note__WEBPACK_IMPORTED_MODULE_4__.Note.plotMetrics(f.getContext(), note, 170)); - f.draw(); - ok(true); -} -function superscriptAndSubscript(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]); - const notes2 = [ - f.TextNote({ text: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), - f.TextNote({ text: 'D' + _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), - f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), - f.TextNote({ text: 'C', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.triangle + '7', subscript: '', duration: '8' }), - f.TextNote({ text: 'vii', superscript: _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode["o-with-slash"] + '7', duration: '8' }), - f.TextNote({ text: 'V', superscript: '7', duration: '8' }), - ]; - equal(notes2[0].getText(), _src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); - const voice2 = score.voice(notes2); - voice2.getTickables().forEach((note) => { - const textNote = note; - textNote.setFont({ family: _src_font__WEBPACK_IMPORTED_MODULE_3__.Font.SERIF, size: 15 }); - textNote.setLine(13); - textNote.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.LEFT); - }); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextGlyphs0(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'Center', duration: '8' }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - f.TextNote({ glyph: 'f', duration: '8' }), - f.TextNote({ glyph: 'p', duration: '8' }), - f.TextNote({ glyph: 'm', duration: '8' }), - f.TextNote({ glyph: 'z', duration: '8' }), - f.TextNote({ glyph: 'mordent_upper', duration: '16' }), - f.TextNote({ glyph: 'mordent_lower', duration: '16' }), - f.TextNote({ glyph: 'segno', duration: '8' }), - f.TextNote({ glyph: 'coda', duration: '8' }), - ]); - voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextGlyphs1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - ]); - const voice2 = score.voice([ - f.TextNote({ glyph: 'turn', duration: '16' }), - f.TextNote({ glyph: 'turn_inverted', duration: '16' }), - f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), - f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), - f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), - f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER), - ]); - voice2.getTickables().forEach((n) => n.setJustification(_src_textnote__WEBPACK_IMPORTED_MODULE_6__.TextNote.Justification.CENTER)); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function crescendo(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice([ - f.TextNote({ glyph: 'p', duration: '16' }), - new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), - f.TextNote({ glyph: 'f', duration: '16' }), - new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(5).setStave(stave), - new _src_crescendo__WEBPACK_IMPORTED_MODULE_1__.Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), - ]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function textDynamics(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 230); - const score = f.EasyScore(); - const voice = score.voice([ - f.TextDynamics({ text: 'sfz', duration: '4' }), - f.TextDynamics({ text: 'rfz', duration: '4' }), - f.TextDynamics({ text: 'mp', duration: '4' }), - f.TextDynamics({ text: 'ppp', duration: '4' }), - f.TextDynamics({ text: 'fff', duration: '4' }), - f.TextDynamics({ text: 'mf', duration: '4' }), - f.TextDynamics({ text: 'sff', duration: '4' }), - ], { time: '7/4' }); - // This is refactored to use preCalculateMinWidth... to exercise - // a bug fix when textDynamic got formatted more than once. - const formatter = f.Formatter(); - formatter.joinVoices([voice]); - // const width = 250; //formatter.preCalculateMinTotalWidth([voice]); - const width = formatter.preCalculateMinTotalWidth([voice]); - formatter.format([voice]); - const stave = f.Stave({ y: 40, width: width + _src_stave__WEBPACK_IMPORTED_MODULE_5__.Stave.defaultPadding }); - stave.draw(); - voice.draw(f.getContext(), stave); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TextNoteTests); - - - -/***/ }), - -/***/ "./tests/threevoice_tests.ts": -/*!***********************************!*\ - !*** ./tests/threevoice_tests.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ThreeVoicesTests": () => (/* binding */ ThreeVoicesTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/beam */ "./src/beam.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Three Voices Tests - Three voices in single staff. - - -const ThreeVoicesTests = { - Start() { - // TODO: Rename the module to 'Three Voices', because we aren't really testing rests. - QUnit.module('Three Voice Rests'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Three Voices - #1', threeVoices1); - run('Three Voices - #2 Complex', threeVoices2); - run('Three Voices - #3', threeVoices3); - run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); - run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); - run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); - }, -}; -/** - * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3. - */ -function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); - const score = factory.EasyScore(); - // Convert each noteGroup array to StaveNote[]. - const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); - const voices = noteGroups.map((notes) => score.voice(notes)); - setup(factory, voices); - const beams = [ - _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], +1), - _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1), - _src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[2], -1), - ].reduce(_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.concat); - // Set option to position rests near the notes in each voice. - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - for (let i = 0; i < beams.length; i++) { - beams[i].setContext(factory.getContext()).draw(); - } - ok(true); - }; -} -/** - * - */ -const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { - voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); - voices[1] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); -}); -/** - * Lots of beamed notes. A beam and notehead overlap. - */ -const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { - voices[0] - .getTickables()[0] - .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); - voices[1] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); -}); -/** - * - */ -const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { - voices[0] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); - voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); - voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); -}); -function autoRestTwoVoices(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900, 200); - const score = f.EasyScore(); - let x = 10; - let beams = []; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - x += width; - const noteArrays = [ - score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), - score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { - stem: 'down', - }), - [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], - ]; - const voices = noteArrays.map((notes) => score.voice(notes)); - beams = beams.concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[0], 1)).concat(_src_beam__WEBPACK_IMPORTED_MODULE_1__.Beam.applyAndGetBeams(voices[1], -1)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - for (let i = 0; i < beams.length; i++) { - beams[i].setContext(f.getContext()).draw(); - } - ok(true, 'Auto Adjust Rests - Two Voices'); -} -function autoRestThreeVoices1(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); - const score = f.EasyScore(); - let x = 10; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - const voices = [ - score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), - score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), - score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), - score.voice([ - f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), - f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), - ], { time: '8/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - x += width; - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - ok(true); -} -function autoRestThreeVoices2(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 850, 200); - const score = f.EasyScore(); - let x = 10; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - const voices = [ - score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), - score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), - score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), - score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - x += width; - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - ok(true); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(ThreeVoicesTests); - - - -/***/ }), - -/***/ "./tests/tickcontext_tests.ts": -/*!************************************!*\ - !*** ./tests/tickcontext_tests.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TickContextTests": () => (/* binding */ TickContextTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TickContext Tests - - - - -const TickContextTests = { - Start() { - QUnit.module('TickContext'); - test('Current Tick Test', currentTick); - test('Tracking Test', tracking); - }, -}; -function currentTick() { - const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); - equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); -} -function tracking() { - const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; - const tickables = [ - new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(10), - new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT * 2).setWidth(20), - new _mocks__WEBPACK_IMPORTED_MODULE_3__.MockTickable().setTicks(BEAT).setWidth(30), - ]; - const tc = new _src_tickcontext__WEBPACK_IMPORTED_MODULE_2__.TickContext(); - tc.setPadding(0); - tc.addTickable(tickables[0]); - equal(tc.getMaxTicks().value(), BEAT); - tc.addTickable(tickables[1]); - equal(tc.getMaxTicks().value(), BEAT * 2); - tc.addTickable(tickables[2]); - equal(tc.getMaxTicks().value(), BEAT * 2); - equal(tc.getWidth(), 0); - tc.preFormat(); - equal(tc.getWidth(), 30); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TickContextTests); - - - -/***/ }), - -/***/ "./tests/timesignature_tests.ts": -/*!**************************************!*\ - !*** ./tests/timesignature_tests.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSignatureTests": () => (/* binding */ TimeSignatureTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _src_timesignature__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/timesignature */ "./src/timesignature.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// TimeSignature Tests - - - - -const TimeSignatureTests = { - Start() { - QUnit.module('TimeSignature'); - test('Time Signature Parser', parser); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Basic Time Signatures', basic); - run('Big Signature Test', big); - run('Additive Signature Test', additive); - run('Alternating Signature Test', alternating); - run('Interchangeable Signature Test', interchangeable); - run('Aggregate Signature Test', agregate); - run('Complex Signature Test', complex); - run('Time Signature multiple staves alignment test', multiple); - run('Time Signature Change Test', change); - }, -}; -function parser() { - const timeSig = new _src_timesignature__WEBPACK_IMPORTED_MODULE_3__.TimeSignature(); - equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); - const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; - mustFail.forEach((invalidString) => { - throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); - }); - const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; - mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); - timeSig.setTimeSig('4/4'); - equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); - equal(timeSig.getLine(), 0, 'digits are on line 0'); - timeSig.setTimeSig('C|'); - equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); - equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); - equal(timeSig.getLine(), 2, 'cut/common are on line 2'); - ok(true, 'all pass'); -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 500) - .addTimeSignature('2/2') - .addTimeSignature('3/4') - .addTimeSignature('4/4') - .addTimeSignature('6/8') - .addTimeSignature('C') - .addTimeSignature('C|') - .addEndTimeSignature('2/2') - .addEndTimeSignature('3/4') - .addEndTimeSignature('4/4') - .addEndClef('treble') - .addEndTimeSignature('6/8') - .addEndTimeSignature('C') - .addEndTimeSignature('C|') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function big(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) - .addTimeSignature('12/8') - .addTimeSignature('7/16') - .addTimeSignature('1234567/890') - .addTimeSignature('987/654321') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function additive(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function alternating(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function interchangeable(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function agregate(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) - .addTimeSignature('2/4') - .addTimeSignature('+') - .addTimeSignature('3/8') - .addTimeSignature('+') - .addTimeSignature('5/4') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function complex(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(10, 10, 300) - .addTimeSignature('(2+3)/16') - .addTimeSignature('+') - .addTimeSignature('3/8') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function multiple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 350); - // Each StaveLineConfig object is of the form { visible: boolean }. - const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); - const stave1 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 0, 300) - .setConfigForLines(stave1LineConfig) - .addClef('percussion') - .addTimeSignature('4/4', 25) // passing the custom padding in pixels - .setContext(ctx) - .draw(); - const stave2 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); - const stave3 = new _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); - _src_stave__WEBPACK_IMPORTED_MODULE_1__.Stave.formatBegModifiers([stave1, stave2, stave3]); - new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); - new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); - new _src_staveconnector__WEBPACK_IMPORTED_MODULE_2__.StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function change(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 900); - const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); - const tickables = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.TimeSigNote({ time: '3/4' }), - f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), - f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), - f.TimeSigNote({ time: 'C' }), - f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), - f.TimeSigNote({ time: '9/8' }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - ]; - const voice = f.Voice().setStrict(false).addTickables(tickables); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TimeSignatureTests); - - - -/***/ }), - -/***/ "./tests/tremolo_tests.ts": -/*!********************************!*\ - !*** ./tests/tremolo_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TremoloTests": () => (/* binding */ TremoloTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_tremolo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/tremolo */ "./src/tremolo.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Tremolo Tests - - - -const TremoloTests = { - Start() { - QUnit.module('Tremolo'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Tremolo - Basic', tremoloBasic); - run('Tremolo - Big', tremoloBig); - }, -}; -function tremoloBasic(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); - notes1[0].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); - notes1[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); - notes1[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - // bar 2 - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); - notes2[1].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1), 0); - notes2[2].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2), 0); - notes2[3].addModifier(new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3), 0); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Tremolo - Basic'); -} -function tremoloBig(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - // bar 1 - const stave1 = f.Stave({ width: 250 }).setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); - const tremolo1 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); - tremolo1.extra_stroke_scale = 1.7; - tremolo1.y_spacing_scale = 1.5; - const tremolo2 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); - tremolo2.extra_stroke_scale = 1.7; - tremolo2.y_spacing_scale = 1.5; - const tremolo3 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); - tremolo3.extra_stroke_scale = 1.7; - tremolo3.y_spacing_scale = 1.5; - notes1[0].addModifier(tremolo1, 0); - notes1[1].addModifier(tremolo2, 0); - notes1[2].addModifier(tremolo3, 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - // bar 2 - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.type.DOUBLE); - const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); - const tremolo4 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(1); - tremolo4.extra_stroke_scale = 1.7; - tremolo4.y_spacing_scale = 1.5; - const tremolo5 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(2); - tremolo5.extra_stroke_scale = 1.7; - tremolo5.y_spacing_scale = 1.5; - const tremolo6 = new _src_tremolo__WEBPACK_IMPORTED_MODULE_2__.Tremolo(3); - tremolo6.extra_stroke_scale = 1.7; - tremolo6.y_spacing_scale = 1.5; - notes2[1].addModifier(tremolo4, 0); - notes2[2].addModifier(tremolo5, 0); - notes2[3].addModifier(tremolo6, 0); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Tremolo - Big'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TremoloTests); - - - -/***/ }), - -/***/ "./tests/tuning_tests.ts": -/*!*******************************!*\ - !*** ./tests/tuning_tests.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TuningTests": () => (/* binding */ TuningTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_tuning__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/tuning */ "./src/tuning.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Tuning Tests - - -const TuningTests = { - Start() { - QUnit.module('Tuning'); - test('Standard Tuning', standard); - test('Standard Banjo Tuning', banjo); - test('Return note for fret', noteForFret); - }, -}; -/** - * Helper function to verify that the provided tuning matches a standard 6-string guitar. - */ -function checkStandard(tuning) { - throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); - throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); - // TODO: Tuning constructor has a bug in that the default tuning has 8 strings. - // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor. - // throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7'); - // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C. - equal(tuning.getValueForString(6), 40, 'Low E string'); - equal(tuning.getValueForString(5), 45, 'A string'); - equal(tuning.getValueForString(4), 50, 'D string'); - equal(tuning.getValueForString(3), 55, 'G string'); - equal(tuning.getValueForString(2), 59, 'B string'); - equal(tuning.getValueForString(1), 64, 'High E string'); -} -/** - * Helper function to verify that the provided tuning matches a standard 5-string banjo. - */ -function checkStandardBanjo(tuning) { - throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); - throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); - equal(tuning.getValueForString(5), 67, 'High G string'); - equal(tuning.getValueForString(4), 50, 'D string'); - equal(tuning.getValueForString(3), 55, 'G string'); - equal(tuning.getValueForString(2), 59, 'B string'); - equal(tuning.getValueForString(1), 62, 'High D string'); -} -function standard() { - expect(16); - const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); - checkStandard(tuning); - // Set the tuning by specifying a name: 'standard'. - tuning.setTuning('standard'); - checkStandard(tuning); -} -function banjo() { - expect(7); - const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning(); - tuning.setTuning('standardBanjo'); - checkStandardBanjo(tuning); -} -function noteForFret() { - expect(8); - const tuning = new _src_tuning__WEBPACK_IMPORTED_MODULE_1__.Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); - throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); - throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); - equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); - equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); - equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); - equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); - equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); - equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TuningTests); - - - -/***/ }), - -/***/ "./tests/tuplet_tests.ts": -/*!*******************************!*\ - !*** ./tests/tuplet_tests.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TupletTests": () => (/* binding */ TupletTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/dot */ "./src/dot.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stem */ "./src/stem.ts"); -/* harmony import */ var _src_tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tuplet */ "./src/tuplet.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Tuplet Tests - - - - - -const TupletTests = { - Start() { - QUnit.module('Tuplet'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Tuplet', simple); - run('Beamed Tuplet', beamed); - run('Ratioed Tuplet', ratio); - run('Bottom Tuplet', bottom); - run('Bottom Ratioed Tuplet', bottomRatio); - run('Awkward Tuplet', awkward); - run('Complex Tuplet', complex); - run('Mixed Stem Direction Tuplet', mixedTop); - run('Mixed Stem Direction Bottom Tuplet', mixedBottom); - run('Nested Tuplets', nested); - run('Single Tuplets', single); - }, -}; -// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct) -// that are ultimately passed into Factory.StaveNote(). -// eslint-disable-next-line -const set = (key) => (value) => (object) => { - object[key] = value; - return object; -}; -const setStemDirection = set('stem_direction'); -const setStemUp = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); -const setStemDown = setStemDirection(_src_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN); -const setDurationToQuarterNote = set('duration')('4'); -/** - * Simple test case with one ascending triplet and one descending triplet. - */ -function simple(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); - const notes = [ - { keys: ['g/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Tuplet({ notes: notes.slice(0, 3) }); - f.Tuplet({ notes: notes.slice(3, 6) }); - // 3/4 time - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function beamed(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); - const notes = [ - { keys: ['b/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes.slice(0, 3) }); - f.Beam({ notes: notes.slice(3, 10) }); - f.Tuplet({ notes: notes.slice(0, 3) }); - f.Tuplet({ notes: notes.slice(3, 10) }); - // 3/8 time - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 8 } }) - .setStrict(true) - .addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Beamed Test'); -} -function ratio(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { - ratioed: true, - notes_occupied: 4, - }, - }); - const voice = f.Voice().setStrict(true).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Ratioed Test'); -} -function bottom(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['d/5'], duration: '8' }, - { keys: ['g/3'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ] - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM }, - }); - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Bottom Test'); -} -function bottomRatio(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 350, 160); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '4' }, - { keys: ['d/5'], duration: '8' }, - { keys: ['g/5'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ] - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { - location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { - location: _src_tuplet__WEBPACK_IMPORTED_MODULE_4__.Tuplet.LOCATION_BOTTOM, - notes_occupied: 1, - }, - }); - const voice = f - .Voice({ time: { num_beats: 5, beat_value: 8 } }) - .setStrict(true) - .addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Bottom Ratioed Test'); -} -function awkward(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 370, 160); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['g/4'], duration: '16' }, - { keys: ['b/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4'], duration: '16' }, - { keys: ['c/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4'], duration: '16' }, - { keys: ['c/4'], duration: '8' }, - { keys: ['d/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes.slice(0, 12) }); - f.Tuplet({ - notes: notes.slice(0, 12), - options: { - notes_occupied: 142, - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(12, 15), - options: { - ratioed: true, - }, - }).setBracketed(true); - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Awkward Test'); -} -function complex(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 600); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes1 = [ - { keys: ['b/4'], duration: '8d' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['b/4'], duration: '16r' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - _src_dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([notes1[0]], { all: true }); - const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] - .map(setDurationToQuarterNote) - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes1.slice(0, 3) }); - f.Beam({ notes: notes1.slice(5, 9) }); - f.Beam({ notes: notes1.slice(11, 16) }); - f.Tuplet({ - notes: notes1.slice(0, 3), - }); - f.Tuplet({ - notes: notes1.slice(3, 11), - options: { - num_notes: 7, - notes_occupied: 4, - ratioed: false, - }, - }); - f.Tuplet({ - notes: notes1.slice(11, 16), - options: { - notes_occupied: 4, - }, - }); - const voice1 = f.Voice().setStrict(true).addTickables(notes1); - const voice2 = f.Voice().setStrict(true).addTickables(notes2); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true, 'Complex Test'); -} -function mixedTop(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['c/6'], stem_direction: -1 }, - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['f/5'], stem_direction: 1 }, - { keys: ['a/4'], stem_direction: -1 }, - { keys: ['c/6'], stem_direction: -1 }, - ] - .map(setDurationToQuarterNote) - .map(f.StaveNote.bind(f)); - f.Tuplet({ - notes: notes.slice(0, 2), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 4), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(4, 6), - options: { - notes_occupied: 3, - }, - }); - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Mixed Stem Direction Tuplet'); -} -function mixedBottom(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['f/3'], stem_direction: 1 }, - { keys: ['a/5'], stem_direction: -1 }, - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['f/3'], stem_direction: 1 }, - { keys: ['a/4'], stem_direction: -1 }, - { keys: ['c/4'], stem_direction: -1 }, - ] - .map(setDurationToQuarterNote) - .map(f.StaveNote.bind(f)); - f.Tuplet({ - notes: notes.slice(0, 2), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 4), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(4, 6), - options: { - notes_occupied: 3, - }, - }); - const voice = f.Voice().setStrict(false).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Mixed Stem Direction Bottom Tuplet'); -} -function nested(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes = [ - // Big triplet 1: - { keys: ['b/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['b/4'], duration: '2' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(2, 7), - }); - f.Tuplet({ - notes: notes.slice(0, 7), - options: { - notes_occupied: 2, - num_notes: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 7), - options: { - notes_occupied: 4, - num_notes: 5, - }, - }); - // 4/4 time - const voice = f.Voice().setStrict(true).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Nested Tuplets'); -} -function single(options) { - const f = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes = [ - // Big triplet 1: - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['a/4'], duration: '2' }, - { keys: ['b/4'], duration: '4' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(1, 4), - }); - // big quartuplet - f.Tuplet({ - notes: notes.slice(0, -1), - options: { - num_notes: 4, - notes_occupied: 3, - ratioed: true, - bracketed: true, - }, - }); - // first singleton - f.Tuplet({ - notes: notes.slice(0, 1), - options: { - num_notes: 3, - notes_occupied: 2, - ratioed: true, - }, - }); - // eighth note triplet - f.Tuplet({ - notes: notes.slice(1, 4), - options: { - num_notes: 3, - notes_occupied: 2, - }, - }); - // second singleton - f.Tuplet({ - notes: notes.slice(4, 5), - options: { - num_notes: 3, - notes_occupied: 2, - ratioed: true, - bracketed: true, - }, - }); - // 4/4 time - const voice = f - .Voice({ time: { num_beats: 4, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Nested Tuplets'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TupletTests); - - - -/***/ }), - -/***/ "./tests/typeguard_tests.ts": -/*!**********************************!*\ - !*** ./tests/typeguard_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TypeGuardTests": () => (/* binding */ TypeGuardTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _src_tabnote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _src_typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -// -// TypeGuard Tests -// eslint-disable-next-line -// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case. - - - - - - -const TypeGuardTests = { - Start() { - QUnit.module('TypeGuard'); - test('Real VexFlow Types', real); - test('Fake VexFlow Types in ES5', fakeES5); - test('Fake VexFlow Types in ES6', fakeES6); - test('Edge Case ES5/ES6', edgeCaseES5vsES6); - }, -}; -function real() { - const s = new _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote({ keys: ['c/4'], duration: 'w' }); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(s), 'isStaveNote helper function'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); - notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(s), 'isTabNote helper function. s is NOT a TabNote.'); - const t = new _src_tabnote__WEBPACK_IMPORTED_MODULE_4__.TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(t), 'isTabNote helper function'); - notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t), 't is NOT a StaveNote'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(t), 'TabNote extends StemmableNote'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); - const canvas = document.createElement('canvas'); - canvas.width = 800; - canvas.height = 400; - const ctx = new _src_canvascontext__WEBPACK_IMPORTED_MODULE_1__.CanvasContext(canvas.getContext('2d')); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isRenderContext)(ctx), 'ctx is a RenderContext'); -} -/** - * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6(). - */ -function checkFakeObjects(fakeStemmableNote, fakeStaveNote) { - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); - notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); - ok((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isCategory)(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); - notOk((0,_src_typeguard__WEBPACK_IMPORTED_MODULE_5__.isNote)(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); -} -/** - * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it - * has the correct static .CATEGORY property. - */ -function fakeES5() { - function FakeStemmableNote() { - this.isFake = true; - } - FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; - function FakeStaveNote() { - FakeStemmableNote.call(this); - } - FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; - FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); - FakeStaveNote.prototype.constructor = FakeStaveNote; - const fakeStemmableNote = new FakeStemmableNote(); - const fakeStaveNote = new FakeStaveNote(); - checkFakeObjects(fakeStemmableNote, fakeStaveNote); -} -/** - * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it - * or its ancestor has the correct static .CATEGORY property. - */ -function fakeES6() { - class FakeStemmableNote { - } - FakeStemmableNote.CATEGORY = _src_stemmablenote__WEBPACK_IMPORTED_MODULE_3__.StemmableNote.CATEGORY; - class FakeStaveNote extends FakeStemmableNote { - } - FakeStaveNote.CATEGORY = _src_stavenote__WEBPACK_IMPORTED_MODULE_2__.StaveNote.CATEGORY; - const fakeStemmableNote = new FakeStemmableNote(); - const fakeStaveNote = new FakeStaveNote(); - checkFakeObjects(fakeStemmableNote, fakeStaveNote); -} -/** - * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class "extends Object". - */ -function edgeCaseES5vsES6() { - class Z extends Object { - } - class Y extends Z { - } - class X extends Y { - } - const zInstance = new Z(); - const xInstance = new X(); - ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); - // If targeting es5, these three assertions only pass if we remove "extends Object" from the class Z definition. - ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); - ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); - ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(TypeGuardTests); - - - -/***/ }), - -/***/ "./tests/vexflow_test_helpers.ts": -/*!***************************************!*\ - !*** ./tests/vexflow_test_helpers.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MAJOR_KEYS": () => (/* binding */ MAJOR_KEYS), -/* harmony export */ "MINOR_KEYS": () => (/* binding */ MINOR_KEYS), -/* harmony export */ "VexFlowTests": () => (/* binding */ VexFlowTests), -/* harmony export */ "concat": () => (/* binding */ concat) -/* harmony export */ }); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -/* harmony import */ var _src_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// VexFlow Test Support Library - - -const global = (0,_src_util__WEBPACK_IMPORTED_MODULE_1__.globalObject)(); -// Each test case will switch through the available fonts, and then restore the original font when done. -let originalFontNames; -function useTempFontStack(fontName) { - originalFontNames = _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.getMusicFont(); - _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); -} -function restoreOriginalFontStack() { - _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont(...originalFontNames); -} -// A micro util inspired by jQuery. -if (!global.$) { - // generate_png_images.js uses jsdom and does not include jQuery. - global.$ = (param) => { - let element; - if (typeof param !== 'string') { - element = param; - } - else if (param.startsWith('<')) { - // Extract the tag name: e.g.,
=> div - // Assume param.match returns something (! operator). - // eslint-disable-next-line - const tagName = param.match(/[A-Za-z]+/g)[0]; - element = document.createElement(tagName); - } - else { - element = document.querySelector(param); - } - const $element = { - // eslint-disable-next-line - get(index) { - return element; - }, - addClass(c) { - element.classList.add(c); - return $element; - }, - text(t) { - element.textContent = t; - return $element; - }, - html(h) { - if (!h) { - return element.innerHTML; - } - else { - element.innerHTML = h; - return $element; - } - }, - append(...elementsToAppend) { - elementsToAppend.forEach((e) => { - element.appendChild(e); - }); - return $element; - }, - attr(attrName, val) { - element.setAttribute(attrName, val); - return $element; - }, - }; - return $element; - }; -} -/** Allow `name` to be used inside file names. */ -function sanitizeName(name) { - return name.replace(/[^a-zA-Z0-9]/g, '_'); -} -const CANVAS_TEST_CONFIG = { - backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'Canvas', - fontStacks: ['Bravura'], -}; -const CANVAS_TEXT_CONFIG = { - backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'Canvas', - fontStacks: ['Bravura'], -}; -const SVG_TEST_CONFIG = { - backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, - tagName: 'div', - testType: 'SVG', - fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], -}; -const SVG_TEXT_CONFIG = { - backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG, - tagName: 'div', - testType: 'SVG', - fontStacks: ['Bravura'], -}; -const NODE_TEST_CONFIG = { - backend: _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'NodeCanvas', - fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], -}; -class VexFlowTests { - // Call this at the end of a `tests/xxxx_tests.ts` file to register the module. - static register(test) { - VexFlowTests.tests.push(test); - } - static parseJobOptions(runOptions) { - let { jobs, job } = runOptions || { jobs: 1, job: 0 }; - if (window) { - const { location } = window; - if (location) { - const sps = new URLSearchParams(location.search); - const jobsParam = sps.get('jobs'); - const jobParam = sps.get('job'); - if (jobsParam) { - jobs = parseInt(jobsParam, 10); - } - if (jobParam) { - job = parseInt(jobParam, 10); - } - } - } - return { - jobs, - job, - }; - } - // flow.html calls this to invoke all the tests. - static run(runOptions) { - const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); - VexFlowTests.tests.forEach((test, idx) => { - if (jobs === 1 || idx % jobs === job) { - test.Start(); - } - }); - } - static set NODE_FONT_STACKS(fontStacks) { - NODE_TEST_CONFIG.fontStacks = fontStacks; - } - /** Return a unique ID for a test. */ - static generateTestID(prefix) { - return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; - } - /** - * Run `func` inside a QUnit test for each of the enabled rendering backends. - * @param name - * @param testFunc - * @param params - */ - // eslint-disable-next-line - static runTests(name, testFunc, params) { - VexFlowTests.runCanvasTest(name, testFunc, params); - VexFlowTests.runSVGTest(name, testFunc, params); - VexFlowTests.runNodeTest(name, testFunc, params); - } - // eslint-disable-next-line - static runTextTests(name, testFunc, params) { - VexFlowTests.runCanvasText(name, testFunc, params); - VexFlowTests.runSVGText(name, testFunc, params); - } - /** - * Append a
which contains the test case title and rendered output. - * See flow.html and flow.css. - * @param elementId - * @param testTitle - * @param tagName - */ - static createTest(elementId, testTitle, tagName, titleId = '') { - const anchorTestTitle = `${testTitle}`; - const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); - const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); - const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0); - $('#vexflow_testoutput').append(container); - return vexOutput; - } - static makeFactory(options, width = 450, height = 140) { - const { elementId, backend } = options; - return new _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory({ renderer: { elementId, backend, width, height } }); - } - // eslint-disable-next-line - static runCanvasTest(name, testFunc, params) { - if (VexFlowTests.RUN_CANVAS_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - // eslint-disable-next-line - static runCanvasText(name, testFunc, params) { - if (VexFlowTests.RUN_CANVAS_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); - } - } - // eslint-disable-next-line - static runSVGTest(name, testFunc, params) { - if (VexFlowTests.RUN_SVG_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - // eslint-disable-next-line - static runSVGText(name, testFunc, params) { - if (VexFlowTests.RUN_SVG_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); - } - } - // eslint-disable-next-line - static runNodeTest(name, testFunc, params) { - if (VexFlowTests.RUN_NODE_TESTS) { - const helper = VexFlowTests.runNodeTestHelper; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - /** - * Save the PNG file. - * @param fontName - * @param element - */ - static runNodeTestHelper(fontName, element) { - if (_src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.lastContext !== undefined) { - const moduleName = sanitizeName(QUnit.current_module); - const testName = sanitizeName(QUnit.current_test); - // If we are only testing Bravura, we OMIT the font name from the - // output image file name, which allows visual diffs against - // the previous release: version 3.0.9. In the future, if we decide - // to test all fonts by default, we can remove this check. - const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; - const fontInfo = onlyBravura ? '' : `.${fontName}`; - const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; - const imageData = element.toDataURL().split(';base64,').pop(); - const imageBuffer = Buffer.from(imageData, 'base64'); - VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); - } - } - /** Run QUnit.test(...) for each font. */ - // eslint-disable-next-line - static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { - if (name === undefined) { - throw new Error('Test name is undefined.'); - } - const testTypeLowerCase = testType.toLowerCase(); - fontStacks.forEach((fontStackName) => { - QUnit.test(name, (assert) => { - useTempFontStack(fontStackName); - const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); - const moduleName = assert.test.module.name; - const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; - // Add an element id for the title div, so that we can scroll directly to a test case. - // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura) - // This titleId will match the name of the PNGs generated by visual regression tests - // (without the _Current.png or _Reference.png). - let prefix = ''; - if (testTypeLowerCase === 'canvas') { - prefix = testTypeLowerCase + '_'; - } - else { - // DO NOT ADD A PREFIX TO SVG TESTS - // The canvas prefix above is for making sure our element ids are unique, - // since we have a canvas+bravura test case and a svg+bravura test case - // that would otherwise have the same titleId. - } - const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; - const element = VexFlowTests.createTest(elementId, title, tagName, titleId); - const options = { elementId, params, assert, backend }; - const isSVG = backend === _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.Backends.SVG; - const contextBuilder = isSVG ? _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getSVGContext : _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer.getCanvasContext; - testFunc(options, contextBuilder); - restoreOriginalFontStack(); - if (helper) - helper(fontStackName, element); - }); - }); - } - /** - * @param ctx - * @param x - * @param y - */ - static plotLegendForNoteWidth(ctx, x, y) { - ctx.save(); - ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); - const spacing = 12; - let lastY = y; - function legend(color, text) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(10); - ctx.moveTo(x, lastY - 4); - ctx.lineTo(x + 10, lastY - 4); - ctx.stroke(); - ctx.setFillStyle('black'); - ctx.fillText(text, x + 15, lastY); - lastY += spacing; - } - legend('green', 'Note + Flag'); - legend('red', 'Modifiers'); - legend('#999', 'Displaced Head'); - legend('#DDD', 'Formatter Shift'); - ctx.restore(); - } -} -VexFlowTests.tests = []; -VexFlowTests.RUN_CANVAS_TESTS = true; -VexFlowTests.RUN_SVG_TESTS = true; -VexFlowTests.RUN_NODE_TESTS = false; -// Default font properties for tests. -VexFlowTests.Font = { size: 10 }; -/** - * Each font stack is a prioritized list of font names. - */ -VexFlowTests.FONT_STACKS = { - Bravura: ['Bravura', 'Gonville', 'Custom'], - Gonville: ['Gonville', 'Bravura', 'Custom'], - Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], - Leland: ['Leland', 'Bravura', 'Gonville', 'Custom'], -}; -VexFlowTests.NEXT_TEST_ID = 0; -/** - * Used with array.reduce(...) to flatten arrays of arrays in the tests. - */ -// eslint-disable-next-line -const concat = (a, b) => a.concat(b); -/** Used in KeySignature and ClefKeySignature Tests. */ -const MAJOR_KEYS = [ - // - 'C', - 'F', - 'Bb', - 'Eb', - 'Ab', - 'Db', - 'Gb', - 'Cb', - 'G', - 'D', - 'A', - 'E', - 'B', - 'F#', - 'C#', -]; -const MINOR_KEYS = [ - 'Am', - 'Dm', - 'Gm', - 'Cm', - 'Fm', - 'Bbm', - 'Ebm', - 'Abm', - 'Em', - 'Bm', - 'F#m', - 'C#m', - 'G#m', - 'D#m', - 'A#m', -]; -// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class. -// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class. -// Here we set Vex.Flow.Test = VexFlowTests. -// eslint-disable-next-line -// @ts-ignore -_src_index__WEBPACK_IMPORTED_MODULE_0__.Flow.Test = VexFlowTests; - - -/***/ }), - -/***/ "./tests/vf_prefix_tests.ts": -/*!**********************************!*\ - !*** ./tests/vf_prefix_tests.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VFPrefixTests": () => (/* binding */ VFPrefixTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// VF.* Prefix Tests -// -// VexFlow classes are available under the global Vex.Flow.* namespace. - - -const VFPrefixTests = { - Start() { - QUnit.module('VF.* API'); - test('VF.* API', VF_Prefix); - test('VF Alias', VF_Alias); - }, -}; -function VF_Prefix() { - // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API - // is equivalent to using the individual classes in TypeScript. - const VF = Vex.Flow; - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VF.Accidental); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VF.Annotation); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Articulation, VF.Articulation); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Barline, VF.Barline); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BarNote, VF.BarNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Beam, VF.Beam); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Bend, VF.Bend); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBox, VF.BoundingBox); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation, VF.BoundingBoxComputation); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbol, VF.ChordSymbol); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Clef, VF.Clef); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ClefNote, VF.ClefNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Crescendo, VF.Crescendo); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Curve, VF.Curve); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Dot, VF.Dot); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.EasyScore, VF.EasyScore); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Element, VF.Element); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Factory, VF.Factory); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION, VF.RESOLUTION); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font, VF.Font); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter, VF.Formatter); - propEqual(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter(), new VF.Formatter(), 'new Formatter()'); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Fraction, VF.Fraction); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.FretHandFinger, VF.FretHandFinger); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GhostNote, VF.GhostNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Glyph, VF.Glyph); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNote, VF.GlyphNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNote, VF.GraceNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteGroup, VF.GraceNoteGroup); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNote, VF.GraceTabNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeyManager, VF.KeyManager); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySignature, VF.KeySignature); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.KeySigNote, VF.KeySigNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Modifier, VF.Modifier); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContext, VF.ModifierContext); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRest, VF.MultiMeasureRest); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Music, VF.Music); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Note, VF.Note); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteHead, VF.NoteHead); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroup, VF.NoteSubGroup); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Ornament, VF.Ornament); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Parser, VF.Parser); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarking, VF.PedalMarking); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Registry, VF.Registry); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Renderer, VF.Renderer); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.RepeatNote, VF.RepeatNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Repetition, VF.Repetition); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.Stave); - notEqual(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stave, VF.StaveNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnector, VF.StaveConnector); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpin, VF.StaveHairpin); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveLine, VF.StaveLine); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifier, VF.StaveModifier); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveNote, VF.StaveNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTempo, VF.StaveTempo); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveText, VF.StaveText); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StaveTie, VF.StaveTie); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stem, VF.Stem); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.StringNumber, VF.StringNumber); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Stroke, VF.Stroke); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.System, VF.System); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote, VF.TabNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabSlide, VF.TabSlide); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave, VF.TabStave); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TabTie, VF.TabTie); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextBracket, VF.TextBracket); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextDynamics, VF.TextDynamics); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatter, VF.TextFormatter); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TextNote, VF.TextNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TickContext, VF.TickContext); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignature, VF.TimeSignature); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.TimeSigNote, VF.TimeSigNote); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tremolo, VF.Tremolo); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuning, VF.Tuning); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Tuplet, VF.Tuplet); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato, VF.Vibrato); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracket, VF.VibratoBracket); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Voice, VF.Voice); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Volta, VF.Volta); -} -/** - * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow - * and renaming them with a VF prefix. - */ -function VF_Alias() { - const Flow = Vex.Flow; - const VFAliases = { - get VFAccidental() { - return Flow.Accidental; - }, - get VFAnnotation() { - return Flow.Annotation; - }, - get VFVibrato() { - return Flow.Vibrato; - }, - }; - const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental, VFAccidental); - equal(_src_index__WEBPACK_IMPORTED_MODULE_1__.Annotation, VFAnnotation); - const vibrato = new VFVibrato(); - ok(vibrato); - const acc1 = new VFAccidental('##'); - const acc2 = new _src_index__WEBPACK_IMPORTED_MODULE_1__.Accidental('##'); - equal(acc1.type, acc2.type); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VFPrefixTests); - - - -/***/ }), - -/***/ "./tests/vibrato_tests.ts": -/*!********************************!*\ - !*** ./tests/vibrato_tests.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VibratoTests": () => (/* binding */ VibratoTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Vibrato Tests - - -const VibratoTests = { - Start() { - QUnit.module('Vibrato'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple Vibrato', simple); - run('Harsh Vibrato', harsh); - run('Vibrato with Bend', withBend); - }, -}; -// Helper function to create TabNote objects. -const tabNote = (noteStruct) => new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabNote(noteStruct); -/** - * Default vibrato symbol (wavy line) on top of a tab with two notes fretted. - */ -function simple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), - ]; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Vibrato'); -} -/** - * The harsh vibrato symbol is a zig zag line with sharp points. - * This test is nearly identical to the 'simple' test above. - * The only difference is that we call .setHarsh(true) on each Vibrato object. - */ -function harsh(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setHarsh(true), 0), - ]; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Harsh Vibrato'); -} -function withBend(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.3, 1.3); - ctx.setFont(_src_index__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.Font.size); - const stave = new _src_index__WEBPACK_IMPORTED_MODULE_1__.TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 9 }, - { str: 3, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 0) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('1/2', true), 1) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato(), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'q', - }) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Bend('Full', false), 0) - .addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(60), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new _src_index__WEBPACK_IMPORTED_MODULE_1__.Vibrato().setVibratoWidth(120).setHarsh(true), 0), - ]; - _src_index__WEBPACK_IMPORTED_MODULE_1__.Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Vibrato with Bend'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoTests); - - - -/***/ }), - -/***/ "./tests/vibratobracket_tests.ts": -/*!***************************************!*\ - !*** ./tests/vibratobracket_tests.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VibratoBracketTests": () => (/* binding */ VibratoBracketTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Author: Balazs Forian-Szabo -// -// VibratoBracket Tests -// TODO: It's annoying to have to cast "as Note" or "as Note[]". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()? - -const VibratoBracketTests = { - Start() { - QUnit.module('VibratoBracket'); - const run = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests; - run('Simple VibratoBracket', simple); - run('Harsh VibratoBracket Without End Note', withoutEndNote); - run('Harsh VibratoBracket Without Start Note', withoutStartNote); - }, -}; -// Helper function to set up the stave, easyscore, voice, and to format & draw. -function createTest(noteGroup, setupVibratoBracket) { - return (options) => { - const factory = _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.makeFactory(options, 650, 200); - const stave = factory.Stave(); - const score = factory.EasyScore(); - const voice = score.voice(score.notes(noteGroup)); - setupVibratoBracket(factory, voice.getTickables()); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); - }; -} -const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: notes[0], - to: notes[3], - options: { line: 2 }, - }); -}); -const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: notes[2], - to: null, - options: { line: 2, harsh: true }, - }); -}); -const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: null, - to: notes[2], - options: { line: 2, harsh: true }, - }); -}); -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VibratoBracketTests); - - - -/***/ }), - -/***/ "./tests/voice_tests.ts": -/*!******************************!*\ - !*** ./tests/voice_tests.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VoiceTests": () => (/* binding */ VoiceTests) -/* harmony export */ }); -/* harmony import */ var _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vexflow_test_helpers */ "./tests/vexflow_test_helpers.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/formatter */ "./src/formatter.ts"); -/* harmony import */ var _src_stave__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/stave */ "./src/stave.ts"); -/* harmony import */ var _src_stavebarline__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _src_stavenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../src/stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _src_voice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../src/voice */ "./src/voice.ts"); -/* harmony import */ var _mocks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mocks */ "./tests/mocks.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Voice Tests - - - - - - - - -const VoiceTests = { - Start() { - QUnit.module('Voice'); - test('Strict Test', strict); - test('Ignore Test', ignore); - _vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.runTests('Full Voice Mode Test', full); - }, -}; -const BEAT = (1 * _src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.RESOLUTION) / 4; -// Helper function to create a tickable with a preset number of ticks. -const createTickable = () => new _mocks__WEBPACK_IMPORTED_MODULE_7__.MockTickable().setTicks(BEAT); -function strict() { - expect(8); - const tickables = [createTickable(), createTickable(), createTickable()]; - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); - equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); - equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); - voice.addTickables(tickables); - equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); - voice.addTickable(createTickable()); - equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); - equal(voice.isComplete(), true, 'Voice is complete'); - const numeratorBeforeException = voice.getTicksUsed().numerator; - throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); - // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice. - // See voice.ts: this.ticksUsed.subtract(ticks); - equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); - equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); -} -function ignore() { - const tickables = [ - createTickable(), - createTickable(), - createTickable().setIgnoreTicks(true), - createTickable(), - createTickable().setIgnoreTicks(true), - createTickable(), - ]; - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4); - voice.addTickables(tickables); - ok(true, 'all pass'); -} -function full(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 200); - const stave = new _src_stave__WEBPACK_IMPORTED_MODULE_3__.Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(_src_stavebarline__WEBPACK_IMPORTED_MODULE_4__.Barline.type.END); - const notes = [ - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['d/4'], duration: '4' }), - new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['r/4'], duration: '4r' }), - ]; - notes.forEach((note) => note.setStave(stave)); - const voice = new _src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice(_src_flow__WEBPACK_IMPORTED_MODULE_1__.Flow.TIME4_4).setMode(_src_voice__WEBPACK_IMPORTED_MODULE_6__.Voice.Mode.FULL).addTickables(notes); - new _src_formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter().joinVoices([voice]).formatToStave([voice], stave); - stave.setContext(ctx).draw(); - voice.draw(ctx); - const bb = voice.getBoundingBox(); - if (bb) { - ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - } - ctx.stroke(); - throws(() => voice.addTickable(new _src_stavenote__WEBPACK_IMPORTED_MODULE_5__.StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); -} -_vexflow_test_helpers__WEBPACK_IMPORTED_MODULE_0__.VexFlowTests.register(VoiceTests); - - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ (() => { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -/*!*******************************************!*\ - !*** ./entry/vexflow-debug-with-tests.ts ***! - \*******************************************/ -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Accidental), -/* harmony export */ "AccidentalTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AccidentalTests), -/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationHorizontalJustify), -/* harmony export */ "AnnotationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AnnotationTests), -/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.AnnotationVerticalJustify), -/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Articulation), -/* harmony export */ "ArticulationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ArticulationTests), -/* harmony export */ "AutoBeamFormattingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.AutoBeamFormattingTests), -/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BEAM_RIGHT), -/* harmony export */ "BachDemoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BachDemoTests), -/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarNote), -/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Barline), -/* harmony export */ "BarlineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BarlineTests), -/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BarlineType), -/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Beam), -/* harmony export */ "BeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BeamTests), -/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Bend), -/* harmony export */ "BendTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BendTests), -/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBox), -/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.BoundingBoxComputation), -/* harmony export */ "BoundingBoxComputationTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputationTests), -/* harmony export */ "BoundingBoxTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxTests), -/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Builder), -/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CanvasContext), -/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Category), -/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ChordSymbolTests), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ChordSymbolVerticalJustify), -/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Clef), -/* harmony export */ "ClefKeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefKeySignatureTests), -/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ClefNote), -/* harmony export */ "ClefTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ClefTests), -/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Crescendo), -/* harmony export */ "CrossBeamTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CrossBeamTests), -/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Curve), -/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.CurvePosition), -/* harmony export */ "CurveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.CurveTests), -/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Dot), -/* harmony export */ "DotTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.DotTests), -/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.EasyScoreGrammar), -/* harmony export */ "EasyScoreTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.EasyScoreTests), -/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Element), -/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Factory), -/* harmony export */ "FactoryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FactoryTests), -/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Flow), -/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Font), -/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontStyle), -/* harmony export */ "FontTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FontTests), -/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FontWeight), -/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Formatter), -/* harmony export */ "FormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FormatterTests), -/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Fraction), -/* harmony export */ "FractionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.FractionTests), -/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.FretHandFinger), -/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GhostNote), -/* harmony export */ "GhostNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GhostNoteTests), -/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Glyph), -/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GlyphNote), -/* harmony export */ "GlyphNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GlyphNoteTests), -/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNote), -/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceNoteGroup), -/* harmony export */ "GraceNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceNoteTests), -/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.GraceTabNote), -/* harmony export */ "GraceTabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.GraceTabNoteTests), -/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeyManager), -/* harmony export */ "KeyManagerTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeyManagerTests), -/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySigNote), -/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.KeySignature), -/* harmony export */ "KeySignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.KeySignatureTests), -/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Modifier), -/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierContext), -/* harmony export */ "ModifierContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ModifierContextTests), -/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.ModifierPosition), -/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.MultiMeasureRest), -/* harmony export */ "MultiMeasureRestTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MultiMeasureRestTests), -/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Music), -/* harmony export */ "MusicTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.MusicTests), -/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Note), -/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteHead), -/* harmony export */ "NoteHeadTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteHeadTests), -/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.NoteSubGroup), -/* harmony export */ "NoteSubGroupTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.NoteSubGroupTests), -/* harmony export */ "OffscreenCanvasTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OffscreenCanvasTests), -/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Ornament), -/* harmony export */ "OrnamentTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.OrnamentTests), -/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.OutlineCode), -/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parenthesis), -/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Parser), -/* harmony export */ "ParserTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ParserTests), -/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.PedalMarking), -/* harmony export */ "PedalMarkingTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PedalMarkingTests), -/* harmony export */ "PercussionTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.PercussionTests), -/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Piece), -/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Registry), -/* harmony export */ "RegistryTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RegistryTests), -/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RenderContext), -/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Renderer), -/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RendererLineEndType), -/* harmony export */ "RendererTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RendererTests), -/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RepeatNote), -/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Repetition), -/* harmony export */ "RestsTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RestsTests), -/* harmony export */ "RhythmTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.RhythmTests), -/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.RuntimeError), -/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SVGContext), -/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stave), -/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveConnector), -/* harmony export */ "StaveConnectorTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveConnectorTests), -/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveHairpin), -/* harmony export */ "StaveHairpinTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveHairpinTests), -/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveLine), -/* harmony export */ "StaveLineTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveLineTests), -/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition), -/* harmony export */ "StaveModifierTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveModifierTests), -/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveNote), -/* harmony export */ "StaveNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveNoteTests), -/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveSection), -/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTempo), -/* harmony export */ "StaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTests), -/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveText), -/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StaveTie), -/* harmony export */ "StaveTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StaveTieTests), -/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stem), -/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StemmableNote), -/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.StringNumber), -/* harmony export */ "StringNumberTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StringNumberTests), -/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Stroke), -/* harmony export */ "StrokesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StrokesTests), -/* harmony export */ "StyleTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.StyleTests), -/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.SymbolTypes), -/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.System), -/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabNote), -/* harmony export */ "TabNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabNoteTests), -/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabSlide), -/* harmony export */ "TabSlideTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabSlideTests), -/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabStave), -/* harmony export */ "TabStaveTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabStaveTests), -/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TabTie), -/* harmony export */ "TabTieTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TabTieTests), -/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextBracketPosition), -/* harmony export */ "TextBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextBracketTests), -/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextDynamics), -/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextFormatter), -/* harmony export */ "TextFormatterTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextFormatterTests), -/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextJustification), -/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TextNote), -/* harmony export */ "TextNoteTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TextNoteTests), -/* harmony export */ "ThreeVoicesTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.ThreeVoicesTests), -/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TickContext), -/* harmony export */ "TickContextTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TickContextTests), -/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tickable), -/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSigNote), -/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignature), -/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TimeSignatureGlyph), -/* harmony export */ "TimeSignatureTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TimeSignatureTests), -/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tremolo), -/* harmony export */ "TremoloTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TremoloTests), -/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuning), -/* harmony export */ "TuningTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TuningTests), -/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Tuplet), -/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.TupletLocation), -/* harmony export */ "TupletTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TupletTests), -/* harmony export */ "TypeGuardTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.TypeGuardTests), -/* harmony export */ "VFPrefixTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VFPrefixTests), -/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vex), -/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Vibrato), -/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VibratoBracket), -/* harmony export */ "VibratoBracketTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoBracketTests), -/* harmony export */ "VibratoTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VibratoTests), -/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Voice), -/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoiceMode), -/* harmony export */ "VoiceTests": () => (/* reexport safe */ _tests_index__WEBPACK_IMPORTED_MODULE_1__.VoiceTests), -/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.Volta), -/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.VoltaType), -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), -/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.defined), -/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.drawDot), -/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.globalObject), -/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAccidental), -/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isAnnotation), -/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isBarline), -/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isCategory), -/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isDot), -/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isGraceNoteGroup), -/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isHTMLDiv), -/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isNote), -/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isRenderContext), -/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isStemmableNote), -/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.isTabNote), -/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.log), -/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.midLine), -/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.normalizeAngle), -/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.prefix), -/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.sumArray), -/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_0__.warn) -/* harmony export */ }); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -/* harmony import */ var _tests_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../tests/index */ "./tests/index.ts"); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); -/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js. -// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/. -// The output file is used by flow.html & flow-headless-browser.html to run the tests. - - - - - -(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_3__.loadAllMusicFonts)(); -_src_flow__WEBPACK_IMPORTED_MODULE_2__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); -(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_4__.loadTextFonts)(); -// Re-export all exports from src/index.ts and tests/index.ts. - - -// Also collect all exports into a default export for CJS projects. -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Object.assign(Object.assign({}, _src_index__WEBPACK_IMPORTED_MODULE_0__), _tests_index__WEBPACK_IMPORTED_MODULE_1__)); - -})(); - -__webpack_exports__ = __webpack_exports__["default"]; -/******/ return __webpack_exports__; -/******/ })() -; -}); -//# sourceMappingURL=vexflow-debug-with-tests.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug-with-tests.js.map b/build/cjs/vexflow-debug-with-tests.js.map deleted file mode 100644 index 3b22a17d4f..0000000000 --- a/build/cjs/vexflow-debug-with-tests.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-debug-with-tests.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,+CAAQ;AACxC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC5dA;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,+CAAQ;AACxC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC3RA;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,+CAAQ;AAC1C;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClVA;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,uCAAI;AACjC;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC5EA;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACO,mBAAmB,+CAAQ;AAClC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;;;;;;;;;;;;;;;ACvPpD;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtsBA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,yDAAa;AACvC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,0CAA0C,UAAU;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,yDAAyD,UAAU,eAAe,WAAW;AAC7F,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzKA;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,8CAA8C,UAAU;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,8CAA8C,UAAU;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,uCAAI;AACnC;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AChaA;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpYA;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7fvD,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AACpC;AACP;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;;;;;;;;;;;;;;;;;;AClV1B,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9XO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC98GA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzhBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzFO;AACP;AACA;AACA,cAAc;AACd;;;;;;;;;;;;;;;ACJO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9kCA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC1eO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9pCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;ACrhBA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACI;AAC5C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,4DAAc;AACpD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACc;AACI;AAC1C;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACuB;AACD;AAC9C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,8DAAe;AAC5D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACc;AACI;AAC1C;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACI;AAC9C;AACP,IAAI,4CAAS,aAAa,0DAAY,EAAE,8DAAe;AACvD;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lDA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC/iBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACn2BA;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACO;AACP;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AAC/B,6BAA6B,+CAAQ;AAC5C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;ACnKA;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxYA;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACO,6BAA6B,+CAAQ;AAC5C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AAC1B,2BAA2B,yDAAa;AAC/C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,kCAAkC;AAClC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;ACrSA;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC7IA;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,yJAAyJ,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AACxX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC1eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACU;AACM;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,+CAAQ;AACtC;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oEAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACtRA;AACA;AACA;AACgC;AACwB;AACtB;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,qBAAqB,4DAAuB;AAC5C,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,qBAAqB,4DAAuB;AAC5C,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,yBAAyB,4DAAuB;AAChD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB,gCAAgC,mCAAmC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB,gCAAgC,mCAAmC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9HA;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;AChuBA;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,6CAAO;AAC3C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AAC/B,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,6CAAO;AACtC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;;;;;;;;;;;;;;;;;;;ACjR/C;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA,0DAA0D,oDAAY,2CAA2C,oDAAY;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3jCA;AACA;AACqD;AACrB;AACgB;AACd;AACK;AAChC,yBAAyB,yDAAa;AAC7C;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,iCAAiC,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjKA;AACA;AACqD;AACL;AACA;AACT;AAChC,2BAA2B,yDAAa;AAC/C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AAChC,yBAAyB,yDAAa;AAC7C;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACqD;AACkB;AACd;AAClB;AACD;AAC/B,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;;;;;;;;;;;;;;;;;;;ACnLxD;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AACxB,oBAAoB,yDAAa;AACxC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClKA;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AAC/B,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,oDAAoD;AACpD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;AC7PA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACiC;AACjC;AAC/B,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACvNA;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACO,yBAAyB,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACnjBA;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,mEAAmE;AAChF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC3xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AAC/B,uBAAuB,2CAAM;AACpC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;ACpGA;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AAC5C,0BAA0B,6CAAO;AACxC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACvLA;AACA;AACgC;AACF;AACS;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,uCAAI;AACtC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChHA;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5TA;AACA;AACqD;AACrB;AACF;AACS;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,oBAAoB,sBAAsB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,2BAA2B,yCAAK;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,oDAAoD,SAAS;AAC7D,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxDA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAuB;AAC5C;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;;;;;;;;;;;;;;;;;;;ACpEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACO,6BAA6B,6CAAO;AAC3C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACE;AACU;AACY;AACtB;AACE;AACQ;AACV;AACc;AACA;AACD;AACX;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kDAAkD,6DAAY;AAC9D;AACA;AACA;AACA,0CAA0C,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA,gDAAgD,qDAAS;AACzD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,oBAAoB,8CAAK,WAAW,wDAAe;AACnD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,gBAAgB,8CAAK,WAAW,wDAAe;AAC/C;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,6BAA6B,uDAAU;AACvC,6BAA6B,uDAAU;AACvC,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA,SAAS;AACT;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,kBAAkB,yDAAkB;AACpC,sBAAsB,8CAAK;AAC3B;AACA;AACA,KAAK;AACL;AACA,0BAA0B,qDAAS,GAAG,eAAe;AACrD;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,cAAc,oBAAoB;AAC5D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,+BAA+B,yDAAkB,gCAAgC,iBAAiB;AAClG;AACA,gBAAgB,gBAAgB;AAChC,gCAAgC,kDAAkD;AAClF;AACA;AACA,oBAAoB,+CAA+C;AACnE;AACA;AACA;AACA,yBAAyB,8CAA8C,+CAAO,EAAE;AAChF,wCAAwC,iBAAiB;AACzD,2CAA2C,4BAA4B;AACvE;AACA;AACA;AACA,wEAAwE,gEAAmB;AAC3F;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,qCAAqC;AAC9D;AACA;AACA;AACA,yBAAyB,6CAA6C;AACtE;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,0DAA0D;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,gEAAgE;AACzF;AACA;AACA;AACA,yBAAyB,4FAA4F;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,6FAA6F;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA,oCAAoC,iEAAe;AACnD;AACA;AACA,YAAY,0DAAW;AACvB;AACA;AACA,QAAQ,uDAAgB;AACxB,QAAQ,uDAAgB;AACxB;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA;AACA,qBAAqB,gEAAgE;AACrF;AACA;AACA;AACA;AACA;AACA,qBAAqB,+DAA+D;AACpF;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kEAAkE;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAoD;AAC7E;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB,aAAa,oBAAoB;AAC3D;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA,yBAAyB,mDAAmD;AAC5E;AACA,sBAAsB,mDAAmD;AACzE;AACA,yBAAyB,mDAAmD;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iDAAS;AAChC,SAAS;AACT,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,IAAI,kEAAsB;AAC1B;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,qCAAqC;AAC/C,UAAU,uCAAuC;AACjD,UAAU,yCAAyC;AACnD,UAAU,yCAAyC;AACnD,UAAU,uCAAuC;AACjD,UAAU,uCAAuC;AACjD,UAAU,qCAAqC;AAC/C;AACA,0BAA0B,6CAA6C;AACvE,4CAA4C,mBAAmB;AAC/D;AACA;AACA,iBAAiB,wDAAe;AAChC,yBAAyB,0DAAW;AACpC;AACA,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,gBAAgB,aAAa;AAC7B,oFAAoF,YAAY;AAChG,oCAAoC,wDAAe;AACnD,IAAI,wEAA2B;AAC/B,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,qCAAqC,wDAAe;AACpD,qCAAqC,wDAAe;AACpD;AACA,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA,qCAAqC,wDAAe;AACpD,IAAI,wEAA2B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,cAAc,0BAA0B;AACxC;AACA;AACA;AACA,yBAAyB,4CAA4C;AACrE;AACA;AACA;AACA,yBAAyB,wEAAwE;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAyE;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAiE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kEAAsB;AAC1B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACl+B3B;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACoB;AACvB;AAChB;AACA;AACA;AACuB;AACb;AACM;AACR;AACN;AACQ;AACV;AACM;AACE;AACF;AACJ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,yEAAsB;AACxC;AACA,oCAAoC,kDAAO;AAC3C,sCAAsC,sDAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC,IAAI,yEAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,oBAAoB,OAAO;AAC3B;AACA,oBAAoB,aAAa;AACjC,kCAAkC,UAAU;AAC5C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,oDAAoD,MAAM;AAC1D,yCAAyC,iEAAsB;AAC/D;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,2CAAI;AAC/B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU;AACxE;AACA,oBAAoB,qCAAqC;AACzD,oBAAoB,4CAA4C;AAChE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,4CAA4C,uDAAU,eAAe,iDAAU;AAC/E;AACA,oBAAoB,qCAAqC,oCAAoC,mBAAmB;AAChH,oBAAoB,4CAA4C,sCAAsC,mBAAmB;AACzH;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT,6BAA6B,uDAAU,kBAAkB,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACnH,6BAA6B,uDAAU;AACvC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,gBAAgB,sDAAe;AAC/B,sBAAsB,oDAAQ;AAC9B,qCAAqC,uDAAU,eAAe,iDAAU,aAAa,wDAAiB,EAAE,uDAAgB;AACxH;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,kDAAO;AAClC;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS,uDAAuD,0EAA6B;AAC7F;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,mDAAmD,uDAAU,eAAe,iDAAU;AACtF;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,0EAA6B;AAC3E,8CAA8C,0EAA6B;AAC3E,oBAAoB,8BAA8B;AAClD,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,8CAA8C,6EAAgC;AAC9E,8CAA8C,6EAAgC;AAC9E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qCAAqC,uDAAU,eAAe,iDAAU,sCAAsC,8EAAiC;AAC/I;AACA,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD,oBAAoB,8BAA8B;AAClD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,mCAAmC,8EAAiC;AACtJ,YAAY,sDAAS,GAAG,8BAA8B,kBAAkB,uDAAU,kCAAkC,8EAAiC;AACrJ;AACA,qBAAqB,2CAAI;AACzB,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,8BAA8B;AACtD,wBAAwB,8BAA8B;AACtD,wBAAwB,4CAA4C;AACpE,wBAAwB,8BAA8B;AACtD;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uDAAU;AAC/E,iBAAiB,sDAAe;AAChC;AACA;AACA,oBAAoB,QAAQ;AAC5B,0BAA0B,8CAAK;AAC/B;AACA,wBAAwB,kDAAkD;AAC1E,wBAAwB,gEAAgE;AACxF,wBAAwB,kDAAkD;AAC1E,wBAAwB,kDAAkD;AAC1E;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA,KAAK;AACL;AACA,yBAAyB,kDAAO;AAChC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,2DAA2D;AACnG,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,8BAA8B,uDAAU,uCAAuC;AAC/E,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAS,uDAAuD,OAAO;AAC/E;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnY3B;AACA;AACA;AACA;AACsD;AACH;AAChB;AACA;AACA;AACU;AACM;AACd;AACS;AACD;AACV;AACM;AACE;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,0EAA0E,wBAAwB;AAClG,iEAAiE,wBAAwB;AACzF,0EAA0E,wBAAwB;AAClG,0EAA0E,wBAAwB;AAClG,yEAAyE,wBAAwB;AACjG,iEAAiE,0BAA0B;AAC3F,uEAAuE,4BAA4B;AACnG,sEAAsE,4BAA4B;AAClG,2EAA2E,8BAA8B;AACzG,oEAAoE,wBAAwB;AAC5F,gDAAgD,wBAAwB;AACxE,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAoB;AAC5C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,kEAAmB;AACzE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,+DAAgB;AACjE;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wBAAwB,4DAAoB;AAC5C;AACA;AACA;AACA,6CAA6C,aAAa;AAC1D;AACA;AACA;AACA;AACA;AACA,qBAAqB,sBAAsB,4DAAoB,EAAE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,sDAAsD,gEAAiB;AACvE;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C;AACA,iDAAiD,kEAAmB;AACpE;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,iEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,iEAAsB;AACnF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0CAA0C,qDAAS;AACnD,sBAAsB,6CAAK;AAC3B;AACA,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8BAA8B;AAClD,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,6BAA6B,2DAAY,gCAAgC,iEAAsB;AAC/F,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE;AACA,gBAAgB,QAAQ;AACxB,qCAAqC,2DAAY;AACjD,qCAAqC,2DAAY;AACjD;AACA,yCAAyC,2DAAY;AACrD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,qCAAqC,iDAAiD;AACtF,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,iCAAiC,2DAAY;AAC7C,IAAI,mEAAuB;AAC3B;AACA,uBAAuB,6CAAK;AAC5B;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,yBAAyB,sDAAe;AACxC,sBAAsB,oDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA,KAAK;AACL;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,+CAA+C,kDAAO;AACtD,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY,2BAA2B;AACrE,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,8BAA8B,2DAAY;AAC1C,sBAAsB,8CAAK,CAAC,mDAAY,UAAU,wDAAe;AACjE;AACA;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;AC3b7B;AACA;AACA;AACA;AACA;AACA;AAC8D;AAC3B;AACQ;AACN;AACF;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yGAAyG,aAAa;AACtH;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iGAAiG,aAAa;AAC9G;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA,uCAAuC,8CAAO;AAC9C,uCAAuC,8CAAO;AAC9C,uCAAuC,8CAAO;AAC9C,uCAAuC,8CAAO;AAC9C,uCAAuC,gDAAS;AAChD,uCAAuC,gDAAS;AAChD;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,mDAAQ;AAChC,kBAAkB,4DAAqB;AACvC,uCAAuC,gDAAS;AAChD,uCAAuC,gDAAS;AAChD,uCAAuC,8CAAO;AAC9C,uCAAuC,gDAAS;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sGAAsG,aAAa;AACnH,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AACxE;AACA,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yIAAyI,aAAa;AACtJ,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,KAAK,aAAa;AAClD,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2EAA2E,aAAa;AACxF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,uEAAuE,aAAa;AACpF,kBAAkB,yDAAkB;AACpC,qBAAqB,mDAAQ;AAC7B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC;AACA;AACA,KAAK;AACL;AACA;AACA,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E,WAAW,4DAAqB,oBAAoB,gEAAyB;AAC7E;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,6BAA6B,OAAO;AACpC,0FAA0F,aAAa;AACvG,6BAA6B,QAAQ;AACrC,sEAAsE,aAAa;AACnF,6BAA6B,QAAQ;AACrC,uGAAuG,eAAe;AACtH,wBAAwB,mDAAQ;AAChC,wBAAwB,mDAAQ,YAAY,mDAAQ;AACpD,wBAAwB,mDAAQ,aAAa,mDAAQ,aAAa,mDAAQ;AAC1E;AACA;AACA;AACA,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC,WAAW,4DAAqB;AAChC;AACA;AACA,IAAI,gEAAwB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA,yDAAyD,mCAAmC;AAC5F,SAAS,aAAa;AACtB,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wGAAwG,aAAa;AACrH,kBAAkB,4DAAqB,mBAAmB,gEAAyB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,iFAAiF,aAAa;AAC9F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8EAA8E,aAAa;AAC3F,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,KAAK;AACL,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,+FAA+F,aAAa;AAC5G,kBAAkB,4DAAqB,wBAAwB,mDAAQ,YAAY,mDAAQ,YAAY,mDAAQ;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB,yBAAyB,uBAAuB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA;AACA,aAAa,yDAAM;AACnB,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB,yBAAyB,kBAAkB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,YAAY,gBAAgB;AAC5B;AACA;AACA;AACA;AACA,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,kBAAkB,yDAAkB;AACpC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACc;;;;;;;;;;;;;;;;;ACzjBnC;AACA;AACA;AACA;AAC8D;AACT;AACrD;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,IAAI,sEAA8B;AAClC;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,oBAAoB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA;AACA;AACA,6EAA6E,YAAY,WAAW,yDAAM;AAC1G,oCAAoC,4CAA4C;AAChF;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,qDAAqD;AACzE;AACA,oBAAoB,6CAA6C,cAAc,KAAK;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,sEAAsE;AAC5F,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,kFAAkF,cAAc,WAAW,yDAAM;AACjH,KAAK;AACL,wCAAwC,gCAAgC;AACxE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA,kFAAkF,YAAY,WAAW,yDAAM;AAC/G,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uFAAuF,YAAY,WAAW,yDAAM;AACpH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,iDAAiD,cAAc,KAAK;AACxF;AACA;AACA;AACA;AACA;AACA,wCAAwC,gCAAgC;AACxE,wCAAwC,aAAa;AACrD,wCAAwC,gCAAgC;AACxE;AACA;AACA,gCAAgC,yDAAyD;AACzF,sBAAsB,2CAA2C;AACjE;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,4FAA4F,cAAc,WAAW,yDAAM;AAC3H;AACA,KAAK;AACL;AACA,wCAAwC,gCAAgC;AACxE,6CAA6C,gBAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,iBAAiB,4BAA4B;AAC7C;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,kFAAkF,YAAY,WAAW,yDAAM;AAC/G;AACA,KAAK;AACL,sBAAsB,qCAAqC,cAAc,KAAK;AAC9E;AACA,wCAAwC,aAAa;AACrD;AACA;AACA,sBAAsB,yEAAyE;AAC/F,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,mFAAmF,cAAc,WAAW,yDAAM;AAClH,KAAK;AACL,yCAAyC,gCAAgC;AACzE,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA;AACA;AACA,sBAAsB,yEAAyE;AAC/F;AACA;AACA;AACA,uBAAuB,cAAc;AACrC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL;AACA,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,4CAA4C,+BAA+B;AAC3E,yCAAyC,gCAAgC;AACzE,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,2DAA2D,cAAc,KAAK;AAClG;AACA;AACA;AACA;AACA;AACA,yCAAyC,gCAAgC;AACzE,yCAAyC,aAAa;AACtD,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,wEAAwE,YAAY,WAAW,yDAAM;AACrG;AACA,KAAK;AACL,sBAAsB,2DAA2D,cAAc,KAAK;AACpG;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,YAAY,WAAW,yDAAM;AAChH;AACA,KAAK;AACL,sBAAsB,kDAAkD,cAAc,KAAK;AAC3F;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA,6BAA6B,gBAAgB,2CAA2C,yDAAM;AAC9F,KAAK;AACL,uBAAuB,8DAAsB;AAC7C;AACA,oBAAoB,gDAAgD,cAAc,KAAK;AACvF,uBAAuB,8DAAsB;AAC7C;AACA,yCAAyC,aAAa;AACtD,yCAAyC,aAAa;AACtD;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,mFAAmF,cAAc,WAAW,yDAAM;AAClH,oCAAoC,8CAA8C;AAClF;AACA,KAAK;AACL,uBAAuB,gEAAwB;AAC/C,sBAAsB,gCAAgC,cAAc,KAAK,gBAAgB,gEAAwB;AACjH;AACA;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,uBAAuB,gBAAgB;AACvC,8FAA8F,cAAc,WAAW,yDAAM;AAC7H;AACA,KAAK;AACL,sBAAsB,gCAAgC,cAAc,KAAK;AACzE;AACA,yCAAyC,gCAAgC;AACzE;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,IAAI,uEAA+B;AACnC;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;ACxWzB;AACA;AACA;AACA;AACsD;AACK;AAC3D;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU,2DAAY,EAAE,0DAAW;AACnC,cAAc,iEAAqB;AACnC,cAAc,iEAAkB;AAChC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,gEAAgE;AACtF,oBAAoB,gBAAgB;AACpC;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,wBAAwB,6EAA6E;AACrG;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;ACzDxB;AACA;AACA;AACA;AACA;AAC8D;AACiD;AAC/G;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,YAAY;AAC3F,aAAa,yDAAM,KAAK,aAAa;AACrC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,YAAY,mCAAmC,YAAY,WAAW,yDAAM;AAC5H,gDAAgD,cAAc,qCAAqC,cAAc,WAAW,yDAAM;AAClI;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,YAAY;AAC1D,8CAA8C,YAAY;AAC1D,4BAA4B,YAAY;AACxC,iBAAiB,yDAAM;AACvB;AACA,uDAAuD,cAAc;AACrE,uDAAuD,cAAc;AACrE,4BAA4B,cAAc;AAC1C,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE,YAAY,KAAK,6BAA6B;AACtH,sDAAsD,YAAY,KAAK,0BAA0B;AACjG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA,8EAA8E,cAAc;AAC5F;AACA,aAAa;AACb,sDAAsD,cAAc,KAAK,0BAA0B;AACnG,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,YAAY;AACjE;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G;AACA,qDAAqD,YAAY,KAAK,yBAAyB,YAAY;AAC3G,iBAAiB,yDAAM,KAAK,aAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA,+CAA+C,YAAY;AAC3D,+CAA+C,YAAY;AAC3D,aAAa,yDAAM;AACnB;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,qCAAqC,kBAAkB;AACxE,iBAAiB,sCAAsC,kBAAkB;AACzE,iBAAiB,uCAAuC,kBAAkB;AAC1E;AACA;AACA,eAAe,+CAAO;AACtB,iBAAiB,iDAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,+HAA+H,YAAY;AAC3I,+HAA+H,cAAc;AAC7I;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA,kCAAkC,wDAAwD;AAC1F;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,KAAK,KAAK,eAAe;AACzB;AACA;AACA,KAAK,KAAK,eAAe;AACzB,aAAa,0CAA0C;AACvD,aAAa,2CAA2C;AACxD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8HAA8H,YAAY,KAAK,aAAa;AAC5J;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oKAAoK,eAAe;AACnL;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,8FAA8F,YAAY;AAC1G;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,iIAAiI,YAAY;AAC7I;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,2EAA2E,YAAY,MAAM,aAAa;AAC1G;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,OAAO;AACtC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,iBAAiB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,+BAA+B,WAAW,iBAAiB;AAC3D;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,iBAAiB,kBAAkB;AAC/E,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF,UAAU,kCAAkC,kBAAkB,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,0DAAkB;AACtB,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,sCAAsC,gBAAgB;AACrE,eAAe,uCAAuC,gBAAgB;AACtE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oCAAoC,uDAAe;AACnD,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,uCAAuC;AAChF,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,sCAAsC;AAC/E,UAAU,cAAc,iBAAiB,uCAAuC;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,aAAa,qCAAqC,kBAAkB;AACpE;AACA,aAAa,sCAAsC,kBAAkB;AACrE,oCAAoC,uDAAe;AACnD;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,0CAA0C,qBAAqB,qEAA6B,QAAQ;AACpG;AACA;AACA,0CAA0C,qBAAqB,wEAAgC,QAAQ;AACvG,mBAAmB,eAAe;AAClC,mBAAmB,eAAe;AAClC,0CAA0C,uDAAe;AACzD,4EAA4E,cAAc;AAC1F;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,oCAAoC,uDAAe;AACnD,sEAAsE,cAAc;AACpF;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D,UAAU,yDAAyD;AACnE,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,oDAAoD;AAC9D,UAAU,mDAAmD;AAC7D,UAAU,kDAAkD;AAC5D,UAAU,0DAA0D;AACpE,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,uFAAuF,+BAA+B;AACtH,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,aAAa,eAAe;AAC5B,qCAAqC,uDAAe;AACpD,qCAAqC,uDAAe;AACpD,sBAAsB,kBAAkB;AACxC,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACtpBrB;AACA;AACA;AACA;AACsD;AACnB;AACA;AACU;AACY;AACtB;AACM;AACE;AACM;AACjD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,iDAAO;AACxC,oDAAoD,2CAAI;AACxD,uCAAuC,2CAAI;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,IAAI,mEAAuB;AAC3B,4BAA4B,uDAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,0BAA0B,iBAAiB;AAC3C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,uBAAuB,iEAAe;AACtC;AACA,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gDAAS,WAAW,sDAAe,EAAE;AACpD,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,qBAAqB;AAC9C,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT;AACA,oBAAoB,kBAAkB;AACtC;AACA,sCAAsC,iEAAe;AACrD,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,QAAQ,uDAAgB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yEAAsB;AAC/C,sBAAsB,mDAAQ;AAC9B;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,gBAAgB;AACvC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,gDAAS,gBAAgB;AACzC,UAAU,MAAM,8CAAO,eAAe;AACtC,UAAU,MAAM,gDAAS,YAAY;AACrC;AACA;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,uDAAgB;AACpB;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;AC/NrB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,mDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA,qBAAqB,mDAAW;AAChC,qBAAqB,mDAAW;AAChC,wBAAwB,mDAAW;AACnC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;ACxD5B;AACA;AACA;AACA;AACsD;AACoB;AAC1E;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,kCAAkC,MAAM;AACxC,SAAS;AACT;AACA,8BAA8B,MAAM;AACpC,SAAS;AACT,KAAK;AACL;AACA;AACA,yBAAyB,8DAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB,WAAW,6DAAqB;AAC/D,iBAAiB,mEAA2B;AAC5C;AACA;AACA;AACA;AACA,IAAI,2DAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iBAAiB;AAC/E,8DAA8D,iBAAiB;AAC/E,iEAAiE,iBAAiB;AAClF,mEAAmE,kBAAkB;AACrF,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,wDAAgB,WAAW,0DAAkB;AAC5D,iBAAiB,mEAA2B;AAC5C;AACA;AACA;AACA;AACA,IAAI,2DAAmB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,iBAAiB;AAC/E,8DAA8D,iBAAiB;AAC/E,iEAAiE,iBAAiB;AAClF,mEAAmE,kBAAkB;AACrF,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE,wDAAwD,YAAY;AACpE;AACA,wEAAqB;AACkB;;;;;;;;;;;;;;;;;;;;;;;;ACrNvC;AACA;AACA;AACA;AACsD;AACP;AACE;AACd;AACU;AACF;AACN;AACQ;AACN;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,gBAAgB,qFAAuC;AAC7E,oBAAoB,gBAAgB,mFAAqC;AACzE;AACA,2EAA2E,gBAAgB;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,6DAA6D,mDAAQ;AACrE;AACA,6DAA6D,mDAAQ;AACrE;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA,gCAAgC,4DAAoB;AACpD;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C,gCAAgC,cAAc;AAC9C;AACA,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA;AACA,wBAAwB,oCAAoC;AAC5D,wBAAwB,sCAAsC;AAC9D,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0FAA0F,2CAA2C;AACrI;AACA,gCAAgC,sBAAsB;AACtD;AACA,uEAAuE,uDAAU;AACjF;AACA;AACA;AACA,2CAA2C,aAAa;AACxD;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,wEAAwE,uDAAU;AAClF;AACA;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,iCAAiC,kBAAkB;AACnD;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA,6BAA6B,oBAAoB;AACjD;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,2EAA2E,uDAAU;AACrF;AACA,2EAA2E,uDAAU;AACrF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,0DAA0D,qDAAS,GAAG,oCAAoC;AAC1G,0BAA0B,6CAAK;AAC/B;AACA;AACA,wEAAwE,uDAAU;AAClF;AACA,wEAAwE,uDAAU;AAClF;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,yEAAyE,qDAAS,GAAG,gBAAgB;AACrG,gCAAgC,sBAAsB;AACtD;AACA;AACA,+FAA+F,WAAW;AAC1G;AACA,+FAA+F,WAAW;AAC1G;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;ACnZ5B;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,0BAA0B,iBAAiB;AAChE,sBAAsB,6CAA6C;AACnE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,yBAAyB,iBAAiB;AAC/D,sBAAsB,4CAA4C;AAClE,qBAAqB,kCAAkC,iBAAiB;AACxE,sBAAsB,qDAAqD;AAC3E,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,+BAA+B,iBAAiB;AACrE,sBAAsB,kDAAkD;AACxE,qBAAqB,4BAA4B,iBAAiB;AAClE,sBAAsB,+CAA+C;AACrE,qBAAqB,2BAA2B,iBAAiB;AACjE,sBAAsB,8CAA8C;AACpE,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,gEAAgE;AACtF,qBAAqB,2BAA2B,oCAAoC;AACpF,sBAAsB,+DAA+D;AACrF;AACA,4BAA4B,cAAc;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;ACtIrB;AACA;AACA;AACA;AACsD;AACjB;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,+EAA+E;AAC7G;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,qEAAqE;AACnG;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,0BAA0B,iDAAiD;AAC3E,0BAA0B,sCAAsC;AAChE,0BAA0B,kCAAkC;AAC5D;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,uDAAuD;AACjF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAA+D;AACzF,0BAA0B,wCAAwC;AAClE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAA8D;AACxF,0BAA0B,yCAAyC;AACnE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,kBAAkB,UAAU,8BAA8B,8CAA8C;AACxG;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,cAAc,2EAAwB,gBAAgB,4DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA,wCAAwC,YAAY;AACpD;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C,mFAAmF,0BAA0B;AAC7G;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,oDAAoD,qBAAqB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACrT1B;AACA;AACA;AACA;AAC8D;AACjB;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA,iBAAiB,yDAAM;AACvB;AACA,kDAAkD,aAAa;AAC/D;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY;AAC7D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,kDAAkD,YAAY;AAC9D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,oDAAoD,YAAY;AAChE,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,8CAA8C,YAAY;AAC1D,uBAAuB,cAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8DAAsB;AAC5C,0BAA0B,+DAAuB;AACjD;AACA,kBAAkB,aAAa;AAC/B,kBAAkB,cAAc;AAChC;AACA,SAAS;AACT,KAAK;AACL,CAAC;AACD,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACvItB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACY;AACY;AACtB;AACE;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,gCAAgC,iEAAe;AAC/C;AACA,QAAQ,yDAAW;AACnB;AACA,IAAI,uDAAgB;AACpB;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,wEAAwE;AAChG,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,4FAA4F;AACpH,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,uEAAuE;AAC/F;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,IAAI,wDAAkB,yBAAyB,WAAW;AAC1D,qBAAqB,2CAAI;AACzB,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF,YAAY,qDAAS,GAAG,gEAAgE;AACxF;AACA,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,iDAAiD,WAAW;AAClF,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB,gBAAgB,UAAU;AAChD,IAAI,wDAAkB;AACtB;AACA,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,+DAA+D;AACvF,YAAY,qDAAS,GAAG,sEAAsE;AAC9F,YAAY,qDAAS,GAAG,+DAA+D;AACvF;AACA,IAAI,wDAAkB,WAAW,WAAW;AAC5C,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,uBAAuB,6CAAK,WAAW,uDAAe;AACtD,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,6BAA6B,uDAAgB;AAC7C,6BAA6B,uDAAgB;AAC7C,IAAI,sFAAmC;AACvC;AACA;AACA,wEAAqB;AACD;;;;;;;;;;;;;;;;;;;;;;;;AC7HpB;AACA;AACA;AACA;AACsD;AACH;AACN;AACU;AACZ;AACM;AACM;AACpB;AACI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,0CAA0C,YAAY;AACtD;AACA,KAAK;AACL;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,yCAAyC,YAAY;AACrD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,KAAK;AACL;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,oEAAoE,cAAc;AAClF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,sEAAsE,cAAc;AACpF,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,uDAAuD,YAAY;AACnE,iEAAiE,YAAY;AAC7E,sDAAsD,YAAY;AAClE,iBAAiB,aAAa;AAC9B,gGAAgG,cAAc;AAC9G;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY;AACtE,mEAAmE,YAAY;AAC/E,oDAAoD,YAAY;AAChE,iBAAiB,aAAa;AAC9B;AACA,0CAA0C,cAAc;AACxD,0DAA0D,cAAc;AACxE,kEAAkE,cAAc;AAChF,2DAA2D,cAAc;AACzE,iBAAiB,aAAa;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B,+DAA+D,cAAc;AAC7E,IAAI,wEAA0B;AAC9B,2CAA2C,cAAc;AACzD,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,0DAA0D,cAAc;AACxE,IAAI,wEAA0B;AAC9B;AACA;AACA;AACA,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,2EAA2E,cAAc;AACzF,8CAA8C,YAAY;AAC1D;AACA,KAAK;AACL;AACA;AACA;AACA,+DAA+D,cAAc;AAC7E,KAAK;AACL;AACA,kCAAkC,4EAA2B;AAC7D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,qBAAqB;AACjC;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E,wCAAwC,YAAY,iCAAiC,YAAY;AACjG;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,6BAA6B;AACzC;AACA,mEAAmE,cAAc;AACjF,kBAAkB,+DAAsB;AACxC,KAAK;AACL,wCAAwC,cAAc;AACtD;AACA;AACA,0CAA0C,YAAY;AACtD,gEAAgE,YAAY;AAC5E;AACA,sBAAsB,kBAAkB;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,eAAe;AAC3B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oEAAqB;AAC9D;AACA,yCAAyC,kEAAuB;AAChE,yCAAyC,oEAAqB;AAC9D;AACA,yCAAyC,kEAAuB;AAChE,oCAAoC,8CAAO;AAC3C,yCAAyC,oEAAqB;AAC9D;AACA,yCAAyC,kEAAuB;AAChE,uCAAuC,gDAAS;AAChD;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,sBAAsB,8BAA8B;AACpD;AACA;AACA,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,iEAAsB;AAC/D;AACA,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,kEAAuB;AAChE;AACA,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,kEAAuB;AAChE;AACA;AACA;AACA;AACA,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,iEAAsB;AAC/D,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,iEAAsB;AAC/D,yCAAyC,wEAAuB;AAChE;AACA,yCAAyC,iEAAsB;AAC/D;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,oIAAoI,cAAc;AAClJ,sBAAsB,0DAA0D;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;ACtf1B;AACA;AACA;AACA;AACsD;AACb;AACK;AAC9C;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,iDAAO,GAAG,YAAY,0CAA0C;AACrF,wBAAwB,iDAAO;AAC/B,oBAAoB,0CAA0C;AAC9D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,oCAAoC,YAAY;AAChD,wFAAwF,wEAAyB;AACjH,sEAAsE,eAAe;AACrF,sBAAsB,eAAe;AACrC,qEAAqE,wEAAyB;AAC9F,yEAAyE,eAAe;AACxF,sBAAsB,oCAAoC;AAC1D;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;AClDxB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACkB;AACZ;AACN;AACuB;AACP;AACN;AACI;AACN;AACN;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,8BAA8B,2DAAiB;AAC/C;AACA;AACA;AACA,qBAAqB,uDAAU;AAC/B;AACA;AACA,qCAAqC;AACrC;AACA,kDAAkD,uDAAgB;AAClE;AACA;AACA,uCAAuC,sDAAe;AACtD;AACA,uCAAuC,sDAAe,EAAE,uDAAgB;AACxE;AACA,uCAAuC,sDAAe;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA,sEAAsE,sDAAe;AACrF,oEAAoE,gDAAS;AAC7E,sEAAsE,wDAAiB;AACvF,qEAAqE,uDAAgB;AACrF;AACA,kBAAkB,oDAAQ,GAAG,uBAAuB,cAAc;AAClE;AACA,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,qDAAS,GAAG,8BAA8B;AAC7D,mBAAmB,yDAAW,GAAG,qBAAqB;AACtD;AACA;AACA,4DAA4D,uDAAgB;AAC5E;AACA,eAAe,yDAAkB;AACjC,uBAAuB,mEAA4B;AACnD;AACA;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B,SAAS,4DAAqB;AACnF;AACA;AACA;AACA;AACA,yBAAyB,mEAA4B;AACrD;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA,0DAA0D;AAC1D;AACA,8BAA8B,qDAAc,6BAA6B;AACzE;AACA,cAAc,qDAAc;AAC5B;AACA;AACA;AACA,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA,wBAAwB,8DAAkB;AAC1C;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oDAAoD;AAC5E,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA,IAAI,8DAAkB;AACtB;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,oBAAoB,2EAAwB;AAC5C,kCAAkC,OAAO;AACzC;AACA;AACA,4BAA4B,gEAAgE;AAC5F,4BAA4B,yDAAyD;AACrF,4BAA4B,gEAAgE;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3JrB;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACA;AACF;AACE;AACY;AACF;AACU;AACJ;AAChB;AACQ;AACN;AACkB;AACV;AACV;AACgB;AACZ;AACA;AACF;AACE;AACvC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,sBAAsB;AAC1G,qGAAqG,qBAAqB;AAC1H,gFAAgF,qBAAqB;AACrG;AACA;AACA,0DAA0D,aAAa;AACvE;AACA;AACA;AACA;AACA;AACA,mEAAmE,4BAA4B;AAC/F,0EAA0E,4CAA4C;AACtH,uEAAuE,yCAAyC;AAChH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iEAAuB;AAC7C;AACA;AACA,4BAA4B,4DAAqB;AACjD;AACA;AACA;AACA,mBAAmB,iDAAY;AAC/B;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,CAAC,mDAAY;AACzC,uBAAuB,8CAAK,CAAC,mDAAY;AACzC;AACA;AACA,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA,4BAA4B,sDAAS,GAAG,6BAA6B;AACrE;AACA,mBAAmB,8CAAK;AACxB;AACA;AACA;AACA,gCAAgC,iBAAiB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE,iBAAiB,mDAAmD;AACpE;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mBAAmB;AAChD,uBAAuB,wBAAwB;AAC/C,SAAS;AACT;AACA;AACA,uCAAuC,cAAc;AACrD;AACA,qCAAqC,0BAA0B;AAC/D;AACA,qCAAqC,0BAA0B;AAC/D;AACA;AACA;AACA,4CAA4C,4BAA4B;AACxE;AACA,uCAAuC;AACvC;AACA;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,2CAAI;AAC3B,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2DAA2D,gBAAgB;AAC3E,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,+BAA+B,6DAAoB;AACnD,6BAA6B,0BAA0B;AACvD,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAQ;AACjC,IAAI,0EAA8B;AAClC,cAAc,2EAAwB;AACtC;AACA,gBAAgB,aAAa;AAC7B;AACA,uBAAuB,8CAAK,WAAW,wDAAe;AACtD,2JAA2J,cAAc;AACzK,uBAAuB,8CAAK,WAAW,wDAAe;AACtD;AACA;AACA;AACA;AACA;AACA,6BAA6B,sBAAsB,6DAAoB,EAAE;AACzE,6BAA6B,uBAAuB,6DAAoB,EAAE;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,2CAA2C,aAAa;AACxD;AACA,2CAA2C,aAAa;AACxD,gBAAgB,yDAAkB;AAClC,gCAAgC,yDAAkB;AAClD,yBAAyB,yDAAkB;AAC3C,oCAAoC;AACpC;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA,IAAI,wDAAkB,iBAAiB,WAAW;AAClD;AACA,2CAA2C,aAAa,UAAU,wDAAe;AACjF,2CAA2C,aAAa,UAAU,wDAAe;AACjF,oBAAoB,yDAAkB;AACtC,oBAAoB,yDAAkB;AACtC,0BAA0B,qDAAS;AACnC;AACA;AACA;AACA,8BAA8B,sBAAsB,6DAAoB,EAAE;AAC1E,8BAA8B,uBAAuB,6DAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD,YAAY,sDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,gCAAgC;AACxD,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,cAAc,2EAAwB;AACtC;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,uBAAuB,8CAAK,GAAG,6BAA6B;AAC5D;AACA,0BAA0B,qDAAS,GAAG,6CAA6C;AACnF;AACA;AACA;AACA;AACA,uBAAuB,8CAAK,iBAAiB,6DAAoB;AACjE,uBAAuB,8CAAK,kBAAkB,6DAAoB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,sBAAsB,8CAAK;AAC3B,uBAAuB,8CAAK;AAC5B;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,uDAAU;AACvC,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,kCAAkC,6EAAgC;AACzG,6BAA6B,uDAAU,iCAAiC,6EAAgC;AACxG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,sDAAS,GAAG,8BAA8B;AACtD,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,YAAY,sDAAS,GAAG,8CAA8C,iDAAS,EAAE;AACjF,6BAA6B,gEAAc,kBAAkB,kEAAsB;AACnF,6BAA6B,4DAAY,kBAAkB,kEAAsB;AACjF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,mBAAmB,kEAAsB;AAClF,6BAA6B,2DAAY,oBAAoB,kEAAsB;AACnF,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,kCAAkC,0EAA6B;AACtG,6BAA6B,uDAAU,iCAAiC,0EAA6B;AACrG,YAAY,sDAAS,GAAG,8BAA8B;AACtD;AACA,uBAAuB,gDAAM;AAC7B,wBAAwB,gDAAM;AAC9B,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA,qGAAqG,cAAc;AACnH,uFAAuF,YAAY;AACnG;AACA;AACA;AACA,qCAAqC,6DAAoB;AACzD;AACA,mDAAmD,wDAAgB,uBAAuB;AAC1F,mDAAmD,wDAAgB,sBAAsB;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,MAAM;AACtC,yFAAyF,YAAY;AACrG;AACA,qBAAqB,MAAM;AAC3B;AACA,wBAAwB,cAAc,iBAAiB,kBAAkB,kBAAkB,2CAAI;AAC/F;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb,iCAAiC,2CAAI;AACrC,wBAAwB,cAAc,iBAAiB,kBAAkB;AACzE;AACA;AACA,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC,sBAAsB,iBAAiB;AACvC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA;AACA,kFAAkF,6DAAoB;AACtG;AACA,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD,kBAAkB,kCAAkC;AACpD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,mBAAmB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,YAAY;AACrF,8DAA8D,cAAc;AAC5E;AACA,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA;AACA,yBAAyB,6DAAoB;AAC7C;AACA,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D,kBAAkB,6CAA6C;AAC/D;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB,YAAY,2CAAI;AAChB;AACA,oBAAoB,mBAAmB;AACvC;AACA;AACA,mDAAmD,wDAAgB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0EAA8B,KAAK,oDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA;AACA,oDAAoD,mBAAmB;AACvE;AACA,6DAA6D,mBAAmB;AAChF,qEAAqE,mBAAmB;AACxF;AACA,wDAAwD,aAAa;AACrE;AACA,oBAAoB,0CAA0C;AAC9D;AACA;AACA;AACA,kCAAkC,6EAA2B;AAC7D;AACA;AACA;AACA;AACA;AACA,IAAI,2EAA+B;AACnC;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,aAAa;AACnG;AACA,SAAS;AACT;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB,gBAAgB,6DAAoB;AAC1E;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,6BAA6B,sDAAS,GAAG,6BAA6B;AACtE;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA;AACA,qCAAqC,uDAAU;AAC/C,8CAA8C,8EAAiC;AAC/E,6BAA6B,iDAAU,MAAM,wDAAiB;AAC9D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gBAAgB,wDAAkB,WAAW,WAAW;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,2CAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2BAA2B,8CAAK,GAAG,wCAAwC,UAAU,wDAAe;AACpG,wBAAwB,qDAAS,GAAG,wCAAwC;AAC5E;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACzuB1B;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA,wBAAwB,mDAAQ;AAChC,wBAAwB,mDAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB,UAAU,wDAAa;AACvB;AACA,UAAU,uDAAY;AACtB,UAAU,uDAAY;AACtB,UAAU,uDAAY;AACtB,UAAU,uDAAY;AACtB,UAAU,uDAAY;AACtB;AACA;AACA,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,sBAAsB,mDAAQ;AAC9B,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;AChFzB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gGAAgG,YAAY;AAC5G;AACA,KAAK;AACL;AACA,aAAa,6BAA6B;AAC1C,aAAa,8BAA8B;AAC3C;AACA;AACA,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD;AACxE,sBAAsB,eAAe;AACrC,sBAAsB,kDAAkD,6BAA6B,YAAY;AACjH,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gBAAgB;AACtC,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,iDAAiD;AACvE,SAAS,aAAa;AACtB;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,iBAAiB;AACvC,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,SAAS,aAAa;AACtB;AACA;AACA,0EAA0E,MAAM;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,CAAC;AACD,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;ACzF1B;AACA;AACA;AACA;AACsD;AACL;AACZ;AACM;AACY;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2DAA2D,gCAAgC;AAC3F,8CAA8C,gCAAgC;AAC9E,mDAAmD,8BAA8B;AACjF,kDAAkD,+BAA+B;AACjF,KAAK;AACL;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA;AACA,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE,wBAAwB,6CAAK,0BAA0B,eAAe;AACtE;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA,qCAAqC,gBAAgB,qFAAuC,EAAE;AAC9F;AACA;AACA;AACA;AACA,iCAAiC,gBAAgB,qFAAuC,EAAE;AAC1F,gCAAgC,gBAAgB,mFAAqC,EAAE;AACvF;AACA;AACA;AACA,sBAAsB,yDAAyD;AAC/E,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,qDAAqD,aAAa;AAClE,kDAAkD,yDAAyD;AAC3G;AACA,yBAAyB,6CAAK,sBAAsB,eAAe,IAAI,SAAS;AAChF,yBAAyB,6CAAK,uBAAuB,mCAAmC;AACxF;AACA,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E,4BAA4B,6CAAK,uBAAuB,gBAAgB;AACxE,4BAA4B,6CAAK,0BAA0B,gBAAgB;AAC3E;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA;AACA,IAAI,yEAA8B,KAAK,mDAAQ;AAC/C,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD,KAAK;AACL;AACA,wDAAwD,aAAa;AACrE,2DAA2D,yDAAyD;AACpH;AACA;AACA;AACA;AACA;AACA,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD,oCAAoC,gBAAgB;AACpD;AACA;AACA;AACA,kCAAkC,4EAA2B;AAC7D;AACA,IAAI,0EAA+B;AACnC;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;ACpH1B;AACA;AACA;AACA;AACA;AACsD;AACP;AACA;AACI;AAClB;AACY;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,6CAA6C,YAAY;AACzD,8CAA8C,YAAY;AAC1D,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,oBAAoB;AAChE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,0BAA0B,4CAA4C;AACtE;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,uDAAU;AACvC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,mBAAmB;AAC/D,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC,6BAA6B,2DAAY;AACzC;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,2BAA2B,4CAA4C;AACvE,2BAA2B,2CAA2C;AACtE;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,qCAAqC;AAC/C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,8CAA8C,WAAW;AACzD,IAAI,wDAAkB,qBAAqB,WAAW;AACtD;AACA;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,wCAAwC,WAAW;AACnD,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,sDAAsD;AAC/E,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E;AACA,yBAAyB,+CAA+C;AACxE,4CAA4C,gCAAgC;AAC5E,sBAAsB,+CAA+C;AACrE;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;AACrD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E,cAAc,6DAA6D;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qCAAqC,+CAA+C;AACpF;AACA;AACA;AACA;AACA,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF,kBAAkB,6DAA6D;AAC/E,kBAAkB,8DAA8D;AAChF;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,kDAAkD,sBAAsB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA,2BAA2B,8DAA8D;AACzF,2BAA2B,+DAA+D;AAC1F;AACA,UAAU,mDAAmD;AAC7D,UAAU,mDAAmD;AAC7D;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,iDAAiD;AAC3D;AACA;AACA,8CAA8C,WAAW;AACzD,4CAA4C,oBAAoB;AAChE,4CAA4C,oBAAoB;AAChE,6CAA6C,oBAAoB;AACjE,6CAA6C,oBAAoB;AACjE;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;;;;ACva1B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACU;AACJ;AACV;AACE;AACN;AACrC;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,iDAAO;AAC3C,yCAAyC,2DAAY;AACrD;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,gCAAgC,cAAc,mBAAmB,kBAAkB;AACnF;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,kBAAkB,mBAAmB;AAC7D;AACA,gCAAgC,cAAc,iBAAiB,kBAAkB;AACjF;AACA,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D,UAAU,cAAc,kBAAkB,kBAAkB;AAC5D;AACA;AACA,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D,UAAU,cAAc,iBAAiB,mBAAmB;AAC5D;AACA;AACA;AACA,0BAA0B,+DAAc;AACxC,0BAA0B,+DAAc;AACxC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxF7B;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACmC;AACA;AACE;AACQ;AAChB;AACG;AACH;AACA;AACO;AACW;AACX;AACP;AACK;AACJ;AACF;AACM;AACF;AACH;AACK;AACD;AACC;AACA;AACA;AACG;AACJ;AACE;AACE;AACJ;AACQ;AACX;AACG;AACI;AACG;AACP;AACF;AACM;AACF;AACF;AACA;AACH;AACC;AACD;AACS;AACF;AACH;AACI;AACJ;AACD;AACI;AACL;AACF;AACE;AACC;AACA;AACF;AACK;AACE;AACL;AACE;AACC;AACE;AACN;AACD;AACA;AACG;AACA;AACF;AACO;AACT;;;;;;;;;;;;;;;;;;;ACpF9B;AACA;AACA;AACA;AACA;AAC8E;AACzC;AACc;AACd;AACrC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,2CAA2C,iBAAiB;AAC5D,2CAA2C,kBAAkB;AAC7D;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,0BAA0B;AAC1B,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,uBAAuB;AAC3D,aAAa;AACb;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,6DAAU,GAAG,6DAAU;AACnE;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,wBAAwB,6CAAK;AAC7B;AACA,uCAAuC,6CAAK;AAC5C;AACA,uBAAuB,UAAU;AACjC,yBAAyB,2DAAY;AACrC;AACA;AACA,wBAAwB,qBAAqB;AAC7C,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA,IAAI,gEAAwB;AAC5B,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,0EAA0E,4DAAoB;AAC9F,wEAAwE,4DAAoB;AAC5F;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;AChHjC;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACZ;AAC1C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kDAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACM;;;;;;;;;;;;;;;;;;;;;AC5E3B;AACA;AACA;AACA;AACA;AAC8E;AAC3C;AACE;AACc;AACd;AACa;AAClD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,2BAA2B;AAC3B,uBAAuB,sDAAc;AACrC,sBAAsB,sDAAc;AACpC,yBAAyB,sDAAc;AACvC,sBAAsB,sDAAc,2BAA2B;AAC/D,aAAa;AACb;AACA;AACA;AACA;AACA,qBAAqB,wDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB,IAAI,wDAAiB;AACrB;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG,4DAAoB;AACzH,iGAAiG,4DAAoB;AACrH,kGAAkG,4DAAoB;AACtH,sGAAsG,4DAAoB;AAC1H;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,4DAAoB;AACpG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAAoB;AACpC,8BAA8B,6CAAK;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B;AACA,oBAAoB,OAAO;AAC3B,qBAAqB,2DAAY;AACjC;AACA;AACA,oBAAoB,iBAAiB;AACrC,qBAAqB,2DAAY;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA,uBAAuB,uEAAwB;AAC/C,uBAAuB,qEAAsB;AAC7C;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,4BAA4B;AAC5B,yBAAyB;AACzB,sFAAsF,4DAAoB;AAC1G,oFAAoF,4DAAoB;AACxG;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,iBAAiB,6DAAU;AAC3B,oBAAoB,OAAO;AAC3B;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,2BAA2B;AAClD,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,WAAW;AAClC,sBAAsB,8BAA8B;AACpD;AACA,uBAAuB,gCAAgC;AACvD,sBAAsB,8BAA8B;AACpD;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;AC1T7B;AACA;AACA;AACA;AAC2C;AACA;AAC3C,2BAA2B,mDAAQ;AACnC;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,mDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwB;;;;;;;;;;;;;;;;;AChFxB;AACA;AACA;AACA;AACsD;AACG;AACzD;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,uDAAe;AAClC;AACA;AACA;AACA,mBAAmB,uDAAe;AAClC,0BAA0B,gDAAQ;AAClC,0BAA0B,gDAAQ;AAClC;AACA;AACA,oCAAoC,yDAAiB;AACrD;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;AC3BhC;AACA;AACA;AACA;AACsD;AACnB;AACA;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,gCAAgC,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,uBAAuB;AACtC,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,0CAA0C;AACzD,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,2CAA2C;AAC1D,WAAW,IAAI,iFAAiF;AAChG,WAAW,IAAI,8DAA8D;AAC7E,WAAW,IAAI,qEAAqE;AACpF,WAAW,IAAI,oEAAoE;AACnF,8BAA8B,wBAAwB;AACtD,8BAA8B,0CAA0C;AACxE,8BAA8B,oFAAoF;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,+DAAwB;AACpE,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,WAAW,0BAA0B,cAAc,IAAI,uBAAuB;AAC9E,WAAW,uCAAuC,cAAc,IAAI,uBAAuB;AAC3F,WAAW,uDAAuD,cAAc,IAAI,uBAAuB;AAC3G,WAAW,2CAA2C,cAAc,IAAI,uBAAuB;AAC/F,WAAW,0CAA0C,cAAc,IAAI,uBAAuB;AAC9F,WAAW,6CAA6C,cAAc,IAAI,uBAAuB;AACjG,WAAW,8DAA8D,cAAc,IAAI,uBAAuB;AAClH;AACA,cAAc,8DAA8D,cAAc;AAC1F,cAAc,0CAA0C;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,wEAAqB;AACY;;;;;;;;;;;;;;;;;;ACvJjC;AACA;AACA;AACA;AACsD;AACP;AACV;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,uDAAU;AAClC,iEAAiE,0DAAkB;AACnF;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,kEAAkE,2DAAmB;AACrF;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA,sEAAsE,+DAAuB;AAC7F;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;AC7KtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACnB;AACU;AACF;AACN;AACQ;AACI;AACZ;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D,2BAA2B,mDAAQ,GAAG,0BAA0B;AAChE,2BAA2B,mDAAQ,GAAG,wBAAwB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,QAAQ,yDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,kCAAkC;AAC5C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,mCAAmC;AAC7C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC;AACA;AACA;AACA,2BAA2B,cAAc;AACzC,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,oDAAoD;AAC9D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D,UAAU,kDAAkD;AAC5D;AACA;AACA,sBAAsB,6CAAK;AAC3B,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,wCAAwC;AAClD,UAAU,wCAAwC;AAClD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD,UAAU,2CAA2C;AACrD;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,0BAA0B,qDAAS;AACnC,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,oBAAoB,mDAAQ,GAAG,wBAAwB;AACvD,oBAAoB,mDAAQ,GAAG,0BAA0B;AACzD,oBAAoB,mDAAQ,GAAG,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;AC7OzB;AACA;AACA;AACA;AACA;AACsD;AACb;AACN;AACe;AAClD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wEAAwE,aAAa;AACrF,2EAA2E,iBAAiB;AAC5F;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,YAAY;AACxC,YAAY,8CAA8C;AAC1D;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E;AACA;AACA;AACA,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,yBAAyB,iBAAiB;AAClF,wCAAwC,0BAA0B,iBAAiB,OAAO,iDAAO;AACjG,2CAA2C,aAAa;AACxD,+BAA+B,iDAAO,CAAC,uEAAwB;AAC/D;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAgB;AAC5C,IAAI,sFAAmC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,YAAY,iDAAO,CAAC,uEAAwB;AAC5C,wBAAwB,aAAa;AACrC;AACA;AACA,qBAAqB,yBAAyB,iBAAiB;AAC/D,wBAAwB,aAAa;AACrC,YAAY,iDAAO,CAAC,iEAAkB;AACtC;AACA,yCAAyC,4BAA4B,iBAAiB;AACtF;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA,6BAA6B,uDAAgB;AAC7C;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,8CAA8C;AAC1D,6BAA6B,0BAA0B;AACvD;AACA,UAAU,iDAAiD;AAC3D,UAAU,+DAA+D;AACzE,UAAU,+DAA+D;AACzE,UAAU,kEAAkE;AAC5E;AACA;AACA,UAAU,kDAAkD;AAC5D,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,mEAAmE;AAC7E;AACA,6BAA6B,2BAA2B;AACxD;AACA,UAAU,gEAAgE;AAC1E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,iEAAiE;AAC3E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E,UAAU,gEAAgE;AAC1E;AACA,uBAAuB,wDAAwD;AAC/E,uBAAuB,6DAA6D;AACpF,uBAAuB,8DAA8D;AACrF,aAAa,2BAA2B;AACxC,aAAa,wBAAwB;AACrC;AACA,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,yBAAyB,iBAAiB,mBAAmB,aAAa;AACnH,yCAAyC,4BAA4B,iBAAiB;AACtF,yCAAyC,2BAA2B,iBAAiB;AACrF,yCAAyC,yBAAyB,iBAAiB;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;;;;;AChK7B;AACA;AACA;AACA;AACsD;AACD;AACR;AACR;AACa;AACL;AACF;AAC3C;AACA;AACA;AACA,YAAY,uDAAY;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC;AACA,sBAAsB,6CAAK;AAC3B,wBAAwB,8DAAe;AACvC;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACW;;;;;;;;;;;;;;;;;;;;;;;;;AC1DhC;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACF;AACY;AACR;AACM;AACN;AACQ;AACG;AAChD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE,YAAY,qDAAS,GAAG,iDAAiD;AACzE;AACA,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,6BAA6B,mDAAQ;AACrC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC,8BAA8B,mDAAQ;AACtC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,8CAA8C,eAAe;AAC7D,uDAAuD,eAAe;AACtE,uDAAuD,eAAe;AACtE,8CAA8C,eAAe;AAC7D,aAAa;AACb;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,YAAY,wBAAwB;AACpC;AACA;AACA,IAAI,mEAAuB;AAC3B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,iDAAiD,4CAA4C;AAC7F,uDAAuD,4CAA4C;AACnG,8CAA8C,8CAA8C;AAC5F,0DAA0D,8CAA8C;AACxG,uDAAuD,8CAA8C;AACrG,4CAA4C,4CAA4C;AACxF,iDAAiD,4CAA4C;AAC7F,mDAAmD,8CAA8C;AACjG,mDAAmD,gDAAgD;AACnG,oDAAoD,8CAA8C;AAClG,wDAAwD,4CAA4C;AACpG;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,sBAAsB,sDAAc,eAAe;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,+CAA+C;AACrF;AACA,iCAAiC,uDAAU;AAC3C;AACA;AACA,gBAAgB,wDAAkB,QAAQ,WAAW;AACrD;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAkB;AAC1B,0BAA0B,6CAAK;AAC/B;AACA;AACA,SAAS,UAAU,sDAAc;AACjC;AACA,8BAA8B,qDAAS;AACvC,0CAA0C,4DAAoB;AAC9D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC9UzB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAuD;AACpF,yCAAyC,uCAAuC;AAChF,yCAAyC,qCAAqC;AAC9E,8BAA8B,+FAA+F;AAC7H,yCAAyC,+DAA+D;AACxG,4BAA4B,eAAe;AAC3C,mCAAmC,eAAe;AAClD,+BAA+B,cAAc;AAC7C,qCAAqC,cAAc;AACnD,sCAAsC,cAAc;AACpD,4BAA4B,YAAY;AACxC;AACA;AACA,wBAAwB,sDAAsD;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,MAAM,KAAK,OAAO,KAAK,aAAa,KAAK,cAAc,KAAK,oBAAoB;AACxG;AACA,yBAAyB,oBAAoB;AAC7C;AACA,yBAAyB;AACzB,yBAAyB,EAAE;AAC3B;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wDAAwD;AACxD;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC7IvB;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA,iCAAiC,YAAY;AAC7C,kFAAkF,YAAY;AAC9F;AACA,iCAAiC,oBAAoB;AACrD,qEAAqE,YAAY;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACvE7B;AACA;AACA;AACA;AACA;AACA;AACsD;AACmD;AACzG;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,iDAAS;AACnC,QAAQ,mDAAW;AACnB;AACA;AACA;AACA;AACA;AACA,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,6BAA6B;AACvC,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C,UAAU,iCAAiC;AAC3C;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B,0BAA0B,6CAAK;AAC/B,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2EAAwB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,aAAa,8BAA8B;AAC3C,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,8BAA8B;AACpD,sBAAsB,0CAA0C;AAChE,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD,sBAAsB,iCAAiC;AACvD;AACA,aAAa,0CAA0C;AACvD;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,4DAA4D;AAClF,sBAAsB,kDAAkD;AACxE,sBAAsB,6DAA6D;AACnF,sBAAsB,mDAAmD;AACzE;AACA,IAAI,0DAAkB,gBAAgB,WAAW;AACjD;AACA,aAAa,0CAA0C;AACvD,aAAa,0CAA0C;AACvD,CAAC;AACD;AACA;AACA,gBAAgB,kDAAU;AAC1B;AACA,gBAAgB,uDAAe;AAC/B,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA,yBAAyB,kDAAkD;AAC3E,0CAA0C,YAAY;AACtD,wCAAwC,iBAAiB;AACzD,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH,sBAAsB,kDAAkD,6BAA6B,iBAAiB;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD;AAC3E,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH,sBAAsB,qDAAqD,+BAA+B,YAAY;AACtH;AACA,CAAC;AACD;AACA;AACA,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG,sBAAsB,kDAAkD,kBAAkB,+CAAO;AACjG;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG,4BAA4B,iDAAiD,kBAAkB,+CAAO;AACtG;AACA,CAAC;AACD,wEAAqB;AACM;;;;;;;;;;;;;;;;;ACjM3B;AACA;AACA;AACA;AACsD;AACiB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,0DAAkB;AACvD;AACA,gDAAgD,0DAAkB;AAClE;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC,sBAAsB,iDAAS,GAAG,SAAS,gEAAwB,QAAQ;AAC3E,IAAI,sEAA8B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;ACrEzB;AACA;AACA;AACA;AACA;AACsD;AACgF;AACtI;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,sBAAsB;AACtB;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,+DAAuB;AAC3B,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD,YAAY,iDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6FAA6F;AAC7F;AACA,+BAA+B,sBAAsB,EAAE,oBAAoB;AAC3E;AACA,4BAA4B,gEAAwB;AACpD;AACA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA,0FAA0F,eAAe,gBAAgB;AACzH,uCAAuC,cAAc,qBAAqB,EAAE,qBAAqB,IAAI,SAAS;AAC9G;AACA,yCAAyC,sBAAsB,cAAc,YAAY,IAAI,YAAY;AACzG;AACA;AACA;AACA,yBAAyB,gDAAQ;AACjC;AACA;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iEAAiE;AACrF;AACA,wBAAwB,+CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,wDAAY;AACpB;AACA;AACA,sBAAsB,oDAAY,uCAAuC,kBAAkB;AAC3F;AACA,sBAAsB,qDAAa;AACnC;AACA;AACA,sBAAsB,kDAAU;AAChC;AACA,yBAAyB,gDAAQ;AACjC;AACA,kBAAkB,6CAAK;AACvB;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;;AC5JzB;AACA;AACA;AACA;AACsD;AACnB;AACF;AACE;AACU;AACR;AACQ;AACN;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,oDAAoD;AAC5E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E,YAAY,qDAAS,GAAG,kDAAkD;AAC1E;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,iCAAiC,qDAAS;AAC1C;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,+DAA+D;AAC9E,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,gEAAgE;AAC/E,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE;AACA,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,sCAAsC,4DAAmB;AACvF,wBAAwB,+CAAM,uCAAuC,4DAAmB;AACxF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,sCAAsC,+DAAsB;AAC1F,wBAAwB,+CAAM,uCAAuC,+DAAsB;AAC3F,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,oBAAoB;AAChC;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,iDAAiD;AAChE,eAAe,kDAAkD;AACjE,eAAe,kDAAkD;AACjE,eAAe,mDAAmD;AAClE,eAAe,mDAAmD;AAClE;AACA,qBAAqB,2CAAI;AACzB,uBAAuB,+CAAM,uCAAuC,4DAAmB;AACvF,aAAa,oBAAoB;AACjC,IAAI,mEAAuB,0BAA0B,mBAAmB;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4CAA4C,qDAAS;AACrD;AACA,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD,sBAAsB,4CAA4C;AAClE,sBAAsB,+BAA+B;AACrD;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE;AACA,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,uBAAuB,6CAAK,CAAC,mDAAY;AACzC,aAAa,oBAAoB;AACjC,QAAQ,qDAAS,yEAAyE,mBAAmB;AAC7G,wBAAwB,2CAAI;AAC5B,wBAAwB,2CAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;ACzTtB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACR;AACa;AACL;AAC7C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,mDAAmD;AACzD,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D,MAAM,oDAAoD;AAC1D;AACA;;AAEA,kBAAkB,kBAAkB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA,2BAA2B,qDAAS,GAAG,mDAAmD;AAC1F;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,mDAAmD;AAC3E,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS,GAAG,mDAAmD;AAC3E;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,iCAAiC,uDAAU,uBAAuB,yEAAsB;AACxF;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,iEAAkB;AAC9C,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT,YAAY,qDAAS;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA,uCAAuC,uDAAU,wBAAwB,yEAAsB;AAC/F;AACA,sBAAsB,2CAAI;AAC1B;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1avB;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACZ;AACA;AACU;AACM;AACR;AACN;AACsB;AACd;AACO;AACN;AACM;AACC;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,kFAAkF,cAAc;AAChG;AACA;AACA,0EAA0E,WAAW;AACrF,gFAAgF,aAAa;AAC7F,gFAAgF,aAAa;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK;AAC3B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,sBAAsB,8DAAa;AACnC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,2DAAY;AACjC,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,iEAAkB;AAC/C,qBAAqB,sDAAO,CAAC,+DAAgB;AAC7C,wBAAwB;AACxB,wBAAwB;AACxB,qBAAqB;AACrB,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK,gBAAgB,iBAAiB;AAC1D;AACA;AACA,gBAAgB,6CAAK,iBAAiB,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,iEAAkB;AAC9C;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B;AACA,4BAA4B,8DAAe;AAC3C;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD,uCAAuC,uDAAU;AACjD;AACA,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,0BAA0B,6CAAK;AAC/B;AACA,2BAA2B,qDAAS,GAAG,+BAA+B;AACtE;AACA,IAAI,mEAAuB;AAC3B;AACA,0BAA0B,6CAAK;AAC/B,4BAA4B,uEAAwB;AACpD,4BAA4B,qEAAsB;AAClD;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD,YAAY,qDAAS,GAAG,4CAA4C;AACpE;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,8BAA8B;AAC9D,oBAAoB,qDAAS,GAAG,+BAA+B;AAC/D,oBAAoB,qDAAS,GAAG,4CAA4C;AAC5E;AACA,YAAY,mEAAuB;AACnC;AACA,2CAA2C,SAAS,uEAAwB,+BAA+B,IAAI,mCAAmC;AAClJ;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,kCAAkC;AAC/G;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,qCAAqC;AAClH;AACA;AACA;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,mDAAmD;AAChI;AACA,sCAAsC,SAAS,uEAAwB,EAAE,IAAI,iEAAiE;AAC9I;AACA;AACA;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,iEAAkB;AAC3C;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C;AACA;AACA;AACA,yBAAyB,sEAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,0EAAuB;AACjD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,6EAA0B;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,6DAAe;AACpC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,qEAAsB;AAC5C,qBAAqB,2DAAa;AAClC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,iEAAmB;AACxC,sBAAsB,iEAAkB;AACxC;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,iEAAkB;AACxC,0BAA0B,6EAA0B;AACpD;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,8DAAe;AACrC,0BAA0B,4EAAyB;AACnD;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,qBAAqB,iEAAmB;AACxC;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE;AACA,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,sBAAsB,uEAAwB;AAC9C,0BAA0B,qEAAkB;AAC5C,qBAAqB,6DAAe;AACpC;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB,qBAAqB,2DAAa;AAClC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,sBAAsB,iEAAkB;AACxC,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA,oBAAoB,6CAAK;AACzB;AACA,0BAA0B,qEAAkB;AAC5C;AACA;AACA;AACA,0BAA0B,qDAAS,GAAG,8BAA8B;AACpE,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAK;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D,gBAAgB,qDAAS,GAAG,8BAA8B;AAC1D;AACA,QAAQ,mEAAuB;AAC/B;AACA;AACA,6BAA6B,iCAAiC;AAC9D,6BAA6B,iCAAiC;AAC9D,6BAA6B,kCAAkC;AAC/D,6BAA6B,yBAAyB;AACtD,6BAA6B,2BAA2B;AACxD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,wBAAwB;AACrD,6BAA6B,0BAA0B;AACvD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C,+BAA+B,gBAAgB;AAC/C,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA,8BAA8B,gBAAgB,IAAI,IAAI,gBAAgB,IAAI,eAAe,IAAI,gBAAgB;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB;AAClD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD,gCAAgC,kEAAuB;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,gCAAgC,kEAAuB,IAAI,cAAc;AACzE,8BAA8B,kEAAuB,IAAI,aAAa;AACtE,qCAAqC,kEAAuB,IAAI,6BAA6B,kEAAsB,EAAE;AACrH,sCAAsC,kEAAuB,IAAI,4BAA4B,mEAAuB,EAAE;AACtH;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,2BAA2B;AACvD,4BAA4B,iEAAsB,IAAI,cAAc;AACpE,8BAA8B,iEAAsB,IAAI,aAAa;AACrE;AACA;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;ACtnBtB;AACA;AACA;AACA;AACA;AACsD;AACnB;AACQ;AACN;AACa;AACK;AACvD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAAyB;AAClD,IAAI,gEAAyB;AAC7B;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,sBAAsB,2EAA0B;AAChD;AACA;AACA;AACA;AACA,IAAI,gEAAyB;AAC7B;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,gFAA+B;AACtD;AACA,2BAA2B,+DAAc;AACzC,uBAAuB,iFAAgC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,2EAA0B;AAChD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,0EAAyB;AAC/C;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,0BAA0B,+DAAc;AACxC,qBAAqB,+DAAc;AACnC,sBAAsB,4EAA2B;AACjD;AACA,iBAAiB,2EAA0B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,qBAAqB,+DAAc;AACnC,iBAAiB,qFAAoC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,qBAAqB,+DAAc;AACnC,iBAAiB,sFAAqC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA,yBAAyB,iEAAkB;AAC3C,yBAAyB,iEAAkB;AAC3C,qBAAqB,+DAAc;AACnC,iBAAiB,gFAA+B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qEAAsB;AAC/C,yBAAyB,qEAAsB;AAC/C,yBAAyB,8DAAe;AACxC,yBAAyB,8DAAe;AACxC,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,yBAAyB,uEAAwB;AACjD,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC,2BAA2B,+DAAc;AACzC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,qFAAoC;AAC3D,uBAAuB,sFAAqC;AAC5D,uBAAuB,gFAA+B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,6BAA6B,iEAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+DAAc;AAC1C,4BAA4B,+DAAc;AAC1C,6BAA6B,+DAAc;AAC3C,0BAA0B,+DAAc;AACxC,2BAA2B,+DAAc;AACzC,wBAAwB,2EAA0B;AAClD,wBAAwB,2EAA0B;AAClD,yBAAyB,4EAA2B;AACpD,uBAAuB,0EAAyB;AAChD;AACA;AACA,oCAAoC,cAAc;AAClD,qCAAqC,aAAa;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACU;;;;;;;;;;;;;;;;;ACtZ/B;AACA;AACA;AACA;AACA;AACA;AACsD;AACH;AACnD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2DAAY,GAAG,uBAAuB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,6BAA6B,+DAA+D;AAC5F,kDAAkD,WAAW;AAC7D,kDAAkD,WAAW;AAC7D,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF,gCAAgC,iDAAiD;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,wEAAqB;AACQ;;;;;;;;;;;;;;;;;;AC3G7B;AACA;AACA;AACA;AACsD;AACrB;AACa;AAC9C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,8CAA8C;AACpE,sBAAsB,8CAA8C;AACpE,sBAAsB,4DAA4D;AAClF,sBAAsB,4DAA4D;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ,iDAAU,mBAAmB,uDAAgB,EAAE;AAC3E;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,sBAAsB,0EAA0E;AAChG,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD,sBAAsB,8CAA8C,6BAA6B,WAAW;AAC5G,sBAAsB,0EAA0E;AAChG,sBAAsB,4DAA4D;AAClF;AACA,yBAAyB,4DAA4D;AACrF,wCAAwC,WAAW;AACnD;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,cAAc;AACjC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa;AAChC,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;AC7H1B;AACA;AACA;AACA;AACsD;AACjB;AACa;AACW;AAC7D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA,wBAAwB,uEAAwB;AAChD;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA,gBAAgB,yEAAyB;AACzC;AACA;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wBAAwB,iEAAkB;AAC1C;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvD9B;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AAC2B;AACvB;AAChB;AACF;AACE;AACU;AACF;AACY;AACZ;AACc;AACpB;AACQ;AACV;AACgB;AACX;AACS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC,oDAAoD,gDAAgD;AACpG,qEAAqE,gDAAgD;AACrH,kDAAkD,+CAA+C;AACjG,mDAAmD,gDAAgD;AACnG,kDAAkD,+CAA+C;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0EAAuB;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,kCAAkC,sDAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,kEAAe;AACrD;AACA,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,uDAAuD;AAC5F;AACA;AACA,KAAK;AACL,qBAAqB,sDAAS,GAAG,kDAAkD;AACnF,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E,qBAAqB,sDAAS,GAAG,gDAAgD;AACjF;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA;AACA,yBAAyB,iBAAiB;AAC1C,yBAAyB,eAAe;AACxC,2BAA2B,eAAe;AAC1C,+BAA+B,wBAAwB;AACvD,uCAAuC,wBAAwB;AAC/D,sCAAsC,wBAAwB;AAC9D,+BAA+B,mCAAmC;AAClE,sCAAsC,mCAAmC;AACzE,sCAAsC,mCAAmC;AACzE,2CAA2C,mCAAmC;AAC9E,kDAAkD,mCAAmC;AACrF,kDAAkD,mCAAmC;AACrF,oCAAoC,mCAAmC;AACvE,2CAA2C,mCAAmC;AAC9E,2CAA2C,mCAAmC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sDAAS;AAClC;AACA;AACA,KAAK;AACL,qBAAqB,sDAAS,GAAG,kDAAkD;AACnF,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E,qBAAqB,sDAAS,GAAG,gDAAgD;AACjF;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,mCAAmC,+CAAO;AAC1C;AACA;AACA;AACA,gCAAgC,iDAAS;AACzC,gCAAgC,+CAAO;AACvC,kBAAkB,iDAAS;AAC3B,gCAAgC,iDAAS;AACzC,kBAAkB,iDAAS;AAC3B;AACA;AACA;AACA;AACA,yBAAyB,sDAAS,GAAG,4CAA4C;AACjF,2GAA2G,+CAAO;AAClH,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAO;AAC7B,qBAAqB,iDAAS;AAC9B;AACA;AACA,sBAAsB,iDAAS;AAC/B,qBAAqB,+CAAO;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sDAAS,GAAG,4CAA4C;AAC/E;AACA;AACA,uBAAuB,sDAAS,GAAG,kEAAkE;AACrG;AACA;AACA;AACA,0BAA0B,8CAAK,gBAAgB,8BAA8B;AAC7E;AACA;AACA,iDAAiD,2BAA2B;AAC5E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,6CAA6C,+CAAO,iBAAiB;AACtG;AACA,0BAA0B,iDAAS;AACnC;AACA,0BAA0B,+CAAO;AACjC;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,4CAA4C;AAC7E,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,4CAA4C;AACtD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8BAA8B;AACxC;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,0DAA0D;AACpE,UAAU,2DAA2D;AACrE,UAAU,2DAA2D;AACrE,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,0EAA0E,iDAAS,EAAE;AAC/F,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,2EAA2E,iDAAS,EAAE;AAChG,UAAU,iCAAiC;AAC3C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,gCAAgC;AAC1C,UAAU,8BAA8B;AACxC;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,4DAA4D;AACtE,UAAU,0DAA0D;AACpE,UAAU,4CAA4C;AACtD,UAAU,mDAAmD;AAC7D,UAAU,wEAAwE;AAClF,UAAU,kEAAkE;AAC5E,UAAU,6CAA6C;AACvD,UAAU,oDAAoD;AAC9D,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,4DAA4D,iDAAS,EAAE;AACjF,UAAU,mEAAmE,iDAAS,EAAE;AACxF,UAAU,kFAAkF,iDAAS,EAAE;AACvG,UAAU,yFAAyF,iDAAS,EAAE;AAC9G;AACA;AACA;AACA,4BAA4B,iDAAS;AACrC,SAAS;AACT;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,+CAA+C;AACzD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,6CAA6C;AACvD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,8CAA8C;AACxD,UAAU,+CAA+C;AACzD,UAAU,+DAA+D,iDAAS,EAAE;AACpF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,6DAA6D,iDAAS,EAAE;AAClF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,8DAA8D,iDAAS,EAAE;AACnF,UAAU,+DAA+D,iDAAS,EAAE;AACpF;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,gDAAgD,iDAAS,EAAE;AACrE,UAAU,iDAAiD,iDAAS,EAAE;AACtE,UAAU,iDAAiD,+CAAO,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,gDAAgD,+CAAO,EAAE;AACnE,UAAU,iDAAiD,+CAAO,EAAE;AACpE;AACA,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,iDAAS,EAAE;AACpE,UAAU,+CAA+C,+CAAO,EAAE;AAClE,UAAU,+CAA+C,+CAAO,EAAE;AAClE;AACA,kDAAkD,sDAAS;AAC3D,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,0BAA0B,uDAAuD;AACjF,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,oBAAoB,4EAA4E;AAChG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,mBAAmB,sDAAS,GAAG,4CAA4C;AAC3E,YAAY,0DAAW;AACvB;AACA;AACA;AACA;AACA,gBAAgB,uBAAuB;AACvC,mBAAmB,sDAAS,GAAG,sCAAsC;AACrE,YAAY,0DAAW;AACvB;AACA;AACA;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,qBAAqB,sDAAS,GAAG,6CAA6C;AAC9E;AACA,yBAAyB,uDAAU;AACnC,wBAAwB,4EAA4E;AACpG,QAAQ,0DAAW;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B,qBAAqB,sCAAsC;AAC3D;AACA;AACA;AACA;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,8CAA8C,iDAAS,EAAE;AACnE;AACA,UAAU,8CAA8C,+CAAO,EAAE;AACjE,UAAU,8CAA8C,+CAAO,EAAE;AACjE;AACA,UAAU,8CAA8C,iDAAS,EAAE;AACnE,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,UAAU,qDAAqD,iDAAS,EAAE;AAC1E;AACA,+CAA+C,sDAAS;AACxD,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,sBAAsB,2CAAI;AAC1B,gCAAgC;AAChC,qBAAqB,wCAAwC;AAC7D,mCAAmC,qBAAqB;AACxD,iCAAiC,sBAAsB;AACvD,iCAAiC,uBAAuB;AACxD,mCAAmC,4BAA4B;AAC/D,6BAA6B,4CAA4C;AACzE,qBAAqB,oCAAoC;AACzD,uCAAuC,gEAAgE;AACvG,iCAAiC,4CAA4C;AAC7E,IAAI,mEAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,UAAU,WAAW;AAC3C,IAAI,wDAAkB,0BAA0B,WAAW;AAC3D;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E,oBAAoB,8CAA8C,+CAAO,EAAE;AAC3E,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,+BAA+B;AACnD,oBAAoB,+CAA+C,+CAAO,EAAE;AAC5E,oBAAoB,gDAAgD,+CAAO,EAAE;AAC7E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,IAAI,wDAAkB,mCAAmC,WAAW;AACpE,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAK;AAC3B;AACA,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E,oBAAoB,8CAA8C,iDAAS,EAAE;AAC7E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,+CAA+C,iDAAS,EAAE;AAC9E,oBAAoB,gDAAgD,iDAAS,EAAE;AAC/E;AACA,IAAI,wDAAkB,eAAe,WAAW;AAChD,qBAAqB,2CAAI;AACzB;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA;AACA,iCAAiC,iCAAiC;AAClE;AACA;AACA;AACA,uEAAuE,YAAY;AACnF;AACA;AACA,SAAS;AACT;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT,6BAA6B,kCAAkC;AAC/D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,2EAAwB;AACvC;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA;AACA;AACA;AACA,mEAAmE,YAAY;AAC/E;AACA;AACA,KAAK;AACL;AACA;AACA,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA,KAAK;AACL,gCAAgC,4BAA4B;AAC5D;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD,+BAA+B,mDAAmD;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,2DAAY;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,qBAAqB,mDAAmD;AACxE,yBAAyB,uDAAU,gDAAgD,0EAA6B;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,mBAAmB,+DAAc;AACjC;AACA;AACA,qBAAqB,gEAAgE;AACrF,yBAAyB,uDAAU;AACnC,0BAA0B,iDAAM;AAChC,yBAAyB,uDAAU;AACnC,oCAAoC,kEAAsB;AAC1D,oCAAoC,kEAAsB;AAC1D,oCAAoC,mEAAuB;AAC3D,yBAAyB,4DAAY,kBAAkB,mEAAuB;AAC9E,IAAI,wDAAkB,WAAW,WAAW;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,gCAAgC,mDAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA,yCAAyC,WAAW;AACpD,aAAa,eAAe;AAC5B,6BAA6B,aAAa;AAC1C,6BAA6B,aAAa;AAC1C;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;ACp8B1B;AACA;AACA;AACA;AACsD;AACnB;AACnC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,cAAc;AACzE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,0DAA0D,cAAc;AACxE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,2DAA2D,YAAY;AACvE;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,+DAA+D,cAAc;AAC7E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,iEAAiE,cAAc;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;AACD,qEAAqE,cAAc;AACnF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,gDAAS,EAAE;AACzC,KAAK;AACL,CAAC;AACD,mEAAmE,cAAc;AACjF;AACA;AACA;AACA;AACA;AACA,mBAAmB,WAAW,8CAAO,EAAE;AACvC,KAAK;AACL,CAAC;AACD,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;ACnHzB;AACA;AACA;AACA;AACsD;AACjB;AACM;AACN;AACa;AACV;AACxC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,6EAA6E,mBAAmB;AAChG;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,4FAA4F,cAAc;AAC1G;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA,wBAAwB,oEAAyB;AACjD;AACA,sCAAsC,+BAA+B;AACrE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,iEAAkB;AACzC,qFAAqF,YAAY;AACjG;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,oCAAoC,WAAW;AAC/C,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C;AACA,wBAAwB,gCAAgC;AACxD;AACA;AACA;AACA,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,4CAA4C,aAAa;AACzD;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,iEAAkB;AAC3E,qFAAqF,cAAc;AACnG;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,8DAAe;AACtC;AACA;AACA,KAAK;AACL;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE;AACA,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE;AACA,mCAAmC,gCAAgC;AACnE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,mCAAmC,gCAAgC;AACnE,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,gCAAgC;AACtE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,gDAAM;AAChC,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE;AACA,0BAA0B,gDAAM;AAChC,sCAAsC,+BAA+B;AACrE,sCAAsC,gCAAgC;AACtE,qEAAqE,cAAc;AACnF;AACA,mCAAmC,+BAA+B;AAClE,sCAAsC,gCAAgC;AACtE,yCAAyC,WAAW;AACpD,wCAAwC,+BAA+B;AACvE;AACA,2CAA2C,+BAA+B;AAC1E;AACA;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,2BAA2B;AAC3B,sBAAsB,sDAAc,uBAAuB;AAC3D;AACA,sBAAsB,oFAAoF;AAC1G,sBAAsB,oFAAoF;AAC1G,sBAAsB,qFAAqF;AAC3G,sBAAsB,qFAAqF;AAC3G;AACA;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,sCAAsC,+BAA+B;AACrE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C,mCAAmC,gCAAgC;AACnE,sCAAsC,gCAAgC;AACtE,oCAAoC,WAAW;AAC/C,mCAAmC,+BAA+B;AAClE,oCAAoC,WAAW;AAC/C;AACA,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA;AACA;AACA,qCAAqC,4DAAoB;AACzD;AACA;AACA;AACA,iBAAiB,0CAA0C;AAC3D;AACA,uBAAuB,iEAAkB;AACzC;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACQ;;;;;;;;;;;;;;;;;ACnR7B;AACA;AACA;AACA;AACsD;AACK;AAC3D;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,2DAAmB;AAC5E,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,2DAAmB;AAC1C,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD,oCAAoC,YAAY;AAChD;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,oBAAoB,gBAAgB,2DAAmB;AACpF,2FAA2F,YAAY;AACvG;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC;AACA;AACA,8CAA8C,gCAAgC;AAC9E;AACA,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C;AACA,+BAA+B,8CAAM;AACrC,6BAA6B,2BAA2B,sCAAsC;AAC9F,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM;AACrC;AACA,0BAA0B,8CAAM;AAChC,oCAAoC,WAAW;AAC/C,oCAAoC,WAAW;AAC/C,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM;AACrC,qEAAqE,cAAc;AACnF,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,qFAAqF,YAAY;AACjG,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,+BAA+B,8CAAM,MAAM,mBAAmB;AAC9D,+BAA+B,8CAAM;AACrC,qDAAqD,cAAc;AACnE,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC,kCAAkC,8CAAM,MAAM,mBAAmB;AACjE,kCAAkC,8CAAM;AACxC;AACA,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE,oBAAoB,cAAc,iBAAiB,kBAAkB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,YAAY;;AAE1C;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,8BAA8B,kDAAkD;;AAEhF;AACA;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B,UAAU,iBAAiB;AAC3B;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,yDAAyD;AAC/E,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,sBAAsB,sEAAsE;AAC5F;AACA,yBAAyB,oFAAoF;AAC7G,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,oBAAoB,qCAAqC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,8BAA8B,8CAAM;AACpC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC,iCAAiC,8CAAM;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,6DAAqB;AACvC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtXxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACP;AACI;AAChB;AACU;AACM;AACA;AACR;AACkB;AACrB;AACC;AACE;AACU;AACrD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,yEAAyE,kCAAkC;AAC3G;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,uBAAuB,2DAAY;AACnC;AACA;AACA;AACA,uCAAuC,2EAA2B,EAAE,uEAAsB;AAC1F;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,iDAAiD;AACvE,sBAAsB,iDAAiD;AACvE;AACA,yBAAyB,6BAA6B;AACtD;AACA,sBAAsB,gBAAgB,kBAAkB,uDAAU;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,2DAAY;AACvC,2BAA2B,mDAAQ;AACnC,2BAA2B,uDAAU;AACrC,2BAA2B,2DAAY,eAAe,WAAW,iBAAiB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,oDAAQ;AAC9B;AACA;AACA,wCAAwC,kDAAO;AAC/C;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,uDAAU;AACrC;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,2CAAI;AACjC,8BAA8B,gDAAM,MAAM,mBAAmB;AAC7D;AACA,IAAI,mEAAuB;AAC3B;AACA;AACA,wEAAqB;AACC;;;;;;;;;;;;;;;;;;;;;;;;;ACtHtB;AACA;AACA;AACA;AACsD;AACrB;AACE;AACY;AACF;AACR;AACI;AACE;AACM;AACD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,sDAAe;AACrC,mBAAmB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC9E;AACA,eAAe,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC1E;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,qBAAqB,iDAAO;AAC5B;AACA,cAAc,iBAAiB;AAC/B,cAAc,iBAAiB;AAC/B;AACA;AACA,KAAK;AACL,4BAA4B,yDAAW;AACvC;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA,UAAU,cAAc,iBAAiB,kBAAkB;AAC3D;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,mBAAmB;AACrC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,4BAA4B,iDAAO;AACnC,gCAAgC,yDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA,KAAK;AACL,gBAAgB,sDAAe,MAAM,sDAAe;AACpD,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ,gBAAgB,cAAc;AAC5D;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,4BAA4B,iDAAO;AACnC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA,SAAS;AACT;AACA,4CAA4C,iDAAO;AACnD,IAAI,wDAAkB;AACtB,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,sDAAc;AAChE;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;;;;;;AC9dxB;AACA;AACA;AACA;AACsD;AACnB;AACU;AACJ;AACE;AACA;AACN;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,mDAAQ;AAC5B;AACA;AACA;AACA;AACA,KAAK,EAAE,4DAAiB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iEAAsB;AAC7C;AACA;AACA;AACA,uBAAuB,mEAAwB;AAC/C;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AChJzB;AACA;AACA;AACA;AACsD;AACX;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,mDAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;;;;;;;AC1BzB;AACA;AACA;AACA;AACsD;AACP;AACZ;AACU;AACJ;AACE;AACJ;AACF;AACrC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,oCAAoC,iDAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,yEAAsB;AACnD,sBAAsB,mDAAQ;AAC9B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA,QAAQ,qDAAS;AACjB;AACA,oBAAoB,+CAAM;AAC1B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E,4BAA4B,cAAc,iBAAiB,kBAAkB;AAC7E;AACA;AACA;AACA;AACA;AACA,uBAAuB,8DAAqB;AAC5C;AACA;AACA;AACA,uBAAuB,6DAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE,kBAAkB,cAAc,kBAAkB,kBAAkB;AACpE;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,kBAAkB;AACpC;AACA;AACA,SAAS;AACT;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B,4BAA4B,cAAc,kBAAkB,kBAAkB,kBAAkB,uDAAU;AAC1G,4BAA4B,cAAc,kBAAkB,kBAAkB;AAC9E;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE,kBAAkB,cAAc,iBAAiB,kBAAkB;AACnE;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC,QAAQ,qDAAS;AACjB;AACA,IAAI,8DAAqB;AACzB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,IAAI,6DAAoB;AACxB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;AC9LvB;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,wDAAwD,YAAY;AACpE,uCAAuC,aAAa;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAA8D;AACtF,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;ACxG5B;AACA;AACA;AACA;AACsD;AACI;AACL;AACrD;AACA;AACA;AACA;AACA,oBAAoB,4EAAyB;AAC7C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,+BAA+B,6EAA6B;AAC5D;AACA;AACA;AACA;AACA,kCAAkC,qEAAqB;AACvD;AACA,uCAAuC,oEAAoB,GAAG,yCAAyC;AACvG;AACA;AACA,mCAAmC,oEAAoB,GAAG,uDAAuD;AACjH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,sDAAe;AACnC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iDAAU;AAC9B;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA,oBAAoB,sDAAe;AACnC;AACA,oBAAoB,wDAAiB;AACrC,mBAAmB,uDAAgB;AACnC,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,8BAA8B,oEAAoB;AAClD;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;;;;;AC/I9B;AACA;AACA;AACA;AACsD;AACT;AACV;AACA;AACA;AACE;AACM;AAC3C;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,6CAA6C,mBAAmB,wEAA6B;AAClH,qBAAqB,oCAAoC;AACzD,qBAAqB,8BAA8B,mBAAmB,uEAA4B;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,kDAAkD;AACxE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,mDAAmD;AACzE,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,0DAA0D;AAChF,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,yDAAyD;AAC/E,sBAAsB,wDAAwD;AAC9E;AACA;AACA,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,2BAA2B,mBAAmB,wEAA6B;AAChG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B,mBAAmB,uEAA4B;AAC/F,qBAAqB,0BAA0B,mBAAmB,uEAA4B;AAC9F;AACA;AACA,4CAA4C,uDAAgB;AAC5D;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,+DAA+D;AACrF;AACA,yBAAyB,+DAA+D;AACxF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD;AACA;AACA,qBAAqB,MAAM,wDAAiB,0CAA0C;AACtF,qBAAqB,YAAY,yDAAkB,8CAA8C;AACjG,qBAAqB,6DAA6D;AAClF,qBAAqB,wBAAwB,4DAAqB,sCAAsC;AACxG,qBAAqB,0BAA0B,mEAA4B,uBAAuB;AAClG,qBAAqB,4CAA4C;AACjE;AACA,+BAA+B,wDAAiB;AAChD;AACA;AACA;AACA,2BAA2B,QAAQ,iDAAU,YAAY;AACzD;AACA,kCAAkC,sEAA2B;AAC7D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B,mBAAmB,wEAA6B;AACpG,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,2BAA2B;AAChD,qBAAqB,wCAAwC;AAC7D,qBAAqB,wCAAwC;AAC7D,qBAAqB,+BAA+B;AACpD,qBAAqB,8BAA8B;AACnD;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA;AACA,yBAAyB,gEAAgE;AACzF,wCAAwC,WAAW;AACnD,wCAAwC,WAAW;AACnD,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF,sBAAsB,gEAAgE;AACtF;AACA;AACA,qBAAqB,+BAA+B;AACpD,qBAAqB,wCAAwC;AAC7D,qBAAqB,oCAAoC;AACzD,qBAAqB,qCAAqC;AAC1D,qBAAqB,wCAAwC;AAC7D,qBAAqB,0CAA0C;AAC/D,qBAAqB,gCAAgC;AACrD,qBAAqB,8BAA8B;AACnD,qBAAqB,0CAA0C,mBAAmB,wEAA6B;AAC/G;AACA,4DAA4D,wEAA6B;AACzF;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,OAAO;AACnC;AACA;AACA,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,gBAAgB;AACxC,qBAAqB,4BAA4B;AACjD,YAAY,qDAAS,GAAG,eAAe;AACvC,YAAY,qDAAS,GAAG,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,yBAAyB,4BAA4B;AACrD,yBAAyB,2BAA2B;AACpD,yBAAyB,4BAA4B;AACrD,SAAS,aAAa;AACtB;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA,4BAA4B,sBAAsB,4DAAoB,EAAE;AACxE;AACA;AACA;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC/NzB;AACA;AACA;AACA;AAC8D;AAC3B;AACnC;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,YAAY,4DAAqB;AACjC,iBAAiB,yDAAM;AACvB;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,YAAY,2EAA2E,cAAc,0BAA0B,cAAc;AACvM,0DAA0D,+BAA+B;AACzF;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,wFAAwF,YAAY,wFAAwF,cAAc,gCAAgC,cAAc;AACxP;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,gCAAgC;AACnE;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,CAAC;AACD;AACA;AACA;AACA,0EAA0E,YAAY,0CAA0C,cAAc,0BAA0B,cAAc;AACtL;AACA;AACA,mCAAmC,+BAA+B;AAClE,mCAAmC,+BAA+B;AAClE,0DAA0D,+BAA+B;AACzF,0DAA0D,+BAA+B;AACzF,CAAC;AACD;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA;AACA,iGAAiG,YAAY;AAC7G;AACA;AACA,aAAa;AACb,0BAA0B,2DAA2D;AACrF;AACA;AACA,6BAA6B,4DAAqB,uBAAuB,4DAAqB;AAC9F,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,kFAAkF,YAAY,KAAK,aAAa;AAChH,oFAAoF,cAAc,KAAK,aAAa;AACpH,kFAAkF,cAAc,KAAK,aAAa;AAClH;AACA,6BAA6B,2DAA2D;AACxF,6BAA6B,iDAAiD;AAC9E,iBAAiB,aAAa;AAC9B;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA;AACA,gCAAgC,2BAA2B;AAC3D;AACA,oFAAoF,aAAa;AACjG,sFAAsF,aAAa;AACnG,oFAAoF,aAAa;AACjG,sCAAsC,2DAA2D,MAAM,aAAa;AACpH;AACA,wEAAwE,aAAa;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACtJ5B;AACA;AACA;AACA;AACsD;AACnB;AACc;AACV;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA,sBAAsB,sDAAe;AACrC;AACA,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB,YAAY,gDAAY;AACxB;AACA,mBAAmB,yDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACO;;;;;;;;;;;;;;;;;;;ACvC5B;AACA;AACA;AACA;AACsD;AACjB;AACkB;AACF;AACrD;AACA;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,6DAAa;AACrC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,kBAAkB;AACtE,oFAAoF,SAAS;AAC7F,uBAAuB,6CAAK;AAC5B;AACA;AACA;AACA;AACA;AACA,uBAAuB,6CAAK;AAC5B,uBAAuB,6CAAK;AAC5B,IAAI,gEAAwB;AAC5B,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB,QAAQ,+DAAc;AACtB;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,YAAY;AACxC;AACA,sBAAsB,8CAA8C;AACpE,wBAAwB,aAAa;AACrC,sBAAsB,4CAA4C;AAClE,sBAAsB,6CAA6C;AACnE,wBAAwB,WAAW;AACnC,sBAAsB,0DAA0D;AAChF,wBAAwB,aAAa;AACrC,sBAAsB,8CAA8C;AACpE;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACS;;;;;;;;;;;;;;;;;;ACnJ9B;AACA;AACA;AACA;AACsD;AACR;AACL;AACzC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC,8BAA8B,iDAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC;AACA;AACA,6BAA6B,YAAY,gBAAgB,kEAAmB;AAC5E,qDAAqD,YAAY;AACjE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oEAAoE;AACrF,uBAAuB,kEAAmB;AAC1C,qDAAqD,cAAc;AACnE,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA,yBAAyB,iDAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;;AClFxB;AACA;AACA;AACA;AACsD;AACf;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,+CAAM;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;ACtEvB;AACA;AACA;AACA;AACsD;AACrB;AACY;AACV;AACI;AACvC;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,8CAAO;AAC1C,qCAAqC,gDAAS;AAC9C;AACA;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,eAAe,0BAA0B;AACzC,eAAe,0BAA0B;AACzC;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,0BAA0B;AACvC,aAAa,2BAA2B;AACxC,eAAe,0BAA0B;AACzC,eAAe,2BAA2B;AAC1C;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,0BAA0B;AACtD;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA;AACA,mBAAmB,UAAU,+DAAsB,EAAE;AACrD,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,sBAAsB,+DAAsB;AAC5C;AACA,SAAS;AACT,KAAK;AACL;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,aAAa,2BAA2B;AACxC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,gCAAgC;AAC1C,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA,IAAI,wDAAkB,gBAAgB,WAAW;AACjD,sBAAsB,eAAe,IAAI,eAAe,IAAI,eAAe,IAAI,eAAe;AAC9F;AACA;AACA;AACA,aAAa,2BAA2B;AACxC,aAAa,2BAA2B;AACxC,aAAa,6BAA6B;AAC1C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,kCAAkC;AAC5C,UAAU,kCAAkC;AAC5C,UAAU,mCAAmC;AAC7C,UAAU,mCAAmC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,+BAA+B;AACzC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA,cAAc,2EAAwB;AACtC,4BAA4B,cAAc;AAC1C;AACA;AACA,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC,UAAU,8BAA8B;AACxC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,iBAAiB,QAAQ,+BAA+B;AACxD;AACA;AACA,QAAQ,qDAAS;AACjB;AACA;AACA;AACA,wEAAqB;AACE;;;;;;;;;;;;;;;;;;;;;ACrdvB;AACA;AACA;AACA;AACA;AACA;AACA;AACsD;AACD;AACR;AACQ;AACZ;AACuE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kBAAkB,qDAAS,GAAG,8BAA8B;AAC5D,OAAO,2DAAW;AAClB,OAAO,0DAAU;AACjB,UAAU,yDAAS;AACnB,kBAAkB,iDAAO,GAAG,cAAc,iBAAiB,kBAAkB;AAC7E,OAAO,yDAAS;AAChB,UAAU,2DAAW;AACrB,OAAO,sDAAM;AACb,OAAO,+DAAe;AACtB,OAAO,sDAAM;AACb;AACA;AACA;AACA,oBAAoB,6DAAa;AACjC,OAAO,+DAAe;AACtB;AACA;AACA;AACA;AACA;AACA,OAAO,+DAAe;AACtB,UAAU,sDAAM;AAChB,OAAO,0DAAU;AACjB,OAAO,2DAAW;AAClB,OAAO,0DAAU;AACjB,UAAU,sDAAM;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,sEAAsB;AACvD;AACA;AACA,6BAA6B,8DAAkB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAqB;AACK;;;;;;;;;;;;;;;;;;;;ACvG1B;AACA;AACA;AACA;AAC6D;AAClB;AAC3C,eAAe,uDAAY;AAC3B;AACA;AACA;AACA,wBAAwB,yDAAiB;AACzC,IAAI,yDAAiB;AACrB;AACA;AACA,IAAI,yDAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,6DAAqB;AAClC;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAwB;AACrC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA,cAAc,YAAY,kBAAkB;AAC5C;AACA,oBAAoB,WAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,QAAQ,IAAI,UAAU;AACnE;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA,gBAAgB,qBAAqB;AACrC,mBAAmB,+CAAO,GAAG,YAAY,qCAAqC;AAC9E;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,yBAAyB,gCAAgC;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,sBAAsB,gCAAgC;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,uBAAuB,gCAAgC;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAoB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,SAAS;AAC7D,gCAAgC,2BAA2B,GAAG,WAAW,GAAG,SAAS,EAAE,SAAS;AAChG,0DAA0D;AAC1D;AACA,yEAAyE,oBAAoB;AAC7F;AACA;AACA;AACA;AACA,2BAA2B,wEAAwE;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,kBAAkB;AACnF;AACA,gEAAgE,UAAU,IAAI,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,OAAO,EAAE,yBAAyB,GAAG,mBAAmB,GAAG,cAAc;AAC5G;AACA,kCAAkC;AAClC,0CAA0C,6DAAqB;AAC/D,+CAA+C,8DAAsB,GAAG,iEAAyB;AACjG;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAS;;;;;;;;;;;;;;;;;AChXT;AACA;AACA;AACA;AACA;AACA;AACsD;AAC+yB;AACr2B;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,UAAU,kDAAU;AACpB,UAAU,kDAAU;AACpB,UAAU,oDAAY;AACtB,UAAU,+CAAO;AACjB,UAAU,+CAAO;AACjB,UAAU,4CAAI;AACd,UAAU,4CAAI;AACd,UAAU,mDAAW;AACrB,UAAU,8DAAsB;AAChC,UAAU,mDAAW;AACrB,UAAU,4CAAI;AACd,UAAU,gDAAQ;AAClB,UAAU,iDAAS;AACnB,UAAU,6CAAK;AACf,UAAU,2CAAG;AACb,UAAU,iDAAS;AACnB,UAAU,+CAAO;AACjB,UAAU,+CAAO;AACjB,UAAU,uDAAe;AACzB,UAAU,4CAAI;AACd,UAAU,iDAAS;AACnB,kBAAkB,iDAAS;AAC3B,UAAU,gDAAQ;AAClB,UAAU,sDAAc;AACxB,UAAU,iDAAS;AACnB,UAAU,6CAAK;AACf,UAAU,iDAAS;AACnB,UAAU,iDAAS;AACnB,UAAU,sDAAc;AACxB,UAAU,oDAAY;AACtB,UAAU,kDAAU;AACpB,UAAU,oDAAY;AACtB,UAAU,kDAAU;AACpB,UAAU,gDAAQ;AAClB,UAAU,uDAAe;AACzB,UAAU,wDAAgB;AAC1B,UAAU,6CAAK;AACf,UAAU,4CAAI;AACd,UAAU,gDAAQ;AAClB,UAAU,oDAAY;AACtB,UAAU,gDAAQ;AAClB,UAAU,8CAAM;AAChB,UAAU,oDAAY;AACtB,UAAU,gDAAQ;AAClB,UAAU,gDAAQ;AAClB,UAAU,kDAAU;AACpB,UAAU,kDAAU;AACpB,UAAU,6CAAK;AACf,aAAa,6CAAK;AAClB,UAAU,sDAAc;AACxB,UAAU,oDAAY;AACtB,UAAU,iDAAS;AACnB,UAAU,qDAAa;AACvB,UAAU,iDAAS;AACnB,UAAU,kDAAU;AACpB,UAAU,iDAAS;AACnB,UAAU,gDAAQ;AAClB,UAAU,4CAAI;AACd,UAAU,oDAAY;AACtB,UAAU,8CAAM;AAChB,UAAU,8CAAM;AAChB,UAAU,+CAAO;AACjB,UAAU,gDAAQ;AAClB,UAAU,gDAAQ;AAClB,UAAU,8CAAM;AAChB,UAAU,mDAAW;AACrB,UAAU,oDAAY;AACtB,UAAU,qDAAa;AACvB,UAAU,gDAAQ;AAClB,UAAU,mDAAW;AACrB,UAAU,qDAAa;AACvB,UAAU,mDAAW;AACrB,UAAU,+CAAO;AACjB,UAAU,8CAAM;AAChB,UAAU,8CAAM;AAChB,UAAU,+CAAO;AACjB,UAAU,sDAAc;AACxB,UAAU,6CAAK;AACf,UAAU,6CAAK;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,YAAY,wCAAwC;AACpD,UAAU,kDAAU;AACpB,UAAU,kDAAU;AACpB;AACA;AACA;AACA,qBAAqB,kDAAU;AAC/B;AACA;AACA,wEAAqB;AACI;;;;;;;;;;;;;;;;;AC9HzB;AACA;AACA;AACA;AACsD;AAC2B;AACjF;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oCAAoC,+CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,kBAAkB;AACpC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAe,EAAE,yEAAsB;AACvD,sBAAsB,gDAAQ;AAC9B;AACA;AACA;AACA,kBAAkB,iBAAiB;AACnC,kBAAkB,iBAAiB;AACnC;AACA;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS;AACT,6BAA6B,4CAAI;AACjC,6BAA6B,+CAAO;AACpC;AACA,0BAA0B,kBAAkB;AAC5C;AACA,SAAS,kBAAkB,+CAAO;AAClC;AACA,IAAI,+DAAuB;AAC3B;AACA;AACA,wEAAqB;AACG;;;;;;;;;;;;;;;;AClGxB;AACA;AACA;AACA;AACA;AACA;AACsD;AACtD;AACA;AACA;AACA,oBAAoB,wEAAqB;AACzC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wBAAwB,2EAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC,KAAK;AACL,CAAC;AACD,wEAAqB;AACU;;;;;;;;;;;;;;;;;;;;;;;ACnD/B;AACA;AACA;AACA;AACsD;AACnB;AACU;AACR;AACS;AACD;AACR;AACE;AACvC;AACA;AACA;AACA;AACA;AACA,QAAQ,wEAAqB;AAC7B,KAAK;AACL;AACA,kBAAkB,sDAAe;AACjC;AACA,iCAAiC,gDAAY;AAC7C;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY;AACxC;AACA;AACA;AACA;AACA;AACA,sBAAsB,6CAAK,sEAAsE,+DAAgB;AACjH;AACA,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,8BAA8B;AACtD,YAAY,qDAAS,GAAG,+BAA+B;AACvD;AACA;AACA,sBAAsB,6CAAK,CAAC,mDAAY,UAAU,uDAAe;AACjE,QAAQ,qDAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,qDAAS,GAAG,8BAA8B;AACjF;AACA,wEAAqB;AACC;;;;;;;UC3EtB;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACuC;AACI;AACR;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AACE;AAC/B;AACA,iEAAe,8BAA8B,EAAE,uCAAM,GAAG,yCAAQ,CAAC,EAAC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/bravura_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/custom_metrics.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/gonville_metrics.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/leland_metrics.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petaluma_metrics.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/./tests/accidental_tests.ts","webpack://Vex/./tests/annotation_tests.ts","webpack://Vex/./tests/articulation_tests.ts","webpack://Vex/./tests/auto_beam_formatting_tests.ts","webpack://Vex/./tests/bach_tests.ts","webpack://Vex/./tests/barline_tests.ts","webpack://Vex/./tests/beam_tests.ts","webpack://Vex/./tests/bend_tests.ts","webpack://Vex/./tests/boundingbox_tests.ts","webpack://Vex/./tests/boundingboxcomputation_tests.ts","webpack://Vex/./tests/chordsymbol_tests.ts","webpack://Vex/./tests/clef_tests.ts","webpack://Vex/./tests/crossbeam_tests.ts","webpack://Vex/./tests/curve_tests.ts","webpack://Vex/./tests/dot_tests.ts","webpack://Vex/./tests/easyscore_tests.ts","webpack://Vex/./tests/factory_tests.ts","webpack://Vex/./tests/font_tests.ts","webpack://Vex/./tests/formatter_tests.ts","webpack://Vex/./tests/fraction_tests.ts","webpack://Vex/./tests/ghostnote_tests.ts","webpack://Vex/./tests/glyphnote_tests.ts","webpack://Vex/./tests/gracenote_tests.ts","webpack://Vex/./tests/gracetabnote_tests.ts","webpack://Vex/./tests/index.ts","webpack://Vex/./tests/key_clef_tests.ts","webpack://Vex/./tests/keymanager_tests.ts","webpack://Vex/./tests/keysignature_tests.ts","webpack://Vex/./tests/mocks.ts","webpack://Vex/./tests/modifier_tests.ts","webpack://Vex/./tests/multimeasurerest_tests.ts","webpack://Vex/./tests/music_tests.ts","webpack://Vex/./tests/notehead_tests.ts","webpack://Vex/./tests/notesubgroup_tests.ts","webpack://Vex/./tests/offscreencanvas_tests.ts","webpack://Vex/./tests/ornament_tests.ts","webpack://Vex/./tests/parser_tests.ts","webpack://Vex/./tests/pedalmarking_tests.ts","webpack://Vex/./tests/percussion_tests.ts","webpack://Vex/./tests/registry_tests.ts","webpack://Vex/./tests/renderer_tests.ts","webpack://Vex/./tests/rests_tests.ts","webpack://Vex/./tests/rhythm_tests.ts","webpack://Vex/./tests/stave_tests.ts","webpack://Vex/./tests/staveconnector_tests.ts","webpack://Vex/./tests/stavehairpin_tests.ts","webpack://Vex/./tests/staveline_tests.ts","webpack://Vex/./tests/stavemodifier_tests.ts","webpack://Vex/./tests/stavenote_tests.ts","webpack://Vex/./tests/stavetie_tests.ts","webpack://Vex/./tests/stringnumber_tests.ts","webpack://Vex/./tests/strokes_tests.ts","webpack://Vex/./tests/style_tests.ts","webpack://Vex/./tests/tabnote_tests.ts","webpack://Vex/./tests/tabslide_tests.ts","webpack://Vex/./tests/tabstave_tests.ts","webpack://Vex/./tests/tabtie_tests.ts","webpack://Vex/./tests/textbracket_tests.ts","webpack://Vex/./tests/textformatter_tests.ts","webpack://Vex/./tests/textnote_tests.ts","webpack://Vex/./tests/threevoice_tests.ts","webpack://Vex/./tests/tickcontext_tests.ts","webpack://Vex/./tests/timesignature_tests.ts","webpack://Vex/./tests/tremolo_tests.ts","webpack://Vex/./tests/tuning_tests.ts","webpack://Vex/./tests/tuplet_tests.ts","webpack://Vex/./tests/typeguard_tests.ts","webpack://Vex/./tests/vexflow_test_helpers.ts","webpack://Vex/./tests/vf_prefix_tests.ts","webpack://Vex/./tests/vibrato_tests.ts","webpack://Vex/./tests/vibratobracket_tests.ts","webpack://Vex/./tests/voice_tests.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug-with-tests.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","/**\n * The Bravura font was created by Daniel Spreadbury @ Steinberg.\n * https://github.com/steinbergmedia/bravura/\n */\nexport const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature object\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 387,\n y_min: -87,\n y_max: 139,\n ha: 226,\n o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 387,\n y_min: -139,\n y_max: 87,\n ha: 226,\n o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z',\n },\n barlineTick: {\n x_min: -55,\n x_max: 55,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z',\n },\n breathMarkTick: {\n x_min: -142,\n x_max: 256,\n y_min: 0,\n y_max: 403,\n ha: 403,\n o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z',\n },\n segno: {\n x_min: -228,\n x_max: 228,\n y_min: -329,\n y_max: 329,\n ha: 657,\n o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z',\n },\n coda: {\n x_min: -215,\n x_max: 215,\n y_min: -264,\n y_max: 264,\n ha: 529,\n o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z',\n },\n gClef: {\n x_min: 0,\n x_max: 586,\n y_min: -594,\n y_max: 1017,\n ha: 1611,\n o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z',\n },\n cClef: {\n x_min: 0,\n x_max: 604,\n y_min: -477,\n y_max: 477,\n ha: 955,\n o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z',\n },\n fClef: {\n x_min: 0,\n x_max: 622,\n y_min: -512,\n y_max: 238,\n ha: 750,\n o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z',\n },\n unpitchedPercussionClef1: {\n x_min: 160,\n x_max: 481,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 471,\n y_min: -691,\n y_max: 707,\n ha: 1398,\n o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 357,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 239,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 317,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 325,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 338,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -219,\n y_max: 219,\n ha: 438,\n o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -371,\n y_max: 371,\n ha: 741,\n o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 221,\n y_min: 214,\n y_max: 256,\n ha: 43,\n o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z',\n },\n timeSigParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensRightSmall: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n timeSigParensLeftSmall: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 623,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 427,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 414,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 336,\n y_min: -168,\n y_max: 168,\n ha: 335,\n o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 302,\n y_min: -140,\n y_max: 140,\n ha: 279,\n o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z',\n },\n augmentationDot: {\n x_min: -59,\n x_max: 59,\n y_min: -59,\n y_max: 59,\n ha: 118,\n o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z',\n },\n tremolo1: {\n x_min: -143,\n x_max: 297,\n y_min: -550,\n y_max: -237,\n ha: 313,\n o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z',\n },\n flag8thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -700,\n y_max: -4,\n ha: 696,\n o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z',\n },\n flag8thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z',\n },\n flag16thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -796,\n y_max: -4,\n ha: 793,\n o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z',\n },\n flag16thDown: {\n x_min: -14,\n x_max: 251,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z',\n },\n flag32ndUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1039,\n y_max: -4,\n ha: 1035,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z',\n },\n flag32ndDown: {\n x_min: -14,\n x_max: 253,\n y_min: 4,\n y_max: 935,\n ha: 931,\n o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z',\n },\n flag64thUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1159,\n y_max: -4,\n ha: 1156,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z',\n },\n flag64thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 3,\n y_max: 1053,\n ha: 1049,\n o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z',\n },\n flag128thUp: {\n x_min: -16,\n x_max: 217,\n y_min: -1398,\n y_max: -4,\n ha: 1395,\n o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z',\n },\n flag128thDown: {\n x_min: -14,\n x_max: 254,\n y_min: 4,\n y_max: 1288,\n ha: 1284,\n o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z',\n },\n accidentalFlat: {\n x_min: -14,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 166,\n y_min: -314,\n y_max: 314,\n ha: 627,\n o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 225,\n y_min: -364,\n y_max: 364,\n ha: 729,\n o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 255,\n y_min: -127,\n y_max: 127,\n ha: 255,\n o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z',\n },\n accidentalDoubleFlat: {\n x_min: -14,\n x_max: 334,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z',\n },\n accidentalParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n accidentalParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 188,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 419,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 315,\n y_min: -368,\n y_max: 368,\n ha: 735,\n o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -117,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalBakiyeFlat: {\n x_min: -121,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 176,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z',\n },\n articAccentAbove: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articAccentBelow: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articTenutoAbove: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articTenutoBelow: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articStaccatoAbove: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatoBelow: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatissimoAbove: {\n x_min: -50,\n x_max: 50,\n y_min: 0,\n y_max: 173,\n ha: 173,\n o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z',\n },\n articStaccatissimoBelow: {\n x_min: -50,\n x_max: 50,\n y_min: -173,\n y_max: 0,\n ha: 173,\n o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z',\n },\n articMarcatoAbove: {\n x_min: -107,\n x_max: 107,\n y_min: -240,\n y_max: 18,\n ha: 259,\n o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z',\n },\n articMarcatoBelow: {\n x_min: -107,\n x_max: 107,\n y_min: -18,\n y_max: 241,\n ha: 259,\n o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z',\n },\n fermataAbove: {\n x_min: -305,\n x_max: 305,\n y_min: 0,\n y_max: 332,\n ha: 332,\n o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataBelow: {\n x_min: -305,\n x_max: 305,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 342,\n ha: 342,\n o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -342,\n y_max: 0,\n ha: 342,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 412,\n ha: 412,\n o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataVeryLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -412,\n y_max: 0,\n ha: 412,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -330,\n x_max: 330,\n y_min: 0,\n y_max: 536,\n ha: 536,\n o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z',\n },\n fermataVeryShortBelow: {\n x_min: -330,\n x_max: 330,\n y_min: -536,\n y_max: 0,\n ha: 536,\n o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z',\n },\n fermataShortAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 441,\n ha: 441,\n o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataShortBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -441,\n y_max: 0,\n ha: 441,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n breathMarkUpbow: {\n x_min: -118,\n x_max: 118,\n y_min: 0,\n y_max: 385,\n ha: 385,\n o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z',\n },\n caesura: {\n x_min: 0,\n x_max: 430,\n y_min: -190,\n y_max: 284,\n ha: 474,\n o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 348,\n y_min: -195,\n y_max: 292,\n ha: 486,\n o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 801,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 267,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 310,\n y_min: -118,\n y_max: 0,\n ha: 118,\n o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -118,\n y_max: 11,\n ha: 128,\n o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 310,\n y_min: 0,\n y_max: 118,\n ha: 118,\n o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -11,\n y_max: 118,\n ha: 128,\n o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 208,\n y_min: -343,\n y_max: 343,\n ha: 686,\n o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 242,\n y_min: -185,\n y_max: 206,\n ha: 391,\n o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 312,\n y_min: -417,\n y_max: 206,\n ha: 623,\n o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 381,\n y_min: -417,\n y_max: 438,\n ha: 854,\n o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 451,\n y_min: -648,\n y_max: 438,\n ha: 1086,\n o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 520,\n y_min: -648,\n y_max: 669,\n ha: 1317,\n o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z',\n },\n dynamicPiano: {\n x_min: -36,\n x_max: 355,\n y_min: -168,\n y_max: 261,\n ha: 428,\n o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z',\n },\n dynamicMezzo: {\n x_min: 32,\n x_max: 463,\n y_min: -18,\n y_max: 256,\n ha: 274,\n o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z',\n },\n dynamicForte: {\n x_min: -81,\n x_max: 413,\n y_min: -171,\n y_max: 390,\n ha: 561,\n o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z',\n },\n dynamicRinforzando: {\n x_min: 55,\n x_max: 336,\n y_min: 0,\n y_max: 258,\n ha: 258,\n o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z',\n },\n dynamicSforzando: {\n x_min: 49,\n x_max: 262,\n y_min: -21,\n y_max: 254,\n ha: 274,\n o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z',\n },\n dynamicZ: {\n x_min: 22,\n x_max: 291,\n y_min: 2,\n y_max: 235,\n ha: 233,\n o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z',\n },\n ornamentTrill: {\n x_min: -234,\n x_max: 234,\n y_min: 0,\n y_max: 354,\n ha: 354,\n o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z',\n },\n ornamentTurn: {\n x_min: -292,\n x_max: 292,\n y_min: -134,\n y_max: 134,\n ha: 269,\n o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z',\n },\n ornamentTurnSlash: {\n x_min: -292,\n x_max: 292,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z',\n },\n ornamentMordent: {\n x_min: -278,\n x_max: 278,\n y_min: -202,\n y_max: 186,\n ha: 388,\n o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z',\n },\n ornamentShortTrill: {\n x_min: -278,\n x_max: 278,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z',\n },\n ornamentTremblement: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 240,\n ha: 359,\n o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 119,\n ha: 348,\n o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 186,\n ha: 415,\n o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -407,\n x_max: 407,\n y_min: -119,\n y_max: 229,\n ha: 348,\n o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -413,\n x_max: 413,\n y_min: -119,\n y_max: 222,\n ha: 341,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -413,\n x_max: 413,\n y_min: -202,\n y_max: 222,\n ha: 424,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -413,\n x_max: 413,\n y_min: -222,\n y_max: 119,\n ha: 341,\n o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z',\n },\n stringsDownBow: {\n x_min: -158,\n x_max: 158,\n y_min: 0,\n y_max: 331,\n ha: 331,\n o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z',\n },\n stringsUpBow: {\n x_min: -103,\n x_max: 103,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z',\n },\n stringsHarmonic: {\n x_min: -77,\n x_max: 77,\n y_min: -77,\n y_max: 77,\n ha: 154,\n o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -103,\n x_max: 103,\n y_min: -103,\n y_max: 192,\n ha: 296,\n o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -103,\n x_max: 103,\n y_min: -192,\n y_max: 103,\n ha: 296,\n o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -146,\n x_max: 146,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 735,\n y_min: -1,\n y_max: 470,\n ha: 471,\n o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 409,\n y_min: 61,\n y_max: 470,\n ha: 409,\n o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2022-12-24T06:31:40.861Z',\n};\n","/**\n * The Gonville font was created by Simon Tatham.\n * https://www.chiark.greenend.org.uk/~sgtatham/gonville/\n */\nexport const GonvilleMetrics = {\n name: 'Gonville',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: 0,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: -40,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 40,\n advanceWidth: 250,\n yOffset: -402,\n },\n accidentalFlat: {\n leftSideBearing: -50,\n advanceWidth: 208,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n '8vb': {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 17,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -9,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 3,\n yOffset: -4,\n stemUpYOffset: 10,\n reportedWidth: 28,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 9,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 40,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n // articulation: {\n // },\n tremolo: {\n default: {\n point: 25,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 9,\n offsetXStemDown: -0.5,\n },\n grace: {\n point: 15,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 6.5,\n offsetXStemDown: -0.5,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 0,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n glyphs: {\n flag: {\n shiftX: -0.08,\n flag8thDown: {\n shiftX: -0.16,\n },\n flag16thDown: {\n shiftX: -0.16,\n },\n flag32ndDown: {\n shiftX: -0.16,\n shiftY: 9,\n },\n flag64thDown: {\n shiftX: -0.16,\n shiftY: 13,\n },\n flag128thDown: {\n shiftX: -0.16,\n shiftY: 22,\n },\n flag32ndUp: {\n shiftY: -9,\n },\n flag64thUp: {\n shiftY: -13,\n },\n flag128thUp: {\n shiftY: -22,\n },\n },\n clef_default: {\n point: 40,\n '6stringTabClef': {\n point: 40,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 32,\n },\n clefNote_default: {\n point: 40,\n },\n clefNote_small: {\n point: 32,\n },\n textNote: {\n point: 40,\n default: {},\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.95,\n },\n },\n ornament: {\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n tremolo: {\n default: {\n shiftY: -10,\n },\n grace: {\n shiftY: -5,\n },\n },\n },\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const LelandMetrics = {\n name: 'Leland',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { BravuraMetrics } from './bravura_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, BravuraMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nimport { GonvilleMetrics } from './gonville_metrics';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, GonvilleMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { LelandFont } from './leland_glyphs';\nimport { LelandMetrics } from './leland_metrics';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, LelandMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { PetalumaFont } from './petaluma_glyphs';\nimport { PetalumaMetrics } from './petaluma_metrics';\nexport function loadPetaluma() {\n Font.load('Petaluma', PetalumaFont, PetalumaMetrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","/**\n * The Petaluma font was created by Steinberg Media.\n * https://github.com/steinbergmedia/petaluma\n */\nexport const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n stave: {\n padding: 15,\n endPaddingMax: 15,\n endPaddingMin: 7,\n unalignedNotePadding: 12,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -150,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['L'],\n spacing: 20,\n superSubRatio: 0.73,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 26,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 28,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 26,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 4,\n yOffset: -8,\n stemUpYOffset: 27,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 6,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 30,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 13,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 8,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n displacedShiftX: -2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemDown: 1.8,\n offsetYBaseStemUp: -1.8,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 20,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.77,\n flag16thUp: {\n shiftX: -0.75,\n },\n flag32ndUp: {\n shiftX: -0.85,\n },\n flag64thUp: {\n shiftX: -1.55,\n },\n flag128thUp: {\n shiftX: -1.3,\n },\n flag16thDown: {\n shiftX: -0.75,\n },\n flag32ndDown: {\n shiftX: -0.76,\n },\n flag64thDown: {\n shiftX: -1.5,\n },\n flag128thDown: {\n shiftX: -1.2,\n },\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n noteheadBlackStemUp: {\n shiftX: 0.5,\n },\n noteheadHalfStemUp: {\n shiftX: 0.725,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.7,\n },\n csymMajorSeventh: {\n scale: 0.8,\n },\n accidentalSharp: {\n scale: 0.7,\n },\n accidentalFlat: {\n scale: 0.8,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Accidental Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TickContext } from '../src/tickcontext';\nimport { TimeSigNote } from '../src/timesignote';\nimport { isAccidental } from '../src/typeguard';\nimport { Voice } from '../src/voice';\nconst AccidentalTests = {\n Start() {\n QUnit.module('Accidental');\n test('Automatic Accidentals - Simple Tests', autoAccidentalWorking);\n const run = VexFlowTests.runTests;\n run('Accidental Padding', formatAccidentalSpaces);\n run('Basic', basic);\n run('Stem Down', basicStemDown);\n run('Cautionary Accidental', cautionary);\n run('Accidental Arrangement Special Cases', specialCases);\n run('Multi Voice', multiVoice);\n run('Microtonal', microtonal);\n run('Microtonal (Iranian)', microtonal_iranian);\n run('Sagittal', sagittal);\n run('Automatic Accidentals', automaticAccidentals0);\n run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1);\n run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2);\n run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3);\n run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline);\n run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset);\n run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1);\n run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2);\n run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3);\n run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4);\n run('Factory API', factoryAPI);\n },\n};\n// Check that at least one of the note's modifiers is an Accidental.\nfunction hasAccidental(note) {\n return note.getModifiers().some((modifier) => isAccidental(modifier));\n}\n// Return a convenience function for building accidentals from a string.\nfunction makeNewAccid(factory) {\n return (type) => factory.Accidental({ type });\n}\n/**\n *\n */\nfunction autoAccidentalWorking() {\n const createStaveNote = (noteStruct) => new StaveNote(noteStruct);\n let notes = [\n { keys: ['bb/4'], duration: '4' },\n { keys: ['bb/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['a#/4'], duration: '4' },\n { keys: ['g#/4'], duration: '4' },\n ].map(createStaveNote);\n let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // F Major (Bb)\n Accidental.applyAccidentals([voice], 'F');\n equal(hasAccidental(notes[0]), false, 'No flat because of key signature');\n equal(hasAccidental(notes[1]), false, 'No flat because of key signature');\n equal(hasAccidental(notes[2]), true, 'Added a sharp');\n equal(hasAccidental(notes[3]), true, 'Back to natural');\n equal(hasAccidental(notes[4]), true, 'Back to natural');\n equal(hasAccidental(notes[5]), false, 'Natural remembered');\n equal(hasAccidental(notes[6]), true, 'Added sharp');\n equal(hasAccidental(notes[7]), true, 'Added sharp');\n notes = [\n { keys: ['e#/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['fb/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['b#/4'], duration: '4' },\n { keys: ['cb/5'], duration: '4' },\n { keys: ['fb/5'], duration: '4' },\n { keys: ['e#/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // A Major (F#,G#,C#)\n Accidental.applyAccidentals([voice], 'A');\n equal(hasAccidental(notes[0]), true, 'Added sharp');\n equal(hasAccidental(notes[1]), true, 'Added flat');\n equal(hasAccidental(notes[2]), true, 'Added flat');\n equal(hasAccidental(notes[3]), true, 'Added sharp');\n equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n equal(hasAccidental(notes[5]), true, 'Added flat(different octave)');\n equal(hasAccidental(notes[6]), true, 'Added flat(different octave)');\n equal(hasAccidental(notes[7]), false, 'sharp remembered');\n notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['cb/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['c#/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['cbb/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c##/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n ].map(createStaveNote);\n voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n // C Major (no sharps/flats)\n Accidental.applyAccidentals([voice], 'C');\n equal(hasAccidental(notes[0]), false, 'No accidental');\n equal(hasAccidental(notes[1]), true, 'Added flat');\n equal(hasAccidental(notes[2]), false, 'Flat remembered');\n equal(hasAccidental(notes[3]), true, 'Sharp added');\n equal(hasAccidental(notes[4]), false, 'Sharp remembered');\n equal(hasAccidental(notes[5]), true, 'Added doubled flat');\n equal(hasAccidental(notes[6]), false, 'Double flat remembered');\n equal(hasAccidental(notes[7]), true, 'Added double sharp');\n equal(hasAccidental(notes[8]), false, 'Double sharp rememberd');\n equal(hasAccidental(notes[9]), true, 'Added natural');\n equal(hasAccidental(notes[10]), false, 'Natural remembered');\n}\n/**\n *\n */\nfunction formatAccidentalSpaces(options) {\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const softmaxFactor = 100;\n // Create the notes\n const notes = [\n new StaveNote({\n keys: ['e##/5'],\n duration: '8d',\n }).addModifier(new Accidental('##'), 0),\n new StaveNote({\n keys: ['b/4'],\n duration: '16',\n }).addModifier(new Accidental('b'), 0),\n new StaveNote({\n keys: ['f/3'],\n duration: '8',\n }),\n new StaveNote({\n keys: ['a/3'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('bb'), 0)\n .addModifier(new Accidental('bb'), 1),\n new StaveNote({\n keys: ['d/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['e/4', 'g/4'],\n duration: '16',\n })\n .addModifier(new Accidental('#'), 0)\n .addModifier(new Accidental('#'), 1),\n new StaveNote({\n keys: ['g/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['a/4'],\n duration: '32',\n }),\n new StaveNote({\n keys: ['g/4'],\n duration: '16',\n }),\n new StaveNote({\n keys: ['d/4'],\n duration: 'q',\n }),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const beams = Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n });\n voice.addTickables(notes);\n const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n const stave = new Stave(10, 40, width + 20);\n stave.setContext(context).draw();\n formatter.format([voice], width);\n voice.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n notes.forEach((note) => Note.plotMetrics(context, note, 30));\n VexFlowTests.plotLegendForNoteWidth(context, 300, 150);\n ok(true);\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' })\n .addModifier(accid('##'), 6)\n .addModifier(accid('n'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('b'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n'), 4)\n .addModifier(accid('bb'), 5),\n // Notes keys out of alphabetic order\n f\n .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('b'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6)\n .addModifier(accid('#'), 0),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n ok(true, 'Full Accidental');\n}\nfunction cautionary(options) {\n const staveCount = 12;\n const scale = 0.85;\n const staveWidth = 840;\n let i = 0;\n let j = 0;\n const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10);\n f.getContext().scale(scale, scale);\n const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}');\n const mod = Math.round(accids.length / staveCount);\n for (i = 0; i < staveCount; ++i) {\n const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale });\n const score = f.EasyScore();\n const rowMap = [];\n for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) {\n rowMap.push(accids[j + i * staveCount]);\n }\n const notes = rowMap.map((accidType) => f\n .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP })\n .addModifier(f.Accidental({ type: accidType }), 0));\n const voice = score.voice(notes, { time: rowMap.length + '/4' });\n voice.getTickables().forEach((tickable) => {\n tickable\n .getModifiers()\n .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY)\n .forEach((accid) => accid.setAsCautionary());\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n ok(true, 'Must successfully render cautionary accidentals');\n}\nfunction specialCases(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('b'), 1),\n f\n .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('##'), 1),\n f\n .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('##'), 2),\n f\n .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('b'), 1)\n .addModifier(accid('n'), 3),\n f\n .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' })\n .addModifier(accid('b').setAsCautionary(), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3),\n f\n .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' })\n .addModifier(accid('bb'), 0)\n .addModifier(accid('b').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('#'), 3)\n .addModifier(accid('n').setAsCautionary(), 4),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n ok(true, 'Full Accidental');\n}\nfunction basicStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n f.Stave({ x: 10, y: 10, width: 550 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 });\n notes.forEach((note, noteIndex) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, accidIndex) => {\n ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140);\n ok(true, 'Full Accidental');\n}\nfunction multiVoice(options) {\n // Helper function for visualizing\n function showNotes(note1, note2, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.addToModifierContext(modifierContext);\n note2.addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x);\n note1.setContext(ctx).draw();\n note2.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 180);\n Note.plotMetrics(ctx, note2, 15);\n }\n const f = VexFlowTests.makeFactory(options, 460, 250);\n const accid = makeNewAccid(f);\n const stave = f.Stave({ x: 10, y: 45, width: 420 });\n const ctx = f.getContext();\n stave.draw();\n let note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n let note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('bb'), 1)\n .addModifier(accid('##'), 2)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 60);\n note1 = f\n .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 150);\n note1 = f\n .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 })\n .addModifier(accid('b'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('#'), 2)\n .setStave(stave);\n note2 = f\n .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 })\n .addModifier(accid('b'), 0)\n .setStave(stave);\n showNotes(note1, note2, stave, ctx, 250);\n VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150);\n ok(true, 'Full Accidental');\n}\nfunction microtonal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('db'), 0)\n .addModifier(accid('d'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('bbs'), 0)\n .addModifier(accid('++'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('d'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('+'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('++'), 0)\n .addModifier(accid('bbs'), 1)\n .addModifier(accid('+'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('db'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('db').setAsCautionary(), 1)\n .addModifier(accid('bbs').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('++').setAsCautionary(), 4)\n .addModifier(accid('d').setAsCautionary(), 5),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' })\n .addModifier(accid('++-'), 0)\n .addModifier(accid('+-'), 1)\n .addModifier(accid('bs'), 2)\n .addModifier(accid('bss'), 3)\n .addModifier(accid('afhf'), 4)\n .addModifier(accid('ashs'), 5),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n ok(true, 'Microtonal Accidental');\n}\nfunction microtonal_iranian(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('o'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('o'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('bb'), 5)\n .addModifier(accid('##'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('o'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('n'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('o').setAsCautionary(), 1)\n .addModifier(accid('n').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('k').setAsCautionary(), 4),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' })\n .addModifier(accid('k'), 0)\n .addModifier(accid('k'), 1)\n .addModifier(accid('k'), 2)\n .addModifier(accid('k'), 3),\n ];\n Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 });\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n ok(true, 'Microtonal Accidental (Iranian)');\n}\nfunction sagittal(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n const accid = makeNewAccid(f);\n const ctx = f.getContext();\n f.Stave({ x: 10, y: 10, width: 650 });\n const notes = [\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('accSagittal7CommaDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('b'), 1)\n .addModifier(accid('accSagittal7CommaDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal11MediumDiesisUp'), 1)\n .addModifier(accid('accSagittal5CommaDown'), 2)\n .addModifier(accid('accSagittalFlat7CDown'), 3),\n f\n .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' })\n .addModifier(accid('accSagittal35LargeDiesisDown'), 2),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' })\n .addModifier(accid('accSagittalFlat7CDown'), 1)\n .addModifier(accid('accSagittal11LargeDiesisDown'), 3),\n ];\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n f.StaveTie({\n from: notes[4],\n to: notes[5],\n first_indices: [3],\n last_indices: [3],\n options: {\n direction: Stem.DOWN,\n },\n });\n f.Beam({ notes: notes.slice(2, 4) });\n f.Beam({ notes: notes.slice(6, 8) });\n Formatter.SimpleFormat(notes);\n notes.forEach((note, index) => {\n Note.plotMetrics(f.getContext(), note, 140);\n ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals');\n note.getModifiersByType('Accidental').forEach((accid, index) => {\n ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width');\n });\n });\n f.draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140);\n ok(true, 'Sagittal');\n}\nfunction automaticAccidentals0(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const stave = f.Stave();\n const notes = [\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c#/4', 'c#/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c##/4', 'c##/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n { keys: ['cn/4', 'cn/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cbb/4', 'cbb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['cb/4', 'cb/5'], duration: '4' },\n { keys: ['c/4', 'c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f));\n notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0);\n const voice = f\n .Voice()\n .setMode(Voice.Mode.SOFT)\n .addTickable(new TimeSigNote('12/4').setStave(stave))\n .addTickables(notes);\n Accidental.applyAccidentals([voice], 'C');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentals1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes = [\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['e/4'], duration: '4' },\n { keys: ['f/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'Ab');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentals2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const notes = [\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['c#/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f#/5'], duration: '4' },\n { keys: ['g#/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentals3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('A');\n const score = f.EasyScore();\n score.set({ time: '8/4' });\n const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n Accidental.applyAccidentals([voice], 'A');\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsMultiVoiceInline(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Ab');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Ab Major\n Accidental.applyAccidentals([voice0, voice1], 'Ab');\n equal(hasAccidental(notes0[0]), false);\n equal(hasAccidental(notes0[1]), true);\n equal(hasAccidental(notes0[2]), true);\n equal(hasAccidental(notes0[3]), false);\n equal(hasAccidental(notes0[4]), false);\n equal(hasAccidental(notes0[5]), true);\n equal(hasAccidental(notes0[6]), true);\n equal(hasAccidental(notes0[7]), false);\n equal(hasAccidental(notes1[0]), false);\n equal(hasAccidental(notes1[1]), true);\n equal(hasAccidental(notes1[2]), true);\n equal(hasAccidental(notes1[3]), false);\n equal(hasAccidental(notes1[4]), false);\n equal(hasAccidental(notes1[5]), true);\n equal(hasAccidental(notes1[6]), true);\n equal(hasAccidental(notes1[7]), false);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsMultiVoiceOffset(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('Cb');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['d/4'], duration: '4', stem_direction: -1 },\n { keys: ['e/4'], duration: '4', stem_direction: -1 },\n { keys: ['f/4'], duration: '4', stem_direction: -1 },\n { keys: ['g/4'], duration: '4', stem_direction: -1 },\n { keys: ['a/4'], duration: '4', stem_direction: -1 },\n { keys: ['b/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const notes1 = [\n { keys: ['c/5'], duration: '8' },\n { keys: ['c/5'], duration: '4' },\n { keys: ['d/5'], duration: '4' },\n { keys: ['e/5'], duration: '4' },\n { keys: ['f/5'], duration: '4' },\n { keys: ['g/5'], duration: '4' },\n { keys: ['a/5'], duration: '4' },\n { keys: ['b/5'], duration: '4' },\n { keys: ['c/6'], duration: '4' },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n // Cb Major (All flats)\n Accidental.applyAccidentals([voice0, voice1], 'Cb');\n equal(hasAccidental(notes0[0]), true);\n equal(hasAccidental(notes0[1]), true);\n equal(hasAccidental(notes0[2]), true);\n equal(hasAccidental(notes0[3]), true);\n equal(hasAccidental(notes0[4]), true);\n equal(hasAccidental(notes0[5]), true);\n equal(hasAccidental(notes0[6]), true);\n equal(hasAccidental(notes0[7]), false, 'Natural Remembered');\n equal(hasAccidental(notes1[0]), true);\n equal(hasAccidental(notes1[1]), false);\n equal(hasAccidental(notes1[2]), true);\n equal(hasAccidental(notes1[3]), true);\n equal(hasAccidental(notes1[4]), true);\n equal(hasAccidental(notes1[5]), true);\n equal(hasAccidental(notes1[6]), true);\n equal(hasAccidental(notes1[7]), true);\n new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsCornerCases1(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n equal(hasAccidental(notes0[0]), false);\n equal(hasAccidental(notes0[1]), true);\n equal(hasAccidental(notes0[2]), false);\n equal(hasAccidental(notes0[3]), true);\n equal(hasAccidental(notes0[4]), false);\n equal(hasAccidental(notes0[5]), true);\n equal(hasAccidental(notes0[6]), false);\n equal(hasAccidental(notes0[7]), true);\n equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsCornerCases2(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C');\n equal(hasAccidental(notes0[0]), false);\n equal(hasAccidental(notes0[2]), true);\n equal(hasAccidental(notes0[4]), false);\n equal(hasAccidental(notes0[6]), true);\n equal(hasAccidental(notes0[8]), false);\n equal(hasAccidental(notes0[10]), true);\n equal(hasAccidental(notes0[12]), false);\n equal(hasAccidental(notes0[14]), true);\n equal(hasAccidental(notes0[16]), false);\n equal(hasAccidental(notes0[1]), false);\n equal(hasAccidental(notes0[3]), true);\n equal(hasAccidental(notes0[5]), false);\n equal(hasAccidental(notes0[7]), true);\n equal(hasAccidental(notes0[9]), false);\n equal(hasAccidental(notes0[11]), true);\n equal(hasAccidental(notes0[13]), false);\n equal(hasAccidental(notes0[15]), true);\n equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsCornerCases3(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n equal(hasAccidental(notes0[0]), true);\n equal(hasAccidental(notes0[1]), true);\n equal(hasAccidental(notes0[2]), false);\n equal(hasAccidental(notes0[3]), true);\n equal(hasAccidental(notes0[4]), false);\n equal(hasAccidental(notes0[5]), true);\n equal(hasAccidental(notes0[6]), false);\n equal(hasAccidental(notes0[7]), true);\n equal(hasAccidental(notes0[8]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n ok(true);\n}\nfunction automaticAccidentalsCornerCases4(options) {\n const f = VexFlowTests.makeFactory(options, 700, 150);\n const stave = f.Stave().addKeySignature('C#');\n const notes0 = [\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c#/4'], duration: '4', stem_direction: -1 },\n { keys: ['c#/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['cb/4'], duration: '4', stem_direction: -1 },\n { keys: ['cb/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n { keys: ['c/4'], duration: '4', stem_direction: -1 },\n { keys: ['c/5'], duration: '4', stem_direction: -1 },\n ].map(f.StaveNote.bind(f));\n const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0);\n Accidental.applyAccidentals([voice0], 'C#');\n equal(hasAccidental(notes0[0]), true);\n equal(hasAccidental(notes0[2]), true);\n equal(hasAccidental(notes0[4]), false);\n equal(hasAccidental(notes0[6]), true);\n equal(hasAccidental(notes0[8]), false);\n equal(hasAccidental(notes0[10]), true);\n equal(hasAccidental(notes0[12]), false);\n equal(hasAccidental(notes0[14]), true);\n equal(hasAccidental(notes0[16]), false);\n equal(hasAccidental(notes0[1]), true);\n equal(hasAccidental(notes0[3]), true);\n equal(hasAccidental(notes0[5]), false);\n equal(hasAccidental(notes0[7]), true);\n equal(hasAccidental(notes0[9]), false);\n equal(hasAccidental(notes0[11]), true);\n equal(hasAccidental(notes0[13]), false);\n equal(hasAccidental(notes0[15]), true);\n equal(hasAccidental(notes0[17]), false);\n new Formatter().joinVoices([voice0]).formatToStave([voice0], stave);\n f.draw();\n ok(true);\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 700, 240);\n f.Stave({ x: 10, y: 10, width: 550 });\n const accid = makeNewAccid(f);\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' })\n .addModifier(accid('b'), 0)\n .addModifier(accid('#'), 1),\n f\n .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' })\n .addModifier(accid('##'), 0)\n .addModifier(accid('n'), 1)\n .addModifier(accid('bb'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('#'), 4)\n .addModifier(accid('n'), 5)\n .addModifier(accid('bb'), 6),\n f\n .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' })\n .addModifier(accid('n'), 0)\n .addModifier(accid('#'), 1)\n .addModifier(accid('#'), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb'), 4)\n .addModifier(accid('##'), 5)\n .addModifier(accid('#'), 6),\n f\n .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' })\n .addModifier(accid('#'), 0)\n .addModifier(accid('##').setAsCautionary(), 1)\n .addModifier(accid('#').setAsCautionary(), 2)\n .addModifier(accid('b'), 3)\n .addModifier(accid('bb').setAsCautionary(), 4)\n .addModifier(accid('b').setAsCautionary(), 5),\n ];\n Formatter.SimpleFormat(notes);\n notes.forEach((n, i) => {\n ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals');\n n.getModifiersByType('Accidental').forEach((accid, i) => {\n ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width');\n });\n });\n f.draw();\n ok(true, 'Factory API');\n}\nVexFlowTests.register(AccidentalTests);\nexport { AccidentalTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Annotation Tests\n// TODO: Formatter.FormatAndDraw(ctx, stave, notes, ???number???);\n// Did a previous version of the API accept a number as the fourth argument?\n// We removed the fourth argument from all of our test cases.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Vibrato } from '../src/vibrato';\nimport { Voice } from '../src/voice';\nconst AnnotationTests = {\n Start() {\n QUnit.module('Annotation');\n const run = VexFlowTests.runTests;\n run('Placement', placement);\n run('Lyrics', lyrics);\n run('Simple Annotation', simple);\n run('Styled Annotation', styling);\n run('Standard Notation Annotation', standard);\n run('Harmonics', harmonic);\n run('Fingerpicking', picking);\n run('Bottom Annotation', bottom);\n run('Bottom Annotations with Beams', bottomWithBeam);\n run('Test Justification Annotation Stem Up', justificationStemUp);\n run('Test Justification Annotation Stem Down', justificationStemDown);\n run('TabNote Annotations', tabNotes);\n },\n};\nconst FONT_SIZE = VexFlowTests.Font.size;\n// Helper functions to create TabNote and StaveNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst staveNote = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Show lyrics using Annotation objects.\n */\nfunction lyrics(options) {\n let fontSize = FONT_SIZE;\n let x = 10;\n let width = 170;\n let ratio = 1;\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 750, 260);\n // Add three groups of staves. Each time we increase the fontSize by 2.\n for (let i = 0; i < 3; ++i) {\n const score = f.EasyScore();\n score.set({ time: '3/4' });\n const system = f.System({ width, x });\n system.addStave({\n voices: [\n score.voice(score.notes('(C4 F4)/2[id=\"n0\"]').concat(score.beam(score.notes('(C4 A4)/8[id=\"n1\"], (C4 A4)/8[id=\"n2\"]')))),\n ],\n });\n // Add lyrics under the first row.\n ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => {\n const verse = Math.floor(ix / 3);\n const noteGroupID = 'n' + (ix % 3);\n const noteGroup = registry.getElementById(noteGroupID);\n const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize);\n lyricsAnnotation.setPosition(ModifierPosition.BELOW);\n noteGroup.addModifier(lyricsAnnotation, verse);\n });\n // Second row doesn't have any lyrics.\n system.addStave({\n voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))],\n });\n f.draw();\n ratio = (fontSize + 2) / fontSize;\n width = width * ratio;\n x = x + width;\n fontSize = fontSize + 2;\n }\n ok(true);\n}\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('T'), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Bend('Full').setTap('T'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Simple Annotation');\n}\nfunction standard(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic');\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Standard Notation Annotation');\n}\nfunction styling(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw();\n const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style);\n const notes = [\n staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Standard Notation Annotation');\n}\nfunction harmonic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 12 },\n { str: 3, fret: 12 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('Harm.'), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: 'h',\n })\n .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0)\n .addModifier(new Annotation('A.H.'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Simple Annotation');\n}\nfunction picking(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.setFont(Font.SANS_SERIF, FONT_SIZE);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC);\n const notes = [\n tabNote({\n positions: [\n { str: 1, fret: 0 },\n { str: 2, fret: 1 },\n { str: 3, fret: 2 },\n { str: 4, fret: 2 },\n { str: 5, fret: 0 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(40), 0),\n tabNote({\n positions: [{ str: 6, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 3, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 2, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n tabNote({\n positions: [{ str: 1, fret: 9 }],\n duration: '8',\n }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Fingerpicking');\n}\nfunction placement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj);\n const notes = [\n staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0),\n staveNote({ keys: ['f/5'], duration: 'w' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, ' Annotation Placement');\n}\nfunction bottom(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM);\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0),\n staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0),\n staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0),\n staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Bottom Annotation');\n}\nfunction bottomWithBeam(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)),\n ];\n const beam = new Beam(notes.slice(1));\n Formatter.FormatAndDraw(ctx, stave, notes);\n beam.setContext(ctx).draw();\n ok(true, 'Bottom Annotation with Beams');\n}\nfunction justificationStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 950);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n ok(true, 'Test Justification Annotation');\n}\nfunction justificationStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 650, 1000);\n ctx.scale(1.5, 1.5);\n const annotation = (text, hJustification, vJustification) => new Annotation(text)\n .setFont(Font.SANS_SERIF, FONT_SIZE)\n .setJustification(hJustification)\n .setVerticalJustification(vJustification);\n for (let v = 1; v <= 4; ++v) {\n const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0),\n staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0),\n staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0),\n staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n ok(true, 'Test Justification Annotation');\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial, sans-serif';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n return note;\n });\n const notes2 = specs.map((noteSpec) => {\n const note = new TabNote(noteSpec);\n note.render_options.draw_stem = true;\n note.setStemDirection(-1);\n return note;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); // U\n notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); // D\n notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); // D\n notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); // U\n notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); // D\n notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); // U\n notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); // D\n notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); // U\n notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); // D\n notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); // U\n notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); // D\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n // Alternatively, you could add all the notes in one big array with spread syntax.\n // voice.addTickables([...notes1, ...notes2, ...notes3]);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave });\n voice.draw(ctx, stave);\n ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(AnnotationTests);\nexport { AnnotationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Articulation Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierPosition } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst ArticulationTests = {\n Start() {\n QUnit.module('Articulation');\n const run = VexFlowTests.runTests;\n run('Articulation - Vertical Placement', verticalPlacement);\n run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2);\n run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' });\n run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' });\n run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' });\n run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' });\n run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' });\n run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' });\n run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' });\n run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' });\n run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' });\n run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' });\n run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' });\n },\n};\n// Helper function for creating StaveNotes.\nfunction drawArticulations(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const width = 125 - Stave.defaultPadding;\n const f = VexFlowTests.makeFactory(options, 675, 195);\n const ctx = f.getContext();\n expect(0);\n let x = 10;\n const y = 30;\n const score = f.EasyScore();\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n // bar 1\n const notesBar1 = [\n f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n // bar 3 - juxtaposing second bar next to first bar\n const notesBar3 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n ];\n notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0);\n // Helper function to justify and draw a 4/4 voice\n x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE);\n // bar 4 - juxtaposing second bar next to first bar\n const notesBar4 = [\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0);\n notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END);\n}\nfunction drawFermata(options) {\n const sym1 = options.params.sym1;\n const sym2 = options.params.sym2;\n const f = VexFlowTests.makeFactory(options, 400, 195);\n const ctx = f.getContext();\n const score = f.EasyScore();\n const width = 150 - Stave.defaultPadding;\n let x = 50;\n const y = 30;\n const formatAndDrawToWidth = (x, y, width, notes, barline) => {\n const voices = [score.voice(notes, { time: '4/4' })];\n const formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width);\n formatter.format(voices, nwidth);\n const stave = f\n .Stave({ x, y, width: nwidth + Stave.defaultPadding })\n .setEndBarType(barline)\n .setContext(ctx)\n .draw();\n voices.forEach((voice) => voice.draw(ctx, stave));\n return stave.getWidth();\n };\n expect(0);\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE);\n // bar 2 - juxtaposing second bar next to first bar\n const notesBar2 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0);\n notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0);\n notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0);\n // Helper function to justify and draw a 4/4 voice\n formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE);\n}\nfunction verticalPlacement(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, ' Annotation Placement');\n}\nfunction verticalPlacement2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const staveNote = (noteStruct) => new StaveNote(noteStruct);\n const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw();\n const notes = [\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('fermataBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataShortBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('fermataLongBelow'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0),\n staveNote({ keys: ['f/4'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryShortBelow'), 0),\n staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('articTenutoBelow'), 0)\n .addModifier(new Articulation('fermataVeryLongBelow'), 0),\n staveNote({ keys: ['c/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataBelow'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('fermataShortAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('fermataLongAbove'), 0)\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0),\n staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryShortAbove'), 0),\n staveNote({ keys: ['f/5'], duration: 'q' })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('articTenutoAbove'), 0)\n .addModifier(new Articulation('fermataVeryLongAbove'), 0),\n staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN })\n .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0)\n .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0)\n .addModifier(new Articulation('fermataAbove'), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, ' Annotation Placement (Glyph codes)');\n}\nfunction drawArticulations2(options) {\n expect(0);\n const scale = 0.8;\n const f = VexFlowTests.makeFactory(options, 1500, 195);\n // Get the rendering context\n const ctx = f.getContext();\n ctx.scale(scale, scale);\n // bar 1\n const stave1 = new Stave(10, 50, 500).setContext(ctx).draw();\n const notesBar1 = [\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }),\n ];\n let i;\n for (i = 0; i < 16; i++) {\n notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0);\n notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0);\n if (i === 15) {\n notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam1 = new Beam(notesBar1.slice(0, 8));\n const beam2 = new Beam(notesBar1.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave1, notesBar1);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = new Stave(510, 50, 500).setContext(ctx).draw();\n const notesBar2 = [\n f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }),\n f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }),\n ];\n for (i = 0; i < 16; i++) {\n notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0);\n if (i === 15) {\n notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0);\n }\n }\n const beam3 = new Beam(notesBar2.slice(0, 8));\n const beam4 = new Beam(notesBar2.slice(8, 16));\n Formatter.FormatAndDraw(ctx, stave2, notesBar2);\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n // bar 3 - juxtaposing second bar next to first bar\n const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw();\n const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })];\n notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0);\n Formatter.FormatAndDraw(ctx, stave3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw();\n const notesBar4 = [\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }),\n f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }),\n ];\n for (i = 0; i < 4; i++) {\n let position1 = 3;\n if (i > 1) {\n position1 = 4;\n }\n notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0);\n }\n Formatter.FormatAndDraw(ctx, stave4, notesBar4);\n}\nfunction tabNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt ' + Font.SANS_SERIF;\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n },\n ];\n const notes1 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const notes2 = specs.map((noteSpec) => {\n const tabNote = new TabNote(noteSpec);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const notes3 = specs.map((noteSpec) => new TabNote(noteSpec));\n notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); // U\n notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); // D\n notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); // U\n notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); // D\n notes2[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes2[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes2[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes2[3].addModifier(new Articulation('a.').setPosition(4), 0);\n notes3[0].addModifier(new Articulation('a>').setPosition(3), 0);\n notes3[1].addModifier(new Articulation('a>').setPosition(4), 0);\n notes3[2].addModifier(new Articulation('a.').setPosition(3), 0);\n notes3[3].addModifier(new Articulation('a.').setPosition(4), 0);\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT);\n voice.addTickables(notes1);\n voice.addTickables(notes2);\n voice.addTickables(notes3);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(ArticulationTests);\nexport { ArticulationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Auto Beaming Tests\n// TODO: Beam.generateBeams(voice.getTickables() as StemmableNote[], ...) requires a cast to StemmableNote[].\n// Is there a cleaner way to handle this?\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Fraction } from '../src/fraction';\nimport { Stave } from '../src/stave';\nimport { Stem } from '../src/stem';\nconst AutoBeamFormattingTests = {\n Start() {\n QUnit.module('Auto-Beaming');\n const run = VexFlowTests.runTests;\n run('Simple Auto Beaming', simpleAuto);\n run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup);\n run('Even Group Stem Directions', evenGroupStemDirections);\n run('Odd Group Stem Directions', oddGroupStemDirections);\n run('Odd Beam Groups Auto Beaming', oddBeamGroups);\n run('More Simple Auto Beaming 0', moreSimple0);\n run('More Simple Auto Beaming 1', moreSimple1);\n run('Beam Across All Rests', beamAcrossAllRests);\n run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets);\n run('Break Beams on Middle Rests Only', beamAcrossMiddleRests);\n run('Break Beams on Rest', breakBeamsOnRests);\n run('Maintain Stem Directions', maintainStemDirections);\n run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests);\n run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote);\n run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1);\n run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups);\n run('Custom Beam Groups', customBeamGroups);\n run('Simple Tuplet Auto Beaming', simpleTuplets);\n run('More Simple Tuplet Auto Beaming', moreSimpleTuplets);\n run('More Automatic Beaming', moreBeaming);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1);\n run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2);\n run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3);\n run('Duration-Based Secondary Beam Breaks', secondaryBreaks1);\n run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2);\n run('Flat Beams Up', flatBeamsUp);\n run('Flat Beams Down', flatBeamsDown);\n run('Flat Beams Mixed Direction', flatBeamsMixed);\n run('Flat Beams Up (uniform)', flatBeamsUpUniform);\n run('Flat Beams Down (uniform)', flatBeamsDownUniform);\n run('Flat Beams Up Bounds', flatBeamsUpBounds);\n run('Flat Beams Down Bounds', flatBeamsDownBounds);\n },\n};\nfunction simpleAuto(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beaming Applicator Test');\n}\nfunction simpleAutoWithOverflowGroup(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n // Add a . after a note (e.g., f5/4.) to make it a dotted note.\n const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), {\n time: '4/4',\n });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beaming Applicator Test');\n}\nfunction evenGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' });\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n equal(beams[0].getStemDirection(), Stem.UP);\n equal(beams[1].getStemDirection(), Stem.UP);\n equal(beams[2].getStemDirection(), Stem.UP);\n equal(beams[3].getStemDirection(), Stem.UP);\n equal(beams[4].getStemDirection(), Stem.DOWN);\n equal(beams[5].getStemDirection(), Stem.DOWN);\n ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddGroupStemDirections(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), {\n time: '15/8',\n });\n const groups = [new Fraction(3, 8)];\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n equal(beams[1].getStemDirection(), Stem.DOWN);\n equal(beams[2].getStemDirection(), Stem.UP);\n equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line');\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beaming Applicator Test');\n}\nfunction oddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' });\n const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)];\n // Takes a voice and returns its auto beams.\n const beams = Beam.applyAndGetBeams(voice, undefined, groups);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimple1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction breakBeamsOnRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRestsWithStemlets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n show_stemlets: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossAllRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamAcrossMiddleRests(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n beam_middle_only: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirections(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n // EasyScore.notes(line, ...) ignores whitespace in the line string.\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction maintainStemDirectionsBeamAcrossRests(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'b4/16, b4, b4[stem=\"down\"], b4/r',\n 'b4/r, b4[stem=\"down\"], b4, b4',\n 'b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/r',\n 'b4/32, b4[stem=\"down\"], b4[stem=\"down\"], b4, b4/16/r, b4',\n ].join(', '), { stem: 'up' }), { time: '4/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n beam_rests: true,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('2/4');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(2, 2)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction groupWithUnbeamableNote1(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave().addTimeSignature('6/8');\n const score = f.EasyScore();\n const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' });\n const beams = Beam.generateBeams(voice.getTickables(), {\n groups: [new Fraction(3, 8)],\n beam_rests: false,\n maintain_stem_directions: true,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction autoOddBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), {\n time: '13/16',\n });\n // Flatten the arrays into a single Beam[].\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')),\n ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')),\n ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction customBeamGroups(options) {\n const f = VexFlowTests.makeFactory(options, 450, 400);\n const score = f.EasyScore();\n const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4');\n const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' });\n const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8');\n const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' });\n const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16');\n const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' });\n const group1 = [new Fraction(5, 8)];\n const group2 = [new Fraction(3, 8), new Fraction(2, 8)];\n const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)];\n // Flatten the three Beam[] into a single Beam[].\n // Alternatively, you can use .reduce(concat) flatten arrays, where concat is defined as (a, b) => a.concat(b).\n const beams = [\n ...Beam.applyAndGetBeams(voice1, undefined, group1),\n ...Beam.applyAndGetBeams(voice2, undefined, group2),\n ...Beam.applyAndGetBeams(voice3, undefined, group3),\n ];\n f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3);\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\n/**\n * Helper function which uses Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of large blocks of EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n notes: score.notes.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\nfunction simpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, c5')),\n ...notes('g5/8, a5'),\n ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }),\n ], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreSimpleTuplets(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' });\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction moreBeaming(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' });\n const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8'));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroups1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), {\n time: '8/4',\n });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction beamingWithSeveralGroupsOverflow3(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' });\n const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Auto Beam Applicator Test');\n}\nfunction secondaryBreaks1(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'f5/32, f5, f5, f5, f5/16., f5/32',\n 'f5/16, f5/8, f5/16',\n 'f5/32, f5/16., f5., f5/32',\n 'f5/16., f5/32, f5, f5/16.',\n ].join(',')));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction secondaryBreaks2(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('e5/16, f5, f5')),\n tuplet(notes('f5/16, f5, c5')),\n notes('a4/16., f4/32'),\n tuplet(notes('d4/16, d4, d4')),\n tuplet(notes('a5/8, (e5 g5), a5')),\n tuplet(notes('f5/16, f5, f5')),\n tuplet(notes('f5/16, f5, a4')),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Duration-Based Secondary Breaks Test');\n}\nfunction flatBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n tuplet(notes('c4/8, g4, f5')),\n notes('d5/8'),\n tuplet(notes('c5/16, (c4 e4 g4), f4')),\n notes('d5/8, e5, c4, f5/32, f5, f5, f5'),\n ].reduce(concat));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Up Test');\n}\nfunction flatBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Down Test');\n}\nfunction flatBeamsMixed(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Mixed Direction Test');\n}\nfunction flatBeamsUpUniform(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4, g5')),\n ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 50,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownUniform(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4'));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 155,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Down (uniform) Test');\n}\nfunction flatBeamsUpBounds(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const { notes, tuplet } = createShortcuts(score);\n const voice = score.voice([\n ...tuplet(notes('c4/8, g4/8, g5/8')),\n ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'),\n ]);\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 60,\n stem_direction: 1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Up (uniform) Test');\n}\nfunction flatBeamsDownBounds(options) {\n const f = VexFlowTests.makeFactory(options, 450, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64',\n 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8',\n 'g5/8, (e4 g4 b4)/16, e5/16',\n 'd5/8, e5/8',\n ].join(','), { stem: 'down' }));\n const beams = Beam.generateBeams(voice.getTickables(), {\n flat_beams: true,\n flat_beam_offset: 145,\n stem_direction: -1,\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'Flat Beams Down (uniform) Test');\n}\nVexFlowTests.register(AutoBeamFormattingTests);\nexport { AutoBeamFormattingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bach Demo\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { BarlineType, Registry } from '../src/index';\nconst BachDemoTests = {\n Start() {\n QUnit.module('Bach Demo');\n VexFlowTests.runTests('Minuet 1', minuet1);\n },\n};\nfunction minuet1(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n // Retrieve the element from the registry and cast to StaveNote, so we can call .addModifier( ) later.\n const id = (id) => registry.getElementById(id);\n const f = VexFlowTests.makeFactory(options, 1100, 900);\n const score = f.EasyScore({ throwOnError: true });\n // Bind these three functions so the code looks cleaner.\n // Instead of score.voice(...), just call voice(...).\n const voice = score.voice.bind(score);\n const notes = score.notes.bind(score);\n const beam = score.beam.bind(score);\n let x = 120;\n let y = 80;\n function appendSystem(width) {\n const system = f.System({ x, y, width, spaceBetweenStaves: 10 });\n x += width;\n return system;\n }\n score.set({ time: '3/4' });\n /* Measure 1 */\n let system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('D5/q[id=\"m1a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]),\n ],\n })\n .addClef('treble')\n .addKeySignature('G')\n .addTimeSignature('3/4')\n .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30);\n system\n .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G')\n .addTimeSignature('3/4');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m1a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 2 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m2a\"], G4[id=\"m2b\"], G4[id=\"m2c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m1a'),\n to: id('m2a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 3 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m3a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 4 */\n system = appendSystem(150);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m4a\"], G4[id=\"m4b\"], G4[id=\"m4c\"]'))] });\n system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n f.Curve({\n from: id('m3a'),\n to: id('m4a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 5 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('C5/q[id=\"m5a\"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))],\n });\n id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 6 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id=\"m6a\"]', { stem: 'up' }))].reduce(concat))],\n });\n system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n f.Curve({\n from: id('m5a'),\n to: id('m6a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n y_shift: 20,\n },\n });\n /* Measure 7 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n voice([notes('F4/q[id=\"m7a\"]'), beam(notes('G4/8[id=\"m7b\"], A4, B4, G4', { stem: 'up' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('D4/q, B3[id=\"m7c\"], G3', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0);\n id('m7b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 8 */\n system = appendSystem(180);\n const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '8', slash: true });\n system.addStave({ voices: [voice(notes('A4/h.[id=\"m8c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('D4/q[id=\"m8a\"]'), beam(notes('D3/8, C4, B3[id=\"m8b\"], A3', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0);\n id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0);\n f.Curve({\n from: id('m7a'),\n to: id('m8c'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position: 'nearTop',\n position_end: 'nearTop',\n },\n });\n f.StaveTie({ from: grace, to: id('m8c') });\n /* Measure 9 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('D5/q[id=\"m9a\"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m9a').addModifier(f.Fingering({ number: '5' }), 0);\n /* Measure 10 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('D5/q[id=\"m10a\"], G4[id=\"m10b\"], G4[id=\"m10c\"]'))] });\n system.addStave({ voices: [voice(notes('G3/q[id=\"m10d\"], B3, G3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m10d').addModifier(f.Fingering({ number: '4' }), 0);\n f.Curve({\n from: id('m9a'),\n to: id('m10a'),\n options: {\n cps: [\n { x: 0, y: 40 },\n { x: 0, y: 40 },\n ],\n },\n });\n /* Measure 11 */\n system = appendSystem(150);\n system.addStave({\n voices: [voice([notes('E5/q[id=\"m11a\"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))],\n });\n id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n /* Measure 12 */\n system = appendSystem(170);\n system.addStave({ voices: [voice(notes('G5/q[id=\"m12a\"], G4[id=\"m12b\"], G4[id=\"m12c\"]'))] });\n system.addStave({\n voices: [\n score\n .set({ clef: 'bass' })\n .voice([notes('B3/q[id=\"m12d\"]'), beam(notes('C4/8, B3, A3, G3[id=\"m12e\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addConnector('singleRight');\n id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0);\n id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0);\n id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0);\n id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m11a'),\n to: id('m12a'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 20 },\n ],\n },\n });\n /* Measure 13 (New system) */\n x = 20;\n y += 230;\n system = appendSystem(220);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('c5/q[id=\"m13a\"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)),\n ],\n })\n .addClef('treble')\n .addKeySignature('G');\n system\n .addStave({ voices: [voice(notes('a3/h[id=\"m13b\"], f3/q[id=\"m13c\"]', { clef: 'bass' }))] })\n .addClef('bass')\n .addKeySignature('G');\n system.addConnector('brace');\n system.addConnector('singleRight');\n system.addConnector('singleLeft');\n id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n id('m13b').addModifier(f.Fingering({ number: '1' }), 0);\n id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0);\n /* Measure 14 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('g3/h[id=\"m14a\"], b3/q[id=\"m14b\"]', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m14a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m14b').addModifier(f.Fingering({ number: '1' }), 0);\n /* Measure 15 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id=\"m15a\"]', { stem: 'up' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('c4/q[id=\"m15b\"], d4, d3', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m15a').addModifier(f.Fingering({ number: '2' }), 0);\n id('m15b').addModifier(f.Fingering({ number: '2' }), 0);\n /* Measure 16 */\n system = appendSystem(130);\n system\n .addStave({\n voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id=\"m16a\"]')].reduce(concat))],\n })\n .setEndBarType(BarlineType.REPEAT_END);\n system\n .addStave({ voices: [voice(notes('g3/h[id=\"m16b\"], g2/q', { clef: 'bass' }))] })\n .setEndBarType(BarlineType.REPEAT_END);\n system.addConnector('boldDoubleRight');\n id('m16a').addModifier(f.Fingering({ number: '1' }), 0);\n id('m16b').addModifier(f.Fingering({ number: '1' }), 0);\n f.Curve({\n from: id('m13a'),\n to: id('m16a'),\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 20 },\n ],\n invert: true,\n position_end: 'nearTop',\n },\n });\n /* Measure 17 */\n system = appendSystem(180);\n system\n .addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('b5/q[id=\"m17a\"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)),\n voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]),\n ],\n })\n .setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN);\n system.addConnector('boldDoubleLeft');\n system.addConnector('singleRight');\n id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0);\n /* Measure 18 */\n system = appendSystem(180);\n system.addStave({\n voices: [\n score\n .set({ clef: 'treble' })\n .voice([notes('a5/q[id=\"m18a\"]'), beam(notes('d5/8, e5, f5, d5[id=\"m18b\"]', { stem: 'down' }))].reduce(concat)),\n ],\n });\n system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] });\n system.addConnector('singleRight');\n id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0);\n f.Curve({\n from: id('m17a'),\n to: id('m18b'),\n options: {\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 30 },\n ],\n },\n });\n /* Done */\n f.draw();\n Registry.disableDefaultRegistry();\n ok(true, 'Bach Minuet 1');\n}\nVexFlowTests.register(BachDemoTests);\nexport { BachDemoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Barline Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline, BarlineType } from '../src/stavebarline';\nconst BarlineTests = {\n Start() {\n QUnit.module('Barline');\n test('Enums', enums);\n const run = VexFlowTests.runTests;\n run('Simple BarNotes', simple);\n run('Style BarNotes', style);\n },\n};\nfunction enums() {\n // VexFlow 4.0 renamed Barline.type => BarlineType.\n // The old way still works, for backwards compatibility.\n equal(Barline.type, BarlineType);\n const a = BarlineType['DOUBLE'];\n const b = BarlineType.DOUBLE;\n equal(a, b);\n}\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Simple Test');\n}\nfunction style(options) {\n const f = VexFlowTests.makeFactory(options, 380, 160);\n const stave = f.Stave();\n const notes = [\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }),\n f.BarNote({ type: 'single' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ];\n notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Style');\n}\nVexFlowTests.register(BarlineTests);\nexport { BarlineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Beam Tests\n// TODO: Factory.Beam()'s 'notes' argument is a StemmableNote[], but we only have access to Tickable[].\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index';\nconst BeamTests = {\n Start() {\n QUnit.module('Beam');\n const run = VexFlowTests.runTests;\n run('Simple Beam', simple);\n run('Multi Beam', multi);\n run('Sixteenth Beam', sixteenth);\n run('Slopey Beam', slopey);\n run('Auto-stemmed Beam', autoStem);\n run('Mixed Beam 1', mixed);\n run('Mixed Beam 2', mixed2);\n run('Dotted Beam', dotted);\n run('Partial Beam', partial);\n run('Close Trade-offs Beam', tradeoffs);\n run('Insane Beam', insane);\n run('Lengthy Beam', lenghty);\n run('Outlier Beam', outlier);\n run('Break Secondary Beams', breakSecondaryBeams);\n run('Partial Beam Direction', partialBeamDirection);\n run('TabNote Beams Up', tabBeamsUp);\n run('TabNote Beams Down', tabBeamsDown);\n run('TabNote Auto Create Beams', autoTabBeams);\n run('TabNote Beams Auto Stem', tabBeamsAutoStem);\n run('Complex Beams with Annotations', complexWithAnnotation);\n run('Complex Beams with Articulations', complexWithArticulation);\n run('Complex Beams with Articulations two Staves', complexWithArticulation2);\n },\n};\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n notes('(cb4 e#4 a4)/2'),\n beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })),\n ].reduce(concat), { time: '2/2' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Simple Test');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)),\n voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Multi Test');\n}\nfunction sixteenth(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16, f5, d5, c5', { stem: 'up' })),\n beam(notes('c5/16, d5, f5, e5', { stem: 'up' })),\n notes('f5/2', { stem: 'up' }),\n ].reduce(concat)),\n voice([\n beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })),\n beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })),\n notes('f4/2', { stem: 'down' }),\n ].reduce(concat)),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Sixteenth Test');\n}\nfunction breakSecondaryBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }),\n beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }),\n ].reduce(concat), { time: '3/4' }),\n voice([\n beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), {\n secondaryBeamBreaks: [3, 7],\n }),\n beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }),\n ].reduce(concat), { time: '3/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Breaking Secondary Beams Test');\n}\nfunction partialBeamDirection(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice.bind(score);\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voices = [\n voice([\n // Default beaming:\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })),\n // Force first 16th beam right\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }),\n // Force first 16th beam left\n beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }),\n ].reduce(concat), { time: '9/8' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Partial beam direction test');\n}\nfunction slopey(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const beam = score.beam.bind(score);\n const notes = score.notes.bind(score);\n const voice = score.voice([\n beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })),\n beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })),\n ].reduce(concat));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Slopey Test');\n}\nfunction autoStem(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), {\n time: '6/4',\n });\n const notes = voice.getTickables();\n const beams = [\n f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }),\n f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }),\n ];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n const UP = Stem.UP;\n const DOWN = Stem.DOWN;\n equal(beams[0].getStemDirection(), UP);\n equal(beams[1].getStemDirection(), UP);\n equal(beams[2].getStemDirection(), UP);\n equal(beams[3].getStemDirection(), UP);\n equal(beams[4].getStemDirection(), DOWN);\n equal(beams[5].getStemDirection(), DOWN);\n f.draw();\n ok(true, 'AutoStem Beam Test');\n}\nfunction mixed(options) {\n const f = VexFlowTests.makeFactory(options, 350, 140);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' }));\n const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) }));\n [\n [0, 4],\n [4, 8],\n [8, 12],\n ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) }));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true, 'Multi Test');\n}\nfunction mixed2(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', {\n stem: 'up',\n }), { time: '31/64' });\n const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', {\n stem: 'down',\n }), { time: '31/64' });\n f.Beam({ notes: voice.getTickables().slice(0, 12) });\n f.Beam({ notes: voice2.getTickables().slice(0, 12) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n ok(true, 'Multi Test');\n}\nfunction dotted(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes.slice(8, 12) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Dotted Test');\n}\nfunction partial(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' });\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 9) });\n f.Beam({ notes: notes.slice(9, 13) });\n f.Beam({ notes: notes.slice(13, 17) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Partial Test');\n}\nfunction tradeoffs(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave();\n const score = f.EasyScore();\n const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Close Trade-offs Test');\n}\nfunction insane(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem=\"down\"], a5[stem=\"down\"], b4[stem=\"down\"], c4/8', { stem: 'up' }));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 7) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Insane Test');\n}\nfunction lenghty(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Lengthy Test');\n}\nfunction outlier(options) {\n const f = VexFlowTests.makeFactory(options, 450, 180);\n const stave = f.Stave({ y: 20 });\n const score = f.EasyScore();\n const voice = score.voice(score.notes([\n 'g4/8[stem=\"up\"], f4[stem=\"up\"], d5[stem=\"up\"], e4[stem=\"up\"]',\n 'd5/8[stem=\"down\"], d5[stem=\"down\"], c5[stem=\"down\"], d5[stem=\"down\"]',\n ].join()));\n const notes = voice.getTickables();\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n ok(true, 'Outlier Test');\n}\nfunction tabBeamsUp(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave({ y: 20 });\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n { positions: [{ str: 3, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'All objects have been drawn');\n}\nfunction tabBeamsDown(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const stave = f.TabStave({ options: { num_lines: 10 } });\n const specs = [\n {\n stem_direction: -1,\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8dd',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n stem_direction: -1,\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n Dot.buildAndAttach([notes[1], notes[1]]);\n f.Beam({ notes: notes.slice(1, 7) });\n f.Beam({ notes: notes.slice(8, 11) });\n f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } });\n f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'All objects have been drawn');\n}\nfunction autoTabBeams(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 1, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '32' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n { positions: [{ str: 6, fret: 6 }], duration: '16' },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n const beams = Beam.applyAndGetBeams(voice, -1);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n beams.forEach((beam) => beam.setContext(f.getContext()).draw());\n ok(true, 'All objects have been drawn');\n}\n// This tests makes sure the auto_stem functionality is works.\n// TabNote stems within a beam group should end up normalized\nfunction tabBeamsAutoStem(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const stave = f.TabStave();\n const specs = [\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n stem_direction: 1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: 1,\n },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 },\n { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 },\n ];\n const notes = specs.map((struct) => {\n const tabNote = f.TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_dots = true;\n return tabNote;\n });\n // Stems should format down\n f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } });\n // Stems should format up\n f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'All objects have been drawn');\n}\nfunction complexWithAnnotation(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 200);\n const stave = factory.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n const notes1 = s1.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0));\n const notes2 = s2.map((struct) => factory\n .StaveNote(struct) //\n .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0));\n factory.Beam({ notes: notes1 });\n factory.Beam({ notes: notes2 });\n const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n factory.draw();\n ok(true, 'Complex beam annotations');\n}\nfunction complexWithArticulation(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const stave = f.Stave({ y: 40 });\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave });\n f.draw();\n ok(true, 'Complex beam articulations');\n}\nfunction complexWithArticulation2(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const system = f.System();\n const s1 = [\n { keys: ['e/4'], duration: '128', stem_direction: 1 },\n { keys: ['d/4'], duration: '16', stem_direction: 1 },\n { keys: ['e/4'], duration: '8', stem_direction: 1 },\n { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n { keys: ['c/4'], duration: '32', stem_direction: 1 },\n ];\n const s2 = [\n { keys: ['e/5'], duration: '128', stem_direction: -1 },\n { keys: ['d/5'], duration: '16', stem_direction: -1 },\n { keys: ['e/5'], duration: '8', stem_direction: -1 },\n { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n { keys: ['c/5'], duration: '32', stem_direction: -1 },\n ];\n const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0));\n const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0));\n f.Beam({ notes: notes1 });\n f.Beam({ notes: notes2 });\n f.Beam({ notes: notes3 });\n f.Beam({ notes: notes4 });\n const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2);\n const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4);\n system.addStave({ voices: [voice1] });\n system.addStave({ voices: [voice2] });\n f.draw();\n ok(true, 'Complex beam articulations two staves');\n}\nVexFlowTests.register(BeamTests);\nexport { BeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bend Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend } from '../src/bend';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nconst BendTests = {\n Start() {\n QUnit.module('Bend');\n const run = VexFlowTests.runTests;\n run('Double Bends', doubleBends);\n run('Reverse Bends', reverseBends);\n run('Bend Phrase', bendPhrase);\n run('Double Bends With Release', doubleBendsWithRelease);\n run('Whako Bend', whackoBends);\n // TODO: Rename 'Whako Bend' => 'Whacko'\n },\n};\n// Helper functions for creating TabNote and Bend objects.\nconst note = (noteStruct) => new TabNote(noteStruct);\nconst bendWithText = (text, release = false) => new Bend(text, release);\nconst bendWithPhrase = (phrase) => new Bend('', false, phrase);\n/**\n * Bend two strings at a time.\n */\nfunction doubleBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('Full'), 0)\n .addModifier(bendWithText('1/2'), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4'), 0)\n .addModifier(bendWithText('1/4'), 1),\n // This note is not visible because it is pushed off to the right by the ctx.scale(1.5, 1.5) at the top.\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'h',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n ok(true, 'Double Bends');\n}\nfunction doubleBendsWithRelease(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 1, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/2', true), 0)\n .addModifier(bendWithText('Full', true), 1),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n { str: 4, fret: 5 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithText('1/4', true), 0)\n .addModifier(bendWithText('Monstrous', true), 1)\n .addModifier(bendWithText('1/4', true), 2),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'q',\n }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n notes.forEach((note) => Note.plotMetrics(ctx, note, 140));\n ok(true, 'Bend Release');\n}\n/**\n * Add the bend for note 1 before adding the bend for note 0,\n * by swapping the two indexes in .addModifier(modifier, index).\n * As a result, the bend curves intersect.\n */\nfunction reverseBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.setFont('10pt Arial');\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('Full'), 1)\n .addModifier(bendWithText('1/2'), 0),\n note({\n positions: [\n { str: 2, fret: 5 },\n { str: 3, fret: 5 },\n ],\n duration: 'w',\n })\n .addModifier(bendWithText('1/4'), 1)\n .addModifier(bendWithText('1/4'), 0),\n note({\n positions: [{ str: 4, fret: 7 }],\n duration: 'w',\n }),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const mc = new ModifierContext();\n note.addToModifierContext(mc);\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n ok(true, 'Bend ' + i);\n }\n}\nfunction bendPhrase(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; // Optionally use constants defined in Font.\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: 'Monstrous' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const bend1 = bendWithPhrase(phrase1).setContext(ctx);\n const notes = [\n note({\n positions: [{ str: 2, fret: 10 }],\n duration: 'w',\n }).addModifier(bend1, 0),\n ];\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.addToModifierContext(new ModifierContext());\n const tickContext = new TickContext();\n tickContext\n .addTickable(note)\n .preFormat()\n .setX(75 * i);\n note.setStave(stave).setContext(ctx).draw();\n Note.plotMetrics(ctx, note, 140);\n ok(true, 'Bend ' + i);\n }\n}\nfunction whackoBends(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 240);\n ctx.scale(1.0, 1.0);\n ctx.setBackgroundFillStyle('#FFF');\n ctx.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw();\n const phrase1 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const phrase2 = [\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.DOWN, text: 'Full' },\n { type: Bend.UP, text: '1/2' },\n { type: Bend.DOWN, text: '' },\n ];\n const notes = [\n note({\n positions: [\n { str: 2, fret: 10 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(bendWithPhrase(phrase1), 0)\n .addModifier(bendWithPhrase(phrase2), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n Note.plotMetrics(ctx, notes[0], 140);\n ok(true, 'Whacko Bend & Release');\n}\nVexFlowTests.register(BendTests);\nexport { BendTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Bounding Box Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BoundingBox } from '../src/index';\nconst BoundingBoxTests = {\n Start() {\n QUnit.module('BoundingBox');\n test('Initialization Test', initialization);\n test('Merging Text', merging);\n },\n};\nfunction initialization() {\n const bb = new BoundingBox(4, 5, 6, 7);\n equal(bb.getX(), 4, 'Bad X');\n equal(bb.getY(), 5, 'Bad Y');\n equal(bb.getW(), 6, 'Bad W');\n equal(bb.getH(), 7, 'Bad H');\n bb.setX(5);\n equal(bb.getX(), 5, 'Bad X');\n}\nfunction merging() {\n const tests = [\n {\n type: 'Intersection',\n bb1: new BoundingBox(10, 10, 10, 10),\n bb2: new BoundingBox(15, 20, 10, 10),\n merged: new BoundingBox(10, 10, 15, 20),\n },\n {\n type: '1 contains 2',\n bb1: new BoundingBox(10, 10, 30, 30),\n bb2: new BoundingBox(15, 15, 10, 10),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n {\n type: '2 contains 1',\n bb1: new BoundingBox(15, 15, 10, 10),\n bb2: new BoundingBox(10, 10, 30, 30),\n merged: new BoundingBox(10, 10, 30, 30),\n },\n ];\n tests.forEach((test) => {\n const type = test.type;\n const bb1 = test.bb1;\n const bb2 = test.bb2;\n const merged = test.merged;\n bb1.mergeWith(bb2);\n equal(bb1.getX(), merged.getX(), type + ' - Bad X');\n equal(bb1.getY(), merged.getY(), type + ' - Bad Y');\n equal(bb1.getW(), merged.getW(), type + ' - Bad W');\n equal(bb1.getH(), merged.getH(), type + ' - Bad H');\n });\n}\nVexFlowTests.register(BoundingBoxTests);\nexport { BoundingBoxTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// BoundingBoxComputation Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BoundingBoxComputation, Glyph, OutlineCode } from '../src/index';\nconst BoundingBoxComputationTests = {\n Start() {\n QUnit.module('BoundingBoxComputation');\n test('Point Test', point);\n const run = VexFlowTests.runTests;\n quadraticParams.forEach((params, index) => {\n run(`Quadratic Test ${index}`, quadratic, params);\n });\n cubicParams.forEach((params, index) => {\n run(`Cubic Test ${index}`, cubic, params);\n });\n },\n};\nfunction point() {\n const bboxComp = new BoundingBoxComputation();\n bboxComp.addPoint(2, 3);\n equal(bboxComp.getX1(), 2, 'Bad X1');\n equal(bboxComp.getY1(), 3, 'Bad Y1');\n equal(bboxComp.width(), 0, 'Bad width');\n equal(bboxComp.height(), 0, 'Bad height');\n bboxComp.addPoint(-5, 7);\n equal(bboxComp.getX1(), -5, 'Bad X1');\n equal(bboxComp.getY1(), 3, 'Bad Y1');\n equal(bboxComp.width(), 7, 'Bad width');\n equal(bboxComp.height(), 4, 'Bad height');\n}\n/**\n * Size the context to fit all the points and a small margin.\n */\nfunction createContext(options) {\n const points = options.params.points;\n let w = points[0];\n let h = points[1];\n for (let i = 2; i < points.length; i += 2) {\n w = Math.max(w, points[i]);\n h = Math.max(h, points[i + 1]);\n }\n const f = VexFlowTests.makeFactory(options, w + 20, h + 20);\n const ctx = f.getContext();\n ctx.setLineCap('square');\n return ctx;\n}\n/**\n * Draw a rectangle on the RenderContext.\n */\nfunction rect(ctx, style, lineWidth, x, y, w, h) {\n ctx.strokeStyle = style;\n ctx.setLineWidth(lineWidth);\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + w, y);\n ctx.lineTo(x + w, y + h);\n ctx.lineTo(x, y + h);\n ctx.lineTo(x, y);\n ctx.stroke();\n}\n// Each test consists of the control points for a single curve and its expected bounding box.\nconst quadraticParams = [\n {\n points: [10, 10, 100, 20, 110, 110],\n box: [10, 10, 100, 100],\n },\n {\n points: [110, 10, 60, 110, 10, 20],\n box: [10, 10, 100, 52.63],\n },\n {\n points: [10, 10, 30, 20, 50, 30],\n box: [10, 10, 40, 20],\n },\n {\n points: [100, 30, 30, 110, 20, 30],\n box: [20, 30, 80, 40],\n },\n];\n/**\n *\n */\nfunction quadratic(options) {\n const points = options.params.points;\n const box = options.params.box;\n const ctx = createContext(options);\n const [x0, y0, x1, y1, x2, y2] = points;\n // Draw expected bounding box.\n let [bx, by, bw, bh] = box;\n rect(ctx, '#0f0', 5, bx, by, bw, bh);\n // Compute the bounding box.\n const bboxComp = new BoundingBoxComputation();\n bboxComp.addQuadraticCurve(x0, y0, x1, y1, x2, y2);\n // Draw computed bounding box.\n [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()];\n rect(ctx, '#00f', 3, bx, by, bw, bh);\n // Regression test for a prior bug: compute the bounding box again,\n // this time using the Glyph.getOutlineBoundingBox code path.\n const o = [OutlineCode.MOVE, x0, -y0, OutlineCode.QUADRATIC, x2, -y2, x1, -y1];\n const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0);\n rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH());\n // Draw curve.\n ctx.setLineWidth(1);\n ctx.fillStyle = '#000';\n Glyph.renderOutline(ctx, o, 1, 0, 0);\n // Draw control points.\n ctx.strokeStyle = '#f00';\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n // Check the expected and computed bounding boxes are close enough.\n ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`);\n ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`);\n ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`);\n ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`);\n ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`);\n ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`);\n ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`);\n ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`);\n}\n// Each test consists of the control points for a single curve and its expected bounding box.\nconst cubicParams = [\n {\n points: [10, 10, 60, 20, 100, 60, 110, 110],\n box: [10, 10, 100, 100],\n },\n {\n points: [10, 10, 35, 110, 85, 110, 110, 10],\n box: [10, 10, 100, 75],\n },\n {\n points: [10, 110, 90, 10, 30, 10, 110, 110],\n box: [10, 35, 100, 75],\n },\n {\n points: [10, 10, 110, 110, 110, 10, 10, 110],\n box: [10, 10, 75, 100],\n },\n {\n points: [10, 10, 130, 110, -10, 110, 110, 10],\n box: [10, 10, 100, 75],\n },\n {\n points: [50, 10, 10, 110, 110, 110, 74, 10],\n box: [40.38, 10, 41.59, 75],\n },\n {\n points: [10, 30, 35, 60, 110, 110, 60, 10],\n box: [10, 10, 66.82, 59.37],\n },\n {\n points: [210, 70, 10, 10, 190, 10, 120, 90],\n box: [112.02, 27.23, 97.98, 62.77],\n },\n {\n points: [20, 10, 210, 90, 10, 90, 100, 38],\n box: [20, 10, 85.33, 64.06],\n },\n {\n points: [60, 14, 10, 14, 90, 14, 70, 14],\n box: [43.28, 14, 30.01, 0],\n },\n {\n points: [10, 60, 20, 100, 100, 20, 110, 60],\n box: [10, 48.45, 100, 23.1],\n },\n];\nfunction cubic(options) {\n const points = options.params.points;\n const box = options.params.box;\n const ctx = createContext(options);\n const [x0, y0, x1, y1, x2, y2, x3, y3] = points;\n // Draw expected bounding box.\n let [bx, by, bw, bh] = box;\n rect(ctx, '#0f0', 5, bx, by, bw, bh);\n // Compute the bounding box.\n const bboxComp = new BoundingBoxComputation();\n bboxComp.addBezierCurve(x0, y0, x1, y1, x2, y2, x3, y3);\n // Draw computed bounding box.\n [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()];\n rect(ctx, '#00f', 3, bx, by, bw, bh);\n // Regression test for a prior bug: compute the bounding box again,\n // this time using the Glyph.getOutlineBoundingBox code path.\n const o = [OutlineCode.MOVE, x0, -y0, OutlineCode.BEZIER, x3, -y3, x1, -y1, x2, -y2];\n const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0);\n rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH());\n // Draw curve.\n ctx.setLineWidth(1);\n ctx.fillStyle = '#000';\n Glyph.renderOutline(ctx, o, 1, 0, 0);\n // Draw control points.\n ctx.strokeStyle = '#f00';\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x3, y3);\n ctx.stroke();\n // Check the expected and computed bounding boxes are close enough.\n ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`);\n ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`);\n ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`);\n ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`);\n ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`);\n ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`);\n ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`);\n ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`);\n}\nVexFlowTests.register(BoundingBoxComputationTests);\nexport { BoundingBoxComputationTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ChordSymbol Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Font } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tables } from '../src/tables';\nconst ChordSymbolTests = {\n Start() {\n QUnit.module('ChordSymbol');\n const run = VexFlowTests.runTests;\n run('Chord Symbol With Modifiers', withModifiers);\n run('Chord Symbol Font Size Tests', fontSize);\n run('Chord Symbol Kerning Tests', kern);\n run('Top Chord Symbols', top);\n run('Top Chord Symbols Justified', topJustify);\n run('Bottom Chord Symbols', bottom);\n run('Bottom Stem Down Chord Symbols', bottomStemDown);\n run('Double Bottom Chord Symbols', doubleBottom);\n },\n};\n// Options for customizing addGlyphOrText() or addGlyph().\nconst superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT };\nconst subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT };\n// Helper function for creating StaveNotes.\nconst note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0);\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction withModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const notes = [\n note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n const voiceW = formatter.preCalculateMinTotalWidth([voice]);\n const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef');\n formatter.format([voice], voiceW);\n const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw();\n voice.draw(ctx, staff);\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall'));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall'));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n ok(true, 'Font Size Chord Symbol');\n}\nfunction fontSize(options) {\n const f = VexFlowTests.makeFactory(options, 750, 580);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble');\n const notes = [\n note(f, ['c/4'], 'q', chords[0]),\n note(f, ['c/4'], 'q', chords[1]),\n note(f, ['c/4'], 'q', chords[2]),\n note(f, ['c/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 12 })\n .addText('F7')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 14 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('add 3', superscript)\n .addGlyphOrText('omit 9', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .addText('F7')\n .addGlyph('leftParenTall')\n .addGlyphOrText('b9', superscript)\n .addGlyphOrText('#11', subscript)\n .addGlyph('rightParenTall')\n .setReportWidth(false));\n draw(chords, 40);\n chords = [];\n chords.push(f\n .ChordSymbol({ fontSize: 10 })\n .setFontSize(10)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript));\n chords.push(f\n .ChordSymbol({ fontSize: 16 })\n .setFontSize(16)\n .addText('F7')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript));\n draw(chords, 140);\n chords = [\n f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript),\n f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript),\n ];\n draw(chords, 240);\n ok(true, 'Font Size Chord Symbol');\n}\nfunction kern(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['C/4'], 'q', chords[0]),\n note(f, ['C/4'], 'q', chords[1]),\n note(f, ['C/4'], 'q', chords[2]),\n note(f, ['C/4'], 'q', chords[3]),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false),\n f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript),\n f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript),\n ];\n draw(chords, 10);\n chords = [\n f.ChordSymbol().addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'),\n f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'),\n f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'),\n ];\n draw(chords, 110);\n chords = [\n f.ChordSymbol().addText('A').addGlyph('-'),\n f.ChordSymbol().addText('E').addGlyph('-'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 210);\n chords = [\n f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('V/V'),\n f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript),\n f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript),\n ];\n draw(chords, 310);\n ok(true, 'Chord Symbol Kerning Tests');\n}\nfunction top(options) {\n const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n // Helper function for creating StaveNotes.\n const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0);\n function draw(c1, c2, y) {\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0),\n note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1),\n ];\n const score = f.EasyScore();\n const voice = score.voice(notes, { time: '4/4' });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n }\n let chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n let chord2 = f\n .ChordSymbol({ reportWidth: false })\n .addText('C')\n .setHorizontal('left')\n .addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .addTextSuperscript('(')\n .addGlyphOrText('#11b9', superscript)\n .addTextSuperscript(')');\n chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4');\n draw(chord1, chord2, 240);\n ok(true, 'Top Chord Symbol');\n}\nfunction topJustify(options) {\n const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chord1, chord2, y) {\n const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0),\n note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript);\n let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh');\n draw(chord1, chord2, 40);\n chord1 = f\n .ChordSymbol({ hJustify: 'center' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', superscript);\n chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 140);\n chord1 = f\n .ChordSymbol({ hJustify: 'right' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 240);\n chord1 = f\n .ChordSymbol({ hJustify: 'left' })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', superscript)\n .addGlyphOrText('b9', subscript);\n chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.');\n draw(chord1, chord2, 340);\n ok(true, 'Top Chord Justified');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n draw(chords, 10);\n ok(true, 'Bottom Chord Symbol');\n}\nfunction bottomStemDown(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, y) {\n // Helper function to create a StaveNote with a ChordSymbol and the stem pointing down.\n const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0);\n const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords = [\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'),\n ];\n draw(chords, 10);\n ok(true, 'Bottom Stem Down Chord Symbol');\n}\nfunction doubleBottom(options) {\n const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260);\n const ctx = f.getContext();\n ctx.scale(1.5, 1.5);\n function draw(chords, chords2, y) {\n // Helper function to create a StaveNote with two ChordSymbols attached.\n const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0);\n const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]),\n note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2),\n note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]),\n note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n }\n const chords1 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'),\n f.ChordSymbol({ vJustify: 'bottom' }).addLine(12),\n f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'),\n ];\n const chords2 = [\n f.ChordSymbol({ vJustify: 'bottom' }).addText('T'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('D'),\n f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'),\n ];\n draw(chords1, chords2, 10);\n ok(true, '2 Bottom Chord Symbol');\n}\nVexFlowTests.register(ChordSymbolTests);\nexport { ChordSymbolTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst ClefTests = {\n Start() {\n QUnit.module('Clef');\n const run = VexFlowTests.runTests;\n run('Clef Test', draw);\n run('Clef End Test', drawEnd);\n run('Small Clef Test', drawSmall);\n run('Small Clef End Test', drawSmallEnd);\n run('Clef Change Test', drawClefChange);\n },\n};\nfunction draw(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble')\n .addClef('treble', 'default', '8va')\n .addClef('treble', 'default', '8vb')\n .addClef('alto')\n .addClef('tenor')\n .addClef('soprano')\n .addClef('bass')\n .addClef('bass', 'default', '8vb')\n .addClef('mezzo-soprano')\n .addClef('baritone-c')\n .addClef('baritone-f')\n .addClef('subbass')\n .addClef('percussion')\n .addClef('french')\n .addEndClef('treble');\n f.draw();\n ok(true, 'all pass');\n}\nfunction drawEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass')\n .addEndClef('treble')\n .addEndClef('treble', 'default', '8va')\n .addEndClef('treble', 'default', '8vb')\n .addEndClef('alto')\n .addEndClef('tenor')\n .addEndClef('soprano')\n .addEndClef('bass')\n .addEndClef('bass', 'default', '8vb')\n .addEndClef('mezzo-soprano')\n .addEndClef('baritone-c')\n .addEndClef('baritone-f')\n .addEndClef('subbass')\n .addEndClef('percussion')\n .addEndClef('french');\n f.draw();\n ok(true, 'all pass');\n}\nfunction drawSmall(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('treble', 'small')\n .addClef('treble', 'small', '8va')\n .addClef('treble', 'small', '8vb')\n .addClef('alto', 'small')\n .addClef('tenor', 'small')\n .addClef('soprano', 'small')\n .addClef('bass', 'small')\n .addClef('bass', 'small', '8vb')\n .addClef('mezzo-soprano', 'small')\n .addClef('baritone-c', 'small')\n .addClef('baritone-f', 'small')\n .addClef('subbass', 'small')\n .addClef('percussion', 'small')\n .addClef('french', 'small')\n .addEndClef('treble', 'small');\n f.draw();\n ok(true, 'all pass');\n}\nfunction drawSmallEnd(options) {\n const f = VexFlowTests.makeFactory(options, 800, 120);\n f.Stave()\n .addClef('bass', 'small')\n .addEndClef('treble', 'small')\n .addEndClef('treble', 'small', '8va')\n .addEndClef('treble', 'small', '8vb')\n .addEndClef('alto', 'small')\n .addEndClef('tenor', 'small')\n .addEndClef('soprano', 'small')\n .addEndClef('bass', 'small')\n .addEndClef('bass', 'small', '8vb')\n .addEndClef('mezzo-soprano', 'small')\n .addEndClef('baritone-c', 'small')\n .addEndClef('baritone-f', 'small')\n .addEndClef('subbass', 'small')\n .addEndClef('percussion', 'small')\n .addEndClef('french', 'small');\n f.draw();\n ok(true, 'all pass');\n}\nfunction drawClefChange(options) {\n const f = VexFlowTests.makeFactory(options, 800, 180);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }),\n f.ClefNote({ type: 'tenor', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }),\n f.ClefNote({ type: 'soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }),\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }),\n f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }),\n f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }),\n f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }),\n f.ClefNote({ type: 'subbass', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }),\n f.ClefNote({ type: 'french', options: { size: 'small' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }),\n f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }),\n ];\n const voice = f.Voice({ time: '12/4' }).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(ClefTests);\nexport { ClefTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nconst CrossBeamTests = {\n Start() {\n QUnit.module('CrossBeam');\n const run = VexFlowTests.runTests;\n const crossStaveTests = [];\n crossStaveTests.push({\n title: 'Single clef mixed 1',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, 1, -1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Single clef mixed 2',\n time: '3/4',\n voices: [\n {\n notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0, 0, 0],\n beammask: [1, -1, 1, -1, 0, -1, 1],\n clef: 'treble',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Mixed clef voice middle',\n time: '2/4',\n voices: [\n {\n notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }],\n stavemask: [0, 0, 0, 0, 0],\n beammask: [0, 0, 1, 1, 1],\n clef: 'treble',\n },\n {\n notes: [\n { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' },\n { notestring: 'E#4/16', clef: 'treble' },\n { notestring: 'C4/4', clef: 'bass' },\n ],\n stavemask: [1, 1, 1, 0, 1],\n beammask: [1, 1, 1, -1, 0],\n clef: 'bass',\n },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam up4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, 1, 1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam down4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, -1, -1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle1)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle2)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/8, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle3)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.push({\n title: 'Vertical alignment - cross stave (beam middle4)',\n time: '4/4',\n voices: [\n {\n notes: [\n { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' },\n { notestring: 'C4/16, D4/8', clef: 'bass' },\n ],\n beammask: [0, 0, 0, -1, -1, 1, 1],\n stavemask: [0, 0, 0, 0, 0, 1, 1],\n clef: 'treble',\n },\n { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' },\n ],\n });\n crossStaveTests.forEach((cst) => {\n run(cst.title, crossClef, cst);\n });\n },\n};\nfunction crossClef(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: { softmaxFactor: 100 },\n autoWidth: true,\n debugFormatter: false,\n });\n const testdata = options.params;\n const voicedata = testdata.voices;\n const stavemap = [];\n for (let i = 0; i < voicedata.length; ++i) {\n const clef = voicedata[i].clef;\n stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time));\n }\n for (let i = 0; i < voicedata.length; ++i) {\n const stavemask = voicedata[i].stavemask;\n let scoreNotes = [];\n const voicenotes = voicedata[i].notes;\n for (let k = 0; k < voicenotes.length; ++k) {\n scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef }));\n }\n const beammask = voicedata[i].beammask;\n let curGroup = [];\n const beamGroups = [];\n for (let j = 0; j < scoreNotes.length; ++j) {\n const note = scoreNotes[j];\n note.setStave(stavemap[stavemask[j]]);\n if (beammask[j] !== 0) {\n note.setStemDirection(beammask[j]);\n curGroup.push(note);\n }\n else {\n if (curGroup.length) {\n beamGroups.push(curGroup);\n curGroup = [];\n }\n }\n }\n if (curGroup.length) {\n beamGroups.push(curGroup);\n }\n beamGroups.forEach((bg) => {\n score.beam(bg);\n });\n if (scoreNotes.length > 0) {\n const voice = score.voice(scoreNotes, { time: testdata.time });\n system.addVoices([voice]);\n }\n }\n f.draw();\n ok(true);\n}\nVexFlowTests.register(CrossBeamTests);\nexport { CrossBeamTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Curve Tests\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { CurvePosition } from '../src/curve';\nconst CurveTests = {\n Start() {\n QUnit.module('Curve');\n const run = VexFlowTests.runTests;\n run('Simple Curve', simple);\n run('Rounded Curve', rounded);\n run('Thick Thin Curves', thickThin);\n run('Top Curve', top);\n },\n};\n/**\n * Helper function. Each test case passes in a set of notes and\n * a setupCurves() callback which uses Factory.Curve(...) to build the curves.\n * Curves can be used to indicate slurs (legato articulation).\n */\nfunction createTest(noteGroup1, noteGroup2, setupCurves) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 350, 200);\n const stave = factory.Stave({ y: 50 });\n const score = factory.EasyScore();\n // Use .reduce(concat) to flatten the two StaveNote[] into a single StaveNote[].\n const staveNotes = [\n score.beam(score.notes(...noteGroup1)),\n score.beam(score.notes(...noteGroup2)), // group 2\n ].reduce(concat);\n setupCurves(factory, staveNotes);\n const voices = [score.voice(staveNotes, { time: '4/4' })];\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n ok('Simple Curve');\n };\n}\nconst simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], // beamGroup1\n['d6/8, f5, d5, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 10 },\n { x: 0, y: 20 },\n ],\n },\n });\n});\nconst rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[3],\n options: {\n thickness: 10,\n x_shift: -10,\n y_shift: 30,\n cps: [\n { x: 0, y: 20 },\n { x: 0, y: 50 },\n ],\n },\n });\n f.Curve({\n from: notes[4],\n to: notes[7],\n options: {\n thickness: 0,\n cps: [\n { x: 0, y: 50 },\n { x: 0, y: 50 },\n ],\n },\n });\n});\nconst top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], // beamGroup1\n['d5/8, d6, d6, g5', { stem: 'down' }], // beamGroup2\n(f, notes) => {\n f.Curve({\n from: notes[0],\n to: notes[7],\n options: {\n x_shift: -3,\n y_shift: 10,\n position: CurvePosition.NEAR_TOP,\n position_end: CurvePosition.NEAR_HEAD,\n cps: [\n { x: 0, y: 20 },\n { x: 40, y: 80 },\n ],\n },\n });\n});\nVexFlowTests.register(CurveTests);\nexport { CurveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Dot Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst DotTests = {\n Start() {\n QUnit.module('Dot');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function for the basic test case below.\n */\nfunction showOneNote(note1, stave, ctx, x) {\n const modifierContext = new ModifierContext();\n note1.setStave(stave).addToModifierContext(modifierContext);\n new TickContext().addTickable(note1).preFormat().setX(x);\n note1.setContext(ctx).draw();\n Note.plotMetrics(ctx, note1, 140);\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 240);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }),\n new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }),\n new StaveNote({\n keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'],\n duration: '4',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }),\n new StaveNote({\n keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'],\n duration: '16',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'],\n duration: '16',\n stem_direction: 1,\n }),\n new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true });\n Dot.buildAndAttach([notes[8], notes[9]], { all: true });\n const beam = new Beam(notes.slice(notes.length - 2));\n for (let i = 0; i < notes.length; i++) {\n showOneNote(notes[i], stave, ctx, 30 + i * 65);\n const dots = notes[i].getModifiersByType('Dot');\n ok(dots.length > 0, 'Note ' + i + ' has dots');\n for (let j = 0; j < dots.length; ++j) {\n ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set');\n }\n }\n beam.setContext(ctx).draw();\n VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140);\n ok(true, 'Full Dot');\n}\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 750, 300);\n const stave = new Stave(30, 45, 700).setContext(ctx).draw();\n const notes1 = [\n new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 0 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 1 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[1]], { index: 2 });\n Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]);\n const notes2 = [\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }),\n ];\n Dot.buildAndAttach(notes2, { all: true });\n Dot.buildAndAttach([notes2[1]], { all: true });\n const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1);\n const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2);\n const formatter = new Formatter().joinVoices([voice1, voice2]);\n formatter.format([voice1, voice2], 700);\n voice1.draw(ctx, stave);\n voice2.draw(ctx, stave);\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 190));\n notes2.forEach((note) => Note.plotMetrics(ctx, note, 20));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220);\n ok(true, 'Full Dot');\n}\nVexFlowTests.register(DotTests);\nexport { DotTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// EasyScore Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Articulation } from '../src/articulation';\nimport { EasyScore } from '../src/easyscore';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { Parenthesis } from '../src/parenthesis';\nimport { StaveConnector } from '../src/staveconnector';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst EasyScoreTests = {\n Start() {\n QUnit.module('EasyScore');\n test('Basic', basic);\n test('Accidentals', accidentals);\n test('Durations', durations);\n test('Chords', chords);\n test('Dots', dots);\n test('Types', types);\n test('Options', options);\n const run = VexFlowTests.runTests;\n run('Draw Basic', drawBasicTest);\n run('Draw Different KeySignature', drawDiffKeysig);\n run('Draw Basic Muted', drawBasicMutedTest);\n run('Draw Basic Harmonic', drawBasicHarmonicTest);\n run('Draw Basic Slash', drawBasicSlashTest);\n run('Draw Ghostnote Basic', drawGhostBasicTest);\n run('Draw Ghostnote Dotted', drawGhostDottedTest);\n run('Draw Parenthesised', drawParenthesisedTest);\n run('Draw Accidentals', drawAccidentalsTest);\n run('Draw Beams', drawBeamsTest);\n run('Draw Tuplets', drawTupletsTest);\n run('Draw Dots', drawDotsTest);\n run('Draw Options', drawOptionsTest);\n run('Draw Fingerings', drawFingeringsTest);\n run('Keys', keys);\n },\n};\n/**\n * Use Function.prototype.bind() to create shortcut methods.\n * This can improve the readability of your EasyScore code.\n */\nfunction createShortcuts(score) {\n return {\n voice: score.voice.bind(score),\n notes: score.notes.bind(score),\n beam: score.beam.bind(score),\n tuplet: score.tuplet.bind(score),\n };\n}\n/**\n * Test case verifies:\n * - all strings in `mustPass` parse correctly\n * - all strings in `mustFail` fail to parse (i.e., Result.success is `false`).\n */\nfunction basic() {\n const score = new EasyScore();\n const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g'];\n const mustFail = ['', '()', '7', '(c#4 e5 g6'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction accidentals() {\n const score = new EasyScore();\n const mustPass = [\n 'c3',\n 'c##3, cb3',\n 'Cn3',\n 'f3//m',\n '(c##3 cbb3 cn3), cb3',\n 'cbbs7',\n 'cbb7',\n 'cbss7',\n 'cbs7',\n 'cb7',\n 'cdb7',\n 'cd7',\n 'c##7',\n 'c#7',\n 'cn7',\n 'c++-7',\n 'c++7',\n 'c+-7',\n 'c+7',\n '(cbs3 bbs3 dbs3), ebs3',\n '(cd7 cbb3 cn3), cb3',\n 'co7',\n 'ck7',\n ];\n const mustFail = [\n 'ct3',\n 'cdbb7',\n '(cq cbb3 cn3), cb3',\n '(cdd7 cbb3 cn3), cb3',\n 'cbbbs7',\n 'cbbss7',\n 'cbsss7',\n 'csbs7',\n 'cddb7',\n 'cddbb7',\n 'cdd7',\n 'c##b7',\n 'c#bs7',\n 'cnb#7',\n 'c+#+b-d7',\n 'c+--7',\n 'c++--7',\n 'c+++7',\n 'cbk7',\n 'cok7',\n 'cko7',\n 'c#s7',\n ];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction durations() {\n const score = new EasyScore();\n const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3'];\n const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction chords() {\n const score = new EasyScore();\n const mustPass = [\n '(c5)',\n '(c3 e0 g9)',\n '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32',\n '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)',\n '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)',\n ];\n const mustFail = ['(c)'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction dots() {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.',\n 'c##3/w.., cb3',\n 'f##3/s, cb3/q...',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3)., cb3',\n '(c5).',\n '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32',\n ];\n const mustFail = ['.', 'c.#', 'c#4./4'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction types() {\n const score = new EasyScore();\n const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4'];\n const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction options() {\n const score = new EasyScore();\n const mustPass = [\n 'c3/4.[foo=\"bar\"]',\n 'c##3/w.., cb3[id=\"blah\"]',\n 'c##3/q, cb3/32',\n '(c##3 cbb3 cn3).[blah=\"bod4o\"], cb3',\n '(c5)[fooooo=\"booo\"]',\n 'c#5[id=\"foobar\"]',\n ];\n const mustFail = ['.[', 'f##3/w[], cb3/q...'];\n mustPass.forEach((line) => equal(score.parse(line).success, true, line));\n mustFail.forEach((line) => equal(score.parse(line).success, false, line));\n}\nfunction drawBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c#5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawDiffKeysig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice(notes('c5/h., c5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4')\n .addKeySignature('D');\n system\n .addStave({\n voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass')\n .addTimeSignature('4/4');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawBasicMutedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })),\n voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawBasicHarmonicTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })),\n voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawBasicSlashTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })),\n voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawGhostBasicTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })),\n ...score.beam(score.notes('d5, c5', { stem: 'up' })),\n ], { time: '7/4' }),\n score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), {\n time: '7/4',\n }),\n ],\n });\n f.draw();\n expect(0);\n}\nfunction drawGhostDottedTest(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const score = f.EasyScore();\n const system = f.System();\n system.addStave({\n voices: [\n score.voice([\n ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }),\n ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })),\n ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }),\n ], { time: '8/4' }),\n score.voice([\n ...score.notes('f#4/4', { stem: 'down' }),\n ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })),\n ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }),\n ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })),\n ], { time: '8/4' }),\n ],\n });\n f.draw();\n expect(0);\n}\nfunction drawParenthesisedTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes1[0], notes1[3]]);\n const notes2 = notes('c#5/h., c5/q', { stem: 'down' });\n Parenthesis.buildAndAttach([notes2[0], notes2[1]]);\n system\n .addStave({\n voices: [voice(notes1), voice(notes2)],\n })\n .addClef('treble');\n const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' });\n Parenthesis.buildAndAttach(notes3);\n system\n .addStave({\n voices: [voice(notes3)],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawAccidentalsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 350);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })),\n voice(notes('c++-5/h., c++5/q', { stem: 'up' })),\n ],\n })\n .addClef('treble');\n system\n .addStave({\n voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))],\n })\n .addClef('bass');\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n expect(0);\n}\nfunction drawBeamsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, beam } = createShortcuts(score);\n system\n .addStave({\n voices: [\n voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })),\n voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]),\n ],\n })\n .addClef('treble');\n f.draw();\n expect(0);\n}\nfunction drawTupletsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes, tuplet, beam } = createShortcuts(score);\n // Voice 1, with stems pointed down.\n const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), {\n location: Tuplet.LOCATION_BOTTOM,\n });\n const v1_halfNote = notes('c4/h', { stem: 'down' });\n const v1 = voice([...v1_tuplet, ...v1_halfNote]);\n // Voice 2, with stems pointed up.\n const v2_halfNote = notes('c#5/h.', { stem: 'up' });\n const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' })));\n const v2 = voice([...v2_halfNote, ...v2_tuplet]);\n system.addStave({ voices: [v1, v2] }).addClef('treble');\n f.draw();\n expect(0);\n}\nfunction drawDotsTest(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const system = f.System();\n const { voice, notes } = createShortcuts(score);\n system\n .addStave({\n voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))],\n })\n .addClef('treble');\n f.draw();\n expect(0);\n}\nfunction drawOptionsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('B4/h[id=\"foobar\", class=\"red,bold\", stem=\"up\", articulations=\"staccato.below,tenuto\"], B4/q[articulations=\"accent.above\"], B4/q[stem=\"down\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0 = notes[0];\n const note1 = notes[1];\n const note0_modifier0 = note0.getModifiers()[0];\n const note0_modifier1 = note0.getModifiers()[1];\n const note1_modifier0 = note1.getModifiers()[0];\n equal(note0.getAttribute('id'), 'foobar');\n ok(note0.hasClass('red'));\n ok(note0.hasClass('bold'));\n equal(note0_modifier0.getCategory(), Articulation.CATEGORY);\n equal(note0_modifier0.type, 'a.');\n equal(note0_modifier0.getPosition(), Modifier.Position.BELOW);\n equal(note0_modifier1.getCategory(), Articulation.CATEGORY);\n equal(note0_modifier1.type, 'a-');\n equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE);\n equal(note0.getStemDirection(), Stem.UP);\n equal(note1_modifier0.getCategory(), Articulation.CATEGORY);\n equal(note1_modifier0.type, 'a>');\n equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n equal(notes[2].getStemDirection(), Stem.DOWN);\n}\nfunction drawFingeringsTest(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('C4/q[fingerings=\"1\"], E4[fingerings=\"3.above\"], G4[fingerings=\"5.below\"], (C4 E4 G4)[fingerings=\"1,3,5\"]');\n system.addStave({ voices: [score.voice(notes)] });\n f.draw();\n const note0_modifier0 = notes[0].getModifiers()[0];\n equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY);\n equal(note0_modifier0.getFretHandFinger(), '1');\n equal(note0_modifier0.getPosition(), Modifier.Position.LEFT);\n const note1_modifier0 = notes[1].getModifiers()[0];\n equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY);\n equal(note1_modifier0.getFretHandFinger(), '3');\n equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE);\n const note2_modifier0 = notes[2].getModifiers()[0];\n equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY);\n equal(note2_modifier0.getFretHandFinger(), '5');\n equal(note2_modifier0.getPosition(), Modifier.Position.BELOW);\n const note3_modifiers = notes[3].getModifiers();\n const note3_modifier0 = note3_modifiers[0];\n const note3_modifier1 = note3_modifiers[1];\n const note3_modifier2 = note3_modifiers[2];\n equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY);\n equal(note3_modifier0.getFretHandFinger(), '1');\n equal(note3_modifier0.getPosition(), Modifier.Position.LEFT);\n equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY);\n equal(note3_modifier1.getFretHandFinger(), '3');\n equal(note3_modifier1.getPosition(), Modifier.Position.LEFT);\n equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY);\n equal(note3_modifier2.getFretHandFinger(), '5');\n equal(note3_modifier2.getPosition(), Modifier.Position.LEFT);\n}\nfunction keys(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const system = f.System();\n const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' });\n system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass');\n f.draw();\n equal(notes[0].keys, 'c#/3');\n equal(notes[1].keys, 'c##/3');\n equal(notes[2].keys, 'cb/3');\n equal(notes[3].keys, 'cbb/3');\n equal(notes[4].keys, 'cn/3');\n for (let i = 5; i < notes.length; i++) {\n equal(notes[i].keys, 'c/3');\n }\n}\nVexFlowTests.register(EasyScoreTests);\nexport { EasyScoreTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Factory Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Factory } from '../src/factory';\nimport { Barline } from '../src/stavebarline';\nconst FactoryTests = {\n Start() {\n QUnit.module('Factory');\n test('Defaults', defaults);\n const run = VexFlowTests.runTests;\n run('Draw', draw);\n run('Draw Tab (repeat barlines must be aligned)', drawTab);\n },\n};\nfunction defaults() {\n // Throws RuntimeError: 'HTML DOM element not set in Factory'\n throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.');\n const factory = new Factory({\n renderer: { elementId: null, width: 700, height: 500 },\n });\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n const options = factory.options;\n equal(options.renderer.width, 700);\n equal(options.renderer.height, 500);\n equal(options.renderer.elementId, null);\n equal(options.stave.space, 10);\n}\nfunction draw(options) {\n const f = Factory.newFromElementId(options.elementId);\n f.Stave().setClef('treble');\n f.draw();\n expect(0);\n}\nfunction drawTab(options) {\n const factory = VexFlowTests.makeFactory(options, 500, 400);\n const system = factory.System({ width: 500 });\n const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN);\n const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave, voices });\n const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN);\n const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])];\n system.addStave({ stave: tabStave, voices: tabVoices });\n factory.draw();\n equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX());\n expect(1);\n}\nVexFlowTests.register(FactoryTests);\nexport { FactoryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Font Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Bend } from '../src/bend';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Element } from '../src/element';\nimport { Flow } from '../src/flow';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { PedalMarking } from '../src/pedalmarking';\nimport { StaveNote } from '../src/stavenote';\nimport { TextBracket } from '../src/textbracket';\nimport { TextNote } from '../src/textnote';\nimport { Voice } from '../src/voice';\nconst FontTests = {\n Start() {\n QUnit.module('Font');\n test('setFont', setFont);\n test('Parsing', fontParsing);\n test('Sizes', fontSizes);\n const run = VexFlowTests.runTests;\n run('Set Text Font to Georgia', setTextFontToGeorgia);\n run('Set Music Font to Petaluma', setMusicFontToPetaluma);\n },\n};\n/**\n * Test out the setFont method in various classes.\n */\nfunction setFont() {\n // Create a CanvasCntext and call setFont on it.\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n // Set the font and get the font to verify that it matches.\n // NOTE: Safari has a bug where it does not return the font-weight!\n // https://github.com/0xfe/vexflow/issues/1240#issuecomment-986504088\n const ctx = new CanvasContext(canvas.getContext('2d'));\n ctx.setFont('PetalumaScript', '100px', 'normal', 'italic');\n equal(ctx.font, 'italic 100px PetalumaScript');\n const voice = new Voice();\n // Many elements do not override the default Element.TEXT_FONT.\n propEqual(voice.fontInfo, Element.TEXT_FONT);\n voice.setFont('bold 32pt Arial');\n const fontInfo = voice.fontInfo;\n equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt');\n const flat = new Accidental('b');\n // eslint-disable-next-line\n // @ts-ignore access a protected member for testing purposes.\n equal(flat.textFont, undefined); // The internal instance variable .textFont is undefined by default.\n // Add italic to the default font as defined in Element.TEXT_FONT (since Accidental does not override TEXT_FONT).\n flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC);\n equal(flat.getFont(), 'italic 10pt Arial, sans-serif');\n // Anything that is not set will be reset to the defaults.\n flat.setFont(undefined, undefined, FontWeight.BOLD, undefined);\n equal(flat.getFont(), 'bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC);\n equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif');\n flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique');\n equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif');\n // '' is equivalent to 'normal'. Neither will be included in the CSS font string.\n flat.setFont(undefined, undefined, 'normal', '');\n equal(flat.getFont(), '10pt Arial, sans-serif');\n}\nfunction fontParsing() {\n const b = new Bend('1/2', true);\n const bFont = b.fontInfo;\n // Check the default font.\n equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF);\n equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE);\n equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL);\n equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL);\n const f1 = 'Roboto Slab, serif';\n const t = new TextNote({ duration: '4', font: { family: f1 } });\n equal(f1, t.fontInfo.family);\n const n1 = new StaveNote({ keys: ['e/5'], duration: '4' });\n const n2 = new StaveNote({ keys: ['c/5'], duration: '4' });\n const tb = new TextBracket({ start: n1, stop: n2 });\n const f2 = tb.fontInfo;\n equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15);\n equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC);\n // The line-height /3 is currently ignored.\n const f3 = Font.fromCSSString(`bold 1.5em/3 \"Lucida Sans Typewriter\", \"Lucida Console\", Consolas, monospace`);\n const f3SizeInPx = Font.convertSizeToPixelValue(f3.size);\n equal(f3SizeInPx, 24);\n}\nfunction fontSizes() {\n {\n const size = '17px';\n const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em;\n equal(sizeInEm, 1.0625);\n }\n {\n const size = '2em';\n const sizeInPx = Font.convertSizeToPixelValue(size);\n equal(sizeInPx, 32);\n }\n {\n const pedal = new PedalMarking([]);\n equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif');\n equal(pedal.fontSizeInPoints, 12);\n equal(pedal.fontSizeInPixels, 16);\n const doubledSizePx = pedal.fontSizeInPixels * 2; // Double the font size.\n equal(doubledSizePx, 32);\n const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); // Double the font size.\n equal(doubledSizePt, 24);\n equal(Font.scaleSize('1.5em', 3), '4.5em');\n }\n}\nfunction setTextFontToGeorgia(options) {\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice1 = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const defaultFont = TextNote.TEXT_FONT;\n // Set the default before we instantiate TextNote objects with the factory.\n TextNote.TEXT_FONT = {\n family: 'Georgia, Courier New, serif',\n size: 14,\n weight: 'bold',\n style: 'italic',\n };\n const voice2 = score.voice([\n factory\n .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' })\n .setJustification(TextNote.Justification.LEFT),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n factory.draw();\n // Restore the previous default, or else it will affect the rest of the tests.\n TextNote.TEXT_FONT = defaultFont;\n ok(true);\n}\nfunction setMusicFontToPetaluma(options) {\n Flow.setMusicFont('Petaluma');\n const factory = VexFlowTests.makeFactory(options, 400, 200);\n const stave = factory.Stave({ y: 40 });\n const score = factory.EasyScore();\n const voice = score.voice([\n factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }),\n factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }),\n ]);\n const formatter = factory.Formatter();\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n ok(true);\n}\nVexFlowTests.register(FontTests);\nexport { FontTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Formatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Bend } from '../src/bend';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { ModifierPosition } from '../src/modifier';\nimport { Note } from '../src/note';\nimport { Registry } from '../src/registry';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Tables } from '../src/tables';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst FormatterTests = {\n Start() {\n QUnit.module('Formatter');\n test('TickContext Building', buildTickContexts);\n const run = VexFlowTests.runTests;\n run('Penultimate Note Padding', penultimateNote);\n run('Whitespace and justify', rightJustify);\n run('Notehead padding', noteHeadPadding);\n run('Justification and alignment with accidentals', accidentalJustification);\n run('Long measure taking full space', longMeasureProblems);\n run('Vertical alignment - few unaligned beats', unalignedNoteDurations1);\n run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false });\n run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true });\n run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true });\n run('StaveNote - Justification', justifyStaveNotes);\n run('Notes with Tab', notesWithTab);\n run('Multiple Staves - Justified', multiStaves, { debug: true });\n run('Softmax', softMax);\n run('Mixtime', mixTime);\n run('Tight', tightNotes1);\n run('Tight 2', tightNotes2);\n run('Annotations', annotations);\n run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 });\n run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 });\n run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 });\n },\n};\n/** Calculate the glyph's width in the current music font. */\n// How is this different from Glyph.getWidth()? The numbers don't match up.\nfunction getGlyphWidth(glyphName) {\n // `38` seems to be the `font_scale` specified in many classes, such as\n // Accidental, Articulation, Ornament, Strokes. Does this mean `38pt`???\n //\n // However, tables.ts specifies:\n // NOTATION_FONT_SCALE: 39,\n // TABLATURE_FONT_SCALE: 39,\n const musicFont = Tables.currentMusicFont();\n const glyph = musicFont.getGlyphs()[glyphName];\n const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution();\n return widthInEm * 38 * Font.scaleToPxFrom.pt;\n}\nfunction buildTickContexts() {\n function createTickable(beat) {\n return new MockTickable().setTicks(beat);\n }\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables1 = [\n createTickable(BEAT).setWidth(10),\n createTickable(BEAT * 2).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const tickables2 = [\n createTickable(BEAT * 2).setWidth(10),\n createTickable(BEAT).setWidth(20),\n createTickable(BEAT).setWidth(30),\n ];\n const voice1 = new Voice(Flow.TIME4_4);\n const voice2 = new Voice(Flow.TIME4_4);\n voice1.addTickables(tickables1);\n voice2.addTickables(tickables2);\n const formatter = new Formatter();\n const tContexts = formatter.createTickContexts([voice1, voice2]);\n equal(tContexts.list.length, 4, 'Voices should have four tick contexts');\n throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception');\n ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth');\n equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices');\n formatter.preFormat();\n equal(formatter.getMinTotalWidth(), 88, 'Minimum total width');\n equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X');\n equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X');\n ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1');\n}\nfunction rightJustify(options) {\n const f = VexFlowTests.makeFactory(options, 1200, 150);\n const getTickables = (time, n, duration, duration2) => {\n const tickar = [];\n let i = 0;\n for (i = 0; i < n; ++i) {\n const dd = i === n - 1 ? duration2 : duration;\n tickar.push(new StaveNote({ keys: ['f/4'], duration: dd }));\n }\n return new Voice(time).addTickables(tickar);\n };\n const renderTest = (time, n, duration, duration2, x, width) => {\n const formatter = f.Formatter();\n const stave = f.Stave({ x, y: 20, width });\n // stave.addClef('treble').addTimeSignature('4/4');\n const voice = getTickables(time, n, duration, duration2);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n stave.draw();\n voice.draw(f.getContext(), stave);\n };\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300);\n renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300);\n renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300);\n ok(true);\n}\nfunction penultimateNote(options) {\n const f = VexFlowTests.makeFactory(options, 500, 550);\n const score = f.EasyScore();\n const staffWidth = 310;\n let system = undefined;\n let voices = [];\n let notes = [];\n let note = undefined;\n let stave = undefined;\n let y = 10;\n const draw = (softmax) => {\n system = f.System({\n width: staffWidth,\n y,\n formatOptions: { align_rests: true },\n details: { softmaxFactor: softmax },\n });\n notes = [];\n voices = [];\n note = score.notes('C4/8/r', { clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0];\n notes.push(note);\n note = score.notes('B4/4/r', {})[0];\n notes.push(note);\n voices.push(score.voice(notes).setMode(2));\n notes = [];\n stave = system.addStave({ voices: voices });\n stave.addClef('bass');\n stave.addTimeSignature('2/4');\n voices = [];\n f.draw();\n f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50);\n y += 100;\n };\n draw(15);\n draw(10);\n draw(5);\n draw(2);\n draw(1);\n ok(true);\n}\nfunction noteHeadPadding(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n score.set({ time: '9/8' });\n const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.');\n const beams = [new Beam(notes1.slice(0, 3), true)];\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const staveWidth = width + Stave.defaultPadding;\n const stave1 = f.Stave({ y: 50, width: staveWidth });\n const stave2 = f.Stave({ y: 150, width: staveWidth });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n beams.forEach((b) => b.setContext(f.getContext()).draw());\n ok(true);\n}\nfunction longMeasureProblems(options) {\n const registry = new Registry();\n Registry.enableDefaultRegistry(registry);\n const f = VexFlowTests.makeFactory(options, 1500, 300);\n const score = f.EasyScore();\n score.set({ time: '4/4' });\n const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8');\n const voice1 = new Voice().setMode(Voice.Mode.SOFT);\n const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' });\n const voice2 = new Voice().setMode(Voice.Mode.SOFT);\n voice2.addTickables(notes2);\n voice1.addTickables(notes1);\n const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding });\n const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding });\n stave1.draw();\n stave2.draw();\n voice1.draw(f.getContext(), stave1);\n voice2.draw(f.getContext(), stave2);\n ok(true);\n}\nfunction accidentalJustification(options) {\n const f = VexFlowTests.makeFactory(options, 600, 300);\n const score = f.EasyScore();\n const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16');\n const voice11 = score.voice(notes11, { time: '4/4' });\n const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8');\n const voice21 = score.voice(notes21, { time: '4/4' });\n let beams = Beam.generateBeams(notes11.slice(2));\n beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3)));\n beams = beams.concat(Beam.generateBeams(notes21.slice(3)));\n const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n const ctx = f.getContext();\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams.forEach((b) => b.setContext(ctx).draw());\n ok(true);\n}\nfunction unalignedNoteDurations1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 250);\n const score = f.EasyScore();\n const notes11 = [\n new StaveNote({ keys: ['a/4'], duration: '8' }),\n new StaveNote({ keys: ['b/4'], duration: '4' }),\n new StaveNote({ keys: ['b/4'], duration: '8' }),\n ];\n const notes21 = [\n new StaveNote({ keys: ['a/4'], duration: '16' }),\n new StaveNote({ keys: ['b/4.'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '8d' }),\n ];\n Dot.buildAndAttach([notes21[2]], { all: true });\n const ctx = f.getContext();\n const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT);\n const beams21 = Beam.generateBeams(notes21);\n const beams11 = Beam.generateBeams(notes11);\n const formatter = new Formatter();\n formatter.joinVoices([voice11]);\n formatter.joinVoices([voice21]);\n const width = formatter.preCalculateMinTotalWidth([voice11, voice21]);\n const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding });\n const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding });\n formatter.format([voice11, voice21], width);\n stave11.setContext(ctx).draw();\n stave21.setContext(ctx).draw();\n voice11.draw(ctx, stave11);\n voice21.draw(ctx, stave21);\n beams21.forEach((b) => b.setContext(ctx).draw());\n beams11.forEach((b) => b.setContext(ctx).draw());\n ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX());\n}\nfunction unalignedNoteDurations2(options) {\n const notes1 = [\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['b/4'], duration: '8r' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n new StaveNote({ keys: ['g/4'], duration: '16' }),\n new StaveNote({ keys: ['c/5'], duration: '16' }),\n new StaveNote({ keys: ['e/5'], duration: '16' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n new StaveNote({ keys: ['a/4'], duration: '16r' }),\n new StaveNote({ keys: ['e/4.'], duration: '8d' }),\n new StaveNote({ keys: ['e/4'], duration: '4' }),\n ];\n const f = VexFlowTests.makeFactory(options, 750, 280);\n const context = f.getContext();\n const voice1 = new Voice({ num_beats: 4, beat_value: 4 });\n voice1.addTickables(notes1);\n const voice2 = new Voice({ num_beats: 4, beat_value: 4 });\n voice2.addTickables(notes2);\n const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax });\n formatter.joinVoices([voice1]);\n formatter.joinVoices([voice2]);\n const width = formatter.preCalculateMinTotalWidth([voice1, voice2]);\n formatter.format([voice1, voice2], width);\n const stave1 = new Stave(10, 40, width + Stave.defaultPadding);\n const stave2 = new Stave(10, 100, width + Stave.defaultPadding);\n stave1.setContext(context).draw();\n stave2.setContext(context).draw();\n voice1.draw(context, stave1);\n voice2.draw(context, stave2);\n ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX());\n}\nfunction alignedMixedElements(options) {\n const f = VexFlowTests.makeFactory(options, 800, 500);\n const context = f.getContext();\n const stave = new Stave(10, 200, 400);\n const stave2 = new Stave(410, 200, 400);\n const notes = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new Accidental('##'), 0)\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const notes2 = [\n new StaveNote({ keys: ['c/5'], duration: '8' })\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0),\n new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN })\n .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0)\n .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0)\n .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0)\n .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0),\n new StaveNote({ keys: ['c/5'], duration: '8' }),\n ];\n const tuplet = new Tuplet(notes).setTupletLocation(-1);\n const tuplet2 = new Tuplet(notes2).setTupletLocation(1);\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave2, notes2);\n stave.setContext(context).draw();\n stave2.setContext(context).draw();\n tuplet.setContext(context).draw();\n tuplet2.setContext(context).draw();\n ok(true);\n}\nfunction justifyStaveNotes(options) {\n const f = VexFlowTests.makeFactory(options, 520, 280);\n const ctx = f.getContext();\n const score = f.EasyScore();\n let y = 30;\n function justifyToWidth(width) {\n f.Stave({ y: y }).addClef('treble');\n const voices = [\n score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })),\n score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })),\n ];\n f.Formatter()\n .joinVoices(voices)\n .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef')));\n // Show the the width of notes via a horizontal line with red, green, yellow, blue, gray indicators.\n voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); // Bottom line.\n voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); // Top Line\n y += 210;\n }\n justifyToWidth(520);\n f.draw();\n ok(true);\n}\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 420, 580);\n const score = f.EasyScore();\n let y = 10;\n function justifyToWidth(width) {\n const stave = f.Stave({ y: y }).addClef('treble');\n const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' }));\n y += 100;\n f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX());\n const tabVoice = score.voice([\n f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '8',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }),\n f.TabNote({\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 2, fret: 5 },\n ],\n duration: '4',\n }),\n ]);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width);\n y += 150;\n }\n justifyToWidth(0);\n justifyToWidth(300);\n f.draw();\n ok(true);\n}\nfunction multiStaves(options) {\n const f = VexFlowTests.makeFactory(options, 600, 400);\n const ctx = f.getContext();\n const score = f.EasyScore();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 Staves (one measure each).\n const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8');\n const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4');\n const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n let voices = [\n score.voice(notes11, { time: '6/8' }),\n score.voice(notes21, { time: '6/8' }),\n score.voice(notes31, { time: '6/8' }),\n ];\n let formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n let width = formatter.preCalculateMinTotalWidth(voices);\n formatter.format(voices, width);\n let beams = [\n new Beam(notes21.slice(0, 3), true),\n new Beam(notes21.slice(3, 6), true),\n new Beam(notes31.slice(0, 3), true),\n new Beam(notes31.slice(3, 6), true),\n ];\n const staveYs = [20, 130, 250];\n let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding;\n let staves = [\n f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'),\n f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'),\n ];\n f.StaveConnector({\n top_stave: staves[1],\n bottom_stave: staves[2],\n type: 'brace',\n });\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Draw 3 more staves (one measure each).\n // These are adjacent to the first set of staves, representing the second measure of each stave.\n const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem=\"down\"], d5/8[stem=\"down\"]');\n const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' });\n const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' });\n voices = [\n score.voice(notes12, { time: '6/8' }),\n score.voice(notes22, { time: '6/8' }),\n score.voice(notes32, { time: '6/8' }),\n ];\n formatter = f.Formatter();\n voices.forEach((v) => formatter.joinVoices([v]));\n width = formatter.preCalculateMinTotalWidth(voices);\n const staveX = staves[0].getX() + staves[0].getWidth();\n staveWidth = width + Stave.defaultPadding;\n staves = [\n f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }),\n f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }),\n ];\n formatter.format(voices, width);\n beams = [\n // Add beams to each group of 3 notes.\n new Beam(notes32.slice(0, 3), true),\n new Beam(notes32.slice(3, 6), true),\n ];\n for (let i = 0; i < staves.length; ++i) {\n staves[i].setContext(ctx).draw();\n voices[i].draw(ctx, staves[i]);\n voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20));\n }\n beams.forEach((beam) => beam.setContext(ctx).draw());\n ok(true);\n}\nfunction proportional(options) {\n const debug = options.params.debug;\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 775, 750);\n const system = f.System({\n x: 50,\n autoWidth: true,\n debugFormatter: debug,\n noJustification: !(options.params.justify === undefined && true),\n formatIterations: options.params.iterations,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const voices = [\n score.notes('c5/8, c5'),\n score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }),\n score.notes('c5/16, c5, c5, c5'),\n score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }),\n score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }),\n ];\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const createStave = (voice) => system\n .addStave({ voices: [voice], debugNoteMetrics: debug })\n .addClef('treble')\n .addTimeSignature('1/4');\n voices.map(createVoice).forEach(createStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n // Debugging: Show how many elements of each type we have added.\n // const typeMap = Registry.getDefaultRegistry().index.type;\n // const table = Object.keys(typeMap).map((typeName) => typeName + ': ' + Object.keys(typeMap[typeName]).length);\n // console.log(table);\n Registry.disableDefaultRegistry();\n ok(true);\n}\nfunction softMax(options) {\n const f = VexFlowTests.makeFactory(options, 550, 500);\n const textX = 450 / 0.8;\n f.getContext().scale(0.8, 0.8);\n function draw(y, factor) {\n const score = f.EasyScore();\n const system = f.System({\n x: 100,\n y,\n details: { softmaxFactor: factor },\n autoWidth: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score\n .notes('C#5/h, a4/q')\n .concat(score.beam(score.notes('Abb4/8, A4/8')))\n .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }),\n ],\n })\n .addClef('treble')\n .addTimeSignature('5/4');\n f.draw();\n f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50);\n ok(true);\n }\n draw(50, 1);\n draw(150, 2);\n draw(250, 5);\n draw(350, 10);\n draw(450, 15);\n}\nfunction mixTime(options) {\n const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n details: {},\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n ok(true);\n}\nfunction tightNotes1(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n details: { maxIterations: 10 },\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [\n score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n ok(true);\n}\nfunction tightNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 440, 250);\n f.getContext().scale(0.8, 0.8);\n const score = f.EasyScore();\n const system = f.System({\n autoWidth: true,\n debugFormatter: true,\n });\n system\n .addStave({\n voices: [\n score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system\n .addStave({\n voices: [score.voice(score.notes('B4/w'))],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n f.draw();\n ok(true);\n}\nfunction annotations(options) {\n const pageWidth = 916;\n const pageHeight = 600;\n const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight);\n const context = f.getContext();\n const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso'];\n const smar = [\n {\n sm: 5,\n width: 550,\n lyrics: lyrics1,\n title: '550px,softMax:5',\n },\n {\n sm: 5,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:5,different word order',\n },\n {\n sm: 10,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:10',\n },\n {\n sm: 15,\n width: 550,\n lyrics: lyrics2,\n title: '550px,softmax:15',\n },\n ];\n const rowSize = 140;\n const beats = 12;\n const beatsPer = 8;\n const beamGroup = 3;\n const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8'];\n const beams = [];\n let y = 40;\n smar.forEach((sm) => {\n const stave = new Stave(10, y, sm.width);\n const notes = [];\n let iii = 0;\n context.fillText(sm.title, 100, y);\n y += rowSize;\n durations.forEach((dd) => {\n const note = new StaveNote({ keys: ['b/4'], duration: dd });\n if (dd.indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n if (sm.lyrics.length > iii) {\n note.addModifier(new Annotation(sm.lyrics[iii])\n .setVerticalJustification(Annotation.VerticalJustify.BOTTOM)\n .setFont(Font.SERIF, 12, FontWeight.NORMAL));\n }\n notes.push(note);\n iii += 1;\n });\n notes.forEach((note) => {\n if (note.getDuration().indexOf('d') >= 0) {\n Dot.buildAndAttach([note], { all: true });\n }\n });\n // Don't beam the last group\n let notesToBeam = [];\n notes.forEach((note) => {\n if (note.getIntrinsicTicks() < 4096) {\n notesToBeam.push(note);\n if (notesToBeam.length >= beamGroup) {\n beams.push(new Beam(notesToBeam));\n notesToBeam = [];\n }\n }\n else {\n notesToBeam = [];\n }\n });\n const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes);\n const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]);\n fmt.format([voice1], sm.width - 11);\n stave.setContext(context).draw();\n voice1.draw(context, stave);\n beams.forEach((b) => b.setContext(context).draw());\n });\n ok(true);\n}\nVexFlowTests.register(FormatterTests);\nexport { FormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Fraction Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Fraction } from '../src/fraction';\nconst FractionTests = {\n Start() {\n QUnit.module('Fraction');\n test('Basic', basic);\n test('With Other Fractions', withOtherFractions);\n },\n};\nfunction basic() {\n const f_1_2 = new Fraction(1, 2);\n ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5');\n ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2');\n ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4');\n notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1');\n ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2');\n ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2');\n ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5');\n notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1');\n notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5');\n ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1');\n ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6');\n ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5');\n notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4');\n const f_05 = f_1_2.copy(0.5);\n strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2');\n strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === \"0.5/1\"');\n strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === \"1/2\"');\n const tF_n = f_05.clone();\n notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05');\n notEqual(tF_n, f_05, 'Fraction: tF_n != f_05');\n deepEqual(tF_n, f_05, 'tF_n deepEqual f_05');\n notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}');\n tF_n.subtract(-0.5);\n ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1');\n tF_n.add(1);\n ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2');\n tF_n.multiply(2);\n ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4');\n tF_n.divide(2);\n ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2');\n // Lowest common multiple.\n equal(Fraction.LCMM([]), 0);\n equal(Fraction.LCMM([17]), 17);\n equal(Fraction.LCMM([2, 5]), 10);\n equal(Fraction.LCMM([15, 3, 5]), 15);\n equal(Fraction.LCMM([2, 4, 6]), 12);\n equal(Fraction.LCMM([2, 3, 4, 5]), 60);\n equal(Fraction.LCMM([12, 15, 10, 75]), 300);\n // Greatest common divisor.\n equal(Fraction.GCD(0, 0), 0);\n equal(Fraction.GCD(0, 99), 99);\n equal(Fraction.GCD(77, 0), 77);\n equal(Fraction.GCD(42, 14), 14);\n equal(Fraction.GCD(15, 10), 5);\n}\nfunction withOtherFractions() {\n const f_1_2 = new Fraction(1, 2);\n const f_1_4 = new Fraction(1, 4);\n const f_1_8 = new Fraction(1, 8);\n const f_2 = new Fraction(2, 1);\n // IMPORTANT NOTE: Fraction methods modify the existing Fraction object.\n // They do not return new objects.\n // Use clone() if you don't want to modify the original object.\n const a = f_1_2.clone().multiply(f_1_2);\n ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4');\n const b = f_1_2.clone().divide(f_1_4);\n ok(b.equals(f_2), '1/2 / 1/4 == 2');\n const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); // 3/4\n const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2);\n ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)');\n equal(c.value(), 0.75, '3/4 == 0.75');\n const e = f_1_8.clone().add(f_1_4).add(f_1_8);\n ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2');\n}\nVexFlowTests.register(FractionTests);\nexport { FractionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GhostNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst GhostNoteTests = {\n Start() {\n QUnit.module('GhostNote');\n const run = VexFlowTests.runTests;\n run('GhostNote Basic', basic);\n run('GhostNote Dotted', dotted);\n },\n};\n/**\n * Helper function to set up the stave, easyscore, voice, and to format & draw.\n */\nfunction createTest(addItems) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 550);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n addItems(factory, score);\n const voices = factory.getVoices();\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n ok(true, 'all pass');\n };\n}\nconst basic = createTest((f, score) => {\n // Top Voice\n const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), {\n time: '7/4',\n });\n const notesTop = voiceTop.getTickables();\n f.Beam({ notes: notesTop.slice(4, 8) });\n f.Beam({ notes: notesTop.slice(8, 10) });\n // Bottom Voice\n score.voice([\n f.GhostNote({ duration: '2' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '4' }),\n f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }),\n f.GhostNote({ duration: '8' }),\n f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }),\n ], { time: '7/4' });\n});\n/**\n * A ghost note is invisible, but takes up space on the stave corresponding to its duration.\n * '4d' is a dotted quarter note, equivalent to a quarter + eighth note.\n */\nconst dotted = createTest((f, score) => {\n const voice1 = score.voice([\n f.GhostNote({ duration: '4d' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }),\n f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }),\n f.GhostNote({ duration: '2dd' }),\n f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }),\n ], { time: '8/4' });\n const voice2 = score.voice([\n f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }),\n f.GhostNote({ duration: '4dd' }),\n f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }),\n f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }),\n ], { time: '8/4' });\n const notes1 = voice1.getTickables();\n const notes2 = voice2.getTickables();\n const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0);\n addAccidental(notes1[1], 'bb');\n addAccidental(notes1[4], '#');\n addAccidental(notes1[7], 'n');\n addAccidental(notes2[0], '#');\n addAccidental(notes2[4], 'b');\n addAccidental(notes2[5], '#');\n addAccidental(notes2[7], 'n');\n f.Beam({ notes: notes1.slice(3, 6) });\n f.Beam({ notes: notes2.slice(1, 3) });\n f.Beam({ notes: notes2.slice(7, 9) });\n});\nVexFlowTests.register(GhostNoteTests);\nexport { GhostNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GlyphNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { ChordSymbol } from '../src/chordsymbol';\nimport { Glyph } from '../src/glyph';\nimport { Registry } from '../src/registry';\nimport { StaveConnector } from '../src/staveconnector';\nconst GlyphNoteTests = {\n Start() {\n QUnit.module('GlyphNote');\n const run = VexFlowTests.runTests;\n run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false });\n run('GlyphNote Positioning', basic, { debug: false, noPadding: false });\n run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true });\n run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true });\n },\n};\nfunction chordChanges(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 200);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const notes = [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }),\n ];\n const chord1 = f\n .ChordSymbol({ reportWidth: false })\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT });\n const chord2 = f\n .ChordSymbol()\n .addText('F7')\n .setHorizontal('left')\n .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT })\n .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT });\n notes[0].addModifier(chord1, 0);\n notes[2].addModifier(chord2, 0);\n const voice = score.voice(notes);\n system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n ok(true);\n}\nfunction basic(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 400);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const newVoice = (notes) => score.voice(notes, { time: '1/4' });\n const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })],\n [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })],\n [\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }),\n f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }),\n ],\n ];\n voices.map(newVoice).forEach(newStave);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n ok(true);\n}\nfunction repeatNote(options) {\n Registry.enableDefaultRegistry(new Registry());\n const f = VexFlowTests.makeFactory(options, 300, 500);\n const system = f.System({\n x: 50,\n width: 250,\n debugFormatter: options.params.debug,\n noPadding: options.params.noPadding,\n details: { alpha: options.params.alpha },\n });\n const score = f.EasyScore();\n const createVoice = (notes) => score.voice(notes, { time: '1/4' });\n const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug });\n const voices = [\n [f.RepeatNote('1')],\n [f.RepeatNote('2')],\n [f.RepeatNote('4')],\n [\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n f.RepeatNote('slash', { duration: '16' }),\n ],\n ];\n voices.map(createVoice).forEach(addStaveWithVoice);\n system.addConnector().setType(StaveConnector.type.BRACKET);\n f.draw();\n Registry.disableDefaultRegistry();\n ok(true);\n}\nVexFlowTests.register(GlyphNoteTests);\nexport { GlyphNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceNote Tests\n// TODO: In the 'stem' test (aka Grace Note Stem › SVG + Petaluma in flow.html), the Petaluma note heads are not scaled down properly.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nconst GraceNoteTests = {\n Start() {\n QUnit.module('Grace Notes');\n const run = VexFlowTests.runTests;\n run('Grace Note Basic', basic);\n run('With Articulation and Annotation on Parent Note', graceNoteModifiers);\n run('Grace Note Basic with Slurs', basicSlurred);\n run('Grace Note Stem', stem);\n run('Grace Note Stem with Beams 1', stemWithBeamed, {\n keys1: ['g/4'],\n stemDirection1: 1,\n keys2: ['d/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 2', stemWithBeamed, {\n keys1: ['a/3'],\n stemDirection1: 1,\n keys2: ['a/5'],\n stemDirection2: -1,\n });\n run('Grace Note Stem with Beams 3', stemWithBeamed, {\n keys1: ['c/4'],\n stemDirection1: 1,\n keys2: ['c/6'],\n stemDirection2: -1,\n });\n run('Grace Note Slash', slash);\n run('Grace Note Slash with Beams', slashWithBeams);\n run('Grace Notes Multiple Voices', multipleVoices);\n run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws);\n },\n};\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['g/4'], duration: '8' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteBasic');\n}\nfunction graceNoteModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const notes = [\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Accidental('#')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Annotation('words')),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0)\n .addModifier(new Articulation('a-').setPosition(3), 0)\n .addModifier(new Articulation('a>').setPosition(3), 0)\n .addModifier(new Articulation('a@a').setPosition(3), 0),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteModifiers');\n}\nfunction basicSlurred(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n const gracenotes0 = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['a/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4', 'g/4'], duration: '8' },\n { keys: ['a/4'], duration: '32' },\n { keys: ['b/4'], duration: '32' },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['a/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n ].map(f.GraceNote.bind(f));\n gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0);\n gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0);\n gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0);\n Dot.buildAndAttach([gracenotes4[0]], { all: true });\n const notes = [\n f\n .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true })\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0),\n f\n .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true })\n .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0),\n f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteBasic');\n}\n/**\n * Helper function for three tests below: stem, stemWithBeamed, slash.\n */\nconst createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => {\n const struct = { duration, slash };\n struct.stem_direction = stem_direction;\n struct.keys = keys;\n return noteBuilder(struct);\n};\n// Used in three tests below.\nconst durationsForStemTest = ['8', '16', '32', '64', '128'];\nfunction stem(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteBuilder, keys, stem_direction) {\n return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction));\n }\n function createNoteBlock(keys, stem_direction) {\n const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction);\n const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction);\n // Add a bunch of GraceNotes in front of the first StaveNote.\n staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0);\n return staveNotes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['g/4'], 1));\n voice.addTickables(createNoteBlock(['d/5'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteStem');\n}\nfunction stemWithBeamed(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) {\n const ret = [];\n durationsForStemTest.map((duration) => {\n const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction);\n ret.push(n0);\n ret.push(n1);\n if (notesToBeam) {\n notesToBeam.push([n0, n1]);\n }\n if (!isGrace) {\n beams.push(f.Beam({ notes: [n0, n1] }));\n }\n });\n return ret;\n }\n function createBeamedNoteBlock(keys, stem_direction, beams) {\n const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams);\n const notesToBeam = [];\n const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam);\n const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes });\n notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup));\n bnotes[0].addModifier(graceNoteGroup, 0);\n return bnotes;\n }\n const beams = [];\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams));\n voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteStem');\n}\nfunction slash(options) {\n const f = VexFlowTests.makeFactory(options, 700, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 650 });\n function createNotes(noteT, keys, stem_direction, slash) {\n return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash));\n }\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true);\n const duration = '8';\n const gns = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n ].map(f.GraceNote.bind(f));\n const notesToBeam = [];\n notesToBeam.push([gns[0], gns[1], gns[2]]);\n notesToBeam.push([gns[3], gns[4], gns[5]]);\n notesToBeam.push([gns[6], gns[7], gns[8]]);\n // Merge the two GraceNote[].\n graceNotes = graceNotes.concat(gns);\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes });\n notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteSlash');\n}\nfunction slashWithBeams(options) {\n const f = VexFlowTests.makeFactory(options, 800, 130);\n const stave = f.Stave({ x: 10, y: 10, width: 750 });\n function createNoteBlock(keys, stem_direction) {\n const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })];\n let allGraceNotes = [];\n const graceNotesToBeam = [];\n ['8', '16', '32', '64'].forEach(function (duration) {\n const graceNotes = [\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false },\n { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true },\n { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false },\n ].map(f.GraceNote.bind(f));\n graceNotesToBeam.push([graceNotes[0], graceNotes[1]]);\n graceNotesToBeam.push([graceNotes[2], graceNotes[3]]);\n graceNotesToBeam.push([graceNotes[4], graceNotes[5]]);\n allGraceNotes = allGraceNotes.concat(graceNotes);\n });\n const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes });\n graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g));\n notes[0].addModifier(graceNoteGroup, 0);\n return notes;\n }\n const voice = f.Voice().setStrict(false);\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1));\n voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1));\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'GraceNoteSlashWithBeams');\n}\nfunction multipleVoices(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n ok(true, 'Sixteenth Test');\n}\nfunction multipleVoicesMultipleDraws(options) {\n const f = VexFlowTests.makeFactory(options, 450, 140);\n const stave = f.Stave({ x: 10, y: 10, width: 450 });\n const notes = [\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['c/5'], stem_direction: 1, duration: '16' },\n { keys: ['d/5'], stem_direction: 1, duration: '16' },\n { keys: ['f/5'], stem_direction: 1, duration: '16' },\n { keys: ['e/5'], stem_direction: 1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const notes2 = [\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['c/4'], stem_direction: -1, duration: '16' },\n { keys: ['d/4'], stem_direction: -1, duration: '16' },\n { keys: ['f/4'], stem_direction: -1, duration: '16' },\n { keys: ['e/4'], stem_direction: -1, duration: '16' },\n ].map(f.StaveNote.bind(f));\n const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f));\n const gracenotes3 = [\n { keys: ['f/4'], duration: '32', stem_direction: -1 },\n { keys: ['e/4'], duration: '32', stem_direction: -1 },\n ].map(f.GraceNote.bind(f));\n const gracenotes4 = [\n { keys: ['f/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '32', stem_direction: 1 },\n { keys: ['e/5'], duration: '8', stem_direction: 1 },\n ].map(f.GraceNote.bind(f));\n gracenotes2[0].setStemDirection(-1);\n gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0);\n notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0);\n notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0);\n notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0);\n notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const voice2 = f.Voice().setStrict(false).addTickables(notes2);\n f.Beam({ notes: notes.slice(0, 4) });\n f.Beam({ notes: notes.slice(4, 8) });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave);\n f.draw();\n f.draw();\n ok(true, 'Seventeenth Test');\n}\nVexFlowTests.register(GraceNoteTests);\nexport { GraceNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// GraceTabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { GraceNoteGroup } from '../src/gracenotegroup';\nimport { GraceTabNote } from '../src/gracetabnote';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst GraceTabNoteTests = {\n Start() {\n QUnit.module('Grace Tab Notes');\n // TODO: Rename tests below since it is redundant with the module name.\n // Remove \"Grace Tab Note \"\n const run = VexFlowTests.runTests;\n run('Grace Tab Note Simple', simple);\n run('Grace Tab Note Slurred', slurred);\n },\n};\n// Helper functions to create TabNote and GraceTabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\nconst graceTabNote = (noteStruct) => new GraceTabNote(noteStruct);\n/**\n * Helper function to build a RenderContext and TabStave.\n */\nfunction setupContext(opts, ctxBuilder) {\n const context = ctxBuilder(opts.elementId, 350, 140);\n const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\nfunction simple(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' });\n const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n { positions: [{ str: 4, fret: 10 }], duration: '16' },\n ];\n const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }];\n const gracenote_group3 = [\n { positions: [{ str: 5, fret: 10 }], duration: '8' },\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n const gracenotes2 = gracenote_group2.map(graceTabNote);\n gracenotes2[0].setGhost(true);\n const gracenotes3 = gracenote_group3.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1), 0);\n note2.addModifier(new GraceNoteGroup(gracenotes2), 0);\n note3.addModifier(new GraceNoteGroup(gracenotes3), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1, note2, note3]);\n new Formatter().joinVoices([voice]).format([voice], 250);\n voice.draw(context, stave);\n ok(true, 'Simple Test');\n}\nfunction slurred(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder);\n const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' });\n const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n const gracenote_group0 = [\n { positions: [{ str: 4, fret: 9 }], duration: '8' },\n { positions: [{ str: 4, fret: 10 }], duration: '8' },\n ];\n const gracenote_group1 = [\n { positions: [{ str: 4, fret: 7 }], duration: '16' },\n { positions: [{ str: 4, fret: 8 }], duration: '16' },\n { positions: [{ str: 4, fret: 9 }], duration: '16' },\n ];\n const gracenotes0 = gracenote_group0.map(graceTabNote);\n const gracenotes1 = gracenote_group1.map(graceTabNote);\n note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0);\n note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0);\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables([note0, note1]);\n new Formatter().joinVoices([voice]).format([voice], 200);\n voice.draw(context, stave);\n ok(true, 'Slurred Test');\n}\nVexFlowTests.register(GraceTabNoteTests);\nexport { GraceTabNoteTests };\n","// vexflow-debug-with-tests.ts includes this module via:\n// export * from '../../tests';\n//\n// To add a new test module, add a new line:\n// `export * from './xxxx_tests';`\n// to this file that points to the new file `xxxx_tests.ts`.\n//\n// The test module needs to call VexFlowTests.register(...).\n// For example, in annotation_tests.ts, the last two lines are:\n// VexFlowTests.register(AnnotationTests);\n// export { AnnotationTests };\n//\n// In vexflow_test_helpers.ts: VexFlowTests.run() will run all registered tests.\n//\n// To iterate faster during development, you can comment out most of this file\n// and focus on just testing the module(s) you are currently working on.\nexport * from './accidental_tests';\nexport * from './annotation_tests';\nexport * from './articulation_tests';\nexport * from './auto_beam_formatting_tests';\nexport * from './bach_tests';\nexport * from './barline_tests';\nexport * from './beam_tests';\nexport * from './bend_tests';\nexport * from './boundingbox_tests';\nexport * from './boundingboxcomputation_tests';\nexport * from './chordsymbol_tests';\nexport * from './clef_tests';\nexport * from './crossbeam_tests';\nexport * from './curve_tests';\nexport * from './dot_tests';\nexport * from './easyscore_tests';\nexport * from './factory_tests';\nexport * from './font_tests';\nexport * from './formatter_tests';\nexport * from './fraction_tests';\nexport * from './ghostnote_tests';\nexport * from './glyphnote_tests';\nexport * from './gracenote_tests';\nexport * from './gracetabnote_tests';\nexport * from './key_clef_tests';\nexport * from './keymanager_tests';\nexport * from './keysignature_tests';\nexport * from './modifier_tests';\nexport * from './multimeasurerest_tests';\nexport * from './music_tests';\nexport * from './notehead_tests';\nexport * from './notesubgroup_tests';\nexport * from './offscreencanvas_tests';\nexport * from './ornament_tests';\nexport * from './parser_tests';\nexport * from './pedalmarking_tests';\nexport * from './percussion_tests';\nexport * from './registry_tests';\nexport * from './renderer_tests';\nexport * from './rests_tests';\nexport * from './rhythm_tests';\nexport * from './stave_tests';\nexport * from './staveconnector_tests';\nexport * from './stavehairpin_tests';\nexport * from './staveline_tests';\nexport * from './stavemodifier_tests';\nexport * from './stavenote_tests';\nexport * from './stavetie_tests';\nexport * from './stringnumber_tests';\nexport * from './strokes_tests';\nexport * from './style_tests';\nexport * from './tabnote_tests';\nexport * from './tabslide_tests';\nexport * from './tabstave_tests';\nexport * from './tabtie_tests';\nexport * from './textbracket_tests';\nexport * from './textformatter_tests';\nexport * from './textnote_tests';\nexport * from './threevoice_tests';\nexport * from './tickcontext_tests';\nexport * from './timesignature_tests';\nexport * from './tremolo_tests';\nexport * from './tuning_tests';\nexport * from './tuplet_tests';\nexport * from './typeguard_tests';\nexport * from './vf_prefix_tests';\nexport * from './vibrato_tests';\nexport * from './vibratobracket_tests';\nexport * from './voice_tests';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Clef Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nconst ClefKeySignatureTests = {\n Start() {\n QUnit.module('Clef Keys');\n // Removed an identical 'Key Parser Test'. See keysignature_tests.ts.\n const run = VexFlowTests.runTests;\n run('Major Key Clef Test', keys, { majorKeys: true });\n run('Minor Key Clef Test', keys, { majorKeys: false });\n run('Stave Helper', staveHelper);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const ksPadding = 10; // hard-coded in keysignature.ts\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding };\n};\nfunction keys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding;\n const clefs = [\n 'treble',\n 'soprano',\n 'mezzo-soprano',\n 'alto',\n 'tenor',\n 'baritone-f',\n 'baritone-c',\n 'bass',\n 'french',\n 'subbass',\n 'percussion',\n ];\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length);\n const staves = [];\n const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS;\n let i;\n let flat;\n let sharp;\n let keySig;\n const yOffsetForFlatStaves = 10 + 80 * clefs.length;\n for (i = 0; i < clefs.length; i++) {\n // Render all the sharps first, then all the flats:\n staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth);\n staves[i].addClef(clefs[i]);\n staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth);\n staves[i + clefs.length].addClef(clefs[i]);\n for (flat = 0; flat < 8; flat++) {\n keySig = new KeySignature(keys[flat]);\n keySig.addToStave(staves[i]);\n }\n for (sharp = 8; sharp < keys.length; sharp++) {\n keySig = new KeySignature(keys[sharp]);\n keySig.addToStave(staves[i + clefs.length]);\n }\n }\n Stave.formatBegModifiers(staves);\n for (i = 0; i < clefs.length; i++) {\n staves[i].setContext(ctx);\n staves[i].draw();\n staves[i + clefs.length].setContext(ctx);\n staves[i + clefs.length].draw();\n }\n ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, flatTestWidth);\n const stave3 = new Stave(10, 170, sharpTestWidth);\n const stave4 = new Stave(10, 260, sharpTestWidth);\n const keys = MAJOR_KEYS;\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('tenor');\n for (let n = 0; n < 8; ++n) {\n stave1.addKeySignature(keys[n]);\n stave2.addKeySignature(keys[n]);\n }\n for (let i = 8; i < keys.length; ++i) {\n stave3.addKeySignature(keys[i]);\n stave4.addKeySignature(keys[i]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(ClefKeySignatureTests);\nexport { ClefKeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Key Management Tests\n//\n// TODO: KeyManager.getAccidental(key) specifies that the return value's .accidental property is string | undefined.\n// However, we check it against null.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/index';\nconst KeyManagerTests = {\n Start() {\n QUnit.module('KeyManager');\n test('Valid Notes', works);\n test('Select Notes', selectNotes);\n },\n};\nfunction works() {\n const manager = new KeyManager('g');\n equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('a');\n equal(manager.getAccidental('c').accidental, '#');\n equal(manager.getAccidental('a').accidental, null);\n equal(manager.getAccidental('f').accidental, '#');\n manager.setKey('A');\n equal(manager.getAccidental('c').accidental, '#');\n equal(manager.getAccidental('a').accidental, null);\n equal(manager.getAccidental('f').accidental, '#');\n}\nfunction selectNotes() {\n const manager = new KeyManager('f');\n equal(manager.selectNote('bb').note, 'bb');\n equal(manager.selectNote('bb').accidental, 'b');\n equal(manager.selectNote('g').note, 'g');\n equal(manager.selectNote('g').accidental, null);\n equal(manager.selectNote('b').note, 'b');\n equal(manager.selectNote('b').accidental, null);\n equal(manager.selectNote('a#').note, 'bb');\n equal(manager.selectNote('g#').note, 'g#');\n // Changes have no effect?\n equal(manager.selectNote('g#').note, 'g#');\n equal(manager.selectNote('bb').note, 'bb');\n equal(manager.selectNote('bb').accidental, 'b');\n equal(manager.selectNote('g').note, 'g');\n equal(manager.selectNote('g').accidental, null);\n equal(manager.selectNote('b').note, 'b');\n equal(manager.selectNote('b').accidental, null);\n equal(manager.selectNote('a#').note, 'bb');\n equal(manager.selectNote('g#').note, 'g#');\n // Changes should propagate\n manager.reset();\n equal(manager.selectNote('g#').change, true);\n equal(manager.selectNote('g#').change, false);\n equal(manager.selectNote('g').change, true);\n equal(manager.selectNote('g').change, false);\n equal(manager.selectNote('g#').change, true);\n manager.reset();\n let note = manager.selectNote('bb');\n equal(note.change, false);\n equal(note.accidental, 'b');\n note = manager.selectNote('g');\n equal(note.change, false);\n equal(note.accidental, null);\n note = manager.selectNote('g#');\n equal(note.change, true);\n equal(note.accidental, '#');\n note = manager.selectNote('g');\n equal(note.change, true);\n equal(note.accidental, null);\n note = manager.selectNote('g');\n equal(note.change, false);\n equal(note.accidental, null);\n note = manager.selectNote('g#');\n equal(note.change, true);\n equal(note.accidental, '#');\n}\nVexFlowTests.register(KeyManagerTests);\nexport { KeyManagerTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Key Signature Tests\n//\nimport { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Glyph } from '../src/glyph';\nimport { KeySignature } from '../src/keysignature';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nconst KeySignatureTests = {\n Start() {\n QUnit.module('KeySignature');\n test('Key Parser Test', parser);\n const run = VexFlowTests.runTests;\n run('Major Key Test', majorKeys);\n run('Minor Key Test', minorKeys);\n run('Stave Helper', staveHelper);\n run('Cancelled key test', majorKeysCanceled);\n run('Cancelled key (for each clef) test', keysCanceledForEachClef);\n run('Altered key test', majorKeysAltered);\n run('End key with clef test', endKeyWithClef);\n run('Key Signature Change test', changeKey);\n },\n};\nconst fontWidths = () => {\n const glyphScale = 39; // default font scale\n const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1;\n const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1;\n const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2;\n const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; // widest clef\n return { sharpWidth, flatWidth, naturalWidth, clefWidth };\n};\nfunction parser() {\n expect(11);\n function catchError(spec) {\n throws(() => Flow.keySignature(spec), /BadKeySignature/);\n }\n catchError('asdf');\n catchError('D!');\n catchError('E#');\n catchError('D#');\n catchError('#');\n catchError('b');\n catchError('Kb');\n catchError('Fb');\n catchError('Dbm');\n catchError('B#m');\n Flow.keySignature('B');\n Flow.keySignature('C');\n Flow.keySignature('Fm');\n Flow.keySignature('Ab');\n Flow.keySignature('Abm');\n Flow.keySignature('F#');\n Flow.keySignature('G#m');\n ok(true, 'all pass');\n}\nfunction majorKeys(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n ok(true, 'all pass');\n}\nfunction majorKeysCanceled(options, contextBuilder) {\n const scale = 0.9;\n const w = fontWidths();\n const flatPadding = 18;\n const sharpPadding = 20;\n const flatTestCases = 8;\n const sharpTestCases = 7;\n // magic numbers are the numbers of that symbol that appear in the test case\n const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth;\n const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth;\n const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth)));\n const ctx = contextBuilder(options.elementId, maxWidth + 100, 500);\n ctx.scale(scale, scale);\n const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble');\n const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble');\n const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble');\n const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('Cb');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('C#');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.cancelKey('E');\n keySig.setPadding(flatPadding);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.cancelKey('Ab');\n keySig.setPadding(sharpPadding);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n ok(true, 'all pass');\n}\nfunction keysCanceledForEachClef(options, contextBuilder) {\n const scale = 0.8;\n const w = fontWidths();\n const keyPadding = 10;\n const keys = ['C#', 'Cb'];\n const flatsKey = [7, 14];\n const sharpsKey = [14, 7];\n const natsKey = [7, 7];\n const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth;\n const ctx = contextBuilder(options.elementId, max + 100, 380);\n ctx.scale(scale, scale);\n const x = 20;\n let y = 20;\n let tx = x;\n ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) {\n keys.forEach((key, keyIx) => {\n const cancelKey = keys[(keyIx + 1) % 2];\n const width = flatsKey[keyIx] * w.flatWidth +\n natsKey[keyIx] * w.naturalWidth +\n sharpsKey[keyIx] * w.sharpWidth +\n keyPadding * 3 +\n w.clefWidth +\n Stave.defaultPadding;\n const stave = new Stave(tx, y, width);\n stave.setClef(clef);\n stave.addKeySignature(cancelKey);\n stave.addKeySignature(key, cancelKey);\n stave.addKeySignature(key);\n stave.setContext(ctx).draw();\n tx += width;\n });\n tx = x;\n y += 80;\n });\n ok(true, 'all pass');\n}\nfunction majorKeysAltered(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 780, 500);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 750).addClef('treble');\n const stave2 = new Stave(10, 90, 750).addClef('treble');\n const stave3 = new Stave(10, 170, 750).addClef('treble');\n const stave4 = new Stave(10, 250, 750).addClef('treble');\n const keys = MAJOR_KEYS;\n let keySig = null;\n let i;\n let n;\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['bs', 'bs']);\n keySig.setPadding(18);\n keySig.addToStave(stave1);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['+', '+', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave2);\n }\n for (i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.alterKey(['n', 'bs', 'bb']);\n keySig.setPadding(18);\n keySig.addToStave(stave3);\n }\n for (n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.alterKey(['++', '+', 'n', '+']);\n keySig.setPadding(20);\n keySig.addToStave(stave4);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n stave3.setContext(ctx);\n stave3.draw();\n stave4.setContext(ctx);\n stave4.draw();\n ok(true, 'all pass');\n}\nfunction minorKeys(options, contextBuilder) {\n const accidentalCount = 28; // total number in all the keys\n const w = fontWidths();\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MINOR_KEYS;\n let keySig = null;\n for (let i = 0; i < 8; ++i) {\n keySig = new KeySignature(keys[i]);\n keySig.addToStave(stave1);\n }\n for (let n = 8; n < keys.length; ++n) {\n keySig = new KeySignature(keys[n]);\n keySig.addToStave(stave2);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n ok(true, 'all pass');\n}\nfunction endKeyWithClef(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 200);\n ctx.scale(0.9, 0.9);\n const stave1 = new Stave(10, 10, 350);\n stave1\n .setKeySignature('G')\n .setBegBarType(BarlineType.REPEAT_BEGIN)\n .setEndBarType(BarlineType.REPEAT_END)\n .setClef('treble')\n .addTimeSignature('4/4')\n .setEndClef('bass')\n .setEndKeySignature('Cb');\n const stave2 = new Stave(10, 90, 350);\n stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G');\n stave1.setContext(ctx).draw();\n stave2.setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction staveHelper(options, contextBuilder) {\n const w = fontWidths();\n const accidentalCount = 28; // total number in all the keys\n const casePadding = 10; // hard-coded in staveModifier\n const testCases = 7; // all keys, but includes key of C\n const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding;\n const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding;\n const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240);\n const stave1 = new Stave(10, 10, flatTestWidth);\n const stave2 = new Stave(10, 90, sharpTestWidth);\n const keys = MAJOR_KEYS;\n for (let i = 0; i < 8; ++i) {\n stave1.addKeySignature(keys[i]);\n }\n for (let n = 8; n < keys.length; ++n) {\n stave2.addKeySignature(keys[n]);\n }\n stave1.setContext(ctx);\n stave1.draw();\n stave2.setContext(ctx);\n stave2.draw();\n ok(true, 'all pass');\n}\nfunction changeKey(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n // The previous code was buggy: f.Stave(10, 10, 800), even though Factory.Stave() only accepts 1 argument.\n const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|');\n const voice = f\n .Voice()\n .setStrict(false)\n .addTickables([\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', cancelKey: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'Bb' }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n f.BarNote(),\n f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }),\n f.StaveNote({ keys: ['c/4'], duration: '1' }),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(KeySignatureTests);\nexport { KeySignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Mocks\nimport { Fraction } from '../src/fraction';\nimport { Tickable } from '../src/tickable';\nclass MockTickable extends Tickable {\n constructor() {\n super(...arguments);\n this.ticks = new Fraction(1, 1);\n this.width = 0;\n this.ignore_ticks = false;\n }\n init() {\n // DO NOTHING.\n }\n getX() {\n // eslint-disable-next-line\n return this.tickContext.getX();\n }\n getIntrinsicTicks() {\n return this.ticks.value();\n }\n getTicks() {\n return this.ticks;\n }\n setTicks(t) {\n this.ticks = new Fraction(t, 1);\n return this;\n }\n // Called by TickContext.preFormat().\n getMetrics() {\n return {\n width: 0,\n glyphWidth: 0,\n notePx: this.width,\n modLeftPx: 0,\n modRightPx: 0,\n leftDisplacedHeadPx: 0,\n rightDisplacedHeadPx: 0,\n glyphPx: 0,\n };\n }\n getWidth() {\n return this.width;\n }\n setWidth(w) {\n this.width = w;\n return this;\n }\n setVoice(v) {\n this.voice = v;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n setTickContext(tc) {\n this.tickContext = tc;\n return this;\n }\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n preFormat() {\n // DO NOTHING.\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\nexport { MockTickable };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// ModifierContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Modifier, ModifierContext } from '../src/index';\nconst ModifierContextTests = {\n Start() {\n QUnit.module('ModifierContext');\n test('Modifier Width Test', width);\n test('Modifier Management', management);\n },\n};\nfunction width() {\n const mc = new ModifierContext();\n equal(mc.getWidth(), 0, 'New modifier context has no width');\n}\nfunction management() {\n const mc = new ModifierContext();\n const modifier1 = new Modifier();\n const modifier2 = new Modifier();\n mc.addMember(modifier1);\n mc.addMember(modifier2);\n const modifiers = mc.getMembers(Modifier.CATEGORY);\n equal(modifiers.length, 2, 'Added two modifiers');\n}\nVexFlowTests.register(ModifierContextTests);\nexport { ModifierContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// MultiMeasureRest Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nconst MultiMeasureRestTests = {\n Start() {\n QUnit.module('MultiMeasureRest');\n const run = VexFlowTests.runTests;\n run('Simple Test', simple);\n run('Stave with modifiers Test', staveWithModifiers);\n },\n};\nfunction simple(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 300);\n const line_spacing_15px = { options: { spacing_between_lines_px: 15 } };\n // Each item below is an array that contains:\n // item[0] => staveParams to adjust vertical spacing between lines\n // item[1] => multiMeasureRestParams\n // eslint-disable-next-line\n const params = [\n [{}, { number_of_measures: 2, show_number: false }],\n [{}, { number_of_measures: 2 }],\n [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }],\n [{}, { number_of_measures: 1, use_symbols: true }],\n [{}, { number_of_measures: 2, use_symbols: true }],\n [{}, { number_of_measures: 3, use_symbols: true }],\n [{}, { number_of_measures: 4, use_symbols: true }],\n [{}, { number_of_measures: 5, use_symbols: true }],\n [{}, { number_of_measures: 6, use_symbols: true }],\n [{}, { number_of_measures: 7, use_symbols: true }],\n [{}, { number_of_measures: 8, use_symbols: true }],\n [{}, { number_of_measures: 9, use_symbols: true }],\n [{}, { number_of_measures: 10, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: true }],\n [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }],\n [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }],\n [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }],\n [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }],\n [line_spacing_15px, { number_of_measures: 12 }],\n [line_spacing_15px, { number_of_measures: 9, use_symbols: true }],\n [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n },\n ],\n [\n line_spacing_15px,\n {\n number_of_measures: 9,\n spacing_between_lines_px: 15,\n use_symbols: true,\n number_glyph_point: 40 * 1.5,\n semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5,\n },\n ],\n ];\n const staveWidth = 100;\n let x = 0;\n let y = 0;\n const mmRests = params.map((param) => {\n if (x + staveWidth * 2 > width) {\n x = 0;\n y += 80;\n }\n const staveParams = param[0];\n const mmRestParams = param[1];\n staveParams.x = x;\n staveParams.y = y;\n staveParams.width = staveWidth;\n x += staveWidth;\n const stave = f.Stave(staveParams);\n return f.MultiMeasureRest(mmRestParams).setStave(stave);\n });\n f.draw();\n const xs = mmRests[0].getXs();\n // eslint-disable-next-line\n const strY = mmRests[0].getStave().getYForLine(-0.5);\n const str = 'TACET';\n const context = f.getContext();\n context.save();\n context.setFont(Font.SERIF, 16, 'bold');\n const metrics = context.measureText(str);\n context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY);\n context.restore();\n ok(true, 'Simple Test');\n}\nfunction staveWithModifiers(options) {\n const width = 910;\n const f = VexFlowTests.makeFactory(options, width, 200);\n let x = 0;\n let y = 0;\n // eslint-disable-next-line\n const params = [\n [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }],\n [\n { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } },\n { number_of_measures: 5, use_symbols: true },\n ],\n ];\n params.forEach((param) => {\n const staveOptions = param[0];\n // eslint-disable-next-line\n const staveParams = staveOptions.params;\n const mmrestParams = param[1];\n if (x + staveParams.width > width) {\n x = 0;\n y += 80;\n }\n staveParams.x = x;\n x += staveParams.width;\n staveParams.y = y;\n const stave = f.Stave(staveParams);\n if (staveOptions.clef) {\n stave.addClef(staveOptions.clef);\n }\n if (staveOptions.timeSig) {\n stave.addTimeSignature(staveOptions.timeSig);\n }\n if (staveOptions.keySig) {\n stave.addKeySignature(staveOptions.keySig);\n }\n if (staveOptions.endClef) {\n stave.addEndClef(staveOptions.endClef);\n }\n if (staveOptions.endKeySig) {\n stave.setEndKeySignature(staveOptions.endKeySig);\n }\n if (staveOptions.endTimeSig) {\n stave.setEndTimeSignature(staveOptions.endTimeSig);\n }\n return f.MultiMeasureRest(mmrestParams).setStave(stave);\n });\n f.draw();\n ok(true, 'Stave with modifiers Test');\n}\nVexFlowTests.register(MultiMeasureRestTests);\nexport { MultiMeasureRestTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Music Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { KeyManager } from '../src/keymanager';\nimport { Music } from '../src/music';\nconst MusicTests = {\n Start() {\n QUnit.module('MusicTests');\n test('Valid Notes', validNotes);\n test('Valid Keys', validKeys);\n test('Note Values', noteValue);\n test('Interval Values', intervalValue);\n test('Relative Notes', relativeNotes);\n test('Relative Note Names', relativeNoteNames);\n test('Canonical Notes', canonicalNotes);\n test('Canonical Intervals', canonicalIntervals);\n test('Scale Tones', scaleTones);\n test('Scale Intervals', scaleIntervals);\n },\n};\nfunction validNotes() {\n expect(10);\n const music = new Music();\n let parts = music.getNoteParts('c');\n equal(parts.root, 'c');\n equal(parts.accidental, null);\n // getNoteParts() converts its argument to lowercase.\n parts = music.getNoteParts('C');\n equal(parts.root, 'c');\n equal(parts.accidental, null);\n parts = music.getNoteParts('c#');\n equal(parts.root, 'c');\n equal(parts.accidental, '#');\n parts = music.getNoteParts('c##');\n equal(parts.root, 'c');\n equal(parts.accidental, '##');\n throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r');\n throws(() => music.getNoteParts(''), /BadArguments/, \"Invalid note: ''\");\n}\nfunction validKeys() {\n expect(18);\n const music = new Music();\n let parts = music.getKeyParts('c');\n equal(parts.root, 'c');\n equal(parts.accidental, null);\n equal(parts.type, 'M');\n parts = music.getKeyParts('d#');\n equal(parts.root, 'd');\n equal(parts.accidental, '#');\n equal(parts.type, 'M');\n parts = music.getKeyParts('fbm');\n equal(parts.root, 'f');\n equal(parts.accidental, 'b');\n equal(parts.type, 'm');\n parts = music.getKeyParts('c#mel');\n equal(parts.root, 'c');\n equal(parts.accidental, '#');\n equal(parts.type, 'mel');\n parts = music.getKeyParts('g#harm');\n equal(parts.root, 'g');\n equal(parts.accidental, '#');\n equal(parts.type, 'harm');\n throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r');\n throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`);\n throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m');\n}\nfunction noteValue() {\n expect(3);\n const music = new Music();\n let note = music.getNoteValue('c');\n equal(note, 0);\n throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name');\n note = music.getNoteValue('f#');\n equal(note, 6);\n}\nfunction intervalValue() {\n expect(2);\n const music = new Music();\n const value = music.getIntervalValue('b2');\n equal(value, 1);\n throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name');\n}\nfunction relativeNotes() {\n expect(8);\n const music = new Music();\n let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5'));\n equal(value, 6);\n throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note');\n throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval');\n // Direction\n value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1);\n equal(value, 0);\n throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0');\n // Rollover\n value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5'));\n equal(value, 5);\n // Reverse rollover\n value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1);\n equal(value, 11);\n // Practical tests\n value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5'));\n equal(value, 2);\n}\nfunction relativeNoteNames() {\n expect(9);\n const music = new Music();\n equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##');\n equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c');\n equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#');\n equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb');\n equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#');\n equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##');\n equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb');\n equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e');\n throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.');\n}\nfunction canonicalNotes() {\n expect(3);\n const music = new Music();\n equal(music.getCanonicalNoteName(0), 'c');\n equal(music.getCanonicalNoteName(2), 'd');\n throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value');\n}\nfunction canonicalIntervals() {\n expect(3);\n const music = new Music();\n equal(music.getCanonicalIntervalName(0), 'unison');\n equal(music.getCanonicalIntervalName(2), 'M2');\n throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value');\n}\nfunction scaleTones() {\n expect(24);\n // C Major\n const music = new Music();\n const manager = new KeyManager('CM');\n const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major);\n let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n equal(c_major.length, 7);\n for (let i = 0; i < c_major.length; ++i) {\n equal(music.getCanonicalNoteName(c_major[i]), values[i]);\n }\n // Dorian\n const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian);\n values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb'];\n let note = null;\n equal(c_dorian.length, 7);\n for (let i = 0; i < c_dorian.length; ++i) {\n note = music.getCanonicalNoteName(c_dorian[i]);\n equal(manager.selectNote(note).note, values[i]);\n }\n // Mixolydian\n const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian);\n values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb'];\n equal(c_mixolydian.length, 7);\n for (let i = 0; i < c_mixolydian.length; ++i) {\n note = music.getCanonicalNoteName(c_mixolydian[i]);\n equal(manager.selectNote(note).note, values[i]);\n }\n}\nfunction scaleIntervals() {\n expect(6);\n const m = new Music();\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2');\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4');\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison');\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5');\n // Forwards and backwards\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7');\n equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2');\n}\nVexFlowTests.register(MusicTests);\nexport { MusicTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// NoteHead Tests\n// TODO: There is a bug in RenderContext.scale(). The CanvasContext works as expected.\n// Each time you call scale(sx, sy), it multiplies the sx and sy by the currently stored scale.\n// The SVGContext operates differently. It just sets the sx and sy as the new scale, instead of multiplying it.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { NoteHead } from '../src/notehead';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice } from '../src/voice';\nconst NoteHeadTests = {\n Start() {\n QUnit.module('NoteHead');\n const run = VexFlowTests.runTests;\n run('Basic', basic);\n run('Various Note Heads 1', variousNoteHeads);\n run('Various Note Heads 2', variousNoteHeads2);\n run('Various Heads', variousHeads);\n run('Drum Chord Heads', drumChordHeads);\n run('Bounding Boxes', basicBoundingBoxes);\n },\n};\nfunction setContextStyle(ctx) {\n // The final scale should be 1.8.\n ctx.scale(0.9, 0.9);\n ctx.scale(2.0, 2.0);\n //ctx.scale(1.8, 1.8);\n ctx.font = '10pt Arial';\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const note_head1 = new NoteHead({ duration: '4', line: 3 });\n const note_head2 = new NoteHead({ duration: '1', line: 2.5 });\n const note_head3 = new NoteHead({ duration: '2', line: 0 });\n voice.addTickables([note_head1, note_head2, note_head3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok('Basic NoteHead test');\n}\n/**\n * Used by the next two test cases to draw a note.\n */\nfunction showNote(noteStruct, stave, ctx, x) {\n const note = new StaveNote(noteStruct).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(ctx).draw();\n return note;\n}\nfunction variousHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/s1'], duration: '4' },\n { keys: ['g/5/s2'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/r1'], duration: '4' },\n { keys: ['g/5/r2'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d'], duration: '1/2' },\n { keys: ['g/5/d'], duration: '1' },\n { keys: ['g/5/d'], duration: '2' },\n { keys: ['g/5/d'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x'], duration: '1/2' },\n { keys: ['g/5/x'], duration: '1' },\n { keys: ['g/5/x'], duration: '2' },\n { keys: ['g/5/x'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/cx'], duration: '1/2' },\n { keys: ['g/5/cx'], duration: '1' },\n { keys: ['g/5/cx'], duration: '2' },\n { keys: ['g/5/cx'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/tu'], duration: '1/2' },\n { keys: ['g/5/tu'], duration: '1' },\n { keys: ['g/5/tu'], duration: '2' },\n { keys: ['g/5/tu'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/td'], duration: '1/2' },\n { keys: ['g/5/td'], duration: '1' },\n { keys: ['g/5/td'], duration: '2' },\n { keys: ['g/5/td'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sf'], duration: '1/2' },\n { keys: ['g/5/sf'], duration: '1' },\n { keys: ['g/5/sf'], duration: '2' },\n { keys: ['g/5/sf'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sb'], duration: '1/2' },\n { keys: ['g/5/sb'], duration: '1' },\n { keys: ['g/5/sb'], duration: '2' },\n { keys: ['g/5/sb'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/ci'], duration: '1/2' },\n { keys: ['g/5/ci'], duration: '1' },\n { keys: ['g/5/ci'], duration: '2' },\n { keys: ['g/5/ci'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/sq'], duration: '1/2' },\n { keys: ['g/5/sq'], duration: '1' },\n { keys: ['g/5/sq'], duration: '2' },\n { keys: ['g/5/sq'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let staveNum = 0; staveNum < 2; ++staveNum) {\n const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75)\n .addClef('percussion')\n .setContext(ctx)\n .draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = staveNum === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction variousNoteHeads2(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/do'], duration: '4', auto_stem: true },\n { keys: ['g/5/re'], duration: '4', auto_stem: true },\n { keys: ['g/5/mi'], duration: '4', auto_stem: true },\n { keys: ['g/5/fa'], duration: '4', auto_stem: true },\n { keys: ['e/4/faup'], duration: '4', auto_stem: true },\n { keys: ['g/5/so'], duration: '4', auto_stem: true },\n { keys: ['g/5/la'], duration: '4', auto_stem: true },\n { keys: ['g/5/ti'], duration: '4', auto_stem: true },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drumChordHeads(options, contextBuilder) {\n const notes = [\n { keys: ['a/4/d0', 'g/5/x3'], duration: '4' },\n { keys: ['a/4/x3', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/d1', 'g/5/x2'], duration: '4' },\n { keys: ['a/4/x2', 'g/5/d1'], duration: '4' },\n { keys: ['a/4/d2', 'g/5/x1'], duration: '4' },\n { keys: ['a/4/x1', 'g/5/d2'], duration: '4' },\n { keys: ['a/4/d3', 'g/5/x0'], duration: '4' },\n { keys: ['a/4/x0', 'g/5/d3'], duration: '4' },\n { keys: ['a/4', 'g/5/d0'], duration: '4' },\n { keys: ['a/4/x3', 'g/5'], duration: '4' },\n { keys: ['a/4/t0', 'g/5/s1'], duration: '4' },\n { keys: ['a/4/s1', 'g/5/t0'], duration: '4' },\n { keys: ['a/4/t1', 'g/5/s2'], duration: '4' },\n { keys: ['a/4/s2', 'g/5/t1'], duration: '4' },\n { keys: ['a/4/t2', 'g/5/r1'], duration: '4' },\n { keys: ['a/4/r1', 'g/5/t2'], duration: '4' },\n { keys: ['a/4/t3', 'g/5/r2'], duration: '4' },\n { keys: ['a/4/r2', 'g/5/t3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\nfunction basicBoundingBoxes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 250);\n setContextStyle(ctx);\n // 250 is 450/1.8\n const stave = new Stave(10, 0, 250).addClef('treble');\n stave.setContext(ctx).draw();\n const formatter = new Formatter();\n const voice = new Voice(Flow.TIME4_4).setStrict(false);\n const nh1 = new NoteHead({ duration: '4', line: 3 });\n const nh2 = new NoteHead({ duration: '2', line: 2.5 });\n const nh3 = new NoteHead({ duration: '1', line: 0 });\n voice.addTickables([nh1, nh2, nh3]);\n formatter.joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n for (const bb of [nh1.getBoundingBox(), nh2.getBoundingBox(), nh3.getBoundingBox()]) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n ok('NoteHead Bounding Boxes');\n}\nVexFlowTests.register(NoteHeadTests);\nexport { NoteHeadTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Taehoon Moon 2016\n//\n// NoteSubGroup Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { BarNote } from '../src/barnote';\nimport { Note } from '../src/note';\nimport { BarlineType } from '../src/stavebarline';\nconst NoteSubGroupTests = {\n Start() {\n QUnit.module('NoteSubGroup');\n const run = VexFlowTests.runTests;\n run('Basic - ClefNote, TimeSigNote and BarNote', basic);\n run('Multi Voice', multiVoiceSingleDraw);\n run('Multi Voice Multiple Draws', multiVoiceDoubleDraw);\n run('Multi Staff', multiStaff);\n },\n};\n// Return three helper functions for creating StaveNotes, and adding Accidental & NoteSubGroup to those StaveNotes.\nfunction createShortcuts(f) {\n return {\n createStaveNote: (noteStruct) => f.StaveNote(noteStruct),\n addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0),\n addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0),\n };\n}\nfunction basic(options) {\n const f = VexFlowTests.makeFactory(options, 750, 200);\n const ctx = f.getContext();\n const stave = f.Stave({ width: 600 }).addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes = [\n { keys: ['f/5'], stem_direction: -1, duration: '4' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' },\n ].map(createStaveNote);\n addAccidental(notes[1], '#');\n addAccidental(notes[2], 'n');\n addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]);\n addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]);\n addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]);\n addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]);\n addAccidental(notes[4], 'b');\n addAccidental(notes[6], 'bb');\n const voice = f.Voice().setStrict(false).addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n notes.forEach((note) => Note.plotMetrics(ctx, note, 150));\n VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120);\n ok(true, 'all pass');\n}\nfunction multiVoiceSingleDraw(options) {\n multiVoiceHelper(options, 1);\n}\n/**\n * Call Factory.draw() twice. It should look identical to the multiVoice test case above.\n */\nfunction multiVoiceDoubleDraw(options) {\n multiVoiceHelper(options, 2);\n}\n/**\n * Used by multiVoiceSingleDraw and multiVoiceDoubleDraw above.\n */\nfunction multiVoiceHelper(options, numDraws) {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const ctx = f.getContext();\n const stave = f.Stave().addClef('treble');\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [\n f.ClefNote({ type: 'bass', options: { size: 'small' } }),\n new BarNote(BarlineType.REPEAT_BEGIN),\n f.TimeSigNote({ time: '3/4' }),\n ]);\n addSubGroup(notes2[2], [\n f.ClefNote({ type: 'alto', options: { size: 'small' } }),\n f.TimeSigNote({ time: '9/8' }),\n new BarNote(BarlineType.DOUBLE),\n ]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n for (let i = 0; i < numDraws; i++) {\n f.draw();\n }\n notes1.forEach((note) => Note.plotMetrics(ctx, note, 150));\n ok(true, 'all pass');\n}\nfunction multiStaff(options) {\n const f = VexFlowTests.makeFactory(options, 550, 400);\n const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f);\n const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble');\n const notes1 = [\n { keys: ['f/5'], stem_direction: 1, duration: '4' },\n { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' },\n { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const notes2 = [\n { keys: ['c/4'], stem_direction: -1, duration: '4' },\n { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' },\n { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' },\n { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' },\n ].map(createStaveNote);\n const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass');\n const notes3 = [\n { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' },\n { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' },\n ].map(createStaveNote);\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' });\n f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' });\n f.Beam({ notes: notes3.slice(1, 4) });\n f.Beam({ notes: notes3.slice(5) });\n addAccidental(notes1[1], '#');\n addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]);\n addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]);\n addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]);\n addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]);\n addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]);\n addAccidental(notes3[0], '#');\n addAccidental(notes3[3], 'b');\n addAccidental(notes3[5], '#');\n addAccidental(notes1[2], 'b');\n addAccidental(notes2[3], '#');\n const voice1 = f.Voice().addTickables(notes1);\n const voice2 = f.Voice().addTickables(notes2);\n const voice3 = f.Voice().addTickables(notes3);\n f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1);\n f.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(NoteSubGroupTests);\nexport { NoteSubGroupTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\n//\n// OffscreenCanvas Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { globalObject } from '../src/util';\nconst OffscreenCanvasTests = {\n Start() {\n // At the time of writing, OffscreenCanvas is still an experimental technology.\n if (globalObject().OffscreenCanvas === undefined) {\n return;\n }\n QUnit.module('OffscreenCanvas');\n test('Simple Test', simpleTest);\n },\n};\nfunction simpleTest() {\n // Create a CanvasContext from an OffscreenCanvas.\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCanvas = new OffscreenCanvas(550, 200);\n // eslint-disable-next-line\n // @ts-ignore\n const offscreenCtx = offscreenCanvas.getContext('2d');\n if (offscreenCtx == null) {\n throw new Error(\"Couldn't create offscreen context\");\n }\n const ctx = new CanvasContext(offscreenCtx);\n // Render to the OffscreenCavans.\n const stave = new Stave(10, 50, 200);\n stave.setEndBarType(BarlineType.END);\n stave.addClef('treble').setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n // Copy the contents of the OffscreenCanvas to an HTMLCanvasElement.\n const imgBmp = offscreenCanvas.transferToImageBitmap();\n const canvas = document.createElement('canvas');\n canvas.width = offscreenCanvas.width;\n canvas.height = offscreenCanvas.height;\n const canvasCtx = canvas.getContext('2d');\n if (canvasCtx == null) {\n throw new Error(\"Couldn't create canvas context\");\n }\n canvasCtx.drawImage(imgBmp, 0, 0);\n document.body.appendChild(canvas);\n ok(true, 'all pass');\n}\nVexFlowTests.register(OffscreenCanvasTests);\nexport { OffscreenCanvasTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Cyril Silverman\n//\n// Ornament Tests\n// TODO: Formatting for Jazz Ornaments is incorrect. The last note + ornament bleeds into the next measure.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Glyph } from '../src/glyph';\nimport { Ornament } from '../src/ornament';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice, VoiceMode } from '../src/voice';\nconst OrnamentTests = {\n Start() {\n QUnit.module('Ornament');\n const run = VexFlowTests.runTests;\n run('Ornaments', drawOrnaments);\n run('Ornaments Vertically Shifted', drawOrnamentsDisplaced);\n run('Ornaments - Delayed turns', drawOrnamentsDelayed);\n run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws);\n run('Stacked', drawOrnamentsStacked);\n run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals);\n run('Jazz Ornaments', jazzOrnaments);\n },\n};\nfunction drawOrnaments(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsDisplaced(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 195);\n const stave = new Stave(10, 30, 700);\n stave.setContext(ctx).draw();\n const notes = [\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(new Ornament('mordent'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[1].addModifier(new Ornament('mordent_inverted'), 0);\n notes[2].addModifier(new Ornament('turn'), 0);\n notes[3].addModifier(new Ornament('turn_inverted'), 0);\n notes[4].addModifier(new Ornament('tr'), 0);\n notes[5].addModifier(new Ornament('upprall'), 0);\n notes[6].addModifier(new Ornament('downprall'), 0);\n notes[7].addModifier(new Ornament('prallup'), 0);\n notes[8].addModifier(new Ornament('pralldown'), 0);\n notes[9].addModifier(new Ornament('upmordent'), 0);\n notes[10].addModifier(new Ornament('downmordent'), 0);\n notes[11].addModifier(new Ornament('lineprall'), 0);\n notes[12].addModifier(new Ornament('prallprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\n/**\n * Helper function for the next two tests: drawOrnamentsDelayed and drawOrnamentsDelayedMultipleDraws.\n * setDelayed(true) shifts the turn symbol to the right (after its note).\n */\nconst addDelayedTurns = (f) => {\n // Get the rendering context\n const context = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(context).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0);\n notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0);\n return { context, stave, notes };\n};\nfunction drawOrnamentsDelayed(options) {\n expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsDelayedMultipleDraws(options) {\n expect(0);\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const { context, stave, notes } = addDelayedTurns(f);\n // We can FormatAndDraw() two times, and it looks fine.\n // However, if you inspect the SVG element, you will see duplicate paths.\n Formatter.FormatAndDraw(context, stave, notes);\n Formatter.FormatAndDraw(context, stave, notes);\n}\nfunction drawOrnamentsStacked(options) {\n expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 550, 195);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 30, width: 500 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent'), 0);\n notes[1].addModifier(f.Ornament('turn_inverted'), 0);\n notes[2].addModifier(f.Ornament('turn'), 0);\n notes[3].addModifier(f.Ornament('turn_inverted'), 0);\n notes[0].addModifier(f.Ornament('turn'), 0);\n notes[1].addModifier(f.Ornament('prallup'), 0);\n notes[2].addModifier(f.Ornament('upmordent'), 0);\n notes[3].addModifier(f.Ornament('lineprall'), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction drawOrnamentsWithAccidentals(options) {\n expect(0);\n // Get the rendering context\n const f = VexFlowTests.makeFactory(options, 650, 250);\n const ctx = f.getContext();\n const stave = f.Stave({ x: 10, y: 60, width: 600 });\n stave.setContext(ctx).draw();\n const notes = [\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }),\n ];\n notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0);\n notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0);\n notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0);\n notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0);\n notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0);\n notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0);\n notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0);\n notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0);\n notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0);\n notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0);\n notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, stave, notes);\n}\nfunction jazzOrnaments(options) {\n const clefWidth = Glyph.getWidth('gClef', 38); // widest clef\n // Helper function.\n function draw(modifiers, keys, x, width, y, stemDirection) {\n // Helper function to create a StaveNote.\n const note = (keys, duration, modifier, stemDirection) => {\n const n = new StaveNote({ keys, duration, stem_direction: stemDirection })\n .addModifier(modifier, 0)\n .addModifier(new Accidental('b'), 0);\n const dot = duration.indexOf('d') >= 0;\n if (dot) {\n Dot.buildAndAttach([n], { all: true });\n }\n return n;\n };\n const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw();\n const notes = [\n note(keys, '4d', modifiers[0], stemDirection),\n note(keys, '8', modifiers[1], stemDirection),\n note(keys, '4d', modifiers[2], stemDirection),\n note(keys, '8', modifiers[3], stemDirection),\n ];\n if (modifiers.length > 4) {\n notes[3].addModifier(modifiers[4], 0);\n }\n Beam.generateBeams(notes);\n const voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n }).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n const formatter = new Formatter().joinVoices([voice]);\n formatter.format([voice], width - Stave.defaultPadding - clefWidth);\n stave.setContext(ctx).draw();\n voice.draw(ctx, stave);\n }\n expect(0);\n const f = VexFlowTests.makeFactory(options, 950, 400);\n const ctx = f.getContext();\n ctx.scale(1, 1);\n const xStart = 10;\n const width = 300;\n const yStart = 50;\n const staffHeight = 70;\n let curX = xStart;\n let curY = yStart;\n let mods = [\n // measure 1\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 2\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['a/5'], curX, width, curY, -1);\n curX += width;\n mods = [\n // measure 3\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['a/5'], curX, width, curY, 1);\n // second line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 4\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 5\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n curX += width;\n mods = [\n // measure 6\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/5'], curX, width, curY);\n // third line\n curX = xStart;\n curY += staffHeight;\n mods = [\n // measure 7\n f.Ornament('scoop'),\n f.Ornament('doit'),\n f.Ornament('fall'),\n f.Ornament('doitLong'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 8\n f.Ornament('fallLong'),\n f.Ornament('bend'),\n f.Ornament('plungerClosed'),\n f.Ornament('plungerOpen'),\n f.Ornament('bend'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n curX += width;\n mods = [\n // measure 9\n f.Ornament('flip'),\n f.Ornament('jazzTurn'),\n f.Ornament('smear'),\n f.Ornament('doit'),\n ];\n draw(mods, ['e/4'], curX, width, curY);\n}\nVexFlowTests.register(OrnamentTests);\nexport { OrnamentTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Parser Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Parser } from '../src/parser';\nconst ParserTests = {\n Start() {\n QUnit.module('Parser');\n test('Basic', basic);\n test('Advanced', advanced);\n test('Mixed', mixed);\n test('Micro Score', microscore);\n },\n};\n/**\n * Grammar used in the first three test cases: basic, advanced, mixed.\n */\nclass TestGrammar {\n // The begin() function is the only requirement when implementing the Grammar interface.\n begin() {\n return () => ({ expect: this.expect });\n }\n BIGORLITTLE() {\n return { expect: [this.BIGLINE, this.LITTLELINE], or: true };\n }\n BIGLINE() {\n return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] };\n }\n LITTLELINE() {\n return { expect: [this.WORD, this.WORDS] };\n }\n WORDS() {\n return { expect: [this.COMMA, this.WORD], zeroOrMore: true };\n }\n MAYBEEXCLAIM() {\n return { expect: [this.EXCLAIM], maybe: true };\n }\n LBRACE() {\n return { token: '[{]' };\n }\n RBRACE() {\n return { token: '[}]' };\n }\n WORD() {\n return { token: '[a-zA-Z]+' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n EXCLAIM() {\n return { token: '[!]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\n/**\n * Grammar used in the microscore test case.\n * It represents a series of piano key numbers (Middle C == 40) separated by whitespace.\n * C Major Scale => 40 42 44 45 47 49 51 52\n * A chord is 2 or more piano key numbers surrounded by BRACKETS and separated by PERIODS\n * C Major == [40.44.47]\n * C-major F-major G-major A-minor chord progression => [40.44.47] [45.49.52] [47.51.54] [49.52.56]\n */\nclass MicroScoreGrammar {\n constructor() {\n this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true });\n this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true });\n this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true });\n this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] });\n this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true });\n this.NUM = () => ({ token: '\\\\d+' });\n this.WHITESPACE = () => ({ token: '\\\\s+' });\n this.PERIOD = () => ({ token: '\\\\.' });\n this.LEFT_BRACKET = () => ({ token: '\\\\[' });\n this.RIGHT_BRACKET = () => ({ token: '\\\\]' });\n this.EOL = () => ({ token: '$' });\n }\n begin() {\n return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] });\n }\n}\n/**\n * Check that the result is a parse failure, and verify the error position.\n */\nfunction fails(result, expectedErrorPos, msg) {\n notOk(result.success, msg);\n equal(result.errorPos, expectedErrorPos, msg);\n}\nfunction basic() {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.LITTLELINE, grammar.EOL];\n const parser = new Parser(grammar);\n // Each of these strings will parse correctly.\n const mustPass = ['first, second', 'first,second', 'first', 'first,second, third'];\n mustPass.forEach((line) => equal(parser.parse(line).success, true, line));\n fails(parser.parse(''), 0);\n fails(parser.parse('first second'), 6);\n fails(parser.parse('first,,'), 5);\n fails(parser.parse('first,'), 5);\n fails(parser.parse(',,'), 0);\n}\nfunction advanced() {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGLINE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}'];\n mustPass.forEach((line) => equal(parser.parse(line).success, true, line));\n fails(parser.parse('{first,second,third,}'), 19);\n fails(parser.parse('first,second,third'), 0);\n fails(parser.parse('{first,second,third'), 19);\n fails(parser.parse('{!}'), 1);\n}\nfunction mixed() {\n const grammar = new TestGrammar();\n grammar.expect = [grammar.BIGORLITTLE, grammar.EOL];\n const parser = new Parser(grammar);\n const mustPass = ['{first,second,third!}', 'first, second'];\n mustPass.forEach((line) => equal(parser.parse(line).success, true, line));\n fails(parser.parse('first second'), 6);\n}\nfunction microscore() {\n const grammar = new MicroScoreGrammar();\n const parser = new Parser(grammar);\n const mustPass = [\n '40 42 44 45 47 49 51 52',\n '[40.44.47] [45.49.52] [47.51.54] [49.52.56]',\n '40 [40.44.47] 45 47 [44.47.51]', // Mixed Notes and Chords: C4 [Cmajor] F4 G4 [Eminor]\n ];\n mustPass.forEach((line) => {\n var _a;\n const result = parser.parse(line);\n equal(result.success, true, line);\n equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line);\n });\n fails(parser.parse('40 42 44 45 47 49 5A 52'), 19);\n fails(parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2);\n fails(parser.parse('40 [40] 45 47 [44.47.51]'), 3); // A chord with a single note is not allowed.\n}\nVexFlowTests.register(ParserTests);\nexport { ParserTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// PedalMarking Tests\n// TODO: Fix Error => Type 'Tickable' is not assignable to type 'StaveNote'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst PedalMarkingTests = {\n Start() {\n QUnit.module('PedalMarking');\n const run = VexFlowTests.runTests;\n run('Simple Pedal 1', simple1);\n run('Simple Pedal 2', simple2);\n run('Simple Pedal 3', simple3);\n run('Release and Depress on Same Note 1', releaseDepress1);\n run('Release and Depress on Same Note 2', releaseDepress2);\n run('Custom Text 1', customTest1);\n run('Custom Text 2', customTest2);\n },\n};\n/**\n * Every test below uses this to set up the score and two staves/voices.\n */\nfunction createTest(makePedal) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 550, 200);\n const score = f.EasyScore();\n const stave0 = f.Stave({ width: 250 }).addClef('treble');\n const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem=\"down\"]', { stem: 'up' }));\n f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0);\n const stave1 = f.Stave({ width: 260, x: 250 });\n const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' }));\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n makePedal(f, voice0.getTickables(), voice1.getTickables());\n f.draw();\n ok(true, 'Must render');\n };\n}\nfunction withSimplePedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[2], notes0[3], notes1[3]],\n options: { style },\n });\n}\nfunction withReleaseAndDepressedPedal(style) {\n return (factory, notes0, notes1) => factory.PedalMarking({\n notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]],\n options: { style },\n });\n}\nconst simple1 = createTest(withSimplePedal('text'));\nconst simple2 = createTest(withSimplePedal('bracket'));\nconst simple3 = createTest(withSimplePedal('mixed'));\nconst releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket'));\nconst releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed'));\nconst customTest1 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'text' },\n });\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n});\nconst customTest2 = createTest((factory, notes0, notes1) => {\n const pedal = factory.PedalMarking({\n notes: [notes0[0], notes1[3]],\n options: { style: 'mixed' },\n });\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n});\nVexFlowTests.register(PedalMarkingTests);\nexport { PedalMarkingTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Mike Corrigan 2012 \n//\n// Percussion Tests\n// TODO: Type 'Tickable[]' is not assignable to type 'StemmableNote[]'.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index';\nconst PercussionTests = {\n Start() {\n QUnit.module('Percussion');\n const run = VexFlowTests.runTests;\n run('Percussion Clef', draw);\n run('Percussion Notes', drawNotes);\n run('Percussion Basic0', basic0);\n run('Percussion Basic1', basic1);\n run('Percussion Basic2', basic2);\n run('Percussion Snare0', snare0);\n run('Percussion Snare1', snare1);\n run('Percussion Snare2', snare2);\n run('Percussion Snare3', snare3);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw();\n ok(true);\n}\n/**\n * Helper function used by the drawNotes() test case below.\n */\nfunction showNote(struct, stave, ctx, x) {\n const staveNote = new StaveNote(struct).setStave(stave);\n new TickContext().addTickable(staveNote).preFormat().setX(x);\n staveNote.setContext(ctx).draw();\n return staveNote;\n}\nfunction drawNotes(options, contextBuilder) {\n const notes = [\n { keys: ['g/5/d0'], duration: '4' },\n { keys: ['g/5/d1'], duration: '4' },\n { keys: ['g/5/d2'], duration: '4' },\n { keys: ['g/5/d3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/t0'], duration: '1' },\n { keys: ['g/5/t1'], duration: '4' },\n { keys: ['g/5/t2'], duration: '4' },\n { keys: ['g/5/t3'], duration: '4' },\n { keys: ['x/'], duration: '1' },\n { keys: ['g/5/x0'], duration: '1' },\n { keys: ['g/5/x1'], duration: '4' },\n { keys: ['g/5/x2'], duration: '4' },\n { keys: ['g/5/x3'], duration: '4' },\n ];\n const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240);\n // Draw two staves, one with up-stems and one with down-stems.\n for (let h = 0; h < 2; ++h) {\n const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n note.stem_direction = h === 0 ? -1 : 1;\n const staveNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n }\n}\n/**\n * Helper function for the seven test cases below.\n * Adds a percussion clef (two short vertical bars, like a pause sign) to the stave.\n */\nfunction createSingleMeasureTest(setup) {\n return (options) => {\n const f = VexFlowTests.makeFactory(options, 500);\n const stave = f.Stave().addClef('percussion').setTimeSignature('4/4');\n setup(f);\n f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave);\n f.draw();\n ok(true);\n };\n}\nconst basic0 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n const voice1 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n f.Beam({ notes: voice0.getTickables() });\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(3, 5) });\n});\nconst basic1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n f.StaveNote({ keys: ['f/5/x2'], duration: '4' }),\n ]);\n f.Voice().addTickables([\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n ]);\n});\nconst basic2 = createSingleMeasureTest((f) => {\n const voice0 = f\n .Voice()\n .addTickables([\n f.StaveNote({ keys: ['a/5/x3'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5'], duration: '8' }),\n f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '8' }),\n ]);\n f.Beam({ notes: voice0.getTickables().slice(1, 8) });\n const notes1 = [\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }),\n ];\n Dot.buildAndAttach([notes1[4]], { all: true });\n const voice1 = f.Voice().addTickables(notes1);\n f.Beam({ notes: voice1.getTickables().slice(0, 2) });\n f.Beam({ notes: voice1.getTickables().slice(4, 6) });\n});\nconst snare0 = createSingleMeasureTest((f) => {\n const font = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n };\n f.Voice().addTickables([\n f\n .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 })\n .addModifier(f.Articulation({ type: 'a>' }), 0)\n .addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0),\n ]);\n});\nconst snare1 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }),\n f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0),\n f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0),\n ]);\n});\nconst snare2 = createSingleMeasureTest((f) => {\n f.Voice().addTickables([\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0),\n f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(5), 0),\n ]);\n});\nconst snare3 = createSingleMeasureTest((factory) => {\n factory\n .Voice()\n .addTickables([\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0),\n factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0),\n factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(5), 0),\n ]);\n});\nVexFlowTests.register(PercussionTests);\nexport { PercussionTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Registry Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { EasyScore, Factory, Registry, StaveNote } from '../src/index';\nconst RegistryTests = {\n Start() {\n QUnit.module('Registry');\n test('Register and Clear', registerAndClear);\n test('Default Registry', defaultRegistry);\n test('Multiple Classes', classes);\n },\n};\nfunction registerAndClear() {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n registry.register(score.notes('C4')[0], 'foobar');\n const foobar = registry.getElementById('foobar');\n ok(foobar);\n equal(foobar.getAttribute('id'), 'foobar');\n registry.clear();\n notOk(registry.getElementById('foobar'));\n // eslint-disable-next-line\n // @ts-ignore: intentional type mismatch to trigger an error.\n throws(() => registry.register(score.notes('C4')));\n registry.clear();\n ok(registry.register(score.notes('C4[id=\"boobar\"]')[0]).getElementById('boobar'));\n}\nfunction defaultRegistry() {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n ok(note);\n note.setAttribute('id', 'boobar');\n ok(registry.getElementById('boobar'));\n notOk(registry.getElementById('foobar'));\n registry.clear();\n equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0);\n score.notes('C5');\n const elements = registry.getElementsByType(StaveNote.CATEGORY);\n equal(elements.length, 1);\n}\nfunction classes() {\n const registry = new Registry();\n const score = new EasyScore({ factory: Factory.newFromElementId(null) });\n Registry.enableDefaultRegistry(registry);\n score.notes('C4[id=\"foobar\"]');\n const note = registry.getElementById('foobar');\n note.addClass('foo');\n ok(note.hasClass('foo'));\n notOk(note.hasClass('boo'));\n equal(registry.getElementsByClass('foo').length, 1);\n equal(registry.getElementsByClass('boo').length, 0);\n note.addClass('boo');\n ok(note.hasClass('foo'));\n ok(note.hasClass('boo'));\n equal(registry.getElementsByClass('foo').length, 1);\n equal(registry.getElementsByClass('boo').length, 1);\n note.removeClass('boo');\n note.removeClass('foo');\n notOk(note.hasClass('foo'));\n notOk(note.hasClass('boo'));\n equal(registry.getElementsByClass('foo').length, 0);\n equal(registry.getElementsByClass('boo').length, 0);\n}\nVexFlowTests.register(RegistryTests);\nexport { RegistryTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Renderer Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index';\n// TODO: Should FactoryOptions.renderer.elementId also accept a canvas | div?\nconst STAVE_WIDTH = 700;\nconst STAVE_HEIGHT = 100;\n// FactoryOptions.stave.space defaults to 10.\n// We subtract 10 to make the useRendererAPI() output look identical to useFactoryAPI().\nconst STAVE_RIGHT_MARGIN = 10;\nconst USE_RENDERER = { useRendererAPI: true };\nconst USE_FACTORY = { useRendererAPI: false };\nconst RendererTests = {\n Start() {\n QUnit.module('Renderer');\n const run = VexFlowTests.runTests;\n // Randomly choose one of four setup paths. See below for a description.\n // Refresh `flow.html` to see the test change each time.\n // We can manually check that they look identical\n // by opening `flow.html` in multiple tabs & quickly switching between tabs.\n run('Random', random);\n // These are the four setup paths. They should all produce the same output.\n // Use the: Renderer API OR Factory API\n // Pass in: element ID string OR canvas/div element.\n run('Renderer API with element ID string', stringElementId, USE_RENDERER);\n run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER);\n run('Renderer API with context', passRenderContext);\n run('Factory API with element ID string', stringElementId, USE_FACTORY);\n run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY);\n },\n};\n/**\n * Helper function to add three notes to a stave.\n */\nfunction drawStave(stave, context) {\n stave.addClef('bass').addTimeSignature('3/4').draw();\n Formatter.FormatAndDraw(context, stave, [\n new StaveNote({ keys: ['C/4'], duration: '4' }),\n new StaveNote({ keys: ['E/4'], duration: '4' }),\n new StaveNote({ keys: ['G/4'], duration: '4' }),\n ]);\n}\n/**\n * Randomize the test upon each refresh (for verifying that the output is identical).\n * Draw a colored outline to indicate which of the four options is shown.\n * - blue = element is a SVG or Canvas element\n * - gray = element ID is a string\n * - solid outline = use the Renderer API directly\n * - dashed outline = use the Factory API\n */\nfunction random(options) {\n const useElementIDString = Math.random() > 0.5;\n const useRendererAPI = Math.random() > 0.5;\n options.params = { useRendererAPI };\n if (useElementIDString) {\n stringElementId(options);\n }\n else {\n canvasOrDivElement(options);\n }\n // eslint-disable-next-line\n const element = document.getElementById(options.elementId);\n const colorForElementType = useElementIDString ? '#CCCCCC' /* light gray */ : '#0074d9'; /* blue */\n const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed';\n const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`;\n let elementType;\n if (options.backend === Renderer.Backends.CANVAS) {\n // If the backend is canvas, we draw a border around the canvas directly.\n element.style.border = borderStyle;\n elementType = '<canvas> element object';\n }\n else {\n // If the backend is SVG, we draw a border around the SVG child of the DIV.\n element.children[0].style.border = borderStyle;\n elementType = '<svg> element object';\n }\n if (useElementIDString) {\n elementType = 'elementID string';\n }\n const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API';\n element.parentElement.insertAdjacentHTML('beforeend', `
` +\n `${whichAPI}` +\n ` with ` +\n `${elementType}` +\n `

`);\n}\nfunction useRendererAPI(e, backend) {\n const renderer = new Renderer(e, backend);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n const context = renderer.getContext();\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n}\n/**\n * Alternatively, use the Factory API!\n * The Factory API declares elementId to be string | null.\n * However, if we pass in a canvas or div element, it will still work.\n * This is because Factory calls new Renderer(elementId, ...) via Renderer.buildContext().\n */\nfunction useFactoryAPI(e, backend) {\n const opts = {\n renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend },\n };\n const factory = new Factory(opts);\n drawStave(factory.Stave(), factory.getContext());\n}\n/**\n * Pass in a elementId string. Renderer will call document.getElementById().\n */\nfunction stringElementId(options) {\n const elementId = options.elementId;\n if (options.params.useRendererAPI) {\n useRendererAPI(elementId, options.backend);\n }\n else {\n useFactoryAPI(elementId, options.backend);\n }\n ok(true);\n}\n/**\n * Pass a canvas or div element directly to the Renderer constructor.\n */\nfunction canvasOrDivElement(options) {\n const element = document.getElementById(options.elementId);\n if (options.params.useRendererAPI) {\n useRendererAPI(element, options.backend);\n }\n else {\n useFactoryAPI(element, options.backend);\n }\n ok(true);\n}\n/**\n * Pass the render context directly to the Renderer constructor.\n */\nfunction passRenderContext(options) {\n let context;\n const element = document.getElementById(options.elementId);\n if (isHTMLCanvas(element)) {\n const ctx = element.getContext('2d');\n if (!ctx) {\n throw new RuntimeError(`Couldn't get context from element \"${options.elementId}\"`);\n }\n context = new CanvasContext(ctx);\n }\n else {\n context = new SVGContext(element);\n }\n const renderer = new Renderer(context);\n renderer.resize(STAVE_WIDTH, STAVE_HEIGHT);\n drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context);\n ok(true);\n}\nVexFlowTests.register(RendererTests);\nexport { RendererTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rests Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Tuplet } from '../src/tuplet';\nimport { Voice } from '../src/voice';\nconst RestsTests = {\n Start() {\n QUnit.module('Rests');\n const run = VexFlowTests.runTests;\n run('Outside Stave', ledgerRest);\n run('Dotted', basic);\n run('Auto Align - Beamed Notes Stems Up', beamsUp);\n run('Auto Align - Beamed Notes Stems Down', beamsDown);\n run('Auto Align - Tuplets Stems Up', tupletsUp);\n run('Auto Align - Tuplets Stems Down', tupletsDown);\n run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment);\n run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll);\n run('Auto Align - Multi Voice', multiVoice);\n },\n};\n/**\n * Helper function to create a context and stave.\n *\n * @param options\n * @param contextBuilder static function in renderer.ts (Renderer.getSVGContext or Renderer.getCanvasContext).\n * @param width\n * @param height\n * @returns object with .context and .stave properties\n */\nfunction setupContext(options, contextBuilder, width = 350, height = 150) {\n // context is SVGContext or CanvasRenderingContext2D (native) or CanvasContext (only if Renderer.USE_CANVAS_PROXY is true).\n const context = contextBuilder(options.elementId, width, height);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw();\n return { context, stave };\n}\n/**\n * Dotted rests (whole to 128th).\n * The rest duration is specified as 'wr', 'hr', ..., '128r'.\n */\nfunction basic(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Formatter.FormatAndDraw(context, stave, notes);\n ok(true, 'Dotted Rest Test');\n}\n/**\n * Use the ledger glyph if the whole or half rest is above/below the staff\n */\nfunction ledgerRest(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 700);\n const notes = [\n new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }),\n new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }),\n new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }),\n ];\n Formatter.FormatAndDraw(context, stave, notes);\n ok(true, 'Leger/Ledger Rest Test');\n}\n// Optional: Use a helper function to make your code more concise.\nconst note = (noteStruct) => new StaveNote(noteStruct);\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the top).\n */\nfunction beamsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['e/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }),\n note({ keys: ['c/4'], stem_direction: 1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n ok(true, 'Auto Align Rests - Beams Up Test');\n}\n/**\n * Rests are intermixed within beamed notes (with the stems and beams at the bottom).\n */\nfunction beamsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['c/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['e/4'], stem_direction: -1, duration: '8' }),\n ];\n const beam1 = new Beam(notes.slice(0, 4));\n const beam2 = new Beam(notes.slice(4, 8));\n const beam3 = new Beam(notes.slice(8, 12));\n Formatter.FormatAndDraw(context, stave, notes);\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n ok(true, 'Auto Align Rests - Beams Down Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_TOP) to place the tuplet indicator (bracket and number) at the\n * top of the group of notes. Tuplet.LOCATION_TOP is the default, so this is optional.\n */\nfunction tupletsUp(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n ];\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n ok(true, 'Auto Align Rests - Tuplets Stem Up Test');\n}\n/**\n * Call setTupletLocation(Tuplet.LOCATION_BOTTOM) to place the tuplet indicator (bracket and number) at the\n * bottom of the group of notes.\n */\nfunction tupletsDown(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n ];\n const beam1 = new Beam(notes.slice(0, 3));\n const beam2 = new Beam(notes.slice(3, 6));\n const beam3 = new Beam(notes.slice(6, 9));\n const beam4 = new Beam(notes.slice(9, 12));\n const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet1.setContext(context).draw();\n tuplet2.setContext(context).draw();\n tuplet3.setContext(context).draw();\n tuplet4.setContext(context).draw();\n beam1.setContext(context).draw();\n beam2.setContext(context).draw();\n beam3.setContext(context).draw();\n beam4.setContext(context).draw();\n ok(true, 'Auto Align Rests - Tuplets Stem Down Test');\n}\n/**\n * By default rests are centered vertically within the stave, except\n * when they are inside a group of beamed notes (in which case they are\n * centered vertically within that group).\n */\nfunction singleVoiceDefaultAlignment(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n Formatter.FormatAndDraw(context, stave, notes);\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n ok(true, 'Auto Align Rests - Default Test');\n}\n/**\n * The only difference between staveRestsAll() and staveRests() is that this test case\n * passes { align_rests: true } to Formatter.FormatAndDraw(...).\n */\nfunction singleVoiceAlignAll(options, contextBuilder) {\n const { context, stave } = setupContext(options, contextBuilder, 600, 160);\n const notes = [\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['f/4'], stem_direction: -1, duration: '4' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['a/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '8' }),\n note({ keys: ['e/5'], stem_direction: -1, duration: '8' }),\n note({ keys: ['a/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }),\n note({ keys: ['b/5'], stem_direction: 1, duration: '4' }),\n note({ keys: ['d/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['g/5'], stem_direction: -1, duration: '4' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }),\n ];\n const beam = new Beam(notes.slice(5, 9));\n const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n Formatter.FormatAndDraw(context, stave, notes, { align_rests: true });\n tuplet.setContext(context).draw();\n beam.setContext(context).draw();\n ok(true, 'Auto Align Rests - Align All Test');\n}\n/**\n * Multi Voice\n * The top voice shows quarter-note chords alternating with quarter rests.\n * The bottom voice shows two groups of beamed eighth notes, with eighth rests.\n */\nfunction multiVoice(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw();\n const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave);\n const notes1 = [\n noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }),\n noteOnStave({ keys: ['b/4'], duration: '4r' }),\n ];\n const notes2 = [\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }),\n ];\n const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1);\n const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2);\n // Set { align_rests: true } to align rests (vertically) with nearby notes in each voice.\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true });\n const beam2_1 = new Beam(notes2.slice(0, 4));\n const beam2_2 = new Beam(notes2.slice(4, 8));\n // Important Note: we need to draw voice2 first, since voice2 generates ledger lines.\n // Otherwise, the ledger lines will be drawn on top of middle C notes in voice1.\n voice2.draw(ctx);\n voice1.draw(ctx);\n beam2_1.setContext(ctx).draw();\n beam2_2.setContext(ctx).draw();\n ok(true, 'Strokes Test Multi Voice');\n}\nVexFlowTests.register(RestsTests);\nexport { RestsTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Rhythm Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Beam } from '../src/beam';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nconst RhythmTests = {\n Start() {\n QUnit.module('Rhythm');\n const run = VexFlowTests.runTests;\n // TODO: Simplify test names by removing 'Rhythm Draw - '.\n run('Rhythm Draw - slash notes', drawBasic);\n run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes);\n run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests);\n run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches);\n run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches);\n },\n};\n// CURRENTLY UNUSED. Draws 7 different slash notes without beams.\n/*\nfunction drawSlash(options: TestOptions, contextBuilder: ContextBuilder): void {\n const ctx = contextBuilder(options.elementId, 350, 180);\n const stave = new Stave(10, 10, 350);\n stave.setContext(ctx);\n stave.draw();\n\n const notes: StaveNoteStruct[] = [\n { keys: ['b/4'], duration: 'ws', stem_direction: -1 },\n { keys: ['b/4'], duration: 'hs', stem_direction: -1 },\n { keys: ['b/4'], duration: 'qs', stem_direction: -1 },\n { keys: ['b/4'], duration: '8s', stem_direction: -1 },\n { keys: ['b/4'], duration: '16s', stem_direction: -1 },\n { keys: ['b/4'], duration: '32s', stem_direction: -1 },\n { keys: ['b/4'], duration: '64s', stem_direction: -1 },\n ];\n expect(notes.length * 2);\n\n for (let i = 0; i < notes.length; ++i) {\n const staveNote = new StaveNote(notes[i]).setStave(stave);\n new TickContext()\n .addTickable(staveNote)\n .preFormat()\n .setX((i + 1) * 25);\n staveNote.setContext(ctx).draw();\n\n ok(staveNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\n*/\nfunction drawBasic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 150);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120);\n staveBar2.setBegBarType(BarlineType.SINGLE);\n staveBar2.setEndBarType(BarlineType.SINGLE);\n staveBar2.setContext(ctx).draw();\n // bar 2\n const notesBar2 = [\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // bar 3 - juxtaposing second bar next to first bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170);\n staveBar3.setContext(ctx).draw();\n // bar 3\n const notesBar3 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '4s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing second bar next to first bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200);\n staveBar4.setContext(ctx).draw();\n // bar 4\n const notesBar4 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n expect(0);\n}\nfunction drawBeamedSlashNotes(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('C');\n staveBar1.setContext(ctx).draw();\n // bar 4\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n const notesBar1 = notesBar1_part1.concat(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n expect(0);\n}\nfunction drawSlashAndBeamAndRests(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0);\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '8s',\n stem_direction: -1,\n }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220);\n staveBar2.setContext(ctx).draw();\n const notesBar2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '1s',\n stem_direction: -1,\n }),\n ];\n notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n expect(0);\n}\nfunction drawSixtenthWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n const notesBar1_part2 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '16m',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16r',\n stem_direction: -1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '16s',\n stem_direction: -1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar1_part1);\n const beam2 = new Beam(notesBar1_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2));\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n expect(0);\n}\nfunction drawThirtySecondWithScratches(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n // bar 1\n const staveBar1 = new Stave(10, 30, 300);\n staveBar1.setBegBarType(BarlineType.DOUBLE);\n staveBar1.setEndBarType(BarlineType.SINGLE);\n staveBar1.addClef('treble');\n staveBar1.addTimeSignature('4/4');\n staveBar1.addKeySignature('F');\n staveBar1.setContext(ctx).draw();\n // bar 1\n const notesBar1_part1 = [\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32m',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32r',\n stem_direction: 1,\n }),\n new StaveNote({\n keys: ['b/4'],\n duration: '32s',\n stem_direction: 1,\n }),\n ];\n notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0);\n // Create the beams for 8th notes in 2nd measure.\n const beam1 = new Beam(notesBar1_part1);\n // Helper function to justify and draw a 4/4 voice.\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1);\n // Render beams\n beam1.setContext(ctx).draw();\n expect(0);\n}\nVexFlowTests.register(RhythmTests);\nexport { RhythmTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Basic Stave Tests\n// TODO: Like Stave.setTempo(t: StaveTempoOptions, ...), Stave.setText(...) could declare an interface called StaveTextOptions.\n// This helps developers because they can use the named type in their code for type checking.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Beam } from '../src/beam';\nimport { Clef } from '../src/clef';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { Barline, BarlineType } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Repetition } from '../src/staverepetition';\nimport { VoltaType } from '../src/stavevolta';\nimport { TextJustification } from '../src/textnote';\nimport { TimeSignature } from '../src/timesignature';\nconst StaveTests = {\n Start() {\n QUnit.module('Stave');\n test('StaveModifiers SortByCategory', sortByCategory);\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Open Stave Draw Test', drawOpenStave);\n run('Multiple Stave Barline Test', drawMultipleMeasures);\n run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 });\n run('Multiple Stave Repeats Test', drawRepeats);\n run('Stave End Modifiers Test', drawEndModifiers);\n run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 });\n run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 });\n run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 });\n run('Multiple Staves Volta Test', drawVolta);\n run('Volta + Modifier Measure Test', drawVoltaModifier);\n run('Tempo Test', drawTempo);\n run('Single Line Configuration Test', configureSingleLine);\n run('Batch Line Configuration Test', configureAllLines);\n run('Stave Text Test', drawStaveText);\n run('Multiple Line Stave Text Test', drawStaveTextMultiLine);\n run('Factory API', factoryAPI);\n },\n};\nfunction sortByCategory() {\n const stave = new Stave(0, 0, 300);\n const clef0 = new Clef('treble');\n const clef1 = new Clef('alto');\n const clef2 = new Clef('bass');\n const time0 = new TimeSignature('C');\n const time1 = new TimeSignature('C|');\n const time2 = new TimeSignature('9/8');\n const key0 = new KeySignature('G');\n const key1 = new KeySignature('F');\n const key2 = new KeySignature('D');\n const bar0 = new Barline(BarlineType.SINGLE);\n const bar1 = new Barline(BarlineType.DOUBLE);\n const bar2 = new Barline(BarlineType.NONE);\n // const order0 = { barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3 };\n // const order1 = { timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3 };\n const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 };\n const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 };\n const sortAndCompare = (title, a, b, order) => {\n stave.sortByCategory(a, order);\n // Verify that the two arrays are identical.\n let isSame = true;\n if (a.length !== b.length)\n isSame = false;\n for (let i = 0; i < a.length; ++i) {\n if (a[i] !== b[i])\n isSame = false;\n }\n ok(isSame, title);\n };\n sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0);\n sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1);\n sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0);\n sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 150);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n ok(true, 'all pass');\n}\nfunction drawOpenStave(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n let stave = new Stave(10, 10, 300, { left_bar: false });\n stave.setContext(ctx);\n stave.draw();\n stave = new Stave(10, 150, 300, { right_bar: false });\n stave.setContext(ctx);\n stave.draw();\n ok(true, 'all pass');\n}\nfunction drawMultipleMeasures(options, contextBuilder) {\n var _a, _b;\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 550, 200);\n // bar 1\n const staveBar1 = new Stave(10, 50, 200);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.DOUBLE);\n staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false);\n staveBar1.addClef('treble').setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300);\n staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize);\n staveBar2.setEndBarType(BarlineType.END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n}\nfunction drawRepeats(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 750, 120);\n // bar 1\n const staveBar1 = new Stave(10, 0, 250);\n staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar1.setEndBarType(BarlineType.REPEAT_END);\n staveBar1.addClef('treble');\n staveBar1.addKeySignature('A');\n staveBar1.setContext(ctx).draw();\n const notesBar1 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar1, notesBar1);\n // bar 2 - juxtaposing second bar next to first bar\n const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250);\n staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar2.setEndBarType(BarlineType.REPEAT_END);\n staveBar2.setContext(ctx).draw();\n const notesBar2_part1 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n const notesBar2_part2 = [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ];\n notesBar2_part2[0].addModifier(new Accidental('#'), 0);\n notesBar2_part2[1].addModifier(new Accidental('#'), 0);\n notesBar2_part2[3].addModifier(new Accidental('b'), 0);\n // create the beams for 8th notes in 2nd measure\n const beam1 = new Beam(notesBar2_part1);\n const beam2 = new Beam(notesBar2_part2);\n const notesBar2 = notesBar2_part1.concat(notesBar2_part2);\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar2, notesBar2);\n // Render beams\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n // bar 3 - juxtaposing third bar next to second bar\n const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50);\n staveBar3.setContext(ctx).draw();\n const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar3, notesBar3);\n // bar 4 - juxtaposing third bar next to third bar\n const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift());\n staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN);\n staveBar4.setEndBarType(BarlineType.REPEAT_END);\n staveBar4.setContext(ctx).draw();\n const notesBar4 = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, staveBar4, notesBar4);\n}\nfunction drawEndModifiers(options, contextBuilder) {\n expect(0);\n const staveWidth = 230;\n const blockHeight = 80;\n let x = 10;\n let y = 0;\n const ctx = contextBuilder(options.elementId, 800, 700);\n function drawStavesInTwoLines(endBarLine) {\n // Draw a stave with one measure. Change the ending modifiers.\n // eslint-disable-next-line\n function drawStave(x, y, width, begMods, endMods) {\n const staveBar = new Stave(x, y, width - 10);\n if (begMods) {\n if (begMods.barLine !== undefined) {\n staveBar.setBegBarType(begMods.barLine);\n }\n if (begMods.clef !== undefined) {\n staveBar.addClef(begMods.clef);\n }\n if (begMods.keySig !== undefined) {\n staveBar.addKeySignature(begMods.keySig);\n }\n if (begMods.timeSig !== undefined) {\n staveBar.setTimeSignature(begMods.timeSig);\n }\n }\n if (endMods) {\n if (endMods.barLine !== undefined) {\n staveBar.setEndBarType(endMods.barLine);\n }\n if (endMods.clef !== undefined) {\n staveBar.addEndClef(endMods.clef);\n }\n if (endMods.keySig !== undefined) {\n staveBar.setEndKeySignature(endMods.keySig);\n }\n if (endMods.timeSig !== undefined) {\n staveBar.setEndTimeSignature(endMods.timeSig);\n }\n }\n staveBar.setContext(ctx).draw();\n const notesBar = [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'qr' }),\n new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n }\n drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' });\n x += staveWidth + 50;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' });\n x += staveWidth;\n x = 10;\n y += blockHeight;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' });\n x += staveWidth;\n drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' });\n x += staveWidth;\n }\n y = 0;\n x = 10;\n // First pair of staves.\n drawStavesInTwoLines(BarlineType.SINGLE);\n y += blockHeight + 10;\n x = 10;\n // Second pair of staves, with double barlines.\n drawStavesInTwoLines(BarlineType.DOUBLE);\n y += blockHeight + 10;\n x = 10;\n // Third pair of staves, with \"two dot\" repeat barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_END);\n y += blockHeight + 10;\n x = 10;\n // Fourth pair of staves, with \"two dots\" on each side of the barlines.\n drawStavesInTwoLines(BarlineType.REPEAT_BOTH);\n}\nfunction drawStaveRepetition(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 150);\n mm1.addClef('treble');\n mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift);\n mm1.setMeasure(1);\n mm1.setContext(ctx).draw();\n const notesmm1 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150);\n mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150);\n mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150);\n mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['f/4'], duration: 'q' }),\n new StaveNote({ keys: ['a/4'], duration: 'q' }),\n ];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n}\nfunction drawVolta(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 725, 200);\n // bar 1\n const mm1 = new Stave(10, 50, 125);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setRepetitionType(Repetition.type.SEGNO_LEFT);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2 - juxtapose second measure\n const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60);\n mm2.setRepetitionType(Repetition.type.CODA_RIGHT);\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3 - juxtapose third measure\n const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60);\n mm3.setVoltaType(VoltaType.BEGIN, '1.', -5);\n mm3.setMeasure(3);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4 - juxtapose fourth measure\n const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60);\n mm4.setVoltaType(VoltaType.MID, '', -5);\n mm4.setMeasure(4);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5 - juxtapose fifth measure\n const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60);\n mm5.setEndBarType(BarlineType.REPEAT_END);\n mm5.setVoltaType(VoltaType.END, '', -5);\n mm5.setMeasure(5);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6 - juxtapose sixth measure\n const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60);\n mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5);\n mm6.setEndBarType(BarlineType.DOUBLE);\n mm6.setMeasure(6);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n // bar 7 - juxtapose seventh measure\n const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60);\n mm7.setMeasure(7);\n mm7.setSection('B', 0);\n mm7.setContext(ctx).draw();\n const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm7, notesmm7);\n // bar 8 - juxtapose eighth measure\n const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60);\n mm8.setEndBarType(BarlineType.DOUBLE);\n mm8.setRepetitionType(Repetition.type.DS_AL_CODA);\n mm8.setMeasure(8);\n mm8.setContext(ctx).draw();\n const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm8, notesmm8);\n // bar 9 - juxtapose ninth measure\n const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125);\n mm9.setEndBarType(BarlineType.END);\n mm9.setRepetitionType(Repetition.type.CODA_LEFT);\n mm9.addClef('treble');\n mm9.addKeySignature('A');\n mm9.setMeasure(9);\n mm9.setContext(ctx).draw();\n const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm9, notesmm9);\n}\nfunction drawVoltaModifier(options, contextBuilder) {\n expect(0);\n // Get the rendering context\n const ctx = contextBuilder(options.elementId, 1100, 200);\n // bar 1: volta begin, with modifiers (clef, keysignature)\n const mm1 = new Stave(10, 50, 175);\n mm1.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5);\n mm1.addClef('treble');\n mm1.addKeySignature('A');\n mm1.setMeasure(1);\n mm1.setSection('A', 0);\n mm1.setContext(ctx).draw();\n const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n // Helper function to justify and draw a 4/4 voice\n Formatter.FormatAndDraw(ctx, mm1, notesmm1);\n // bar 2: volta begin_mid, with modifiers (clef, keysignature)\n const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175);\n mm2.setBegBarType(BarlineType.REPEAT_BEGIN);\n mm2.setRepetitionType(Repetition.type.DS);\n mm2.setVoltaType(VoltaType.BEGIN, '2.', -5);\n mm2.addClef('treble');\n mm2.addKeySignature('A');\n mm2.setMeasure(2);\n mm2.setContext(ctx).draw();\n const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm2, notesmm2);\n // bar 3: volta mid, with modifiers (clef, keysignature)\n const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175);\n mm3.setVoltaType(VoltaType.MID, '', -5);\n mm3.setRepetitionType(Repetition.type.DS);\n mm3.addClef('treble');\n mm3.addKeySignature('B');\n mm3.setMeasure(3);\n mm3.setSection('B', 0);\n mm3.setContext(ctx).draw();\n const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm3, notesmm3);\n // bar 4: volta end, with modifiers (clef, keysignature)\n const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175);\n mm4.setVoltaType(VoltaType.END, '1.', -5);\n mm4.setRepetitionType(Repetition.type.DS);\n mm4.addClef('treble');\n mm4.addKeySignature('A');\n mm4.setMeasure(4);\n mm4.setSection('C', 0);\n mm4.setContext(ctx).draw();\n const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm4, notesmm4);\n // bar 5: d.s. shift (similar potential x-shift concern)\n const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm5.setEndBarType(BarlineType.DOUBLE);\n mm5.setRepetitionType(Repetition.type.DS);\n mm5.addClef('treble');\n mm5.addKeySignature('A');\n mm5.setMeasure(5);\n mm5.setSection('D', 0);\n mm5.setContext(ctx).draw();\n const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm5, notesmm5);\n // bar 6: d.s. without modifiers\n const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175);\n // mm5.addModifier(new Repetition(Repetition.type.DS, mm4.getX() + mm4.getWidth(), 50), StaveModifierPosition.RIGHT);\n mm6.setRepetitionType(Repetition.type.DS);\n mm6.setMeasure(6);\n mm6.setSection('E', 0);\n mm6.setContext(ctx).draw();\n const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })];\n Formatter.FormatAndDraw(ctx, mm6, notesmm6);\n}\nfunction drawTempo(options, contextBuilder) {\n expect(0);\n const ctx = contextBuilder(options.elementId, 725, 350);\n const padding = 10;\n let x = 0;\n let y = 50;\n function drawTempoStaveBar(width, tempo, tempo_y, notes) {\n const staveBar = new Stave(padding + x, y, width);\n if (x === 0)\n staveBar.addClef('treble');\n staveBar.setTempo(tempo, tempo_y);\n staveBar.setContext(ctx).draw();\n const notesBar = notes || [\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n new StaveNote({ keys: ['d/4'], duration: 'q' }),\n new StaveNote({ keys: ['b/4'], duration: 'q' }),\n new StaveNote({ keys: ['c/4'], duration: 'q' }),\n ];\n Formatter.FormatAndDraw(ctx, staveBar, notesBar);\n x += width;\n }\n drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/5'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n x = 0;\n y += 150;\n drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0);\n drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0);\n drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0);\n drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0);\n drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n new StaveNote({ keys: ['c/4'], duration: '8' }),\n new StaveNote({ keys: ['d/4'], duration: '8' }),\n new StaveNote({ keys: ['g/4'], duration: '8' }),\n new StaveNote({ keys: ['e/4'], duration: '8' }),\n ]);\n}\nfunction configureSingleLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLine(0, { visible: true })\n .setConfigForLine(1, { visible: false })\n .setConfigForLine(2, { visible: true })\n .setConfigForLine(3, { visible: false })\n .setConfigForLine(4, { visible: true });\n stave.setContext(ctx).draw();\n const config = stave.getConfigForLines();\n equal(config[0].visible, true, 'getLinesConfiguration() - Line 0');\n equal(config[1].visible, false, 'getLinesConfiguration() - Line 1');\n equal(config[2].visible, true, 'getLinesConfiguration() - Line 2');\n equal(config[3].visible, false, 'getLinesConfiguration() - Line 3');\n equal(config[4].visible, true, 'getLinesConfiguration() - Line 4');\n ok(true, 'all pass');\n}\nfunction configureAllLines(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave\n .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }])\n .setContext(ctx)\n .draw();\n const config = stave.getConfigForLines();\n equal(config[0].visible, false, 'getLinesConfiguration() - Line 0');\n equal(config[1].visible, true, 'getLinesConfiguration() - Line 1');\n equal(config[2].visible, false, 'getLinesConfiguration() - Line 2');\n equal(config[3].visible, true, 'getLinesConfiguration() - Line 3');\n equal(config[4].visible, false, 'getLinesConfiguration() - Line 4');\n ok(true, 'all pass');\n}\nfunction drawStaveText(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 140);\n const stave = new Stave(300, 10, 300);\n stave.setText('Violin', Modifier.Position.LEFT);\n stave.setText('Right Text', Modifier.Position.RIGHT);\n stave.setText('Above Text', Modifier.Position.ABOVE);\n stave.setText('Below Text', Modifier.Position.BELOW);\n stave.setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction drawStaveTextMultiLine(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 900, 200);\n const stave = new Stave(300, 40, 300);\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 });\n stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 });\n stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT });\n stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT });\n stave.setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction factoryAPI(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const stave = f.Stave({ x: 300, y: 40, width: 300 });\n stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 });\n stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 });\n f.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(StaveTests);\nexport { StaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveConnector Tests\n// TODO: Should we change StaveConnector.type => StaveConnectorType? We are inconsistent with this.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Modifier } from '../src/modifier';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveConnector } from '../src/staveconnector';\nconst StaveConnectorTests = {\n Start() {\n QUnit.module('StaveConnector');\n const run = VexFlowTests.runTests;\n run('Single Draw Test', drawSingle);\n run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines);\n run('Single Both Sides Test', drawSingleBoth);\n run('Double Draw Test', drawDouble);\n run('Bold Double Line Left Draw Test', drawRepeatBegin);\n run('Bold Double Line Right Draw Test', drawRepeatEnd);\n run('Thin Double Line Right Draw Test', drawThinDouble);\n run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent);\n run('Bold Double Lines Offset Draw Test', drawRepeatOffset);\n run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2);\n run('Brace Draw Test', drawBrace);\n run('Brace Wide Draw Test', drawBraceWide);\n run('Bracket Draw Test', drawBracket);\n run('Combined Draw Test', drawCombined);\n },\n};\nfunction drawSingle(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n ok(true, 'all pass');\n}\nfunction drawSingle4pxStaveLines(options, contextBuilder) {\n const oldThickness = Flow.STAVE_LINE_THICKNESS;\n Flow.STAVE_LINE_THICKNESS = 4;\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n Flow.STAVE_LINE_THICKNESS = oldThickness;\n ok(true, 'all pass');\n}\nfunction drawSingleBoth(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector1 = new StaveConnector(stave1, stave2);\n connector1.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setContext(ctx);\n const connector2 = new StaveConnector(stave1, stave2);\n connector2.setType(StaveConnector.type.SINGLE_RIGHT);\n connector2.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector1.draw();\n connector2.draw();\n ok(true, 'all pass');\n}\nfunction drawDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.DOUBLE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawBrace(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 450, 300);\n const stave1 = new Stave(100, 10, 300);\n const stave2 = new Stave(100, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n connector.setText('Piano');\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawBraceWide(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, -20, 300);\n const stave2 = new Stave(25, 200, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACE);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawBracket(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n const connector = new StaveConnector(stave1, stave2);\n const line = new StaveConnector(stave1, stave2);\n connector.setType(StaveConnector.type.BRACKET);\n connector.setContext(ctx);\n line.setType(StaveConnector.type.SINGLE);\n connector.setContext(ctx);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n connector.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawRepeatBegin(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawRepeatEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawThinDouble(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 300);\n const stave2 = new Stave(25, 120, 300);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave1.setEndBarType(BarlineType.DOUBLE);\n stave2.setEndBarType(BarlineType.DOUBLE);\n const line = new StaveConnector(stave1, stave2);\n line.setType(StaveConnector.type.THIN_DOUBLE);\n line.setContext(ctx);\n stave1.draw();\n stave2.draw();\n line.draw();\n ok(true, 'all pass');\n}\nfunction drawRepeatAdjacent(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n ok(true, 'all pass');\n}\nfunction drawRepeatOffset2(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(175, 10, 150);\n const stave4 = new Stave(175, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('treble');\n stave2.addClef('bass');\n stave3.addClef('alto');\n stave4.addClef('treble');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n ok(true, 'all pass');\n}\nfunction drawRepeatOffset(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 300);\n const stave1 = new Stave(25, 10, 150);\n const stave2 = new Stave(25, 120, 150);\n const stave3 = new Stave(185, 10, 150);\n const stave4 = new Stave(185, 120, 150);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave1.addClef('bass');\n stave2.addClef('alto');\n stave3.addClef('treble');\n stave4.addClef('tenor');\n stave3.addKeySignature('Ab');\n stave4.addKeySignature('Ab');\n stave1.addTimeSignature('4/4');\n stave2.addTimeSignature('4/4');\n stave3.addTimeSignature('6/8');\n stave4.addTimeSignature('6/8');\n stave1.setEndBarType(BarlineType.REPEAT_END);\n stave2.setEndBarType(BarlineType.REPEAT_END);\n stave3.setEndBarType(BarlineType.END);\n stave4.setEndBarType(BarlineType.END);\n stave1.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave2.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave3.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave4.setBegBarType(BarlineType.REPEAT_BEGIN);\n const connector1 = new StaveConnector(stave1, stave2);\n const connector2 = new StaveConnector(stave1, stave2);\n const connector3 = new StaveConnector(stave3, stave4);\n const connector4 = new StaveConnector(stave3, stave4);\n const connector5 = new StaveConnector(stave3, stave4);\n connector1.setContext(ctx);\n connector2.setContext(ctx);\n connector3.setContext(ctx);\n connector4.setContext(ctx);\n connector5.setContext(ctx);\n connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT);\n connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT);\n connector5.setType(StaveConnector.type.SINGLE_LEFT);\n connector1.setXShift(stave1.getModifierXShift());\n connector3.setXShift(stave3.getModifierXShift());\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n connector1.draw();\n connector2.draw();\n connector3.draw();\n connector4.draw();\n connector5.draw();\n ok(true, 'all pass');\n}\nfunction drawCombined(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 700);\n const stave1 = new Stave(150, 10, 300);\n const stave2 = new Stave(150, 100, 300);\n const stave3 = new Stave(150, 190, 300);\n const stave4 = new Stave(150, 280, 300);\n const stave5 = new Stave(150, 370, 300);\n const stave6 = new Stave(150, 460, 300);\n const stave7 = new Stave(150, 560, 300);\n stave1.setText('Violin', Modifier.Position.LEFT);\n stave1.setContext(ctx);\n stave2.setContext(ctx);\n stave3.setContext(ctx);\n stave4.setContext(ctx);\n stave5.setContext(ctx);\n stave6.setContext(ctx);\n stave7.setContext(ctx);\n const conn_single = new StaveConnector(stave1, stave7);\n const conn_double = new StaveConnector(stave2, stave3);\n const conn_bracket = new StaveConnector(stave4, stave7);\n const conn_none = new StaveConnector(stave4, stave5);\n const conn_brace = new StaveConnector(stave6, stave7);\n conn_single.setType(StaveConnector.type.SINGLE);\n conn_double.setType(StaveConnector.type.DOUBLE);\n conn_bracket.setType(StaveConnector.type.BRACKET);\n conn_brace.setType(StaveConnector.type.BRACE);\n conn_brace.setXShift(-5);\n conn_double.setText('Piano');\n conn_none.setText('Multiple', { shift_y: -15 });\n conn_none.setText('Line Text', { shift_y: 15 });\n conn_brace.setText('Harpsichord');\n conn_single.setContext(ctx);\n conn_double.setContext(ctx);\n conn_bracket.setContext(ctx);\n conn_none.setContext(ctx);\n conn_brace.setContext(ctx);\n stave1.draw();\n stave2.draw();\n stave3.draw();\n stave4.draw();\n stave5.draw();\n stave6.draw();\n stave7.draw();\n conn_single.draw();\n conn_double.draw();\n conn_bracket.draw();\n conn_none.draw();\n conn_brace.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(StaveConnectorTests);\nexport { StaveConnectorTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Raffaele Viglianti, 2012\n//\n// StaveHairpin Tests\n// TODO: Incorrect property names in the options object: vo, left_ho, right_ho.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { StaveHairpin } from '../src/stavehairpin';\nconst StaveHairpinTests = {\n Start() {\n QUnit.module('StaveHairpin');\n const run = VexFlowTests.runTests;\n run('Simple StaveHairpin', simple);\n run('Horizontal Offset StaveHairpin', horizontal);\n run('Vertical Offset StaveHairpin', vertical);\n run('Height StaveHairpin', height);\n },\n};\n/**\n * Helper function to draw a single hairpin (either crescendo or decrescendo).\n * @param type is StaveHairpin.type.CRESC or StaveHairpin.type.DECRESC.\n * @param position is Modifier.Position.ABOVE or Modifier.Position.BELOW.\n */\nfunction drawHairpin(first_note, last_note, ctx, type, position, options) {\n const hairpin = new StaveHairpin({ first_note, last_note }, type);\n hairpin.setContext(ctx);\n hairpin.setPosition(position);\n if (options) {\n hairpin.setRenderOptions(options);\n }\n hairpin.draw();\n}\n/**\n * Helper function\n */\nfunction createTest(drawTwoHairpins) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options);\n const ctx = factory.getContext();\n const stave = factory.Stave();\n const notes = [\n factory\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(factory.Accidental({ type: 'b' }), 0)\n .addModifier(factory.Accidental({ type: '#' }), 1),\n factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }),\n ];\n const voice = factory.Voice().addTickables(notes);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n drawTwoHairpins(ctx, notes);\n ok(true, 'Simple Test');\n };\n}\nconst simple = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4);\n drawHairpin(notes[1], notes[3], ctx, 2, 3);\n});\nconst horizontal = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 3, {\n height: 10,\n // TODO: these three property names seem to be incorrect.\n // vo => should it be 'y_shift'?\n // left_ho => should it be 'left_shift_px'?\n // right_ho => should it be 'right_shift_px'?\n vo: 20,\n left_ho: 20,\n right_ho: -20, // right horizontal offset\n });\n drawHairpin(notes[3], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 120, // right horizontal offset\n });\n});\nconst vertical = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 10,\n y_shift: -15,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nconst height = createTest((ctx, notes) => {\n drawHairpin(notes[0], notes[2], ctx, 1, 4, {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0, // right horizontal offset\n });\n drawHairpin(notes[2], notes[3], ctx, 2, 4, {\n height: 15,\n y_shift: 0,\n left_shift_px: 2,\n right_shift_px: 0, // right horizontal offset\n });\n});\nVexFlowTests.register(StaveHairpinTests);\nexport { StaveHairpinTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveLine Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Font, FontStyle } from '../src/font';\nconst StaveLineTests = {\n Start() {\n QUnit.module('StaveLine');\n const run = VexFlowTests.runTests;\n run('Simple StaveLine', simple0);\n run('StaveLine Arrow Options', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }),\n f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().addTickables(notes);\n f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: {\n font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC },\n text: 'gliss.',\n },\n });\n const staveLine2 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [2, 1, 0],\n last_indices: [0, 1, 2],\n });\n staveLine2.render_options.line_dash = [10, 10];\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 770);\n const stave = f.Stave().addClef('treble');\n const notes = [\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0),\n f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }),\n f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }),\n f\n .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' })\n .addModifier(f.Accidental({ type: '#' }), 2),\n ];\n Dot.buildAndAttach([notes[0]], { all: true });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n const staveLine0 = f.StaveLine({\n from: notes[0],\n to: notes[1],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Left' },\n });\n const staveLine4 = f.StaveLine({\n from: notes[2],\n to: notes[3],\n first_indices: [1],\n last_indices: [1],\n options: { text: 'Right' },\n });\n const staveLine1 = f.StaveLine({\n from: notes[4],\n to: notes[5],\n first_indices: [0],\n last_indices: [0],\n options: { text: 'Center' },\n });\n const staveLine2 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [1],\n last_indices: [0],\n });\n const staveLine3 = f.StaveLine({\n from: notes[6],\n to: notes[7],\n first_indices: [2],\n last_indices: [2],\n options: { text: 'Top' },\n });\n staveLine0.render_options.draw_end_arrow = true;\n staveLine0.render_options.text_justification = 1;\n staveLine0.render_options.text_position_vertical = 2;\n staveLine1.render_options.draw_end_arrow = true;\n staveLine1.render_options.arrowhead_length = 30;\n staveLine1.render_options.line_width = 5;\n staveLine1.render_options.text_justification = 2;\n staveLine1.render_options.text_position_vertical = 2;\n staveLine4.render_options.line_width = 2;\n staveLine4.render_options.draw_end_arrow = true;\n staveLine4.render_options.draw_start_arrow = true;\n staveLine4.render_options.arrowhead_angle = 0.5;\n staveLine4.render_options.arrowhead_length = 20;\n staveLine4.render_options.text_justification = 3;\n staveLine4.render_options.text_position_vertical = 2;\n staveLine2.render_options.draw_start_arrow = true;\n staveLine2.render_options.line_dash = [5, 4];\n staveLine3.render_options.draw_end_arrow = true;\n staveLine3.render_options.draw_start_arrow = true;\n staveLine3.render_options.color = 'red';\n staveLine3.render_options.text_position_vertical = 1;\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nVexFlowTests.register(StaveLineTests);\nexport { StaveLineTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveModifier Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nconst StaveModifierTests = {\n Start() {\n QUnit.module('StaveModifier');\n const run = VexFlowTests.runTests;\n run('Stave Draw Test', draw);\n run('Begin & End StaveModifier Test', drawBeginAndEnd);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n const stave = new Stave(10, 10, 300);\n stave.setContext(ctx);\n stave.draw();\n equal(stave.getYForNote(0), 100, 'getYForNote(0)');\n equal(stave.getYForLine(5), 100, 'getYForLine(5)');\n equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line');\n equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line');\n ok(true, 'all pass');\n}\nfunction drawBeginAndEnd(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n const stave = new Stave(10, 10, 400);\n stave.setContext(ctx);\n stave.setTimeSignature('C|');\n stave.setKeySignature('Db');\n stave.setClef('treble');\n stave.setBegBarType(BarlineType.REPEAT_BEGIN);\n stave.setEndClef('alto');\n stave.setEndTimeSignature('9/8');\n stave.setEndKeySignature('G', 'C#');\n stave.setEndBarType(BarlineType.DOUBLE);\n stave.draw();\n // change\n const END = StaveModifierPosition.END;\n stave.setY(100);\n stave.setTimeSignature('3/4');\n stave.setKeySignature('G', 'C#');\n stave.setClef('bass');\n stave.setBegBarType(BarlineType.SINGLE);\n stave.setClef('treble', undefined, undefined, END);\n stave.setTimeSignature('C', undefined, END);\n stave.setKeySignature('F', undefined, END);\n stave.setEndBarType(BarlineType.SINGLE);\n stave.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(StaveModifierTests);\nexport { StaveModifierTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveNote Tests\n// TODO: In StaveNote.preFormat() line 929, should noteHeadPadding default to StaveNote.minNoteheadPadding?\n// The bounding box of a note changes slightly when we add a ModifierContext (even if we add zero modifiers).\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental } from '../src/accidental';\nimport { Annotation, AnnotationVerticalJustify } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Beam } from '../src/beam';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Fraction } from '../src/fraction';\nimport { FretHandFinger } from '../src/frethandfinger';\nimport { Modifier } from '../src/modifier';\nimport { ModifierContext } from '../src/modifiercontext';\nimport { Stave } from '../src/stave';\nimport { StaveNote } from '../src/stavenote';\nimport { Stem } from '../src/stem';\nimport { StringNumber } from '../src/stringnumber';\nimport { Stroke } from '../src/strokes';\nimport { TickContext } from '../src/tickcontext';\nconst StaveNoteTests = {\n Start() {\n QUnit.module('StaveNote');\n test('Tick', ticks);\n test('Tick - New API', ticksNewAPI);\n test('Stem', stem);\n test('Automatic Stem Direction', autoStem);\n test('Stem Extension Pitch', stemExtensionPitch);\n test('Displacement after calling setStemDirection', setStemDirectionDisplacement);\n test('StaveLine', staveLine);\n test('Width', width);\n test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' });\n run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' });\n run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' });\n run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' });\n run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted);\n run('StaveNote Draw - Slash', drawSlash);\n run('Displacements', displacements);\n run('StaveNote Draw - Bass 2', drawBass);\n run('StaveNote Draw - Key Styles', drawKeyStyles);\n run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles);\n run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths);\n run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag);\n run('StaveNote Draw - StaveNote Styles', drawNoteStyles);\n run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles);\n run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp);\n run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown);\n run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp);\n run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown);\n run('No Padding', noPadding);\n run('Note Heads Placement - Simple', noteHeadsSimple);\n run('Note Heads Placement - Hidden Notes', noteHeadsHidden);\n run('Center Aligned Note', centerAlignedRest);\n run('Center Aligned Note with Articulation', centerAlignedRestFermata);\n run('Center Aligned Note with Annotation', centerAlignedRestAnnotation);\n run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice);\n run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers);\n // This interactivity test currently only works with the SVG backend.\n VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, {\n clef: 'treble',\n octaveShift: 0,\n restKey: 'r/4',\n ui: true,\n });\n },\n};\n// Helper function to create StaveNotes.\nconst staveNote = (struct) => new StaveNote(struct);\n/**\n * Helper function to draw a note with an optional bounding box.\n */\nfunction draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) {\n // Associate the note with the stave.\n note.setStave(stave);\n // A ModifierContext is required for dots and other modifiers to be drawn properly.\n // If added, it changes the bounding box of a note, even if there are no modifiers to draw.\n // See StaveNote.minNoteheadPadding in stavenote.ts.\n if (addModifierContext) {\n note.addToModifierContext(new ModifierContext());\n }\n new TickContext().addTickable(note).preFormat().setX(x);\n note.setContext(context).draw();\n if (drawBoundingBox) {\n const bb = note.getBoundingBox();\n context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n context.stroke();\n }\n return note;\n}\nfunction ticks() {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [durationString, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': ['1/2', 8.0, 'n'],\n 'Whole note': ['w', 4.0, 'n'],\n 'Quarter note': ['q', 1.0, 'n'],\n 'Dotted half note': ['hd', 3.0, 'n'],\n 'Doubled-dotted half note': ['hdd', 3.5, 'n'],\n 'Triple-dotted half note': ['hddd', 3.75, 'n'],\n 'Dotted half rest': ['hdr', 3.0, 'r'],\n 'Double-dotted half rest': ['hddr', 3.5, 'r'],\n 'Triple-dotted half rest': ['hdddr', 3.75, 'r'],\n 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'],\n 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'],\n 'Dotted muted 8th note': ['8dm', 0.75, 'm'],\n 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'],\n 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach((testName) => {\n const testData = tickTests[testName];\n const durationString = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString });\n equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction ticksNewAPI() {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n // Key value pairs of `testName: [noteData, expectedBeats, expectedNoteType]`\n const tickTests = {\n 'Breve note': [{ duration: '1/2' }, 8.0, 'n'],\n 'Whole note': [{ duration: 'w' }, 4.0, 'n'],\n 'Quarter note': [{ duration: 'q' }, 1.0, 'n'],\n 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'],\n 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'],\n 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'],\n 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'],\n 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'],\n 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'],\n 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'],\n 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'],\n 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'],\n 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'],\n 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'],\n 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'],\n };\n Object.keys(tickTests).forEach(function (testName) {\n const testData = tickTests[testName];\n const noteData = testData[0];\n const expectedBeats = testData[1];\n const expectedNoteType = testData[2];\n noteData.keys = ['c/4', 'e/4', 'g/4'];\n const note = new StaveNote(noteData);\n equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats');\n equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType);\n });\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, \"Invalid note duration '8.7' throws BadArguments exception\");\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, \"Invalid note type 'Z' throws BadArguments exception\");\n}\nfunction stem() {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' });\n equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem');\n}\nfunction autoStem() {\n const testData = [\n [['c/5', 'e/5', 'g/5'], Stem.DOWN],\n [['e/4', 'g/4', 'c/5'], Stem.UP],\n [['c/5'], Stem.DOWN],\n [['a/4', 'e/5', 'g/5'], Stem.DOWN],\n [['b/4'], Stem.DOWN],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemDirection = td[1];\n const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' });\n equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down'));\n });\n}\nfunction stemExtensionPitch() {\n // [keys, expectedStemExtension, override stem direction]\n const testData = [\n [['c/5', 'e/5', 'g/5'], 0, 0],\n [['e/4', 'g/4', 'c/5'], 0, 0],\n [['c/5'], 0, 0],\n [['f/3'], 15, 0],\n [['f/3'], 15, Stem.UP],\n [['f/3'], 0, Stem.DOWN],\n [['f/3', 'e/5'], 0, 0],\n [['g/6'], 25, 0],\n [['g/6'], 25, Stem.DOWN],\n [['g/6'], 0, Stem.UP],\n ];\n testData.forEach((td) => {\n const keys = td[0];\n const expectedStemExtension = td[1];\n const overrideStemDirection = td[2];\n let note;\n if (overrideStemDirection === 0) {\n note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' });\n }\n else {\n note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection });\n }\n equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension);\n // set to weird Stave\n const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 });\n note.setStave(stave);\n equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2);\n // const whole_note = new StaveNote({ keys: keys, duration: 'w' });\n // equal(\n // whole_note.getStemExtension(),\n // -1 * Flow.STEM_HEIGHT,\n // 'For ' + keys.toString() + ' whole_note StemExtension must always be -1 * Flow.STEM_HEIGHT'\n // );\n });\n}\nfunction setStemDirectionDisplacement() {\n function getDisplacements(note) {\n return note.noteHeads.map((noteHead) => noteHead.isDisplaced());\n }\n const stemUpDisplacements = [false, true, false];\n const stemDownDisplacements = [true, false, false];\n const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' });\n deepEqual(getDisplacements(note), stemUpDisplacements);\n note.setStemDirection(Stem.DOWN);\n deepEqual(getDisplacements(note), stemDownDisplacements);\n note.setStemDirection(Stem.UP);\n deepEqual(getDisplacements(note), stemUpDisplacements);\n}\nfunction staveLine() {\n const stave = new Stave(10, 10, 300);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n note.setStave(stave);\n const props = note.getKeyProps();\n equal(props[0].line, 0, 'C/4 on line 0');\n equal(props[1].line, 1, 'E/4 on line 1');\n equal(props[2].line, 2.5, 'A/4 on line 2.5');\n const ys = note.getYs();\n equal(ys.length, 3, 'Chord should be rendered on three lines');\n equal(ys[0], 100, 'Line for C/4');\n equal(ys[1], 90, 'Line for E/4');\n equal(ys[2], 75, 'Line for A/4');\n}\nfunction width() {\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' });\n throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext() {\n const stave = new Stave(10, 10, 400);\n const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n expect(0);\n}\nfunction drawBasic(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n expect(noteStructs.length * 2);\n const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => {\n child.setAttribute('fill', color);\n child.setAttribute('stroke', color);\n });\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n // If this is an interactivity test (ui: true), then attach mouseover & mouseout handlers to the notes.\n if (options.params.ui) {\n const item = note.getSVGElement();\n if (item) {\n item.addEventListener('mouseover', colorDescendants(item, 'green'), false);\n item.addEventListener('mouseout', colorDescendants(item, 'black'), false);\n }\n }\n ok(note.getX() > 0, 'Note ' + i + ' has X value');\n ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBoundingBoxes(options, contextBuilder) {\n const clef = options.params.clef;\n const octaveShift = options.params.octaveShift;\n const restKey = options.params.restKey;\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 30, 750);\n stave.setContext(ctx);\n stave.addClef(clef);\n stave.draw();\n const lowerKeys = ['c/', 'e/', 'a/'];\n const higherKeys = ['c/', 'e/', 'a/'];\n for (let k = 0; k < lowerKeys.length; k++) {\n lowerKeys[k] = lowerKeys[k] + (4 + octaveShift);\n higherKeys[k] = higherKeys[k] + (5 + octaveShift);\n }\n const restKeys = [restKey];\n const noteStructs = [\n { clef: clef, keys: higherKeys, duration: '1/2' },\n { clef: clef, keys: lowerKeys, duration: 'w' },\n { clef: clef, keys: higherKeys, duration: 'h' },\n { clef: clef, keys: lowerKeys, duration: 'q' },\n { clef: clef, keys: higherKeys, duration: '8' },\n { clef: clef, keys: lowerKeys, duration: '16' },\n { clef: clef, keys: higherKeys, duration: '32' },\n { clef: clef, keys: higherKeys, duration: '64' },\n { clef: clef, keys: higherKeys, duration: '128' },\n { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN },\n { clef: clef, keys: lowerKeys, duration: '128' },\n { clef: clef, keys: restKeys, duration: '1/2r' },\n { clef: clef, keys: restKeys, duration: 'wr' },\n { clef: clef, keys: restKeys, duration: 'hr' },\n { clef: clef, keys: restKeys, duration: 'qr' },\n { clef: clef, keys: restKeys, duration: '8r' },\n { clef: clef, keys: restKeys, duration: '16r' },\n { clef: clef, keys: restKeys, duration: '32r' },\n { clef: clef, keys: restKeys, duration: '64r' },\n { clef: clef, keys: restKeys, duration: '128r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true /* drawBoundingBox */, false /* addModifierContext */);\n ok(note.getX() > 0, 'Note ' + i + ' has X value');\n ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawBass(options, contextBuilder) {\n expect(40);\n const ctx = contextBuilder(options.elementId, 600, 280);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.addClef('bass');\n stave.draw();\n const noteStructs = [\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' },\n { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN },\n { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN },\n { keys: ['r/4'], duration: '1/2r' },\n { keys: ['r/4'], duration: 'wr' },\n { keys: ['r/4'], duration: 'hr' },\n { keys: ['r/4'], duration: 'qr' },\n { keys: ['r/4'], duration: '8r' },\n { keys: ['r/4'], duration: '16r' },\n { keys: ['r/4'], duration: '32r' },\n { keys: ['x/4'], duration: 'h' },\n ];\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25);\n ok(note.getX() > 0, 'Note ' + i + ' has X value');\n ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction displacements(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 155);\n ctx.scale(0.9, 0.9);\n const stave = new Stave(10, 10, 675);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' },\n { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' },\n { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' },\n { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32' },\n { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' },\n { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN },\n { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN },\n { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN },\n { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN },\n {\n keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'],\n duration: '64',\n stem_direction: Stem.DOWN,\n },\n ];\n expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45);\n ok(note.getX() > 0, 'Note ' + i + ' has X value');\n ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawHarmonicAndMuted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 1000, 180);\n const stave = new Stave(10, 10, 950);\n stave.setContext(ctx);\n stave.draw();\n const noteStructs = [\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN },\n { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN },\n ];\n expect(noteStructs.length * 2);\n for (let i = 0; i < noteStructs.length; ++i) {\n const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5);\n ok(note.getX() > 0, 'Note ' + i + ' has X value');\n ok(note.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawSlash(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 700, 180);\n const stave = new Stave(10, 10, 650);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP },\n // Beam\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP },\n ];\n const stave_notes = notes.map((struct) => new StaveNote(struct));\n const beam1 = new Beam([stave_notes[16], stave_notes[17]]);\n const beam2 = new Beam([stave_notes[18], stave_notes[19]]);\n Formatter.FormatAndDraw(ctx, stave, stave_notes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n ok('Slash Note Heads');\n}\nfunction drawKeyStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n ctx.scale(3, 3);\n const stave = new Stave(10, 0, 100);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1)\n .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n ok(note.getX() > 0, 'Note has X value');\n ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n ok(note.getX() > 0, 'Note has X value');\n ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawNoteStemStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n ok('Note Stem Style');\n}\nfunction drawNoteStemLengths(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 975, 150);\n const stave = new Stave(10, 10, 975);\n stave.setContext(ctx).draw();\n const keys = [\n 'e/3',\n 'f/3',\n 'g/3',\n 'a/3',\n 'b/3',\n 'c/4',\n 'd/4',\n 'e/4',\n 'f/4',\n 'g/4',\n 'f/5',\n 'g/5',\n 'a/5',\n 'b/5',\n 'c/6',\n 'd/6',\n 'e/6',\n 'f/6',\n 'g/6',\n 'a/6',\n ];\n const notes = [];\n let note;\n let i;\n for (i = 0; i < keys.length; i++) {\n let duration = 'q';\n if (i % 2 === 1) {\n duration = '8';\n }\n note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6'];\n for (i = 0; i < whole_keys.length; i++) {\n note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave);\n new TickContext().addTickable(note);\n note.setContext(ctx);\n notes.push(note);\n }\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok('Note Stem Length');\n}\nfunction drawNoteStylesWithFlag(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 300, 280);\n const stave = new Stave(10, 0, 100);\n ctx.scale(3, 3);\n const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' })\n .setStave(stave)\n .addModifier(new Accidental('b'), 1);\n note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' });\n new TickContext().addTickable(note).preFormat().setX(25);\n stave.setContext(ctx).draw();\n note.setContext(ctx).draw();\n ok(note.getX() > 0, 'Note has X value');\n ok(note.getYs().length > 0, 'Note has Y values');\n}\nfunction drawBeamStyles(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new Stave(10, 10, 380);\n stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 });\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n // beam1\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // should be unstyled...\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam2 should also be unstyled\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN },\n // beam3\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n { keys: ['b/4'], duration: '8', stem_direction: Stem.UP },\n // beam4\n { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN },\n { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed\n { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN },\n // unbeamed, unstyled\n { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN },\n ];\n const staveNotes = notes.map((note) => new StaveNote(note));\n const beam1 = new Beam(staveNotes.slice(0, 2));\n const beam2 = new Beam(staveNotes.slice(3, 5));\n const beam3 = new Beam(staveNotes.slice(5, 7));\n const beam4 = new Beam(staveNotes.slice(7, 9));\n // stem, key, ledger, flag; beam.setStyle\n beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' });\n staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' });\n staveNotes[0].setStemStyle({ strokeStyle: 'green' });\n staveNotes[1].setStemStyle({ strokeStyle: 'orange' });\n staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' });\n staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' });\n beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' });\n staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 });\n staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' });\n Formatter.FormatAndDraw(ctx, stave, staveNotes, false);\n beam1.setContext(ctx).draw();\n beam2.setContext(ctx).draw();\n beam3.setContext(ctx).draw();\n beam4.setContext(ctx).draw();\n ok('draw beam styles');\n}\nfunction dotsAndFlagsStemUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const notes = [\n staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(notes, { all: true });\n Dot.buildAndAttach([notes[5], notes[11]], { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < notes.length; ++i) {\n draw(notes[i], stave, ctx, i * 65);\n }\n ok(true, 'Full Dot');\n}\nfunction dotsAndFlagsStemDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 150);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '32' }),\n staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }),\n staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n ok(true, 'Full Dot');\n}\nfunction dotsAndBeamsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 800, 160);\n ctx.scale(1.0, 1.0);\n const stave = new Stave(10, 10, 975);\n const staveNotes = [\n staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }),\n staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }),\n ];\n Dot.buildAndAttach(staveNotes, { all: true });\n const beam = new Beam(staveNotes);\n stave.setContext(ctx).draw();\n for (let i = 0; i < staveNotes.length; ++i) {\n draw(staveNotes[i], stave, ctx, i * 65);\n }\n beam.setContext(ctx).draw();\n ok(true, 'Full Dot');\n}\nfunction noteHeadsSimple(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n system4.addStave({\n voices: [\n score.voice(score.notes('e4/q, e4/q/r, e4/h/r')),\n score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')),\n ],\n });\n vf.draw();\n expect(0);\n}\nfunction noPadding(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 500);\n const score = vf.EasyScore();\n function newStave(y, noPadding) {\n let system = vf.System({ y, x: 50, width: 200, noPadding });\n system\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]),\n score.voice(score.notes('g4/w')),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n system = vf.System({ y, x: 250, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))],\n });\n system = vf.System({ y, x: 400, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))],\n });\n system = vf.System({ y, x: 550, width: 150, noPadding });\n system.addStave({\n voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))],\n });\n }\n newStave(100, true);\n newStave(200, false);\n vf.draw();\n expect(0);\n}\nfunction noteHeadsHidden(options) {\n const vf = VexFlowTests.makeFactory(options, 800, 250);\n const score = vf.EasyScore();\n const system1 = vf.System({ y: 100, x: 50, width: 200 });\n const notes1 = score.notes('g4/w');\n notes1[0].render_options.draw = false;\n system1\n .addStave({\n voices: [\n score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]),\n score.voice(notes1),\n ],\n })\n .addClef('treble')\n .addTimeSignature('4/4');\n const system2 = vf.System({ y: 100, x: 250, width: 150 });\n const notes2 = score.notes('b4/w');\n notes2[0].render_options.draw = false;\n system2.addStave({\n voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)],\n });\n const system3 = vf.System({ y: 100, x: 400, width: 150 });\n system3.addStave({\n voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))],\n });\n const system4 = vf.System({ y: 100, x: 550, width: 150 });\n const notes4 = score.notes('e4/q, e4/q/r, e4/h/r');\n notes4[0].render_options.draw = false;\n notes4[2].render_options.draw = false;\n system4.addStave({\n voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))],\n });\n vf.draw();\n expect(0);\n}\nfunction centerAlignedRest(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction centerAlignedRestFermata(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Articulation('a@a').setPosition(3), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction centerAlignedRestAnnotation(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n const note = f\n .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true })\n .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0);\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction centerAlignedNoteMultiModifiers(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4');\n function newFinger(num, pos) {\n return new FretHandFinger(num).setPosition(pos);\n }\n const note = f\n .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true })\n .addModifier(new Annotation('Test').setPosition(3), 0)\n .addStroke(0, new Stroke(2))\n .addModifier(new Accidental('#'), 1)\n .addModifier(newFinger('3', Modifier.Position.LEFT), 0)\n .addModifier(newFinger('2', Modifier.Position.LEFT), 2)\n .addModifier(newFinger('1', Modifier.Position.RIGHT), 1)\n .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2);\n Dot.buildAndAttach([note], { all: true });\n const voice = f.Voice().setStrict(false).addTickables([note]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction centerAlignedMultiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 400, 160);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8');\n // Set a custom duration of 3 / 8.\n const custom_duration = new Fraction(3, 8);\n // TODO: Should the whole rest draw a ledger line that is visible to the left/right of the rest?\n const notes0 = [\n f.StaveNote({\n keys: ['c/4'],\n duration: '1r',\n align_center: true,\n duration_override: custom_duration,\n }),\n ];\n const createStaveNote = (struct) => f.StaveNote(struct);\n const notes1 = [\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ].map(createStaveNote);\n notes1[1].addModifier(f.Accidental({ type: '#' }), 0);\n f.Beam({ notes: notes1 });\n const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0);\n const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1);\n f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave);\n f.draw();\n ok(true);\n}\nVexFlowTests.register(StaveNoteTests);\nexport { StaveNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StaveTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stem } from '../src/stem';\nconst StaveTieTests = {\n Start() {\n QUnit.module('StaveTie');\n const run = VexFlowTests.runTests;\n run('Simple StaveTie', simple);\n run('Chord StaveTie', chord);\n run('Stem Up StaveTie', stemUp);\n run('No End Note With Clef', noEndNote1);\n run('No End Note', noEndNote2);\n run('No Start Note With Clef', noStartNote1);\n run('No Start Note', noStartNote2);\n run('Set Direction Down', setDirectionDown);\n run('Set Direction Up', setDirectionUp);\n },\n};\n/**\n * Used by the 7 tests below to set up the stave, easyscore, notes, voice, and to format & draw.\n */\nfunction createTest(notesData, setupTies) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 300);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const notes = score.notes(notesData[0], notesData[1]);\n const voice = score.voice(notes);\n // const tickables = voice.getTickables(); // same as the notes that we passed in.\n setupTies(factory, notes, stave);\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n ok(true);\n };\n}\nconst simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n });\n});\nconst chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1, 2],\n last_indices: [0, 1, 2],\n });\n});\nconst noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addEndClef('treble');\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[1],\n first_indices: [2],\n last_indices: [2],\n text: 'slow.',\n });\n});\nconst noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => {\n stave.addClef('treble');\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n to: notes[0],\n first_indices: [2],\n last_indices: [2],\n text: 'H',\n });\n});\nconst setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.DOWN },\n });\n});\nconst setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => {\n f.StaveTie({\n from: notes[0],\n to: notes[1],\n first_indices: [0, 1],\n last_indices: [0, 1],\n options: { direction: Stem.UP },\n });\n});\nVexFlowTests.register(StaveTieTests);\nexport { StaveTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// StringNumber Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Glyph } from '../src/glyph';\nimport { Renderer } from '../src/renderer';\nimport { Stave } from '../src/stave';\nimport { BarlineType } from '../src/stavebarline';\nimport { Stroke } from '../src/strokes';\nconst StringNumberTests = {\n Start() {\n QUnit.module('StringNumber');\n const run = VexFlowTests.runTests;\n run('String Number In Notation', drawMultipleMeasures);\n run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false });\n run('Fret Hand Finger In Notation', drawFretHandFingers);\n run('Multi Voice With Strokes, String & Finger Numbers', multi);\n run('Complex Measure With String & Finger Numbers', drawAccidentals);\n },\n};\nfunction drawMultipleMeasures(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;\n const f = VexFlowTests.makeFactory(options, 775, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' });\n notes1[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle)\n .setLastNote(notes1[3])\n .setLineEndType(Renderer.LineEndType.DOWN), 2);\n notes1[2]\n .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(BarlineType.DOUBLE);\n const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' });\n notes2[0]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f\n .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle)\n .setLastNote(notes2[3])\n .setDashed(false), 2);\n notes2[2]\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes2[3]\n .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n // bar 3 - juxtaposing third bar next to second bar\n const stave3 = f\n .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 })\n .setEndBarType(BarlineType.END);\n const notesBar3 = score.notes('(c4 e4 g4 a4)/1.');\n notesBar3[0]\n .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2)\n .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3);\n const voice3 = score.voice(notesBar3, { time: '6/4' });\n f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3);\n f.draw();\n ok(true, 'String Number');\n}\nfunction drawFretHandFingers(options) {\n const f = VexFlowTests.makeFactory(options, 725, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble');\n const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' });\n notes1[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes1[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 1);\n notes1[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2 - juxtaposing second bar next to first bar\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 })\n .setEndBarType(BarlineType.END);\n const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem=\"down\"]', {\n stem: 'up',\n });\n notes2[0]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 2);\n notes2[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2);\n notes2[2]\n .addModifier(f.Fingering({ number: '3', position: 'below' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes2[3]\n .addModifier(f.Fingering({ number: '3', position: 'right' }), 0)\n .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0)\n .addModifier(f.Fingering({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1)\n .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n ok(true, 'String Number');\n}\nfunction multi(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0]\n .addStroke(0, new Stroke(5))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2);\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'right' }), 1)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1)\n .addModifier(f.Fingering({ number: '1', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2);\n notes1[3]\n .addStroke(0, new Stroke(1))\n .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2)\n .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1);\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n notes2[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0);\n notes2[2].addModifier(f.Accidental({ type: '#' }), 0);\n notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n // Position string number 6 beneath the strum arrow: left (15) and down (18)\n notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0);\n // Important Note: notes2 must come first, otherwise ledger lines from notes2 will be drawn on top of notes from notes1!\n // BUG: VexFlow draws TWO ledger lines for middle C, because both notes1 and notes2 require the middle C ledger line.\n const voices = [score.voice(notes2), score.voice(notes1)];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n f.draw();\n ok(true, 'Strokes Test Multi Voice');\n}\nfunction drawAccidentals(options) {\n const f = VexFlowTests.makeFactory(options, 750);\n const glyphScale = 39; // default font scale\n const clefWidth = Glyph.getWidth('gClef', glyphScale); // widest clef\n const notes = [\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }),\n ];\n notes[0]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[1]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[2]\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 1)\n .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Fingering({ number: '3', position: 'left' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Fingering({ number: '2', position: 'right' }), 4)\n .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 5)\n .addModifier(f.Accidental({ type: '#' }), 5);\n notes[3]\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4)\n .addModifier(f.Accidental({ type: '#' }), 5);\n const voice = f.Voice().addTickables(notes);\n const ctx = f.getContext();\n const formatter = f.Formatter().joinVoices([voice]);\n const stavePadding = clefWidth + Stave.defaultPadding + 10;\n const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding);\n formatter.format([voice], nwidth);\n const stave = f\n .Stave({ x: 0, y: 0, width: nwidth + stavePadding })\n .setContext(ctx)\n .setEndBarType(BarlineType.DOUBLE)\n .addClef('treble')\n .draw();\n voice.draw(ctx, stave);\n ok(true, 'String Number');\n}\nVexFlowTests.register(StringNumberTests);\nexport { StringNumberTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Strokes Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline, Beam, Bend, Stroke } from '../src/index';\nconst StrokesTests = {\n Start() {\n QUnit.module('Strokes');\n const run = VexFlowTests.runTests;\n // TODO: Rename tests by removing 'Strokes - ' since it is redundant with the module name.\n // This will make flow.html easier to read.\n run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo);\n run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless);\n run('Strokes - Multi Voice', multiVoice);\n run('Strokes - Notation and Tab', notesWithTab);\n run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab);\n },\n};\nfunction brushRollRasquedo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(1));\n notes1[1]\n .addStroke(0, new Stroke(2))\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 0);\n notes1[2].addStroke(0, new Stroke(1));\n notes1[3].addStroke(0, new Stroke(2));\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' });\n notes2[0].addStroke(0, new Stroke(3));\n notes2[1].addStroke(0, new Stroke(4));\n notes2[2].addStroke(0, new Stroke(5));\n notes2[3]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: 'bb' }), 0)\n .addModifier(f.Accidental({ type: 'bb' }), 1)\n .addModifier(f.Accidental({ type: 'bb' }), 2);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n ok(true, 'Brush/Roll/Rasquedo');\n}\nfunction arpeggioDirectionless(options) {\n const f = VexFlowTests.makeFactory(options, 700, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' });\n const graceNoteStructs = [\n { keys: ['e/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n ];\n const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct));\n const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false });\n graceNoteGroup.beamNotes();\n notes1[0].addStroke(0, new Stroke(7));\n notes1[1]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1)\n .addModifier(f.Accidental({ type: '#' }), 2)\n .addModifier(f.Accidental({ type: '#' }), 3);\n notes1[2]\n .addStroke(0, new Stroke(7))\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(graceNoteGroup, 0);\n notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({\n notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })],\n }), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n f.draw();\n ok(true, 'Arpeggio directionless (without arrows)');\n}\nfunction multiVoice(options) {\n const f = VexFlowTests.makeFactory(options, 500, 200);\n const score = f.EasyScore();\n const stave = f.Stave();\n const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(5));\n notes1[1]\n .addStroke(0, new Stroke(6))\n .addModifier(f.Accidental({ type: '#' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 2);\n notes1[2].addStroke(0, new Stroke(2));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' });\n f.Beam({ notes: notes2.slice(0, 4) });\n f.Beam({ notes: notes2.slice(4, 8) });\n const voices = [notes1, notes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Strokes Test Multi Voice');\n}\nfunction multiNotationAndTab(options) {\n const f = VexFlowTests.makeFactory(options, 400, 275);\n const score = f.EasyScore();\n const stave = f.Stave().addClef('treble');\n // notation upper voice notes\n const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' });\n notes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n notes1[1].addStroke(0, new Stroke(6));\n notes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n notes1[3].addStroke(0, new Stroke(1));\n const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' });\n f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX());\n // tablature upper voice notes\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 0 },\n { str: 2, fret: 0 },\n { str: 1, fret: 1 },\n ],\n duration: '4',\n }),\n ];\n tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false }));\n tabNotes1[1].addStroke(0, new Stroke(6));\n tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false }));\n tabNotes1[3].addStroke(0, new Stroke(1));\n const tabNotes2 = [\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }),\n ];\n const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave);\n f.draw();\n ok(true, 'Strokes Test Notation & Tab Multi Voice');\n}\n/*\nfunction drawTabStrokes(options: TestOptions): void {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave1 = f.TabStave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes1 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 8 },\n { str: 3, fret: 9 },\n { str: 4, fret: 10 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 8 },\n { str: 5, fret: 9 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n f.TabNote({\n positions: [\n { str: 4, fret: 3 },\n { str: 5, fret: 4 },\n { str: 6, fret: 5 },\n ],\n duration: '4',\n }),\n ];\n\n tabNotes1[0].addStroke(0, new Stroke(1));\n tabNotes1[1].addStroke(0, new Stroke(2));\n tabNotes1[2].addStroke(0, new Stroke(3));\n tabNotes1[3].addStroke(0, new Stroke(4));\n\n const tabVoice1 = f.Voice().addTickables(tabNotes1);\n\n f.Formatter().joinVoices([tabVoice1]).formatToStave([tabVoice1], stave1);\n\n // bar 2\n const stave2 = f.TabStave({ x: stave1.getWidth() + stave1.getX(), width: 300 }).setEndBarType(Barline.type.DOUBLE);\n\n const tabNotes2 = [\n f.TabNote({\n positions: [\n { str: 2, fret: 7 },\n { str: 3, fret: 8 },\n { str: 4, fret: 9 },\n ],\n duration: '2',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 6 },\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 5 },\n { str: 6, fret: 5 },\n ],\n duration: '2',\n }),\n ];\n\n tabNotes2[0].addStroke(0, new Stroke(6));\n tabNotes2[1].addStroke(0, new Stroke(5));\n\n const tabVoice2 = f.Voice().addTickables(tabNotes2);\n\n f.Formatter().joinVoices([tabVoice2]).formatToStave([tabVoice2], stave2);\n\n f.draw();\n\n ok(true, 'Strokes Tab test');\n}\n*/\nfunction notesWithTab(options) {\n const f = VexFlowTests.makeFactory(options, 500, 300);\n const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble');\n const notes = [\n f\n .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 1)\n .addModifier(f.Accidental({ type: 'b' }), 0),\n f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3),\n f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }),\n f\n .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' })\n .addModifier(f.Accidental({ type: '#' }), 3)\n .addModifier(f.Accidental({ type: '#' }), 4),\n ];\n const tabstave = f\n .TabStave({ x: stave.getX(), y: 140, width: 450 })\n .addClef('tab')\n .setNoteStartX(stave.getNoteStartX());\n const tabNotes = [\n f\n .TabNote({\n positions: [\n { str: 1, fret: 3 },\n { str: 2, fret: 2 },\n { str: 3, fret: 3 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Full'), 0),\n f\n .TabNote({\n positions: [\n { str: 2, fret: 3 },\n { str: 3, fret: 5 },\n ],\n duration: '4',\n })\n .addModifier(new Bend('Unison'), 1),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 3, fret: 7 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 7 },\n ],\n duration: '8',\n }),\n f.TabNote({\n positions: [\n { str: 1, fret: 5 },\n { str: 2, fret: 5 },\n { str: 3, fret: 6 },\n { str: 4, fret: 7 },\n { str: 5, fret: 7 },\n { str: 6, fret: 5 },\n ],\n duration: '8',\n }),\n ];\n notes[0].addStroke(0, new Stroke(1));\n notes[1].addStroke(0, new Stroke(2));\n notes[2].addStroke(0, new Stroke(3));\n notes[3].addStroke(0, new Stroke(4));\n notes[4].addStroke(0, new Stroke(5));\n notes[5].addStroke(0, new Stroke(6));\n tabNotes[0].addStroke(0, new Stroke(1));\n tabNotes[1].addStroke(0, new Stroke(2));\n tabNotes[2].addStroke(0, new Stroke(3));\n tabNotes[3].addStroke(0, new Stroke(4));\n tabNotes[4].addStroke(0, new Stroke(5));\n tabNotes[5].addStroke(0, new Stroke(6));\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'bracket',\n });\n f.StaveConnector({\n top_stave: stave,\n bottom_stave: tabstave,\n type: 'single',\n });\n const voice = f.Voice().addTickables(notes);\n const tabVoice = f.Voice().addTickables(tabNotes);\n const beams = Beam.applyAndGetBeams(voice);\n f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave);\n f.draw();\n beams.forEach(function (beam) {\n beam.setContext(f.getContext()).draw();\n });\n ok(true);\n}\nVexFlowTests.register(StrokesTests);\nexport { StrokesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Style Tests\n// TODO: The .addStroke(0, new Stroke(...)) in the tab test case shows a NO GLYPH for the Petaluma font.\n// TODO: Changing ctx.font seems to have no effect in the tab test case. Should it?\n// Annotation sets its own font.\n// TabNote sets its own font.\n// Is there a way to set all the text fonts in one go?\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Articulation } from '../src/articulation';\nimport { Bend } from '../src/bend';\nimport { Formatter } from '../src/formatter';\nimport { KeySignature } from '../src/keysignature';\nimport { NoteSubGroup } from '../src/notesubgroup';\nimport { Ornament } from '../src/ornament';\nimport { StaveModifierPosition } from '../src/stavemodifier';\nimport { Stroke } from '../src/strokes';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TimeSignature } from '../src/timesignature';\nconst StyleTests = {\n Start() {\n QUnit.module('Style');\n const run = VexFlowTests.runTests;\n run('Basic Style', stave);\n run('TabNote modifiers Style', tab);\n },\n};\n/**\n * Helper function to create a ElementStyle options object of the form { fillStyle: XXX, strokeStyle: YYY }.\n * Used for updating the fillStyle and optionally the strokeStyle.\n */\nfunction FS(fillStyle, strokeStyle) {\n const ret = { fillStyle };\n if (strokeStyle) {\n ret.strokeStyle = strokeStyle;\n }\n return ret;\n}\n/**\n * Color elements on a stave.\n */\nfunction stave(options) {\n const f = VexFlowTests.makeFactory(options, 600, 150);\n const stave = f.Stave({ x: 25, y: 20, width: 500 });\n // Stave modifiers test.\n const keySig = new KeySignature('D');\n keySig.addToStave(stave);\n keySig.setStyle(FS('blue'));\n stave.addTimeSignature('4/4');\n const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY);\n timeSig[0].setStyle(FS('brown'));\n const notes = [\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }),\n f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }),\n // voice.draw() test.\n f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')),\n // GhostNote modifiers test.\n f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0),\n ];\n const notes0 = notes[0];\n const notes1 = notes[1];\n notes0.setKeyStyle(0, FS('red'));\n notes1.setKeyStyle(0, FS('red'));\n // StaveNote modifiers test.\n const mods1 = notes1.getModifiers();\n mods1[0].setStyle(FS('green'));\n notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0);\n notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0);\n notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0);\n notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0);\n const voice = f.Voice().addTickables(notes);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Basic Style');\n}\n/**\n * Color elements on a guitar tab.\n */\nfunction tab(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph();\n stave.getModifiers()[2].setStyle(FS('blue'));\n stave.setContext(ctx).draw();\n const tabNote = (noteStruct) => new TabNote(noteStruct);\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Annotation('green text').setStyle(FS('green')), 0),\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n })\n .addModifier(new Bend('Full').setStyle(FS('brown')), 0)\n .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'TabNote Modifiers Style');\n}\nVexFlowTests.register(StyleTests);\nexport { StyleTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabNote Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Flow } from '../src/flow';\nimport { Font, FontWeight } from '../src/font';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TickContext } from '../src/tickcontext';\nimport { Voice, VoiceMode } from '../src/voice';\nconst TabNoteTests = {\n Start() {\n QUnit.module('TabNote');\n test('Tick', ticks);\n test('TabStave Line', tabStaveLine);\n test('Width', width);\n test('TickContext', tickContext);\n const run = VexFlowTests.runTests;\n run('TabNote Draw', draw);\n run('TabNote Stems Up', drawStemsUp);\n run('TabNote Stems Down', drawStemsDown);\n run('TabNote Stems Up Through Stave', drawStemsUpThrough);\n run('TabNote Stems Down Through Stave', drawStemsDownThrough);\n run('TabNote Stems with Dots', drawStemsDotted);\n },\n};\nfunction ticks() {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' });\n equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats');\n note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' });\n equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat');\n}\nfunction tabStaveLine() {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const positions = note.getPositions();\n equal(positions[0].str, 6, 'String 6, Fret 6');\n equal(positions[0].fret, 6, 'String 6, Fret 6');\n equal(positions[1].str, 4, 'String 4, Fret 5');\n equal(positions[1].fret, 5, 'String 4, Fret 5');\n const stave = new Stave(10, 10, 300);\n note.setStave(stave);\n const ys = note.getYs();\n equal(ys.length, 2, 'Chord should be rendered on two lines');\n equal(ys[0], 100, 'Line for String 6, Fret 6');\n equal(ys[1], 80, 'Line for String 4, Fret 5');\n}\nfunction width() {\n expect(1);\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width');\n}\nfunction tickContext() {\n const note = new TabNote({\n positions: [\n { str: 6, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '1',\n });\n const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0);\n equal(tickContext.getWidth(), 7);\n}\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 140);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const notes = [\n { positions: [{ str: 6, fret: 6 }], duration: '4' },\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 15 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 'x' },\n { str: 5, fret: 5 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 6, fret: 0 },\n { str: 5, fret: 5 },\n { str: 4, fret: 5 },\n { str: 3, fret: 4 },\n { str: 2, fret: 3 },\n { str: 1, fret: 0 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4',\n },\n ];\n // Helper function\n function showNote(noteStruct, stave, ctx, x) {\n const tabNote = new TabNote(noteStruct);\n const tickContext = new TickContext();\n tickContext.addTickable(tabNote).preFormat().setX(x);\n tabNote.setContext(ctx).setStave(stave);\n tabNote.draw();\n return tabNote;\n }\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const tabNote = showNote(note, stave, ctx, (i + 1) * 25);\n ok(tabNote.getX() > 0, 'Note ' + i + ' has X value');\n ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values');\n }\n}\nfunction drawStemsUp(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDown(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'All objects have been drawn');\n}\nfunction drawStemsUpThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 30, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n return tabNote;\n });\n ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'TabNotes successfully drawn');\n}\nfunction drawStemsDownThrough(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 250);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550, { num_lines: 8 });\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n { str: 6, fret: 10 },\n ],\n duration: '32',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '64',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 3, fret: 5 },\n { str: 5, fret: 5 },\n { str: 7, fret: 5 },\n ],\n duration: '128',\n },\n ];\n const notes = specs.map((struct) => {\n const tabNote = new TabNote(struct);\n tabNote.render_options.draw_stem = true;\n tabNote.render_options.draw_stem_through_stave = true;\n tabNote.setStemDirection(-1);\n return tabNote;\n });\n ctx.setFont('Arial', 10, 'bold');\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'All objects have been drawn');\n}\nfunction drawStemsDotted(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 200);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 550);\n stave.setContext(ctx);\n stave.draw();\n const specs = [\n {\n positions: [\n { str: 3, fret: 6 },\n { str: 4, fret: 25 },\n ],\n duration: '4d',\n },\n {\n positions: [\n { str: 2, fret: 10 },\n { str: 5, fret: 12 },\n ],\n duration: '8',\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '4dd',\n stem_direction: -1,\n },\n {\n positions: [\n { str: 1, fret: 6 },\n { str: 4, fret: 5 },\n ],\n duration: '16',\n stem_direction: -1,\n },\n ];\n const notes = specs.map((struct) => new TabNote(struct, true /* draw_stem */));\n Dot.buildAndAttach([notes[0], notes[2], notes[2]]);\n const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n voice.draw(ctx, stave);\n ok(true, 'TabNotes successfully drawn');\n}\nVexFlowTests.register(TabNoteTests);\nexport { TabNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabSlide Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabSlide } from '../src/tabslide';\nimport { TabStave } from '../src/tabstave';\nimport { Voice } from '../src/voice';\nconst TabSlideTests = {\n Start() {\n QUnit.module('TabSlide');\n const run = VexFlowTests.runTests;\n run('Simple TabSlide', simple);\n run('Slide Up', slideUp);\n run('Slide Down', slideDown);\n },\n};\nfunction tieNotes(notes, indices, stave, ctx) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, TabSlide.SLIDE_UP);\n tie.setContext(ctx);\n tie.draw();\n}\nfunction setupContext(options, width) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, 350, 140);\n context.scale(0.9, 0.9);\n context.font = '10pt Arial';\n const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Test Case\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { stave, context } = setupContext(options);\n tieNotes([\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ], [0], stave, context);\n ok(true, 'Simple Test');\n}\n/**\n * The slideUp and slideDown tests pass in a builder function: TabSlide.createSlideUp | TabSlide.createSlideDown.\n */\nfunction multiTest(options, buildTabSlide) {\n const { context, stave } = setupContext(options, 440);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n buildTabSlide({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n ok(true, 'Single note');\n buildTabSlide({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n ok(true, 'Chord');\n buildTabSlide({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n ok(true, 'Single note high-fret');\n buildTabSlide({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n ok(true, 'Chord high-fret');\n}\nfunction slideUp(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideUp);\n}\nfunction slideDown(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabSlide.createSlideDown);\n}\nVexFlowTests.register(TabSlideTests);\nexport { TabSlideTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabStave Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { TabStave } from '../src/tabstave';\nconst TabStaveTests = {\n Start() {\n QUnit.module('TabStave');\n const run = VexFlowTests.runTests;\n run('TabStave Draw Test', draw);\n },\n};\nfunction draw(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 160);\n const stave = new TabStave(10, 10, 300);\n stave.setNumLines(6);\n stave.setContext(ctx);\n stave.draw();\n equal(stave.getYForNote(0), 127, 'getYForNote(0)');\n equal(stave.getYForLine(5), 127, 'getYForLine(5)');\n equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line');\n equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line');\n ok(true, 'all pass');\n}\nVexFlowTests.register(TabStaveTests);\nexport { TabStaveTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TabTie Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Annotation } from '../src/annotation';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { TabNote } from '../src/tabnote';\nimport { TabStave } from '../src/tabstave';\nimport { TabTie } from '../src/tabtie';\nimport { Voice } from '../src/voice';\nconst TabTieTests = {\n Start() {\n QUnit.module('TabTie');\n const run = VexFlowTests.runTests;\n run('Simple TabTie', simple);\n run('Hammerons', simpleHammerOn);\n run('Pulloffs', simplePullOff);\n run('Tapping', tap);\n run('Continuous', continuous);\n },\n};\n/**\n * Helper function to create TabNote objects.\n */\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Helper function to create a RenderContext and TabStave.\n */\nfunction setupContext(options, w = 0, h = 0) {\n // eslint-disable-next-line\n const context = options.contextBuilder(options.elementId, w || 350, h || 160);\n context.setFont('Arial', VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw();\n return { context, stave };\n}\n/**\n * Helper function to create the TabTie between two Note objects.\n */\nfunction tieNotes(notes, indices, stave, ctx, text) {\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 100);\n voice.draw(ctx, stave);\n const tie = new TabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: indices,\n last_indices: indices,\n }, text !== null && text !== void 0 ? text : 'Annotation');\n tie.setContext(ctx);\n tie.draw();\n}\n/**\n * Two notes on string 4 with a tie drawn between them.\n */\nfunction simple(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' });\n const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context);\n ok(true, 'Simple Test');\n}\nfunction simpleHammerOn(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createHammeron);\n}\nfunction simplePullOff(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n multiTest(options, TabTie.createPulloff);\n}\n/**\n * Helper function for the two test cases above (simpleHammerOn and simplePullOff).\n */\nfunction multiTest(options, createTabTie) {\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 4, fret: 4 },\n { str: 5, fret: 4 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 4, fret: 6 },\n { str: 5, fret: 6 },\n ],\n duration: '8',\n }),\n tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }),\n tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }),\n tabNote({\n positions: [\n { str: 2, fret: 14 },\n { str: 3, fret: 14 },\n ],\n duration: '8',\n }),\n tabNote({\n positions: [\n { str: 2, fret: 16 },\n { str: 3, fret: 16 },\n ],\n duration: '8',\n }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n createTabTie({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n ok(true, 'Single note');\n createTabTie({\n first_note: notes[2],\n last_note: notes[3],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n ok(true, 'Chord');\n createTabTie({\n first_note: notes[4],\n last_note: notes[5],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n ok(true, 'Single note high-fret');\n createTabTie({\n first_note: notes[6],\n last_note: notes[7],\n first_indices: [0, 1],\n last_indices: [0, 1],\n })\n .setContext(context)\n .draw();\n ok(true, 'Chord high-fret');\n}\nfunction tap(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options);\n const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0);\n const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' });\n tieNotes([note1, note2], [0], stave, context, 'P');\n ok(true, 'Tapping Test');\n}\nfunction continuous(options, contextBuilder) {\n options.contextBuilder = contextBuilder;\n const { context, stave } = setupContext(options, 440, 140);\n const notes = [\n tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }),\n tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }),\n ];\n const voice = new Voice(Flow.TIME4_4).addTickables(notes);\n new Formatter().joinVoices([voice]).format([voice], 300);\n voice.draw(context, stave);\n TabTie.createHammeron({\n first_note: notes[0],\n last_note: notes[1],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n TabTie.createPulloff({\n first_note: notes[1],\n last_note: notes[2],\n first_indices: [0],\n last_indices: [0],\n })\n .setContext(context)\n .draw();\n ok(true, 'Continuous Hammeron');\n}\nVexFlowTests.register(TabTieTests);\nexport { TabTieTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextBracket Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst TextBracketTests = {\n Start() {\n QUnit.module('TextBracket');\n const run = VexFlowTests.runTests;\n run('Simple TextBracket', simple0);\n run('TextBracket Styles', simple1);\n },\n};\nfunction simple0(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '15',\n options: {\n superscript: 'va',\n position: 'top',\n },\n });\n f.TextBracket({\n from: notes[0],\n to: notes[4],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n },\n });\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction simple1(options) {\n const f = VexFlowTests.makeFactory(options, 550);\n const stave = f.Stave();\n const score = f.EasyScore();\n const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' });\n const voice = score.voice(notes, { time: '5/4' });\n const topOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: 'Cool notes',\n options: {\n superscript: '',\n position: 'top',\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Testing',\n options: {\n position: 'top',\n superscript: 'superscript',\n // weight & style below can be left undefined. They will fall back to the default defined in textbracket.ts.\n font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' },\n },\n }),\n ];\n const bottomOctaves = [\n f.TextBracket({\n from: notes[0],\n to: notes[1],\n text: '8',\n options: {\n superscript: 'vb',\n position: 'bottom',\n line: 3,\n font: { size: 30 },\n },\n }),\n f.TextBracket({\n from: notes[2],\n to: notes[4],\n text: 'Not cool notes',\n options: {\n superscript: ' super uncool',\n position: 'bottom',\n line: 4,\n },\n }),\n ];\n topOctaves[1].render_options.line_width = 2;\n topOctaves[1].render_options.show_bracket = false;\n bottomOctaves[0].render_options.underline_superscript = false;\n bottomOctaves[0].setDashed(false);\n bottomOctaves[1].render_options.bracket_height = 40;\n bottomOctaves[1].setDashed(true, [2, 2]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nVexFlowTests.register(TextBracketTests);\nexport { TextBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TextFormatter Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Font, FontStyle, FontWeight } from '../src/font';\nimport { TextFormatter } from '../src/textformatter';\nconst TextFormatterTests = {\n Start() {\n QUnit.module('TextFormatter');\n test('Basic', basic);\n const run = VexFlowTests.runTextTests;\n run('Accuracy', accuracy);\n run('Box Text', textBoxAccuracy);\n },\n};\nfunction basic() {\n var _a;\n // See: src/fonts/textfonts.ts > loadTextFonts()\n const registeredFamilies = TextFormatter.getFontFamilies();\n equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`);\n // Verify the advanceWidth and other metrics by opening the font file with a glyph inspector:\n // https://fontdrop.info/\n // https://opentype.js.org/glyph-inspector.html\n const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript');\n equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.');\n const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' });\n const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H');\n equal(metricsPetalumaScriptH.leftSideBearing, 37);\n const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' });\n const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H');\n equal(metricsRobotoSlabH.advanceWidth, 1578);\n // eslint-disable-next-line\n // @ts-ignore direct access to protected variable .cacheKey\n equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal');\n}\nfunction accuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 500);\n const lineHeight = 30;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n },\n ];\n let startY = 20;\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.setFont(font);\n const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)'];\n for (let i = 0; i < texts.length; i++) {\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX, startY);\n startY += 5;\n ctx.setFillStyle('#3a2');\n ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2);\n ctx.setFillStyle('#32a');\n startY += 5;\n ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2);\n startY += lineHeight;\n }\n }\n ok(true, 'all pass');\n}\nfunction textBoxAccuracy(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 800);\n let startY = 35;\n const boxBorder = 2;\n const boxPadding = 3;\n const startX = 50;\n const fonts = [\n {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: 'Roboto Slab',\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n {\n family: Font.SANS_SERIF,\n size: 14,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n },\n ];\n const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@'];\n for (let j = 0; j < fonts.length; ++j) {\n const font = fonts[j];\n const textFormatter = TextFormatter.create(font);\n ctx.save();\n ctx.setFont(font);\n for (let i = 0; i < texts.length; i++) {\n const textY = textFormatter.getYForStringInPx(texts[i]);\n const height = textY.height + 2 * boxPadding;\n const headroom = -1 * textY.yMin;\n const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setLineWidth(boxBorder);\n ctx.setStrokeStyle('#3a2');\n ctx.setFillStyle('#3a2');\n ctx.beginPath();\n ctx.rect(startX, startY - height + headroom, width, height);\n ctx.stroke();\n startY += height * 1.5 + boxBorder * 3;\n const measureBox = ctx.measureText(texts[i]);\n const mwidth = measureBox.width + boxBorder * 2;\n const mheight = measureBox.height + boxBorder * 2;\n ctx.setFillStyle('black');\n ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding);\n ctx.setStrokeStyle('#32a');\n ctx.setFillStyle('#32a');\n ctx.beginPath();\n ctx.rect(startX, startY - mheight, mwidth, mheight);\n ctx.stroke();\n startY += mheight * 1.5 + boxBorder * 3;\n }\n ctx.restore();\n }\n ok(true, 'all pass');\n}\nVexFlowTests.register(TextFormatterTests);\nexport { TextFormatterTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Text Note Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Crescendo } from '../src/crescendo';\nimport { Flow } from '../src/flow';\nimport { Font } from '../src/font';\nimport { Note } from '../src/note';\nimport { Stave } from '../src/stave';\nimport { TextNote } from '../src/textnote';\nconst TextNoteTests = {\n Start() {\n QUnit.module('TextNote');\n const run = VexFlowTests.runTests;\n run('TextNote Formatting', formatTextNotes);\n run('TextNote Formatting 2', formatTextNotes2);\n run('TextNote Superscript and Subscript', superscriptAndSubscript);\n run('TextNote Formatting With Glyphs 0', formatTextGlyphs0);\n run('TextNote Formatting With Glyphs 1', formatTextGlyphs1);\n run('Crescendo', crescendo);\n run('Text Dynamics', textDynamics);\n },\n};\nfunction formatTextNotes(options) {\n const f = VexFlowTests.makeFactory(options, 400, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1),\n f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n const formatter = f.Formatter();\n formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true);\n}\nfunction formatTextNotes2(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }),\n f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ text: 'L', duration: '16' }),\n f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT),\n f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT),\n ]);\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170));\n f.draw();\n ok(true);\n}\nfunction superscriptAndSubscript(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }),\n f\n .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' })\n .addModifier(f.Accidental({ type: 'n' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n ]);\n const notes2 = [\n f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }),\n f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }),\n f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }),\n f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }),\n f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }),\n f.TextNote({ text: 'V', superscript: '7', duration: '8' }),\n ];\n equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text');\n const voice2 = score.voice(notes2);\n voice2.getTickables().forEach((note) => {\n const textNote = note;\n textNote.setFont({ family: Font.SERIF, size: 15 });\n textNote.setLine(13);\n textNote.setJustification(TextNote.Justification.LEFT);\n });\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true);\n}\nfunction formatTextGlyphs0(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER),\n f.TextNote({ glyph: 'f', duration: '8' }),\n f.TextNote({ glyph: 'p', duration: '8' }),\n f.TextNote({ glyph: 'm', duration: '8' }),\n f.TextNote({ glyph: 'z', duration: '8' }),\n f.TextNote({ glyph: 'mordent_upper', duration: '16' }),\n f.TextNote({ glyph: 'mordent_lower', duration: '16' }),\n f.TextNote({ glyph: 'segno', duration: '8' }),\n f.TextNote({ glyph: 'coda', duration: '8' }),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true);\n}\nfunction formatTextGlyphs1(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice1 = score.voice([\n f\n .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' })\n .addModifier(f.Accidental({ type: 'b' }), 0)\n .addModifier(f.Accidental({ type: '#' }), 1),\n f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }),\n ]);\n const voice2 = score.voice([\n f.TextNote({ glyph: 'turn', duration: '16' }),\n f.TextNote({ glyph: 'turn_inverted', duration: '16' }),\n f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10),\n f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2),\n f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3),\n f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER),\n ]);\n voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER));\n f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true);\n}\nfunction crescendo(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const stave = f.Stave({ y: 40 });\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextNote({ glyph: 'p', duration: '16' }),\n new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave),\n f.TextNote({ glyph: 'f', duration: '16' }),\n new Crescendo({ duration: '4' }).setLine(5).setStave(stave),\n new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave),\n ]);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true);\n}\nfunction textDynamics(options) {\n const f = VexFlowTests.makeFactory(options, 600, 230);\n const score = f.EasyScore();\n const voice = score.voice([\n f.TextDynamics({ text: 'sfz', duration: '4' }),\n f.TextDynamics({ text: 'rfz', duration: '4' }),\n f.TextDynamics({ text: 'mp', duration: '4' }),\n f.TextDynamics({ text: 'ppp', duration: '4' }),\n f.TextDynamics({ text: 'fff', duration: '4' }),\n f.TextDynamics({ text: 'mf', duration: '4' }),\n f.TextDynamics({ text: 'sff', duration: '4' }),\n ], { time: '7/4' });\n // This is refactored to use preCalculateMinWidth... to exercise\n // a bug fix when textDynamic got formatted more than once.\n const formatter = f.Formatter();\n formatter.joinVoices([voice]);\n // const width = 250; //formatter.preCalculateMinTotalWidth([voice]);\n const width = formatter.preCalculateMinTotalWidth([voice]);\n formatter.format([voice]);\n const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding });\n stave.draw();\n voice.draw(f.getContext(), stave);\n ok(true);\n}\nVexFlowTests.register(TextNoteTests);\nexport { TextNoteTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Three Voices Tests - Three voices in single staff.\nimport { concat, VexFlowTests } from './vexflow_test_helpers';\nimport { Beam } from '../src/beam';\nconst ThreeVoicesTests = {\n Start() {\n // TODO: Rename the module to 'Three Voices', because we aren't really testing rests.\n QUnit.module('Three Voice Rests');\n const run = VexFlowTests.runTests;\n run('Three Voices - #1', threeVoices1);\n run('Three Voices - #2 Complex', threeVoices2);\n run('Three Voices - #3', threeVoices3);\n run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices);\n run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1);\n run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2);\n },\n};\n/**\n * Helper for setting up the first three test cases: threeVoices1, threeVoices2, threeVoices3.\n */\nfunction createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 600, 200);\n const stave = factory.Stave().addClef('treble').addTimeSignature('4/4');\n const score = factory.EasyScore();\n // Convert each noteGroup array to StaveNote[].\n const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args));\n const voices = noteGroups.map((notes) => score.voice(notes));\n setup(factory, voices);\n const beams = [\n Beam.applyAndGetBeams(voices[0], +1),\n Beam.applyAndGetBeams(voices[1], -1),\n Beam.applyAndGetBeams(voices[2], -1),\n ].reduce(concat);\n // Set option to position rests near the notes in each voice.\n factory.Formatter().joinVoices(voices).formatToStave(voices, stave);\n factory.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(factory.getContext()).draw();\n }\n ok(true);\n };\n}\n/**\n *\n */\nconst threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n * Lots of beamed notes. A beam and notehead overlap.\n */\nconst threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '2', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'above' }), 1);\n voices[1]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '4', position: 'left' }), 1);\n});\n/**\n *\n */\nconst threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => {\n voices[0]\n .getTickables()[0]\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 0)\n .addModifier(f.Fingering({ number: '0', position: 'left' }), 1);\n voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0);\n voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0);\n});\nfunction autoRestTwoVoices(options) {\n const f = VexFlowTests.makeFactory(options, 900, 200);\n const score = f.EasyScore();\n let x = 10;\n let beams = [];\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n x += width;\n const noteArrays = [\n score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }),\n score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem=\"up\"], a4[stem=\"up\"], b4/r, b4[stem=\"up\"], e4/4', {\n stem: 'down',\n }),\n [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })],\n ];\n const voices = noteArrays.map((notes) => score.voice(notes));\n beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1));\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n for (let i = 0; i < beams.length; i++) {\n beams[i].setContext(f.getContext()).draw();\n }\n ok(true, 'Auto Adjust Rests - Two Voices');\n}\nfunction autoRestThreeVoices1(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }),\n score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }),\n score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }),\n score.voice([\n f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }),\n f.TextNote({ text: '', duration: '1', line: -1, smooth: true }),\n ], { time: '8/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n ok(true);\n}\nfunction autoRestThreeVoices2(options) {\n const f = VexFlowTests.makeFactory(options, 850, 200);\n const score = f.EasyScore();\n let x = 10;\n function createMeasure(measureTitle, width, align_rests) {\n const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1);\n const voices = [\n score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }),\n score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }),\n score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }),\n score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }),\n ];\n f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests });\n x += width;\n }\n createMeasure('Default Rest Positions', 400, false);\n createMeasure('Rests Repositioned To Avoid Collisions', 400, true);\n f.draw();\n ok(true);\n}\nVexFlowTests.register(ThreeVoicesTests);\nexport { ThreeVoicesTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TickContext Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { TickContext } from '../src/tickcontext';\nimport { MockTickable } from './mocks';\nconst TickContextTests = {\n Start() {\n QUnit.module('TickContext');\n test('Current Tick Test', currentTick);\n test('Tracking Test', tracking);\n },\n};\nfunction currentTick() {\n const tc = new TickContext();\n equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks');\n}\nfunction tracking() {\n const BEAT = (1 * Flow.RESOLUTION) / 4;\n const tickables = [\n new MockTickable().setTicks(BEAT).setWidth(10),\n new MockTickable().setTicks(BEAT * 2).setWidth(20),\n new MockTickable().setTicks(BEAT).setWidth(30),\n ];\n const tc = new TickContext();\n tc.setPadding(0);\n tc.addTickable(tickables[0]);\n equal(tc.getMaxTicks().value(), BEAT);\n tc.addTickable(tickables[1]);\n equal(tc.getMaxTicks().value(), BEAT * 2);\n tc.addTickable(tickables[2]);\n equal(tc.getMaxTicks().value(), BEAT * 2);\n equal(tc.getWidth(), 0);\n tc.preFormat();\n equal(tc.getWidth(), 30);\n}\nVexFlowTests.register(TickContextTests);\nexport { TickContextTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// TimeSignature Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Stave } from '../src/stave';\nimport { StaveConnector } from '../src/staveconnector';\nimport { TimeSignature } from '../src/timesignature';\nconst TimeSignatureTests = {\n Start() {\n QUnit.module('TimeSignature');\n test('Time Signature Parser', parser);\n const run = VexFlowTests.runTests;\n run('Basic Time Signatures', basic);\n run('Big Signature Test', big);\n run('Additive Signature Test', additive);\n run('Alternating Signature Test', alternating);\n run('Interchangeable Signature Test', interchangeable);\n run('Aggregate Signature Test', agregate);\n run('Complex Signature Test', complex);\n run('Time Signature multiple staves alignment test', multiple);\n run('Time Signature Change Test', change);\n },\n};\nfunction parser() {\n const timeSig = new TimeSignature();\n equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4');\n const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)'];\n mustFail.forEach((invalidString) => {\n throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/);\n });\n const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+'];\n mustPass.forEach((validString) => timeSig.parseTimeSpec(validString));\n timeSig.setTimeSig('4/4');\n equal(timeSig.getIsNumeric(), true, '4/4 is numeric');\n equal(timeSig.getLine(), 0, 'digits are on line 0');\n timeSig.setTimeSig('C|');\n equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|');\n equal(timeSig.getIsNumeric(), false, 'cut time is not numeric');\n equal(timeSig.getLine(), 2, 'cut/common are on line 2');\n ok(true, 'all pass');\n}\nfunction basic(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 600, 120);\n new Stave(10, 10, 500)\n .addTimeSignature('2/2')\n .addTimeSignature('3/4')\n .addTimeSignature('4/4')\n .addTimeSignature('6/8')\n .addTimeSignature('C')\n .addTimeSignature('C|')\n .addEndTimeSignature('2/2')\n .addEndTimeSignature('3/4')\n .addEndTimeSignature('4/4')\n .addEndClef('treble')\n .addEndTimeSignature('6/8')\n .addEndTimeSignature('C')\n .addEndTimeSignature('C|')\n .setContext(ctx)\n .draw();\n ok(true, 'all pass');\n}\nfunction big(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('12/8')\n .addTimeSignature('7/16')\n .addTimeSignature('1234567/890')\n .addTimeSignature('987/654321')\n .setContext(ctx)\n .draw();\n ok(true, 'all pass');\n}\nfunction additive(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction alternating(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction interchangeable(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction agregate(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('2/4')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .addTimeSignature('+')\n .addTimeSignature('5/4')\n .setContext(ctx)\n .draw();\n ok(true, 'all pass');\n}\nfunction complex(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 120);\n new Stave(10, 10, 300)\n .addTimeSignature('(2+3)/16')\n .addTimeSignature('+')\n .addTimeSignature('3/8')\n .setContext(ctx)\n .draw();\n ok(true, 'all pass');\n}\nfunction multiple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 400, 350);\n // Each StaveLineConfig object is of the form { visible: boolean }.\n const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible }));\n const stave1 = new Stave(15, 0, 300)\n .setConfigForLines(stave1LineConfig)\n .addClef('percussion')\n .addTimeSignature('4/4', 25) // passing the custom padding in pixels\n .setContext(ctx)\n .draw();\n const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw();\n const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw();\n Stave.formatBegModifiers([stave1, stave2, stave3]);\n new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw();\n new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw();\n ok(true, 'all pass');\n}\nfunction change(options) {\n const f = VexFlowTests.makeFactory(options, 900);\n const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|');\n const tickables = [\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n f.TimeSigNote({ time: '3/4' }),\n f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }),\n f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }),\n f.TimeSigNote({ time: 'C' }),\n f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }),\n f.TimeSigNote({ time: '9/8' }),\n f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }),\n ];\n const voice = f.Voice().setStrict(false).addTickables(tickables);\n f.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'all pass');\n}\nVexFlowTests.register(TimeSignatureTests);\nexport { TimeSignatureTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tremolo Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Barline } from '../src/stavebarline';\nimport { Tremolo } from '../src/tremolo';\nconst TremoloTests = {\n Start() {\n QUnit.module('Tremolo');\n const run = VexFlowTests.runTests;\n run('Tremolo - Basic', tremoloBasic);\n run('Tremolo - Big', tremoloBig);\n },\n};\nfunction tremoloBasic(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n notes1[0].addModifier(new Tremolo(3), 0);\n notes1[1].addModifier(new Tremolo(2), 0);\n notes1[2].addModifier(new Tremolo(1), 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n notes2[1].addModifier(new Tremolo(1), 0);\n notes2[2].addModifier(new Tremolo(2), 0);\n notes2[3].addModifier(new Tremolo(3), 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n ok(true, 'Tremolo - Basic');\n}\nfunction tremoloBig(options) {\n const f = VexFlowTests.makeFactory(options, 600, 200);\n const score = f.EasyScore();\n // bar 1\n const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE);\n const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' });\n const tremolo1 = new Tremolo(3);\n tremolo1.extra_stroke_scale = 1.7;\n tremolo1.y_spacing_scale = 1.5;\n const tremolo2 = new Tremolo(2);\n tremolo2.extra_stroke_scale = 1.7;\n tremolo2.y_spacing_scale = 1.5;\n const tremolo3 = new Tremolo(1);\n tremolo3.extra_stroke_scale = 1.7;\n tremolo3.y_spacing_scale = 1.5;\n notes1[0].addModifier(tremolo1, 0);\n notes1[1].addModifier(tremolo2, 0);\n notes1[2].addModifier(tremolo3, 0);\n const voice1 = score.voice(notes1);\n f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1);\n // bar 2\n const stave2 = f\n .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 })\n .setEndBarType(Barline.type.DOUBLE);\n const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' });\n const tremolo4 = new Tremolo(1);\n tremolo4.extra_stroke_scale = 1.7;\n tremolo4.y_spacing_scale = 1.5;\n const tremolo5 = new Tremolo(2);\n tremolo5.extra_stroke_scale = 1.7;\n tremolo5.y_spacing_scale = 1.5;\n const tremolo6 = new Tremolo(3);\n tremolo6.extra_stroke_scale = 1.7;\n tremolo6.y_spacing_scale = 1.5;\n notes2[1].addModifier(tremolo4, 0);\n notes2[2].addModifier(tremolo5, 0);\n notes2[3].addModifier(tremolo6, 0);\n const voice2 = score.voice(notes2);\n f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2);\n f.draw();\n ok(true, 'Tremolo - Big');\n}\nVexFlowTests.register(TremoloTests);\nexport { TremoloTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuning Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Tuning } from '../src/tuning';\nconst TuningTests = {\n Start() {\n QUnit.module('Tuning');\n test('Standard Tuning', standard);\n test('Standard Banjo Tuning', banjo);\n test('Return note for fret', noteForFret);\n },\n};\n/**\n * Helper function to verify that the provided tuning matches a standard 6-string guitar.\n */\nfunction checkStandard(tuning) {\n throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9');\n // TODO: Tuning constructor has a bug in that the default tuning has 8 strings.\n // See: 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2' in tuning.ts constructor.\n // throws(() => tuning.getValueForString(7), /BadArguments/, 'String 7');\n // Tuning.getValueForString() returns a note number where the value 60 corresponds to middle C.\n equal(tuning.getValueForString(6), 40, 'Low E string');\n equal(tuning.getValueForString(5), 45, 'A string');\n equal(tuning.getValueForString(4), 50, 'D string');\n equal(tuning.getValueForString(3), 55, 'G string');\n equal(tuning.getValueForString(2), 59, 'B string');\n equal(tuning.getValueForString(1), 64, 'High E string');\n}\n/**\n * Helper function to verify that the provided tuning matches a standard 5-string banjo.\n */\nfunction checkStandardBanjo(tuning) {\n throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0');\n throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6');\n equal(tuning.getValueForString(5), 67, 'High G string');\n equal(tuning.getValueForString(4), 50, 'D string');\n equal(tuning.getValueForString(3), 55, 'G string');\n equal(tuning.getValueForString(2), 59, 'B string');\n equal(tuning.getValueForString(1), 62, 'High D string');\n}\nfunction standard() {\n expect(16);\n const tuning = new Tuning();\n checkStandard(tuning);\n // Set the tuning by specifying a name: 'standard'.\n tuning.setTuning('standard');\n checkStandard(tuning);\n}\nfunction banjo() {\n expect(7);\n const tuning = new Tuning();\n tuning.setTuning('standardBanjo');\n checkStandardBanjo(tuning);\n}\nfunction noteForFret() {\n expect(8);\n const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3');\n throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1');\n throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1');\n equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string');\n equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5');\n equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string');\n equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string');\n equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12');\n equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string');\n}\nVexFlowTests.register(TuningTests);\nexport { TuningTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Tuplet Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Dot } from '../src/dot';\nimport { Formatter } from '../src/formatter';\nimport { Stem } from '../src/stem';\nimport { Tuplet } from '../src/tuplet';\nconst TupletTests = {\n Start() {\n QUnit.module('Tuplet');\n const run = VexFlowTests.runTests;\n run('Simple Tuplet', simple);\n run('Beamed Tuplet', beamed);\n run('Ratioed Tuplet', ratio);\n run('Bottom Tuplet', bottom);\n run('Bottom Ratioed Tuplet', bottomRatio);\n run('Awkward Tuplet', awkward);\n run('Complex Tuplet', complex);\n run('Mixed Stem Direction Tuplet', mixedTop);\n run('Mixed Stem Direction Bottom Tuplet', mixedBottom);\n run('Nested Tuplets', nested);\n run('Single Tuplets', single);\n },\n};\n// Helper Functions to set the stem direction and duration of the options objects (i.e., StaveNoteStruct)\n// that are ultimately passed into Factory.StaveNote().\n// eslint-disable-next-line\nconst set = (key) => (value) => (object) => {\n object[key] = value;\n return object;\n};\nconst setStemDirection = set('stem_direction');\nconst setStemUp = setStemDirection(Stem.UP);\nconst setStemDown = setStemDirection(Stem.DOWN);\nconst setDurationToQuarterNote = set('duration')('4');\n/**\n * Simple test case with one ascending triplet and one descending triplet.\n */\nfunction simple(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['g/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 6) });\n // 3/4 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Simple Test');\n}\nfunction beamed(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8');\n const notes = [\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 3) });\n f.Beam({ notes: notes.slice(3, 10) });\n f.Tuplet({ notes: notes.slice(0, 3) });\n f.Tuplet({ notes: notes.slice(3, 10) });\n // 3/8 time\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Beamed Test');\n}\nfunction ratio(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['b/4'], duration: '4' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n ratioed: true,\n notes_occupied: 4,\n },\n });\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Ratioed Test');\n}\nfunction bottom(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['g/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/3'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: { location: Tuplet.LOCATION_BOTTOM },\n });\n const voice = f\n .Voice({ time: { num_beats: 3, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Bottom Test');\n}\nfunction bottomRatio(options) {\n const f = VexFlowTests.makeFactory(options, 350, 160);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8');\n const notes = [\n { keys: ['f/4'], duration: '4' },\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '4' },\n { keys: ['d/5'], duration: '8' },\n { keys: ['g/5'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n ]\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(3, 6),\n });\n f.Tuplet({\n notes: notes.slice(0, 3),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(3, 6),\n options: {\n location: Tuplet.LOCATION_BOTTOM,\n notes_occupied: 1,\n },\n });\n const voice = f\n .Voice({ time: { num_beats: 5, beat_value: 8 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Bottom Ratioed Test');\n}\nfunction awkward(options) {\n const f = VexFlowTests.makeFactory(options, 370, 160);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['e/4'], duration: '16' },\n { keys: ['c/4'], duration: '8' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes.slice(0, 12) });\n f.Tuplet({\n notes: notes.slice(0, 12),\n options: {\n notes_occupied: 142,\n ratioed: true,\n },\n });\n f.Tuplet({\n notes: notes.slice(12, 15),\n options: {\n ratioed: true,\n },\n }).setBracketed(true);\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Awkward Test');\n}\nfunction complex(options) {\n const f = VexFlowTests.makeFactory(options, 600);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes1 = [\n { keys: ['b/4'], duration: '8d' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['b/4'], duration: '16r' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['g/4'], duration: '32' },\n { keys: ['f/4'], duration: '32' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['b/4'], duration: '8' },\n { keys: ['a/4'], duration: '8' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n Dot.buildAndAttach([notes1[0]], { all: true });\n const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }]\n .map(setDurationToQuarterNote)\n .map(setStemDown)\n .map(f.StaveNote.bind(f));\n f.Beam({ notes: notes1.slice(0, 3) });\n f.Beam({ notes: notes1.slice(5, 9) });\n f.Beam({ notes: notes1.slice(11, 16) });\n f.Tuplet({\n notes: notes1.slice(0, 3),\n });\n f.Tuplet({\n notes: notes1.slice(3, 11),\n options: {\n num_notes: 7,\n notes_occupied: 4,\n ratioed: false,\n },\n });\n f.Tuplet({\n notes: notes1.slice(11, 16),\n options: {\n notes_occupied: 4,\n },\n });\n const voice1 = f.Voice().setStrict(true).addTickables(notes1);\n const voice2 = f.Voice().setStrict(true).addTickables(notes2);\n new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave);\n f.draw();\n ok(true, 'Complex Test');\n}\nfunction mixedTop(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['c/6'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/5'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/6'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Mixed Stem Direction Tuplet');\n}\nfunction mixedBottom(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 });\n const notes = [\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/5'], stem_direction: -1 },\n { keys: ['a/4'], stem_direction: 1 },\n { keys: ['f/3'], stem_direction: 1 },\n { keys: ['a/4'], stem_direction: -1 },\n { keys: ['c/4'], stem_direction: -1 },\n ]\n .map(setDurationToQuarterNote)\n .map(f.StaveNote.bind(f));\n f.Tuplet({\n notes: notes.slice(0, 2),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 4),\n options: {\n notes_occupied: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(4, 6),\n options: {\n notes_occupied: 3,\n },\n });\n const voice = f.Voice().setStrict(false).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Mixed Stem Direction Bottom Tuplet');\n}\nfunction nested(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['b/4'], duration: '4' },\n { keys: ['a/4'], duration: '4' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['f/4'], duration: '16' },\n { keys: ['a/4'], duration: '16' },\n { keys: ['g/4'], duration: '16' },\n { keys: ['b/4'], duration: '2' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(2, 7),\n });\n f.Tuplet({\n notes: notes.slice(0, 7),\n options: {\n notes_occupied: 2,\n num_notes: 3,\n },\n });\n f.Tuplet({\n notes: notes.slice(2, 7),\n options: {\n notes_occupied: 4,\n num_notes: 5,\n },\n });\n // 4/4 time\n const voice = f.Voice().setStrict(true).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Nested Tuplets');\n}\nfunction single(options) {\n const f = VexFlowTests.makeFactory(options);\n const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4');\n const notes = [\n // Big triplet 1:\n { keys: ['c/4'], duration: '4' },\n { keys: ['d/4'], duration: '8' },\n { keys: ['e/4'], duration: '8' },\n { keys: ['f/4'], duration: '8' },\n { keys: ['g/4'], duration: '8' },\n { keys: ['a/4'], duration: '2' },\n { keys: ['b/4'], duration: '4' },\n ]\n .map(setStemUp)\n .map(f.StaveNote.bind(f));\n f.Beam({\n notes: notes.slice(1, 4),\n });\n // big quartuplet\n f.Tuplet({\n notes: notes.slice(0, -1),\n options: {\n num_notes: 4,\n notes_occupied: 3,\n ratioed: true,\n bracketed: true,\n },\n });\n // first singleton\n f.Tuplet({\n notes: notes.slice(0, 1),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n },\n });\n // eighth note triplet\n f.Tuplet({\n notes: notes.slice(1, 4),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n },\n });\n // second singleton\n f.Tuplet({\n notes: notes.slice(4, 5),\n options: {\n num_notes: 3,\n notes_occupied: 2,\n ratioed: true,\n bracketed: true,\n },\n });\n // 4/4 time\n const voice = f\n .Voice({ time: { num_beats: 4, beat_value: 4 } })\n .setStrict(true)\n .addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n f.draw();\n ok(true, 'Nested Tuplets');\n}\nVexFlowTests.register(TupletTests);\nexport { TupletTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// TypeGuard Tests\n// eslint-disable-next-line\n// @ts-nocheck to support ES5 style class declaration in the fakeES5() test case.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { CanvasContext } from '../src/canvascontext';\nimport { StaveNote } from '../src/stavenote';\nimport { StemmableNote } from '../src/stemmablenote';\nimport { TabNote } from '../src/tabnote';\nimport { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard';\nconst TypeGuardTests = {\n Start() {\n QUnit.module('TypeGuard');\n test('Real VexFlow Types', real);\n test('Fake VexFlow Types in ES5', fakeES5);\n test('Fake VexFlow Types in ES6', fakeES6);\n test('Edge Case ES5/ES6', edgeCaseES5vsES6);\n },\n};\nfunction real() {\n const s = new StaveNote({ keys: ['c/4'], duration: 'w' });\n ok(isStaveNote(s), 'isStaveNote helper function');\n ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, \"StaveNote\") directly');\n notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.');\n const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' });\n ok(isTabNote(t), 'isTabNote helper function');\n notOk(isStaveNote(t), 't is NOT a StaveNote');\n ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note');\n ok(isStemmableNote(t), 'TabNote extends StemmableNote');\n ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note');\n const canvas = document.createElement('canvas');\n canvas.width = 800;\n canvas.height = 400;\n const ctx = new CanvasContext(canvas.getContext('2d'));\n ok(isRenderContext(ctx), 'ctx is a RenderContext');\n}\n/**\n * Helper function to test the fake VexFlow objects we create in fakeES5() and fakeES6().\n */\nfunction checkFakeObjects(fakeStemmableNote, fakeStaveNote) {\n ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.');\n notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).');\n ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.');\n ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).');\n ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).');\n notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.');\n}\n/**\n * Demonstrate that an object (ES5-style) can pass the isCategory(...) test if it\n * has the correct static .CATEGORY property.\n */\nfunction fakeES5() {\n function FakeStemmableNote() {\n this.isFake = true;\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n function FakeStaveNote() {\n FakeStemmableNote.call(this);\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype);\n FakeStaveNote.prototype.constructor = FakeStaveNote;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(fakeStemmableNote, fakeStaveNote);\n}\n/**\n * Demonstrate that an object (ES6-style) can pass the isCategory(...) test if it\n * or its ancestor has the correct static .CATEGORY property.\n */\nfunction fakeES6() {\n class FakeStemmableNote {\n }\n FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY;\n class FakeStaveNote extends FakeStemmableNote {\n }\n FakeStaveNote.CATEGORY = StaveNote.CATEGORY;\n const fakeStemmableNote = new FakeStemmableNote();\n const fakeStaveNote = new FakeStaveNote();\n checkFakeObjects(fakeStemmableNote, fakeStaveNote);\n}\n/**\n * The tsconfig.json target is ES6 (as of August 18, 2021), so isCategory() works even when the root class \"extends Object\".\n */\nfunction edgeCaseES5vsES6() {\n class Z extends Object {\n }\n class Y extends Z {\n }\n class X extends Y {\n }\n const zInstance = new Z();\n const xInstance = new X();\n ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object');\n // If targeting es5, these three assertions only pass if we remove \"extends Object\" from the class Z definition.\n ok(zInstance instanceof Z, 'es6: z IS an instanceof Z');\n ok(xInstance instanceof Y, 'es6: x IS an instanceof Y');\n ok(xInstance instanceof Z, 'es6: x IS an instanceof Z');\n}\nVexFlowTests.register(TypeGuardTests);\nexport { TypeGuardTests };\n","// [VexFlow](https://vexflow.com/) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VexFlow Test Support Library\nimport { Factory, Flow, Font, Renderer } from '../src/index';\nimport { globalObject } from '../src/util';\nconst global = globalObject();\n// Each test case will switch through the available fonts, and then restore the original font when done.\nlet originalFontNames;\nfunction useTempFontStack(fontName) {\n originalFontNames = Flow.getMusicFont();\n Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]);\n}\nfunction restoreOriginalFontStack() {\n Flow.setMusicFont(...originalFontNames);\n}\n// A micro util inspired by jQuery.\nif (!global.$) {\n // generate_png_images.js uses jsdom and does not include jQuery.\n global.$ = (param) => {\n let element;\n if (typeof param !== 'string') {\n element = param;\n }\n else if (param.startsWith('<')) {\n // Extract the tag name: e.g.,
=> div\n // Assume param.match returns something (! operator).\n // eslint-disable-next-line\n const tagName = param.match(/[A-Za-z]+/g)[0];\n element = document.createElement(tagName);\n }\n else {\n element = document.querySelector(param);\n }\n const $element = {\n // eslint-disable-next-line\n get(index) {\n return element;\n },\n addClass(c) {\n element.classList.add(c);\n return $element;\n },\n text(t) {\n element.textContent = t;\n return $element;\n },\n html(h) {\n if (!h) {\n return element.innerHTML;\n }\n else {\n element.innerHTML = h;\n return $element;\n }\n },\n append(...elementsToAppend) {\n elementsToAppend.forEach((e) => {\n element.appendChild(e);\n });\n return $element;\n },\n attr(attrName, val) {\n element.setAttribute(attrName, val);\n return $element;\n },\n };\n return $element;\n };\n}\n/** Allow `name` to be used inside file names. */\nfunction sanitizeName(name) {\n return name.replace(/[^a-zA-Z0-9]/g, '_');\n}\nconst CANVAS_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst CANVAS_TEXT_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'Canvas',\n fontStacks: ['Bravura'],\n};\nconst SVG_TEST_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nconst SVG_TEXT_CONFIG = {\n backend: Renderer.Backends.SVG,\n tagName: 'div',\n testType: 'SVG',\n fontStacks: ['Bravura'],\n};\nconst NODE_TEST_CONFIG = {\n backend: Renderer.Backends.CANVAS,\n tagName: 'canvas',\n testType: 'NodeCanvas',\n fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'],\n};\nexport class VexFlowTests {\n // Call this at the end of a `tests/xxxx_tests.ts` file to register the module.\n static register(test) {\n VexFlowTests.tests.push(test);\n }\n static parseJobOptions(runOptions) {\n let { jobs, job } = runOptions || { jobs: 1, job: 0 };\n if (window) {\n const { location } = window;\n if (location) {\n const sps = new URLSearchParams(location.search);\n const jobsParam = sps.get('jobs');\n const jobParam = sps.get('job');\n if (jobsParam) {\n jobs = parseInt(jobsParam, 10);\n }\n if (jobParam) {\n job = parseInt(jobParam, 10);\n }\n }\n }\n return {\n jobs,\n job,\n };\n }\n // flow.html calls this to invoke all the tests.\n static run(runOptions) {\n const { jobs, job } = VexFlowTests.parseJobOptions(runOptions);\n VexFlowTests.tests.forEach((test, idx) => {\n if (jobs === 1 || idx % jobs === job) {\n test.Start();\n }\n });\n }\n static set NODE_FONT_STACKS(fontStacks) {\n NODE_TEST_CONFIG.fontStacks = fontStacks;\n }\n /** Return a unique ID for a test. */\n static generateTestID(prefix) {\n return prefix + '_' + VexFlowTests.NEXT_TEST_ID++;\n }\n /**\n * Run `func` inside a QUnit test for each of the enabled rendering backends.\n * @param name\n * @param testFunc\n * @param params\n */\n // eslint-disable-next-line\n static runTests(name, testFunc, params) {\n VexFlowTests.runCanvasTest(name, testFunc, params);\n VexFlowTests.runSVGTest(name, testFunc, params);\n VexFlowTests.runNodeTest(name, testFunc, params);\n }\n // eslint-disable-next-line\n static runTextTests(name, testFunc, params) {\n VexFlowTests.runCanvasText(name, testFunc, params);\n VexFlowTests.runSVGText(name, testFunc, params);\n }\n /**\n * Append a
which contains the test case title and rendered output.\n * See flow.html and flow.css.\n * @param elementId\n * @param testTitle\n * @param tagName\n */\n static createTest(elementId, testTitle, tagName, titleId = '') {\n const anchorTestTitle = `${testTitle}`;\n const title = $('
').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0);\n const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0);\n const container = $('
').addClass('testcanvas').append(title, vexOutput).get(0);\n $('#vexflow_testoutput').append(container);\n return vexOutput;\n }\n static makeFactory(options, width = 450, height = 140) {\n const { elementId, backend } = options;\n return new Factory({ renderer: { elementId, backend, width, height } });\n }\n // eslint-disable-next-line\n static runCanvasTest(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runCanvasText(name, testFunc, params) {\n if (VexFlowTests.RUN_CANVAS_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGTest(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runSVGText(name, testFunc, params) {\n if (VexFlowTests.RUN_SVG_TESTS) {\n const helper = null;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper }));\n }\n }\n // eslint-disable-next-line\n static runNodeTest(name, testFunc, params) {\n if (VexFlowTests.RUN_NODE_TESTS) {\n const helper = VexFlowTests.runNodeTestHelper;\n VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper }));\n }\n }\n /**\n * Save the PNG file.\n * @param fontName\n * @param element\n */\n static runNodeTestHelper(fontName, element) {\n if (Renderer.lastContext !== undefined) {\n const moduleName = sanitizeName(QUnit.current_module);\n const testName = sanitizeName(QUnit.current_test);\n // If we are only testing Bravura, we OMIT the font name from the\n // output image file name, which allows visual diffs against\n // the previous release: version 3.0.9. In the future, if we decide\n // to test all fonts by default, we can remove this check.\n const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura';\n const fontInfo = onlyBravura ? '' : `.${fontName}`;\n const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`;\n const imageData = element.toDataURL().split(';base64,').pop();\n const imageBuffer = Buffer.from(imageData, 'base64');\n VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' });\n }\n }\n /** Run QUnit.test(...) for each font. */\n // eslint-disable-next-line\n static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) {\n if (name === undefined) {\n throw new Error('Test name is undefined.');\n }\n const testTypeLowerCase = testType.toLowerCase();\n fontStacks.forEach((fontStackName) => {\n QUnit.test(name, (assert) => {\n useTempFontStack(fontStackName);\n const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName);\n const moduleName = assert.test.module.name;\n const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`;\n // Add an element id for the title div, so that we can scroll directly to a test case.\n // Add a fragment identifier to the url (e.g., #Stave.Multiple_Stave_Barline_Test.Bravura)\n // This titleId will match the name of the PNGs generated by visual regression tests\n // (without the _Current.png or _Reference.png).\n let prefix = '';\n if (testTypeLowerCase === 'canvas') {\n prefix = testTypeLowerCase + '_';\n }\n else {\n // DO NOT ADD A PREFIX TO SVG TESTS\n // The canvas prefix above is for making sure our element ids are unique,\n // since we have a canvas+bravura test case and a svg+bravura test case\n // that would otherwise have the same titleId.\n }\n const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`;\n const element = VexFlowTests.createTest(elementId, title, tagName, titleId);\n const options = { elementId, params, assert, backend };\n const isSVG = backend === Renderer.Backends.SVG;\n const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext;\n testFunc(options, contextBuilder);\n restoreOriginalFontStack();\n if (helper)\n helper(fontStackName, element);\n });\n });\n }\n /**\n * @param ctx\n * @param x\n * @param y\n */\n static plotLegendForNoteWidth(ctx, x, y) {\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n const spacing = 12;\n let lastY = y;\n function legend(color, text) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(10);\n ctx.moveTo(x, lastY - 4);\n ctx.lineTo(x + 10, lastY - 4);\n ctx.stroke();\n ctx.setFillStyle('black');\n ctx.fillText(text, x + 15, lastY);\n lastY += spacing;\n }\n legend('green', 'Note + Flag');\n legend('red', 'Modifiers');\n legend('#999', 'Displaced Head');\n legend('#DDD', 'Formatter Shift');\n ctx.restore();\n }\n}\nVexFlowTests.tests = [];\nVexFlowTests.RUN_CANVAS_TESTS = true;\nVexFlowTests.RUN_SVG_TESTS = true;\nVexFlowTests.RUN_NODE_TESTS = false;\n// Default font properties for tests.\nVexFlowTests.Font = { size: 10 };\n/**\n * Each font stack is a prioritized list of font names.\n */\nVexFlowTests.FONT_STACKS = {\n Bravura: ['Bravura', 'Gonville', 'Custom'],\n Gonville: ['Gonville', 'Bravura', 'Custom'],\n Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'],\n Leland: ['Leland', 'Bravura', 'Gonville', 'Custom'],\n};\nVexFlowTests.NEXT_TEST_ID = 0;\n/**\n * Used with array.reduce(...) to flatten arrays of arrays in the tests.\n */\n// eslint-disable-next-line\nexport const concat = (a, b) => a.concat(b);\n/** Used in KeySignature and ClefKeySignature Tests. */\nexport const MAJOR_KEYS = [\n //\n 'C',\n 'F',\n 'Bb',\n 'Eb',\n 'Ab',\n 'Db',\n 'Gb',\n 'Cb',\n 'G',\n 'D',\n 'A',\n 'E',\n 'B',\n 'F#',\n 'C#',\n];\nexport const MINOR_KEYS = [\n 'Am',\n 'Dm',\n 'Gm',\n 'Cm',\n 'Fm',\n 'Bbm',\n 'Ebm',\n 'Abm',\n 'Em',\n 'Bm',\n 'F#m',\n 'C#m',\n 'G#m',\n 'D#m',\n 'A#m',\n];\n// VexFlow classes can be accessed via Vex.Flow.* or by directly importing a library class.\n// Tests can be accessed via Vex.Flow.Test.* or by directly importing a test class.\n// Here we set Vex.Flow.Test = VexFlowTests.\n// eslint-disable-next-line\n// @ts-ignore\nFlow.Test = VexFlowTests;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// VF.* Prefix Tests\n//\n// VexFlow classes are available under the global Vex.Flow.* namespace.\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index';\nconst VFPrefixTests = {\n Start() {\n QUnit.module('VF.* API');\n test('VF.* API', VF_Prefix);\n test('VF Alias', VF_Alias);\n },\n};\nfunction VF_Prefix() {\n // Intentionally use Vex.Flow here so we can verify that the Vex.Flow.* API\n // is equivalent to using the individual classes in TypeScript.\n const VF = Vex.Flow;\n equal(Accidental, VF.Accidental);\n equal(Annotation, VF.Annotation);\n equal(Articulation, VF.Articulation);\n equal(Barline, VF.Barline);\n equal(BarNote, VF.BarNote);\n equal(Beam, VF.Beam);\n equal(Bend, VF.Bend);\n equal(BoundingBox, VF.BoundingBox);\n equal(BoundingBoxComputation, VF.BoundingBoxComputation);\n equal(ChordSymbol, VF.ChordSymbol);\n equal(Clef, VF.Clef);\n equal(ClefNote, VF.ClefNote);\n equal(Crescendo, VF.Crescendo);\n equal(Curve, VF.Curve);\n equal(Dot, VF.Dot);\n equal(EasyScore, VF.EasyScore);\n equal(Element, VF.Element);\n equal(Factory, VF.Factory);\n equal(Flow.RESOLUTION, VF.RESOLUTION);\n equal(Font, VF.Font);\n equal(Formatter, VF.Formatter);\n propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()');\n equal(Fraction, VF.Fraction);\n equal(FretHandFinger, VF.FretHandFinger);\n equal(GhostNote, VF.GhostNote);\n equal(Glyph, VF.Glyph);\n equal(GlyphNote, VF.GlyphNote);\n equal(GraceNote, VF.GraceNote);\n equal(GraceNoteGroup, VF.GraceNoteGroup);\n equal(GraceTabNote, VF.GraceTabNote);\n equal(KeyManager, VF.KeyManager);\n equal(KeySignature, VF.KeySignature);\n equal(KeySigNote, VF.KeySigNote);\n equal(Modifier, VF.Modifier);\n equal(ModifierContext, VF.ModifierContext);\n equal(MultiMeasureRest, VF.MultiMeasureRest);\n equal(Music, VF.Music);\n equal(Note, VF.Note);\n equal(NoteHead, VF.NoteHead);\n equal(NoteSubGroup, VF.NoteSubGroup);\n equal(Ornament, VF.Ornament);\n equal(Parser, VF.Parser);\n equal(PedalMarking, VF.PedalMarking);\n equal(Registry, VF.Registry);\n equal(Renderer, VF.Renderer);\n equal(RepeatNote, VF.RepeatNote);\n equal(Repetition, VF.Repetition);\n equal(Stave, VF.Stave);\n notEqual(Stave, VF.StaveNote);\n equal(StaveConnector, VF.StaveConnector);\n equal(StaveHairpin, VF.StaveHairpin);\n equal(StaveLine, VF.StaveLine);\n equal(StaveModifier, VF.StaveModifier);\n equal(StaveNote, VF.StaveNote);\n equal(StaveTempo, VF.StaveTempo);\n equal(StaveText, VF.StaveText);\n equal(StaveTie, VF.StaveTie);\n equal(Stem, VF.Stem);\n equal(StringNumber, VF.StringNumber);\n equal(Stroke, VF.Stroke);\n equal(System, VF.System);\n equal(TabNote, VF.TabNote);\n equal(TabSlide, VF.TabSlide);\n equal(TabStave, VF.TabStave);\n equal(TabTie, VF.TabTie);\n equal(TextBracket, VF.TextBracket);\n equal(TextDynamics, VF.TextDynamics);\n equal(TextFormatter, VF.TextFormatter);\n equal(TextNote, VF.TextNote);\n equal(TickContext, VF.TickContext);\n equal(TimeSignature, VF.TimeSignature);\n equal(TimeSigNote, VF.TimeSigNote);\n equal(Tremolo, VF.Tremolo);\n equal(Tuning, VF.Tuning);\n equal(Tuplet, VF.Tuplet);\n equal(Vibrato, VF.Vibrato);\n equal(VibratoBracket, VF.VibratoBracket);\n equal(Voice, VF.Voice);\n equal(Volta, VF.Volta);\n}\n/**\n * If you have name collisions with VexFlow classes, consider extracting classes from Vex.Flow\n * and renaming them with a VF prefix.\n */\nfunction VF_Alias() {\n const Flow = Vex.Flow;\n const VFAliases = {\n get VFAccidental() {\n return Flow.Accidental;\n },\n get VFAnnotation() {\n return Flow.Annotation;\n },\n get VFVibrato() {\n return Flow.Vibrato;\n },\n };\n const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases;\n equal(Accidental, VFAccidental);\n equal(Annotation, VFAnnotation);\n const vibrato = new VFVibrato();\n ok(vibrato);\n const acc1 = new VFAccidental('##');\n const acc2 = new Accidental('##');\n equal(acc1.type, acc2.type);\n}\nVexFlowTests.register(VFPrefixTests);\nexport { VFPrefixTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Vibrato Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index';\nconst VibratoTests = {\n Start() {\n QUnit.module('Vibrato');\n const run = VexFlowTests.runTests;\n run('Simple Vibrato', simple);\n run('Harsh Vibrato', harsh);\n run('Vibrato with Bend', withBend);\n },\n};\n// Helper function to create TabNote objects.\nconst tabNote = (noteStruct) => new TabNote(noteStruct);\n/**\n * Default vibrato symbol (wavy line) on top of a tab with two notes fretted.\n */\nfunction simple(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato(), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Simple Vibrato');\n}\n/**\n * The harsh vibrato symbol is a zig zag line with sharp points.\n * This test is nearly identical to the 'simple' test above.\n * The only difference is that we call .setHarsh(true) on each Vibrato object.\n */\nfunction harsh(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.5, 1.5);\n ctx.font = '10pt Arial';\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 10 },\n { str: 4, fret: 9 },\n ],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Harsh Vibrato');\n}\nfunction withBend(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 500, 240);\n ctx.scale(1.3, 1.3);\n ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size);\n const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw();\n const notes = [\n tabNote({\n positions: [\n { str: 2, fret: 9 },\n { str: 3, fret: 9 },\n ],\n duration: 'q',\n })\n .addModifier(new Bend('1/2', true), 0)\n .addModifier(new Bend('1/2', true), 1)\n .addModifier(new Vibrato(), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'q',\n })\n .addModifier(new Bend('Full', false), 0)\n .addModifier(new Vibrato().setVibratoWidth(60), 0),\n tabNote({\n positions: [{ str: 2, fret: 10 }],\n duration: 'h',\n }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0),\n ];\n Formatter.FormatAndDraw(ctx, stave, notes);\n ok(true, 'Vibrato with Bend');\n}\nVexFlowTests.register(VibratoTests);\nexport { VibratoTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Author: Balazs Forian-Szabo\n//\n// VibratoBracket Tests\n// TODO: It's annoying to have to cast \"as Note\" or \"as Note[]\". Could we add a method to Voice to get the tickables as Note[]? Voice.getTickables() vs Voice.getNotes()?\nimport { VexFlowTests } from './vexflow_test_helpers';\nconst VibratoBracketTests = {\n Start() {\n QUnit.module('VibratoBracket');\n const run = VexFlowTests.runTests;\n run('Simple VibratoBracket', simple);\n run('Harsh VibratoBracket Without End Note', withoutEndNote);\n run('Harsh VibratoBracket Without Start Note', withoutStartNote);\n },\n};\n// Helper function to set up the stave, easyscore, voice, and to format & draw.\nfunction createTest(noteGroup, setupVibratoBracket) {\n return (options) => {\n const factory = VexFlowTests.makeFactory(options, 650, 200);\n const stave = factory.Stave();\n const score = factory.EasyScore();\n const voice = score.voice(score.notes(noteGroup));\n setupVibratoBracket(factory, voice.getTickables());\n factory.Formatter().joinVoices([voice]).formatToStave([voice], stave);\n factory.draw();\n ok(true);\n };\n}\nconst simple = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[0],\n to: notes[3],\n options: { line: 2 },\n });\n});\nconst withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: notes[2],\n to: null,\n options: { line: 2, harsh: true },\n });\n});\nconst withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => {\n factory.VibratoBracket({\n from: null,\n to: notes[2],\n options: { line: 2, harsh: true },\n });\n});\nVexFlowTests.register(VibratoBracketTests);\nexport { VibratoBracketTests };\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Voice Tests\nimport { VexFlowTests } from './vexflow_test_helpers';\nimport { Flow } from '../src/flow';\nimport { Formatter } from '../src/formatter';\nimport { Stave } from '../src/stave';\nimport { Barline } from '../src/stavebarline';\nimport { StaveNote } from '../src/stavenote';\nimport { Voice } from '../src/voice';\nimport { MockTickable } from './mocks';\nconst VoiceTests = {\n Start() {\n QUnit.module('Voice');\n test('Strict Test', strict);\n test('Ignore Test', ignore);\n VexFlowTests.runTests('Full Voice Mode Test', full);\n },\n};\nconst BEAT = (1 * Flow.RESOLUTION) / 4;\n// Helper function to create a tickable with a preset number of ticks.\nconst createTickable = () => new MockTickable().setTicks(BEAT);\nfunction strict() {\n expect(8);\n const tickables = [createTickable(), createTickable(), createTickable()];\n const voice = new Voice(Flow.TIME4_4);\n equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats');\n equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice');\n voice.addTickables(tickables);\n equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice');\n voice.addTickable(createTickable());\n equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice');\n equal(voice.isComplete(), true, 'Voice is complete');\n const numeratorBeforeException = voice.getTicksUsed().numerator;\n throws(() => voice.addTickable(createTickable()), /BadArgument/, '\"Too many ticks\" exception');\n // Verify that adding too many ticks does not affect the `ticksUsed` property of the voice.\n // See voice.ts: this.ticksUsed.subtract(ticks);\n equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a \"Too many ticks\" exception');\n equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT');\n}\nfunction ignore() {\n const tickables = [\n createTickable(),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n createTickable().setIgnoreTicks(true),\n createTickable(),\n ];\n const voice = new Voice(Flow.TIME4_4);\n voice.addTickables(tickables);\n ok(true, 'all pass');\n}\nfunction full(options, contextBuilder) {\n const ctx = contextBuilder(options.elementId, 550, 200);\n const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END);\n const notes = [\n new StaveNote({ keys: ['c/4'], duration: '4' }),\n new StaveNote({ keys: ['d/4'], duration: '4' }),\n new StaveNote({ keys: ['r/4'], duration: '4r' }),\n ];\n notes.forEach((note) => note.setStave(stave));\n const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes);\n new Formatter().joinVoices([voice]).formatToStave([voice], stave);\n stave.setContext(ctx).draw();\n voice.draw(ctx);\n const bb = voice.getBoundingBox();\n if (bb) {\n ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH());\n }\n ctx.stroke();\n throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks');\n}\nVexFlowTests.register(VoiceTests);\nexport { VoiceTests };\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug-with-tests.ts is the entry point for the build output file vexflow-debug-with-tests.js.\n// It statically bundles all the music engraving fonts, and also includes the tests from vexflow/tests/.\n// The output file is used by flow.html & flow-headless-browser.html to run the tests.\nimport * as VexSrc from '../src/index';\nimport * as VexTests from '../tests/index';\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from src/index.ts and tests/index.ts.\nexport * from '../src/index';\nexport * from '../tests/index';\n// Also collect all exports into a default export for CJS projects.\nexport default Object.assign(Object.assign({}, VexSrc), VexTests);\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js b/build/cjs/vexflow-debug.js deleted file mode 100644 index ac5a075db0..0000000000 --- a/build/cjs/vexflow-debug.js +++ /dev/null @@ -1,38107 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["Vex"] = factory(); - else - root["Vex"] = factory(); -})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => { -return /******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./src/version.ts": -/*!************************!*\ - !*** ./src/version.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "DATE": () => (/* binding */ DATE), -/* harmony export */ "ID": () => (/* binding */ ID), -/* harmony export */ "VERSION": () => (/* binding */ VERSION) -/* harmony export */ }); -const VERSION = '4.2.0-beta.1'; -const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341'; -const DATE = '2023-01-10T00:21:01.976Z'; - - -/***/ }), - -/***/ "./src/accidental.ts": -/*!***************************!*\ - !*** ./src/accidental.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* binding */ Accidental) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// @author Mohit Cheppudira -// @author Greg Ristow (modifications) - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Accidental.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Accidental', args); -} -/** - * An `Accidental` inherits from `Modifier`, and is formatted within a - * `ModifierContext`. Accidentals are modifiers that can be attached to - * notes. Support is included for both western and microtonal accidentals. - * - * See `tests/accidental_tests.ts` for usage examples. - */ -class Accidental extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - /** Accidentals category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Accidental; - } - /** Arrange accidentals inside a ModifierContext. */ - static format(accidentals, state) { - // If there are no accidentals, no need to format their positions. - if (!accidentals || accidentals.length === 0) - return; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); - const leftShift = state.left_shift + noteheadAccidentalPadding; - const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); - const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals - const accList = []; - let prevNote = undefined; - let shiftL = 0; - // First determine the accidentals' Y positions from the note.keys - for (let i = 0; i < accidentals.length; ++i) { - const acc = accidentals[i]; - const note = acc.getNote(); - const stave = note.getStave(); - const index = acc.checkIndex(); - const props = note.getKeyProps()[index]; - if (note !== prevNote) { - // Iterate through all notes to get the displaced pixels - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL); - } - prevNote = note; - } - if (stave) { - const lineSpace = stave.getSpacingBetweenLines(); - const y = stave.getYForLine(props.line); - const accLine = Math.round((y / lineSpace) * 2) / 2; - accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace }); - } - else { - accList.push({ line: props.line, shift: shiftL, acc }); - } - } - // Sort accidentals by line number. - accList.sort((a, b) => b.line - a.line); - // FIXME: Confusing name. Each object in this array has a property called `line`. - // So if this is a list of lines, you end up with: `line.line` which is very awkward. - const lineList = []; - // amount by which all accidentals must be shifted right or left for - // stem flipping, notehead shifting concerns. - let accShift = 0; - let previousLine = undefined; - // Create an array of unique line numbers (lineList) from accList - for (let i = 0; i < accList.length; i++) { - const acc = accList[i]; - // if this is the first line, or a new line, add a lineList - if (previousLine === undefined || previousLine !== acc.line) { - lineList.push({ - line: acc.line, - flatLine: true, - dblSharpLine: true, - numAcc: 0, - width: 0, - column: 0, - }); - } - // if this accidental is not a flat, the accidental needs 3.0 lines lower - // clearance instead of 2.5 lines for b or bb. - // FIXME: Naming could use work. acc.acc is very awkward - if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') { - lineList[lineList.length - 1].flatLine = false; - } - // if this accidental is not a double sharp, the accidental needs 3.0 lines above - if (acc.acc.type !== '##') { - lineList[lineList.length - 1].dblSharpLine = false; - } - // Track how many accidentals are on this line: - lineList[lineList.length - 1].numAcc++; - // Track the total x_offset needed for this line which will be needed - // for formatting lines w/ multiple accidentals: - // width = accidental width + universal spacing between accidentals - lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing; - // if this accShift is larger, use it to keep first column accidentals in the same line - accShift = acc.shift > accShift ? acc.shift : accShift; - previousLine = acc.line; - } - // ### Place Accidentals in Columns - // - // Default to a classic triangular layout (middle accidental farthest left), - // but follow exceptions as outlined in G. Read's _Music Notation_ and - // Elaine Gould's _Behind Bars_. - // - // Additionally, this implements different vertical collision rules for - // flats (only need 2.5 lines clearance below) and double sharps (only - // need 2.5 lines of clearance above or below). - // - // Classic layouts and exception patterns are found in the 'tables.js' - // in 'Tables.accidentalColumnsTable' - // - // Beyond 6 vertical accidentals, default to the parallel ascending lines approach, - // using as few columns as possible for the verticle structure. - // - // TODO (?): Allow column to be specified for an accidental at run-time? - let totalColumns = 0; - // establish the boundaries for a group of notes with clashing accidentals: - for (let i = 0; i < lineList.length; i++) { - let noFurtherConflicts = false; - const groupStart = i; - let groupEnd = i; - while (groupEnd + 1 < lineList.length && !noFurtherConflicts) { - // if this note conflicts with the next: - if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) { - // include the next note in the group: - groupEnd++; - } - else { - noFurtherConflicts = true; - } - } - // Gets an a line from the `lineList`, relative to the current group - const getGroupLine = (index) => lineList[groupStart + index]; - const getGroupLines = (indexes) => indexes.map(getGroupLine); - const lineDifference = (indexA, indexB) => { - const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); - return a - b; - }; - const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); - // Set columns for the lines in this group: - const groupLength = groupEnd - groupStart + 1; - // Set the accidental column for each line of the group - let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b'; - switch (groupLength) { - case 3: - if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { - endCase = 'second_on_bottom'; - } - break; - case 4: - if (notColliding([0, 2], [1, 3])) { - endCase = 'spaced_out_tetrachord'; - } - break; - case 5: - if (endCase === 'b' && notColliding([1, 3])) { - endCase = 'spaced_out_pentachord'; - if (notColliding([0, 2], [2, 4])) { - endCase = 'very_spaced_out_pentachord'; - } - } - break; - case 6: - if (notColliding([0, 3], [1, 4], [2, 5])) { - endCase = 'spaced_out_hexachord'; - } - if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { - endCase = 'very_spaced_out_hexachord'; - } - break; - default: - break; - } - let groupMember; - let column; - // If the group contains seven members or more, use ascending parallel lines - // of accidentals, using as few columns as possible while avoiding collisions. - if (groupLength >= 7) { - // First, determine how many columns to use: - let patternLength = 2; - let collisionDetected = true; - while (collisionDetected === true) { - collisionDetected = false; - for (let line = 0; line + patternLength < lineList.length; line++) { - if (this.checkCollision(lineList[line], lineList[line + patternLength])) { - collisionDetected = true; - patternLength++; - break; - } - } - } - // Then, assign a column to each line of accidentals - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = ((groupMember - i) % patternLength) + 1; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - else { - // If the group contains fewer than seven members, use the layouts from - // the Tables.accidentalColumnsTable (See: tables.ts). - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - // Increment i to the last note that was set, so that if a lower set of notes - // does not conflict at all with this group, it can have its own classic shape. - i = groupEnd; - } - // ### Convert Columns to x_offsets - // - // This keeps columns aligned, even if they have different accidentals within them - // which sometimes results in a larger x_offset than is an accidental might need - // to preserve the symmetry of the accidental shape. - // - // Neither A.C. Vinci nor G. Read address this, and it typically only happens in - // music with complex chord clusters. - // - // TODO (?): Optionally allow closer compression of accidentals, instead of forcing - // parallel columns. - // track each column's max width, which will be used as initial shift of later columns: - const columnWidths = []; - const columnXOffsets = []; - for (let i = 0; i <= totalColumns; i++) { - columnWidths[i] = 0; - columnXOffsets[i] = 0; - } - columnWidths[0] = accShift + leftShift; - columnXOffsets[0] = accShift + leftShift; - // Fill columnWidths with widest needed x-space; - // this is what keeps the columns parallel. - lineList.forEach((line) => { - if (line.width > columnWidths[line.column]) - columnWidths[line.column] = line.width; - }); - for (let i = 1; i < columnWidths.length; i++) { - // this column's offset = this column's width + previous column's offset - columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; - } - const totalShift = columnXOffsets[columnXOffsets.length - 1]; - // Set the xShift for each accidental according to column offsets: - let accCount = 0; - lineList.forEach((line) => { - let lineWidth = 0; - const lastAccOnLine = accCount + line.numAcc; - // handle all of the accidentals on a given line: - for (accCount; accCount < lastAccOnLine; accCount++) { - const xShift = columnXOffsets[line.column - 1] + lineWidth; - accList[accCount].acc.setXShift(xShift); - // keep track of the width of accidentals we've added so far, so that when - // we loop, we add space for them. - lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing; - L('Line, accCount, shift: ', line.line, accCount, xShift); - } - }); - // update the overall layout with the full width of the accidental shapes: - state.left_shift += totalShift + additionalPadding; - } - /** Helper function to determine whether two lines of accidentals collide vertically */ - static checkCollision(line1, line2) { - let clearance = line2.line - line1.line; - let clearanceRequired = 3; - // But less clearance is required for certain accidentals: b, bb and ##. - if (clearance > 0) { - // then line 2 is on top - clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; - if (line1.dblSharpLine) - clearance -= 0.5; - } - else { - // line 1 is on top - clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; - if (line2.dblSharpLine) - clearance -= 0.5; - } - const collision = Math.abs(clearance) < clearanceRequired; - L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); - return collision; - } - /** - * Use this method to automatically apply accidentals to a set of `voices`. - * The accidentals will be remembered between all the voices provided. - * Optionally, you can also provide an initial `keySignature`. - */ - static applyAccidentals(voices, keySignature) { - const tickPositions = []; - const tickNoteMap = {}; - // Sort the tickables in each voice by their tick position in the voice. - voices.forEach((voice) => { - const tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - const tickable = voice.getTickables(); - tickable.forEach((t) => { - if (t.shouldIgnoreTicks()) - return; - const notesAtPosition = tickNoteMap[tickPosition.value()]; - if (!notesAtPosition) { - tickPositions.push(tickPosition.value()); - tickNoteMap[tickPosition.value()] = [t]; - } - else { - notesAtPosition.push(t); - } - tickPosition.add(t.getTicks()); - }); - }); - const music = new _music__WEBPACK_IMPORTED_MODULE_3__.Music(); - // Default key signature is C major. - if (!keySignature) - keySignature = 'C'; - // Get the scale map, which represents the current state of each pitch. - const scaleMapKey = music.createScaleMap(keySignature); - const scaleMap = {}; - tickPositions.forEach((tickPos) => { - const tickables = tickNoteMap[tickPos]; - // Array to store all pitches that modified accidental states - // at this tick position - const modifiedPitches = []; - const processNote = (t) => { - // Only StaveNote implements .addModifier(), which is used below. - if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(t) || t.isRest() || t.shouldIgnoreTicks()) { - return; - } - // Go through each key and determine if an accidental should be applied. - const staveNote = t; - staveNote.keys.forEach((keyString, keyIndex) => { - const key = music.getNoteParts(keyString.split('/')[0]); - const octave = keyString.split('/')[1]; - // Force a natural for every key without an accidental - const accidentalString = key.accidental || 'n'; - const pitch = key.root + accidentalString; - // Determine if the current pitch has the same accidental - // as the scale state - if (!scaleMap[key.root + octave]) - scaleMap[key.root + octave] = scaleMapKey[key.root]; - const sameAccidental = scaleMap[key.root + octave] === pitch; - // Determine if an identical pitch in the chord already - // modified the accidental state - const previouslyModified = modifiedPitches.indexOf(keyString) > -1; - // Remove accidentals - staveNote.getModifiers().forEach((modifier, index) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isAccidental)(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { - staveNote.getModifiers().splice(index, 1); - } - }); - // Add the accidental to the StaveNote - if (!sameAccidental || (sameAccidental && previouslyModified)) { - // Modify the scale map so that the root pitch has an - // updated state - scaleMap[key.root + octave] = pitch; - // Create the accidental - const accidental = new Accidental(accidentalString); - // Attach the accidental to the StaveNote - staveNote.addModifier(accidental, keyIndex); - // Add the pitch to list of pitches that modified accidentals - modifiedPitches.push(keyString); - } - }); - // process grace notes - staveNote.getModifiers().forEach((modifier) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNoteGroup)(modifier)) { - modifier.getGraceNotes().forEach(processNote); - } - }); - }; - tickables.forEach(processNote); - }); - } - /** - * Create accidental. - * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. - * For example: `#`, `##`, `b`, `n`, etc. - */ - constructor(type) { - super(); - L('New accidental: ', type); - this.type = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.render_options = { - // Font size for glyphs - font_scale: 38, - // Padding between accidental and parentheses on each side - parenLeftPadding: 2, - parenRightPadding: 2, - }; - this.accidental = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes(this.type); - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); - // Cautionary accidentals have parentheses around them - this.cautionary = false; - this.reset(); - } - reset() { - const fontScale = this.render_options.font_scale; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.accidental.code, fontScale); - this.glyph.setOriginX(1.0); - if (this.cautionary) { - this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('{').code, fontScale); - this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.accidentalCodes('}').code, fontScale); - this.parenLeft.setOriginX(1.0); - this.parenRight.setOriginX(1.0); - } - } - /** Get width in pixels. */ - getWidth() { - if (this.cautionary) { - const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); - const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); - const parenWidth = parenLeft.getMetrics().width + - parenRight.getMetrics().width + - this.render_options.parenLeftPadding + - this.render_options.parenRightPadding; - return this.glyph.getMetrics().width + parenWidth; - } - else { - return this.glyph.getMetrics().width; - } - } - /** Attach this accidental to `note`, which must be a `StaveNote`. */ - setNote(note) { - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(note, 'ArgumentError', `Bad note value: ${note}`); - this.note = note; - // Accidentals attached to grace notes are rendered smaller. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note)) { - this.render_options.font_scale = 25; - this.reset(); - } - return this; - } - /** If called, draws parenthesis around accidental. */ - setAsCautionary() { - this.cautionary = true; - this.render_options.font_scale = 28; - this.reset(); - return this; - } - /** Render accidental onto canvas. */ - draw() { - const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - // Figure out the start `x` and `y` coordinates for note and index. - const start = note.getModifierStartXY(position, index); - let accX = start.x + x_shift; - const accY = start.y + y_shift; - L('Rendering: ', type, accX, accY); - if (!cautionary) { - glyph.render(ctx, accX, accY); - } - else { - const parenLeft = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenLeft); - const parenRight = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.parenRight); - // Render the accidental in parentheses. - parenRight.render(ctx, accX, accY); - accX -= parenRight.getMetrics().width; - accX -= parenRightPadding; - accX -= this.accidental.parenRightPaddingAdjustment; - glyph.render(ctx, accX, accY); - accX -= glyph.getMetrics().width; - accX -= parenLeftPadding; - parenLeft.render(ctx, accX, accY); - } - } -} -/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ -Accidental.DEBUG = false; - - -/***/ }), - -/***/ "./src/annotation.ts": -/*!***************************!*\ - !*** ./src/annotation.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Annotation": () => (/* binding */ Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* binding */ AnnotationHorizontalJustify), -/* harmony export */ "AnnotationVerticalJustify": () => (/* binding */ AnnotationVerticalJustify) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Annotation.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Annotation', args); -} -var AnnotationHorizontalJustify; -(function (AnnotationHorizontalJustify) { - AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); -var AnnotationVerticalJustify; -(function (AnnotationVerticalJustify) { - AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; - AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); -/** - * Annotations are modifiers that can be attached to - * notes. - * - * See `tests/annotation_tests.ts` for usage examples. - */ -class Annotation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Annotations category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Annotation; - } - // Use the same padding for annotations as note head so the - // words don't run into each other. - static get minAnnotationPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Arrange annotations within a `ModifierContext` */ - static format(annotations, state) { - if (!annotations || annotations.length === 0) - return false; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (let i = 0; i < annotations.length; ++i) { - const annotation = annotations[i]; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(annotation.textFont); - // Text height is expressed in fractional stave spaces. - const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - let verticalSpaceNeeded = textLines; - const note = annotation.checkAttachedNote(); - const glyphWidth = note.getGlyphProps().getWidth(); - // Get the text width from the font metrics. - const textWidth = textFormatter.getWidthForTextInPx(annotation.text); - if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; - } - else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, textWidth); - } - else { - leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; - rightWidth = Math.max(rightWidth, textWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - const stave = note.getStave(); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - let stemHeight = 0; - let lines = 5; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - if (note.render_options.draw_stem) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - else { - stemHeight = 0; - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { - const stem = note.getStem(); - if (stem && note.getNoteType() === 'n') { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - if (stave) { - lines = stave.getNumLines(); - } - if (annotation.verticalJustification === this.VerticalJustify.TOP) { - let noteLine = note.getLineNumber(true); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - noteLine = lines - (note.leastString() - 0.5); - } - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - noteLine += stemHeight; - } - const curTop = noteLine + state.top_text_line + 0.5; - if (curTop < lines) { - annotation.setTextLine(lines - noteLine); - verticalSpaceNeeded += lines - noteLine; - state.top_text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.top_text_line); - state.top_text_line += verticalSpaceNeeded; - } - } - else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { - let noteLine = lines - note.getLineNumber(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - noteLine = note.greatestString() - 1; - } - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - noteLine += stemHeight; - } - const curBottom = noteLine + state.text_line + 1; - if (curBottom < lines) { - annotation.setTextLine(lines - curBottom); - verticalSpaceNeeded += lines - curBottom; - state.text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.text_line); - state.text_line += verticalSpaceNeeded; - } - } - else { - annotation.setTextLine(state.text_line); - } - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - /** - * Annotations inherit from `Modifier` and is positioned correctly when - * in a `ModifierContext`. - * Create a new `Annotation` with the string `text`. - */ - constructor(text) { - super(); - this.text = text; - this.horizontalJustification = AnnotationHorizontalJustify.CENTER; - // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM. - // this is to support legacy application that may expect this. - this.verticalJustification = AnnotationVerticalJustify.TOP; - this.resetFont(); - // The default width is calculated from the text. - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.textWidth(text)); - } - /** - * Set vertical position of text (above or below stave). - * @param just value in `AnnotationVerticalJustify`. - */ - setVerticalJustification(just) { - this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; - return this; - } - /** - * Get horizontal justification. - */ - getJustification() { - return this.horizontalJustification; - } - /** - * Set horizontal justification. - * @param justification value in `Annotation.Justify`. - */ - setJustification(just) { - this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; - return this; - } - /** Render text beside the note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE, this.index); - this.setRendered(); - // We're changing context parameters. Save current state. - ctx.save(); - // Apply style might not save context, if this.style is undefined, so we - // still need to save context state just before this, since we will be - // changing ctx parameters below. - this.applyStyle(); - ctx.openGroup('annotation', this.getAttribute('id')); - ctx.setFont(this.textFont); - const text_width = textFormatter.getWidthForTextInPx(this.text); - const text_height = textFormatter.getYForStringInPx(this.text).height; - let x; - let y; - if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - x = start.x - text_width; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { - x = start.x - text_width / 2; - } /* CENTER_STEM */ - else { - x = note.getStemX() - text_width / 2; - } - let stem_ext = {}; - let spacing = 0; - const has_stem = note.hasStem(); - const stave = note.checkStave(); - // The position of the text varies based on whether or not the note - // has a stem. - if (has_stem) { - stem_ext = note.checkStem().getExtents(); - spacing = stave.getSpacingBetweenLines(); - } - if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { - // Use the largest (lowest) Y value - const ys = note.getYs(); - y = ys.reduce((a, b) => (a > b ? a : b)); - y += (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE + text_height; - if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); - } - } - else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { - const yt = note.getYForTopText(this.text_line) - 1; - const yb = stave.getYForBottomText(this.text_line); - y = yt + (yb - yt) / 2 + text_height / 2; - } - else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { - const topY = Math.min(...note.getYs()); - y = topY - (this.text_line + 1) * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - if (has_stem && stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - // If the stem is above the stave already, go with default line width vs. actual - // since the lines between don't really matter. - spacing = stem_ext.topY < stave.getTopLineTopY() ? _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE : spacing; - y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); - } - } /* CENTER_STEM */ - else { - const extents = note.getStemExtents(); - y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; - } - L('Rendering annotation: ', this.text, x, y); - ctx.fillText(this.text, x, y); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ -Annotation.DEBUG = false; -Annotation.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); -/** Text annotations can be positioned and justified relative to the note. */ -Annotation.HorizontalJustify = AnnotationHorizontalJustify; -Annotation.HorizontalJustifyString = { - left: AnnotationHorizontalJustify.LEFT, - right: AnnotationHorizontalJustify.RIGHT, - center: AnnotationHorizontalJustify.CENTER, - centerStem: AnnotationHorizontalJustify.CENTER_STEM, -}; -Annotation.VerticalJustify = AnnotationVerticalJustify; -Annotation.VerticalJustifyString = { - above: AnnotationVerticalJustify.TOP, - top: AnnotationVerticalJustify.TOP, - below: AnnotationVerticalJustify.BOTTOM, - bottom: AnnotationVerticalJustify.BOTTOM, - center: AnnotationVerticalJustify.CENTER, - centerStem: AnnotationVerticalJustify.CENTER_STEM, -}; - - -/***/ }), - -/***/ "./src/articulation.ts": -/*!*****************************!*\ - !*** ./src/articulation.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Articulation": () => (/* binding */ Articulation) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns. -// MIT License - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Articulation.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.Articulation', args); -} -const { ABOVE, BELOW } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; -function roundToNearestHalf(mathFn, value) { - return mathFn(value / 0.5) * 0.5; -} -// This includes both staff and ledger lines -function isWithinLines(line, position) { - return position === ABOVE ? line <= 5 : line >= 1; -} -function getRoundingFunction(line, position) { - if (isWithinLines(line, position)) { - if (position === ABOVE) { - return Math.ceil; - } - else { - return Math.floor; - } - } - else { - return Math.round; - } -} -function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { - // Initially, snap to nearest staff line or space - const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); - const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); - const onStaffLine = snappedLine % 1 === 0; - if (canSnapToStaffSpace && onStaffLine) { - const HALF_STAFF_SPACE = 0.5; - return snappedLine + HALF_STAFF_SPACE * -offsetDirection; - } - else { - return snappedLine; - } -} -// Helper function for checking if a Note object is either a StaveNote or a GraceNote. -const isStaveOrGraceNote = (note) => (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStaveNote)(note) || (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isGraceNote)(note); -function getTopY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemTipY; - } - else { - return stemBaseY; - } - } - else { - return Math.min(...note.getYs()); - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemTipY; - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -function getBottomY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return stemBaseY; - } - else { - return stemTipY; - } - } - else { - return Math.max(...note.getYs()); - } - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - return note.checkStave().getYForBottomText(textLine); - } - else { - return stemTipY; - } - } - else { - return note.checkStave().getYForBottomText(textLine); - } - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -/** - * Get the initial offset of the articulation from the y value of the starting position. - * This is required because the top/bottom text positions already have spacing applied to - * provide a "visually pleasant" default position. However the y values provided from - * the stavenote's top/bottom do *not* have any pre-applied spacing. This function - * normalizes this asymmetry. - * @param note - * @param position - * @returns - */ -function getInitialOffset(note, position) { - const isOnStemTip = (position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) || - (position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN); - if (isStaveOrGraceNote(note)) { - if (note.hasStem() && isOnStemTip) { - return 0.5; - } - else { - // this amount is larger than the stem-tip offset because we start from - // the center of the notehead - return 1; - } - } - else { - if (note.hasStem() && isOnStemTip) { - return 1; - } - else { - return 0; - } - } -} -/** - * Articulations and Accents are modifiers that can be - * attached to notes. The complete list of articulations is available in - * `tables.ts` under `Vex.Flow.articulationCodes`. - * - * See `tests/articulation_tests.ts` for usage examples. - */ -class Articulation extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Articulations category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Articulation; - } - /** - * FIXME: - * Most of the complex formatting logic (ie: snapping to space) is - * actually done in .render(). But that logic belongs in this method. - * - * Unfortunately, this isn't possible because, by this point, stem lengths - * have not yet been finalized. Finalized stem lengths are required to determine the - * initial position of any stem-side articulation. - * - * This indicates that all objects should have their stave set before being - * formatted. It can't be an optional if you want accurate vertical positioning. - * Consistently positioned articulations that play nice with other modifiers - * won't be possible until we stop relying on render-time formatting. - * - * Ideally, when this function has completed, the vertical articulation positions - * should be ready to render without further adjustment. But the current state - * is far from this ideal. - */ - static format(articulations, state) { - if (!articulations || articulations.length === 0) - return false; - const margin = 0.5; - let maxGlyphWidth = 0; - const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(articulation.glyph.getMetrics().height) / 10 + margin); - articulations.forEach((articulation) => { - const note = articulation.checkAttachedNote(); - maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); - let lines = 5; - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - let stemHeight = 0; - // Decide if we need to consider beam direction in placement. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isStemmableNote)(note)) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_DISTANCE; - } - } - const stave = note.getStave(); - if (stave) { - lines = stave.getNumLines(); - } - if (articulation.getPosition() === ABOVE) { - let noteLine = note.getLineNumber(true); - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.top_text_line, ABOVE); - const curTop = noteLine + state.top_text_line + 0.5; - // If articulation must be above stave, add lines between note and stave top - if (!articulation.articulation.between_lines && curTop < lines) { - increment += lines - curTop; - } - articulation.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else if (articulation.getPosition() === BELOW) { - let noteLine = Math.max(lines - note.getLineNumber(), 0); - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.text_line, BELOW); - const curBottom = noteLine + state.text_line + 0.5; - // if articulation must be below stave, add lines from note to stave bottom - if (!articulation.articulation.between_lines && curBottom < lines) { - increment += lines - curBottom; - } - articulation.setTextLine(state.text_line); - state.text_line += increment; - } - }); - const width = articulations - .map((articulation) => articulation.getWidth()) - .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); - const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); - state.left_shift += overlap / 2; - state.right_shift += overlap / 2; - return true; - } - static easyScoreHook({ articulations }, note, builder) { - if (!articulations) - return; - const articNameToCode = { - staccato: 'a.', - tenuto: 'a-', - accent: 'a>', - }; - articulations - .split(',') - .map((articString) => articString.trim().split('.')) - .map(([name, position]) => { - const artic = { type: articNameToCode[name] }; - if (position) - artic.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.PositionString[position]; - return builder.getFactory().Articulation(artic); - }) - .map((artic) => note.addModifier(artic, 0)); - } - /** - * Create a new articulation. - * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. - * - * Notes (by default): - * - Glyph codes ending with 'Above' will be positioned ABOVE - * - Glyph codes ending with 'Below' will be positioned BELOW - */ - constructor(type) { - super(); - this.type = type; - this.position = ABOVE; - this.render_options = { - font_scale: 38, - }; - this.reset(); - } - reset() { - this.articulation = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.articulationCodes(this.type); - // Use type as glyph code, if not defined as articulation code - if (!this.articulation) { - this.articulation = { code: this.type, between_lines: false }; - if (this.type.endsWith('Above')) - this.position = ABOVE; - if (this.type.endsWith('Below')) - this.position = BELOW; - } - const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); - (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); - this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); - } - /** Set if articulation should be rendered between lines. */ - setBetweenLines(betweenLines = true) { - this.articulation.between_lines = betweenLines; - return this; - } - /** Render articulation in position next to note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const index = this.checkIndex(); - const { position, glyph, text_line: textLine } = this; - const canSitBetweenLines = this.articulation.between_lines; - const stave = note.checkStave(); - const staffSpace = stave.getSpacingBetweenLines(); - const isTab = (0,_typeguard__WEBPACK_IMPORTED_MODULE_4__.isTabNote)(note); - // Articulations are centered over/under the note head. - const { x } = note.getModifierStartXY(position, index); - const shouldSitOutsideStaff = !canSitBetweenLines || isTab; - const initialOffset = getInitialOffset(note, position); - const padding = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); - let y = { - [ABOVE]: () => { - glyph.setOrigin(0.5, 1); - const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; - }, - [BELOW]: () => { - glyph.setOrigin(0.5, 0); - const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; - }, - }[position](); - if (!isTab) { - const offsetDirection = position === ABOVE ? -1 : +1; - const noteLine = note.getKeyProps()[index].line; - const distanceFromNote = (note.getYs()[index] - y) / staffSpace; - const articLine = distanceFromNote + Number(noteLine); - const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); - if (isWithinLines(snappedLine, position)) - glyph.setOrigin(0.5, 0.5); - y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; - } - L(`Rendering articulation at (x: ${x}, y: ${y})`); - glyph.render(ctx, x, y); - } -} -/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ -Articulation.DEBUG = false; -Articulation.INITIAL_OFFSET = -0.5; - - -/***/ }), - -/***/ "./src/barnote.ts": -/*!************************!*\ - !*** ./src/barnote.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BarNote": () => (/* binding */ BarNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (BarNote.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.BarNote', args); -} -/** - * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can - * be added to a voice and rendered in the middle of a stave. Since it has no - * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. - * - * See `tests/barnote_tests.ts` for usage examples. - */ -class BarNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.BarNote; - } - constructor(type = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType.SINGLE) { - super({ duration: 'b' }); - this.metrics = { - widths: {}, - }; - const TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_1__.BarlineType; - this.metrics.widths = { - [TYPE.SINGLE]: 8, - [TYPE.DOUBLE]: 12, - [TYPE.END]: 15, - [TYPE.REPEAT_BEGIN]: 14, - [TYPE.REPEAT_END]: 14, - [TYPE.REPEAT_BOTH]: 18, - [TYPE.NONE]: 0, - }; - // Tell the formatter that bar notes have no duration. - this.ignore_ticks = true; - this.setType(type); - } - /** Get the type of bar note.*/ - getType() { - return this.type; - } - /** Set the type of bar note. */ - setType(type) { - this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline.typeString[type] : type; - // Set width to width of relevant `Barline`. - this.setWidth(this.metrics.widths[this.type]); - return this; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - /** Overridden to ignore. */ - preFormat() { - this.preFormatted = true; - return this; - } - /** Render note to stave. */ - draw() { - const ctx = this.checkContext(); - L('Rendering bar line at: ', this.getAbsoluteX()); - this.applyStyle(ctx); - const barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_1__.Barline(this.type); - barline.setX(this.getAbsoluteX()); - barline.draw(this.checkStave()); - this.restoreStyle(ctx); - this.setRendered(); - } -} -/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ -BarNote.DEBUG = false; - - -/***/ }), - -/***/ "./src/beam.ts": -/*!*********************!*\ - !*** ./src/beam.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BEAM_BOTH": () => (/* binding */ BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* binding */ BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* binding */ BEAM_RIGHT), -/* harmony export */ "Beam": () => (/* binding */ Beam) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -function calculateStemDirection(notes) { - let lineSum = 0; - notes.forEach((note) => { - if (note.keyProps) { - note.keyProps.forEach((keyProp) => { - lineSum += keyProp.line - 3; - }); - } - }); - if (lineSum >= 0) { - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - } - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; -} -function getStemSlope(firstNote, lastNote) { - const firstStemTipY = firstNote.getStemExtents().topY; - const firstStemX = firstNote.getStemX(); - const lastStemTipY = lastNote.getStemExtents().topY; - const lastStemX = lastNote.getStemX(); - return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); -} -const BEAM_LEFT = 'L'; -const BEAM_RIGHT = 'R'; -const BEAM_BOTH = 'B'; -/** `Beams` span over a set of `StemmableNotes`. */ -class Beam extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Beam; - } - /** Get the direction of the beam */ - getStemDirection() { - return this.stem_direction; - } - /** - * Get the default beam groups for a provided time signature. - * Attempt to guess if the time signature is not found in table. - * Currently this is fairly naive. - */ - static getDefaultBeamGroups(time_sig) { - if (!time_sig || time_sig === 'c') { - time_sig = '4/4'; - } - const defaults = { - '1/2': ['1/2'], - '2/2': ['1/2'], - '3/2': ['1/2'], - '4/2': ['1/2'], - '1/4': ['1/4'], - '2/4': ['1/4'], - '3/4': ['1/4'], - '4/4': ['1/4'], - '1/8': ['1/8'], - '2/8': ['2/8'], - '3/8': ['3/8'], - '4/8': ['2/8'], - '1/16': ['1/16'], - '2/16': ['2/16'], - '3/16': ['3/16'], - '4/16': ['2/16'], - }; - const groups = defaults[time_sig]; - if (groups === undefined) { - // If no beam groups found, naively determine - // the beam groupings from the time signature - const beatTotal = parseInt(time_sig.split('/')[0], 10); - const beatValue = parseInt(time_sig.split('/')[1], 10); - const tripleMeter = beatTotal % 3 === 0; - if (tripleMeter) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(3, beatValue)]; - } - else if (beatValue > 4) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, beatValue)]; - } - else if (beatValue <= 4) { - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, beatValue)]; - } - } - else { - return groups.map((group) => new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction().parse(group)); - } - return [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 4)]; - } - /** - * A helper function to automatically build basic beams for a voice. For more - * complex auto-beaming use `Beam.generateBeams()`. - * @param voice the voice to generate the beams for - * @param stem_direction a stem direction to apply to the entire voice - * @param groups an array of `Fraction` representing beat groupings for the beam - */ - static applyAndGetBeams(voice, stem_direction, groups) { - return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); - } - /** - * A helper function to autimatically build beams for a voice with - * configuration options. - * - * Example configuration object: - * - * ``` - * config = { - * groups: [new Vex.Flow.Fraction(2, 8)], - * stem_direction: -1, - * beam_rests: true, - * beam_middle_only: true, - * show_stemlets: false - * }; - * ``` - * @param notes an array of notes to create the beams for - * @param config the configuration object - * @param config.stem_direction set to apply the same direction to all notes - * @param config.beam_rests set to `true` to include rests in the beams - * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat - * @param config.show_stemlets set to `true` to draw stemlets for rests - * @param config.maintain_stem_directions set to `true` to not apply new stem directions - * @param config.groups array of `Fractions` that represent the beat structure to beam the notes - * - */ - static generateBeams(notes, config = {}) { - if (!config.groups || !config.groups.length) { - config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(2, 8)]; - } - // Convert beam groups to tick amounts - const tickGroups = config.groups.map((group) => { - if (!group.multiply) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); - } - return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RESOLUTION, 1); - }); - const unprocessedNotes = notes; - let currentTickGroup = 0; - let noteGroups = []; - let currentGroup = []; - function getTotalTicks(vf_notes) { - return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1)); - } - function nextTickGroup() { - if (tickGroups.length - 1 > currentTickGroup) { - currentTickGroup += 1; - } - else { - currentTickGroup = 0; - } - } - function createGroups() { - let nextGroup = []; - // number of ticks in current group - let currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - unprocessedNotes.forEach((unprocessedNote) => { - nextGroup = []; - if (unprocessedNote.shouldIgnoreTicks()) { - noteGroups.push(currentGroup); - currentGroup = nextGroup; - return; // Ignore untickables (like bar notes) - } - currentGroup.push(unprocessedNote); - const ticksPerGroup = tickGroups[currentTickGroup].clone(); - const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); - // Double the amount of ticks in a group, if it's an unbeamable tuplet - const unbeamable = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(unprocessedNote.getDuration()) < 8; - if (unbeamable && unprocessedNote.getTuplet()) { - ticksPerGroup.numerator *= 2; - } - // If the note that was just added overflows the group tick total - if (totalTicks.greaterThan(ticksPerGroup)) { - // If the overflow note can be beamed, start the next group - // with it. Unbeamable notes leave the group overflowed. - if (!unbeamable) { - const note = currentGroup.pop(); - if (note) - nextGroup.push(note); - } - noteGroups.push(currentGroup); - // We have overflown, so we're going to next tick group. As we might have - // overflown by more than 1 group, we need to go forward as many times as - // needed, decreasing currentGroupTotalTicks by as many ticks as there are - // in current groups as we go forward. - do { - currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); - nextTickGroup(); - } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); - currentGroup = nextGroup; - } - else if (totalTicks.equals(ticksPerGroup)) { - noteGroups.push(currentGroup); - currentGroupTotalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - currentGroup = nextGroup; - nextTickGroup(); - } - }); - // Adds any remainder notes beam - if (currentGroup.length > 0) { - noteGroups.push(currentGroup); - } - } - function getBeamGroups() { - return noteGroups.filter((group) => { - if (group.length > 1) { - let beamable = true; - group.forEach((note) => { - if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { - beamable = false; - } - }); - return beamable; - } - return false; - }); - } - // Splits up groups by Rest - function sanitizeGroups() { - const sanitizedGroups = []; - noteGroups.forEach((group) => { - let tempGroup = []; - group.forEach((note, index, group) => { - const isFirstOrLast = index === 0 || index === group.length - 1; - const prevNote = group[index - 1]; - const breaksOnEachRest = !config.beam_rests && note.isRest(); - const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; - let breakOnStemChange = false; - if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { - const prevDirection = prevNote.getStemDirection(); - const currentDirection = note.getStemDirection(); - breakOnStemChange = currentDirection !== prevDirection; - } - const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; - // Determine if the group should be broken at this note - const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; - if (shouldBreak) { - // Add current group - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - // Start a new group. Include the current note if the group - // was broken up by stem direction, as that note needs to start - // the next group of notes - tempGroup = breakOnStemChange ? [note] : []; - } - else { - // Add note to group - tempGroup.push(note); - } - }); - // If there is a remaining group, add it as well - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - }); - noteGroups = sanitizedGroups; - } - function formatStems() { - noteGroups.forEach((group) => { - let stemDirection; - if (config.maintain_stem_directions) { - const note = findFirstNote(group); - stemDirection = note ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - } - else { - if (config.stem_direction) { - stemDirection = config.stem_direction; - } - else { - stemDirection = calculateStemDirection(group); - } - } - applyStemDirection(group, stemDirection); - }); - } - function findFirstNote(group) { - for (let i = 0; i < group.length; i++) { - const note = group[i]; - if (!note.isRest()) { - return note; - } - } - return false; - } - function applyStemDirection(group, direction) { - group.forEach((note) => { - note.setStemDirection(direction); - }); - } - // Get all of the tuplets in all of the note groups - function getTuplets() { - const uniqueTuplets = []; - // Go through all of the note groups and inspect for tuplets - noteGroups.forEach((group) => { - let tuplet; - group.forEach((note) => { - const noteTuplet = note.getTuplet(); - if (noteTuplet && tuplet !== noteTuplet) { - tuplet = noteTuplet; - uniqueTuplets.push(tuplet); - } - }); - }); - return uniqueTuplets; - } - // Using closures to store the variables throughout the various functions - // IMO Keeps it this process lot cleaner - but not super consistent with - // the rest of the API's style - Silverwolf90 (Cyril) - createGroups(); - sanitizeGroups(); - formatStems(); - // Get the notes to be beamed - const beamedNoteGroups = getBeamGroups(); - // Get the tuplets in order to format them accurately - const allTuplets = getTuplets(); - // Create a Vex.Flow.Beam from each group of notes to be beamed - const beams = []; - beamedNoteGroups.forEach((group) => { - const beam = new Beam(group); - if (config.show_stemlets) { - beam.render_options.show_stemlets = true; - } - if (config.secondary_breaks) { - beam.render_options.secondary_break_ticks = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(config.secondary_breaks); - } - if (config.flat_beams === true) { - beam.render_options.flat_beams = true; - beam.render_options.flat_beam_offset = config.flat_beam_offset; - } - beams.push(beam); - }); - // Reformat tuplets - allTuplets.forEach((tuplet) => { - // Set the tuplet location based on the stem direction - const direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__.TupletLocation.TOP; - tuplet.setTupletLocation(direction); - // If any of the notes in the tuplet are not beamed, draw a bracket. - let bracketed = false; - for (let i = 0; i < tuplet.notes.length; i++) { - const note = tuplet.notes[i]; - if (!note.hasBeam()) { - bracketed = true; - break; - } - } - tuplet.setBracketed(bracketed); - }); - return beams; - } - constructor(notes, auto_stem = false) { - super(); - this.slope = 0; - this.y_shift = 0; - /** - * Overrides to default beam directions for secondary-level beams that do not - * connect to any other note. See further explanation at - * `setPartialBeamSideAt` - */ - this.forcedPartialDirections = {}; - if (!notes || notes.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for beam.'); - } - if (notes.length === 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Too few notes for beam.'); - } - // Validate beam line, direction and ticks. - this.ticks = notes[0].getIntrinsicTicks(); - if (this.ticks >= _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks('4')) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); - } - let i; // shared iterator - let note; - this.stem_direction = notes[0].getStemDirection(); - let stem_direction = this.stem_direction; - // Figure out optimal stem direction based on given notes - if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(notes[0])) { - stem_direction = calculateStemDirection(notes); - } - else if (auto_stem && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(notes[0])) { - // Auto Stem TabNotes - const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); - stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - } - // Apply stem directions and attach beam to notes - for (i = 0; i < notes.length; ++i) { - note = notes[i]; - if (auto_stem) { - note.setStemDirection(stem_direction); - this.stem_direction = stem_direction; - } - note.setBeam(this); - } - this.postFormatted = false; - this.notes = notes; - this.beam_count = this.getBeamCount(); - this.break_on_indices = []; - this.render_options = { - beam_width: 5, - max_slope: 0.25, - min_slope: -0.25, - slope_iterations: 20, - slope_cost: 100, - show_stemlets: false, - stemlet_extension: 7, - partial_beam_length: 10, - flat_beams: false, - min_flat_beam_offset: 15, - }; - } - /** Get the notes in this beam. */ - getNotes() { - return this.notes; - } - /** Get the max number of beams in the set of notes. */ - getBeamCount() { - const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); - const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); - return maxBeamCount; - } - /** Set which note `indices` to break the secondary beam at. */ - breakSecondaryAt(indices) { - this.break_on_indices = indices; - return this; - } - /** - * Forces the direction of a partial beam (a secondary-level beam that exists - * on one note only of the beam group). This is useful in rhythms such as 6/8 - * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the - * first sixteenth note can help imply whether the rhythm is to be felt as - * three groups of eighth notes (typical) or as two groups of three-sixteenths - * (less common): - * ``` - * ┌───┬──┬──┐ ┌──┬──┬──┐ - * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ - * │ │ │ │ │ │ │ │ - * ``` - */ - setPartialBeamSideAt(noteIndex, side) { - this.forcedPartialDirections[noteIndex] = side; - return this; - } - /** - * Restore the default direction of a partial beam (a secondary-level beam - * that does not connect to any other notes). - */ - unsetPartialBeamSideAt(noteIndex) { - delete this.forcedPartialDirections[noteIndex]; - return this; - } - /** Return the y coordinate for linear function. */ - getSlopeY(x, first_x_px, first_y_px, slope) { - return first_y_px + (x - first_x_px) * slope; - } - /** Calculate the best possible slope for the provided notes. */ - calculateSlope() { - const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; - const firstNote = notes[0]; - const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); - const increment = (max_slope - min_slope) / slope_iterations; - let minCost = Number.MAX_VALUE; - let bestSlope = 0; - let yShift = 0; - // iterate through slope values to find best weighted fit - for (let slope = min_slope; slope <= max_slope; slope += increment) { - let totalStemExtension = 0; - let yShiftTemp = 0; - // iterate through notes, calculating y shift and stem extension - for (let i = 1; i < notes.length; ++i) { - const note = notes[i]; - if (note.hasStem() || note.isRest()) { - const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; - const stemTipY = note.getStemExtents().topY; - // beam needs to be shifted up to accommodate note - if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { - const diff = Math.abs(stemTipY - adjustedStemTipY); - yShiftTemp += diff * -stemDirection; - totalStemExtension += diff * i; - } - else { - // beam overshoots note, account for the difference - totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; - } - } - } - // most engraving books suggest aiming for a slope about half the angle of the - // difference between the first and last notes' stem length; - const idealSlope = initialSlope / 2; - const distanceFromIdeal = Math.abs(idealSlope - slope); - // This tries to align most beams to something closer to the idealSlope, but - // doesn't go crazy. To disable, set this.render_options.slope_cost = 0 - const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); - // update state when a more ideal slope is found - if (cost < minCost) { - minCost = cost; - bestSlope = slope; - yShift = yShiftTemp; - } - } - this.slope = bestSlope; - this.y_shift = yShift; - } - /** Calculate a slope and y-shift for flat beams. */ - calculateFlatSlope() { - const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; - // If a flat beam offset has not yet been supplied or calculated, - // generate one based on the notes in this particular note group - let total = 0; - let extremeY = 0; // Store the highest or lowest note here - let extremeBeamCount = 0; // The beam count of the extreme note - let currentExtreme = 0; - for (let i = 0; i < notes.length; i++) { - // Total up all of the offsets so we can average them out later - const note = notes[i]; - const stemTipY = note.getStemExtents().topY; - total += stemTipY; - // Store the highest (stems-up) or lowest (stems-down) note so the - // offset can be adjusted in case the average isn't enough - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && currentExtreme < stemTipY) { - currentExtreme = stemTipY; - extremeY = Math.max(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { - currentExtreme = stemTipY; - extremeY = Math.min(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - } - // Average the offsets to try and come up with a reasonable one that - // works for all of the notes in the beam group. - let offset = total / notes.length; - // In case the average isn't long enough, add or subtract some more - // based on the highest or lowest note (again, based on the stem - // direction). This also takes into account the added height due to - // the width of the beams. - const beamWidth = beam_width * 1.5; - const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; - const newOffset = extremeY + extremeTest * -stem_direction; - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset < newOffset) { - offset = extremeY + extremeTest; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset > newOffset) { - offset = extremeY - extremeTest; - } - if (!flat_beam_offset) { - // Set the offset for the group based on the calculations above. - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN && offset > flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && offset < flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - // for flat beams, the slope and y_shift are simply 0 - this.slope = 0; - this.y_shift = 0; - } - /** Return the Beam y offset. */ - getBeamYToDraw() { - const firstNote = this.notes[0]; - const firstStemTipY = firstNote.getStemExtents().topY; - let beamY = firstStemTipY; - // For flat beams, set the first and last Y to the offset, rather than - // using the note's stem extents. - if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { - beamY = this.render_options.flat_beam_offset; - } - return beamY; - } - /** - * Create new stems for the notes in the beam, so that each stem - * extends into the beams. - */ - applyStemExtensions() { - const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; - const firstNote = notes[0]; - const firstStemTipY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const stem = note.getStem(); - if (stem) { - const stemX = note.getStemX(); - const { topY: stemTipY } = note.getStemExtents(); - const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; - const preBeamExtension = stem.getExtension(); - const beamExtension = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; - // Determine necessary extension for cross-stave notes in the beam group - let crossStemExtension = 0; - if (note.getStemDirection() !== this.stem_direction) { - const beamCount = note.getGlyphProps().beam_count; - crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; - /* This will be required if the partial beams are moved to the note side. - if (i > 0 && note.getGlyph().beam_count > 1) { - const prevBeamCount = this.notes[i - 1].getGlyph().beam_count; - const beamDiff = Math.abs(prevBeamCount - beamCount); - if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5); - } - */ - } - stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); - stem.adjustHeightForBeam(); - if (note.isRest() && show_stemlets) { - const beamWidth = beam_width; - const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; - stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); - } - } - } - } - /** Return upper level beam direction. */ - lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { - if (duration === '4') { - return BEAM_LEFT; - } - const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; - if (forcedBeamDirection) - return forcedBeamDirection; - const lookup_duration = `${_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToNumber(duration) / 2}`; - const prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - const next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - const note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(lookup_duration); - if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_BOTH; - } - else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { - return BEAM_LEFT; - } - else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_RIGHT; - } - return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); - } - /** Get the x coordinates for the beam lines of specific `duration`. */ - getBeamLines(duration) { - const tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToTicks(duration); - let beam_started = false; - const beam_lines = []; - let current_beam = undefined; - const partial_beam_length = this.render_options.partial_beam_length; - let previous_should_break = false; - let tick_tally = 0; - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - // See if we need to break secondary beams on this note. - const ticks = note.getTicks().value(); - tick_tally += ticks; - let should_break = false; - // 8th note beams are always drawn. - if (parseInt(duration, 10) >= 8) { - // First, check to see if any indices were set up through breakSecondaryAt() - should_break = this.break_on_indices.indexOf(i) !== -1; - // If the secondary breaks were auto-configured in the render options, - // handle that as well. - if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { - tick_tally = 0; - should_break = true; - } - } - const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; - const stem_x = note.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.WIDTH / 2; - // Check to see if the next note in the group will get a beam at this - // level. This will help to inform the partial beam logic below. - const prev_note = this.notes[i - 1]; - const next_note = this.notes[i + 1]; - const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; - const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; - const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; - // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; - if (note_gets_beam) { - // This note gets a beam at the current level - if (beam_started) { - // We're currently in the middle of a beam. Just continue it on to - // the stem X of the current note. - current_beam = beam_lines[beam_lines.length - 1]; - current_beam.end = stem_x; - // If a secondary beam break is set up, end the beam right now. - if (should_break) { - beam_started = false; - if (next_note && !next_note_gets_beam && current_beam.end === undefined) { - // This note gets a beam,.but the next one does not. This means - // we need a partial pointing right. - current_beam.end = current_beam.start - partial_beam_length; - } - } - } - else { - // No beam started yet. Start a new one. - current_beam = { start: stem_x, end: undefined }; - beam_started = true; - if (beam_alone) { - // previous and next beam exists and does not get a beam but current gets it. - const prev_tick = prev_note.getIntrinsicTicks(); - const next_tick = next_note.getIntrinsicTicks(); - const tick = note.getIntrinsicTicks(); - const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); - if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { - current_beam.end = current_beam.start - partial_beam_length; - } - else { - current_beam.end = current_beam.start + partial_beam_length; - } - } - else if (!next_note_gets_beam) { - // The next note doesn't get a beam. Draw a partial. - if ((previous_should_break || i === 0) && next_note) { - // This is the first note (but not the last one), or it is - // following a secondary break. Draw a partial to the right. - current_beam.end = current_beam.start + partial_beam_length; - } - else { - // By default, draw a partial to the left. - current_beam.end = current_beam.start - partial_beam_length; - } - } - else if (should_break) { - // This note should have a secondary break after it. Even though - // we just started a beam, it needs to end immediately. - current_beam.end = current_beam.start - partial_beam_length; - beam_started = false; - } - beam_lines.push(current_beam); - } - } - else { - // The current note does not get a beam. - beam_started = false; - } - // Store the secondary break flag to inform the partial beam logic in - // the next iteration of the loop. - previous_should_break = should_break; - } - // Add a partial beam pointing left if this is the last note in the group - const last_beam = beam_lines[beam_lines.length - 1]; - if (last_beam && last_beam.end === undefined) { - last_beam.end = last_beam.start - partial_beam_length; - } - return beam_lines; - } - /** Render the stems for each note. */ - drawStems(ctx) { - this.notes.forEach((note) => { - const stem = note.getStem(); - if (stem) { - const stem_x = note.getStemX(); - stem.setNoteHeadXBounds(stem_x, stem_x); - stem.setContext(ctx).draw(); - } - }, this); - } - // Render the beam lines - drawBeamLines(ctx) { - const valid_beam_durations = ['4', '8', '16', '32', '64']; - const firstNote = this.notes[0]; - let beamY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - const beamThickness = this.render_options.beam_width * this.stem_direction; - // Draw the beams. - for (let i = 0; i < valid_beam_durations.length; ++i) { - const duration = valid_beam_durations[i]; - const beamLines = this.getBeamLines(duration); - for (let j = 0; j < beamLines.length; ++j) { - const beam_line = beamLines[j]; - const startBeamX = beam_line.start; - const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); - const lastBeamX = beam_line.end; - if (lastBeamX) { - const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); - ctx.beginPath(); - ctx.moveTo(startBeamX, startBeamY); - ctx.lineTo(startBeamX, startBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY); - ctx.closePath(); - ctx.fill(); - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); - } - } - beamY += beamThickness * 1.5; - } - } - /** Pre-format the beam. */ - preFormat() { - return this; - } - /** - * Post-format the beam. This can only be called after - * the notes in the beam have both `x` and `y` values. ie: they've - * been formatted and have staves. - */ - postFormat() { - if (this.postFormatted) - return; - // Calculate a smart slope if we're not forcing the beams to be flat. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(this.notes[0]) || this.render_options.flat_beams) { - this.calculateFlatSlope(); - } - else { - this.calculateSlope(); - } - this.applyStemExtensions(); - this.postFormatted = true; - } - /** Render the beam to the canvas context */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - if (this.unbeamable) - return; - if (!this.postFormatted) { - this.postFormat(); - } - this.drawStems(ctx); - this.applyStyle(); - ctx.openGroup('beam', this.getAttribute('id')); - this.drawBeamLines(ctx); - ctx.closeGroup(); - this.restoreStyle(); - } -} - - -/***/ }), - -/***/ "./src/bend.ts": -/*!*********************!*\ - !*** ./src/bend.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Bend": () => (/* binding */ Bend) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -/** Bend implements tablature bends. */ -class Bend extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Bend; - } - static get UP() { - return 0; - } - static get DOWN() { - return 1; - } - // Arrange bends in `ModifierContext` - static format(bends, state) { - if (!bends || bends.length === 0) - return false; - let last_width = 0; - // Format Bends - for (let i = 0; i < bends.length; ++i) { - const bend = bends[i]; - const note = bend.checkAttachedNote(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { - const stringPos = note.leastString() - 1; - if (state.top_text_line < stringPos) { - state.top_text_line = stringPos; - } - } - bend.setXShift(last_width); - last_width = bend.getWidth(); - bend.setTextLine(state.top_text_line); - } - state.right_shift += last_width; - state.top_text_line += 1; - return true; - } - /** - * Example of a phrase: - * ``` - * [{ - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "whole" - * width: 8; - * }, - * { - * type: UP, - * text: "half" - * width: 8; - * }, - * { - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "1 1/2" - * width: 8; - * }] - * ``` - * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) - * @param release if true, render a release. (DEPRECATED) - * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified - */ - constructor(text, release = false, phrase) { - super(); - this.text = text; - this.x_shift = 0; - this.release = release; - this.tap = ''; - this.resetFont(); - this.render_options = { - line_width: 1.5, - line_style: '#777777', - bend_width: 8, - release_width: 8, - }; - if (phrase) { - this.phrase = phrase; - } - else { - // Backward compatibility - this.phrase = [{ type: Bend.UP, text: this.text }]; - if (this.release) - this.phrase.push({ type: Bend.DOWN, text: '' }); - } - this.updateWidth(); - } - /** Set horizontal shift in pixels. */ - setXShift(value) { - this.x_shift = value; - this.updateWidth(); - return this; - } - setTap(value) { - this.tap = value; - return this; - } - /** Get text provided in the constructor. */ - getText() { - return this.text; - } - getTextHeight() { - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - return textFormatter.maxHeight; - } - /** Recalculate width. */ - updateWidth() { - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - const measureText = (text) => { - return textFormatter.getWidthForTextInPx(text); - }; - let totalWidth = 0; - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (bend.width !== undefined) { - totalWidth += bend.width; - } - else { - const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; - bend.width = Math.max(additional_width, measureText(bend.text)) + 3; - bend.draw_width = bend.width / 2; - totalWidth += bend.width; - } - } - this.setWidth(totalWidth + this.x_shift); - return this; - } - /** Draw the bend on the rendering context. */ - draw() { - var _a; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); - start.x += 3; - start.y += 0.5; - const x_shift = this.x_shift; - const stave = note.checkStave(); - const spacing = stave.getSpacingBetweenLines(); - const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); - // this.text_line is relative to top string in the group. - const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; - const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; - const renderBend = (x, y, width, height) => { - const cp_x = x + width; - const cp_y = y; - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, y); - ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); - ctx.stroke(); - ctx.restore(); - }; - const renderRelease = (x, y, width, height) => { - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, height); - ctx.quadraticCurveTo(x + width, height, x + width, y); - ctx.stroke(); - ctx.restore(); - }; - const renderArrowHead = (x, y, direction) => { - const width = 4; - const yBase = y + width * direction; - ctx.beginPath(); - ctx.moveTo(x, y); // tip of the arrow - ctx.lineTo(x - width, yBase); - ctx.lineTo(x + width, yBase); - ctx.closePath(); - ctx.fill(); - }; - const renderText = (x, text) => { - ctx.save(); - ctx.setFont(this.textFont); - const render_x = x - ctx.measureText(text).width / 2; - ctx.fillText(text, render_x, annotation_y); - ctx.restore(); - }; - let last_bend = undefined; - let last_bend_draw_width = 0; - let last_drawn_width = 0; - if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { - const tapStart = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.CENTER, this.index); - renderText(tapStart.x, this.tap); - } - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (!bend.draw_width) - bend.draw_width = 0; - if (i === 0) - bend.draw_width += x_shift; - last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); - if (bend.type === Bend.UP) { - if (last_bend && last_bend.type === Bend.UP) { - renderArrowHead(start.x, bend_height, +1); - } - renderBend(start.x, start.y, last_drawn_width, bend_height); - } - if (bend.type === Bend.DOWN) { - if (last_bend && last_bend.type === Bend.UP) { - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (last_bend && last_bend.type === Bend.DOWN) { - renderArrowHead(start.x, start.y, -1); - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (!last_bend) { - last_drawn_width = bend.draw_width; - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - } - renderText(start.x + last_drawn_width, bend.text); - last_bend = bend; - last_bend_draw_width = bend.draw_width; - last_bend.x = start.x; - start.x += last_drawn_width; - } - if (!last_bend || last_bend.x == undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoLastBendForBend', 'Internal error.'); - } - // Final arrowhead and text - if (last_bend.type === Bend.UP) { - renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); - } - else if (last_bend.type === Bend.DOWN) { - renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); - } - } -} -/** Default text font. */ -Bend.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/boundingbox.ts": -/*!****************************!*\ - !*** ./src/boundingbox.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBox": () => (/* binding */ BoundingBox) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -class BoundingBox { - /** - * Create a new copy. - */ - static copy(that) { - return new BoundingBox(that.x, that.y, that.w, that.h); - } - constructor(x, y, w, h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - /** Get x position. */ - getX() { - return this.x; - } - /** Get y position. */ - getY() { - return this.y; - } - /** Get width. */ - getW() { - return this.w; - } - /** Get height. */ - getH() { - return this.h; - } - /** Set x position. */ - setX(x) { - this.x = x; - return this; - } - /** Set y position. */ - setY(y) { - this.y = y; - return this; - } - /** Set width. */ - setW(w) { - this.w = w; - return this; - } - /** Set height. */ - setH(h) { - this.h = h; - return this; - } - /** Move to position. */ - move(x, y) { - this.x += x; - this.y += y; - return this; - } - /** Clone. */ - clone() { - return BoundingBox.copy(this); - } - /** - * Merge my box with given box. Creates a bigger bounding box unless - * the given box is contained in this one. - */ - mergeWith(boundingBox) { - const that = boundingBox; - const new_x = this.x < that.x ? this.x : that.x; - const new_y = this.y < that.y ? this.y : that.y; - const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; - const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; - this.x = new_x; - this.y = new_y; - this.w = new_w; - this.h = new_h; - return this; - } -} - - -/***/ }), - -/***/ "./src/boundingboxcomputation.ts": -/*!***************************************!*\ - !*** ./src/boundingboxcomputation.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BoundingBoxComputation": () => (/* binding */ BoundingBoxComputation) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -/** - * BoundingBoxComputation computes metrics for a bounding box by continuously - * taking canvas path commands. - * - * Warning: This class is merely a crutch to get bounding box information without - * explicit metadata. This is likely to get deprecated following SMuFL support. - * - * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) - */ -class BoundingBoxComputation { - constructor() { - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - } - /** Get calculated X1. */ - getX1() { - return this.x1; - } - /** Get calculated Y1. */ - getY1() { - return this.y1; - } - /** Get calculated width. */ - width() { - return this.x2 - this.x1; - } - /** Get calculated height. */ - height() { - return this.y2 - this.y1; - } - /** Add point to BoundingBox. */ - addPoint(x, y) { - if (isNaN(this.x1) || x < this.x1) - this.x1 = x; - if (isNaN(this.x2) || x > this.x2) - this.x2 = x; - if (isNaN(this.y1) || y < this.y1) - this.y1 = y; - if (isNaN(this.y2) || y > this.y2) - this.y2 = y; - } - /** Add X to BoundingBox. */ - addX(x) { - this.addPoint(x, this.y1); - } - /** Add Y to BoundingBox. */ - addY(y) { - this.addPoint(this.x1, y); - } - /** Add quadratic curve to BoundingBox. */ - addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { - this.addPoint(p0x, p0y); - this.addPoint(p2x, p2y); - const p01x = p1x - p0x; - const p12x = p2x - p1x; - let denom = p01x - p12x; - if (denom != 0) { - const t = p01x / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); - } - } - const p01y = p1y - p0y; - const p12y = p2y - p1y; - denom = p01y - p12y; - if (denom != 0) { - const t = p01y / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); - } - } - } - /** Add bezier curve to BoundingBox. */ - addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html - const p0 = [p0x, p0y]; - const p1 = [p1x, p1y]; - const p2 = [p2x, p2y]; - const p3 = [p3x, p3y]; - let i; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + - 3 * Math.pow(1 - t, 2) * t * p1[i] + - 3 * (1 - t) * Math.pow(t, 2) * p2[i] + - Math.pow(t, 3) * p3[i]; - for (i = 0; i <= 1; i++) { - const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - const c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) - continue; - const t = -c / b; - if (0 < t && t < 1) { - if (i === 0) - this.addX(f(t, i)); - if (i === 1) - this.addY(f(t, i)); - } - continue; - } - const b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) - continue; - const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) - this.addX(f(t1, i)); - if (i === 1) - this.addY(f(t1, i)); - } - const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) - this.addX(f(t2, i)); - if (i === 1) - this.addY(f(t2, i)); - } - } - } -} - - -/***/ }), - -/***/ "./src/canvascontext.ts": -/*!******************************!*\ - !*** ./src/canvascontext.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CanvasContext": () => (/* binding */ CanvasContext) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -/** - * A rendering context for the Canvas backend. This class serves as a proxy for the - * underlying CanvasRenderingContext2D object, part of the browser's API. - */ -class CanvasContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { - static get WIDTH() { - return 600; - } - static get HEIGHT() { - return 400; - } - static get CANVAS_BROWSER_SIZE_LIMIT() { - return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size. - } - /** - * Ensure that width and height do not exceed the browser limit. - * @returns array of [width, height] clamped to the browser limit. - */ - static sanitizeCanvasDims(width, height) { - const limit = this.CANVAS_BROWSER_SIZE_LIMIT; - if (Math.max(width, height) > limit) { - (0,_util__WEBPACK_IMPORTED_MODULE_2__.warn)('Canvas dimensions exceed browser limit. Cropping to ' + limit); - if (width > limit) { - width = limit; - } - if (height > limit) { - height = limit; - } - } - return [width, height]; - } - constructor(context) { - super(); - /** Height of one line of text (in pixels). */ - this.textHeight = 0; - this.context2D = context; - if (!context.canvas) { - this.canvas = { - width: CanvasContext.WIDTH, - height: CanvasContext.HEIGHT, - }; - } - else { - this.canvas = context.canvas; - } - } - /** - * Set all pixels to transparent black rgba(0,0,0,0). - */ - clear() { - this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); - } - // eslint-disable-next-line - openGroup(cls, id, attrs) { - // Containers not implemented. - } - closeGroup() { - // Containers not implemented. - } - // eslint-disable-next-line - add(child) { - // Containers not implemented. - } - setFillStyle(style) { - this.context2D.fillStyle = style; - return this; - } - /** CanvasContext ignores `setBackgroundFillStyle()`. */ - // eslint-disable-next-line - setBackgroundFillStyle(style) { - // DO NOTHING - return this; - } - setStrokeStyle(style) { - this.context2D.strokeStyle = style; - return this; - } - setShadowColor(color) { - this.context2D.shadowColor = color; - return this; - } - setShadowBlur(blur) { - // CanvasRenderingContext2D does not scale the shadow blur by the current - // transform, so we have to do it manually. We assume uniform scaling - // (though allow for rotation) because the blur can only be scaled - // uniformly anyway. - const t = this.context2D.getTransform(); - const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); - this.context2D.shadowBlur = scale * blur; - return this; - } - setLineWidth(width) { - this.context2D.lineWidth = width; - return this; - } - setLineCap(capType) { - this.context2D.lineCap = capType; - return this; - } - setLineDash(dash) { - this.context2D.setLineDash(dash); - return this; - } - scale(x, y) { - this.context2D.scale(x, y); - return this; - } - resize(width, height) { - const canvas = this.context2D.canvas; - const devicePixelRatio = (0,_util__WEBPACK_IMPORTED_MODULE_2__.globalObject)().devicePixelRatio || 1; - // Scale the canvas size by the device pixel ratio clamping to the maximum supported size. - [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio); - // Divide back down by the pixel ratio and convert to integers. - width = (width / devicePixelRatio) | 0; - height = (height / devicePixelRatio) | 0; - canvas.width = width * devicePixelRatio; - canvas.height = height * devicePixelRatio; - // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas. - // Only HTMLCanvasElement has a style attribute. - if ((0,_web__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas)(canvas)) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - return this.scale(devicePixelRatio, devicePixelRatio); - } - rect(x, y, width, height) { - this.context2D.rect(x, y, width, height); - return this; - } - fillRect(x, y, width, height) { - this.context2D.fillRect(x, y, width, height); - return this; - } - /** - * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). - */ - clearRect(x, y, width, height) { - this.context2D.clearRect(x, y, width, height); - return this; - } - beginPath() { - this.context2D.beginPath(); - return this; - } - moveTo(x, y) { - this.context2D.moveTo(x, y); - return this; - } - lineTo(x, y) { - this.context2D.lineTo(x, y); - return this; - } - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - return this; - } - quadraticCurveTo(cpx, cpy, x, y) { - this.context2D.quadraticCurveTo(cpx, cpy, x, y); - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); - return this; - } - fill() { - this.context2D.fill(); - return this; - } - stroke() { - this.context2D.stroke(); - return this; - } - closePath() { - this.context2D.closePath(); - return this; - } - measureText(text) { - const metrics = this.context2D.measureText(text); - let y = 0; - let height = 0; - if (metrics.fontBoundingBoxAscent) { - y = -metrics.fontBoundingBoxAscent; - height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; - } - else { - y = -metrics.actualBoundingBoxAscent; - height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; - } - // Return x, y, width & height in the same manner as svg getBBox - return { - x: 0, - y: y, - width: metrics.width, - height: height, - }; - } - fillText(text, x, y) { - this.context2D.fillText(text, x, y); - return this; - } - save() { - this.context2D.save(); - return this; - } - restore() { - this.context2D.restore(); - return this; - } - set fillStyle(style) { - this.context2D.fillStyle = style; - } - get fillStyle() { - return this.context2D.fillStyle; - } - set strokeStyle(style) { - this.context2D.strokeStyle = style; - } - get strokeStyle() { - return this.context2D.strokeStyle; - } - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - */ - setFont(f, size, weight, style) { - const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); - this.context2D.font = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); - this.textHeight = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(fontInfo.size); - return this; - } - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont() { - return this.context2D.font; - } -} - - -/***/ }), - -/***/ "./src/chordsymbol.ts": -/*!****************************!*\ - !*** ./src/chordsymbol.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ChordSymbol": () => (/* binding */ ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* binding */ ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* binding */ ChordSymbolVerticalJustify), -/* harmony export */ "SymbolModifiers": () => (/* binding */ SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* binding */ SymbolTypes) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Author: Aaron (@AaronDavidNewman) -// -// This implements chord symbols above/below a chord. -// Chord symbols are modifiers that can be attached to notes. -// They can contain multiple 'blocks' which represent text or -// glyphs with various positioning options. -// -// See `tests/chordsymbol_tests.ts` for usage examples. - - - - - - - -// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (ChordSymbol.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.ChordSymbol', args); -} -var ChordSymbolHorizontalJustify; -(function (ChordSymbolHorizontalJustify) { - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); -var ChordSymbolVerticalJustify; -(function (ChordSymbolVerticalJustify) { - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; -})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); -var SymbolTypes; -(function (SymbolTypes) { - SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; - SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; - SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; -})(SymbolTypes || (SymbolTypes = {})); -var SymbolModifiers; -(function (SymbolModifiers) { - SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; - SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; - SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; -})(SymbolModifiers || (SymbolModifiers = {})); -/** - * ChordSymbol is a modifier that creates a chord symbol above/below a chord. - * As a modifier, it is attached to an existing note. - */ -class ChordSymbol extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.ChordSymbol; - } - static get superSubRatio() { - return ChordSymbol.metrics.global.superSubRatio; - } - /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ - static set NO_TEXT_FORMAT(val) { - ChordSymbol.noFormat = val; - } - static get NO_TEXT_FORMAT() { - return ChordSymbol.noFormat; - } - static getMetricForGlyph(glyphCode) { - if (ChordSymbol.metrics.glyphs[glyphCode]) { - return ChordSymbol.metrics.glyphs[glyphCode]; - } - return undefined; - } - static get engravingFontResolution() { - return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getResolution(); - } - static get spacingBetweenBlocks() { - return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; - } - static getWidthForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0.65; // probably should do something here. - } - return metric.advanceWidth / ChordSymbol.engravingFontResolution; - } - static getYShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return metric.yOffset / ChordSymbol.engravingFontResolution; - } - static getXShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; - } - static get superscriptOffset() { - return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; - } - static get subscriptOffset() { - return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; - } - static get kerningOffset() { - return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; - } - static get metrics() { - const chordSymbol = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().chordSymbol; - if (!chordSymbol) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `chordSymbol missing`); - return chordSymbol; - } - static get lowerKerningText() { - // For example, see: `bravura_metrics.ts` - // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters. - // ['D', 'F', 'P', 'T', 'V', 'Y'] - return ChordSymbol.metrics.global.lowerKerningText; - } - static get upperKerningText() { - return ChordSymbol.metrics.global.upperKerningText; - } - static isSuperscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; - } - static isSubscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; - } - static get minPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** - * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. - * Estimate how many lines above/below the staff we need. - */ - static format(symbols, state) { - var _a; - if (!symbols || symbols.length === 0) - return false; - let width = 0; - let nonSuperWidth = 0; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (const symbol of symbols) { - const fontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); - const fontAdj = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(fontSize, 0.05); - const glyphAdj = fontAdj * 2; - const note = symbol.checkAttachedNote(); - let symbolWidth = 0; - let lineSpaces = 1; - let vAlign = false; - for (let j = 0; j < symbol.symbolBlocks.length; ++j) { - const block = symbol.symbolBlocks[j]; - const sup = ChordSymbol.isSuperscript(block); - const sub = ChordSymbol.isSubscript(block); - const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; - const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; - // If there are super/subscripts, they extend beyond the line so - // assume they take up 2 lines - if (sup || sub) { - lineSpaces = 2; - } - // If there is a symbol-specific offset, add it but consider font - // size since font and glyphs will be interspersed. - const fontSize = symbol.textFormatter.fontSizeInPixels; - const superSubFontSize = fontSize * superSubScale; - if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { - block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; - block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; - block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; - block.glyph.scale = block.glyph.scale * adj; - } - else if (block.symbolType === SymbolTypes.TEXT) { - block.width = block.width * superSubFontSize; - block.yShift += symbol.getYOffsetForText(block.text) * adj; - } - if (block.symbolType === SymbolTypes.GLYPH && - block.glyph !== undefined && - block.glyph.code === ChordSymbol.glyphs.over.code) { - lineSpaces = 2; - } - block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; - // If a subscript immediately follows a superscript block, try to - // overlay them. - if (sup && j > 0) { - const prev = symbol.symbolBlocks[j - 1]; - if (!ChordSymbol.isSuperscript(prev)) { - nonSuperWidth = width; - } - } - if (sub && nonSuperWidth > 0) { - vAlign = true; - // slide the symbol over so it lines up with superscript - block.xShift = block.xShift + (nonSuperWidth - width); - width = nonSuperWidth; - nonSuperWidth = 0; - // If we have vertically lined up, turn kerning off. - symbol.setEnableKerning(false); - } - if (!sup && !sub) { - nonSuperWidth = 0; - } - block.vAlign = vAlign; - width += block.width; - symbolWidth = width; - } - // make kerning adjustments after computing super/subscripts - symbol.updateKerningAdjustments(); - symbol.updateOverBarAdjustments(); - if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { - symbol.setTextLine(state.top_text_line); - state.top_text_line += lineSpaces; - } - else { - symbol.setTextLine(state.text_line + 1); - state.text_line += lineSpaces + 1; - } - if (symbol.getReportWidth() && (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(note)) { - const glyphWidth = note.getGlyphProps().getWidth(); - if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; - } - else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, symbolWidth); - } - else { - leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; - rightWidth = Math.max(rightWidth, symbolWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - } - width = 0; // reset symbol width - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - constructor() { - super(); - this.symbolBlocks = []; - this.horizontal = ChordSymbolHorizontalJustify.LEFT; - this.vertical = ChordSymbolVerticalJustify.TOP; - this.useKerning = true; - this.reportWidth = true; - this.resetFont(); - } - /** - * Default text font. - * Choose a font family that works well with the current music engraving font. - * @override `Element.TEXT_FONT`. - */ - static get TEXT_FONT() { - let family = 'Roboto Slab, Times, serif'; - if (_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getName() === 'Petaluma') { - // Fixes Issue #1180 - family = 'PetalumaScript, Arial, sans-serif'; - } - return { - family, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, - }; - } - /** - * The offset is specified in `em`. Scale this value by the font size in pixels. - */ - get superscriptOffset() { - return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; - } - get subscriptOffset() { - return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; - } - setReportWidth(value) { - this.reportWidth = value; - return this; - } - getReportWidth() { - return this.reportWidth; - } - updateOverBarAdjustments() { - const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); - if (barIndex < 0) { - return; - } - const bar = this.symbolBlocks[barIndex]; - const xoff = bar.width / 4; - const yoff = 0.25 * this.textFormatter.fontSizeInPixels; - let symIndex = 0; - for (symIndex === 0; symIndex < barIndex; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift + xoff; - symbol.yShift = symbol.yShift - yoff; - } - for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift - xoff; - symbol.yShift = symbol.yShift + yoff; - } - } - updateKerningAdjustments() { - let accum = 0; - for (let j = 0; j < this.symbolBlocks.length; ++j) { - const symbol = this.symbolBlocks[j]; - accum += this.getKerningAdjustment(j); - symbol.xShift += accum; - } - } - /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ - getKerningAdjustment(j) { - if (!this.useKerning) { - return 0; - } - const currSymbol = this.symbolBlocks[j]; - const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; - let adjustment = 0; - // Move things into the '/' over bar - if (currSymbol.symbolType === SymbolTypes.GLYPH && - currSymbol.glyph !== undefined && - currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += currSymbol.glyph.metrics.x_shift; - } - if (prevSymbol !== undefined && - prevSymbol.symbolType === SymbolTypes.GLYPH && - prevSymbol.glyph !== undefined && - prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += prevSymbol.glyph.metrics.x_shift; - } - // For superscripts that follow a letter without much top part, move it to the left slightly - let preKernUpper = false; - let preKernLower = false; - if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { - preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - } - const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; - // TODO: adjust kern for font size. - // Where should this constant live? - if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { - adjustment += kerningOffsetPixels; - } - if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { - if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { - adjustment += kerningOffsetPixels / 2; - } - if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { - adjustment += kerningOffsetPixels / 2; - } - } - return adjustment; - } - /** - * ChordSymbol allows multiple blocks so we can mix glyphs and font text. - * Each block can have its own vertical orientation. - */ - // eslint-disable-next-line - getSymbolBlock(params = {}) { - var _a, _b, _c; - const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; - const symbolBlock = { - text: (_b = params.text) !== null && _b !== void 0 ? _b : '', - symbolType, - symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, - xShift: 0, - yShift: 0, - vAlign: false, - width: 0, - }; - // Note: symbol widths are resolution and font-independent. - // We convert to pixel values when we know what the font is. - if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { - const glyphArgs = ChordSymbol.glyphs[params.glyph]; - const glyphPoints = 20; - symbolBlock.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); - // Beware: glyph.metrics is not the same as glyph.getMetrics() ! - // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale; - // rv.width = rv.glyph.getMetrics().width; - // don't set yShift here, b/c we need to do it at formatting time after the font is set. - } - else if (symbolType === SymbolTypes.TEXT) { - symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); - } - else if (symbolType === SymbolTypes.LINE) { - symbolBlock.width = params.width; - } - return symbolBlock; - } - /** Add a symbol to this chord, could be text, glyph or line. */ - // eslint-disable-next-line - addSymbolBlock(parameters) { - this.symbolBlocks.push(this.getSymbolBlock(parameters)); - return this; - } - // ### Convenience functions for creating different types of chord symbol parts. - /** Add a text block. */ - // eslint-disable-next-line - addText(text, parameters = {}) { - const symbolType = SymbolTypes.TEXT; - return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); - } - /** Add a text block with superscript modifier. */ - addTextSuperscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - /** Add a text block with subscript modifier. */ - addTextSubscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUBSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - /** Add a glyph block with superscript modifier. */ - addGlyphSuperscript(glyph) { - const symbolType = SymbolTypes.GLYPH; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); - } - /** Add a glyph block. */ - // eslint-disable-next-line - addGlyph(glyph, params = {}) { - const symbolType = SymbolTypes.GLYPH; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); - } - /** - * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. - * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. - */ - // eslint-disable-next-line - addGlyphOrText(text, params = {}) { - let str = ''; - for (let i = 0; i < text.length; ++i) { - const char = text[i]; - if (ChordSymbol.glyphs[char]) { - if (str.length > 0) { - this.addText(str, params); - str = ''; - } - this.addGlyph(char, params); - } - else { - // Collect consecutive characters with no glyphs. - str += char; - } - } - if (str.length > 0) { - this.addText(str, params); - } - return this; - } - /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ - // eslint-disable-next-line - addLine(width, params = {}) { - const symbolType = SymbolTypes.LINE; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); - } - /** - * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * - * @override See: Element. - */ - setFont(f, size, weight, style) { - super.setFont(f, size, weight, style); - this.textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - return this; - } - setEnableKerning(val) { - this.useKerning = val; - return this; - } - /** Set vertical position of text (above or below stave). */ - setVertical(vj) { - this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; - return this; - } - getVertical() { - return this.vertical; - } - /** Set horizontal justification. */ - setHorizontal(hj) { - this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; - return this; - } - getHorizontal() { - return this.horizontal; - } - getWidth() { - let width = 0; - this.symbolBlocks.forEach((symbol) => { - width += symbol.vAlign ? 0 : symbol.width; - }); - return width; - } - getYOffsetForText(text) { - var _a; - let acc = 0; - let i = 0; - for (i = 0; i < text.length; ++i) { - const metrics = this.textFormatter.getGlyphMetrics(text[i]); - if (metrics) { - const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; - acc = yMax < acc ? yMax : acc; - } - } - const resolution = this.textFormatter.getResolution(); - return i > 0 ? -1 * (acc / resolution) : 0; - } - /** Render text and glyphs above/below the note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - // We're changing context parameters. Save current state. - ctx.save(); - this.applyStyle(); - ctx.openGroup('chordsymbol', this.getAttribute('id')); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE, this.index); - ctx.setFont(this.textFont); - let y; - // The position of the text varies based on whether or not the note - // has a stem. - const hasStem = note.hasStem(); - const stave = note.checkStave(); - if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { - // HACK: We need to compensate for the text's height since its origin is bottom-right. - y = stave.getYForBottomText(this.text_line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; - y = Math.max(y, stem_base + spacing * (this.text_line + 2)); - } - } - else { - // (this.vertical === VerticalJustify.TOP) - const topY = Math.min(...note.getYs()); - y = Math.min(stave.getYForTopText(this.text_line), topY - 10); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); - } - } - let x = start.x; - if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { - x = start.x + this.getWidth(); - } - else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { - x = start.x - this.getWidth() / 2; - } - else { - // HorizontalJustify.CENTER_STEM - x = note.getStemX() - this.getWidth() / 2; - } - L('Rendering ChordSymbol: ', this.textFormatter, x, y); - this.symbolBlocks.forEach((symbol) => { - const isSuper = ChordSymbol.isSuperscript(symbol); - const isSub = ChordSymbol.isSubscript(symbol); - let curY = y; - L('shift was ', symbol.xShift, symbol.yShift); - L('curY pre sub ', curY); - if (isSuper) { - curY += this.superscriptOffset; - } - if (isSub) { - curY += this.subscriptOffset; - } - L('curY sup/sub ', curY); - if (symbol.symbolType === SymbolTypes.TEXT) { - if (isSuper || isSub) { - ctx.save(); - if (this.textFont) { - const { family, size, weight, style } = this.textFont; - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, ChordSymbol.superSubRatio); - ctx.setFont(family, smallerFontSize, weight, style); - } - } - // TODO??? - // We estimate the text width, fill it in with the empirical value so the formatting is even. - // const textDim = ctx.measureText(symbol.text); - // symbol.width = textDim.width; - L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); - ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); - if (isSuper || isSub) { - ctx.restore(); - } - } - else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { - curY += symbol.yShift; - L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); - symbol.glyph.render(ctx, x + symbol.xShift, curY); - } - else if (symbol.symbolType === SymbolTypes.LINE) { - L('Rendering Line : ', symbol.width, x, curY); - ctx.beginPath(); - ctx.setLineWidth(1); // ? - ctx.moveTo(x, y); - ctx.lineTo(x + symbol.width, curY); - ctx.stroke(); - } - x += symbol.width; - if (symbol.vAlign) { - x += symbol.xShift; - } - }); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -ChordSymbol.DEBUG = false; -// Chord symbols can be positioned and justified relative to the note. -ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; -ChordSymbol.HorizontalJustifyString = { - left: ChordSymbolHorizontalJustify.LEFT, - right: ChordSymbolHorizontalJustify.RIGHT, - center: ChordSymbolHorizontalJustify.CENTER, - centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, -}; -ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; -ChordSymbol.VerticalJustifyString = { - top: ChordSymbolVerticalJustify.TOP, - above: ChordSymbolVerticalJustify.TOP, - below: ChordSymbolVerticalJustify.BOTTOM, - bottom: ChordSymbolVerticalJustify.BOTTOM, -}; -// Glyph data -ChordSymbol.glyphs = { - diminished: { - code: 'csymDiminished', - }, - dim: { - code: 'csymDiminished', - }, - halfDiminished: { - code: 'csymHalfDiminished', - }, - '+': { - code: 'csymAugmented', - }, - augmented: { - code: 'csymAugmented', - }, - majorSeventh: { - code: 'csymMajorSeventh', - }, - minor: { - code: 'csymMinor', - }, - '-': { - code: 'csymMinor', - }, - '(': { - code: 'csymParensLeftTall', - }, - leftParen: { - code: 'csymParensLeftTall', - }, - ')': { - code: 'csymParensRightTall', - }, - rightParen: { - code: 'csymParensRightTall', - }, - leftBracket: { - code: 'csymBracketLeftTall', - }, - rightBracket: { - code: 'csymBracketRightTall', - }, - leftParenTall: { - code: 'csymParensLeftVeryTall', - }, - rightParenTall: { - code: 'csymParensRightVeryTall', - }, - '/': { - code: 'csymDiagonalArrangementSlash', - }, - over: { - code: 'csymDiagonalArrangementSlash', - }, - '#': { - code: 'accidentalSharp', - }, - b: { - code: 'accidentalFlat', - }, -}; -ChordSymbol.symbolTypes = SymbolTypes; -ChordSymbol.symbolModifiers = SymbolModifiers; -/** Currently unused. */ -ChordSymbol.noFormat = false; - - -/***/ }), - -/***/ "./src/clef.ts": -/*!*********************!*\ - !*** ./src/clef.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Clef": () => (/* binding */ Clef) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013. -// Co-author: Benjamin W. Bohl -// MIT License - - - - - -// eslint-disable-next-line -function L(...args) { - if (Clef.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_4__.log)('Vex.Flow.Clef', args); -} -/** - * Clef implements various types of clefs that can be rendered on a stave. - * - * See `tests/clef_tests.ts` for usage examples. - */ -class Clef extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Clef; - } - /** - * Every clef name is associated with a glyph code from the font file - * and a default stave line number. - */ - static get types() { - return { - treble: { - code: 'gClef', - line: 3, - point: 0, - }, - bass: { - code: 'fClef', - line: 1, - point: 0, - }, - alto: { - code: 'cClef', - line: 2, - point: 0, - }, - tenor: { - code: 'cClef', - line: 1, - point: 0, - }, - percussion: { - code: 'unpitchedPercussionClef1', - line: 2, - point: 0, - }, - soprano: { - code: 'cClef', - line: 4, - point: 0, - }, - 'mezzo-soprano': { - code: 'cClef', - line: 3, - point: 0, - }, - 'baritone-c': { - code: 'cClef', - line: 0, - point: 0, - }, - 'baritone-f': { - code: 'fClef', - line: 2, - point: 0, - }, - subbass: { - code: 'fClef', - line: 0, - point: 0, - }, - french: { - code: 'gClef', - line: 4, - point: 0, - }, - tab: { - code: '6stringTabClef', - line: 3, - point: 0, - }, - }; - } - static get annotationSmufl() { - return { - '8va': 'timeSig8', - '8vb': 'timeSig8', - }; - } - /** Create a new clef. */ - constructor(type, size, annotation) { - super(); - /** - * The attribute `clef` must be a key from - * `Clef.types` - */ - this.clef = Clef.types['treble']; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.setType(type, size, annotation); - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`)); - L('Creating clef:', type); - } - /** Set clef type, size and annotation. */ - setType(type, size, annotation) { - this.type = type; - this.clef = Clef.types[type]; - if (size === undefined) { - this.size = 'default'; - } - else { - this.size = size; - } - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); - // If an annotation, such as 8va, is specified, add it to the Clef object. - if (annotation !== undefined) { - const code = Clef.annotationSmufl[annotation]; - const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`); - const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); - const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); - this.annotation = { code, point, line, x_shift }; - this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.annotation.code, this.annotation.point); - this.attachment.metrics.x_max = 0; - this.attachment.setXShift(this.annotation.x_shift); - } - else { - this.annotation = undefined; - } - return this; - } - /** Get clef width. */ - getWidth() { - if (this.type === 'tab') { - (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'ClefError', "Can't get width without stave."); - } - return this.width; - } - /** Set associated stave. */ - setStave(stave) { - this.stave = stave; - return this; - } - /** Render clef. */ - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('clef', this.getAttribute('id')); - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clef_${this.size}`, - }); - if (this.annotation !== undefined && this.attachment !== undefined) { - this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); - this.attachment.setStave(stave); - this.attachment.setContext(ctx); - this.attachment.renderToStave(this.x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ -Clef.DEBUG = false; - - -/***/ }), - -/***/ "./src/clefnote.ts": -/*!*************************!*\ - !*** ./src/clefnote.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ClefNote": () => (/* binding */ ClefNote) -/* harmony export */ }); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 -// MIT License - - - - -/** ClefNote implements clef annotations in measures. */ -class ClefNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.ClefNote; - } - constructor(type, size, annotation) { - super({ duration: 'b' }); - this.type = type; - const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.size = size === undefined ? 'default' : size; - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - // Note properties - this.ignore_ticks = true; - } - /** Set clef type, size and annotation. */ - setType(type, size, annotation) { - this.type = type; - this.size = size; - const clef = new _clef__WEBPACK_IMPORTED_MODULE_0__.Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.setWidth(_glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - return this; - } - /** Get associated clef. */ - getClef() { - return this.clef; - } - preFormat() { - this.preFormatted = true; - return this; - } - /** Render clef note. */ - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const abs_x = this.getAbsoluteX(); - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clefNote_${this.size}`, - }); - // If the Vex.Flow.Clef has an annotation, such as 8va, draw it. - if (this.annotation !== undefined) { - const attachment = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(this.annotation.code, this.annotation.point); - attachment.setContext(ctx); - attachment.setStave(stave); - attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); - attachment.setXShift(this.annotation.x_shift); - attachment.renderToStave(abs_x); - } - } -} - - -/***/ }), - -/***/ "./src/crescendo.ts": -/*!**************************!*\ - !*** ./src/crescendo.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Crescendo": () => (/* binding */ Crescendo) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This file implements the `Crescendo` object which draws crescendos and -// decrescendo dynamics markings. A `Crescendo` is initialized with a -// duration and formatted as part of a `Voice` like any other `Note` -// type in VexFlow. This object would most likely be formatted in a Voice -// with `TextNotes` - which are used to represent other dynamics markings. - - - - -// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (Crescendo.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Crescendo', args); -} -// Private helper to draw the hairpin -function renderHairpin(ctx, params) { - const begin_x = params.begin_x; - const end_x = params.end_x; - const y = params.y; - const half_height = params.height / 2; - ctx.beginPath(); - if (params.reverse) { - ctx.moveTo(begin_x, y - half_height); - ctx.lineTo(end_x, y); - ctx.lineTo(begin_x, y + half_height); - } - else { - ctx.moveTo(end_x, y - half_height); - ctx.lineTo(begin_x, y); - ctx.lineTo(end_x, y + half_height); - } - ctx.stroke(); - ctx.closePath(); -} -class Crescendo extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - /** Crescendo category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Crescendo; - } - // Initialize the crescendo's properties - constructor(noteStruct) { - super(noteStruct); - this.options = { - // Extensions to the length of the crescendo on either side - extend_left: 0, - extend_right: 0, - // Vertical shift - y_shift: 0, - }; - // Whether the object is a decrescendo - this.decrescendo = false; - // The staff line to be placed on - this.line = noteStruct.line || 0; - // The height at the open end of the cresc/decresc - this.height = 15; - } - // Set the line to center the element on - setLine(line) { - this.line = line; - return this; - } - // Set the full height at the open end - setHeight(height) { - this.height = height; - return this; - } - // Set whether the sign should be a descresendo by passing a bool - // to `decresc` - setDecrescendo(decresc) { - this.decrescendo = decresc; - return this; - } - // Preformat the note - preFormat() { - this.preFormatted = true; - return this; - } - // Render the Crescendo object onto the canvas - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - this.setRendered(); - const tick_context = this.getTickContext(); - const next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_1__.TickContext.getNextContext(tick_context); - const begin_x = this.getAbsoluteX(); - const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); - const y = stave.getYForLine(this.line + -3) + 1; - L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); - renderHairpin(ctx, { - begin_x: begin_x - this.options.extend_left, - end_x: end_x + this.options.extend_right, - y: y + this.options.y_shift, - height: this.height, - reverse: this.decrescendo, - }); - } -} -Crescendo.DEBUG = false; - - -/***/ }), - -/***/ "./src/curve.ts": -/*!**********************!*\ - !*** ./src/curve.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Curve": () => (/* binding */ Curve), -/* harmony export */ "CurvePosition": () => (/* binding */ CurvePosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements curves (for slurs) - - - -var CurvePosition; -(function (CurvePosition) { - CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; - CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; -})(CurvePosition || (CurvePosition = {})); -class Curve extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Curve; - } - static get Position() { - return CurvePosition; - } - static get PositionString() { - return { - nearHead: CurvePosition.NEAR_HEAD, - nearTop: CurvePosition.NEAR_TOP, - }; - } - // from: Start note - // to: End note - // options: - // cps: List of control points - // x_shift: pixels to shift - // y_shift: pixels to shift - constructor(from, to, options) { - super(); - this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ - { x: 0, y: 10 }, - { x: 0, y: 10 }, - ] }, options); - this.from = from; - this.to = to; - } - setNotes(from, to) { - if (!from && !to) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); - } - this.from = from; - this.to = to; - return this; - } - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial() { - return !this.from || !this.to; - } - renderCurve(params) { - const ctx = this.checkContext(); - const x_shift = this.render_options.x_shift; - const y_shift = this.render_options.y_shift * params.direction; - const first_x = params.first_x + x_shift; - const first_y = params.first_y + y_shift; - const last_x = params.last_x - x_shift; - const last_y = params.last_y + y_shift; - const thickness = this.render_options.thickness; - const cps = this.render_options.cps; - const { x: cp0x, y: cp0y } = cps[0]; - const { x: cp1x, y: cp1y } = cps[1]; - const cp_spacing = (last_x - first_x) / (cps.length + 2); - ctx.beginPath(); - ctx.moveTo(first_x, first_y); - ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); - ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); - ctx.stroke(); - ctx.closePath(); - ctx.fill(); - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.from; - const last_note = this.to; - let first_x; - let last_x; - let first_y; - let last_y; - let stem_direction = 0; - let metric = 'baseY'; - let end_metric = 'baseY'; - function getPosition(position) { - return typeof position === 'string' ? Curve.PositionString[position] : position; - } - const position = getPosition(this.render_options.position); - const position_end = getPosition(this.render_options.position_end); - if (position === CurvePosition.NEAR_TOP) { - metric = 'topY'; - end_metric = 'topY'; - } - if (position_end === CurvePosition.NEAR_HEAD) { - end_metric = 'baseY'; - } - else if (position_end === CurvePosition.NEAR_TOP) { - end_metric = 'topY'; - } - if (first_note) { - first_x = first_note.getTieRightX(); - stem_direction = first_note.getStemDirection(); - first_y = first_note.getStemExtents()[metric]; - } - else { - const stave = last_note.checkStave(); - first_x = stave.getTieStartX(); - first_y = last_note.getStemExtents()[metric]; - } - if (last_note) { - last_x = last_note.getTieLeftX(); - stem_direction = last_note.getStemDirection(); - last_y = last_note.getStemExtents()[end_metric]; - } - else { - const stave = first_note.checkStave(); - last_x = stave.getTieEndX(); - last_y = first_note.getStemExtents()[end_metric]; - } - this.renderCurve({ - first_x, - last_x, - first_y, - last_y, - direction: stem_direction * (this.render_options.invert === true ? -1 : 1), - }); - return true; - } -} - - -/***/ }), - -/***/ "./src/dot.ts": -/*!********************!*\ - !*** ./src/dot.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Dot": () => (/* binding */ Dot) -/* harmony export */ }); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements dot modifiers for notes. - - - -class Dot extends _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Dot; - } - /** Returns the dots associated to a Note. */ - static getDots(note) { - return note.getModifiersByType(Dot.CATEGORY); - } - /** Add a dot on the specified keys to the notes. */ - static buildAndAttach(notes, options) { - for (const note of notes) { - if (options === null || options === void 0 ? void 0 : options.all) { - for (let i = 0; i < note.keys.length; i++) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, i); - } - } - else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); - } - else { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, 0); - } - } - } - // Arrange dots inside a ModifierContext. - static format(dots, state) { - const right_shift = state.right_shift; - const dot_spacing = 1; - if (!dots || dots.length === 0) - return false; - const dot_list = []; - const max_shift_map = {}; - for (let i = 0; i < dots.length; ++i) { - const dot = dots[i]; - const note = dot.getNote(); - let props; - let shift; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isStaveNote)(note)) { - const index = dot.checkIndex(); - props = note.getKeyProps()[index]; - // consider right displaced head with no previous modifier - shift = note.getFirstDotPx(); - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { - props = { line: 0.5 }; // Shim key props for dot placement - shift = right_shift; - } - else { - // note object is not StaveNote or TabNote. - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('Internal', 'Unexpected instance.'); - } - const note_id = note.getAttribute('id'); - dot_list.push({ line: props.line, note, note_id, dot }); - max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); - } - // Sort dots by line number. - dot_list.sort((a, b) => b.line - a.line); - let dot_shift = right_shift; - let x_width = 0; - let last_line = null; - let last_note = null; - let prev_dotted_space = null; - let half_shiftY = 0; - for (let i = 0; i < dot_list.length; ++i) { - const { dot, note, note_id, line } = dot_list[i]; - // Reset the position of the dot every line. - if (line !== last_line || note !== last_note) { - dot_shift = max_shift_map[note_id]; - } - if (!note.isRest() && line !== last_line) { - if (Math.abs(line % 1) === 0.5) { - // note is on a space, so no dot shift - half_shiftY = 0; - } - else { - // note is on a line, so shift dot to space above the line - half_shiftY = 0.5; - if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { - // previous note on a space, so shift dot to space below the line - half_shiftY = -0.5; - } - else if (line + half_shiftY === prev_dotted_space) { - // previous space is dotted, so shift dot to space below the line - half_shiftY = -0.5; - } - } - } - // convert half_shiftY to a multiplier for dots.draw() - if (note.isRest()) { - dot.dot_shiftY += -half_shiftY; - } - else { - dot.dot_shiftY = -half_shiftY; - } - prev_dotted_space = line + half_shiftY; - dot.setXShift(dot_shift); - dot_shift += dot.getWidth() + dot_spacing; // spacing - x_width = dot_shift > x_width ? dot_shift : x_width; - last_line = line; - last_note = note; - } - // Update state. - state.right_shift += x_width; - return true; - } - constructor() { - super(); - this.position = _modifier__WEBPACK_IMPORTED_MODULE_0__.Modifier.Position.RIGHT; - this.radius = 2; - this.setWidth(5); - this.dot_shiftY = 0; - } - setNote(note) { - this.note = note; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isGraceNote)(note)) { - this.radius *= 0.5; - this.setWidth(3); - } - return this; - } - setDotShiftY(y) { - this.dot_shiftY = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stave = note.checkStave(); - const lineSpace = stave.getSpacingBetweenLines(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - // Set the starting y coordinate to the base of the stem for TabNotes. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isTabNote)(note)) { - start.y = note.getStemExtents().baseY; - } - const x = start.x + this.x_shift + this.width - this.radius; - const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; - ctx.beginPath(); - ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); - ctx.fill(); - } -} - - -/***/ }), - -/***/ "./src/easyscore.ts": -/*!**************************!*\ - !*** ./src/easyscore.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Builder": () => (/* binding */ Builder), -/* harmony export */ "EasyScore": () => (/* binding */ EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* binding */ EasyScoreGrammar), -/* harmony export */ "Piece": () => (/* binding */ Piece) -/* harmony export */ }); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (EasyScore.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.EasyScore', args); -} -class EasyScoreGrammar { - constructor(builder) { - this.builder = builder; - } - begin() { - return this.LINE; - } - LINE() { - return { - expect: [this.PIECE, this.PIECES, this.EOL], - }; - } - PIECE() { - return { - expect: [this.CHORDORNOTE, this.PARAMS], - run: () => this.builder.commitPiece(), - }; - } - PIECES() { - return { - expect: [this.COMMA, this.PIECE], - zeroOrMore: true, - }; - } - PARAMS() { - return { - expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], - }; - } - CHORDORNOTE() { - return { - expect: [this.CHORD, this.SINGLENOTE], - or: true, - }; - } - CHORD() { - return { - expect: [this.LPAREN, this.NOTES, this.RPAREN], - // eslint-disable-next-line - run: (state) => this.builder.addChord(state.matches[1]), - }; - } - NOTES() { - return { - expect: [this.NOTE], - oneOrMore: true, - }; - } - NOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - }; - } - SINGLENOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - run: (state) => { - // eslint-disable-next-line - const s = state; - this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); - }, - }; - } - ACCIDENTAL() { - return { - expect: [this.MICROTONES, this.ACCIDENTALS], - maybe: true, - or: true, - }; - } - DOTS() { - return { - expect: [this.DOT], - zeroOrMore: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteDots(state.matches), - }; - } - TYPE() { - return { - expect: [this.SLASH, this.MAYBESLASH, this.TYPES], - maybe: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteType(state.matches[2]), - }; - } - DURATION() { - return { - expect: [this.SLASH, this.DURATIONS], - maybe: true, - // eslint-disable-next-line - run: (state) => this.builder.setNoteDuration(state.matches[1]), - }; - } - OPTS() { - return { - expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], - maybe: true, - }; - } - KEYVALS() { - return { - expect: [this.COMMA, this.KEYVAL], - zeroOrMore: true, - }; - } - KEYVAL() { - const unquote = (str) => str.slice(1, -1); - return { - expect: [this.KEY, this.EQUALS, this.VAL], - // eslint-disable-next-line - run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), - }; - } - VAL() { - return { - expect: [this.SVAL, this.DVAL], - or: true, - }; - } - KEY() { - return { token: '[a-zA-Z][a-zA-Z0-9]*' }; - } - DVAL() { - return { token: '["][^"]*["]' }; - } - SVAL() { - return { token: "['][^']*[']" }; - } - NOTENAME() { - return { token: '[a-gA-G]' }; - } - OCTAVE() { - return { token: '[0-9]+' }; - } - ACCIDENTALS() { - return { token: 'bb|b|##|#|n' }; - } - MICROTONES() { - return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; - } - DURATIONS() { - return { token: '[0-9whq]+' }; - } - TYPES() { - return { token: '[rRsSmMhHgG]' }; - } - LPAREN() { - return { token: '[(]' }; - } - RPAREN() { - return { token: '[)]' }; - } - COMMA() { - return { token: '[,]' }; - } - DOT() { - return { token: '[.]' }; - } - SLASH() { - return { token: '[/]' }; - } - MAYBESLASH() { - return { token: '[/]?' }; - } - EQUALS() { - return { token: '[=]' }; - } - LBRACKET() { - return { token: '\\[' }; - } - RBRACKET() { - return { token: '\\]' }; - } - EOL() { - return { token: '$' }; - } -} -class Piece { - constructor(duration) { - this.chord = []; - this.dots = 0; - this.options = {}; - this.duration = duration; - } -} -class Builder { - constructor(factory) { - this.commitHooks = []; - this.factory = factory; - this.reset(); - } - reset(options) { - this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); - this.elements = { notes: [], accidentals: [] }; - this.rollingDuration = '8'; - this.resetPiece(); - } - getFactory() { - return this.factory; - } - getElements() { - return this.elements; - } - addCommitHook(commitHook) { - this.commitHooks.push(commitHook); - } - resetPiece() { - L('resetPiece'); - this.piece = new Piece(this.rollingDuration); - } - setNoteDots(dots) { - L('setNoteDots:', dots); - if (dots) - this.piece.dots = dots.length; - } - setNoteDuration(duration) { - L('setNoteDuration:', duration); - this.rollingDuration = this.piece.duration = duration || this.rollingDuration; - } - setNoteType(type) { - L('setNoteType:', type); - if (type) - this.piece.type = type; - } - addNoteOption(key, value) { - L('addNoteOption: key:', key, 'value:', value); - this.piece.options[key] = value; - } - addNote(key, accid, octave) { - L('addNote:', key, accid, octave); - this.piece.chord.push({ - key: key, - accid, - octave, - }); - } - addSingleNote(key, accid, octave) { - L('addSingleNote:', key, accid, octave); - this.addNote(key, accid, octave); - } - // notes is an array with 3 entries - addChord(notes) { - L('startChord'); - if (typeof notes[0] !== 'object') { - this.addSingleNote(notes[0]); - } - else { - notes.forEach((n) => { - if (n) - this.addNote(...n); // n => [string, string | null, string] - }); - } - L('endChord'); - } - commitPiece() { - L('commitPiece'); - const { factory } = this; - if (!factory) - return; - const options = Object.assign(Object.assign({}, this.options), this.piece.options); - // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed. - // e.g., auto | up | down - const stem = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); - // e.g., treble | bass - const clef = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); - const { chord, duration, dots, type } = this.piece; - // Create a string[] that will be assigned to the .keys property of the StaveNote. - // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave} - // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included. - const standardAccidentals = _music__WEBPACK_IMPORTED_MODULE_3__.Music.accidentals; - const keys = chord.map((notePiece) => { - var _a; - return notePiece.key + - (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + - '/' + - notePiece.octave; - }); - const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase. - // Build a GhostNote or StaveNote using the information we gathered. - const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' - ? factory.GhostNote({ duration, dots }) - : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); - if (!auto_stem) - note.setStemDirection(stem === 'up' ? _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_5__.Stem.DOWN); - // Attach accidentals. - const accidentals = []; - chord.forEach((notePiece, index) => { - const accid = notePiece.accid; - if (typeof accid === 'string') { - const accidental = factory.Accidental({ type: accid }); - note.addModifier(accidental, index); - accidentals.push(accidental); - } - else { - accidentals.push(undefined); - } - }); - // Attach dots. - for (let i = 0; i < dots; i++) - _dot__WEBPACK_IMPORTED_MODULE_1__.Dot.buildAndAttach([note], { all: true }); - this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); - this.elements.notes.push(note); - this.elements.accidentals.push(accidentals); - this.resetPiece(); - } -} -/** - * Commit hook used by EasyScore.setOptions(). - */ -function setId(options, note) { - if (options.id === undefined) - return; - note.setAttribute('id', options.id); -} -// Used by setClass() below. -const commaSeparatedRegex = /\s*,\s*/; -/** - * Commit hook used by EasyScore.setOptions(). - */ -function setClass(options, note) { - if (options.class === undefined) - return; - options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); -} -/** - * EasyScore implements a parser for a simple language to generate VexFlow objects. - */ -class EasyScore { - constructor(options = {}) { - this.defaults = { - clef: 'treble', - time: '4/4', - stem: 'auto', - }; - this.setOptions(options); - } - /** - * Set the score defaults. - * clef must be set appropriately to avoid errors when adding Staves. - * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} - * @param defaults.time default time signature ( 4/4 | 9/8 ...) - * @param defaults.stem default stem arrangement (auto | up | down) - * @returns this - */ - set(defaults) { - this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); - return this; - } - /** - * @param options.factory is required. - * @returns this - */ - setOptions(options) { - var _a, _b; - // eslint-disable-next-line - const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore(). - const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); - this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_0__.Articulation.easyScoreHook, _frethandfinger__WEBPACK_IMPORTED_MODULE_2__.FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, - builder }); - this.factory = factory; - this.builder = builder; - this.grammar = new EasyScoreGrammar(this.builder); - this.parser = new _parser__WEBPACK_IMPORTED_MODULE_4__.Parser(this.grammar); - (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); - return this; - } - setContext(context) { - this.factory.setContext(context); - return this; - } - parse(line, options = {}) { - this.builder.reset(options); - const result = this.parser.parse(line); - if (!result.success && this.options.throwOnError) { - L(result); - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('Error parsing line: ' + line); - } - return result; - } - beam(notes, options) { - this.factory.Beam({ notes, options }); - return notes; - } - tuplet(notes, options) { - this.factory.Tuplet({ notes, options }); - return notes; - } - notes(line, options = {}) { - options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); - this.parse(line, options); - return this.builder.getElements().notes; - } - voice(notes, options = {}) { - options = Object.assign({ time: this.defaults.time }, options); - return this.factory.Voice(options).addTickables(notes); - } - addCommitHook(commitHook) { - this.builder.addCommitHook(commitHook); - } -} -EasyScore.DEBUG = false; - - -/***/ }), - -/***/ "./src/element.ts": -/*!************************!*\ - !*** ./src/element.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Element": () => (/* binding */ Element) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// MIT License - - - - -/** - * Element implements a generic base class for VexFlow, with implementations - * of general functions and properties that can be inherited by all VexFlow elements. - * - * The Element is an abstract class that needs to be subclassed to work. It handles - * style and text-font properties for the Element and any child elements, along with - * working with the Registry to create unique ids, but does not have any tools for - * formatting x or y positions or connections to a Stave. - */ -class Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Element; - } - static newID() { - return `auto${Element.ID++}`; - } - constructor() { - var _a; - // all Element objects keep a list of children that they are responsible and which - // inherit the style of their parents. - this.children = []; - this.attrs = { - id: Element.newID(), - type: this.getCategory(), - class: '', - }; - this.rendered = false; - // If a default registry exist, then register with it right away. - (_a = _registry__WEBPACK_IMPORTED_MODULE_1__.Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); - } - /** - * Adds a child Element to the Element, which lets it inherit the - * same style as the parent when setGroupStyle() is called. - * - * Examples of children are noteheads and stems. Modifiers such - * as Accidentals are generally not set as children. - * - * Note that StaveNote calls setGroupStyle() when setStyle() is called. - */ - addChildElement(child) { - this.children.push(child); - return this; - } - getCategory() { - return this.constructor.CATEGORY; - } - /** - * Set the element style used to render. - * - * Example: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.draw(); - * ``` - * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), - * the style can be applied to all of them by means of the context: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.getContext().setFillStyle('red'); - * element.getContext().setStrokeStyle('red'); - * element.draw(); - * ``` - * or using drawWithStyle: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.drawWithStyle(); - * ``` - */ - setStyle(style) { - this.style = style; - return this; - } - /** Set the element & associated children style used for rendering. */ - setGroupStyle(style) { - this.style = style; - this.children.forEach((child) => child.setGroupStyle(style)); - return this; - } - /** Get the element style used for rendering. */ - getStyle() { - return this.style; - } - /** Apply the element style to `context`. */ - applyStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.save(); - if (style.shadowColor) - context.setShadowColor(style.shadowColor); - if (style.shadowBlur) - context.setShadowBlur(style.shadowBlur); - if (style.fillStyle) - context.setFillStyle(style.fillStyle); - if (style.strokeStyle) - context.setStrokeStyle(style.strokeStyle); - if (style.lineWidth) - context.setLineWidth(style.lineWidth); - return this; - } - /** Restore the style of `context`. */ - restoreStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.restore(); - return this; - } - /** - * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) - * with the element's style (see `getStyle()` and `setStyle()`) - */ - drawWithStyle() { - this.checkContext(); - this.applyStyle(); - this.draw(); - this.restoreStyle(); - } - /** Check if it has a class label (An element can have multiple class labels). */ - hasClass(className) { - var _a; - if (!this.attrs.class) - return false; - return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; - } - /** Add a class label (An element can have multiple class labels). */ - addClass(className) { - var _a; - if (this.hasClass(className)) - return this; - if (!this.attrs.class) - this.attrs.class = `${className}`; - else - this.attrs.class = `${this.attrs.class} ${className}`; - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ - id: this.attrs.id, - name: 'class', - value: className, - oldValue: undefined, - }); - return this; - } - /** Remove a class label (An element can have multiple class labels). */ - removeClass(className) { - var _a, _b; - if (!this.hasClass(className)) - return this; - const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); - if (arr) { - arr.splice(arr.indexOf(className)); - this.attrs.class = arr.join(' '); - } - (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ - id: this.attrs.id, - name: 'class', - value: undefined, - oldValue: className, - }); - return this; - } - /** Call back from registry after the element is registered. */ - onRegister(registry) { - this.registry = registry; - return this; - } - /** Return the rendered status. */ - isRendered() { - return this.rendered; - } - /** Set the rendered status. */ - setRendered(rendered = true) { - this.rendered = rendered; - return this; - } - /** Return the element attributes. */ - getAttributes() { - return this.attrs; - } - /** Return an attribute, such as 'id', 'type' or 'class'. */ - // eslint-disable-next-line - getAttribute(name) { - return this.attrs[name]; - } - /** Return associated SVGElement. */ - getSVGElement(suffix = '') { - const id = (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(this.attrs.id + suffix); - const element = document.getElementById(id); - if (element) - return element; - } - /** Set an attribute such as 'id', 'class', or 'type'. */ - setAttribute(name, value) { - var _a; - const oldID = this.attrs.id; - const oldValue = this.attrs[name]; - this.attrs[name] = value; - // Register with old id to support id changes. - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); - return this; - } - /** Get the boundingBox. */ - getBoundingBox() { - return this.boundingBox; - } - /** Return the context, such as an SVGContext or CanvasContext object. */ - getContext() { - return this.context; - } - /** Set the context to an SVGContext or CanvasContext object */ - setContext(context) { - this.context = context; - return this; - } - /** Validate and return the rendering context. */ - checkContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.context, 'NoContext', 'No rendering context attached to instance.'); - } - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Font Handling - /** - * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied - * to text (not glyphs). - */ - set font(f) { - this.setFont(f); - } - /** Returns the CSS compatible font string for the text font. */ - get font() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); - } - /** - * Set the element's text font family, size, weight, style - * (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * This attribute does not determine the font used for musical Glyphs like treble clefs. - * - * @param font is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * If no arguments are provided, then the font is set to the default font. - * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. - */ - setFont(font, size, weight, style) { - // Allow subclasses to override `TEXT_FONT`. - const defaultTextFont = this.constructor.TEXT_FONT; - const fontIsObject = typeof font === 'object'; - const fontIsString = typeof font === 'string'; - const fontIsUndefined = font === undefined; - const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; - if (fontIsObject) { - // `font` is case 1) a FontInfo object - this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); - } - else if (fontIsString && sizeWeightStyleAreUndefined) { - // `font` is case 2) CSS font shorthand. - this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.fromCSSString(font); - } - else if (fontIsUndefined && sizeWeightStyleAreUndefined) { - // All arguments are undefined. Do not check for `arguments.length === 0`, - // which fails on the edge case: `setFont(undefined)`. - // TODO: See if we can remove this case entirely without introducing a visual diff. - // The else case below seems like it should be equivalent to this case. - this.textFont = Object.assign({}, defaultTextFont); - } - else { - // `font` is case 3) a font family string (e.g., 'Times New Roman'). - // The other parameters represent the size, weight, and style. - // It is okay for `font` to be undefined while one or more of the other arguments is provided. - // Following CSS conventions, unspecified params are reset to the default. - this.textFont = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); - } - return this; - } - /** - * Get the css string describing this Element's text font. e.g., - * 'bold 10pt Arial'. - */ - getFont() { - if (!this.textFont) { - this.resetFont(); - } - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(this.textFont); - } - /** - * Reset the text font to the style indicated by the static `TEXT_FONT` property. - * Subclasses can call this to initialize `textFont` for the first time. - */ - resetFont() { - this.setFont(); - } - /** Return a copy of the current FontInfo object. */ - get fontInfo() { - if (!this.textFont) { - this.resetFont(); - } - // We can cast to Required here, because - // we just called resetFont() above to ensure this.textFont is set. - return Object.assign({}, this.textFont); - } - set fontInfo(fontInfo) { - this.setFont(fontInfo); - } - /** Change the font size, while keeping everything else the same. */ - setFontSize(size) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); - return this; - } - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. - */ - getFontSize() { - return this.fontSize; - } - /** - * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. - * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). - */ - set fontSize(size) { - this.setFontSize(size); - } - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - */ - get fontSize() { - let size = this.fontInfo.size; - if (typeof size === 'number') { - size = `${size}pt`; - } - return size; - } - /** - * @returns the font size in `pt`. - */ - get fontSizeInPoints() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(this.fontSize); - } - /** - * @returns the font size in `px`. - */ - get fontSizeInPixels() { - return _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPixelValue(this.fontSize); - } - /** - * @returns a CSS font-style string (e.g., 'italic'). - */ - get fontStyle() { - return this.fontInfo.style; - } - set fontStyle(style) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); - } - /** - * @returns a CSS font-weight string (e.g., 'bold'). - * As in CSS, font-weight is always returned as a string, even if it was set as a number. - */ - get fontWeight() { - return this.fontInfo.weight + ''; - } - set fontWeight(weight) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); - } -} -Element.ID = 1000; -/** - * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` - * to customize the font for musical symbols placed on the score. - */ -Element.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/factory.ts": -/*!************************!*\ - !*** ./src/factory.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Factory": () => (/* binding */ Factory) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// MIT License - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Factory.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_39__.log)('Vex.Flow.Factory', args); -} -/** - * Factory implements a high level API around VexFlow. - */ -class Factory { - /** - * Static simplified function to access constructor without providing FactoryOptions - * - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` - */ - static newFromElementId(elementId, width = 500, height = 200) { - return new Factory({ renderer: { elementId, width, height } }); - } - /** - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` - */ - constructor(options = {}) { - L('New factory: ', options); - this.options = { - stave: { - space: 10, - }, - renderer: { - elementId: '', - width: 500, - height: 200, - background: '#FFF', - }, - font: Factory.TEXT_FONT, - }; - this.setOptions(options); - } - reset() { - this.renderQ = []; - this.systems = []; - this.staves = []; - this.voices = []; - this.stave = undefined; // current stave - } - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.initRenderer(); - this.reset(); - } - initRenderer() { - const { elementId, width, height, background } = this.options.renderer; - if (elementId == null) { - return; - } - if (elementId == '') { - L(this); - throw new _util__WEBPACK_IMPORTED_MODULE_39__.RuntimeError('renderer.elementId not set in FactoryOptions'); - } - let backend = this.options.renderer.backend; - if (backend === undefined) { - const elem = document.getElementById(elementId); - // We use a custom type check here, because node-canvas mimics canvas, - // but is not an instance of window.HTMLCanvasElement. - // In fact, `window` might be undefined here. - // See: https://www.npmjs.com/package/canvas - if ((0,_web__WEBPACK_IMPORTED_MODULE_42__.isHTMLCanvas)(elem)) { - backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.CANVAS; - } - else { - backend = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.Backends.SVG; - } - } - this.context = _renderer__WEBPACK_IMPORTED_MODULE_22__.Renderer.buildContext(elementId, backend, width, height, background); - } - getContext() { - return this.context; - } - setContext(context) { - this.context = context; - return this; - } - getStave() { - return this.stave; - } - getVoices() { - return this.voices; - } - /** Return pixels from current stave spacing. */ - Stave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); - const stave = new _stave__WEBPACK_IMPORTED_MODULE_24__.Stave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - TabStave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); - const stave = new _tabstave__WEBPACK_IMPORTED_MODULE_32__.TabStave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - StaveNote(noteStruct) { - const note = new _stavenote__WEBPACK_IMPORTED_MODULE_27__.StaveNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GlyphNote(glyph, noteStruct, options) { - const note = new _glyphnote__WEBPACK_IMPORTED_MODULE_13__.GlyphNote(glyph, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - RepeatNote(type, noteStruct, options) { - const note = new _repeatnote__WEBPACK_IMPORTED_MODULE_23__.RepeatNote(type, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GhostNote(noteStruct) { - const ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_12__.GhostNote(noteStruct); - if (this.stave) - ghostNote.setStave(this.stave); - ghostNote.setContext(this.context); - this.renderQ.push(ghostNote); - return ghostNote; - } - TextNote(noteStruct) { - const textNote = new _textnote__WEBPACK_IMPORTED_MODULE_35__.TextNote(noteStruct); - if (this.stave) - textNote.setStave(this.stave); - textNote.setContext(this.context); - this.renderQ.push(textNote); - return textNote; - } - BarNote(params = {}) { - const barNote = new _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote(params.type); - if (this.stave) - barNote.setStave(this.stave); - barNote.setContext(this.context); - this.renderQ.push(barNote); - return barNote; - } - ClefNote(params) { - const p = Object.assign({ type: 'treble', options: { - size: 'default', - annotation: undefined, - } }, params); - const clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_6__.ClefNote(p.type, p.options.size, p.options.annotation); - if (this.stave) - clefNote.setStave(this.stave); - clefNote.setContext(this.context); - this.renderQ.push(clefNote); - return clefNote; - } - TimeSigNote(params) { - const p = Object.assign({ time: '4/4' }, params); - const timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_37__.TimeSigNote(p.time); - if (this.stave) - timeSigNote.setStave(this.stave); - timeSigNote.setContext(this.context); - this.renderQ.push(timeSigNote); - return timeSigNote; - } - KeySigNote(params) { - const keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_16__.KeySigNote(params.key, params.cancelKey, params.alterKey); - if (this.stave) - keySigNote.setStave(this.stave); - keySigNote.setContext(this.context); - this.renderQ.push(keySigNote); - return keySigNote; - } - TabNote(noteStruct) { - const note = new _tabnote__WEBPACK_IMPORTED_MODULE_31__.TabNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GraceNote(noteStruct) { - const note = new _gracenote__WEBPACK_IMPORTED_MODULE_14__.GraceNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - return note; - } - GraceNoteGroup(params) { - const group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_15__.GraceNoteGroup(params.notes, params.slur); - group.setContext(this.context); - return group; - } - Accidental(params) { - const accid = new _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental(params.type); - accid.setContext(this.context); - return accid; - } - Annotation(params) { - const p = Object.assign({ text: 'p', hJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify.CENTER, vJustify: _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify.BOTTOM }, params); - const annotation = new _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation(p.text); - annotation.setJustification(p.hJustify); - annotation.setVerticalJustification(p.vJustify); - annotation.setFont(p.font); - annotation.setContext(this.context); - return annotation; - } - ChordSymbol(params) { - const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); - const chordSymbol = new _chordsymbol__WEBPACK_IMPORTED_MODULE_5__.ChordSymbol(); - chordSymbol.setHorizontal(p.hJustify); - chordSymbol.setVertical(p.vJustify); - chordSymbol.setEnableKerning(p.kerning); - chordSymbol.setReportWidth(p.reportWidth); - // There is a default font based on the engraving font. Only set then - // font if it is specific, else use the default - if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { - if (typeof p.fontWeight === 'string') - chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); - else - chordSymbol.setFont(p.fontFamily, p.fontSize, ''); - } - else if (typeof p.fontSize === 'number') { - chordSymbol.setFontSize(p.fontSize); - } - chordSymbol.setContext(this.context); - return chordSymbol; - } - Articulation(params) { - var _a; - const articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); - if ((params === null || params === void 0 ? void 0 : params.position) != undefined) - articulation.setPosition(params.position); - if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) - articulation.setBetweenLines(params.betweenLines); - articulation.setContext(this.context); - return articulation; - } - Ornament(type, params) { - const options = Object.assign({ type, position: 0, accidental: '' }, params); - const ornament = new _ornament__WEBPACK_IMPORTED_MODULE_20__.Ornament(type); - ornament.setPosition(options.position); - if (options.upperAccidental) { - ornament.setUpperAccidental(options.upperAccidental); - } - if (options.lowerAccidental) { - ornament.setLowerAccidental(options.lowerAccidental); - } - if (typeof options.delayed !== 'undefined') { - ornament.setDelayed(options.delayed); - } - ornament.setContext(this.context); - return ornament; - } - TextDynamics(params) { - const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); - const text = new _textdynamics__WEBPACK_IMPORTED_MODULE_34__.TextDynamics({ - text: p.text, - line: p.line, - duration: p.duration, - dots: p.dots, - }); - if (this.stave) - text.setStave(this.stave); - text.setContext(this.context); - this.renderQ.push(text); - return text; - } - Fingering(params) { - const p = Object.assign({ number: '0', position: 'left' }, params); - const fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_11__.FretHandFinger(p.number); - fingering.setPosition(p.position); - fingering.setContext(this.context); - return fingering; - } - StringNumber(params, drawCircle = true) { - const stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_29__.StringNumber(params.number); - stringNumber.setPosition(params.position); - stringNumber.setContext(this.context); - stringNumber.setDrawCircle(drawCircle); - return stringNumber; - } - TickContext() { - return new _tickcontext__WEBPACK_IMPORTED_MODULE_36__.TickContext(); - } - ModifierContext() { - return new _modifiercontext__WEBPACK_IMPORTED_MODULE_17__.ModifierContext(); - } - MultiMeasureRest(params) { - const numMeasures = (0,_util__WEBPACK_IMPORTED_MODULE_39__.defined)(params.number_of_measures, 'NoNumberOfMeasures'); - const multiMeasureRest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_18__.MultiMeasureRest(numMeasures, params); - multiMeasureRest.setContext(this.context); - this.renderQ.push(multiMeasureRest); - return multiMeasureRest; - } - Voice(params) { - const p = Object.assign({ time: '4/4' }, params); - const voice = new _voice__WEBPACK_IMPORTED_MODULE_41__.Voice(p.time); - this.voices.push(voice); - return voice; - } - StaveConnector(params) { - const connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_25__.StaveConnector(params.top_stave, params.bottom_stave); - connector.setType(params.type).setContext(this.context); - this.renderQ.push(connector); - return connector; - } - Formatter(options) { - return new _formatter__WEBPACK_IMPORTED_MODULE_10__.Formatter(options); - } - Tuplet(params) { - const p = Object.assign({ notes: [], options: {} }, params); - const tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_38__.Tuplet(p.notes, p.options).setContext(this.context); - this.renderQ.push(tuplet); - return tuplet; - } - Beam(params) { - var _a, _b, _c, _d, _e; - const beam = new _beam__WEBPACK_IMPORTED_MODULE_4__.Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); - beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); - if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { - Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { - beam.setPartialBeamSideAt(Number(noteIndex), direction); - }); - } - this.renderQ.push(beam); - return beam; - } - Curve(params) { - const curve = new _curve__WEBPACK_IMPORTED_MODULE_7__.Curve(params.from, params.to, params.options).setContext(this.context); - this.renderQ.push(curve); - return curve; - } - StaveTie(params) { - var _a; - const tie = new _stavetie__WEBPACK_IMPORTED_MODULE_28__.StaveTie({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }, params.text); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) - tie.setDirection(params.options.direction); - tie.setContext(this.context); - this.renderQ.push(tie); - return tie; - } - StaveLine(params) { - var _a, _b; - const line = new _staveline__WEBPACK_IMPORTED_MODULE_26__.StaveLine({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) - line.setText(params.options.text); - if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) - line.setFont(params.options.font); - line.setContext(this.context); - this.renderQ.push(line); - return line; - } - VibratoBracket(params) { - const vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_40__.VibratoBracket({ - start: params.from, - stop: params.to, - }); - if (params.options.line) - vibratoBracket.setLine(params.options.line); - if (params.options.harsh) - vibratoBracket.setHarsh(params.options.harsh); - vibratoBracket.setContext(this.context); - this.renderQ.push(vibratoBracket); - return vibratoBracket; - } - TextBracket(params) { - const textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_33__.TextBracket({ - start: params.from, - stop: params.to, - text: params.text, - superscript: params.options.superscript, - position: params.options.position, - }); - if (params.options.line) - textBracket.setLine(params.options.line); - if (params.options.font) - textBracket.setFont(params.options.font); - textBracket.setContext(this.context); - this.renderQ.push(textBracket); - return textBracket; - } - System(params = {}) { - params.factory = this; - const system = new _system__WEBPACK_IMPORTED_MODULE_30__.System(params).setContext(this.context); - this.systems.push(system); - return system; - } - /** - * Creates EasyScore. Normally the first step after constructing a Factory. For example: - * ``` - * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); - * const score: EasyScore = vf.EasyScore(); - * ``` - * @param options.factory optional instance of Factory - * @param options.builder instance of Builder - * @param options.commitHooks function to call after a note element is created - * @param options.throwOnError throw error in case of parsing error - */ - EasyScore(options = {}) { - options.factory = this; - return new _easyscore__WEBPACK_IMPORTED_MODULE_8__.EasyScore(options); - } - PedalMarking(params) { - const p = Object.assign({ notes: [], options: { - style: 'mixed', - } }, params); - const pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking(p.notes); - pedal.setType(_pedalmarking__WEBPACK_IMPORTED_MODULE_21__.PedalMarking.typeString[p.options.style]); - pedal.setContext(this.context); - this.renderQ.push(pedal); - return pedal; - } - NoteSubGroup(params) { - const p = Object.assign({ notes: [] }, params); - const group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_19__.NoteSubGroup(p.notes); - group.setContext(this.context); - return group; - } - /** Render the score. */ - draw() { - const ctx = this.context; - this.systems.forEach((s) => s.setContext(ctx).format()); - this.staves.forEach((s) => s.setContext(ctx).draw()); - this.voices.forEach((v) => v.setContext(ctx).draw()); - this.renderQ.forEach((e) => { - if (!e.isRendered()) - e.setContext(ctx).draw(); - }); - this.systems.forEach((s) => s.setContext(ctx).draw()); - this.reset(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ -Factory.DEBUG = false; -/** Default text font. */ -Factory.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_9__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/flow.ts": -/*!*********************!*\ - !*** ./src/flow.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Flow": () => (/* binding */ Flow) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./version */ "./src/version.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -class Flow { - static get BUILD() { - return { - /** version number. */ - VERSION: _version__WEBPACK_IMPORTED_MODULE_78__.VERSION, - /** git commit ID that this library was built from. */ - ID: _version__WEBPACK_IMPORTED_MODULE_78__.ID, - /** The date when this library was compiled. */ - DATE: _version__WEBPACK_IMPORTED_MODULE_78__.DATE, - }; - } - /** - * Examples: - * ``` - * Vex.Flow.setMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Bravura', 'Gonville'); - * ``` - * - * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). - * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: - * 'Bravura', 'Gonville', 'Custom'. - * - * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, - * which includes a single music font. Calling this method is unnecessary. - * - * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. - * In this case, the default music font stack is empty. - * Example: - * ``` - * await Vex.Flow.fetchMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Petaluma'); - * ... (do VexFlow stuff) ... - * ``` - * See `demos/fonts/` for more examples. - * - * @returns an array of Font objects corresponding to the provided `fontNames`. - */ - static setMusicFont(...fontNames) { - // Convert the array of font names into an array of Font objects. - const fonts = fontNames.map((fontName) => _font__WEBPACK_IMPORTED_MODULE_18__.Font.load(fontName)); - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK = fonts; - _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.MUSIC_FONT_STACK = fonts.slice(); - _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph.CURRENT_CACHE_KEY = fontNames.join(','); - return fonts; - } - /** - * Used with vexflow-core which supports dynamic font loading. - */ - // eslint-disable-next-line - static fetchMusicFont(fontName, fontModuleOrPath) { - return __awaiter(this, void 0, void 0, function* () { - // The default implementation does nothing. - // See vexflow-core.ts for the implementation that vexflow-core.js uses. - }); - } - static getMusicFont() { - const fonts = _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.MUSIC_FONT_STACK; - return fonts.map((font) => font.getName()); - } - static get RENDER_PRECISION_PLACES() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES; - } - static set RENDER_PRECISION_PLACES(precision) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RENDER_PRECISION_PLACES = precision; - } - static get SOFTMAX_FACTOR() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR; - } - static set SOFTMAX_FACTOR(factor) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SOFTMAX_FACTOR = factor; - } - static get NOTATION_FONT_SCALE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE; - } - static set NOTATION_FONT_SCALE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.NOTATION_FONT_SCALE = value; - } - static get TABLATURE_FONT_SCALE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE; - } - static set TABLATURE_FONT_SCALE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TABLATURE_FONT_SCALE = value; - } - static get RESOLUTION() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION; - } - static set RESOLUTION(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.RESOLUTION = value; - } - static get SLASH_NOTEHEAD_WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH; - } - static set SLASH_NOTEHEAD_WIDTH(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.SLASH_NOTEHEAD_WIDTH = value; - } - static get STAVE_LINE_DISTANCE() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE; - } - static set STAVE_LINE_DISTANCE(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_DISTANCE = value; - } - static get STAVE_LINE_THICKNESS() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS; - } - static set STAVE_LINE_THICKNESS(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STAVE_LINE_THICKNESS = value; - } - static get STEM_HEIGHT() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT; - } - static set STEM_HEIGHT(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_HEIGHT = value; - } - static get STEM_WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH; - } - static set STEM_WIDTH(value) { - _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.STEM_WIDTH = value; - } - static get TIME4_4() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.TIME4_4; - } - static get accidentalMap() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.accidentalMap; - } - static get unicode() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.unicode; - } - static keySignature(spec) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keySignature(spec); - } - static hasKeySignature(spec) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.hasKeySignature(spec); - } - static getKeySignatures() { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.getKeySignatures(); - } - static clefProperties(clef) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.clefProperties(clef); - } - // eslint-disable-next-line - static keyProperties(key, clef, params) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.keyProperties(key, clef, params); - } - static durationToTicks(duration) { - return _tables__WEBPACK_IMPORTED_MODULE_63__.Tables.durationToTicks(duration); - } -} -Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental; -Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation; -Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation; -Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.Barline; -Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote; -Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_4__.Beam; -Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_5__.Bend; -Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox; -Flow.BoundingBoxComputation = _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation; -Flow.CanvasContext = _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext; -Flow.ChordSymbol = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol; -Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_10__.Clef; -Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote; -Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo; -Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_13__.Curve; -Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_14__.Dot; -Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore; -Flow.Element = _element__WEBPACK_IMPORTED_MODULE_16__.Element; -Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_17__.Factory; -Flow.Font = _font__WEBPACK_IMPORTED_MODULE_18__.Font; -Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_19__.Formatter; -Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_20__.Fraction; -Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_21__.FretHandFinger; -Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_22__.GhostNote; -Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_23__.Glyph; -Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_24__.GlyphNote; -Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_25__.GraceNote; -Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_26__.GraceNoteGroup; -Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_27__.GraceTabNote; -Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_28__.KeyManager; -Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_29__.KeySignature; -Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_30__.KeySigNote; -Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_31__.Modifier; -Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_32__.ModifierContext; -Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_33__.MultiMeasureRest; -Flow.Music = _music__WEBPACK_IMPORTED_MODULE_34__.Music; -Flow.Note = _note__WEBPACK_IMPORTED_MODULE_35__.Note; -Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_36__.NoteHead; -Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_37__.NoteSubGroup; -Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_38__.Ornament; -Flow.Parenthesis = _parenthesis__WEBPACK_IMPORTED_MODULE_39__.Parenthesis; -Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_40__.Parser; -Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_41__.PedalMarking; -Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_42__.Registry; -Flow.RenderContext = _rendercontext__WEBPACK_IMPORTED_MODULE_43__.RenderContext; -Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_44__.Renderer; -Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_45__.RepeatNote; -Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_53__.Repetition; -Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_46__.Stave; -Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_48__.StaveConnector; -Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_49__.StaveHairpin; -Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_50__.StaveLine; -Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifier; -Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_52__.StaveNote; -Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_54__.StaveTempo; -Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_55__.StaveText; -Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_56__.StaveTie; -Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_58__.Stem; -Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_59__.StringNumber; -Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_60__.Stroke; -Flow.SVGContext = _svgcontext__WEBPACK_IMPORTED_MODULE_61__.SVGContext; -Flow.System = _system__WEBPACK_IMPORTED_MODULE_62__.System; -Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_64__.TabNote; -Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_65__.TabSlide; -Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_66__.TabStave; -Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_67__.TabTie; -Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracket; -Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_69__.TextDynamics; -Flow.TextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_70__.TextFormatter; -Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextNote; -Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_72__.TickContext; -Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_73__.TimeSignature; -Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_74__.TimeSigNote; -Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_75__.Tremolo; -Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_76__.Tuning; -Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_77__.Tuplet; -Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_79__.Vibrato; -Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_80__.VibratoBracket; -Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_81__.Voice; -Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.Volta; -// Exported Enums. -// Sorted by the module / file they are exported from. -Flow.AnnotationHorizontalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify; -Flow.AnnotationVerticalJustify = _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify; -Flow.ChordSymbolHorizontalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify; -Flow.ChordSymbolVerticalJustify = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify; -Flow.SymbolTypes = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes; -Flow.SymbolModifiers = _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers; -Flow.CurvePosition = _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition; -Flow.FontWeight = _font__WEBPACK_IMPORTED_MODULE_18__.FontWeight; -Flow.FontStyle = _font__WEBPACK_IMPORTED_MODULE_18__.FontStyle; -Flow.ModifierPosition = _modifier__WEBPACK_IMPORTED_MODULE_31__.ModifierPosition; -Flow.RendererBackends = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererBackends; -Flow.RendererLineEndType = _renderer__WEBPACK_IMPORTED_MODULE_44__.RendererLineEndType; -Flow.BarlineType = _stavebarline__WEBPACK_IMPORTED_MODULE_47__.BarlineType; -Flow.StaveModifierPosition = _stavemodifier__WEBPACK_IMPORTED_MODULE_51__.StaveModifierPosition; -Flow.VoltaType = _stavevolta__WEBPACK_IMPORTED_MODULE_57__.VoltaType; -Flow.TextBracketPosition = _textbracket__WEBPACK_IMPORTED_MODULE_68__.TextBracketPosition; -Flow.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_71__.TextJustification; -Flow.VoiceMode = _voice__WEBPACK_IMPORTED_MODULE_81__.VoiceMode; - - -/***/ }), - -/***/ "./src/font.ts": -/*!*********************!*\ - !*** ./src/font.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Font": () => (/* binding */ Font), -/* harmony export */ "FontStyle": () => (/* binding */ FontStyle), -/* harmony export */ "FontWeight": () => (/* binding */ FontWeight) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; - -var FontWeight; -(function (FontWeight) { - FontWeight["NORMAL"] = "normal"; - FontWeight["BOLD"] = "bold"; -})(FontWeight || (FontWeight = {})); -var FontStyle; -(function (FontStyle) { - FontStyle["NORMAL"] = "normal"; - FontStyle["ITALIC"] = "italic"; -})(FontStyle || (FontStyle = {})); -// Internal element for parsing CSS font shorthand strings. -let fontParser; -const Fonts = {}; -class Font { - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of pixels that is equivalent to `fontSize` - */ - static convertSizeToPixelValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - // Assume the numeric fontSize is specified in pt. - return fontSize * Font.scaleToPxFrom.pt; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. - const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; - return value * conversionFactor; - } - } - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of points that is equivalent to `fontSize` - */ - static convertSizeToPointValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - // Assume the numeric fontSize is specified in pt. - return fontSize; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces. - const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; - return value * conversionFactor; - } - } - /** - * @param f - * @param size - * @param weight - * @param style - * @returns the `size` field will include the units (e.g., '12pt', '16px'). - */ - static validate(f, size, weight, style) { - // If f is a string but all other arguments are undefined, we assume that - // f is CSS font shorthand (e.g., 'italic bold 10pt Arial'). - if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { - return Font.fromCSSString(f); - } - let family; - if (typeof f === 'object') { - // f is a FontInfo object, so we extract its fields. - family = f.family; - size = f.size; - weight = f.weight; - style = f.style; - } - else { - // f is a string representing the font family name or undefined. - family = f; - } - family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; - size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; - weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; - style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; - if (weight === '') { - weight = FontWeight.NORMAL; - } - if (style === '') { - style = FontStyle.NORMAL; - } - // If size is a number, we assume the unit is `pt`. - if (typeof size === 'number') { - size = `${size}pt`; - } - // If weight is a number (e.g., 900), turn it into a string representation of that number. - if (typeof weight === 'number') { - weight = weight.toString(); - } - // At this point, `family`, `size`, `weight`, and `style` are all strings. - return { family, size, weight, style }; - } - /** - * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). - */ - static fromCSSString(cssFontShorthand) { - // Let the browser parse this string for us. - // First, create a span element. - // Then, set its style.font and extract it back out. - if (!fontParser) { - fontParser = document.createElement('span'); - } - fontParser.style.font = cssFontShorthand; - const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; - return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; - } - /** - * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. - */ - static toCSSString(fontInfo) { - var _a; - if (!fontInfo) { - return ''; - } - let style; - const st = fontInfo.style; - if (st === FontStyle.NORMAL || st === '' || st === undefined) { - style = ''; // no space! Omit the style section. - } - else { - style = st.trim() + ' '; - } - let weight; - const wt = fontInfo.weight; - if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { - weight = ''; // no space! Omit the weight section. - } - else if (typeof wt === 'number') { - weight = wt + ' '; - } - else { - weight = wt.trim() + ' '; - } - let size; - const sz = fontInfo.size; - if (sz === undefined) { - size = Font.SIZE + 'pt '; - } - else if (typeof sz === 'number') { - size = sz + 'pt '; - } - else { - // size is already a string. - size = sz.trim() + ' '; - } - const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; - return `${style}${weight}${size}${family}`; - } - /** - * @param fontSize a number representing a font size, or a string font size with units. - * @param scaleFactor multiply the size by this factor. - * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). - * If the fontSize argument was a number, the return value will be a number. - * If the fontSize argument was a string, the return value will be a string. - */ - static scaleSize(fontSize, scaleFactor) { - if (typeof fontSize === 'number') { - return (fontSize * scaleFactor); - } - else { - const value = parseFloat(fontSize); - const unit = fontSize.replace(/[\d.\s]/g, ''); // Remove all numbers, dots, spaces. - return `${value * scaleFactor}${unit}`; - } - } - /** - * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). - * @returns true if the font weight indicates bold. - */ - static isBold(weight) { - if (!weight) { - return false; - } - else if (typeof weight === 'number') { - return weight >= 600; - } - else { - // a string can be 'bold' or '700' - const parsedWeight = parseInt(weight, 10); - if (isNaN(parsedWeight)) { - return weight.toLowerCase() === 'bold'; - } - else { - return parsedWeight >= 600; - } - } - } - /** - * @param style - * @returns true if the font style indicates 'italic'. - */ - static isItalic(style) { - if (!style) { - return false; - } - else { - return style.toLowerCase() === FontStyle.ITALIC; - } - } - /** - * @param fontName - * @param woffURL The absolute or relative URL to the woff file. - * @param includeWoff2 If true, we assume that a woff2 file is in - * the same folder as the woff file, and will append a `2` to the url. - */ - // Support distributions of the typescript compiler that do not yet include the FontFace API declarations. - // eslint-disable-next-line - // @ts-ignore - static loadWebFont(fontName, woffURL, includeWoff2 = true) { - return __awaiter(this, void 0, void 0, function* () { - const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; - const woff1URL = `url(${woffURL}) format('woff')`; - const woffURLs = woff2URL + woff1URL; - // eslint-disable-next-line - // @ts-ignore - const fontFace = new FontFace(fontName, woffURLs); - yield fontFace.load(); - // eslint-disable-next-line - // @ts-ignore - document.fonts.add(fontFace); - return fontFace; - }); - } - /** - * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: - * `await Vex.Flow.Font.loadWebFonts();` - * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), - * and a @font-face { font-family: ... } rule in your CSS. - * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, - * depending on the current music engraving font. - * - * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts - * for your app. - */ - static loadWebFonts() { - return __awaiter(this, void 0, void 0, function* () { - const host = Font.WEB_FONT_HOST; - const files = Font.WEB_FONT_FILES; - for (const fontName in files) { - const fontPath = files[fontName]; - Font.loadWebFont(fontName, host + fontPath); - } - }); - } - /** - * @param fontName - * @param data optionally set the Font object's `.data` property. - * This is usually done when setting up a font for the first time. - * @param metrics optionally set the Font object's `.metrics` property. - * This is usually done when setting up a font for the first time. - * @returns a Font object with the given `fontName`. - * Reuse an existing Font object if a matching one is found. - */ - static load(fontName, data, metrics) { - let font = Fonts[fontName]; - if (!font) { - font = new Font(fontName); - Fonts[fontName] = font; - } - if (data) { - font.setData(data); - } - if (metrics) { - font.setMetrics(metrics); - } - return font; - } - /** - * Use `Font.load(fontName)` to get a Font object. - * Do not call this constructor directly. - */ - constructor(fontName) { - this.name = fontName; - } - getName() { - return this.name; - } - getData() { - return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.data, 'FontError', 'Missing font data'); - } - getMetrics() { - return (0,_util__WEBPACK_IMPORTED_MODULE_0__.defined)(this.metrics, 'FontError', 'Missing metrics'); - } - setData(data) { - this.data = data; - } - setMetrics(metrics) { - this.metrics = metrics; - } - hasData() { - return this.data !== undefined; - } - getResolution() { - return this.getData().resolution; - } - getGlyphs() { - return this.getData().glyphs; - } - /** - * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). - * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). - * @param defaultValue is returned if the lookup fails. - * @returns the retrieved value (or `defaultValue` if the lookup fails). - */ - // eslint-disable-next-line - lookupMetric(key, defaultValue) { - const keyParts = key.split('.'); - // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key). - let currObj = this.getMetrics(); - for (let i = 0; i < keyParts.length; i++) { - const keyPart = keyParts[i]; - const value = currObj[keyPart]; - if (value === undefined) { - // If the key lookup fails, we fall back to the defaultValue. - return defaultValue; - } - // The most recent lookup succeeded, so we drill deeper into the object. - currObj = value; - } - // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value. - return currObj; - } - /** For debugging. */ - toString() { - return '[' + this.name + ' Font]'; - } -} -////////////////////////////////////////////////////////////////////////////////////////////////// -// STATIC MEMBERS -/** Default sans-serif font family. */ -Font.SANS_SERIF = 'Arial, sans-serif'; -/** Default serif font family. */ -Font.SERIF = 'Times New Roman, serif'; -/** Default font size in `pt`. */ -Font.SIZE = 10; -// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in -/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ -Font.scaleToPxFrom = { - pt: 4 / 3, - px: 1, - em: 16, - '%': 4 / 25, - in: 96, - mm: 96 / 25.4, - cm: 96 / 2.54, -}; -/** - * Customize this field to specify a different CDN for delivering web fonts. - * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ - * Or you can use your own host. - */ -Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; -/** - * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when - * `await Font.loadWebFonts()` is called. Customize this field to specify a different - * set of fonts to load. See: `Font.loadWebFonts()`. - */ -Font.WEB_FONT_FILES = { - 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', - PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', -}; - - -/***/ }), - -/***/ "./src/fonts/bravura_glyphs.ts": -/*!*************************************!*\ - !*** ./src/fonts/bravura_glyphs.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BravuraFont": () => (/* binding */ BravuraFont) -/* harmony export */ }); -const BravuraFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 469, - y_min: 0, - y_max: 295, - ha: 295, - o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', - }, - bracketBottom: { - x_min: 0, - x_max: 469, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', - }, - barlineTick: { - x_min: 0, - x_max: 36, - y_min: 868, - y_max: 1120, - ha: 252, - o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 500, - y_min: 0, - y_max: 502, - ha: 502, - o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', - }, - segno: { - x_min: 4, - x_max: 550, - y_min: -27, - y_max: 759, - ha: 786, - o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', - }, - coda: { - x_min: -4, - x_max: 955, - y_min: -158, - y_max: 898, - ha: 1056, - o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', - }, - gClef: { - x_min: 0, - x_max: 671, - y_min: -658, - y_max: 1098, - ha: 1756, - o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', - }, - cClef: { - x_min: 0, - x_max: 699, - y_min: -506, - y_max: 506, - ha: 1012, - o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', - }, - fClef: { - x_min: -5, - x_max: 684, - y_min: -635, - y_max: 262, - ha: 897, - o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 382, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', - }, - '6stringTabClef': { - x_min: -3, - x_max: 408, - y_min: -748, - y_max: 764, - ha: 1512, - o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', - }, - timeSig0: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', - }, - timeSig1: { - x_min: 20, - x_max: 314, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', - }, - timeSig2: { - x_min: 20, - x_max: 426, - y_min: -257, - y_max: 254, - ha: 511, - o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', - }, - timeSig3: { - x_min: 20, - x_max: 401, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', - }, - timeSig4: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', - }, - timeSig5: { - x_min: 20, - x_max: 383, - y_min: -251, - y_max: 246, - ha: 497, - o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', - }, - timeSig6: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', - }, - timeSig7: { - x_min: 20, - x_max: 421, - y_min: -250, - y_max: 249, - ha: 499, - o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', - }, - timeSig8: { - x_min: 20, - x_max: 416, - y_min: -259, - y_max: 259, - ha: 518, - o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', - }, - timeSig9: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', - }, - timeSigCommon: { - x_min: 5, - x_max: 424, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 418, - y_min: -359, - y_max: 361, - ha: 720, - o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', - }, - timeSigPlus: { - x_min: -1, - x_max: 499, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', - }, - timeSigPlusSmall: { - x_min: -1, - x_max: 255, - y_min: -133, - y_max: 123, - ha: 256, - o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 448, - y_min: -35, - y_max: 40, - ha: 75, - o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', - }, - timeSigParensLeft: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 599, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 422, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 546, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 377, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 334, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 290, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 422, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 603, - y_min: -218, - y_max: 213, - ha: 431, - o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', - }, - noteheadCircledWhole: { - x_min: 0, - x_max: 437, - y_min: -225, - y_max: 211, - ha: 436, - o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', - }, - noteheadCircledHalf: { - x_min: -18, - x_max: 311, - y_min: -162, - y_max: 167, - ha: 329, - o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', - }, - noteheadCircledBlack: { - x_min: -21, - x_max: 321, - y_min: -171, - y_max: 167, - ha: 338, - o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 416, - y_min: -190, - y_max: 198, - ha: 388, - o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 292, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 207 -180 l 420 180 l 0 180 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 293, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 422 -180 l 207 180 l 0 -180 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 596, - y_min: -179, - y_max: 168, - ha: 347, - o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', - }, - noteheadSlashedWhole1: { - x_min: -22, - x_max: 433, - y_min: -157, - y_max: 148, - ha: 305, - o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', - }, - noteheadSlashedHalf1: { - x_min: -67, - x_max: 386, - y_min: -142, - y_max: 160, - ha: 302, - o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', - }, - noteheadSlashedBlack1: { - x_min: -80, - x_max: 375, - y_min: -165, - y_max: 167, - ha: 332, - o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 596, - y_min: -178, - y_max: 169, - ha: 347, - o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', - }, - noteheadSlashedWhole2: { - x_min: -18, - x_max: 436, - y_min: -154, - y_max: 151, - ha: 305, - o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 380, - y_min: -134, - y_max: 168, - ha: 302, - o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', - }, - noteheadSlashedBlack2: { - x_min: -79, - x_max: 376, - y_min: -164, - y_max: 168, - ha: 332, - o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 432, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 270, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 251, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', - }, - noteheadParenthesis: { - x_min: -73, - x_max: 368, - y_min: -180, - y_max: 182, - ha: 362, - o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', - }, - noteheadParenthesisRight: { - x_min: -36, - x_max: 73, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 109, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 315, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 -180 l 0 180 l 0 -180 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 180 l 0 -180 l 488 -180 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 278, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', - }, - tremolo1: { - x_min: -150, - x_max: 150, - y_min: -93, - y_max: 94, - ha: 187, - o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', - }, - flag8thUp: { - x_min: 0, - x_max: 264, - y_min: -810, - y_max: 9, - ha: 819, - o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', - }, - flag8thDown: { - x_min: 0, - x_max: 306, - y_min: -14, - y_max: 808, - ha: 822, - o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -813, - y_max: 2, - ha: 815, - o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', - }, - flag16thDown: { - x_min: 0, - x_max: 291, - y_min: -9, - y_max: 812, - ha: 821, - o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 149, - ha: 961, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 273, - y_min: -172, - y_max: 812, - ha: 984, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', - }, - flag64thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 347, - ha: 1159, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag64thDown: { - x_min: 0, - x_max: 273, - y_min: -376, - y_max: 812, - ha: 1188, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', - }, - flag128thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 533, - ha: 1345, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag128thDown: { - x_min: 0, - x_max: 273, - y_min: -580, - y_max: 812, - ha: 1392, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 226, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 168, - y_min: -335, - y_max: 341, - ha: 676, - o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 249, - y_min: -348, - y_max: 350, - ha: 698, - o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 247, - y_min: -125, - y_max: 127, - ha: 252, - o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 411, - y_min: -175, - y_max: 437, - ha: 612, - o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 1, - x_max: 227, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 1, - x_max: 466, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 179, - y_min: -353, - y_max: 307, - ha: 660, - o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 3, - x_max: 317, - y_min: -347, - y_max: 369, - ha: 716, - o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 1, - x_max: 287, - y_min: -174, - y_max: 438, - ha: 612, - o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', - }, - accidentalBakiyeFlat: { - x_min: -1, - x_max: 286, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 229, - y_min: -337, - y_max: 322, - ha: 659, - o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', - }, - accidentalKucukMucennebSharp: { - x_min: -1, - x_max: 339, - y_min: -338, - y_max: 321, - ha: 659, - o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 300, - y_min: -472, - y_max: 157, - ha: 629, - o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', - }, - accidentalSori: { - x_min: 0, - x_max: 421, - y_min: -318, - y_max: 328, - ha: 646, - o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 339, - y_min: 1, - y_max: 245, - ha: 244, - o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 339, - y_min: -244, - y_max: 0, - ha: 244, - o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', - }, - articTenutoAbove: { - x_min: -1, - x_max: 338, - y_min: 0, - y_max: 48, - ha: 48, - o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', - }, - articTenutoBelow: { - x_min: -1, - x_max: 338, - y_min: -48, - y_max: 0, - ha: 48, - o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 84, - y_min: 0, - y_max: 84, - ha: 84, - o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 84, - y_min: -84, - y_max: 0, - ha: 84, - o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', - }, - articStaccatissimoAbove: { - x_min: 1, - x_max: 100, - y_min: -2, - y_max: 293, - ha: 295, - o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', - }, - articStaccatissimoBelow: { - x_min: 1, - x_max: 100, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', - }, - articMarcatoAbove: { - x_min: -1, - x_max: 235, - y_min: -1, - y_max: 253, - ha: 254, - o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', - }, - articMarcatoBelow: { - x_min: -1, - x_max: 235, - y_min: -254, - y_max: 0, - ha: 254, - o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', - }, - fermataAbove: { - x_min: 3, - x_max: 605, - y_min: -3, - y_max: 329, - ha: 332, - o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', - }, - fermataBelow: { - x_min: 3, - x_max: 605, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 603, - y_min: -1, - y_max: 333, - ha: 334, - o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 603, - y_min: -333, - y_max: 1, - ha: 334, - o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: 0, - y_max: 408, - ha: 408, - o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 715, - y_min: -408, - y_max: 0, - ha: 408, - o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 726, - y_min: 0, - y_max: 449, - ha: 449, - o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 726, - y_min: -449, - y_max: 0, - ha: 449, - o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 604, - y_min: 0, - y_max: 341, - ha: 341, - o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 604, - y_min: -341, - y_max: 0, - ha: 341, - o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', - }, - breathMarkComma: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - breathMarkUpbow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - caesura: { - x_min: 0, - x_max: 384, - y_min: -1, - y_max: 532, - ha: 533, - o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 373, - y_min: 0, - y_max: 530, - ha: 530, - o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', - }, - restMaxima: { - x_min: 0, - x_max: 381, - y_min: -249, - y_max: 250, - ha: 499, - o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: 0, - y_max: 250, - ha: 250, - o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', - }, - restWhole: { - x_min: 0, - x_max: 282, - y_min: -135, - y_max: 9, - ha: 144, - o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', - }, - restWholeLegerLine: { - x_min: -117, - x_max: 399, - y_min: -135, - y_max: 20, - ha: 155, - o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', - }, - restHalf: { - x_min: 0, - x_max: 282, - y_min: -2, - y_max: 142, - ha: 144, - o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', - }, - restHalfLegerLine: { - x_min: -117, - x_max: 399, - y_min: -13, - y_max: 142, - ha: 155, - o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', - }, - restQuarter: { - x_min: 1, - x_max: 270, - y_min: -375, - y_max: 373, - ha: 748, - o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', - }, - rest8th: { - x_min: 0, - x_max: 247, - y_min: -251, - y_max: 174, - ha: 425, - o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', - }, - rest16th: { - x_min: 0, - x_max: 320, - y_min: -500, - y_max: 179, - ha: 679, - o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', - }, - rest32nd: { - x_min: 0, - x_max: 363, - y_min: -500, - y_max: 426, - ha: 926, - o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -753, - y_max: 430, - ha: 1183, - o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', - }, - rest128th: { - x_min: 0, - x_max: 485, - y_min: -750, - y_max: 689, - ha: 1439, - o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', - }, - dynamicPiano: { - x_min: -89, - x_max: 366, - y_min: -142, - y_max: 274, - ha: 416, - o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', - }, - dynamicMezzo: { - x_min: -20, - x_max: 446, - y_min: -10, - y_max: 274, - ha: 284, - o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', - }, - dynamicForte: { - x_min: -141, - x_max: 364, - y_min: -152, - y_max: 444, - ha: 596, - o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', - }, - dynamicRinforzando: { - x_min: -20, - x_max: 277, - y_min: 0, - y_max: 274, - ha: 274, - o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 229, - y_min: -10, - y_max: 273, - ha: 283, - o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', - }, - dynamicZ: { - x_min: -30, - x_max: 244, - y_min: -10, - y_max: 268, - ha: 278, - o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', - }, - ornamentTrill: { - x_min: 0, - x_max: 521, - y_min: -10, - y_max: 390, - ha: 400, - o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 460, - y_min: 0, - y_max: 218, - ha: 218, - o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 460, - y_min: -90, - y_max: 306, - ha: 396, - o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', - }, - ornamentMordent: { - x_min: 1, - x_max: 729, - y_min: -73, - y_max: 319, - ha: 392, - o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 725, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', - }, - ornamentTremblement: { - x_min: 1, - x_max: 985, - y_min: 0, - y_max: 244, - ha: 244, - o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1119, - y_min: 0, - y_max: 481, - ha: 481, - o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 2, - x_max: 1150, - y_min: -367, - y_max: 245, - ha: 612, - o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1048, - y_min: -367, - y_max: 331, - ha: 698, - o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 949, - y_min: 0, - y_max: 381, - ha: 381, - o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1278, - y_min: 0, - y_max: 247, - ha: 247, - o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1277, - y_min: -62, - y_max: 333, - ha: 395, - o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 859, - y_min: -222, - y_max: 246, - ha: 468, - o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', - }, - brassScoop: { - x_min: 1, - x_max: 320, - y_min: -373, - y_max: 13, - ha: 386, - o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 489, - y_min: -40, - y_max: 346, - ha: 386, - o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', - }, - brassFallLipShort: { - x_min: 1, - x_max: 293, - y_min: -345, - y_max: 42, - ha: 387, - o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', - }, - brassBend: { - x_min: 0, - x_max: 392, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 304, - y_min: 0, - y_max: 304, - ha: 304, - o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', - }, - brassFlip: { - x_min: 0, - x_max: 379, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 620, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', - }, - brassSmear: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 170, - ha: 170, - o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 318, - ha: 318, - o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', - }, - stringsUpBow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 200, - ha: 200, - o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 1019, - y_min: -8, - y_max: 555, - ha: 563, - o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 450, - y_min: 0, - y_max: 450, - ha: 450, - o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - wiggleArpeggiatoUp: { - x_min: -33, - x_max: 292, - y_min: 0, - y_max: 119, - ha: 119, - o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', - }, - arrowheadBlackUp: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', - }, - arrowheadBlackDown: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', - }, - arpeggiatoUp: { - x_min: 1, - x_max: 229, - y_min: 7, - y_max: 1511, - ha: 1504, - o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', - }, - arpeggiatoDown: { - x_min: 1, - x_max: 229, - y_min: -4, - y_max: 1500, - ha: 1504, - o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 762, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1232, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', - }, - csymDiminished: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', - }, - csymHalfDiminished: { - x_min: -16, - x_max: 488, - y_min: -15, - y_max: 489, - ha: 504, - o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', - }, - csymAugmented: { - x_min: 0, - x_max: 395, - y_min: 1, - y_max: 396, - ha: 395, - o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 558, - y_min: 1, - y_max: 477, - ha: 476, - o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', - }, - csymMinor: { - x_min: 0, - x_max: 325, - y_min: 216, - y_max: 260, - ha: 44, - o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', - }, - csymParensLeftTall: { - x_min: 1, - x_max: 185, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', - }, - csymParensRightTall: { - x_min: -20, - x_max: 164, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 155, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 156, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', - }, - csymParensRightVeryTall: { - x_min: -15, - x_max: 107, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 999, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', - }, - accSagittal5v7KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', - }, - accSagittal5v7KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', - }, - accSagittal5CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', - }, - accSagittal5CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', - }, - accSagittal7CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', - }, - accSagittal7CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal25SmallDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', - }, - accSagittal25SmallDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', - }, - accSagittal35MediumDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', - }, - accSagittal35MediumDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal11MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', - }, - accSagittal11MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', - }, - accSagittal11LargeDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal11LargeDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp25SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', - }, - accSagittalFlat25SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', - }, - accSagittalSharp7CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', - }, - accSagittalFlat7CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp5CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat5CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', - }, - accSagittalSharp5v7kDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', - }, - accSagittalFlat5v7kUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', - }, - accSagittalSharp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', - }, - accSagittalFlat: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', - }, - accSagittalSharp5v7kUp: { - x_min: 0, - x_max: 312, - y_min: -361, - y_max: 172, - ha: 533, - o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', - }, - accSagittalFlat5v7kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 361, - ha: 533, - o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', - }, - accSagittalSharp5CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', - }, - accSagittalFlat5CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', - }, - accSagittalSharp7CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', - }, - accSagittalFlat7CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp25SUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', - }, - accSagittalFlat25SDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', - }, - accSagittalSharp35MUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', - }, - accSagittalFlat35MDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', - }, - accSagittalSharp11MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', - }, - accSagittalFlat11MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', - }, - accSagittalSharp11LUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11LDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp35LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat35LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp25SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', - }, - accSagittalDoubleFlat25SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', - }, - accSagittalDoubleSharp7CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', - }, - accSagittalDoubleFlat7CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', - }, - accSagittalDoubleSharp5CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', - }, - accSagittalDoubleFlat5CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', - }, - accSagittalDoubleSharp5v7kDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', - }, - accSagittalDoubleFlat5v7kUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', - }, - accSagittalDoubleSharp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', - }, - accSagittalDoubleFlat: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', - }, - accSagittal7v11KleismaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', - }, - accSagittal7v11KleismaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal55CommaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', - }, - accSagittal55CommaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal7v11CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal7v11CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal5v11SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', - }, - accSagittal5v11SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat5v11SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', - }, - accSagittalFlat7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', - }, - accSagittalSharp55CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', - }, - accSagittalFlat55CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', - }, - accSagittalSharp17CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', - }, - accSagittalFlat17CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', - }, - accSagittalSharp7v11kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', - }, - accSagittalFlat7v11kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', - }, - accSagittalSharp7v11kUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', - }, - accSagittalFlat7v11kDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', - }, - accSagittalSharp17CUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17CDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp55CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat55CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', - }, - accSagittalSharp7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', - }, - accSagittalFlat7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', - }, - accSagittalFlat5v11SDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp5v11SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat5v11SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp7v11CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', - }, - accSagittalDoubleFlat7v11CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', - }, - accSagittalDoubleSharp55CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', - }, - accSagittalDoubleFlat55CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', - }, - accSagittalDoubleSharp17CDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', - }, - accSagittalDoubleFlat17CUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', - }, - accSagittalDoubleSharp7v11kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat7v11kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittal23CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', - }, - accSagittal23CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', - }, - accSagittal5v19CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', - }, - accSagittal5v19CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal5v23SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', - }, - accSagittal5v23SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittalSharp5v23SDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', - }, - accSagittalFlat5v23SUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', - }, - accSagittalFlat5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', - }, - accSagittalFlat23CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', - }, - accSagittalSharp23CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', - }, - accSagittalFlat23CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalFlat5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', - }, - accSagittalSharp5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalFlat5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', - }, - accSagittalDoubleSharp5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', - }, - accSagittalDoubleFlat5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', - }, - accSagittalDoubleSharp5v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', - }, - accSagittalDoubleFlat5v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', - }, - accSagittalDoubleSharp23CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalDoubleFlat23CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', - }, - accSagittal19SchismaUp: { - x_min: 0, - x_max: 125, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', - }, - accSagittal19SchismaDown: { - x_min: 0, - x_max: 125, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal143CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', - }, - accSagittal143CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal11v49CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', - }, - accSagittal11v49CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', - }, - accSagittal19CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal19CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal7v19CommaUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal7v19CommaDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal49SmallDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal49SmallDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal23SmallDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal23SmallDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal5v13MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', - }, - accSagittal5v13MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', - }, - accSagittal11v19MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', - }, - accSagittal11v19MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', - }, - accSagittal49MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', - }, - accSagittal49MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', - }, - accSagittal5v49MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', - }, - accSagittal5v49MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', - }, - accSagittal49LargeDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', - }, - accSagittal49LargeDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', - }, - accSagittal11v19LargeDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', - }, - accSagittal11v19LargeDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', - }, - accSagittal5v13LargeDiesisUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', - }, - accSagittal5v13LargeDiesisDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', - }, - accSagittalFlat23SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp49SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', - }, - accSagittalFlat49SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalSharp7v19CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', - }, - accSagittalFlat7v19CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', - }, - accSagittalSharp19CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', - }, - accSagittalFlat19CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', - }, - accSagittalSharp11v49CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat11v49CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', - }, - accSagittalSharp143CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat143CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp17kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', - }, - accSagittalFlat17kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', - }, - accSagittalSharp19sDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', - }, - accSagittalFlat19sUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', - }, - accSagittalSharp19sUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', - }, - accSagittalFlat19sDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', - }, - accSagittalSharp17kUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp143CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalFlat143CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp11v49CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', - }, - accSagittalFlat11v49CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', - }, - accSagittalSharp19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp49SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat49SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp23SUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat23SDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp5v13MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', - }, - accSagittalFlat5v13MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', - }, - accSagittalSharp11v19MUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11v19MDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp49MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', - }, - accSagittalFlat49MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', - }, - accSagittalSharp5v49MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', - }, - accSagittalFlat5v49MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', - }, - accSagittalSharp49LUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', - }, - accSagittalFlat49LDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', - }, - accSagittalSharp11v19LUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', - }, - accSagittalFlat11v19LDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', - }, - accSagittalSharp5v13LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat5v13LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalDoubleSharp23SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalDoubleFlat23SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', - }, - accSagittalDoubleSharp49SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', - }, - accSagittalDoubleFlat49SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalDoubleSharp7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalDoubleFlat7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', - }, - accSagittalDoubleSharp19CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', - }, - accSagittalDoubleFlat19CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', - }, - accSagittalDoubleSharp11v49CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat11v49CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp143CDown: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat143CUp: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp17kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat17kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittalDoubleSharp19sDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalDoubleFlat19sUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalShaftUp: { - x_min: 0, - x_max: 31, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', - }, - accSagittalShaftDown: { - x_min: 0, - x_max: 31, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', - }, - accSagittalAcute: { - x_min: 0, - x_max: 125, - y_min: -62, - y_max: 125, - ha: 187, - o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', - }, - accSagittalGrave: { - x_min: 0, - x_max: 125, - y_min: -125, - y_max: 62, - ha: 187, - o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', - }, - accSagittal1MinaUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal1MinaDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal2MinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal2MinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal1TinaUp: { - x_min: 0, - x_max: 93, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', - }, - accSagittal1TinaDown: { - x_min: 0, - x_max: 93, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', - }, - accSagittal2TinasUp: { - x_min: 0, - x_max: 94, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal2TinasDown: { - x_min: 0, - x_max: 94, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', - }, - accSagittal3TinasUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal3TinasDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal4TinasUp: { - x_min: 0, - x_max: 187, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal4TinasDown: { - x_min: 0, - x_max: 187, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal5TinasUp: { - x_min: 0, - x_max: 218, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal5TinasDown: { - x_min: 0, - x_max: 218, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal6TinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal6TinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal7TinasUp: { - x_min: 0, - x_max: 281, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal7TinasDown: { - x_min: 0, - x_max: 281, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal8TinasUp: { - x_min: 0, - x_max: 312, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal8TinasDown: { - x_min: 0, - x_max: 312, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal9TinasUp: { - x_min: -7, - x_max: 312, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal9TinasDown: { - x_min: -7, - x_max: 312, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittalFractionalTinaUp: { - x_min: -3, - x_max: 35, - y_min: 73, - y_max: 111, - ha: 38, - o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', - }, - accSagittalFractionalTinaDown: { - x_min: -3, - x_max: 35, - y_min: -111, - y_max: -73, - ha: 38, - o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 164, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 414, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 281, - y_min: -203, - y_max: 203, - ha: 406, - o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 281, - y_min: -186, - y_max: 186, - ha: 372, - o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', - }, - }, - fontFamily: 'Bravura', - resolution: 1000, - generatedOn: '2022-12-18T09:06:51.407Z', -}; - - -/***/ }), - -/***/ "./src/fonts/bravura_metrics.ts": -/*!**************************************!*\ - !*** ./src/fonts/bravura_metrics.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "BravuraMetrics": () => (/* binding */ BravuraMetrics) -/* harmony export */ }); -/** - * The Bravura font was created by Daniel Spreadbury @ Steinberg. - * https://github.com/steinbergmedia/bravura/ - */ -const BravuraMetrics = { - name: 'Bravura', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by TimeSignature object - shiftLine: -1, - point: 34, - // used by tuplets - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/custom_glyphs.ts": -/*!************************************!*\ - !*** ./src/fonts/custom_glyphs.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CustomFont": () => (/* binding */ CustomFont) -/* harmony export */ }); -const CustomFont = { - resolution: 1000, - fontFamily: 'VexFlowCustom', - glyphs: { - noteheadSquareWhite: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ', - }, - accidentalBuyukMucennebFlat: { - x_min: -171.5, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalBakiyeFlat: { - x_min: -176.9375, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalKucukMucennebSharp: { - x_min: -1.359375, - x_max: 255.890625, - ha: 261, - o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ', - }, - accidentalKoron: { - x_min: -20, - x_max: 320, - ha: 257, - o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ', - }, - accidentalSori: { - x_min: -10.890625, - x_max: 299.4375, - ha: 294, - o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ', - }, - vexAccidentalMicrotonal1: { - x_min: -171.5, - x_max: 483.1875, - ha: 493, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', - }, - vexAccidentalMicrotonal2: { - x_min: -1.359375, - x_max: 386.5625, - ha: 394, - o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ', - }, - vexAccidentalMicrotonal3: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', - }, - vexAccidentalMicrotonal4: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', - }, - vexNoteHeadRectBlack: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', - }, - vexNoteHeadRectWhite: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', - }, - vexWiggleArpeggioUp: { - x_min: 58.53125, - x_max: 228.671875, - ha: 294, - o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/custom_metrics.ts": -/*!*************************************!*\ - !*** ./src/fonts/custom_metrics.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "CustomMetrics": () => (/* binding */ CustomMetrics) -/* harmony export */ }); -const CustomMetrics = { - name: 'VexFlowCustom', - smufl: false, - glyphs: {}, -}; - - -/***/ }), - -/***/ "./src/fonts/gonville_glyphs.ts": -/*!**************************************!*\ - !*** ./src/fonts/gonville_glyphs.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GonvilleSmuflFont": () => (/* binding */ GonvilleSmuflFont) -/* harmony export */ }); -const GonvilleSmuflFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 387, - y_min: -87, - y_max: 139, - ha: 226, - o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z', - }, - bracketBottom: { - x_min: 0, - x_max: 387, - y_min: -139, - y_max: 87, - ha: 226, - o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z', - }, - barlineTick: { - x_min: -55, - x_max: 55, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z', - }, - breathMarkTick: { - x_min: -142, - x_max: 256, - y_min: 0, - y_max: 403, - ha: 403, - o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z', - }, - segno: { - x_min: -228, - x_max: 228, - y_min: -329, - y_max: 329, - ha: 657, - o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z', - }, - coda: { - x_min: -215, - x_max: 215, - y_min: -264, - y_max: 264, - ha: 529, - o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z', - }, - gClef: { - x_min: 0, - x_max: 586, - y_min: -594, - y_max: 1017, - ha: 1611, - o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z', - }, - cClef: { - x_min: 0, - x_max: 604, - y_min: -477, - y_max: 477, - ha: 955, - o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z', - }, - fClef: { - x_min: 0, - x_max: 622, - y_min: -512, - y_max: 238, - ha: 750, - o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z', - }, - unpitchedPercussionClef1: { - x_min: 160, - x_max: 481, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 471, - y_min: -691, - y_max: 707, - ha: 1398, - o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z', - }, - timeSig0: { - x_min: 0, - x_max: 357, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z', - }, - timeSig1: { - x_min: 0, - x_max: 239, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z', - }, - timeSig2: { - x_min: 0, - x_max: 317, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z', - }, - timeSig3: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z', - }, - timeSig4: { - x_min: 0, - x_max: 325, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z', - }, - timeSig5: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z', - }, - timeSig6: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSig7: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z', - }, - timeSig8: { - x_min: 0, - x_max: 338, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z', - }, - timeSig9: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 385, - y_min: -219, - y_max: 219, - ha: 438, - o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 385, - y_min: -371, - y_max: 371, - ha: 741, - o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 221, - y_min: 214, - y_max: 256, - ha: 43, - o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z', - }, - timeSigParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensRightSmall: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - timeSigParensLeftSmall: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 623, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 427, - y_min: -127, - y_max: 127, - ha: 253, - o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 414, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 336, - y_min: -168, - y_max: 168, - ha: 335, - o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 435, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 303, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 302, - y_min: -140, - y_max: 140, - ha: 279, - o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 435, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z', - }, - augmentationDot: { - x_min: -59, - x_max: 59, - y_min: -59, - y_max: 59, - ha: 118, - o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z', - }, - tremolo1: { - x_min: -143, - x_max: 297, - y_min: -550, - y_max: -237, - ha: 313, - o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z', - }, - flag8thUp: { - x_min: -16, - x_max: 220, - y_min: -700, - y_max: -4, - ha: 696, - o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z', - }, - flag8thDown: { - x_min: -14, - x_max: 255, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z', - }, - flag16thUp: { - x_min: -16, - x_max: 220, - y_min: -796, - y_max: -4, - ha: 793, - o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z', - }, - flag16thDown: { - x_min: -14, - x_max: 251, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z', - }, - flag32ndUp: { - x_min: -16, - x_max: 219, - y_min: -1039, - y_max: -4, - ha: 1035, - o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z', - }, - flag32ndDown: { - x_min: -14, - x_max: 253, - y_min: 4, - y_max: 935, - ha: 931, - o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z', - }, - flag64thUp: { - x_min: -16, - x_max: 219, - y_min: -1159, - y_max: -4, - ha: 1156, - o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z', - }, - flag64thDown: { - x_min: -14, - x_max: 255, - y_min: 3, - y_max: 1053, - ha: 1049, - o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z', - }, - flag128thUp: { - x_min: -16, - x_max: 217, - y_min: -1398, - y_max: -4, - ha: 1395, - o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z', - }, - flag128thDown: { - x_min: -14, - x_max: 254, - y_min: 4, - y_max: 1288, - ha: 1284, - o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z', - }, - accidentalFlat: { - x_min: -14, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 166, - y_min: -314, - y_max: 314, - ha: 627, - o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 225, - y_min: -364, - y_max: 364, - ha: 729, - o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 255, - y_min: -127, - y_max: 127, - ha: 255, - o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z', - }, - accidentalDoubleFlat: { - x_min: -14, - x_max: 334, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z', - }, - accidentalParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - accidentalParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 188, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 419, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 315, - y_min: -368, - y_max: 368, - ha: 735, - o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z', - }, - accidentalBuyukMucennebFlat: { - x_min: -117, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalBakiyeFlat: { - x_min: -121, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 176, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z', - }, - articAccentAbove: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articAccentBelow: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articTenutoAbove: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articTenutoBelow: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articStaccatoAbove: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatoBelow: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatissimoAbove: { - x_min: -50, - x_max: 50, - y_min: 0, - y_max: 173, - ha: 173, - o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z', - }, - articStaccatissimoBelow: { - x_min: -50, - x_max: 50, - y_min: -173, - y_max: 0, - ha: 173, - o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z', - }, - articMarcatoAbove: { - x_min: -107, - x_max: 107, - y_min: -240, - y_max: 18, - ha: 259, - o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z', - }, - articMarcatoBelow: { - x_min: -107, - x_max: 107, - y_min: -18, - y_max: 241, - ha: 259, - o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z', - }, - fermataAbove: { - x_min: -305, - x_max: 305, - y_min: 0, - y_max: 332, - ha: 332, - o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataBelow: { - x_min: -305, - x_max: 305, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 342, - ha: 342, - o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataLongBelow: { - x_min: -269, - x_max: 269, - y_min: -342, - y_max: 0, - ha: 342, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 412, - ha: 412, - o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataVeryLongBelow: { - x_min: -269, - x_max: 269, - y_min: -412, - y_max: 0, - ha: 412, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryShortAbove: { - x_min: -330, - x_max: 330, - y_min: 0, - y_max: 536, - ha: 536, - o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z', - }, - fermataVeryShortBelow: { - x_min: -330, - x_max: 330, - y_min: -536, - y_max: 0, - ha: 536, - o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z', - }, - fermataShortAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 441, - ha: 441, - o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataShortBelow: { - x_min: -269, - x_max: 269, - y_min: -441, - y_max: 0, - ha: 441, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - breathMarkUpbow: { - x_min: -118, - x_max: 118, - y_min: 0, - y_max: 385, - ha: 385, - o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z', - }, - caesura: { - x_min: 0, - x_max: 430, - y_min: -190, - y_max: 284, - ha: 474, - o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 348, - y_min: -195, - y_max: 292, - ha: 486, - o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z', - }, - restMaxima: { - x_min: 0, - x_max: 801, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 267, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z', - }, - restWhole: { - x_min: 0, - x_max: 310, - y_min: -118, - y_max: 0, - ha: 118, - o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z', - }, - restWholeLegerLine: { - x_min: 0, - x_max: 509, - y_min: -118, - y_max: 11, - ha: 128, - o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z', - }, - restHalf: { - x_min: 0, - x_max: 310, - y_min: 0, - y_max: 118, - ha: 118, - o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z', - }, - restHalfLegerLine: { - x_min: 0, - x_max: 509, - y_min: -11, - y_max: 118, - ha: 128, - o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z', - }, - restQuarter: { - x_min: 0, - x_max: 208, - y_min: -343, - y_max: 343, - ha: 686, - o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z', - }, - rest8th: { - x_min: 0, - x_max: 242, - y_min: -185, - y_max: 206, - ha: 391, - o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z', - }, - rest16th: { - x_min: 0, - x_max: 312, - y_min: -417, - y_max: 206, - ha: 623, - o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z', - }, - rest32nd: { - x_min: 0, - x_max: 381, - y_min: -417, - y_max: 438, - ha: 854, - o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z', - }, - rest64th: { - x_min: 0, - x_max: 451, - y_min: -648, - y_max: 438, - ha: 1086, - o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z', - }, - rest128th: { - x_min: 0, - x_max: 520, - y_min: -648, - y_max: 669, - ha: 1317, - o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z', - }, - dynamicPiano: { - x_min: -36, - x_max: 355, - y_min: -168, - y_max: 261, - ha: 428, - o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z', - }, - dynamicMezzo: { - x_min: 32, - x_max: 463, - y_min: -18, - y_max: 256, - ha: 274, - o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z', - }, - dynamicForte: { - x_min: -81, - x_max: 413, - y_min: -171, - y_max: 390, - ha: 561, - o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z', - }, - dynamicRinforzando: { - x_min: 55, - x_max: 336, - y_min: 0, - y_max: 258, - ha: 258, - o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z', - }, - dynamicSforzando: { - x_min: 49, - x_max: 262, - y_min: -21, - y_max: 254, - ha: 274, - o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z', - }, - dynamicZ: { - x_min: 22, - x_max: 291, - y_min: 2, - y_max: 235, - ha: 233, - o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z', - }, - ornamentTrill: { - x_min: -234, - x_max: 234, - y_min: 0, - y_max: 354, - ha: 354, - o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z', - }, - ornamentTurn: { - x_min: -292, - x_max: 292, - y_min: -134, - y_max: 134, - ha: 269, - o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z', - }, - ornamentTurnSlash: { - x_min: -292, - x_max: 292, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z', - }, - ornamentMordent: { - x_min: -278, - x_max: 278, - y_min: -202, - y_max: 186, - ha: 388, - o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z', - }, - ornamentShortTrill: { - x_min: -278, - x_max: 278, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z', - }, - ornamentTremblement: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z', - }, - ornamentPrecompAppoggTrill: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 240, - ha: 359, - o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 119, - ha: 348, - o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 186, - ha: 415, - o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: -407, - x_max: 407, - y_min: -119, - y_max: 229, - ha: 348, - o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: -413, - x_max: 413, - y_min: -119, - y_max: 222, - ha: 341, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: -413, - x_max: 413, - y_min: -202, - y_max: 222, - ha: 424, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: -413, - x_max: 413, - y_min: -222, - y_max: 119, - ha: 341, - o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z', - }, - stringsDownBow: { - x_min: -158, - x_max: 158, - y_min: 0, - y_max: 331, - ha: 331, - o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z', - }, - stringsUpBow: { - x_min: -103, - x_max: 103, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z', - }, - stringsHarmonic: { - x_min: -77, - x_max: 77, - y_min: -77, - y_max: 77, - ha: 154, - o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: -103, - x_max: 103, - y_min: -103, - y_max: 192, - ha: 296, - o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: -103, - x_max: 103, - y_min: -192, - y_max: 103, - ha: 296, - o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z', - }, - pluckedLeftHandPizzicato: { - x_min: -146, - x_max: 146, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 735, - y_min: -1, - y_max: 470, - ha: 471, - o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 409, - y_min: 61, - y_max: 470, - ha: 409, - o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z', - }, - pictChokeCymbal: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - arrowheadBlackUp: { - x_min: 11, - x_max: 239, - y_min: -6, - y_max: 269, - ha: 275, - o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', - }, - arrowheadBlackDown: { - x_min: 11, - x_max: 239, - y_min: 6, - y_max: 281, - ha: 275, - o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', - }, - }, - fontFamily: 'GonvilleSmufl', - resolution: 1000, - generatedOn: '2022-12-24T06:31:40.861Z', -}; - - -/***/ }), - -/***/ "./src/fonts/gonville_metrics.ts": -/*!***************************************!*\ - !*** ./src/fonts/gonville_metrics.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GonvilleMetrics": () => (/* binding */ GonvilleMetrics) -/* harmony export */ }); -/** - * The Gonville font was created by Simon Tatham. - * https://www.chiark.greenend.org.uk/~sgtatham/gonville/ - */ -const GonvilleMetrics = { - name: 'Gonville', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: 0, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: -40, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 50, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 40, - advanceWidth: 250, - yOffset: -402, - }, - accidentalFlat: { - leftSideBearing: -50, - advanceWidth: 208, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 20, - treble: { - line: -1.2, - shiftX: 11, - }, - }, - '8vb': { - point: 20, - treble: { - line: 6.3, - shiftX: 10, - }, - bass: { - line: 4, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 18, - treble: { - line: -0.4, - shiftX: 8, - }, - }, - '8vb': { - point: 18, - treble: { - line: 5.8, - shiftX: 6, - }, - bass: { - line: 3.5, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 17, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -9, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 3, - yOffset: -4, - stemUpYOffset: 10, - reportedWidth: 28, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 9, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 40, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - point: 40, - tupletPoint: 28, - }, - // articulation: { - // }, - tremolo: { - default: { - point: 25, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 9, - offsetXStemDown: -0.5, - }, - grace: { - point: 15, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 6.5, - offsetXStemDown: -0.5, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 0, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadBlack: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - glyphs: { - flag: { - shiftX: -0.08, - flag8thDown: { - shiftX: -0.16, - }, - flag16thDown: { - shiftX: -0.16, - }, - flag32ndDown: { - shiftX: -0.16, - shiftY: 9, - }, - flag64thDown: { - shiftX: -0.16, - shiftY: 13, - }, - flag128thDown: { - shiftX: -0.16, - shiftY: 22, - }, - flag32ndUp: { - shiftY: -9, - }, - flag64thUp: { - shiftY: -13, - }, - flag128thUp: { - shiftY: -22, - }, - }, - clef_default: { - point: 40, - '6stringTabClef': { - point: 40, - shiftY: -5.5, - }, - }, - clef_small: { - point: 32, - }, - clefNote_default: { - point: 40, - }, - clefNote_small: { - point: 32, - }, - textNote: { - point: 40, - default: {}, - ornamentTrill: { - shiftX: -5, - shiftY: 4, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.95, - }, - }, - ornament: { - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - tremolo: { - default: { - shiftY: -10, - }, - grace: { - shiftY: -5, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/leland_glyphs.ts": -/*!************************************!*\ - !*** ./src/fonts/leland_glyphs.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "LelandFont": () => (/* binding */ LelandFont) -/* harmony export */ }); -const LelandFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 491, - y_min: 0, - y_max: 279, - ha: 279, - o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', - }, - bracketBottom: { - x_min: 0, - x_max: 491, - y_min: -279, - y_max: 0, - ha: 279, - o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', - }, - segno: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 869, - ha: 869, - o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', - }, - coda: { - x_min: 0, - x_max: 745, - y_min: -113, - y_max: 735, - ha: 848, - o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', - }, - gClef: { - x_min: 0, - x_max: 640, - y_min: -666, - y_max: 1112, - ha: 1778, - o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', - }, - cClef: { - x_min: 0, - x_max: 627, - y_min: -480, - y_max: 482, - ha: 962, - o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', - }, - fClef: { - x_min: 0, - x_max: 664, - y_min: -617, - y_max: 251, - ha: 868, - o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 352, - y_min: -252, - y_max: 252, - ha: 504, - o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 439, - y_min: -743, - y_max: 746, - ha: 1489, - o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', - }, - timeSig0: { - x_min: 15, - x_max: 389, - y_min: -254, - y_max: 255, - ha: 509, - o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', - }, - timeSig1: { - x_min: 15, - x_max: 336, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', - }, - timeSig2: { - x_min: 15, - x_max: 377, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', - }, - timeSig3: { - x_min: 15, - x_max: 364, - y_min: -244, - y_max: 244, - ha: 488, - o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', - }, - timeSig4: { - x_min: 14, - x_max: 442, - y_min: -248, - y_max: 249, - ha: 497, - o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', - }, - timeSig5: { - x_min: 15, - x_max: 362, - y_min: -244, - y_max: 246, - ha: 490, - o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', - }, - timeSig6: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', - }, - timeSig7: { - x_min: 15, - x_max: 366, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', - }, - timeSig8: { - x_min: 15, - x_max: 393, - y_min: -248, - y_max: 246, - ha: 494, - o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', - }, - timeSig9: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 463, - y_min: -256, - y_max: 258, - ha: 514, - o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 463, - y_min: -376, - y_max: 388, - ha: 764, - o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 408, - y_min: -204, - y_max: 204, - ha: 408, - o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 538, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 373, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 325, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 325, - y_min: -162, - y_max: 163, - ha: 325, - o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 432, - y_min: -179, - y_max: 177, - ha: 356, - o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 223 176 l 0 -196 l 446 -196 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', - }, - noteheadSlashedWhole1: { - x_min: -75, - x_max: 448, - y_min: -211, - y_max: 214, - ha: 425, - o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', - }, - noteheadSlashedHalf1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', - }, - noteheadSlashedBlack1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', - }, - noteheadSlashedWhole2: { - x_min: -75, - x_max: 448, - y_min: -212, - y_max: 214, - ha: 426, - o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', - }, - noteheadSlashedHalf2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', - }, - noteheadSlashedBlack2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 373, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 373, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', - }, - noteheadParenthesisRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 0 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 488 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', - }, - tremolo1: { - x_min: 0, - x_max: 290, - y_min: -93, - y_max: 96, - ha: 189, - o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', - }, - flag8thUp: { - x_min: 0, - x_max: 289, - y_min: -817, - y_max: 12, - ha: 829, - o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', - }, - flag8thDown: { - x_min: 0, - x_max: 309, - y_min: -12, - y_max: 817, - ha: 829, - o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -820, - y_max: 12, - ha: 832, - o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', - }, - flag16thDown: { - x_min: 0, - x_max: 309, - y_min: -26, - y_max: 803, - ha: 829, - o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 186, - ha: 1007, - o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 309, - y_min: -216, - y_max: 803, - ha: 1019, - o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag64thUp: { - x_min: 0, - x_max: 279, - y_min: -822, - y_max: 373, - ha: 1195, - o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', - }, - flag64thDown: { - x_min: 0, - x_max: 309, - y_min: -403, - y_max: 804, - ha: 1207, - o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', - }, - flag128thUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 573, - ha: 1394, - o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', - }, - flag128thDown: { - x_min: 0, - x_max: 309, - y_min: -591, - y_max: 803, - ha: 1394, - o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 203, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 171, - y_min: -323, - y_max: 325, - ha: 648, - o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 244, - y_min: -333, - y_max: 334, - ha: 667, - o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 275, - y_min: -137, - y_max: 138, - ha: 275, - o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 371, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 193, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 180, - y_min: -316, - y_max: 320, - ha: 636, - o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 290, - y_min: -328, - y_max: 339, - ha: 667, - o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalBakiyeFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 348, - y_min: -316, - y_max: 318, - ha: 634, - o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 361, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 361, - y_min: -235, - y_max: 0, - ha: 235, - o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 316, - y_min: 0, - y_max: 46, - ha: 46, - o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 316, - y_min: -46, - y_max: 0, - ha: 46, - o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 78, - y_min: 0, - y_max: 78, - ha: 78, - o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 78, - y_min: -78, - y_max: 0, - ha: 78, - o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 127, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 127, - y_min: -248, - y_max: 0, - ha: 248, - o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', - }, - articMarcatoAbove: { - x_min: 1, - x_max: 296, - y_min: 0, - y_max: 253, - ha: 253, - o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 295, - y_min: -253, - y_max: 0, - ha: 253, - o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', - }, - fermataAbove: { - x_min: 0, - x_max: 622, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', - }, - fermataBelow: { - x_min: 0, - x_max: 622, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 623, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 623, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 842, - y_min: 0, - y_max: 549, - ha: 549, - o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 842, - y_min: -549, - y_max: 0, - ha: 549, - o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 642, - y_min: 0, - y_max: 454, - ha: 454, - o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 642, - y_min: -454, - y_max: 0, - ha: 454, - o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 321, - ha: 321, - o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', - }, - caesura: { - x_min: 0, - x_max: 380, - y_min: 0, - y_max: 490, - ha: 490, - o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 368, - y_min: 0, - y_max: 491, - ha: 491, - o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', - }, - restMaxima: { - x_min: 0, - x_max: 450, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: -11, - y_max: 262, - ha: 273, - o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', - }, - restWhole: { - x_min: 0, - x_max: 325, - y_min: -131, - y_max: 5, - ha: 136, - o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', - }, - restWholeLegerLine: { - x_min: -139, - x_max: 464, - y_min: -122, - y_max: 14, - ha: 136, - o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', - }, - restHalf: { - x_min: 0, - x_max: 325, - y_min: -4, - y_max: 132, - ha: 136, - o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', - }, - restHalfLegerLine: { - x_min: -139, - x_max: 464, - y_min: -14, - y_max: 122, - ha: 136, - o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', - }, - restQuarter: { - x_min: 0, - x_max: 235, - y_min: -331, - y_max: 401, - ha: 732, - o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', - }, - rest8th: { - x_min: 0, - x_max: 276, - y_min: -255, - y_max: 204, - ha: 459, - o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', - }, - rest16th: { - x_min: 1, - x_max: 344, - y_min: -507, - y_max: 204, - ha: 711, - o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', - }, - rest32nd: { - x_min: 0, - x_max: 391, - y_min: -507, - y_max: 460, - ha: 967, - o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -758, - y_max: 464, - ha: 1222, - o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', - }, - rest128th: { - x_min: -1, - x_max: 475, - y_min: -759, - y_max: 717, - ha: 1476, - o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', - }, - dynamicPiano: { - x_min: -95, - x_max: 317, - y_min: -163, - y_max: 263, - ha: 426, - o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', - }, - dynamicMezzo: { - x_min: -7, - x_max: 374, - y_min: -2, - y_max: 251, - ha: 253, - o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', - }, - dynamicForte: { - x_min: -137, - x_max: 334, - y_min: -193, - y_max: 421, - ha: 614, - o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', - }, - dynamicRinforzando: { - x_min: -12, - x_max: 230, - y_min: 0, - y_max: 254, - ha: 254, - o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 208, - y_min: -5, - y_max: 263, - ha: 268, - o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', - }, - dynamicZ: { - x_min: -42, - x_max: 239, - y_min: -1, - y_max: 258, - ha: 259, - o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', - }, - ornamentTrill: { - x_min: -12, - x_max: 383, - y_min: 0, - y_max: 383, - ha: 383, - o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 456, - y_min: 0, - y_max: 232, - ha: 232, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 456, - y_min: -80, - y_max: 313, - ha: 393, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 473, - y_min: -77, - y_max: 316, - ha: 393, - o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 680, - y_min: 0, - y_max: 388, - ha: 388, - o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 248, - ha: 406, - o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 321, - ha: 479, - o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 662, - y_min: 0, - y_max: 406, - ha: 406, - o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 857, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 565, - y_min: -171, - y_max: 249, - ha: 420, - o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 280, - y_min: 0, - y_max: 280, - ha: 280, - o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 315, - y_min: 0, - y_max: 293, - ha: 293, - o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 343, - ha: 343, - o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 181, - y_min: 0, - y_max: 181, - ha: 181, - o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 981, - y_min: -10, - y_max: 545, - ha: 555, - o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 242, - y_min: 0, - y_max: 164, - ha: 164, - o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 735, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1243, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', - }, - csymDiminished: { - x_min: 0, - x_max: 501, - y_min: 0, - y_max: 501, - ha: 501, - o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', - }, - csymHalfDiminished: { - x_min: -1, - x_max: 502, - y_min: -1, - y_max: 502, - ha: 503, - o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', - }, - csymAugmented: { - x_min: 1, - x_max: 321, - y_min: 90, - y_max: 410, - ha: 320, - o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 500, - y_min: 10, - y_max: 490, - ha: 480, - o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 160, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 416, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - }, - fontFamily: 'Leland', - resolution: 1000, - generatedOn: '2022-12-19T23:52:37.756Z', -}; - - -/***/ }), - -/***/ "./src/fonts/leland_metrics.ts": -/*!*************************************!*\ - !*** ./src/fonts/leland_metrics.ts ***! - \*************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "LelandMetrics": () => (/* binding */ LelandMetrics) -/* harmony export */ }); -const LelandMetrics = { - name: 'Leland', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by TimeSignature objects - shiftLine: -1, - point: 34, - // used by tuplets - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/load_all.ts": -/*!*******************************!*\ - !*** ./src/fonts/load_all.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadAllMusicFonts": () => (/* binding */ loadAllMusicFonts) -/* harmony export */ }); -/* harmony import */ var _load_bravura__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./load_bravura */ "./src/fonts/load_bravura.ts"); -/* harmony import */ var _load_custom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./load_custom */ "./src/fonts/load_custom.ts"); -/* harmony import */ var _load_gonville__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load_gonville */ "./src/fonts/load_gonville.ts"); -/* harmony import */ var _load_leland__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./load_leland */ "./src/fonts/load_leland.ts"); -/* harmony import */ var _load_petaluma__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./load_petaluma */ "./src/fonts/load_petaluma.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// vexflow.js statically bundles & preloads all of our music engraving fonts. - - - - - -// ADD_MUSIC_FONT -// import { loadXXX } from './load_xxx'; -// Populate our font "database" with all our music fonts. -function loadAllMusicFonts() { - (0,_load_bravura__WEBPACK_IMPORTED_MODULE_0__.loadBravura)(); - (0,_load_gonville__WEBPACK_IMPORTED_MODULE_2__.loadGonville)(); - (0,_load_petaluma__WEBPACK_IMPORTED_MODULE_4__.loadPetaluma)(); - (0,_load_custom__WEBPACK_IMPORTED_MODULE_1__.loadCustom)(); - (0,_load_leland__WEBPACK_IMPORTED_MODULE_3__.loadLeland)(); - // ADD_MUSIC_FONT - // loadXXX(); -} - - -/***/ }), - -/***/ "./src/fonts/load_bravura.ts": -/*!***********************************!*\ - !*** ./src/fonts/load_bravura.ts ***! - \***********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadBravura": () => (/* binding */ loadBravura) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./bravura_glyphs */ "./src/fonts/bravura_glyphs.ts"); -/* harmony import */ var _bravura_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bravura_metrics */ "./src/fonts/bravura_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base. -// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts -// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js). -// ADD_MUSIC_FONT -// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts. -// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts. -// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js -// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary. - - - -function loadBravura() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Bravura', _bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__.BravuraFont, _bravura_metrics__WEBPACK_IMPORTED_MODULE_2__.BravuraMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_custom.ts": -/*!**********************************!*\ - !*** ./src/fonts/load_custom.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadCustom": () => (/* binding */ loadCustom) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _custom_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_glyphs */ "./src/fonts/custom_glyphs.ts"); -/* harmony import */ var _custom_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./custom_metrics */ "./src/fonts/custom_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadCustom() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Custom', _custom_glyphs__WEBPACK_IMPORTED_MODULE_1__.CustomFont, _custom_metrics__WEBPACK_IMPORTED_MODULE_2__.CustomMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_gonville.ts": -/*!************************************!*\ - !*** ./src/fonts/load_gonville.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadGonville": () => (/* binding */ loadGonville) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _gonville_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gonville_glyphs */ "./src/fonts/gonville_glyphs.ts"); -/* harmony import */ var _gonville_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./gonville_metrics */ "./src/fonts/gonville_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadGonville() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Gonville', _gonville_glyphs__WEBPACK_IMPORTED_MODULE_1__.GonvilleSmuflFont, _gonville_metrics__WEBPACK_IMPORTED_MODULE_2__.GonvilleMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_leland.ts": -/*!**********************************!*\ - !*** ./src/fonts/load_leland.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadLeland": () => (/* binding */ loadLeland) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _leland_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./leland_glyphs */ "./src/fonts/leland_glyphs.ts"); -/* harmony import */ var _leland_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./leland_metrics */ "./src/fonts/leland_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadLeland() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Leland', _leland_glyphs__WEBPACK_IMPORTED_MODULE_1__.LelandFont, _leland_metrics__WEBPACK_IMPORTED_MODULE_2__.LelandMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/load_petaluma.ts": -/*!************************************!*\ - !*** ./src/fonts/load_petaluma.ts ***! - \************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadPetaluma": () => (/* binding */ loadPetaluma) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./petaluma_glyphs */ "./src/fonts/petaluma_glyphs.ts"); -/* harmony import */ var _petaluma_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petaluma_metrics */ "./src/fonts/petaluma_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -function loadPetaluma() { - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load('Petaluma', _petaluma_glyphs__WEBPACK_IMPORTED_MODULE_1__.PetalumaFont, _petaluma_metrics__WEBPACK_IMPORTED_MODULE_2__.PetalumaMetrics); -} - - -/***/ }), - -/***/ "./src/fonts/petaluma_glyphs.ts": -/*!**************************************!*\ - !*** ./src/fonts/petaluma_glyphs.ts ***! - \**************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaFont": () => (/* binding */ PetalumaFont) -/* harmony export */ }); -const PetalumaFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 508, - y_min: 0, - y_max: 370, - ha: 370, - o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', - }, - bracketBottom: { - x_min: 0, - x_max: 496, - y_min: -393, - y_max: 0, - ha: 393, - o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', - }, - barlineTick: { - x_min: 0, - x_max: 56, - y_min: 877, - y_max: 1122, - ha: 245, - o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 568, - y_min: 0, - y_max: 621, - ha: 621, - o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', - }, - segno: { - x_min: 0, - x_max: 798, - y_min: -65, - y_max: 806, - ha: 871, - o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', - }, - coda: { - x_min: 0, - x_max: 1380, - y_min: -196, - y_max: 1037, - ha: 1233, - o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', - }, - gClef: { - x_min: 0, - x_max: 664, - y_min: -559, - y_max: 1009, - ha: 1568, - o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', - }, - cClef: { - x_min: 0, - x_max: 731, - y_min: -543, - y_max: 543, - ha: 1086, - o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', - }, - fClef: { - x_min: 0, - x_max: 776, - y_min: -496, - y_max: 216, - ha: 712, - o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 379, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 438, - y_min: -768, - y_max: 767, - ha: 1535, - o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', - }, - timeSig0: { - x_min: 20, - x_max: 513, - y_min: -358, - y_max: 359, - ha: 717, - o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', - }, - timeSig1: { - x_min: 20, - x_max: 283, - y_min: -364, - y_max: 366, - ha: 730, - o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', - }, - timeSig2: { - x_min: 20, - x_max: 660, - y_min: -379, - y_max: 382, - ha: 761, - o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', - }, - timeSig3: { - x_min: 20, - x_max: 540, - y_min: -392, - y_max: 392, - ha: 784, - o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', - }, - timeSig4: { - x_min: 20, - x_max: 633, - y_min: -490, - y_max: 491, - ha: 981, - o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', - }, - timeSig5: { - x_min: 20, - x_max: 583, - y_min: -389, - y_max: 389, - ha: 778, - o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', - }, - timeSig6: { - x_min: 20, - x_max: 565, - y_min: -363, - y_max: 363, - ha: 726, - o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', - }, - timeSig7: { - x_min: 20, - x_max: 592, - y_min: -345, - y_max: 345, - ha: 690, - o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', - }, - timeSig8: { - x_min: 20, - x_max: 504, - y_min: -428, - y_max: 428, - ha: 856, - o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', - }, - timeSig9: { - x_min: 20, - x_max: 494, - y_min: -421, - y_max: 421, - ha: 842, - o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', - }, - timeSigCommon: { - x_min: 20, - x_max: 585, - y_min: -298, - y_max: 294, - ha: 592, - o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', - }, - timeSigCutCommon: { - x_min: 20, - x_max: 695, - y_min: -687, - y_max: 687, - ha: 1374, - o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 661, - y_min: -358, - y_max: 358, - ha: 716, - o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 418, - y_min: -197, - y_max: 199, - ha: 396, - o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 662, - y_min: -54, - y_max: 55, - ha: 109, - o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 274, - y_min: -723, - y_max: 725, - ha: 1448, - o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 154, - y_min: -422, - y_max: 422, - ha: 844, - o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', - }, - timeSigParensLeft: { - x_min: 1, - x_max: 400, - y_min: -728, - y_max: 728, - ha: 1456, - o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 173, - y_min: -405, - y_max: 404, - ha: 809, - o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 614, - y_min: -223, - y_max: 223, - ha: 446, - o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 380, - y_min: -186, - y_max: 165, - ha: 351, - o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 334, - y_min: -174, - y_max: 175, - ha: 349, - o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 334, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 730, - y_min: -266, - y_max: 267, - ha: 533, - o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 506, - y_min: -143, - y_max: 144, - ha: 287, - o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 421, - y_min: -146, - y_max: 151, - ha: 297, - o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 289, - y_min: -156, - y_max: 157, - ha: 313, - o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 437, - y_min: -220, - y_max: 219, - ha: 439, - o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 323, - y_min: -190, - y_max: 184, - ha: 374, - o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 309, - y_min: -179, - y_max: 179, - ha: 358, - o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 344, - y_min: -179, - y_max: 175, - ha: 354, - o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 672, - y_min: -291, - y_max: 291, - ha: 582, - o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', - }, - noteheadCircledWhole: { - x_min: -50, - x_max: 472, - y_min: -231, - y_max: 232, - ha: 463, - o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', - }, - noteheadCircledHalf: { - x_min: -50, - x_max: 393, - y_min: -175, - y_max: 175, - ha: 350, - o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', - }, - noteheadCircledBlack: { - x_min: -70, - x_max: 326, - y_min: -168, - y_max: 192, - ha: 360, - o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 474, - y_min: -209, - y_max: 211, - ha: 420, - o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 350, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 342, - y_min: -130, - y_max: 132, - ha: 262, - o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 697, - y_min: -290, - y_max: 290, - ha: 580, - o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', - }, - noteheadSlashedWhole1: { - x_min: -76, - x_max: 498, - y_min: -168, - y_max: 168, - ha: 336, - o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', - }, - noteheadSlashedHalf1: { - x_min: -79, - x_max: 471, - y_min: -184, - y_max: 184, - ha: 368, - o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', - }, - noteheadSlashedBlack1: { - x_min: -110, - x_max: 452, - y_min: -190, - y_max: 190, - ha: 380, - o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 697, - y_min: -295, - y_max: 295, - ha: 590, - o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', - }, - noteheadSlashedWhole2: { - x_min: -83, - x_max: 510, - y_min: -201, - y_max: 198, - ha: 399, - o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 454, - y_min: -188, - y_max: 188, - ha: 376, - o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', - }, - noteheadSlashedBlack2: { - x_min: -84, - x_max: 405, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 429, - y_min: -221, - y_max: 221, - ha: 442, - o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 271, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 295, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 310, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', - }, - noteheadParenthesis: { - x_min: -70, - x_max: 329, - y_min: -196, - y_max: 201, - ha: 397, - o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', - }, - noteheadParenthesisRight: { - x_min: -30, - x_max: 82, - y_min: -199, - y_max: 206, - ha: 405, - o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 106, - y_min: -197, - y_max: 197, - ha: 394, - o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 328, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 391, - y_min: -142, - y_max: 142, - ha: 284, - o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 398, - y_min: -139, - y_max: 140, - ha: 279, - o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 334, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', - }, - augmentationDot: { - x_min: 0, - x_max: 96, - y_min: -57, - y_max: 57, - ha: 114, - o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', - }, - tremolo1: { - x_min: -158, - x_max: 156, - y_min: -88, - y_max: 88, - ha: 176, - o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', - }, - flag8thUp: { - x_min: 0, - x_max: 261, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', - }, - flag8thDown: { - x_min: 0, - x_max: 261, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', - }, - flag16thUp: { - x_min: 0, - x_max: 327, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', - }, - flag16thDown: { - x_min: 0, - x_max: 327, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 268, - y_min: -849, - y_max: 149, - ha: 999, - o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', - }, - flag32ndDown: { - x_min: -3, - x_max: 268, - y_min: -169, - y_max: 829, - ha: 999, - o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', - }, - flag64thUp: { - x_min: -4, - x_max: 282, - y_min: -824, - y_max: 347, - ha: 1171, - o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', - }, - flag64thDown: { - x_min: -5, - x_max: 281, - y_min: -375, - y_max: 796, - ha: 1171, - o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', - }, - flag128thUp: { - x_min: 0, - x_max: 252, - y_min: -804, - y_max: 530, - ha: 1334, - o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', - }, - flag128thDown: { - x_min: -1, - x_max: 252, - y_min: -580, - y_max: 754, - ha: 1334, - o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', - }, - accidentalFlat: { - x_min: 1, - x_max: 209, - y_min: -208, - y_max: 472, - ha: 680, - o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 214, - y_min: -456, - y_max: 462, - ha: 918, - o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', - }, - accidentalSharp: { - x_min: -22, - x_max: 390, - y_min: -384, - y_max: 383, - ha: 767, - o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 287, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 359, - y_min: -220, - y_max: 446, - ha: 666, - o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 130, - y_min: -270, - y_max: 268, - ha: 538, - o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 139, - y_min: -275, - y_max: 277, - ha: 552, - o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 208, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: -23, - x_max: 388, - y_min: -373, - y_max: 445, - ha: 818, - o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 2, - x_max: 287, - y_min: -248, - y_max: 432, - ha: 680, - o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', - }, - accidentalBakiyeFlat: { - x_min: 2, - x_max: 287, - y_min: -236, - y_max: 444, - ha: 680, - o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 359, - y_min: -420, - y_max: 343, - ha: 763, - o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 303, - y_min: -462, - y_max: 180, - ha: 642, - o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', - }, - accidentalSori: { - x_min: 0, - x_max: 434, - y_min: -295, - y_max: 325, - ha: 620, - o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 425, - y_min: 0, - y_max: 326, - ha: 326, - o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 425, - y_min: -326, - y_max: 0, - ha: 326, - o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 471, - y_min: 0, - y_max: 56, - ha: 56, - o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 471, - y_min: -59, - y_max: -3, - ha: 56, - o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', - }, - articStaccatoAbove: { - x_min: 1, - x_max: 112, - y_min: 0, - y_max: 156, - ha: 156, - o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', - }, - articStaccatoBelow: { - x_min: 1, - x_max: 112, - y_min: -156, - y_max: 0, - ha: 156, - o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 139, - y_min: 0, - y_max: 411, - ha: 411, - o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 139, - y_min: -411, - y_max: 0, - ha: 411, - o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', - }, - articMarcatoAbove: { - x_min: 0, - x_max: 396, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 396, - y_min: -328, - y_max: 0, - ha: 328, - o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', - }, - fermataAbove: { - x_min: 0, - x_max: 472, - y_min: 2, - y_max: 454, - ha: 452, - o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', - }, - fermataBelow: { - x_min: 0, - x_max: 519, - y_min: -430, - y_max: -1, - ha: 429, - o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 591, - y_min: -6, - y_max: 337, - ha: 343, - o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 602, - y_min: -335, - y_max: 7, - ha: 342, - o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: -14, - y_max: 437, - ha: 451, - o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 686, - y_min: -427, - y_max: 30, - ha: 457, - o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 711, - y_min: -31, - y_max: 496, - ha: 527, - o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 697, - y_min: -475, - y_max: 13, - ha: 488, - o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 545, - y_min: -18, - y_max: 348, - ha: 366, - o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 565, - y_min: -335, - y_max: 10, - ha: 345, - o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 148, - y_min: 0, - y_max: 275, - ha: 275, - o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', - }, - breathMarkUpbow: { - x_min: 0, - x_max: 254, - y_min: 0, - y_max: 595, - ha: 595, - o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', - }, - caesura: { - x_min: 0, - x_max: 566, - y_min: 0, - y_max: 562, - ha: 563, - o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 386, - y_min: -10, - y_max: 584, - ha: 594, - o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', - }, - restMaxima: { - x_min: 0, - x_max: 366, - y_min: -255, - y_max: 255, - ha: 510, - o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 249, - ha: 249, - o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', - }, - restWhole: { - x_min: 1, - x_max: 500, - y_min: -120, - y_max: 14, - ha: 134, - o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', - }, - restWholeLegerLine: { - x_min: -197, - x_max: 685, - y_min: -157, - y_max: 29, - ha: 186, - o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', - }, - restHalf: { - x_min: 0, - x_max: 518, - y_min: 0, - y_max: 162, - ha: 162, - o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', - }, - restHalfLegerLine: { - x_min: -120, - x_max: 448, - y_min: -20, - y_max: 143, - ha: 163, - o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', - }, - restQuarter: { - x_min: 0, - x_max: 263, - y_min: -415, - y_max: 415, - ha: 830, - o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', - }, - rest8th: { - x_min: 0, - x_max: 289, - y_min: -260, - y_max: 261, - ha: 521, - o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', - }, - rest16th: { - x_min: 0, - x_max: 333, - y_min: -328, - y_max: 244, - ha: 572, - o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', - }, - rest32nd: { - x_min: 0, - x_max: 347, - y_min: -498, - y_max: 483, - ha: 981, - o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', - }, - rest64th: { - x_min: 0, - x_max: 428, - y_min: -720, - y_max: 474, - ha: 1194, - o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', - }, - rest128th: { - x_min: 1, - x_max: 491, - y_min: -711, - y_max: 719, - ha: 1430, - o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', - }, - dynamicPiano: { - x_min: -49, - x_max: 327, - y_min: -142, - y_max: 515, - ha: 657, - o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', - }, - dynamicMezzo: { - x_min: -18, - x_max: 559, - y_min: -50, - y_max: 365, - ha: 415, - o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', - }, - dynamicForte: { - x_min: -144, - x_max: 311, - y_min: -115, - y_max: 504, - ha: 619, - o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', - }, - dynamicRinforzando: { - x_min: -75, - x_max: 322, - y_min: -90, - y_max: 325, - ha: 415, - o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 296, - y_min: 0, - y_max: 379, - ha: 379, - o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', - }, - dynamicZ: { - x_min: -43, - x_max: 331, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', - }, - ornamentTrill: { - x_min: 1, - x_max: 551, - y_min: -18, - y_max: 539, - ha: 557, - o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 574, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 574, - y_min: -106, - y_max: 405, - ha: 511, - o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 700, - y_min: 0, - y_max: 497, - ha: 497, - o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 747, - y_min: 0, - y_max: 243, - ha: 243, - o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 982, - y_min: 0, - y_max: 224, - ha: 224, - o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1066, - y_min: -50, - y_max: 533, - ha: 583, - o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 1088, - y_min: -380, - y_max: 252, - ha: 632, - o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1185, - y_min: -380, - y_max: 465, - ha: 845, - o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 1003, - y_min: -20, - y_max: 521, - ha: 541, - o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1246, - y_min: -30, - y_max: 296, - ha: 326, - o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1226, - y_min: -237, - y_max: 436, - ha: 673, - o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 833, - y_min: -309, - y_max: 319, - ha: 628, - o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', - }, - brassScoop: { - x_min: 0, - x_max: 312, - y_min: -390, - y_max: 28, - ha: 418, - o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 476, - y_min: -50, - y_max: 333, - ha: 383, - o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', - }, - brassFallLipShort: { - x_min: 0, - x_max: 298, - y_min: -344, - y_max: 65, - ha: 409, - o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 807, - y_min: 0, - y_max: 838, - ha: 838, - o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 791, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', - }, - brassBend: { - x_min: 0, - x_max: 381, - y_min: 0, - y_max: 367, - ha: 367, - o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 274, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', - }, - brassMuteOpen: { - x_min: 1, - x_max: 313, - y_min: 0, - y_max: 309, - ha: 309, - o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', - }, - brassFlip: { - x_min: 0, - x_max: 402, - y_min: 0, - y_max: 361, - ha: 361, - o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 646, - y_min: 0, - y_max: 212, - ha: 212, - o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', - }, - brassSmear: { - x_min: 0, - x_max: 334, - y_min: 0, - y_max: 151, - ha: 151, - o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 366, - ha: 366, - o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 219, - y_min: 0, - y_max: 489, - ha: 489, - o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 202, - ha: 202, - o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 201, - y_min: 0, - y_max: 325, - ha: 325, - o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 211, - y_min: 0, - y_max: 307, - ha: 307, - o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 271, - y_min: 0, - y_max: 284, - ha: 284, - o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 944, - y_min: -13, - y_max: 550, - ha: 563, - o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 437, - y_min: 0, - y_max: 461, - ha: 461, - o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 147, - y_min: 0, - y_max: 242, - ha: 242, - o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 300, - y_min: 0, - y_max: 176, - ha: 176, - o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', - }, - arpeggiatoUp: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 1459, - ha: 1459, - o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', - }, - arpeggiatoDown: { - x_min: 0, - x_max: 218, - y_min: 0, - y_max: 1440, - ha: 1440, - o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 599, - y_min: -250, - y_max: 175, - ha: 425, - o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 775, - y_min: -247, - y_max: 363, - ha: 610, - o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1374, - y_min: -304, - y_max: 304, - ha: 608, - o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 630, - y_min: -225, - y_max: 265, - ha: 490, - o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', - }, - csymDiminished: { - x_min: 0, - x_max: 506, - y_min: 0, - y_max: 500, - ha: 500, - o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', - }, - csymHalfDiminished: { - x_min: -32, - x_max: 496, - y_min: -33, - y_max: 492, - ha: 525, - o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', - }, - csymAugmented: { - x_min: 0, - x_max: 530, - y_min: 0, - y_max: 539, - ha: 539, - o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 593, - y_min: 0, - y_max: 569, - ha: 569, - o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', - }, - csymMinor: { - x_min: 0, - x_max: 482, - y_min: 193, - y_max: 265, - ha: 72, - o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', - }, - csymParensLeftTall: { - x_min: 0, - x_max: 185, - y_min: 0, - y_max: 1034, - ha: 1034, - o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', - }, - csymParensRightTall: { - x_min: -40, - x_max: 189, - y_min: 0, - y_max: 1058, - ha: 1058, - o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 328, - y_min: 2, - y_max: 807, - ha: 805, - o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 829, - ha: 829, - o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 116, - y_min: 0, - y_max: 934, - ha: 934, - o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', - }, - csymParensRightVeryTall: { - x_min: -20, - x_max: 111, - y_min: 0, - y_max: 1009, - ha: 1009, - o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 990, - y_min: -27, - y_max: 1028, - ha: 1054, - o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 208, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 335, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 298, - y_min: -218, - y_max: 218, - ha: 436, - o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 284, - y_min: -163, - y_max: 163, - ha: 326, - o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', - }, - }, - fontFamily: 'Petaluma', - resolution: 1000, - generatedOn: '2022-12-18T09:07:50.817Z', -}; - - -/***/ }), - -/***/ "./src/fonts/petaluma_metrics.ts": -/*!***************************************!*\ - !*** ./src/fonts/petaluma_metrics.ts ***! - \***************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaMetrics": () => (/* binding */ PetalumaMetrics) -/* harmony export */ }); -/** - * The Petaluma font was created by Steinberg Media. - * https://github.com/steinbergmedia/petaluma - */ -const PetalumaMetrics = { - name: 'Petaluma', - smufl: true, - stave: { - padding: 15, - endPaddingMax: 15, - endPaddingMin: 7, - unalignedNotePadding: 12, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -150, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['L'], - spacing: 20, - superSubRatio: 0.73, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -95, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: -25, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 150, - }, - csymParensRightTall: { - leftSideBearing: 40, - advanceWidth: 189, - yOffset: 150, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 210, - yOffset: 250, - }, - csymParensRightVeryTall: { - leftSideBearing: -100, - advanceWidth: 111, - yOffset: 250, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 100, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 0, - advanceWidth: 425, - yOffset: -422, - }, - accidentalFlat: { - leftSideBearing: -10, - advanceWidth: 228, - yOffset: -284, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 26, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 28, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 26, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 4, - yOffset: -8, - stemUpYOffset: 27, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 6, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 30, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - // These are for numeric digits, such as in time signatures - digits: { - // used by timesig - shiftLine: -1, - point: 22, - // used by tuplets - tupletPoint: 16, - shiftY: -2, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 13, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 8, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - displacedShiftX: -2, - }, - stem: { - heightAdjustmentForFlag: -3, - // These are stem (Y) offsets to the note heads. To shift the - // noteheads (x-position) themselves, see glyphs.notehead.custom. - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemDown: 1.8, - offsetYBaseStemUp: -1.8, - }, - noteheadBlack: { - offsetYBaseStemDown: 2, - offsetYBaseStemUp: -2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 20, - }, - // Values under here are used by the Glyph class to reposition and rescale - // glyphs based on their category. This should be the first stop for - // custom font glyph repositioning. - // - // The glyph loader first looks up a specific set of settings based on the - // glyph code, and if not found, uses the defaults from the category. See - // glyphs.textNote for an example of this. - // - // Details in Glyph.lookupFontMetrics. - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.77, - flag16thUp: { - shiftX: -0.75, - }, - flag32ndUp: { - shiftX: -0.85, - }, - flag64thUp: { - shiftX: -1.55, - }, - flag128thUp: { - shiftX: -1.3, - }, - flag16thDown: { - shiftX: -0.75, - }, - flag32ndDown: { - shiftX: -0.76, - }, - flag64thDown: { - shiftX: -1.5, - }, - flag128thDown: { - shiftX: -1.2, - }, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -10, - shiftY: 8, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - noteheadBlackStemUp: { - shiftX: 0.5, - }, - noteheadHalfStemUp: { - shiftX: 0.725, - }, - noteheadWholeStemUp: { - shiftX: 1, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.95, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.7, - }, - csymMajorSeventh: { - scale: 0.8, - }, - accidentalSharp: { - scale: 0.7, - }, - accidentalFlat: { - scale: 0.8, - }, - }, - }, -}; - - -/***/ }), - -/***/ "./src/fonts/petalumascript_glyphs.ts": -/*!********************************************!*\ - !*** ./src/fonts/petalumascript_glyphs.ts ***! - \********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PetalumaScriptFont": () => (/* binding */ PetalumaScriptFont) -/* harmony export */ }); -const PetalumaScriptFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 250, - y_min: 0, - y_max: 500, - ha: 500, - leftSideBearing: 0, - advanceWidth: 250, - }, - '0': { - x_min: 33, - x_max: 534, - y_min: -13, - y_max: 751, - ha: 764, - leftSideBearing: 33, - advanceWidth: 570, - }, - '1': { - x_min: 48, - x_max: 235, - y_min: -17, - y_max: 734, - ha: 751, - leftSideBearing: 48, - advanceWidth: 286, - }, - '2': { - x_min: 56, - x_max: 571, - y_min: -19, - y_max: 741, - ha: 760, - leftSideBearing: 56, - advanceWidth: 626, - }, - '3': { - x_min: 50, - x_max: 528, - y_min: -7, - y_max: 731, - ha: 738, - leftSideBearing: 50, - advanceWidth: 589, - }, - '4': { - x_min: 38, - x_max: 564, - y_min: -13, - y_max: 743, - ha: 756, - leftSideBearing: 38, - advanceWidth: 614, - }, - '5': { - x_min: 42, - x_max: 601, - y_min: -34, - y_max: 743, - ha: 777, - leftSideBearing: 42, - advanceWidth: 648, - }, - '6': { - x_min: 47, - x_max: 606, - y_min: -16, - y_max: 743, - ha: 759, - leftSideBearing: 47, - advanceWidth: 667, - }, - '7': { - x_min: 47, - x_max: 567, - y_min: 5, - y_max: 739, - ha: 734, - leftSideBearing: 0, - advanceWidth: 615, - }, - '8': { - x_min: 40, - x_max: 541, - y_min: -15, - y_max: 752, - ha: 767, - leftSideBearing: 40, - advanceWidth: 585, - }, - '9': { - x_min: 40, - x_max: 537, - y_min: -52, - y_max: 736, - ha: 788, - leftSideBearing: 40, - advanceWidth: 592, - }, - '!': { - x_min: 49, - x_max: 180, - y_min: -7, - y_max: 761, - ha: 768, - leftSideBearing: 49, - advanceWidth: 230, - }, - '"': { - x_min: 39, - x_max: 304, - y_min: 596, - y_max: 804, - ha: 208, - leftSideBearing: 39, - advanceWidth: 353, - }, - '#': { - x_min: 33, - x_max: 599, - y_min: -8, - y_max: 765, - ha: 773, - leftSideBearing: 33, - advanceWidth: 648, - }, - $: { - x_min: 53, - x_max: 495, - y_min: -111, - y_max: 823, - ha: 934, - leftSideBearing: 53, - advanceWidth: 560, - }, - '%': { - x_min: 35, - x_max: 656, - y_min: -128, - y_max: 808, - ha: 936, - leftSideBearing: 35, - advanceWidth: 711, - }, - '&': { - x_min: 53, - x_max: 441, - y_min: -3, - y_max: 753, - ha: 756, - leftSideBearing: 53, - advanceWidth: 500, - }, - "'": { - x_min: 43, - x_max: 161, - y_min: 590, - y_max: 811, - ha: 221, - leftSideBearing: 43, - advanceWidth: 217, - }, - '(': { - x_min: 41, - x_max: 311, - y_min: -36, - y_max: 845, - ha: 881, - leftSideBearing: 41, - advanceWidth: 308, - }, - ')': { - x_min: -8, - x_max: 257, - y_min: -21, - y_max: 852, - ha: 873, - leftSideBearing: -8, - advanceWidth: 280, - }, - '*': { - x_min: 59, - x_max: 539, - y_min: 175, - y_max: 589, - ha: 414, - leftSideBearing: 59, - advanceWidth: 601, - }, - '+': { - x_min: 33, - x_max: 361, - y_min: 180, - y_max: 587, - ha: 407, - leftSideBearing: 33, - advanceWidth: 400, - }, - ',': { - x_min: 15, - x_max: 176, - y_min: -129, - y_max: 92, - ha: 221, - leftSideBearing: 15, - advanceWidth: 205, - }, - '-': { - x_min: 40, - x_max: 380, - y_min: 317, - y_max: 452, - ha: 135, - leftSideBearing: 40, - advanceWidth: 422, - }, - '.': { - x_min: 48, - x_max: 185, - y_min: -56, - y_max: 84, - ha: 140, - leftSideBearing: 48, - advanceWidth: 227, - }, - '/': { - x_min: -58, - x_max: 654, - y_min: -122, - y_max: 844, - ha: 966, - leftSideBearing: -58, - advanceWidth: 626, - }, - ':': { - x_min: 65, - x_max: 225, - y_min: 97, - y_max: 536, - ha: 439, - leftSideBearing: 65, - advanceWidth: 302, - }, - ';': { - x_min: 13, - x_max: 295, - y_min: -139, - y_max: 536, - ha: 675, - leftSideBearing: 13, - advanceWidth: 334, - }, - '<': { - x_min: 28, - x_max: 438, - y_min: -1, - y_max: 607, - ha: 608, - leftSideBearing: 28, - advanceWidth: 475, - }, - '=': { - x_min: 40, - x_max: 383, - y_min: 199.9598640852289, - y_max: 541, - ha: 341.0401359147711, - leftSideBearing: 40, - advanceWidth: 422, - }, - '>': { - x_min: 35, - x_max: 421, - y_min: 28, - y_max: 632, - ha: 604, - leftSideBearing: 35, - advanceWidth: 466, - }, - '?': { - x_min: 45, - x_max: 548, - y_min: -17, - y_max: 767, - ha: 784, - leftSideBearing: 45, - advanceWidth: 592, - }, - '@': { - x_min: 51, - x_max: 730, - y_min: -78, - y_max: 753, - ha: 831, - leftSideBearing: 51, - advanceWidth: 781, - }, - A: { - x_min: 37, - x_max: 554, - y_min: -4, - y_max: 746, - ha: 750, - leftSideBearing: 37, - advanceWidth: 617, - }, - B: { - x_min: 37, - x_max: 532, - y_min: 3, - y_max: 783, - ha: 780, - leftSideBearing: 37, - advanceWidth: 579, - }, - C: { - x_min: 37, - x_max: 583, - y_min: -3, - y_max: 775, - ha: 778, - leftSideBearing: 37, - advanceWidth: 623, - }, - D: { - x_min: 50, - x_max: 530, - y_min: -15, - y_max: 749, - ha: 764, - leftSideBearing: 50, - advanceWidth: 579, - }, - E: { - x_min: 45, - x_max: 531, - y_min: -1, - y_max: 743, - ha: 744, - leftSideBearing: 45, - advanceWidth: 585, - }, - F: { - x_min: 45, - x_max: 459, - y_min: 23, - y_max: 727, - ha: 704, - leftSideBearing: 45, - advanceWidth: 510, - }, - G: { - x_min: 31, - x_max: 577, - y_min: -8, - y_max: 733, - ha: 741, - leftSideBearing: 31, - advanceWidth: 611, - }, - H: { - x_min: 37, - x_max: 493, - y_min: -22, - y_max: 758, - ha: 780, - leftSideBearing: 37, - advanceWidth: 535, - }, - I: { - x_min: 47, - x_max: 501, - y_min: -3, - y_max: 731, - ha: 734, - leftSideBearing: 47, - advanceWidth: 541, - }, - J: { - x_min: 33, - x_max: 531, - y_min: -23, - y_max: 725, - ha: 748, - leftSideBearing: 33, - advanceWidth: 573, - }, - K: { - x_min: 43, - x_max: 505, - y_min: -10, - y_max: 740, - ha: 750, - leftSideBearing: 43, - advanceWidth: 560, - }, - L: { - x_min: 49, - x_max: 457, - y_min: -2, - y_max: 746, - ha: 748, - leftSideBearing: 49, - advanceWidth: 510, - }, - M: { - x_min: 35, - x_max: 699, - y_min: 1, - y_max: 744, - ha: 743, - leftSideBearing: 35, - advanceWidth: 743, - }, - N: { - x_min: 34, - x_max: 533, - y_min: -17, - y_max: 761, - ha: 778, - leftSideBearing: 34, - advanceWidth: 579, - }, - O: { - x_min: 41, - x_max: 608, - y_min: -5, - y_max: 735, - ha: 740, - leftSideBearing: 41, - advanceWidth: 667, - }, - P: { - x_min: 53, - x_max: 451, - y_min: -18, - y_max: 735, - ha: 753, - leftSideBearing: 53, - advanceWidth: 497, - }, - Q: { - x_min: 40, - x_max: 599, - y_min: -67, - y_max: 744, - ha: 811, - leftSideBearing: 40, - advanceWidth: 648, - }, - R: { - x_min: 39, - x_max: 487, - y_min: 16, - y_max: 735, - ha: 719, - leftSideBearing: 39, - advanceWidth: 535, - }, - S: { - x_min: 35, - x_max: 552, - y_min: -47, - y_max: 708, - ha: 755, - leftSideBearing: 35, - advanceWidth: 604, - }, - T: { - x_min: 26, - x_max: 656, - y_min: -13, - y_max: 718, - ha: 731, - leftSideBearing: 26, - advanceWidth: 705, - }, - U: { - x_min: 41, - x_max: 518, - y_min: -20, - y_max: 748, - ha: 768, - leftSideBearing: 41, - advanceWidth: 567, - }, - V: { - x_min: 47, - x_max: 509, - y_min: -26, - y_max: 744, - ha: 770, - leftSideBearing: 47, - advanceWidth: 567, - }, - W: { - x_min: 44, - x_max: 789, - y_min: -35, - y_max: 720, - ha: 755, - leftSideBearing: 44, - advanceWidth: 833, - }, - X: { - x_min: 63, - x_max: 635, - y_min: -10, - y_max: 745, - ha: 755, - leftSideBearing: 63, - advanceWidth: 680, - }, - Y: { - x_min: 43, - x_max: 503, - y_min: -21, - y_max: 734, - ha: 755, - leftSideBearing: 43, - advanceWidth: 541, - }, - Z: { - x_min: 42, - x_max: 584, - y_min: -10, - y_max: 739, - ha: 749, - leftSideBearing: 42, - advanceWidth: 629, - }, - '[': { - x_min: 46, - x_max: 346, - y_min: -150, - y_max: 884, - ha: 1034, - leftSideBearing: 46, - advanceWidth: 291, - }, - '\\': { - x_min: 20, - x_max: 616, - y_min: -100, - y_max: 797, - ha: 897, - leftSideBearing: 20, - advanceWidth: 645, - }, - ']': { - x_min: -76, - x_max: 226, - y_min: -150, - y_max: 881, - ha: 1031, - leftSideBearing: -76, - advanceWidth: 297, - }, - '^': { - x_min: 43, - x_max: 437, - y_min: 517, - y_max: 812, - ha: 295, - leftSideBearing: 43, - advanceWidth: 478, - }, - _: { - x_min: 29, - x_max: 563, - y_min: -110, - y_max: -1, - ha: 109, - leftSideBearing: 29, - advanceWidth: 598, - }, - '`': { - x_min: 54, - x_max: 321, - y_min: 540, - y_max: 747, - ha: 207, - leftSideBearing: 54, - advanceWidth: 368, - }, - a: { - x_min: 20, - x_max: 447, - y_min: -17, - y_max: 495, - ha: 512, - leftSideBearing: 20, - advanceWidth: 494, - }, - b: { - x_min: 37, - x_max: 466, - y_min: -27, - y_max: 770, - ha: 797, - leftSideBearing: 37, - advanceWidth: 510, - }, - c: { - x_min: 35, - x_max: 456, - y_min: -9, - y_max: 507, - ha: 516, - leftSideBearing: 35, - advanceWidth: 460, - }, - d: { - x_min: 45, - x_max: 520, - y_min: -15, - y_max: 764, - ha: 779, - leftSideBearing: 45, - advanceWidth: 560, - }, - e: { - x_min: 33, - x_max: 370, - y_min: -5, - y_max: 501, - ha: 506, - leftSideBearing: 33, - advanceWidth: 397, - }, - f: { - x_min: 35, - x_max: 411, - y_min: -13, - y_max: 695, - ha: 708, - leftSideBearing: 35, - advanceWidth: 453, - }, - g: { - x_min: 33, - x_max: 551, - y_min: -257, - y_max: 505, - ha: 762, - leftSideBearing: 33, - advanceWidth: 611, - }, - h: { - x_min: 32, - x_max: 458, - y_min: -29, - y_max: 743, - ha: 772, - leftSideBearing: 32, - advanceWidth: 491, - }, - i: { - x_min: 45, - x_max: 167, - y_min: -13, - y_max: 631, - ha: 644, - leftSideBearing: 45, - advanceWidth: 220, - }, - j: { - x_min: -127, - x_max: 261, - y_min: -231, - y_max: 601, - ha: 832, - leftSideBearing: -127, - advanceWidth: 308, - }, - k: { - x_min: 39, - x_max: 443, - y_min: -3, - y_max: 700, - ha: 703, - leftSideBearing: 39, - advanceWidth: 497, - }, - l: { - x_min: 58, - x_max: 168, - y_min: -8, - y_max: 686, - ha: 694, - leftSideBearing: 58, - advanceWidth: 227, - }, - m: { - x_min: 39, - x_max: 688, - y_min: -14, - y_max: 501, - ha: 515, - leftSideBearing: 39, - advanceWidth: 718, - }, - n: { - x_min: 45, - x_max: 491, - y_min: -32, - y_max: 512, - ha: 544, - leftSideBearing: 45, - advanceWidth: 541, - }, - o: { - x_min: 41, - x_max: 424, - y_min: -12, - y_max: 493, - ha: 505, - leftSideBearing: 41, - advanceWidth: 447, - }, - p: { - x_min: 25, - x_max: 529, - y_min: -260, - y_max: 500, - ha: 760, - leftSideBearing: 25, - advanceWidth: 573, - }, - q: { - x_min: 53, - x_max: 603, - y_min: -235, - y_max: 514, - ha: 749, - leftSideBearing: 53, - advanceWidth: 623, - }, - r: { - x_min: 32, - x_max: 407, - y_min: -7, - y_max: 492, - ha: 499, - leftSideBearing: 32, - advanceWidth: 460, - }, - s: { - x_min: 49, - x_max: 416, - y_min: -12, - y_max: 519, - ha: 531, - leftSideBearing: 49, - advanceWidth: 460, - }, - t: { - x_min: 32, - x_max: 442, - y_min: -5, - y_max: 684, - ha: 689, - leftSideBearing: 32, - advanceWidth: 469, - }, - u: { - x_min: 41, - x_max: 487, - y_min: -5, - y_max: 507, - ha: 512, - leftSideBearing: 41, - advanceWidth: 510, - }, - v: { - x_min: 16, - x_max: 441, - y_min: -20, - y_max: 542, - ha: 562, - leftSideBearing: 16, - advanceWidth: 456, - }, - w: { - x_min: 39, - x_max: 639, - y_min: -22, - y_max: 505, - ha: 527, - leftSideBearing: 39, - advanceWidth: 661, - }, - x: { - x_min: 15, - x_max: 505, - y_min: -39, - y_max: 539, - ha: 578, - leftSideBearing: 15, - advanceWidth: 541, - }, - y: { - x_min: -98, - x_max: 501, - y_min: -242, - y_max: 511, - ha: 753, - leftSideBearing: -98, - advanceWidth: 548, - }, - z: { - x_min: 27, - x_max: 479, - y_min: -3, - y_max: 494, - ha: 497, - leftSideBearing: 27, - advanceWidth: 494, - }, - '{': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '|': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '}': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '~': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - }, - fontFamily: 'PetalumaScript', - resolution: 1000, - generatedOn: '2020-06-14T18:33:25.407Z', -}; - - -/***/ }), - -/***/ "./src/fonts/robotoslab_glyphs.ts": -/*!****************************************!*\ - !*** ./src/fonts/robotoslab_glyphs.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RobotoSlabFont": () => (/* binding */ RobotoSlabFont) -/* harmony export */ }); -const RobotoSlabFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 509, - y_min: 0, - y_max: 2000, - ha: 2000, - leftSideBearing: 0, - advanceWidth: 509, - }, - '0': { - x_min: 121, - x_max: 1048, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1168, - }, - '1': { - x_min: 117, - x_max: 767, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 117, - advanceWidth: 844, - }, - '2': { - x_min: 75.8474576645637, - x_max: 1040, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 75, - advanceWidth: 1131, - }, - '3': { - x_min: 74.85365853658536, - x_max: 994, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1106, - }, - '4': { - x_min: 63, - x_max: 1114, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1187, - }, - '5': { - x_min: 96.8448275474953, - x_max: 982, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 96, - advanceWidth: 1081, - }, - '6': { - x_min: 121, - x_max: 1067, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1144, - }, - '7': { - x_min: 76, - x_max: 1060, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: -30, - advanceWidth: 1128, - }, - '8': { - x_min: 92, - x_max: 1039, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 92, - advanceWidth: 1131, - }, - '9': { - x_min: 84, - x_max: 1026, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 84, - advanceWidth: 1154, - }, - '!': { - x_min: 143, - x_max: 340, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 143, - advanceWidth: 483, - }, - '"': { - x_min: 166, - x_max: 634, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 770, - }, - '#': { - x_min: 63, - x_max: 1179, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1246, - }, - $: { - x_min: 81.92156915727656, - x_max: 1012, - y_min: -208, - y_max: 1693, - ha: 1901, - leftSideBearing: 81, - advanceWidth: 1110, - }, - '%': { - x_min: 77, - x_max: 1384, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 77, - advanceWidth: 1460, - }, - '&': { - x_min: 74, - x_max: 1242, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1289, - }, - "'": { - x_min: 166, - x_max: 324, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 460, - }, - '(': { - x_min: 114, - x_max: 650, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 114, - advanceWidth: 662, - }, - ')': { - x_min: 11, - x_max: 547, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 11, - advanceWidth: 654, - }, - '*': { - x_min: 66, - x_max: 893, - y_min: 607, - y_max: 1456, - ha: 849, - leftSideBearing: 66, - advanceWidth: 958, - }, - '+': { - x_min: 73, - x_max: 1071, - y_min: 146, - y_max: 1206, - ha: 1060, - leftSideBearing: 73, - advanceWidth: 1145, - }, - ',': { - x_min: 23, - x_max: 315, - y_min: -311, - y_max: 221, - ha: 532, - leftSideBearing: 23, - advanceWidth: 404, - }, - '-': { - x_min: 154, - x_max: 643, - y_min: 538, - y_max: 692, - ha: 154, - leftSideBearing: 154, - advanceWidth: 797, - }, - '.': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 202, - ha: 202, - leftSideBearing: 145, - advanceWidth: 493, - }, - '/': { - x_min: 0, - x_max: 774, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 0, - advanceWidth: 824, - }, - ':': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 145, - advanceWidth: 419, - }, - ';': { - x_min: 53, - x_max: 345, - y_min: -311, - y_max: 1082, - ha: 1393, - leftSideBearing: 53, - advanceWidth: 424, - }, - '<': { - x_min: 76, - x_max: 892, - y_min: 107, - y_max: 1013, - ha: 906, - leftSideBearing: 76, - advanceWidth: 1017, - }, - '=': { - x_min: 147, - x_max: 981, - y_min: 407, - y_max: 987, - ha: 580, - leftSideBearing: 147, - advanceWidth: 1127, - }, - '>': { - x_min: 125, - x_max: 980, - y_min: 87, - y_max: 993, - ha: 906, - leftSideBearing: 125, - advanceWidth: 1060, - }, - '?': { - x_min: 65.92660602419838, - x_max: 890, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 65, - advanceWidth: 953, - }, - '@': { - x_min: 84.3592218305664, - x_max: 1705.2346925277395, - y_min: -453, - y_max: 1431, - ha: 1884, - leftSideBearing: 84, - advanceWidth: 1821, - }, - A: { - x_min: 70, - x_max: 1463, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 70, - advanceWidth: 1533, - }, - B: { - x_min: 81, - x_max: 1253, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1322, - }, - C: { - x_min: 80, - x_max: 1174, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1290, - }, - D: { - x_min: 81, - x_max: 1291, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1356, - }, - E: { - x_min: 81, - x_max: 1190, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1306, - }, - F: { - x_min: 81, - x_max: 1176, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1256, - }, - G: { - x_min: 80, - x_max: 1226, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1346, - }, - H: { - x_min: 81, - x_max: 1497, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1578, - }, - I: { - x_min: 81, - x_max: 604, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 685, - }, - J: { - x_min: 60, - x_max: 1100, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 60, - advanceWidth: 1169, - }, - K: { - x_min: 81, - x_max: 1427, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1501, - }, - L: { - x_min: 81, - x_max: 1130, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1210, - }, - M: { - x_min: 94, - x_max: 1888, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 94, - advanceWidth: 1982, - }, - N: { - x_min: 83, - x_max: 1509, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 83, - advanceWidth: 1592, - }, - O: { - x_min: 70, - x_max: 1281, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 70, - advanceWidth: 1351, - }, - P: { - x_min: 81, - x_max: 1242, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1297, - }, - Q: { - x_min: 70, - x_max: 1348, - y_min: -245, - y_max: 1477, - ha: 1722, - leftSideBearing: 70, - advanceWidth: 1376, - }, - R: { - x_min: 81, - x_max: 1285, - y_min: 0, - y_max: 1455, - ha: 1455, - leftSideBearing: 81, - advanceWidth: 1385, - }, - S: { - x_min: 115, - x_max: 1116, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 115, - advanceWidth: 1206, - }, - T: { - x_min: 96, - x_max: 1306, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 96, - advanceWidth: 1406, - }, - U: { - x_min: 70, - x_max: 1452, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 70, - advanceWidth: 1522, - }, - V: { - x_min: 65, - x_max: 1443, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1508, - }, - W: { - x_min: 72, - x_max: 2057, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 72, - advanceWidth: 2129, - }, - X: { - x_min: 80, - x_max: 1449, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 80, - advanceWidth: 1529, - }, - Y: { - x_min: 65, - x_max: 1396, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1461, - }, - Z: { - x_min: 90, - x_max: 1107, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 90, - advanceWidth: 1197, - }, - '[': { - x_min: 157, - x_max: 541, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 157, - advanceWidth: 573, - }, - '\\': { - x_min: 36, - x_max: 830, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 36, - advanceWidth: 841, - }, - ']': { - x_min: 23, - x_max: 408, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 23, - advanceWidth: 552, - }, - '^': { - x_min: 71, - x_max: 802, - y_min: 729, - y_max: 1456, - ha: 727, - leftSideBearing: 71, - advanceWidth: 864, - }, - _: { - x_min: 119, - x_max: 1041, - y_min: -154, - y_max: 0, - ha: 154, - leftSideBearing: 119, - advanceWidth: 1168, - }, - '`': { - x_min: 40, - x_max: 456, - y_min: 1288, - y_max: 1560, - ha: 272, - leftSideBearing: 40, - advanceWidth: 496, - }, - a: { - x_min: 79, - x_max: 1053, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 79, - advanceWidth: 1132, - }, - b: { - x_min: -16, - x_max: 1071, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: -16, - advanceWidth: 1145, - }, - c: { - x_min: 78, - x_max: 988, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1067, - }, - d: { - x_min: 78, - x_max: 1156, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: 78, - advanceWidth: 1218, - }, - e: { - x_min: 74, - x_max: 980, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 74, - advanceWidth: 1059, - }, - f: { - x_min: 64, - x_max: 731, - y_min: 0, - y_max: 1581, - ha: 1581, - leftSideBearing: 64, - advanceWidth: 725, - }, - g: { - x_min: 78, - x_max: 1133, - y_min: -437, - y_max: 1102, - ha: 1539, - leftSideBearing: 78, - advanceWidth: 1157, - }, - h: { - x_min: 49, - x_max: 1255, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 49, - advanceWidth: 1315, - }, - i: { - x_min: 67, - x_max: 590, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 67, - advanceWidth: 652, - }, - j: { - x_min: -56, - x_max: 381, - y_min: -437, - y_max: 1560, - ha: 1997, - leftSideBearing: -56, - advanceWidth: 525, - }, - k: { - x_min: 64, - x_max: 1248, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 1287, - }, - l: { - x_min: 64, - x_max: 587, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 653, - }, - m: { - x_min: 74, - x_max: 1905, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1977, - }, - n: { - x_min: 74, - x_max: 1278, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1343, - }, - o: { - x_min: 78, - x_max: 1046, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1124, - }, - p: { - x_min: 34, - x_max: 1119, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 34, - advanceWidth: 1197, - }, - q: { - x_min: 78, - x_max: 1135, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 78, - advanceWidth: 1139, - }, - r: { - x_min: 72, - x_max: 808, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 72, - advanceWidth: 854, - }, - s: { - x_min: 104, - x_max: 933, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 104, - advanceWidth: 1022, - }, - t: { - x_min: 24, - x_max: 678, - y_min: -17, - y_max: 1343, - ha: 1360, - leftSideBearing: 24, - advanceWidth: 730, - }, - u: { - x_min: 52, - x_max: 1181, - y_min: -21, - y_max: 1082, - ha: 1103, - leftSideBearing: 52, - advanceWidth: 1245, - }, - v: { - x_min: 26, - x_max: 1176, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 26, - advanceWidth: 1206, - }, - w: { - x_min: 52, - x_max: 1777, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 52, - advanceWidth: 1823, - }, - x: { - x_min: 42, - x_max: 1163, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 42, - advanceWidth: 1203, - }, - y: { - x_min: 24, - x_max: 1172, - y_min: -437, - y_max: 1082, - ha: 1519, - leftSideBearing: 24, - advanceWidth: 1192, - }, - z: { - x_min: 88, - x_max: 960, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 88, - advanceWidth: 1032, - }, - '{': { - x_min: 63, - x_max: 671, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 63, - advanceWidth: 701, - }, - '|': { - x_min: 150, - x_max: 307, - y_min: -270, - y_max: 1456, - ha: 1726, - leftSideBearing: 150, - advanceWidth: 451, - }, - '}': { - x_min: 27, - x_max: 635, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 27, - advanceWidth: 701, - }, - '~': { - x_min: 121, - x_max: 1257, - y_min: 401, - y_max: 803, - ha: 402, - leftSideBearing: 121, - advanceWidth: 1386, - }, - }, - fontFamily: 'Roboto Slab', - resolution: 2048, - generatedOn: '2020-06-15T19:12:58.120Z', -}; - - -/***/ }), - -/***/ "./src/fonts/sans_bold_text_metrics.ts": -/*!*********************************************!*\ - !*** ./src/fonts/sans_bold_text_metrics.ts ***! - \*********************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SansFontBold": () => (/* binding */ SansFontBold) -/* harmony export */ }); -const SansFontBold = { - glyphs: { - '0': { - x_min: 86, - x_max: 1038, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '1': { - x_min: 162, - x_max: 806, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 162, - advanceWidth: 1139, - }, - '2': { - x_min: 51, - x_max: 1036, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 51, - advanceWidth: 1139, - }, - '3': { - x_min: 77, - x_max: 1051, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '4': { - x_min: 38, - x_max: 1092, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 38, - advanceWidth: 1139, - }, - '5': { - x_min: 91, - x_max: 1077, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 91, - advanceWidth: 1139, - }, - '6': { - x_min: 87, - x_max: 1066, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '7': { - x_min: 87, - x_max: 1048, - y_min: 0, - y_max: 1446, - ha: 1446, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1047, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 65, - x_max: 1044, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 65, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 184, - x_max: 488, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 184, - advanceWidth: 682, - }, - '"': { - x_min: 112, - x_max: 869, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 112, - advanceWidth: 971, - }, - '#': { - x_min: 18, - x_max: 1115, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 18, - advanceWidth: 1139, - }, - $: { - x_min: 70, - x_max: 1048, - y_min: -205, - y_max: 1584, - ha: 1789, - leftSideBearing: 70, - advanceWidth: 1139, - }, - '%': { - x_min: 89, - x_max: 1725, - y_min: -59, - y_max: 1491, - ha: 1550, - leftSideBearing: 89, - advanceWidth: 1821, - }, - '&': { - x_min: 90, - x_max: 1446, - y_min: -38, - y_max: 1491, - ha: 1529, - leftSideBearing: 90, - advanceWidth: 1479, - }, - "'": { - x_min: 92, - x_max: 398, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 92, - advanceWidth: 487, - }, - '(': { - x_min: 107, - x_max: 616, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 107, - advanceWidth: 682, - }, - ')': { - x_min: 67, - x_max: 576, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 67, - advanceWidth: 682, - }, - '*': { - x_min: 28, - x_max: 753, - y_min: 792, - y_max: 1491, - ha: 699, - leftSideBearing: 28, - advanceWidth: 797, - }, - '+': { - x_min: 85, - x_max: 1110, - y_min: 211, - y_max: 1236, - ha: 1025, - leftSideBearing: 85, - advanceWidth: 1196, - }, - ',': { - x_min: 117, - x_max: 421, - y_min: -327, - y_max: 281, - ha: 608, - leftSideBearing: 117, - advanceWidth: 569, - }, - '-': { - x_min: 115, - x_max: 667, - y_min: 391, - y_max: 672, - ha: 281, - leftSideBearing: 115, - advanceWidth: 682, - }, - '.': { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 281, - ha: 281, - leftSideBearing: 147, - advanceWidth: 569, - }, - '/': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ':': { - x_min: 201, - x_max: 482, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 201, - advanceWidth: 682, - }, - ';': { - x_min: 170, - x_max: 474, - y_min: -327, - y_max: 1062, - ha: 1389, - leftSideBearing: 170, - advanceWidth: 682, - }, - '<': { - x_min: 95, - x_max: 1100, - y_min: 167, - y_max: 1281, - ha: 1114, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '=': { - x_min: 85, - x_max: 1110, - y_min: 372, - y_max: 1074, - ha: 702, - leftSideBearing: 85, - advanceWidth: 1196, - }, - '>': { - x_min: 95, - x_max: 1101, - y_min: 166, - y_max: 1279, - ha: 1113, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '?': { - x_min: 106, - x_max: 1158, - y_min: 0, - y_max: 1481, - ha: 1481, - leftSideBearing: 106, - advanceWidth: 1251, - }, - '@': { - x_min: 61, - x_max: 1990, - y_min: -431, - y_max: 1492, - ha: 1923, - leftSideBearing: 61, - advanceWidth: 1997, - }, - A: { - x_min: 0, - x_max: 1471, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1479, - }, - B: { - x_min: 150, - x_max: 1378, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - C: { - x_min: 97, - x_max: 1374, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 97, - advanceWidth: 1479, - }, - D: { - x_min: 148, - x_max: 1377, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 148, - advanceWidth: 1479, - }, - E: { - x_min: 149, - x_max: 1264, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - F: { - x_min: 151, - x_max: 1156, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 151, - advanceWidth: 1251, - }, - G: { - x_min: 98, - x_max: 1469, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 98, - advanceWidth: 1593, - }, - H: { - x_min: 150, - x_max: 1322, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - I: { - x_min: 140, - x_max: 436, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 140, - advanceWidth: 569, - }, - J: { - x_min: 35, - x_max: 973, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 35, - advanceWidth: 1139, - }, - K: { - x_min: 153, - x_max: 1475, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 153, - advanceWidth: 1479, - }, - L: { - x_min: 157, - x_max: 1189, - y_min: 0, - y_max: 1454, - ha: 1454, - leftSideBearing: 157, - advanceWidth: 1251, - }, - M: { - x_min: 145, - x_max: 1561, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 145, - advanceWidth: 1706, - }, - N: { - x_min: 152, - x_max: 1315, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1479, - }, - O: { - x_min: 89, - x_max: 1511, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 89, - advanceWidth: 1593, - }, - P: { - x_min: 149, - x_max: 1272, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - Q: { - x_min: 89, - x_max: 1566, - y_min: -147, - y_max: 1491, - ha: 1638, - leftSideBearing: 89, - advanceWidth: 1593, - }, - R: { - x_min: 150, - x_max: 1468, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - S: { - x_min: 74, - x_max: 1266, - y_min: -26, - y_max: 1491, - ha: 1517, - leftSideBearing: 74, - advanceWidth: 1366, - }, - T: { - x_min: 44, - x_max: 1209, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 44, - advanceWidth: 1251, - }, - U: { - x_min: 147, - x_max: 1316, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 147, - advanceWidth: 1479, - }, - V: { - x_min: -1, - x_max: 1364, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -1, - advanceWidth: 1366, - }, - W: { - x_min: 7, - x_max: 1931, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 7, - advanceWidth: 1933, - }, - X: { - x_min: 0, - x_max: 1363, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1366, - }, - Y: { - x_min: -3, - x_max: 1368, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - Z: { - x_min: 22, - x_max: 1213, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 22, - advanceWidth: 1251, - }, - '[': { - x_min: 146, - x_max: 644, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 146, - advanceWidth: 682, - }, - '\\': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ']': { - x_min: 38, - x_max: 536, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 38, - advanceWidth: 682, - }, - '^': { - x_min: 115, - x_max: 1080, - y_min: 692, - y_max: 1491, - ha: 799, - leftSideBearing: 115, - advanceWidth: 1196, - }, - _: { - x_min: -19, - x_max: 1149, - y_min: -405, - y_max: -223, - ha: 182, - leftSideBearing: -19, - advanceWidth: 1139, - }, - '`': { - x_min: 42, - x_max: 495, - y_min: 1192, - y_max: 1491, - ha: 299, - leftSideBearing: 42, - advanceWidth: 682, - }, - a: { - x_min: 73, - x_max: 1070, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 73, - advanceWidth: 1139, - }, - b: { - x_min: 135, - x_max: 1172, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 135, - advanceWidth: 1251, - }, - c: { - x_min: 85, - x_max: 1087, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 85, - advanceWidth: 1139, - }, - d: { - x_min: 84, - x_max: 1121, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 84, - advanceWidth: 1251, - }, - e: { - x_min: 65, - x_max: 1057.2517482517483, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 65, - advanceWidth: 1139, - }, - f: { - x_min: 24, - x_max: 742, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 24, - advanceWidth: 682, - }, - g: { - x_min: 84, - x_max: 1120, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 84, - advanceWidth: 1251, - }, - h: { - x_min: 146, - x_max: 1113, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 146, - advanceWidth: 1251, - }, - i: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - j: { - x_min: -94, - x_max: 422, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 569, - }, - k: { - x_min: 137, - x_max: 1119, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 137, - advanceWidth: 1139, - }, - l: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - m: { - x_min: 126, - x_max: 1688, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 126, - advanceWidth: 1821, - }, - n: { - x_min: 145, - x_max: 1113, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 145, - advanceWidth: 1251, - }, - o: { - x_min: 82, - x_max: 1178, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 82, - advanceWidth: 1251, - }, - p: { - x_min: 139, - x_max: 1175, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 139, - advanceWidth: 1251, - }, - q: { - x_min: 91, - x_max: 1122, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 91, - advanceWidth: 1251, - }, - r: { - x_min: 135, - x_max: 823, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 797, - }, - s: { - x_min: 48, - x_max: 1040, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 48, - advanceWidth: 1139, - }, - t: { - x_min: 31, - x_max: 657, - y_min: -24, - y_max: 1437, - ha: 1461, - leftSideBearing: 31, - advanceWidth: 682, - }, - u: { - x_min: 141, - x_max: 1107, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 141, - advanceWidth: 1251, - }, - v: { - x_min: 11, - x_max: 1114, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 11, - advanceWidth: 1139, - }, - w: { - x_min: 9, - x_max: 1592, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 9, - advanceWidth: 1593, - }, - x: { - x_min: 12, - x_max: 1120, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 12, - advanceWidth: 1139, - }, - y: { - x_min: 14, - x_max: 1106, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 14, - advanceWidth: 1139, - }, - z: { - x_min: 34, - x_max: 982, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 34, - advanceWidth: 1024, - }, - '{': { - x_min: 60, - x_max: 744, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 60, - advanceWidth: 797, - }, - '|': { - x_min: 176, - x_max: 399, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 176, - advanceWidth: 573, - }, - '}': { - x_min: 45, - x_max: 729, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 45, - advanceWidth: 797, - }, - '~': { - x_min: 67, - x_max: 1129, - y_min: 519, - y_max: 924, - ha: 405, - leftSideBearing: 67, - advanceWidth: 1196, - }, - }, - fontFamily: 'Arial', - resolution: 2048, - generatedOn: '2022-11-04T20:05:21.000Z', -}; - - -/***/ }), - -/***/ "./src/fonts/sans_text_metrics.ts": -/*!****************************************!*\ - !*** ./src/fonts/sans_text_metrics.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SansFont": () => (/* binding */ SansFont) -/* harmony export */ }); -const SansFont = { - smufl: false, - name: 'SANS', - spacing: 50, - Description: 'Built-in sans-serif font', - bold: true, - italic: true, - monospaced: false, - serifs: false, - glyphs: { - '0': { - x_min: 85, - x_max: 1041, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '1': { - x_min: 223, - x_max: 763, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 223, - advanceWidth: 1139, - }, - '2': { - x_min: 61.840001123045234, - x_max: 1031, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 61, - advanceWidth: 1139, - }, - '3': { - x_min: 86, - x_max: 1046, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '4': { - x_min: 26, - x_max: 1040, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 26, - advanceWidth: 1139, - }, - '5': { - x_min: 85, - x_max: 1057, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '6': { - x_min: 77, - x_max: 1045, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '7': { - x_min: 97, - x_max: 1046, - y_min: 0, - y_max: 1447, - ha: 1447, - leftSideBearing: 97, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 85, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 176, - x_max: 399, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 176, - advanceWidth: 569, - }, - '"': { - x_min: 94, - x_max: 631, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 94, - advanceWidth: 727, - }, - '#': { - x_min: 21, - x_max: 1113, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 21, - advanceWidth: 1139, - }, - $: { - x_min: 73, - x_max: 1043, - y_min: -211, - y_max: 1601, - ha: 1812, - leftSideBearing: 73, - advanceWidth: 1139, - }, - '%': { - x_min: 119, - x_max: 1695, - y_min: -54, - y_max: 1491, - ha: 1545, - leftSideBearing: 119, - advanceWidth: 1821, - }, - '&': { - x_min: 88, - x_max: 1319, - y_min: -34, - y_max: 1491, - ha: 1525, - leftSideBearing: 88, - advanceWidth: 1366, - }, - "'": { - x_min: 90, - x_max: 295, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 90, - advanceWidth: 391, - }, - '(': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - ')': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - '*': { - x_min: 64, - x_max: 725, - y_min: 867, - y_max: 1491, - ha: 624, - leftSideBearing: 64, - advanceWidth: 797, - }, - '+': { - x_min: 114, - x_max: 1082, - y_min: 237, - y_max: 1206, - ha: 969, - leftSideBearing: 114, - advanceWidth: 1196, - }, - ',': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 205, - ha: 495, - leftSideBearing: 170, - advanceWidth: 569, - }, - '-': { - x_min: 65, - x_max: 618, - y_min: 440, - y_max: 621, - ha: 181, - leftSideBearing: 65, - advanceWidth: 682, - }, - '.': { - x_min: 186, - x_max: 391, - y_min: 0, - y_max: 205, - ha: 205, - leftSideBearing: 186, - advanceWidth: 569, - }, - '/': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ':': { - x_min: 185, - x_max: 390, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 185, - advanceWidth: 569, - }, - ';': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 1062, - ha: 1352, - leftSideBearing: 170, - advanceWidth: 569, - }, - '<': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '=': { - x_min: 114, - x_max: 1082, - y_min: 417, - y_max: 1030, - ha: 613, - leftSideBearing: 114, - advanceWidth: 1196, - }, - '>': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '?': { - x_min: 90, - x_max: 1036, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 90, - advanceWidth: 1139, - }, - '@': { - x_min: 111, - x_max: 2005, - y_min: -431, - y_max: 1493, - ha: 1924, - leftSideBearing: 111, - advanceWidth: 2079, - }, - A: { - x_min: -3, - x_max: 1369, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - B: { - x_min: 150, - x_max: 1257, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - C: { - x_min: 102, - x_max: 1398, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 102, - advanceWidth: 1479, - }, - D: { - x_min: 158, - x_max: 1370, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1479, - }, - E: { - x_min: 162, - x_max: 1256, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 162, - advanceWidth: 1366, - }, - F: { - x_min: 168, - x_max: 1157, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 168, - advanceWidth: 1251, - }, - G: { - x_min: 109, - x_max: 1465, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 109, - advanceWidth: 1593, - }, - H: { - x_min: 164, - x_max: 1314, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 164, - advanceWidth: 1479, - }, - I: { - x_min: 191, - x_max: 385, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 191, - advanceWidth: 569, - }, - J: { - x_min: 58.84976474807333, - x_max: 865, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 58, - advanceWidth: 1024, - }, - K: { - x_min: 150, - x_max: 1362, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - L: { - x_min: 150, - x_max: 1066, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1139, - }, - M: { - x_min: 152, - x_max: 1551, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1706, - }, - N: { - x_min: 156, - x_max: 1311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 156, - advanceWidth: 1479, - }, - O: { - x_min: 99, - x_max: 1501, - y_min: -25, - y_max: 1492, - ha: 1517, - leftSideBearing: 99, - advanceWidth: 1593, - }, - P: { - x_min: 158, - x_max: 1277, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1366, - }, - Q: { - x_min: 88, - x_max: 1518, - y_min: -114, - y_max: 1492, - ha: 1606, - leftSideBearing: 88, - advanceWidth: 1593, - }, - R: { - x_min: 161, - x_max: 1453, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 161, - advanceWidth: 1479, - }, - S: { - x_min: 92, - x_max: 1259, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 92, - advanceWidth: 1366, - }, - T: { - x_min: 48, - x_max: 1210, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 48, - advanceWidth: 1251, - }, - U: { - x_min: 161, - x_max: 1314, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 161, - advanceWidth: 1479, - }, - V: { - x_min: 9, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - W: { - x_min: 25, - x_max: 1910, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 25, - advanceWidth: 1933, - }, - X: { - x_min: 9, - x_max: 1353, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - Y: { - x_min: 6, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 6, - advanceWidth: 1366, - }, - Z: { - x_min: 41, - x_max: 1200, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 41, - advanceWidth: 1251, - }, - '[': { - x_min: 139, - x_max: 536, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 139, - advanceWidth: 569, - }, - '\\': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ']': { - x_min: 39, - x_max: 436, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 39, - advanceWidth: 569, - }, - '^': { - x_min: 54, - x_max: 907, - y_min: 690, - y_max: 1491, - ha: 801, - leftSideBearing: 54, - advanceWidth: 961, - }, - _: { - x_min: -31, - x_max: 1162, - y_min: -407, - y_max: -277, - ha: 130, - leftSideBearing: -31, - advanceWidth: 1139, - }, - '`': { - x_min: 89, - x_max: 465, - y_min: 1194, - y_max: 1474, - ha: 280, - leftSideBearing: 89, - advanceWidth: 682, - }, - a: { - x_min: 74, - x_max: 1052, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 74, - advanceWidth: 1139, - }, - b: { - x_min: 134, - x_max: 1055, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 134, - advanceWidth: 1139, - }, - c: { - x_min: 80, - x_max: 1005, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 80, - advanceWidth: 1024, - }, - d: { - x_min: 70, - x_max: 991, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 70, - advanceWidth: 1139, - }, - e: { - x_min: 75, - x_max: 1054, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 75, - advanceWidth: 1139, - }, - f: { - x_min: 19, - x_max: 640, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 19, - advanceWidth: 569, - }, - g: { - x_min: 66, - x_max: 1002, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 66, - advanceWidth: 1139, - }, - h: { - x_min: 135, - x_max: 1000, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 135, - advanceWidth: 1139, - }, - i: { - x_min: 136, - x_max: 316, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 455, - }, - j: { - x_min: -94, - x_max: 314, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 455, - }, - k: { - x_min: 136, - x_max: 1016, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 1024, - }, - l: { - x_min: 131, - x_max: 311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 131, - advanceWidth: 455, - }, - m: { - x_min: 135, - x_max: 1574, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1706, - }, - n: { - x_min: 135, - x_max: 998, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1139, - }, - o: { - x_min: 68, - x_max: 1063, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 68, - advanceWidth: 1139, - }, - p: { - x_min: 135, - x_max: 1057, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 135, - advanceWidth: 1139, - }, - q: { - x_min: 72, - x_max: 992, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 72, - advanceWidth: 1139, - }, - r: { - x_min: 133, - x_max: 710, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 133, - advanceWidth: 682, - }, - s: { - x_min: 63, - x_max: 945, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 63, - advanceWidth: 1024, - }, - t: { - x_min: 36, - x_max: 554, - y_min: -14, - y_max: 1433, - ha: 1447, - leftSideBearing: 36, - advanceWidth: 569, - }, - u: { - x_min: 131, - x_max: 992, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 131, - advanceWidth: 1139, - }, - v: { - x_min: 26, - x_max: 1000, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 26, - advanceWidth: 1024, - }, - w: { - x_min: 6, - x_max: 1463, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 6, - advanceWidth: 1479, - }, - x: { - x_min: 15, - x_max: 1009, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 15, - advanceWidth: 1024, - }, - y: { - x_min: 33, - x_max: 1006, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 33, - advanceWidth: 1024, - }, - z: { - x_min: 40, - x_max: 980, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 40, - advanceWidth: 1024, - }, - '{': { - x_min: 57, - x_max: 636, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 57, - advanceWidth: 684, - }, - '|': { - x_min: 188, - x_max: 345, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 188, - advanceWidth: 532, - }, - '}': { - x_min: 47, - x_max: 626, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 47, - advanceWidth: 684, - }, - '~': { - x_min: 87, - x_max: 1110, - y_min: 557, - y_max: 885, - ha: 328, - leftSideBearing: 87, - advanceWidth: 1196, - }, - }, - fontFamily: 'sans-serif', - resolution: 2048, - generatedOn: '2020-10-18T18:48:11.823Z', -}; - - -/***/ }), - -/***/ "./src/fonts/serif_text_metrics.ts": -/*!*****************************************!*\ - !*** ./src/fonts/serif_text_metrics.ts ***! - \*****************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SerifFont": () => (/* binding */ SerifFont) -/* harmony export */ }); -const SerifFont = { - smufl: false, - name: 'SERIF', - spacing: 50, - Description: 'Built-in serif font', - bold: true, - italic: true, - monospaced: false, - serifs: true, - glyphs: { - '0': { - x_min: 49, - x_max: 975, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 49, - advanceWidth: 1024, - }, - '1': { - x_min: 227, - x_max: 811, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 227, - advanceWidth: 1024, - }, - '2': { - x_min: 61, - x_max: 965, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 61, - advanceWidth: 1024, - }, - '3': { - x_min: 88, - x_max: 883, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 88, - advanceWidth: 1024, - }, - '4': { - x_min: 25, - x_max: 967, - y_min: 0, - y_max: 1384, - ha: 1384, - leftSideBearing: 25, - advanceWidth: 1024, - }, - '5': { - x_min: 66, - x_max: 898, - y_min: -27, - y_max: 1409, - ha: 1436, - leftSideBearing: 66, - advanceWidth: 1024, - }, - '6': { - x_min: 70, - x_max: 958, - y_min: -27, - y_max: 1401, - ha: 1428, - leftSideBearing: 70, - advanceWidth: 1024, - }, - '7': { - x_min: 41, - x_max: 920, - y_min: -16, - y_max: 1356, - ha: 1372, - leftSideBearing: 41, - advanceWidth: 1024, - }, - '8': { - x_min: 115, - x_max: 911, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 115, - advanceWidth: 1024, - }, - '9': { - x_min: 61, - x_max: 940, - y_min: -41, - y_max: 1383, - ha: 1424, - leftSideBearing: 61, - advanceWidth: 1024, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 512, - }, - '!': { - x_min: 266, - x_max: 488, - y_min: -22, - y_max: 1383, - ha: 1405, - leftSideBearing: 266, - advanceWidth: 682, - }, - '"': { - x_min: 157.2000021972655, - x_max: 678.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 157, - advanceWidth: 836, - }, - '#': { - x_min: 10, - x_max: 1016, - y_min: -1, - y_max: 1356, - ha: 1357, - leftSideBearing: 10, - advanceWidth: 1024, - }, - $: { - x_min: 90, - x_max: 936, - y_min: -180, - y_max: 1492, - ha: 1672, - leftSideBearing: 90, - advanceWidth: 1024, - }, - '%': { - x_min: 125, - x_max: 1581, - y_min: -30, - y_max: 1388, - ha: 1418, - leftSideBearing: 125, - advanceWidth: 1706, - }, - '&': { - x_min: 86, - x_max: 1536, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1593, - }, - "'": { - x_min: 97.20000219726548, - x_max: 273.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 97, - advanceWidth: 369, - }, - '(': { - x_min: 98, - x_max: 623, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 98, - advanceWidth: 682, - }, - ')': { - x_min: 59, - x_max: 584, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 59, - advanceWidth: 682, - }, - '*': { - x_min: 137.96078522291893, - x_max: 886.039214777081, - y_min: 543, - y_max: 1383, - ha: 840, - leftSideBearing: 137, - advanceWidth: 1024, - }, - '+': { - x_min: 61, - x_max: 1093, - y_min: 2, - y_max: 1034, - ha: 1032, - leftSideBearing: 61, - advanceWidth: 1155, - }, - ',': { - x_min: 115, - x_max: 399, - y_min: -291, - y_max: 208, - ha: 499, - leftSideBearing: 115, - advanceWidth: 512, - }, - '-': { - x_min: 80, - x_max: 584, - y_min: 396, - y_max: 525, - ha: 129, - leftSideBearing: 80, - advanceWidth: 682, - }, - '.': { - x_min: 143, - x_max: 371, - y_min: -22, - y_max: 205, - ha: 227, - leftSideBearing: 143, - advanceWidth: 512, - }, - '/': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ':': { - x_min: 166, - x_max: 394, - y_min: -22, - y_max: 943, - ha: 965, - leftSideBearing: 166, - advanceWidth: 569, - }, - ';': { - x_min: 164, - x_max: 448, - y_min: -290, - y_max: 943, - ha: 1233, - leftSideBearing: 164, - advanceWidth: 569, - }, - '<': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '=': { - x_min: 61, - x_max: 1093, - y_min: 246, - y_max: 791, - ha: 545, - leftSideBearing: 61, - advanceWidth: 1155, - }, - '>': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '?': { - x_min: 139, - x_max: 848, - y_min: -15, - y_max: 1383, - ha: 1398, - leftSideBearing: 139, - advanceWidth: 909, - }, - '@': { - x_min: 238, - x_max: 1657, - y_min: -29, - y_max: 1386, - ha: 1415, - leftSideBearing: 238, - advanceWidth: 1886, - }, - A: { - x_min: 31, - x_max: 1445, - y_min: 0, - y_max: 1380, - ha: 1380, - leftSideBearing: 31, - advanceWidth: 1479, - }, - B: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - C: { - x_min: 57, - x_max: 1296, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 57, - advanceWidth: 1366, - }, - D: { - x_min: 33, - x_max: 1403, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1479, - }, - E: { - x_min: 25, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - F: { - x_min: 25, - x_max: 1119, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1139, - }, - G: { - x_min: 66, - x_max: 1452, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 66, - advanceWidth: 1479, - }, - H: { - x_min: 39, - x_max: 1438, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 39, - advanceWidth: 1479, - }, - I: { - x_min: 37, - x_max: 642, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 37, - advanceWidth: 682, - }, - J: { - x_min: 20, - x_max: 758, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 20, - advanceWidth: 797, - }, - K: { - x_min: 70, - x_max: 1479, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 70, - advanceWidth: 1479, - }, - L: { - x_min: 25, - x_max: 1224, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - M: { - x_min: 25, - x_max: 1768, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1821, - }, - N: { - x_min: 25, - x_max: 1450, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 25, - advanceWidth: 1479, - }, - O: { - x_min: 70, - x_max: 1409, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 70, - advanceWidth: 1479, - }, - P: { - x_min: 33, - x_max: 1110, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1139, - }, - Q: { - x_min: 70, - x_max: 1435, - y_min: -364.28571588721996, - y_max: 1383, - ha: 1747.28571588722, - leftSideBearing: 70, - advanceWidth: 1479, - }, - R: { - x_min: 35, - x_max: 1347, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - S: { - x_min: 86, - x_max: 1006, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1139, - }, - T: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1251, - }, - U: { - x_min: 29, - x_max: 1444, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 29, - advanceWidth: 1479, - }, - V: { - x_min: 33, - x_max: 1428, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 33, - advanceWidth: 1479, - }, - W: { - x_min: 10, - x_max: 1906, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 10, - advanceWidth: 1933, - }, - X: { - x_min: 20, - x_max: 1449, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 20, - advanceWidth: 1479, - }, - Y: { - x_min: 45, - x_max: 1441, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 45, - advanceWidth: 1479, - }, - Z: { - x_min: 18, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 18, - advanceWidth: 1251, - }, - '[': { - x_min: 180, - x_max: 612, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 180, - advanceWidth: 682, - }, - '\\': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ']': { - x_min: 70, - x_max: 502, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 70, - advanceWidth: 682, - }, - '^': { - x_min: 49, - x_max: 914, - y_min: 608, - y_max: 1355, - ha: 747, - leftSideBearing: 49, - advanceWidth: 961, - }, - _: { - x_min: 0, - x_max: 1024, - y_min: -255, - y_max: -153, - ha: 102, - leftSideBearing: 0, - advanceWidth: 1024, - }, - '`': { - x_min: 39, - x_max: 499, - y_min: 1037, - y_max: 1392.509803639748, - ha: 355.50980363974804, - leftSideBearing: 39, - advanceWidth: 682, - }, - a: { - x_min: 76, - x_max: 905, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 76, - advanceWidth: 909, - }, - b: { - x_min: 6, - x_max: 958, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 6, - advanceWidth: 1024, - }, - c: { - x_min: 51, - x_max: 843, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - d: { - x_min: 55, - x_max: 1006, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 55, - advanceWidth: 1024, - }, - e: { - x_min: 51, - x_max: 868, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - f: { - x_min: 41, - x_max: 783, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 41, - advanceWidth: 682, - }, - g: { - x_min: 57, - x_max: 963, - y_min: -446, - y_max: 942, - ha: 1388, - leftSideBearing: 57, - advanceWidth: 1024, - }, - h: { - x_min: 18, - x_max: 997, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 18, - advanceWidth: 1024, - }, - i: { - x_min: 33, - x_max: 516, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 33, - advanceWidth: 569, - }, - j: { - x_min: -142, - x_max: 397, - y_min: -446, - y_max: 1399, - ha: 1845, - leftSideBearing: -142, - advanceWidth: 569, - }, - k: { - x_min: 14, - x_max: 1029, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 14, - advanceWidth: 1024, - }, - l: { - x_min: 39, - x_max: 523, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 39, - advanceWidth: 569, - }, - m: { - x_min: 33, - x_max: 1587, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1593, - }, - n: { - x_min: 33, - x_max: 993, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1024, - }, - o: { - x_min: 59, - x_max: 963, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 59, - advanceWidth: 1024, - }, - p: { - x_min: 10, - x_max: 964, - y_min: -443, - y_max: 944, - ha: 1387, - leftSideBearing: 10, - advanceWidth: 1024, - }, - q: { - x_min: 49, - x_max: 999, - y_min: -443, - y_max: 942.0135137169275, - ha: 1385.0135137169275, - leftSideBearing: 49, - advanceWidth: 1024, - }, - r: { - x_min: 10, - x_max: 685, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 10, - advanceWidth: 682, - }, - s: { - x_min: 104, - x_max: 713, - y_min: -20, - y_max: 942.0263161804552, - ha: 962.0263161804552, - leftSideBearing: 104, - advanceWidth: 797, - }, - t: { - x_min: 27, - x_max: 572, - y_min: -18, - y_max: 1186, - ha: 1204, - leftSideBearing: 27, - advanceWidth: 569, - }, - u: { - x_min: 18, - x_max: 981, - y_min: -21, - y_max: 921, - ha: 942, - leftSideBearing: 18, - advanceWidth: 1024, - }, - v: { - x_min: 39, - x_max: 976, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 39, - advanceWidth: 1024, - }, - w: { - x_min: 43, - x_max: 1423, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 43, - advanceWidth: 1479, - }, - x: { - x_min: 35, - x_max: 989, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 35, - advanceWidth: 1024, - }, - y: { - x_min: 29, - x_max: 976, - y_min: -445, - y_max: 921, - ha: 1366, - leftSideBearing: 29, - advanceWidth: 1024, - }, - z: { - x_min: 55, - x_max: 855, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 55, - advanceWidth: 909, - }, - '{': { - x_min: 205, - x_max: 717, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 205, - advanceWidth: 983, - }, - '|': { - x_min: 137, - x_max: 273, - y_min: -512, - y_max: 1535, - ha: 2047, - leftSideBearing: 137, - advanceWidth: 410, - }, - '}': { - x_min: 266, - x_max: 778, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 266, - advanceWidth: 983, - }, - '~': { - x_min: 82, - x_max: 1028, - y_min: 380, - y_max: 666, - ha: 286, - leftSideBearing: 82, - advanceWidth: 1108, - }, - }, - fontFamily: 'serif', - resolution: 2048, - generatedOn: '2020-10-18T19:03:12.514Z', -}; - - -/***/ }), - -/***/ "./src/fonts/textfonts.ts": -/*!********************************!*\ - !*** ./src/fonts/textfonts.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "loadTextFonts": () => (/* binding */ loadTextFonts) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../font */ "./src/font.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./petalumascript_glyphs */ "./src/fonts/petalumascript_glyphs.ts"); -/* harmony import */ var _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./robotoslab_glyphs */ "./src/fonts/robotoslab_glyphs.ts"); -/* harmony import */ var _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sans_bold_text_metrics */ "./src/fonts/sans_bold_text_metrics.ts"); -/* harmony import */ var _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sans_text_metrics */ "./src/fonts/sans_text_metrics.ts"); -/* harmony import */ var _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serif_text_metrics */ "./src/fonts/serif_text_metrics.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -function loadTextFonts() { - // Sans-serif fallback font, very close to Arial - { - const fontData = _sans_bold_text_metrics__WEBPACK_IMPORTED_MODULE_4__.SansFontBold; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Usually @ is the tallest and widest character, although not the - // highest since it starts below the baseline. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: true, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - // Sans-serif fallback font, very close to Arial - { - const fontData = _sans_text_metrics__WEBPACK_IMPORTED_MODULE_5__.SansFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Usually @ is the tallest and widest character, although not the - // highest since it starts below the baseline. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - // Serif fallback font, very close to Times - { - const fontData = _serif_text_metrics__WEBPACK_IMPORTED_MODULE_6__.SerifFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // M is wider, but H is taller. :-) - // Lowercase b is also taller in this font. - const maxSizeGlyph = '@'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Generic SERIF font', - }); - } - // Roboto Slab - { - const fontData = _robotoslab_glyphs__WEBPACK_IMPORTED_MODULE_3__.RobotoSlabFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // Previously we used 'H', but it isn't actually the tallest or the widest. - // Interestingly, the lowercase 'b' is the tallest glyph. - const maxSizeGlyph = 'b'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Text font to pair with the Bravura / Gonville music fonts.', - }); - } - // PetalumaScript - { - const fontData = _petalumascript_glyphs__WEBPACK_IMPORTED_MODULE_2__.PetalumaScriptFont; - const { fontFamily, resolution, glyphs } = fontData; - _font__WEBPACK_IMPORTED_MODULE_0__.Font.load(fontFamily, fontData); - // M is wider, but H is taller. :-) - // Lowercase b is also taller in this font. - const maxSizeGlyph = 'b'; - _textformatter__WEBPACK_IMPORTED_MODULE_1__.TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Text font to pair with the Petaluma music font.', - }); - } -} - - -/***/ }), - -/***/ "./src/formatter.ts": -/*!**************************!*\ - !*** ./src/formatter.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Formatter": () => (/* binding */ Formatter) -/* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - -/** - * Create `Alignment`s for each tick in `voices`. Also calculate the - * total number of ticks in voices. - */ -function createContexts(voices, makeContext, addToContext) { - if (voices.length == 0) - return { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - // Initialize tick maps. - const tickToContextMap = {}; - const tickList = []; - const contexts = []; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - // For each voice, extract notes and create a context for every - // new tick that hasn't been seen before. - voices.forEach((voice, voiceIndex) => { - // Use resolution multiplier as denominator so that no additional expansion - // of fractional tick values is needed. - const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - // If we have no tick context for this tick, create one. - if (!tickToContextMap[integerTicks]) { - const newContext = makeContext({ tickID: integerTicks }); - contexts.push(newContext); - tickToContextMap[integerTicks] = newContext; - // Maintain a list of unique integerTicks. - tickList.push(integerTicks); - } - // Add this tickable to the TickContext. - addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); - ticksUsed.add(tickable.getTicks()); - }); - }); - return { - map: tickToContextMap, - array: contexts, - list: tickList.sort((a, b) => a - b), - resolutionMultiplier, - }; -} -// eslint-disable-next-line -function L(...args) { - if (Formatter.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_9__.log)('Vex.Flow.Formatter', args); -} -/** - * Get the rest line number of the next non-rest note(s). - * @param notes array of Notes - * @param currRestLine - * @param currNoteIndex current note index - * @param compare if true, return the midpoint between the current rest line and the next rest line - * @returns a line number, which determines the vertical position of a rest. - */ -function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { - // If no valid next note group, nextRestLine is same as current. - let nextRestLine = currRestLine; - // Start with the next note and keep going until we find a valid non-rest note group. - for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { - const note = notes[noteIndex]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isNote)(note) && !note.isRest() && !note.shouldIgnoreTicks()) { - nextRestLine = note.getLineForRest(); - break; - } - } - // Locate the mid point between two lines. - if (compare && currRestLine !== nextRestLine) { - const top = Math.max(currRestLine, nextRestLine); - const bot = Math.min(currRestLine, nextRestLine); - nextRestLine = (0,_util__WEBPACK_IMPORTED_MODULE_9__.midLine)(top, bot); - } - return nextRestLine; -} -/** - * Format implements the formatting and layout algorithms that are used - * to position notes in a voice. The algorithm can align multiple voices both - * within a stave, and across multiple staves. - * - * To do this, the formatter breaks up voices into a grid of rational-valued - * `ticks`, to which each note is assigned. Then, minimum widths are assigned - * to each tick based on the widths of the notes and modifiers in that tick. This - * establishes the smallest amount of space required for each tick. - * - * Finally, the formatter distributes the left over space proportionally to - * all the ticks, setting the `x` values of the notes in each tick. - * - * See `tests/formatter_tests.ts` for usage examples. The helper functions included - * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. - */ -class Formatter { - /** - * Helper function to layout "notes" one after the other without - * regard for proportions. Useful for tests and debugging. - */ - static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { - notes.reduce((accumulator, note) => { - note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext()); - const tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext().addTickable(note).preFormat(); - const metrics = tick.getMetrics(); - tick.setX(accumulator + metrics.totalLeftPx); - return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; - }, x); - } - /** Helper function to plot formatter debug info. */ - static plotDebugging(ctx, formatter, xPos, y1, y2, options) { - options = Object.assign({ stavePadding: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.padding') }, options); - const x = xPos + options.stavePadding; - const contextGaps = formatter.contextGaps; - function stroke(x1, x2, color) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(1); - ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); - } - ctx.save(); - ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_1__.Font.SANS_SERIF, 8); - contextGaps.gaps.forEach((gap) => { - stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); - ctx.setFillStyle('green'); - ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); - }); - ctx.setFillStyle('red'); - ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); - ctx.restore(); - } - /** - * Helper function to format and draw a single voice. Returns a bounding - * box for the notation. - * @param ctx the rendering context - * @param stave the stave to which to draw (`Stave` or `TabStave`) - * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) - * @param params one of below: - * * Setting `autobeam` only `(context, stave, notes, true)` or - * `(ctx, stave, notes, {autobeam: true})` - * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` - * * Setting both a struct is needed `(context, stave, notes, { - * autobeam: true, align_rests: true})` - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDraw(ctx, stave, notes, params) { - let options = { - auto_beam: false, - align_rests: false, - }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - else if (typeof params === 'boolean') { - options.auto_beam = params; - } - // Start by creating a voice and adding all the notes to it. - const voice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); - // Then create beams, if requested. - const beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(voice) : []; - // Instantiate a `Formatter` and format the notes. - new Formatter() - .joinVoices([voice]) // , { align_rests: options.align_rests }) - .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); - // Render the voice and beams to the stave. - voice.setStave(stave).draw(ctx, stave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - // Return the bounding box of the voice. - return voice.getBoundingBox(); - } - /** - * Helper function to format and draw aligned tab and stave notes in two - * separate staves. - * @param ctx the rendering context - * @param tabstave a `TabStave` instance on which to render `TabNote`s. - * @param stave a `Stave` instance on which to render `Note`s. - * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) - * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) - * @param autobeam automatically generate beams. - * @param params a configuration object: - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { - let opts = { - auto_beam: autobeam, - align_rests: false, - }; - if (typeof params === 'object') { - opts = Object.assign(Object.assign({}, opts), params); - } - else if (typeof params === 'boolean') { - opts.auto_beam = params; - } - // Create a `4/4` voice for `notes`. - const notevoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(notes); - // Create a `4/4` voice for `tabnotes`. - const tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_10__.Voice(_tables__WEBPACK_IMPORTED_MODULE_6__.Tables.TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.SOFT).addTickables(tabnotes); - // Then create beams, if requested. - const beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_0__.Beam.applyAndGetBeams(notevoice) : []; - // Instantiate a `Formatter` and align tab and stave notes. - new Formatter() - .joinVoices([notevoice]) // , { align_rests: opts.align_rests }) - .joinVoices([tabvoice]) - .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); - // Render voices and beams to staves. - notevoice.draw(ctx, stave); - tabvoice.draw(ctx, tabstave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - // Draw a connector between tab and note staves. - new _staveconnector__WEBPACK_IMPORTED_MODULE_5__.StaveConnector(stave, tabstave).setContext(ctx).draw(); - } - /** - * Automatically set the vertical position of rests based on previous/next note positions. - * @param tickables an array of Tickables. - * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. - * @param alignTuplets If `false`, ignores tuplets. - */ - static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { - tickables.forEach((currTickable, index) => { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(currTickable) && currTickable.isRest()) { - if (currTickable.getTuplet() && !alignTuplets) { - return; - } - // If activated rests not on default can be rendered as specified. - const position = currTickable.getGlyphProps().position.toUpperCase(); - if (position !== 'R/4' && position !== 'B/4') { - return; - } - if (alignAllNotes || currTickable.getBeam()) { - // Align rests with previous/next notes. - const props = currTickable.getKeyProps()[0]; - if (index === 0) { - props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); - } - else if (index > 0 && index < tickables.length) { - // If previous tickable is a rest, use its line number. - const prevTickable = tickables[index - 1]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_8__.isStaveNote)(prevTickable)) { - if (prevTickable.isRest()) { - props.line = prevTickable.getKeyProps()[0].line; - } - else { - const restLine = prevTickable.getLineForRest(); - // Get the rest line for next valid non-rest note group. - props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); - } - } - } - currTickable.setKeyLine(0, props.line); - } - } - }); - } - constructor(options) { - this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); - this.justifyWidth = 0; - this.totalCost = 0; - this.totalShift = 0; - this.durationStats = {}; - // Minimum width required to render all the notes in the voices. - this.minTotalWidth = 0; - // This is set to `true` after `minTotalWidth` is calculated. - this.hasMinTotalWidth = false; - // Arrays of tick and modifier contexts. - this.tickContexts = { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - this.modifierContexts = []; - // Gaps between contexts, for free movement of notes post - // formatting. - this.contextGaps = { - total: 0, - gaps: [], - }; - this.voices = []; - this.lossHistory = []; - } - /** - * Find all the rests in each of the `voices` and align them to neighboring notes. - * - * @param voices - * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. - */ - alignRests(voices, alignAllNotes) { - if (!voices || !voices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format rests'); - } - voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); - } - /** - * Estimate the width required to render 'voices'. This is done by: - * 1. Sum the widths of all the tick contexts - * 2. Estimate the padding. - * The latter is done by calculating the padding 3 different ways, and taking the - * greatest value: - * 1. the padding required for unaligned notes in different voices - * 2. the padding based on the stddev of the tickable widths - * 3. the padding based on the stddev of the tickable durations. - * - * The last 2 quantities estimate a 'width entropy', where notes might need more - * room than the proportional formatting gives them. A measure of all same duration - * and width will need no extra padding, and all these quantities will be - * zero in that case. - * - * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. - * - * @param voices the voices that contain the notes - * @returns the estimated width in pixels - */ - preCalculateMinTotalWidth(voices) { - const unalignedPadding = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); - // Calculate additional padding based on 3 methods: - // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations - let unalignedCtxCount = 0; - let wsum = 0; - let dsum = 0; - const widths = []; - const durations = []; - // Cache results. - if (this.hasMinTotalWidth) - return this.minTotalWidth; - // Create tick contexts. - if (!voices) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); - } - this.createTickContexts(voices); - // eslint-disable-next-line - const { list: contextList, map: contextMap } = this.tickContexts; - this.minTotalWidth = 0; - // Go through each tick context and calculate total width, - // and also accumulate values used in padding hints - contextList.forEach((tick) => { - const context = contextMap[tick]; - context.preFormat(); - // If this TC doesn't have all the voices on it, it's unaligned. - // so increment the unaligned padding accumulator - if (context.getTickables().length < voices.length) { - unalignedCtxCount += 1; - } - // Calculate the 'width entropy' over all the Tickables. - context.getTickables().forEach((t) => { - wsum += t.getMetrics().width; - dsum += t.getTicks().value(); - widths.push(t.getMetrics().width); - durations.push(t.getTicks().value()); - }); - const width = context.getWidth(); - this.minTotalWidth += width; - }); - this.hasMinTotalWidth = true; - // normalized (0-1) STDDEV of widths/durations gives us padding hints. - const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; - const wvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(widths.map((ll) => Math.pow(ll - wavg, 2))); - const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; - const davg = dsum / durations.length; - const dvar = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(durations.map((ll) => Math.pow(ll - davg, 2))); - const dpads = Math.pow(dvar / durations.length, 0.5) / davg; - // Find max of 3 methods pad the width with that - const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; - const unalignedPad = unalignedPadding * unalignedCtxCount; - return this.minTotalWidth + Math.max(unalignedPad, padmax); - } - /** - * Get minimum width required to render all voices. Either `format` or - * `preCalculateMinTotalWidth` must be called before this method. - */ - getMinTotalWidth() { - if (!this.hasMinTotalWidth) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); - } - return this.minTotalWidth; - } - /** Calculate the resolution multiplier for `voices`. */ - static getResolutionMultiplier(voices) { - if (!voices || !voices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('BadArgument', 'No voices to format'); - } - const totalTicks = voices[0].getTotalTicks(); - const resolutionMultiplier = voices.reduce((accumulator, voice) => { - if (!voice.getTotalTicks().equals(totalTicks)) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); - } - if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_10__.Voice.Mode.STRICT && !voice.isComplete()) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); - } - return Math.max(accumulator, _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction.LCM(accumulator, voice.getResolutionMultiplier())); - }, 1); - return resolutionMultiplier; - } - /** Create a `ModifierContext` for each tick in `voices`. */ - createModifierContexts(voices) { - if (voices.length == 0) - return; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - // Initialize tick maps. - const tickToContextMap = new Map(); - const contexts = []; - // For each voice, extract notes and create a context for every - // new tick that hasn't been seen before. - voices.forEach((voice) => { - // Use resolution multiplier as denominator so that no additional expansion - // of fractional tick values is needed. - const ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_2__.Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - // If we have no tick context for this tick, create one. - if (!staveTickToContextMap) { - tickToContextMap.set(tickable.getStave(), {}); - staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - } - if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { - const newContext = new _modifiercontext__WEBPACK_IMPORTED_MODULE_3__.ModifierContext(); - contexts.push(newContext); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - staveTickToContextMap[integerTicks] = newContext; - } - // Add this tickable to the TickContext. - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - tickable.addToModifierContext(staveTickToContextMap[integerTicks]); - ticksUsed.add(tickable.getTicks()); - }); - }); - this.modifierContexts.push({ - map: tickToContextMap, - array: contexts, - resolutionMultiplier, - }); - } - /** - * Create a `TickContext` for each tick in `voices`. Also calculate the - * total number of ticks in voices. - */ - createTickContexts(voices) { - const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); - const contexts = createContexts(voices, (tick) => new _tickcontext__WEBPACK_IMPORTED_MODULE_7__.TickContext(tick), fn); - this.tickContexts = contexts; - const contextArray = this.tickContexts.array; - contextArray.forEach((context) => { - context.tContexts = contextArray; - }); - return contexts; - } - /** - * Get the AlignmentContexts of TickContexts that were created by createTickContexts. - * Returns undefined if createTickContexts has not yet been run. - */ - getTickContexts() { - return this.tickContexts; - } - /** - * This is the core formatter logic. Format voices and justify them - * to `justifyWidth` pixels. `renderingContext` is required to justify elements - * that can't retrieve widths without a canvas. This method sets the `x` positions - * of all the tickables/notes in the formatter. - */ - preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { - // Initialize context maps. - const contexts = this.tickContexts; - if (!contexts) { - throw new _util__WEBPACK_IMPORTED_MODULE_9__.RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); - } - const { list: contextList, map: contextMap } = contexts; - // Reset loss history for evaluator. - this.lossHistory = []; - // If voices and a stave were provided, set the Stave for each voice - // and preFormat to apply Y values to the notes; - if (voicesParam && stave) { - voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); - } - // Now distribute the ticks to each tick context, and assign them their - // own X positions. - let x = 0; - let shift = 0; - this.minTotalWidth = 0; - let totalTicks = 0; - // Pass 1: Give each note maximum width requested by context. - contextList.forEach((tick) => { - const context = contextMap[tick]; - // Make sure that all tickables in this context have calculated their - // space requirements. - context.preFormat(); - const width = context.getWidth(); - this.minTotalWidth += width; - const maxTicks = context.getMaxTicks().value(); - totalTicks += maxTicks; - const metrics = context.getMetrics(); - x = x + shift + metrics.totalLeftPx; - context.setX(x); - // Calculate shift for the next tick. - shift = width - metrics.totalLeftPx; - }); - // Use softmax based on all notes across all staves. (options.globalSoftmax) - const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; - const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); - const expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(contextList.map(exp)); - this.minTotalWidth = x + shift; - this.hasMinTotalWidth = true; - // No justification needed. End formatting. - if (justifyWidth <= 0) - return this.evaluate(); - // Start justification. Subtract the right extra pixels of the final context because the formatter - // justifies based on the context's X position, which is the left-most part of the note head. - const firstContext = contextMap[contextList[0]]; - const lastContext = contextMap[contextList[contextList.length - 1]]; - // Calculate the "distance error" between the tick contexts. The expected distance is the spacing proportional to - // the softmax of the ticks. - function calculateIdealDistances(adjustedJustifyWidth) { - const distances = contextList.map((tick, i) => { - const context = contextMap[tick]; - const voices = context.getTickablesByVoice(); - let backTickable; - if (i > 0) { - const prevContext = contextMap[contextList[i - 1]]; - // Go through each tickable and search backwards for another tickable - // in the same voice. If found, use that duration (ticks) to calculate - // the expected distance. - for (let j = i - 1; j >= 0; j--) { - const backTick = contextMap[contextList[j]]; - const backVoices = backTick.getTickablesByVoice(); - // Look for matching voices between tick contexts. - const matchingVoices = []; - Object.keys(voices).forEach((v) => { - if (backVoices[v]) { - matchingVoices.push(v); - } - }); - if (matchingVoices.length > 0) { - // Found matching voices, get largest duration - let maxTicks = 0; - let maxNegativeShiftPx = Infinity; - let expectedDistance = 0; - matchingVoices.forEach((v) => { - const ticks = backVoices[v].getTicks().value(); - if (ticks > maxTicks) { - backTickable = backVoices[v]; - maxTicks = ticks; - } - // Calculate the limits of the shift based on modifiers, etc. - const thisTickable = voices[v]; - const insideLeftEdge = thisTickable.getX() - - (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); - const backMetrics = backVoices[v].getMetrics(); - const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; - // Don't allow shifting if notes in the same voice can collide - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); - }); - // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right - // so that two different tick contexts don't align across staves. - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); - // Calculate the expected distance of the current context from the last matching tickable. The - // distance is scaled down by the softmax for the voice. - if (globalSoftmax) { - const t = totalTicks; - expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; - } - else if (typeof backTickable !== 'undefined') { - expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; - } - return { - expectedDistance, - maxNegativeShiftPx, - fromTickable: backTickable, - }; - } - } - } - return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; - }); - return distances; - } - function shiftToIdealDistances(idealDistances) { - // Distribute ticks to the contexts based on the calculated distance error. - const centerX = adjustedJustifyWidth / 2; - let spaceAccum = 0; - contextList.forEach((tick, index) => { - const context = contextMap[tick]; - if (index > 0) { - const contextX = context.getX(); - const ideal = idealDistances[index]; - const errorPx = (0,_util__WEBPACK_IMPORTED_MODULE_9__.defined)(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); - let negativeShiftPx = 0; - if (errorPx > 0) { - spaceAccum += errorPx; - } - else if (errorPx < 0) { - negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); - spaceAccum += -negativeShiftPx; - } - context.setX(contextX + spaceAccum); - } - // Move center aligned tickables to middle - context.getCenterAlignedTickables().forEach((tickable) => { - tickable.setCenterXShift(centerX - context.getX()); - }); - }); - return lastContext.getX() - firstContext.getX(); - } - const adjustedJustifyWidth = justifyWidth - - lastContext.getMetrics().notePx - - lastContext.getMetrics().totalRightPx - - firstContext.getMetrics().totalLeftPx; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_6__.Tables.currentMusicFont(); - const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); - const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); - const leftPadding = musicFont.lookupMetric('stave.padding'); - let targetWidth = adjustedJustifyWidth; - const distances = calculateIdealDistances(targetWidth); - let actualWidth = shiftToIdealDistances(distances); - // Just one context. Done formatting. - if (contextList.length === 1) - return 0; - const calcMinDistance = (targetWidth, distances) => { - let mdCalc = targetWidth / 2; - if (distances.length > 1) { - for (let di = 1; di < distances.length; ++di) { - mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); - } - } - return mdCalc; - }; - const minDistance = calcMinDistance(targetWidth, distances); - // right justify to either the configured padding, or the min distance between notes, whichever is greatest. - // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break - // existing visual regression tests. - const paddingMaxCalc = (curTargetWidth) => { - let lastTickablePadding = 0; - const lastTickable = lastContext && lastContext.getMaxTickable(); - if (lastTickable) { - const voice = lastTickable.getVoice(); - // If the number of actual ticks in the measure <> configured ticks, right-justify - // because the softmax won't yield the correct value - if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { - return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; - } - const tickWidth = lastTickable.getWidth(); - lastTickablePadding = - voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); - } - return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; - }; - let paddingMax = paddingMaxCalc(targetWidth); - let paddingMin = paddingMax - (configMaxPadding - configMinPadding); - const maxX = adjustedJustifyWidth - paddingMin; - let iterations = maxIterations; - // Adjust justification width until the right margin is as close as possible to the calculated padding, - // without going over - while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { - targetWidth -= actualWidth - maxX; - paddingMax = paddingMaxCalc(targetWidth); - paddingMin = paddingMax - (configMaxPadding - configMinPadding); - actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); - iterations--; - } - this.justifyWidth = justifyWidth; - return this.evaluate(); - } - /** Calculate the total cost of this formatting decision. */ - evaluate() { - const contexts = this.tickContexts; - const justifyWidth = this.justifyWidth; - // Calculate available slack per tick context. This works out how much freedom - // to move a context has in either direction, without affecting other notes. - this.contextGaps = { total: 0, gaps: [] }; - contexts.list.forEach((tick, index) => { - if (index === 0) - return; - const prevTick = contexts.list[index - 1]; - const prevContext = contexts.map[prevTick]; - const context = contexts.map[tick]; - const prevMetrics = prevContext.getMetrics(); - const currMetrics = context.getMetrics(); - // Calculate X position of right edge of previous note - const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; - // Calculate X position of left edge of current note - const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; - const gap = insideLeftEdge - insideRightEdge; - this.contextGaps.total += gap; - this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); - // Tell the tick contexts how much they can reposition themselves. - context.getFormatterMetrics().freedom.left = gap; - prevContext.getFormatterMetrics().freedom.right = gap; - }); - // Calculate mean distance in each voice for each duration type, then calculate - // how far each note is from the mean. - this.durationStats = {}; - const durationStats = this.durationStats; - function updateStats(duration, space) { - const stats = durationStats[duration]; - if (stats === undefined) { - durationStats[duration] = { mean: space, count: 1 }; - } - else { - stats.count += 1; - stats.mean = (stats.mean + space) / 2; - } - } - this.voices.forEach((voice) => { - voice.getTickables().forEach((note, i, notes) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getMetrics(); - const formatterMetrics = note.getFormatterMetrics(); - const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; - let space = 0; - if (i < notes.length - 1) { - const rightNote = notes[i + 1]; - const rightMetrics = rightNote.getMetrics(); - const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; - space = rightNoteEdge - leftNoteEdge; - formatterMetrics.space.used = rightNote.getX() - note.getX(); - rightNote.getFormatterMetrics().freedom.left = space; - } - else { - space = justifyWidth - leftNoteEdge; - formatterMetrics.space.used = justifyWidth - note.getX(); - } - formatterMetrics.freedom.right = space; - updateStats(duration, formatterMetrics.space.used); - }); - }); - // Calculate how much each note deviates from the mean. Loss function is square - // root of the sum of squared deviations. - let totalDeviation = 0; - this.voices.forEach((voice) => { - voice.getTickables().forEach((note) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getFormatterMetrics(); - metrics.space.mean = durationStats[duration].mean; - metrics.duration = duration; - metrics.iterations += 1; - metrics.space.deviation = metrics.space.used - metrics.space.mean; - totalDeviation += Math.pow(metrics.space.deviation, 2); - }); - }); - this.totalCost = Math.sqrt(totalDeviation); - this.lossHistory.push(this.totalCost); - return this.totalCost; - } - /** - * Run a single iteration of rejustification. At a high level, this method calculates - * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an - * attempt to reduce the cost. You can call this method multiple times until it finds - * and oscillates around a global minimum. - * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift - * the formatter should make based on its cost function. - */ - tune(options) { - var _a; - const contexts = this.tickContexts; - if (!contexts) { - return 0; - } - const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; - // Move `current` tickcontext by `shift` pixels, and adjust the freedom - // on adjacent tickcontexts. - function move(current, shift, prev, next) { - current.setX(current.getX() + shift); - current.getFormatterMetrics().freedom.left += shift; - current.getFormatterMetrics().freedom.right -= shift; - if (prev) - prev.getFormatterMetrics().freedom.right += shift; - if (next) - next.getFormatterMetrics().freedom.left -= shift; - } - let shift = 0; - this.totalShift = 0; - contexts.list.forEach((tick, index, list) => { - const context = contexts.map[tick]; - const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; - const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; - move(context, shift, prevContext, nextContext); - const cost = -(0,_util__WEBPACK_IMPORTED_MODULE_9__.sumArray)(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); - if (cost > 0) { - shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else if (cost < 0) { - if (nextContext) { - shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else { - shift = 0; - } - } - shift *= alpha; - this.totalShift += shift; - }); - return this.evaluate(); - } - /** - * This is the top-level call for all formatting logic completed - * after `x` *and* `y` values have been computed for the notes - * in the voices. - */ - postFormat() { - this.modifierContexts.forEach((modifierContexts) => { - modifierContexts.array.forEach((mc) => mc.postFormat()); - }); - this.tickContexts.list.forEach((tick) => { - this.tickContexts.map[tick].postFormat(); - }); - return this; - } - /** - * Take all `voices` and create `ModifierContext`s out of them. This tells - * the formatters that the voices belong on a single stave. - */ - joinVoices(voices) { - this.createModifierContexts(voices); - this.hasMinTotalWidth = false; - return this; - } - /** - * Align rests in voices, justify the contexts, and position the notes - * so voices are aligned and ready to render onto the stave. This method - * mutates the `x` positions of all tickables in `voices`. - * - * Voices are full justified to fit in `justifyWidth` pixels. - * - * Set `options.context` to the rendering context. Set `options.align_rests` - * to true to enable rest alignment. - */ - format(voices, justifyWidth, options) { - const opts = Object.assign({ align_rests: false }, options); - this.voices = voices; - const softmaxFactor = this.formatterOptions.softmaxFactor; - if (softmaxFactor) { - this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); - } - this.alignRests(voices, opts.align_rests); - this.createTickContexts(voices); - this.preFormat(justifyWidth, opts.context, voices, opts.stave); - // Only postFormat if a stave was supplied for y value formatting - if (opts.stave) - this.postFormat(); - return this; - } - // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`. - formatToStave(voices, stave, optionsParam) { - const options = Object.assign({ context: stave.getContext() }, optionsParam); - // eslint-disable-next-line - const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - L('Formatting voices to width: ', justifyWidth); - return this.format(voices, justifyWidth, options); - } - getTickContext(tick) { - var _a; - return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; - } -} -// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`. -Formatter.DEBUG = false; - - -/***/ }), - -/***/ "./src/fraction.ts": -/*!*************************!*\ - !*** ./src/fraction.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Fraction": () => (/* binding */ Fraction) -/* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// Author: Joshua Koo / @zz85 -// Author: @incompleteopus - - -/** Fraction represents a rational number. */ -class Fraction { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.Fraction; - } - /** - * GCD: Greatest common divisor using the Euclidean algorithm. - * Note: GCD(0, 0) => 0 and GCD(0, n) => n. - */ - static GCD(a, b) { - if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); - } - let t; - while (b !== 0) { - t = b; - b = a % b; - a = t; - } - return a; - } - /** LCM: Lowest common multiple. */ - static LCM(a, b) { - return (a * b) / Fraction.GCD(a, b); - } - /** Lowest common multiple for more than two numbers. */ - static LCMM(args) { - if (args.length === 0) { - return 0; - } - else if (args.length === 1) { - return args[0]; - } - else if (args.length === 2) { - return Fraction.LCM(args[0], args[1]); - } - else { - // args.shift() removes the first number. - // LCM the first number with the rest of the numbers. - return Fraction.LCM(args.shift(), Fraction.LCMM(args)); - } - } - /** Set the numerator and denominator. */ - constructor(numerator, denominator) { - this.numerator = 1; - this.denominator = 1; - this.set(numerator, denominator); - } - /** Set the numerator and denominator. */ - set(numerator = 1, denominator = 1) { - this.numerator = numerator; - this.denominator = denominator; - return this; - } - /** Return the value of the fraction. */ - value() { - return this.numerator / this.denominator; - } - /** Simplify numerator and denominator using GCD. */ - simplify() { - let u = this.numerator; - let d = this.denominator; - const gcd = Fraction.GCD(u, d); - u /= gcd; - d /= gcd; - if (d < 0) { - d = -d; - u = -u; - } - return this.set(u, d); - } - /** Add value of another fraction. */ - add(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a + otherNumerator * b; - return this.set(u, lcm); - } - /** Substract value of another fraction. */ - subtract(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a - otherNumerator * b; - return this.set(u, lcm); - } - /** Multiply by value of another fraction. */ - multiply(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); - } - /** Divide by value of another Fraction. */ - divide(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); - } - /** Simplify both sides and check if they are equal. */ - equals(compare) { - const a = Fraction.__staticFractionA.copy(compare).simplify(); - const b = Fraction.__staticFractionB.copy(this).simplify(); - return a.numerator === b.numerator && a.denominator === b.denominator; - } - /** Greater than operator. */ - greaterThan(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator > 0; - } - /** Greater than or equals operator. */ - greaterThanEquals(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator >= 0; - } - /** Less than operator. */ - lessThan(compare) { - return !this.greaterThanEquals(compare); - } - /** Less than or equals operator. */ - lessThanEquals(compare) { - return !this.greaterThan(compare); - } - /** Return a new copy with current values. */ - clone() { - return new Fraction(this.numerator, this.denominator); - } - /** Copy value of another fraction. */ - copy(other) { - if (typeof other === 'number') { - return this.set(other, 1); - } - else { - return this.set(other.numerator, other.denominator); - } - } - /** Return the integer component (eg. 5/2 => 2). */ - quotient() { - return Math.floor(this.numerator / this.denominator); - } - /** Return the remainder component (eg. 5/2 => 1). */ - remainder() { - return this.numerator % this.denominator; - } - /** Calculate absolute value. */ - makeAbs() { - this.denominator = Math.abs(this.denominator); - this.numerator = Math.abs(this.numerator); - return this; - } - /** Return a raw string representation (eg. "5/2"). */ - toString() { - return `${this.numerator}/${this.denominator}`; - } - /** Return a simplified string respresentation. */ - toSimplifiedString() { - return Fraction.__staticFractionTmp.copy(this).simplify().toString(); - } - /** Return string representation in mixed form. */ - toMixedString() { - let s = ''; - const q = this.quotient(); - const f = Fraction.__staticFractionTmp.copy(this); - if (q < 0) { - f.makeAbs(); - } - if (q !== 0) { - s += q; - if (f.numerator !== 0) { - s += ` ${f.toSimplifiedString()}`; - } - } - else if (f.numerator === 0) { - s = '0'; - } - else { - s = f.toSimplifiedString(); - } - return s; - } - /** Parse a fraction string. */ - parse(str) { - const i = str.split('/'); - const n = parseInt(i[0], 10); - const d = i[1] ? parseInt(i[1], 10) : 1; - return this.set(n, d); - } -} -// Cached objects for comparisons. -Fraction.__staticFractionA = new Fraction(); -Fraction.__staticFractionB = new Fraction(); -Fraction.__staticFractionTmp = new Fraction(); -/** Helper function to extract the numerator and denominator from another fraction. */ -function getNumeratorAndDenominator(n, d = 1) { - if (typeof n === 'number') { - // Both params are numbers, so we return them as [numerator, denominator]. - return [n, d]; - } - else { - // First param is a Fraction object. We ignore the second param. - return [n.numerator, n.denominator]; - } -} - - -/***/ }), - -/***/ "./src/frethandfinger.ts": -/*!*******************************!*\ - !*** ./src/frethandfinger.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "FretHandFinger": () => (/* binding */ FretHandFinger) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// Author Larry Kuhns 2013 -// Class to draws string numbers into the notation. - - - - - - -class FretHandFinger extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.FretHandFinger; - } - // Arrange fingerings inside a ModifierContext. - static format(nums, state) { - const { left_shift, right_shift } = state; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shiftLeft = 0; - let shiftRight = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_3__.TextFormatter.create(num.textFont); - const textHeight = textFormatter.maxHeight; - if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { - state.top_text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (num.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { - state.text_line += textHeight / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); - } - if (right_shift === 0) { - shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); - } - } - prev_note = note; - } - nums_list.push({ - note, - num, - pos, - line: props.line, - shiftL: shiftLeft, - shiftR: shiftRight, - }); - } - // Sort fingernumbers by line number. - nums_list.sort((a, b) => b.line - a.line); - let numShiftL = 0; - let numShiftR = 0; - let xWidthL = 0; - let xWidthR = 0; - let lastLine = null; - let lastNote = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; - // Reset the position of the string number every line. - if (line !== lastLine || note !== lastNote) { - numShiftL = left_shift + shiftL; - numShiftR = right_shift + shiftR; - } - const numWidth = num.getWidth() + num_spacing; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - num.setXShift(left_shift + numShiftL); - num_shift = left_shift + numWidth; // spacing - xWidthL = num_shift > xWidthL ? num_shift : xWidthL; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - num.setXShift(numShiftR); - num_shift = shiftRight + numWidth; // spacing - xWidthR = num_shift > xWidthR ? num_shift : xWidthR; - } - lastLine = line; - lastNote = note; - } - state.left_shift += xWidthL; - state.right_shift += xWidthR; - return true; - } - static easyScoreHook({ fingerings } = {}, note, builder) { - fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { - const split = fingeringString.trim().split('.'); - const params = { number: split[0] }; - if (split[1]) - params.position = split[1]; - return builder.getFactory().Fingering(params); - }).map((fingering, index) => note.addModifier(fingering, index)); - } - constructor(finger) { - super(); - this.finger = finger; - this.width = 7; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; // Default position above stem or note head - this.x_shift = 0; - this.y_shift = 0; - this.x_offset = 0; // Horizontal offset from default - this.y_offset = 0; // Vertical offset from default - this.resetFont(); - } - setFretHandFinger(finger) { - this.finger = finger; - return this; - } - getFretHandFinger() { - return this.finger; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let dot_x = start.x + this.x_shift + this.x_offset; - let dot_y = start.y + this.y_shift + this.y_offset + 5; - switch (this.position) { - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: - dot_x -= 4; - dot_y -= 12; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: - dot_x -= 2; - dot_y += 10; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: - dot_x -= this.width; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: - dot_x += 1; - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); - } - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('' + this.finger, dot_x, dot_y); - ctx.restore(); - } -} -FretHandFinger.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 9, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/ghostnote.ts": -/*!**************************!*\ - !*** ./src/ghostnote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GhostNote": () => (/* binding */ GhostNote) -/* harmony export */ }); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description - - - -const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; -class GhostNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_0__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GhostNote; - } - constructor(parameter) { - if (!parameter) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); - } - let noteStruct; - if (typeof parameter === 'string') { - // Preserve backwards-compatibility - noteStruct = { duration: parameter }; - } - else if (typeof parameter === 'object') { - noteStruct = parameter; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', ERROR_MSG); - } - super(noteStruct); - // Note properties - this.setWidth(0); - } - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest() { - return true; - } - setStave(stave) { - super.setStave(stave); - return this; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - // Draw Annotations - this.setRendered(); - for (let i = 0; i < this.modifiers.length; ++i) { - const modifier = this.modifiers[i]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_1__.isAnnotation)(modifier)) { - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - } - } - } -} - - -/***/ }), - -/***/ "./src/glyph.ts": -/*!**********************!*\ - !*** ./src/glyph.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Glyph": () => (/* binding */ Glyph), -/* harmony export */ "OutlineCode": () => (/* binding */ OutlineCode) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -var OutlineCode; -(function (OutlineCode) { - OutlineCode[OutlineCode["MOVE"] = 0] = "MOVE"; - OutlineCode[OutlineCode["LINE"] = 1] = "LINE"; - OutlineCode[OutlineCode["QUADRATIC"] = 2] = "QUADRATIC"; - OutlineCode[OutlineCode["BEZIER"] = 3] = "BEZIER"; -})(OutlineCode || (OutlineCode = {})); -class GlyphCacheEntry { - constructor(fontStack, code, category) { - this.point = -1; - this.metrics = Glyph.loadMetrics(fontStack, code, category); - this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); - if (category) { - this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); - } - } -} -class GlyphCache { - constructor() { - this.cache = new Map(); - } - lookup(code, category) { - let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); - if (entries === undefined) { - entries = {}; - this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); - } - const key = category ? `${code}%${category}` : code; - let entry = entries[key]; - if (entry === undefined) { - entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); - entries[key] = entry; - } - return entry; - } -} -class GlyphOutline { - constructor(outline, originX, originY, scale) { - this.outline = outline; - this.originX = originX; - this.originY = originY; - this.scale = scale; - this.i = 0; - this.precision = 1; - // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale. - this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.RENDER_PRECISION_PLACES); - } - done() { - return this.i >= this.outline.length; - } - next() { - return Math.round((this.outline[this.i++] * this.precision) / this.precision); - } - nextX() { - return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - nextY() { - return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - static parse(str) { - const result = []; - const parts = str.split(' '); - let i = 0; - while (i < parts.length) { - switch (parts[i++]) { - case 'm': - result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'l': - result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'q': - result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'b': - result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - } - } - return result; - } -} -class Glyph extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { - ////////////////////////////////////////////////////////////////////////////////////////////////// - // STATIC MEMBERS - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Glyph; - } - /** - * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, - * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. - * - * @param font - * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. - * @param code - * @param key - * @param defaultValue - */ - static lookupFontMetric(font, category, code, key, defaultValue) { - let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); - if (value === undefined) { - // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time). - value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); - } - return value; - } - static lookupGlyph(fontStack, code) { - (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(fontStack, 'BadFontStack', 'Font stack is misconfigured'); - let glyph; - let font; - for (let i = 0; i < fontStack.length; i++) { - font = fontStack[i]; - glyph = font.getGlyphs()[code]; - if (glyph) - return { glyph, font }; - } - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); - } - static loadMetrics(fontStack, code, category) { - const { glyph, font } = Glyph.lookupGlyph(fontStack, code); - if (!glyph.o) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); - let x_shift = 0; - let y_shift = 0; - let scale = 1; - if (category && font) { - x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); - y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); - scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); - } - const x_min = glyph.x_min; - const x_max = glyph.x_max; - const ha = glyph.ha; - if (!glyph.cached_outline) { - glyph.cached_outline = GlyphOutline.parse(glyph.o); - } - return { - x_min, - x_max, - x_shift, - y_shift, - scale, - ha, - outline: glyph.cached_outline, - font, - width: x_max - x_min, - height: ha, - }; - } - /** - * Renders glyphs from the default font stack. - * - * @param ctx Canvas or SVG context - * @param x_pos x coordinate - * @param y_pos y coordinate - * @param point the point size of the font - * @param code the glyph code in font.getGlyphs() - * @param options - * @returns - */ - static renderGlyph(ctx, x_pos, y_pos, point, code, options) { - var _a; - const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); - const metrics = data.metrics; - if (data.point != -1) { - point = data.point; - } - const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; - const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; - Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); - return metrics; - } - static renderOutline(ctx, outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - ctx.beginPath(); - let x, y; - while (!go.done()) { - switch (go.next()) { - case OutlineCode.MOVE: - ctx.moveTo(go.nextX(), go.nextY()); - break; - case OutlineCode.LINE: - ctx.lineTo(go.nextX(), go.nextY()); - break; - case OutlineCode.QUADRATIC: - x = go.nextX(); - y = go.nextY(); - ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); - break; - case OutlineCode.BEZIER: - x = go.nextX(); - y = go.nextY(); - ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - break; - } - } - ctx.fill(); - } - static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - const bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_1__.BoundingBoxComputation(); - // (penX, penY) hold the pen position: the start of each stroke. - let penX = x_pos; - let penY = y_pos; - let x, y; - while (!go.done()) { - switch (go.next()) { - case OutlineCode.MOVE: - // Note that we don't add any points to the bounding box until a srroke is actually drawn. - penX = go.nextX(); - penY = go.nextY(); - break; - case OutlineCode.LINE: - bboxComp.addPoint(penX, penY); - penX = go.nextX(); - penY = go.nextY(); - bboxComp.addPoint(penX, penY); - break; - case OutlineCode.QUADRATIC: - x = go.nextX(); - y = go.nextY(); - bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - case OutlineCode.BEZIER: - x = go.nextX(); - y = go.nextY(); - bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - } - } - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); - } - static getWidth(code, point, category) { - const data = Glyph.cache.lookup(code, category); - if (data.point != -1) { - point = data.point; - } - const scale = (point * 72) / (data.metrics.font.getResolution() * 100); - return data.bbox.getW() * scale; - } - /** - * @param code - * @param point - * @param options - */ - constructor(code, point, options) { - super(); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // INSTANCE MEMBERS - this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(0, 0, 0, 0); - this.topGlyphs = []; - this.botGlyphs = []; - this.options = {}; - this.scale = 1; - this.code = code; - this.point = point; - this.originShift = { x: 0, y: 0 }; - this.x_shift = 0; - this.y_shift = 0; - if (options) { - this.setOptions(options); - } - else { - this.reset(); - } - } - // eslint-disable-next-line - draw(...args) { - // DO NOTHING. - } - getCode() { - return this.code; - } - // eslint-disable-next-line - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.reset(); - } - setPoint(point) { - this.point = point; - return this; - } - setStave(stave) { - this.stave = stave; - return this; - } - getXShift() { - return this.x_shift; - } - setXShift(x_shift) { - this.x_shift = x_shift; - return this; - } - getYshift() { - return this.y_shift; - } - setYShift(y_shift) { - this.y_shift = y_shift; - return this; - } - reset() { - const data = Glyph.cache.lookup(this.code, this.options.category); - this.metrics = data.metrics; - // Override point from metrics file - if (data.point != -1) { - this.point = data.point; - } - this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); - this.bbox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); - } - checkMetrics() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); - } - getMetrics() { - const metrics = this.checkMetrics(); - const metricsScale = metrics.scale; - return { - x_min: metrics.x_min * this.scale * metricsScale, - x_max: metrics.x_max * this.scale * metricsScale, - width: this.bbox.getW(), - height: this.bbox.getH(), - scale: this.scale * metricsScale, - x_shift: metrics.x_shift, - y_shift: metrics.y_shift, - outline: metrics.outline, - font: metrics.font, - ha: metrics.ha, - }; - } - setOriginX(x) { - const { bbox } = this; - const originX = Math.abs(bbox.getX() / bbox.getW()); - const xShift = (x - originX) * bbox.getW(); - this.originShift.x = -xShift; - } - setOriginY(y) { - const { bbox } = this; - const originY = Math.abs(bbox.getY() / bbox.getH()); - const yShift = (y - originY) * bbox.getH(); - this.originShift.y = -yShift; - } - setOrigin(x, y) { - this.setOriginX(x); - this.setOriginY(y); - } - render(ctx, x, y) { - const metrics = this.checkMetrics(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(ctx); - const xPos = x + this.originShift.x + metrics.x_shift; - const yPos = y + this.originShift.y + metrics.y_shift; - Glyph.renderOutline(ctx, outline, scale, xPos, yPos); - this.restoreStyle(ctx); - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - renderToStave(x) { - const context = this.checkContext(); - const metrics = this.checkMetrics(); - const stave = this.checkStave(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(); - const xPos = x + this.x_shift + metrics.x_shift; - const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; - Glyph.renderOutline(context, outline, scale, xPos, yPos); - this.restoreStyle(); - } -} -Glyph.cache = new GlyphCache(); -// The current cache key for GlyphCache above. -// Computed when Flow.setMusicFont(...) is called. -// It is set to a comma separated list of font names. -Glyph.CURRENT_CACHE_KEY = ''; -// Used by the GlyphCache above. -// Set when Flow.setMusicFont(...) is called. -Glyph.MUSIC_FONT_STACK = []; - - -/***/ }), - -/***/ "./src/glyphnote.ts": -/*!**************************!*\ - !*** ./src/glyphnote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GlyphNote": () => (/* binding */ GlyphNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Any glyph that is set to appear on a Stave and take up musical time and graphical space. - - -class GlyphNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.GlyphNote; - } - constructor(glyph, noteStruct, options) { - super(noteStruct); - this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); - // Note properties - this.ignore_ticks = this.options.ignoreTicks; - this.setGlyph(glyph); - } - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth(this.glyph.getMetrics().width); - return this; - } - getBoundingBox() { - return this.glyph.getBoundingBox(); - } - preFormat() { - if (!this.preFormatted && this.modifierContext) { - this.modifierContext.preFormat(); - } - this.preFormatted = true; - return this; - } - drawModifiers() { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - modifier.setContext(ctx); - modifier.drawWithStyle(); - } - } - /** Get the glyph width. */ - getGlyphWidth() { - return this.glyph.getMetrics().width; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('glyphNote', this.getAttribute('id')); - // Context is set when setStave is called on Note - const glyph = this.glyph; - if (!glyph.getContext()) { - glyph.setContext(ctx); - } - glyph.setStave(stave); - glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); - const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); - glyph.renderToStave(x); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} - - -/***/ }), - -/***/ "./src/gracenote.ts": -/*!**************************!*\ - !*** ./src/gracenote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceNote": () => (/* binding */ GraceNote) -/* harmony export */ }); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - - - -class GraceNote extends _stavenote__WEBPACK_IMPORTED_MODULE_0__.StaveNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.GraceNote; - } - static get LEDGER_LINE_OFFSET() { - return 2; - } - static get SCALE() { - return 0.66; - } - constructor(noteStruct) { - super(Object.assign({ glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); - this.slash = noteStruct.slash || false; - this.slur = true; - this.buildNoteHeads(); - this.width = 3; - } - getStemExtension() { - if (this.stem_extension_override) { - return this.stem_extension_override; - } - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - let ret = super.getStemExtension(); - if (glyphProps.stem) { - const staveNoteScale = this.getStaveNoteScale(); - ret = (_stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.HEIGHT; - } - return ret; - } - return 0; - } - getStaveNoteScale() { - return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.NOTATION_FONT_SCALE; - } - draw() { - super.draw(); - this.setRendered(); - const stem = this.stem; - if (this.slash && stem) { - const staveNoteScale = this.getStaveNoteScale(); - // some magic numbers are based on the staveNoteScale 0.66. - const offsetScale = staveNoteScale / 0.66; - let slashBBox = undefined; - const beam = this.beam; - if (beam) { - // FIXME: should render slash after beam? - if (!beam.postFormatted) { - beam.postFormat(); - } - slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { - stem: 6 * offsetScale, - beam: 5 * offsetScale, - }); - } - else { - const stem_direction = this.getStemDirection(); - const noteHeadBounds = this.getNoteHeadBounds(); - const noteStemHeight = stem.getHeight(); - let x = this.getAbsoluteX(); - let y = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN - ? noteHeadBounds.y_top - noteStemHeight - : noteHeadBounds.y_bottom - noteStemHeight; - const defaultStemExtention = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; - let defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STEM_HEIGHT; - defaultOffsetY -= defaultOffsetY / 2.8; - defaultOffsetY += defaultStemExtention; - y += defaultOffsetY * staveNoteScale * stem_direction; - const offsets = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_1__.Stem.UP - ? { - x1: 1, - y1: 0, - x2: 13, - y2: -9, - } - : { - x1: -4, - y1: 1, - x2: 13, - y2: 9, - }; - x += offsets.x1 * offsetScale; - y += offsets.y1 * offsetScale; - slashBBox = { - x1: x, - y1: y, - x2: x + offsets.x2 * offsetScale, - y2: y + offsets.y2 * offsetScale, - }; - } - // FIXME: avoid staff lines, ledger lines or others. - const ctx = this.checkContext(); - ctx.save(); - ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value. - ctx.beginPath(); - ctx.moveTo(slashBBox.x1, slashBBox.y1); - ctx.lineTo(slashBBox.x2, slashBBox.y2); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); - } - } - calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { - const beam = this.beam; - if (!beam) - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('NoBeam', "Can't calculate without a beam."); - const beam_slope = beam.slope; - const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; - const scaleX = isBeamEndNote ? -1 : 1; - const beam_angle = Math.atan(beam_slope * scaleX); - // slash line intersecting point on beam. - const iPointOnBeam = { - dx: Math.cos(beam_angle) * slashBeamOffset, - dy: Math.sin(beam_angle) * slashBeamOffset, - }; - slashStemOffset *= this.getStemDirection(); - const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); - const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; - const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; - const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; - const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; - const stemX = this.getStemX(); - const stem0X = beam.notes[0].getStemX(); - const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; - const ret = { - x1: stemX - protrusion_stem_dx, - y1: stemY + slashStemOffset - protrusion_stem_dy, - x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, - y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, - }; - return ret; - } -} - - -/***/ }), - -/***/ "./src/gracenotegroup.ts": -/*!*******************************!*\ - !*** ./src/gracenotegroup.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceNoteGroup": () => (/* binding */ GraceNoteGroup) -/* harmony export */ }); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This file implements `GraceNoteGroup` which is used to format and -// render grace notes. - - - - - - - - - - -// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (GraceNoteGroup.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_8__.log)('Vex.Flow.GraceNoteGroup', args); -} -/** GraceNoteGroup is used to format and render grace notes. */ -class GraceNoteGroup extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_7__.Category.GraceNoteGroup; - } - /** Arranges groups inside a `ModifierContext`. */ - static format(gracenote_groups, state) { - const group_spacing_stave = 4; - const group_spacing_tab = 0; - if (!gracenote_groups || gracenote_groups.length === 0) - return false; - const group_list = []; - let prev_note = null; - let shiftL = 0; - for (let i = 0; i < gracenote_groups.length; ++i) { - const gracenote_group = gracenote_groups[i]; - const note = gracenote_group.getNote(); - const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); - const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; - if (is_stavenote && note !== prev_note) { - // Iterate through all notes to get the displaced pixels - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); - } - prev_note = note; - } - group_list.push({ shift: shiftL, gracenote_group, spacing }); - } - // If first note left shift in case it is displaced - let group_shift = group_list[0].shift; - let formatWidth; - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - gracenote_group.preFormat(); - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - group_shift = Math.max(formatWidth, group_shift); - } - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding); - } - state.left_shift += group_shift; - return true; - } - //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */ - constructor(grace_notes, show_slur) { - super(); - this.preFormatted = false; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.grace_notes = grace_notes; - this.width = 0; - this.show_slur = show_slur; - this.slur = undefined; - this.voice = new _voice__WEBPACK_IMPORTED_MODULE_9__.Voice({ - num_beats: 4, - beat_value: 4, - resolution: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.RESOLUTION, - }).setStrict(false); - this.render_options = { - slur_y_shift: 0, - }; - this.beams = []; - this.voice.addTickables(this.grace_notes); - return this; - } - preFormat() { - if (this.preFormatted) - return; - if (!this.formatter) { - this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter(); - } - this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - beamNotes(grace_notes) { - grace_notes = grace_notes || this.grace_notes; - if (grace_notes.length > 1) { - const beam = new _beam__WEBPACK_IMPORTED_MODULE_0__.Beam(grace_notes); - beam.render_options.beam_width = 3; - beam.render_options.partial_beam_length = 4; - this.beams.push(beam); - } - return this; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width + _stavenote__WEBPACK_IMPORTED_MODULE_3__.StaveNote.minNoteheadPadding; - } - getGraceNotes() { - return this.grace_notes; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - L('Drawing grace note group for:', note); - this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function - // Draw grace notes. - this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); - // Draw beams. - this.beams.forEach((beam) => beam.setContext(ctx).draw()); - if (this.show_slur) { - // Create and draw slur. - const is_stavenote = (0,_typeguard__WEBPACK_IMPORTED_MODULE_7__.isStaveNote)(note); - const TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_4__.StaveTie : _tabtie__WEBPACK_IMPORTED_MODULE_6__.TabTie; - this.slur = new TieClass({ - last_note: this.grace_notes[0], - first_note: note, - first_indices: [0], - last_indices: [0], - }); - this.slur.render_options.cp2 = 12; - this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; - this.slur.setContext(ctx).draw(); - } - } -} -GraceNoteGroup.DEBUG = false; - - -/***/ }), - -/***/ "./src/gracetabnote.ts": -/*!*****************************!*\ - !*** ./src/gracetabnote.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "GraceTabNote": () => (/* binding */ GraceTabNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Balazs Forian-Szabo -// -// ## Description -// -// A basic implementation of grace notes -// to be rendered on a tab stave. -// -// See `tests/gracetabnote_tests.ts` for usage examples. - - - -class GraceTabNote extends _tabnote__WEBPACK_IMPORTED_MODULE_1__.TabNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.GraceTabNote; - } - constructor(noteStruct) { - super(noteStruct, false); - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // vertical shift from stave line - y_shift: 0.3, - // grace glyph scale - scale: 0.6, - // grace tablature font - font: `7.5pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); - this.updateWidth(); - } -} - - -/***/ }), - -/***/ "./src/index.ts": -/*!**********************!*\ - !*** ./src/index.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* reexport safe */ _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental), -/* harmony export */ "Annotation": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationHorizontalJustify), -/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _annotation__WEBPACK_IMPORTED_MODULE_1__.AnnotationVerticalJustify), -/* harmony export */ "Articulation": () => (/* reexport safe */ _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation), -/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.BEAM_RIGHT), -/* harmony export */ "BarNote": () => (/* reexport safe */ _barnote__WEBPACK_IMPORTED_MODULE_3__.BarNote), -/* harmony export */ "Barline": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.Barline), -/* harmony export */ "BarlineType": () => (/* reexport safe */ _stavebarline__WEBPACK_IMPORTED_MODULE_48__.BarlineType), -/* harmony export */ "Beam": () => (/* reexport safe */ _beam__WEBPACK_IMPORTED_MODULE_4__.Beam), -/* harmony export */ "Bend": () => (/* reexport safe */ _bend__WEBPACK_IMPORTED_MODULE_5__.Bend), -/* harmony export */ "BoundingBox": () => (/* reexport safe */ _boundingbox__WEBPACK_IMPORTED_MODULE_6__.BoundingBox), -/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__.BoundingBoxComputation), -/* harmony export */ "Builder": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Builder), -/* harmony export */ "CanvasContext": () => (/* reexport safe */ _canvascontext__WEBPACK_IMPORTED_MODULE_8__.CanvasContext), -/* harmony export */ "Category": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.Category), -/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.ChordSymbolVerticalJustify), -/* harmony export */ "Clef": () => (/* reexport safe */ _clef__WEBPACK_IMPORTED_MODULE_10__.Clef), -/* harmony export */ "ClefNote": () => (/* reexport safe */ _clefnote__WEBPACK_IMPORTED_MODULE_11__.ClefNote), -/* harmony export */ "Crescendo": () => (/* reexport safe */ _crescendo__WEBPACK_IMPORTED_MODULE_12__.Crescendo), -/* harmony export */ "Curve": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.Curve), -/* harmony export */ "CurvePosition": () => (/* reexport safe */ _curve__WEBPACK_IMPORTED_MODULE_13__.CurvePosition), -/* harmony export */ "Dot": () => (/* reexport safe */ _dot__WEBPACK_IMPORTED_MODULE_14__.Dot), -/* harmony export */ "EasyScore": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.EasyScoreGrammar), -/* harmony export */ "Element": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_16__.Element), -/* harmony export */ "Factory": () => (/* reexport safe */ _factory__WEBPACK_IMPORTED_MODULE_17__.Factory), -/* harmony export */ "Flow": () => (/* reexport safe */ _flow__WEBPACK_IMPORTED_MODULE_18__.Flow), -/* harmony export */ "Font": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.Font), -/* harmony export */ "FontStyle": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontStyle), -/* harmony export */ "FontWeight": () => (/* reexport safe */ _font__WEBPACK_IMPORTED_MODULE_19__.FontWeight), -/* harmony export */ "Formatter": () => (/* reexport safe */ _formatter__WEBPACK_IMPORTED_MODULE_20__.Formatter), -/* harmony export */ "Fraction": () => (/* reexport safe */ _fraction__WEBPACK_IMPORTED_MODULE_21__.Fraction), -/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _frethandfinger__WEBPACK_IMPORTED_MODULE_22__.FretHandFinger), -/* harmony export */ "GhostNote": () => (/* reexport safe */ _ghostnote__WEBPACK_IMPORTED_MODULE_23__.GhostNote), -/* harmony export */ "Glyph": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.Glyph), -/* harmony export */ "GlyphNote": () => (/* reexport safe */ _glyphnote__WEBPACK_IMPORTED_MODULE_25__.GlyphNote), -/* harmony export */ "GraceNote": () => (/* reexport safe */ _gracenote__WEBPACK_IMPORTED_MODULE_26__.GraceNote), -/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__.GraceNoteGroup), -/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _gracetabnote__WEBPACK_IMPORTED_MODULE_28__.GraceTabNote), -/* harmony export */ "KeyManager": () => (/* reexport safe */ _keymanager__WEBPACK_IMPORTED_MODULE_29__.KeyManager), -/* harmony export */ "KeySigNote": () => (/* reexport safe */ _keysignote__WEBPACK_IMPORTED_MODULE_31__.KeySigNote), -/* harmony export */ "KeySignature": () => (/* reexport safe */ _keysignature__WEBPACK_IMPORTED_MODULE_30__.KeySignature), -/* harmony export */ "Modifier": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.Modifier), -/* harmony export */ "ModifierContext": () => (/* reexport safe */ _modifiercontext__WEBPACK_IMPORTED_MODULE_33__.ModifierContext), -/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _modifier__WEBPACK_IMPORTED_MODULE_32__.ModifierPosition), -/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__.MultiMeasureRest), -/* harmony export */ "Music": () => (/* reexport safe */ _music__WEBPACK_IMPORTED_MODULE_35__.Music), -/* harmony export */ "Note": () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_36__.Note), -/* harmony export */ "NoteHead": () => (/* reexport safe */ _notehead__WEBPACK_IMPORTED_MODULE_37__.NoteHead), -/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _notesubgroup__WEBPACK_IMPORTED_MODULE_38__.NoteSubGroup), -/* harmony export */ "Ornament": () => (/* reexport safe */ _ornament__WEBPACK_IMPORTED_MODULE_39__.Ornament), -/* harmony export */ "OutlineCode": () => (/* reexport safe */ _glyph__WEBPACK_IMPORTED_MODULE_24__.OutlineCode), -/* harmony export */ "Parenthesis": () => (/* reexport safe */ _parenthesis__WEBPACK_IMPORTED_MODULE_40__.Parenthesis), -/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_41__.Parser), -/* harmony export */ "PedalMarking": () => (/* reexport safe */ _pedalmarking__WEBPACK_IMPORTED_MODULE_42__.PedalMarking), -/* harmony export */ "Piece": () => (/* reexport safe */ _easyscore__WEBPACK_IMPORTED_MODULE_15__.Piece), -/* harmony export */ "Registry": () => (/* reexport safe */ _registry__WEBPACK_IMPORTED_MODULE_43__.Registry), -/* harmony export */ "RenderContext": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.RenderContext), -/* harmony export */ "Renderer": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.Renderer), -/* harmony export */ "RendererBackends": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _renderer__WEBPACK_IMPORTED_MODULE_45__.RendererLineEndType), -/* harmony export */ "RepeatNote": () => (/* reexport safe */ _repeatnote__WEBPACK_IMPORTED_MODULE_46__.RepeatNote), -/* harmony export */ "Repetition": () => (/* reexport safe */ _staverepetition__WEBPACK_IMPORTED_MODULE_54__.Repetition), -/* harmony export */ "RuntimeError": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.RuntimeError), -/* harmony export */ "SVGContext": () => (/* reexport safe */ _svgcontext__WEBPACK_IMPORTED_MODULE_64__.SVGContext), -/* harmony export */ "Stave": () => (/* reexport safe */ _stave__WEBPACK_IMPORTED_MODULE_47__.Stave), -/* harmony export */ "StaveConnector": () => (/* reexport safe */ _staveconnector__WEBPACK_IMPORTED_MODULE_49__.StaveConnector), -/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _stavehairpin__WEBPACK_IMPORTED_MODULE_50__.StaveHairpin), -/* harmony export */ "StaveLine": () => (/* reexport safe */ _staveline__WEBPACK_IMPORTED_MODULE_51__.StaveLine), -/* harmony export */ "StaveModifier": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _stavemodifier__WEBPACK_IMPORTED_MODULE_52__.StaveModifierPosition), -/* harmony export */ "StaveNote": () => (/* reexport safe */ _stavenote__WEBPACK_IMPORTED_MODULE_53__.StaveNote), -/* harmony export */ "StaveSection": () => (/* reexport safe */ _stavesection__WEBPACK_IMPORTED_MODULE_55__.StaveSection), -/* harmony export */ "StaveTempo": () => (/* reexport safe */ _stavetempo__WEBPACK_IMPORTED_MODULE_56__.StaveTempo), -/* harmony export */ "StaveText": () => (/* reexport safe */ _stavetext__WEBPACK_IMPORTED_MODULE_57__.StaveText), -/* harmony export */ "StaveTie": () => (/* reexport safe */ _stavetie__WEBPACK_IMPORTED_MODULE_58__.StaveTie), -/* harmony export */ "Stem": () => (/* reexport safe */ _stem__WEBPACK_IMPORTED_MODULE_60__.Stem), -/* harmony export */ "StemmableNote": () => (/* reexport safe */ _stemmablenote__WEBPACK_IMPORTED_MODULE_61__.StemmableNote), -/* harmony export */ "StringNumber": () => (/* reexport safe */ _stringnumber__WEBPACK_IMPORTED_MODULE_62__.StringNumber), -/* harmony export */ "Stroke": () => (/* reexport safe */ _strokes__WEBPACK_IMPORTED_MODULE_63__.Stroke), -/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _chordsymbol__WEBPACK_IMPORTED_MODULE_9__.SymbolTypes), -/* harmony export */ "System": () => (/* reexport safe */ _system__WEBPACK_IMPORTED_MODULE_65__.System), -/* harmony export */ "TabNote": () => (/* reexport safe */ _tabnote__WEBPACK_IMPORTED_MODULE_66__.TabNote), -/* harmony export */ "TabSlide": () => (/* reexport safe */ _tabslide__WEBPACK_IMPORTED_MODULE_67__.TabSlide), -/* harmony export */ "TabStave": () => (/* reexport safe */ _tabstave__WEBPACK_IMPORTED_MODULE_68__.TabStave), -/* harmony export */ "TabTie": () => (/* reexport safe */ _tabtie__WEBPACK_IMPORTED_MODULE_69__.TabTie), -/* harmony export */ "TextBracket": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _textbracket__WEBPACK_IMPORTED_MODULE_70__.TextBracketPosition), -/* harmony export */ "TextDynamics": () => (/* reexport safe */ _textdynamics__WEBPACK_IMPORTED_MODULE_71__.TextDynamics), -/* harmony export */ "TextFormatter": () => (/* reexport safe */ _textformatter__WEBPACK_IMPORTED_MODULE_72__.TextFormatter), -/* harmony export */ "TextJustification": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextJustification), -/* harmony export */ "TextNote": () => (/* reexport safe */ _textnote__WEBPACK_IMPORTED_MODULE_73__.TextNote), -/* harmony export */ "TickContext": () => (/* reexport safe */ _tickcontext__WEBPACK_IMPORTED_MODULE_75__.TickContext), -/* harmony export */ "Tickable": () => (/* reexport safe */ _tickable__WEBPACK_IMPORTED_MODULE_74__.Tickable), -/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _timesignote__WEBPACK_IMPORTED_MODULE_78__.TimeSigNote), -/* harmony export */ "TimeSignature": () => (/* reexport safe */ _timesignature__WEBPACK_IMPORTED_MODULE_77__.TimeSignature), -/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _timesigglyph__WEBPACK_IMPORTED_MODULE_76__.TimeSignatureGlyph), -/* harmony export */ "Tremolo": () => (/* reexport safe */ _tremolo__WEBPACK_IMPORTED_MODULE_79__.Tremolo), -/* harmony export */ "Tuning": () => (/* reexport safe */ _tuning__WEBPACK_IMPORTED_MODULE_80__.Tuning), -/* harmony export */ "Tuplet": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.Tuplet), -/* harmony export */ "TupletLocation": () => (/* reexport safe */ _tuplet__WEBPACK_IMPORTED_MODULE_81__.TupletLocation), -/* harmony export */ "Vex": () => (/* reexport safe */ _vex__WEBPACK_IMPORTED_MODULE_84__.Vex), -/* harmony export */ "Vibrato": () => (/* reexport safe */ _vibrato__WEBPACK_IMPORTED_MODULE_85__.Vibrato), -/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _vibratobracket__WEBPACK_IMPORTED_MODULE_86__.VibratoBracket), -/* harmony export */ "Voice": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.Voice), -/* harmony export */ "VoiceMode": () => (/* reexport safe */ _voice__WEBPACK_IMPORTED_MODULE_87__.VoiceMode), -/* harmony export */ "Volta": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.Volta), -/* harmony export */ "VoltaType": () => (/* reexport safe */ _stavevolta__WEBPACK_IMPORTED_MODULE_59__.VoltaType), -/* harmony export */ "defined": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.defined), -/* harmony export */ "drawDot": () => (/* reexport safe */ _rendercontext__WEBPACK_IMPORTED_MODULE_44__.drawDot), -/* harmony export */ "globalObject": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.globalObject), -/* harmony export */ "isAccidental": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAccidental), -/* harmony export */ "isAnnotation": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isAnnotation), -/* harmony export */ "isBarline": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isBarline), -/* harmony export */ "isCategory": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isCategory), -/* harmony export */ "isDot": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isDot), -/* harmony export */ "isGraceNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isGraceNoteGroup), -/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _web__WEBPACK_IMPORTED_MODULE_88__.isHTMLDiv), -/* harmony export */ "isNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isNote), -/* harmony export */ "isRenderContext": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isRenderContext), -/* harmony export */ "isStaveNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isStemmableNote), -/* harmony export */ "isTabNote": () => (/* reexport safe */ _typeguard__WEBPACK_IMPORTED_MODULE_82__.isTabNote), -/* harmony export */ "log": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.log), -/* harmony export */ "midLine": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.midLine), -/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.normalizeAngle), -/* harmony export */ "prefix": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.prefix), -/* harmony export */ "sumArray": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.sumArray), -/* harmony export */ "warn": () => (/* reexport safe */ _util__WEBPACK_IMPORTED_MODULE_83__.warn) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./barnote */ "./src/barnote.ts"); -/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./beam */ "./src/beam.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.ts"); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.ts"); -/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.ts"); -/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./curve */ "./src/curve.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./factory */ "./src/factory.ts"); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.ts"); -/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.ts"); -/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.ts"); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./parser */ "./src/parser.ts"); -/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.ts"); -/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./registry */ "./src/registry.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.ts"); -/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.ts"); -/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./staveline */ "./src/staveline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./system */ "./src/system.ts"); -/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.ts"); -/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.ts"); -/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.ts"); -/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.ts"); -/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.ts"); -/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./tuning */ "./src/tuning.ts"); -/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./vex */ "./src/vex.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - - - - - - - - - - -// Do not export './fonts/*' because they are used by the entry/* files. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*. - - - - - - - - - - - - - - - - - - -// Do not export './version'. It is accessible via Vex.Flow.BUILD. - - - - - - - -/***/ }), - -/***/ "./src/keymanager.ts": -/*!***************************!*\ - !*** ./src/keymanager.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeyManager": () => (/* binding */ KeyManager) -/* harmony export */ }); -/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./music */ "./src/music.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This class implements diatonic key management. - - -class KeyManager { - constructor(key) { - this.music = new _music__WEBPACK_IMPORTED_MODULE_0__.Music(); - this.setKey(key); - } - setKey(key) { - this.key = key; - this.reset(); - return this; - } - getKey() { - return this.key; - } - reset() { - this.keyParts = this.music.getKeyParts(this.key); - this.keyString = this.keyParts.root; - if (this.keyParts.accidental) - this.keyString += this.keyParts.accidental; - const is_supported_type = _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]; - if (!is_supported_type) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); - } - this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_0__.Music.scaleTypes[this.keyParts.type]); - this.scaleMap = {}; - this.scaleMapByValue = {}; - this.originalScaleMapByValue = {}; - const noteLocation = _music__WEBPACK_IMPORTED_MODULE_0__.Music.root_indices[this.keyParts.root]; - for (let i = 0; i < _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; ++i) { - const index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots.length; - const rootName = _music__WEBPACK_IMPORTED_MODULE_0__.Music.roots[index]; - const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); - this.scaleMap[rootName] = noteName; - this.scaleMapByValue[this.scale[i]] = noteName; - this.originalScaleMapByValue[this.scale[i]] = noteName; - } - return this; - } - getAccidental(key) { - const root = this.music.getKeyParts(key).root; - const parts = this.music.getNoteParts(this.scaleMap[root]); - return { - note: this.scaleMap[root], - accidental: parts.accidental, - }; - } - selectNote(note) { - note = note.toLowerCase(); - const parts = this.music.getNoteParts(note); - // First look for matching note in our altered scale - const scaleNote = this.scaleMap[parts.root]; - const modparts = this.music.getNoteParts(scaleNote); - if (scaleNote === note) { - return { - note: scaleNote, - accidental: parts.accidental, - change: false, - }; - } - // Then search for a note of equivalent value in our altered scale - const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; - if (valueNote != null) { - return { - note: valueNote, - accidental: this.music.getNoteParts(valueNote).accidental, - change: false, - }; - } - // Then search for a note of equivalent value in the original scale - const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; - if (originalValueNote != null) { - this.scaleMap[modparts.root] = originalValueNote; - delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; - this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; - return { - note: originalValueNote, - accidental: this.music.getNoteParts(originalValueNote).accidental, - change: true, - }; - } - // Then try to unmodify a currently modified note. - if (modparts.root === note) { - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; - this.scaleMap[modparts.root] = modparts.root; - return { - note: modparts.root, - accidental: undefined, - change: true, - }; - } - // Last resort -- shitshoot - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(note)] = note; - delete this.scaleMap[modparts.root]; - this.scaleMap[modparts.root] = note; - return { - note, - accidental: parts.accidental, - change: true, - }; - } -} - - -/***/ }), - -/***/ "./src/keysignature.ts": -/*!*****************************!*\ - !*** ./src/keysignature.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeySignature": () => (/* binding */ KeySignature) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// -// ## Description -// -// This file implements key signatures. A key signature sits on a stave -// and indicates the notes with implicit accidentals. - - - - - -class KeySignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.KeySignature; - } - // Create a new Key Signature based on a `key_spec` - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super(); - this.accList = []; - this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote? - this.glyphs = []; - this.xPositions = []; // relative to this.x - this.paddingForced = false; - } - // Add an accidental glyph to the `KeySignature` instance which represents - // the provided `acc`. If `nextAcc` is also provided, the appropriate - // spacing will be included in the glyph's position - convertToGlyph(acc, nextAcc) { - const accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.accidentalCodes(acc.type); - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(accGlyphData.code, this.glyphFontScale); - // Determine spacing between current accidental and the next accidental - let extraWidth = 1; - if (acc.type === 'n' && nextAcc) { - const spacing = KeySignature.accidentalSpacing[nextAcc.type]; - if (spacing) { - const isAbove = nextAcc.line >= acc.line; - extraWidth = isAbove ? spacing.above : spacing.below; - } - } - // Place the glyph on the stave - this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); - this.glyphs.push(glyph); - const xPosition = this.xPositions[this.xPositions.length - 1]; - const glyphWidth = glyph.getMetrics().width + extraWidth; - // Store the next accidental's x position - this.xPositions.push(xPosition + glyphWidth); - // Expand size of key signature - this.width += glyphWidth; - } - // Cancel out a key signature provided in the `spec` parameter. This will - // place appropriate natural accidentals before the key signature. - cancelKey(spec) { - this.formatted = false; - this.cancelKeySpec = spec; - return this; - } - convertToCancelAccList(spec) { - // Get the accidental list for the cancelled key signature - const cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature(spec); - // If the cancelled key has a different accidental type, ie: # vs b - const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; - // Determine how many naturals needed to add - const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; - // Return if no naturals needed - if (naturals < 1) - return undefined; - // Get the line position for each natural - const cancelled = []; - for (let i = 0; i < naturals; i++) { - let index = i; - if (!different_types) { - index = cancel_accList.length - naturals + i; - } - const acc = cancel_accList[index]; - cancelled.push({ type: 'n', line: acc.line }); - } - // Combine naturals with main accidental list for the key signature - this.accList = cancelled.concat(this.accList); - return { - accList: cancelled, - type: cancel_accList[0].type, - }; - } - // Deprecated - addToStave(stave) { - this.paddingForced = true; - stave.addModifier(this); - return this; - } - // Apply the accidental staff line placement based on the `clef` and - // the accidental `type` for the key signature ('# or 'b'). - convertAccLines(clef, type, accList = this.accList) { - let offset = 0.0; // if clef === "treble" - let customLines; // when clef doesn't follow treble key sig shape - switch (clef) { - // Treble & Subbass both have offsets of 0, so are not included. - case 'soprano': - if (type === '#') - customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; - else - offset = -1; - break; - case 'mezzo-soprano': - if (type === 'b') - customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; - else - offset = 1.5; - break; - case 'alto': - offset = 0.5; - break; - case 'tenor': - if (type === '#') - customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; - else - offset = -0.5; - break; - case 'baritone-f': - case 'baritone-c': - if (type === 'b') - customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; - else - offset = 2; - break; - case 'bass': - case 'french': - offset = 1; - break; - default: - break; - } - // If there's a special case, assign those lines/spaces: - let i; - if (typeof customLines !== 'undefined') { - for (i = 0; i < accList.length; ++i) { - accList[i].line = customLines[i]; - } - } - else if (offset !== 0) { - for (i = 0; i < accList.length; ++i) { - accList[i].line += offset; - } - } - } - getPadding(index) { - if (!this.formatted) - this.format(); - return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; - } - getWidth() { - if (!this.formatted) - this.format(); - return this.width; - } - setKeySig(keySpec, cancelKeySpec, alterKeySpec) { - this.formatted = false; - this.keySpec = keySpec; - this.cancelKeySpec = cancelKeySpec; - this.alterKeySpec = alterKeySpec; - return this; - } - // Alter the accidentals of a key spec one by one. - // Each alteration is a new accidental that replaces the - // original accidental (or the canceled one). - alterKey(alterKeySpec) { - this.formatted = false; - this.alterKeySpec = alterKeySpec; - return this; - } - convertToAlterAccList(alterKeySpec) { - const max = Math.min(alterKeySpec.length, this.accList.length); - for (let i = 0; i < max; ++i) { - if (alterKeySpec[i]) { - this.accList[i].type = alterKeySpec[i]; - } - } - } - format() { - const stave = this.checkStave(); - this.width = 0; - this.glyphs = []; - this.xPositions = [0]; // initialize with initial x position - this.accList = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.keySignature((0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.keySpec)); - const accList = this.accList; - const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; - let cancelAccList; - if (this.cancelKeySpec) { - cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); - } - if (this.alterKeySpec) { - this.convertToAlterAccList(this.alterKeySpec); - } - if (this.accList.length > 0) { - const clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); - if (cancelAccList) { - this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); - } - this.convertAccLines(clef, firstAccidentalType, accList); - for (let i = 0; i < this.accList.length; ++i) { - this.convertToGlyph(this.accList[i], this.accList[i + 1]); - } - } - this.formatted = true; - } - /** - * Return the Glyph objects making up this KeySignature. - */ - getGlyphs() { - if (!this.formatted) - this.format(); - return this.glyphs; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - if (!this.formatted) - this.format(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('keysignature', this.getAttribute('id')); - for (let i = 0; i < this.glyphs.length; i++) { - const glyph = this.glyphs[i]; - const x = this.x + this.xPositions[i]; - glyph.setStave(stave); - glyph.setContext(ctx); - glyph.renderToStave(x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -// Space between natural and following accidental depending -// on vertical position -KeySignature.accidentalSpacing = { - '#': { - above: 6, - below: 4, - }, - b: { - above: 4, - below: 7, - }, - n: { - above: 4, - below: 1, - }, - '##': { - above: 6, - below: 4, - }, - bb: { - above: 4, - below: 7, - }, - db: { - above: 4, - below: 7, - }, - d: { - above: 4, - below: 7, - }, - bbs: { - above: 4, - below: 7, - }, - '++': { - above: 6, - below: 4, - }, - '+': { - above: 6, - below: 4, - }, - '+-': { - above: 6, - below: 4, - }, - '++-': { - above: 6, - below: 4, - }, - bs: { - above: 4, - below: 10, - }, - bss: { - above: 4, - below: 10, - }, -}; - - -/***/ }), - -/***/ "./src/keysignote.ts": -/*!***************************!*\ - !*** ./src/keysignote.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "KeySigNote": () => (/* binding */ KeySigNote) -/* harmony export */ }); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Mark Meeus 2019 - - - -class KeySigNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.KeySigNote; - } - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super({ duration: 'b' }); - this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_0__.KeySignature(keySpec, cancelKeySpec, alterKeySpec); - // Note properties - this.ignore_ticks = true; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - this.keySignature.setStave(this.checkStave()); - this.setWidth(this.keySignature.getWidth()); - return this; - } - draw() { - const ctx = this.checkStave().checkContext(); - this.setRendered(); - this.keySignature.setX(this.getAbsoluteX()); - this.keySignature.setContext(ctx); - this.keySignature.draw(); - } -} - - -/***/ }), - -/***/ "./src/modifier.ts": -/*!*************************!*\ - !*** ./src/modifier.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Modifier": () => (/* binding */ Modifier), -/* harmony export */ "ModifierPosition": () => (/* binding */ ModifierPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - -var ModifierPosition; -(function (ModifierPosition) { - ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; - ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; - ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; - ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; - ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; -})(ModifierPosition || (ModifierPosition = {})); -// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`. -// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); } -/** - * `Modifier` is an abstract interface for notational elements that modify - * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. - * - * For a `Modifier` instance to be positioned correctly, it must be part of - * a `ModifierContext`. All modifiers in the same context are rendered relative to - * one another. - * - * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, - * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same - * `ModifierContext`. This ensures that multiple voices don't trample all over each other. - */ -class Modifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - /** - * Modifiers category string. Every modifier has a different category. - * The `ModifierContext` uses this to determine the type and order of the modifiers. - */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.Modifier; - } - /** Modifiers can be positioned almost anywhere, relative to a note. */ - static get Position() { - return ModifierPosition; - } - static get PositionString() { - return { - center: ModifierPosition.CENTER, - above: ModifierPosition.ABOVE, - below: ModifierPosition.BELOW, - left: ModifierPosition.LEFT, - right: ModifierPosition.RIGHT, - }; - } - constructor() { - super(); - this.width = 0; - // The `text_line` is reserved space above or below a stave. - this.text_line = 0; - this.position = Modifier.Position.LEFT; - this.x_shift = 0; - this.y_shift = 0; - this.spacingFromNextModifier = 0; - } - /** Called when position changes. */ - reset() { - // DO NOTHING. - } - /** Get modifier widths. */ - getWidth() { - return this.width; - } - /** Set modifier widths. */ - setWidth(width) { - this.width = width; - return this; - } - /** Get attached note (`StaveNote`, `TabNote`, etc.) */ - getNote() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', 'Modifier has no note.'); - } - /** - * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). - * Also verifies that the index is valid. - */ - checkAttachedNote() { - const category = this.getCategory(); - (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', `Can't draw ${category} without an index.`); - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.note, 'NoNote', `Can't draw ${category} without a note.`); - } - /** - * Set attached note. - * @param note (`StaveNote`, `TabNote`, etc.) - */ - setNote(note) { - this.note = note; - return this; - } - /** Get note index, which is a specific note in a chord. */ - getIndex() { - return this.index; - } - /** Check and get note index, which is a specific note in a chord. */ - checkIndex() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.index, 'NoIndex', 'Modifier has an invalid index.'); - } - /** Set note index, which is a specific note in a chord. */ - setIndex(index) { - this.index = index; - return this; - } - /** Get `ModifierContext`. */ - getModifierContext() { - return this.modifierContext; - } - /** Check and get `ModifierContext`. */ - checkModifierContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); - } - /** Every modifier must be part of a `ModifierContext`. */ - setModifierContext(c) { - this.modifierContext = c; - return this; - } - /** Get position. */ - getPosition() { - return this.position; - } - /** - * Set position. - * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW - */ - setPosition(position) { - this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; - this.reset(); - return this; - } - /** Set the `text_line` for the modifier. */ - setTextLine(line) { - this.text_line = line; - return this; - } - /** Shift modifier down `y` pixels. Negative values shift up. */ - setYShift(y) { - this.y_shift = y; - return this; - } - /** Set spacing from next modifier. */ - setSpacingFromNextModifier(x) { - this.spacingFromNextModifier = x; - } - /** Get spacing from next modifier. */ - getSpacingFromNextModifier() { - return this.spacingFromNextModifier; - } - /** - * Shift modifier `x` pixels in the direction of the modifier. Negative values - * shift reverse. - */ - setXShift(x) { - this.x_shift = 0; - if (this.position === Modifier.Position.LEFT) { - this.x_shift -= x; - } - else { - this.x_shift += x; - } - return this; - } - /** Get shift modifier `x` */ - getXShift() { - return this.x_shift; - } - /** Render the modifier onto the canvas. */ - draw() { - this.checkContext(); - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); - } - // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset - alignSubNotesWithNote(subNotes, note) { - // Shift over the tick contexts of each note - const tickContext = note.getTickContext(); - const metrics = tickContext.getMetrics(); - const stave = note.getStave(); - const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); - subNotes.forEach((subNote) => { - const subTickContext = subNote.getTickContext(); - if (stave) - subNote.setStave(stave); - subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render - }); - } -} - - -/***/ }), - -/***/ "./src/modifiercontext.ts": -/*!********************************!*\ - !*** ./src/modifiercontext.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "ModifierContext": () => (/* binding */ ModifierContext) -/* harmony export */ }); -/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./accidental */ "./src/accidental.ts"); -/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./annotation */ "./src/annotation.ts"); -/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.ts"); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _chordsymbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./chordsymbol */ "./src/chordsymbol.ts"); -/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.ts"); -/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.ts"); -/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.ts"); -/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.ts"); -/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ornament */ "./src/ornament.ts"); -/* harmony import */ var _parenthesis__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./parenthesis */ "./src/parenthesis.ts"); -/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.ts"); -/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.ts"); -/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./strokes */ "./src/strokes.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This class implements various types of members to notes (e.g. bends, -// fingering positions etc.). The ModifierContext works with tickables -// that are at the same tick to ensure that they and their modifiers -// all have proper alignment. (Note that the ModifierContext also -// runs the spacing of the tickable). -// -// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works - - - - - - - - - - - - - - - - - -// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (ModifierContext.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_15__.log)('Vex.Flow.ModifierContext', args); -} -class ModifierContext { - constructor() { - // Formatting data. - this.state = { - left_shift: 0, - right_shift: 0, - text_line: 0, - top_text_line: 0, - }; - // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers, - // StaveNotes, TabNotes, etc. - this.members = {}; - this.preFormatted = false; - this.postFormatted = false; - this.formatted = false; - this.width = 0; - this.spacing = 0; - } - addModifier(member) { - L('addModifier is deprecated, use addMember instead.'); - return this.addMember(member); - } - /** - * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. - * Here we add a new member to this.members, and create a new array if needed. - * @param member - * @returns this - */ - addMember(member) { - const category = member.getCategory(); - if (!this.members[category]) { - this.members[category] = []; - } - this.members[category].push(member); - member.setModifierContext(this); - this.preFormatted = false; - return this; - } - /** - * @deprecated - */ - getModifiers(category) { - L('getModifiers is deprecated, use getMembers instead.'); - return this.getMembers(category); - } - getMembers(category) { - var _a; - return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; - } - /** - * Get the width of the entire - */ - getWidth() { - return this.width; - } - getLeftShift() { - return this.state.left_shift; - } - getRightShift() { - return this.state.right_shift; - } - getState() { - return this.state; - } - getMetrics() { - if (!this.formatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); - } - return { - width: this.state.left_shift + this.state.right_shift + this.spacing, - spacing: this.spacing, - }; - } - preFormat() { - if (this.preFormatted) - return; - L('Preformatting ModifierContext'); - const state = this.state; - const members = this.members; - // The ordering below determines when different members are formatted and rendered. - _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote], state); - _parenthesis__WEBPACK_IMPORTED_MODULE_10__.Parenthesis.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Parenthesis], state); - _dot__WEBPACK_IMPORTED_MODULE_5__.Dot.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Dot], state); - _frethandfinger__WEBPACK_IMPORTED_MODULE_6__.FretHandFinger.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.FretHandFinger], state); - _accidental__WEBPACK_IMPORTED_MODULE_0__.Accidental.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Accidental], state); - _strokes__WEBPACK_IMPORTED_MODULE_13__.Stroke.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stroke], state); - _gracenotegroup__WEBPACK_IMPORTED_MODULE_7__.GraceNoteGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.GraceNoteGroup], state); - _notesubgroup__WEBPACK_IMPORTED_MODULE_8__.NoteSubGroup.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.NoteSubGroup], state); - _stringnumber__WEBPACK_IMPORTED_MODULE_12__.StringNumber.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StringNumber], state); - _articulation__WEBPACK_IMPORTED_MODULE_2__.Articulation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Articulation], state); - _ornament__WEBPACK_IMPORTED_MODULE_9__.Ornament.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Ornament], state); - _annotation__WEBPACK_IMPORTED_MODULE_1__.Annotation.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Annotation], state); - _chordsymbol__WEBPACK_IMPORTED_MODULE_4__.ChordSymbol.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.ChordSymbol], state); - _bend__WEBPACK_IMPORTED_MODULE_3__.Bend.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Bend], state); - _vibrato__WEBPACK_IMPORTED_MODULE_16__.Vibrato.format(members[_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Vibrato], state, this); - // Update width of this member context - this.width = state.left_shift + state.right_shift; - this.preFormatted = true; - } - postFormat() { - if (this.postFormatted) - return; - L('Postformatting ModifierContext'); - // If post-formatting is required for an element, add more lines below. - _stavenote__WEBPACK_IMPORTED_MODULE_11__.StaveNote.postFormat(this.getMembers(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.StaveNote)); - } -} -ModifierContext.DEBUG = false; - - -/***/ }), - -/***/ "./src/multimeasurerest.ts": -/*!*********************************!*\ - !*** ./src/multimeasurerest.ts ***! - \*********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MultiMeasureRest": () => (/* binding */ MultiMeasureRest) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// VexFlow - Music Engraving for HTML5 -// Copyright Mohit Muthanna 2010 -// -// This class implements multiple measure rests. - - - - - - - - -let semibreve_rest; -function get_semibreve_rest() { - if (!semibreve_rest) { - const noteHead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ duration: 'w', note_type: 'r' }); - semibreve_rest = { - glyph_font_scale: noteHead.render_options.glyph_font_scale, - glyph_code: noteHead.glyph_code, - width: noteHead.getWidth(), - }; - } - return semibreve_rest; -} -class MultiMeasureRest extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.MultiMeasureRest; - } - /** - * - * @param number_of_measures Number of measures. - * @param options The options object. - */ - constructor(number_of_measures, options) { - super(); - this.xs = { left: NaN, right: NaN }; - this.hasPaddingLeft = false; - this.hasPaddingRight = false; - this.hasLineThickness = false; - this.hasSymbolSpacing = false; - this.number_of_measures = number_of_measures; - // Keep track of whether these four options were provided. - this.hasPaddingLeft = typeof options.padding_left === 'number'; - this.hasPaddingRight = typeof options.padding_right === 'number'; - this.hasLineThickness = typeof options.line_thickness === 'number'; - this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.render_options.number_line += fontLineShift; - } - getXs() { - return this.xs; - } - setStave(stave) { - this.stave = stave; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - drawLine(stave, ctx, left, right, spacingBetweenLines) { - const options = this.render_options; - const y = stave.getYForLine(options.line); - const padding = (right - left) * 0.1; - left += padding; - right -= padding; - let lineThicknessHalf; - if (this.hasLineThickness) { - lineThicknessHalf = options.line_thickness * 0.5; - } - else { - lineThicknessHalf = spacingBetweenLines * 0.25; - } - const serifThickness = options.serif_thickness; - const top = y - spacingBetweenLines; - const bot = y + spacingBetweenLines; - const leftIndented = left + serifThickness; - const rightIndented = right - serifThickness; - const lineTop = y - lineThicknessHalf; - const lineBottom = y + lineThicknessHalf; - ctx.save(); - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(leftIndented, top); - ctx.lineTo(leftIndented, lineTop); - ctx.lineTo(rightIndented, lineTop); - ctx.lineTo(rightIndented, top); - ctx.lineTo(right, top); - ctx.lineTo(right, bot); - ctx.lineTo(rightIndented, bot); - ctx.lineTo(rightIndented, lineBottom); - ctx.lineTo(leftIndented, lineBottom); - ctx.lineTo(leftIndented, bot); - ctx.lineTo(left, bot); - ctx.closePath(); - ctx.fill(); - } - drawSymbols(stave, ctx, left, right, spacingBetweenLines) { - const n4 = Math.floor(this.number_of_measures / 4); - const n = this.number_of_measures % 4; - const n2 = Math.floor(n / 2); - const n1 = n % 2; - const options = this.render_options; - // FIXME: TODO: invalidate semibreve_rest at the appropriate time - // (e.g., if the system font settings are changed). - semibreve_rest = undefined; - const rest = get_semibreve_rest(); - const rest_scale = options.semibreve_rest_glyph_scale; - const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); - const glyphs = { - 2: { - width: rest_width * 0.5, - height: spacingBetweenLines, - }, - 1: { - width: rest_width, - }, - }; - /* 10: normal spacingBetweenLines */ - const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; - const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; - let x = left + (right - left) * 0.5 - width * 0.5; - const line = options.line; - const yTop = stave.getYForLine(line - 1); - const yMiddle = stave.getYForLine(line); - const yBottom = stave.getYForLine(line + 1); - ctx.save(); - ctx.setStrokeStyle('none'); - ctx.setLineWidth(0); - for (let i = 0; i < n4; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n2; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n1; ++i) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); - x += glyphs[1].width + spacing; - } - ctx.restore(); - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const stave = this.checkStave(); - let left = stave.getNoteStartX(); - let right = stave.getNoteEndX(); - // FIXME: getNoteStartX() returns x + 5(barline width) - // getNoteEndX() returns x + width(no barline width) - // See Stave constructor. How do we fix this? - // Here, we subtract the barline width. - const begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition.BEGIN); - if (begModifiers.length === 1 && (0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isBarline)(begModifiers[0])) { - left -= begModifiers[0].getWidth(); - } - const options = this.render_options; - if (this.hasPaddingLeft) { - left = stave.getX() + options.padding_left; - } - if (this.hasPaddingRight) { - right = stave.getX() + stave.getWidth() - options.padding_right; - } - this.xs.left = left; - this.xs.right = right; - const spacingBetweenLines = options.spacing_between_lines_px; - if (options.use_symbols) { - this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); - } - else { - this.drawLine(stave, ctx, left, right, spacingBetweenLines); - } - if (options.show_number) { - const timeSpec = '/' + this.number_of_measures; - const timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_5__.TimeSignature(timeSpec, 0, false); - timeSig.point = options.number_glyph_point; - timeSig.setTimeSig(timeSpec); - timeSig.setStave(stave); - timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); - timeSig.bottomLine = options.number_line; - timeSig.setContext(ctx).draw(); - } - } -} - - -/***/ }), - -/***/ "./src/music.ts": -/*!**********************!*\ - !*** ./src/music.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Music": () => (/* binding */ Music) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - -/** Music implements some standard music theory routines. */ -class Music { - /** Number of an canonical notes (12). */ - static get NUM_TONES() { - return this.canonical_notes.length; - } - /** Names of root notes ('c', 'd',...) */ - static get roots() { - return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; - } - /** Values of the root notes.*/ - static get root_values() { - return [0, 2, 4, 5, 7, 9, 11]; - } - /** Indices of the root notes.*/ - static get root_indices() { - return { - c: 0, - d: 1, - e: 2, - f: 3, - g: 4, - a: 5, - b: 6, - }; - } - /** Names of canonical notes ('c', 'c#', 'd',...). */ - static get canonical_notes() { - return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; - } - /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ - static get diatonic_intervals() { - return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; - } - /** NoteAccidental associated to diatonic intervals. */ - static get diatonic_accidentals() { - return { - unison: { note: 0, accidental: 0 }, - m2: { note: 1, accidental: -1 }, - M2: { note: 1, accidental: 0 }, - m3: { note: 2, accidental: -1 }, - M3: { note: 2, accidental: 0 }, - p4: { note: 3, accidental: 0 }, - dim5: { note: 4, accidental: -1 }, - p5: { note: 4, accidental: 0 }, - m6: { note: 5, accidental: -1 }, - M6: { note: 5, accidental: 0 }, - b7: { note: 6, accidental: -1 }, - M7: { note: 6, accidental: 0 }, - octave: { note: 7, accidental: 0 }, - }; - } - /** Semitones shift associated to intervals .*/ - static get intervals() { - return { - u: 0, - unison: 0, - m2: 1, - b2: 1, - min2: 1, - S: 1, - H: 1, - 2: 2, - M2: 2, - maj2: 2, - T: 2, - W: 2, - m3: 3, - b3: 3, - min3: 3, - M3: 4, - 3: 4, - maj3: 4, - 4: 5, - p4: 5, - '#4': 6, - b5: 6, - aug4: 6, - dim5: 6, - 5: 7, - p5: 7, - '#5': 8, - b6: 8, - aug5: 8, - 6: 9, - M6: 9, - maj6: 9, - b7: 10, - m7: 10, - min7: 10, - dom7: 10, - M7: 11, - maj7: 11, - 8: 12, - octave: 12, - }; - } - /** Semitones shifts associated with scales. */ - static get scales() { - return { - major: [2, 2, 1, 2, 2, 2, 1], - minor: [2, 1, 2, 2, 1, 2, 2], - ionian: [2, 2, 1, 2, 2, 2, 1], - dorian: [2, 1, 2, 2, 2, 1, 2], - phyrgian: [1, 2, 2, 2, 1, 2, 2], - lydian: [2, 2, 2, 1, 2, 2, 1], - mixolydian: [2, 2, 1, 2, 2, 1, 2], - aeolian: [2, 1, 2, 2, 1, 2, 2], - locrian: [1, 2, 2, 1, 2, 2, 2], - }; - } - /** Scales associated with m (minor) and M (major). */ - static get scaleTypes() { - return { - M: Music.scales.major, - m: Music.scales.minor, - }; - } - /** Accidentals abbreviations. */ - static get accidentals() { - return ['bb', 'b', 'n', '#', '##']; - } - /** Note values. */ - static get noteValues() { - return { - c: { root_index: 0, int_val: 0 }, - cn: { root_index: 0, int_val: 0 }, - 'c#': { root_index: 0, int_val: 1 }, - 'c##': { root_index: 0, int_val: 2 }, - cb: { root_index: 0, int_val: 11 }, - cbb: { root_index: 0, int_val: 10 }, - d: { root_index: 1, int_val: 2 }, - dn: { root_index: 1, int_val: 2 }, - 'd#': { root_index: 1, int_val: 3 }, - 'd##': { root_index: 1, int_val: 4 }, - db: { root_index: 1, int_val: 1 }, - dbb: { root_index: 1, int_val: 0 }, - e: { root_index: 2, int_val: 4 }, - en: { root_index: 2, int_val: 4 }, - 'e#': { root_index: 2, int_val: 5 }, - 'e##': { root_index: 2, int_val: 6 }, - eb: { root_index: 2, int_val: 3 }, - ebb: { root_index: 2, int_val: 2 }, - f: { root_index: 3, int_val: 5 }, - fn: { root_index: 3, int_val: 5 }, - 'f#': { root_index: 3, int_val: 6 }, - 'f##': { root_index: 3, int_val: 7 }, - fb: { root_index: 3, int_val: 4 }, - fbb: { root_index: 3, int_val: 3 }, - g: { root_index: 4, int_val: 7 }, - gn: { root_index: 4, int_val: 7 }, - 'g#': { root_index: 4, int_val: 8 }, - 'g##': { root_index: 4, int_val: 9 }, - gb: { root_index: 4, int_val: 6 }, - gbb: { root_index: 4, int_val: 5 }, - a: { root_index: 5, int_val: 9 }, - an: { root_index: 5, int_val: 9 }, - 'a#': { root_index: 5, int_val: 10 }, - 'a##': { root_index: 5, int_val: 11 }, - ab: { root_index: 5, int_val: 8 }, - abb: { root_index: 5, int_val: 7 }, - b: { root_index: 6, int_val: 11 }, - bn: { root_index: 6, int_val: 11 }, - 'b#': { root_index: 6, int_val: 0 }, - 'b##': { root_index: 6, int_val: 1 }, - bb: { root_index: 6, int_val: 10 }, - bbb: { root_index: 6, int_val: 9 }, - }; - } - isValidNoteValue(note) { - return note >= 0 && note < Music.canonical_notes.length; - } - isValidIntervalValue(interval) { - return interval >= 0 && interval < Music.diatonic_intervals.length; - } - /** Return root and accidental associated to a note. */ - getNoteParts(noteString) { - if (!noteString || noteString.length < 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - if (noteString.length > 3) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - const note = noteString.toLowerCase(); - const regex = /^([cdefgab])(b|bb|n|#|##)?$/; - const match = regex.exec(note); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - return { - root, - accidental, - }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - } - /** Return root, accidental and type associated to a key. */ - getKeyParts(keyString) { - if (!keyString || keyString.length < 1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Invalid key: ' + keyString); - } - const key = keyString.toLowerCase(); - // Support Major, Minor, Melodic Minor, and Harmonic Minor key types. - const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; - const match = regex.exec(key); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - let type = match[3]; - // Unspecified type implies major - if (!type) - type = 'M'; - return { - root, - accidental, - type, - }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid key: ${keyString}`); - } - } - /** Note value associated to a note name. */ - getNoteValue(noteString) { - const value = Music.noteValues[noteString]; - if (value === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note name: ${noteString}`); - } - return value.int_val; - } - /** Interval value associated to an interval name. */ - getIntervalValue(intervalString) { - const value = Music.intervals[intervalString]; - if (value === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); - } - return value; - } - /** Canonical note name associated to a value. */ - getCanonicalNoteName(noteValue) { - if (!this.isValidNoteValue(noteValue)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); - } - return Music.canonical_notes[noteValue]; - } - /** Interval name associated to a value. */ - getCanonicalIntervalName(intervalValue) { - if (!this.isValidIntervalValue(intervalValue)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); - } - return Music.diatonic_intervals[intervalValue]; - } - /** - * Given a note, interval, and interval direction, produce the relative note. - */ - getRelativeNoteValue(noteValue, intervalValue, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; - if (sum < 0) - sum += Music.NUM_TONES; - return sum; - } - /** - * Given a root and note value, produce the relative note name. - */ - getRelativeNoteName(root, noteValue) { - const parts = this.getNoteParts(root); - const rootValue = this.getNoteValue(parts.root); - let interval = noteValue - rootValue; - if (Math.abs(interval) > Music.NUM_TONES - 3) { - let multiplier = 1; - if (interval > 0) - multiplier = -1; - // Possibly wrap around. (Add +1 for modulo operator) - const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; - if (Math.abs(reverse_interval) > 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - else { - interval = reverse_interval; - } - } - if (Math.abs(interval) > 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - let relativeNoteName = parts.root; - if (interval > 0) { - for (let i = 1; i <= interval; ++i) { - relativeNoteName += '#'; - } - } - else if (interval < 0) { - for (let i = -1; i >= interval; --i) { - relativeNoteName += 'b'; - } - } - return relativeNoteName; - } - /** - * Return scale tones, given intervals. Each successive interval is - * relative to the previous one, e.g., Major Scale: - * - * TTSTTTS = [2,2,1,2,2,2,1] - * - * When used with key = 0, returns C scale (which is isomorphic to - * interval list). - */ - getScaleTones(key, intervals) { - const tones = [key]; - let nextNote = key; - for (let i = 0; i < intervals.length; i++) { - nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); - if (nextNote !== key) - tones.push(nextNote); - } - return tones; - } - /** - * Return the interval of a note, given a diatonic scale. - * e.g., given the scale C, and the note E, returns M3. - */ - getIntervalBetween(note1, note2, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); - } - let difference = direction === 1 ? note2 - note1 : note1 - note2; - if (difference < 0) - difference += Music.NUM_TONES; - return difference; - } - /** - * Create a scale map that represents the pitch state for a - * `keySignature`. For example, passing a `G` to `keySignature` would - * return a scale map with every note naturalized except for `F` which - * has an `F#` state. - */ - createScaleMap(keySignature) { - const keySigParts = this.getKeyParts(keySignature); - if (!keySigParts.type) - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: undefined'); - const scaleName = Music.scaleTypes[keySigParts.type]; - let keySigString = keySigParts.root; - if (keySigParts.accidental) - keySigString += keySigParts.accidental; - if (!scaleName) - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); - const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); - const noteLocation = Music.root_indices[keySigParts.root]; - const scaleMap = {}; - for (let i = 0; i < Music.roots.length; ++i) { - const index = (noteLocation + i) % Music.roots.length; - const rootName = Music.roots[index]; - let noteName = this.getRelativeNoteName(rootName, scale[i]); - if (noteName.length === 1) { - noteName += 'n'; - } - scaleMap[rootName] = noteName; - } - return scaleMap; - } -} - - -/***/ }), - -/***/ "./src/note.ts": -/*!*********************!*\ - !*** ./src/note.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Note": () => (/* binding */ Note) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickable */ "./src/tickable.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -/** - * Note implements an abstract interface for notes and chords that - * are rendered on a stave. Notes have some common properties: All of them - * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) - * - * Some notes have stems, heads, dots, etc. Most notational elements that - * surround a note are called *modifiers*, and every note has an associated - * array of them. All notes also have a rendering context and belong to a stave. - */ -class Note extends _tickable__WEBPACK_IMPORTED_MODULE_3__.Tickable { - ////////////////////////////////////////////////////////////////////////////////////////////////// - // STATIC MEMBERS - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Note; - } - /** Debug helper. Displays various note metrics for the given note. */ - static plotMetrics(ctx, note, yPos) { - const metrics = note.getMetrics(); - const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; - const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; - const xAbs = note.getAbsoluteX(); - const xPost1 = note.getAbsoluteX() + metrics.notePx; - const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; - const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; - const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); - const xWidth = xEnd - xStart; - ctx.save(); - ctx.setFont(_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, 8); - ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); - const y = yPos + 7; - function stroke(x1, x2, color, yy = y) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(3); - ctx.moveTo(x1 + note.getXShift(), yy); - ctx.lineTo(x2 + note.getXShift(), yy); - ctx.stroke(); - } - stroke(xStart, xPre1, 'red'); - stroke(xPre1, xAbs, '#999'); - stroke(xAbs, xPost1, 'green'); - stroke(xPost1, xPost2, '#999'); - stroke(xPost2, xEnd, 'red'); - stroke(xEnd, xFreedomRight, '#DD0'); - stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift - (0,_rendercontext__WEBPACK_IMPORTED_MODULE_1__.drawDot)(ctx, xAbs + note.getXShift(), y, 'blue'); - const formatterMetrics = note.getFormatterMetrics(); - if (formatterMetrics.iterations > 0) { - const spaceDeviation = formatterMetrics.space.deviation; - const prefix = spaceDeviation >= 0 ? '+' : ''; - ctx.setFillStyle('red'); - ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); - } - ctx.restore(); - } - static parseDuration(durationString) { - if (!durationString) { - return undefined; - } - const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; - const result = regexp.exec(durationString); - if (!result) { - return undefined; - } - const duration = result[1]; - const dots = result[2].length; - const type = result[3] || 'n'; - return { duration, dots, type }; - } - static parseNoteStruct(noteStruct) { - // Preserve backwards-compatibility - const durationProps = Note.parseDuration(noteStruct.duration); - if (!durationProps) { - return undefined; - } - // If specified type is invalid, return undefined. - let type = noteStruct.type; - if (type && !_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.validTypes[type]) { - return undefined; - } - // If no type specified, check duration or custom types - const customTypes = []; - if (!type) { - type = durationProps.type || 'n'; - // If we have keys, try and check if we've got a custom glyph - if (noteStruct.keys !== undefined) { - noteStruct.keys.forEach((k, i) => { - const result = k.split('/'); - // We have a custom glyph specified after the note eg. /X2 - customTypes[i] = (result && result.length === 3 ? result[2] : type); - }); - } - } - // Calculate the tick duration of the note - let ticks = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.durationToTicks(durationProps.duration); - if (!ticks) { - return undefined; - } - // Are there any dots? - const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; - if (typeof dots !== 'number') { - return undefined; - } - // Add ticks as necessary depending on the numbr of dots - let currentTicks = ticks; - for (let i = 0; i < dots; i++) { - if (currentTicks <= 1) - return undefined; - currentTicks = currentTicks / 2; - ticks += currentTicks; - } - return { - duration: durationProps.duration, - type, - customTypes, - dots, - ticks, - }; - } - /** - * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for - * positioning and layout. - * - * @param noteStruct To create a new note you need to provide a `noteStruct`. - */ - constructor(noteStruct) { - super(); - if (!noteStruct) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); - } - /** Parses `noteStruct` and get note properties. */ - const parsedNoteStruct = Note.parseNoteStruct(noteStruct); - if (!parsedNoteStruct) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); - } - // Set note properties from parameters. - this.keys = noteStruct.keys || []; - // per-pitch properties - this.keyProps = []; - this.duration = parsedNoteStruct.duration; - this.noteType = parsedNoteStruct.type; - this.customTypes = parsedNoteStruct.customTypes; - if (noteStruct.duration_override) { - // Custom duration - this.setDuration(noteStruct.duration_override); - } - else { - // Default duration - this.setIntrinsicTicks(parsedNoteStruct.ticks); - } - this.modifiers = []; - // Get the glyph code for this note from the font. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, this.noteType); - this.customGlyphs = this.customTypes.map((t) => _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.getGlyphProps(this.duration, t)); - // Note to play for audio players. - this.playNote = undefined; - // Positioning contexts used by the Formatter. - this.ignore_ticks = false; - // Positioning variables - this.width = 0; // Width in pixels calculated after preFormat - this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head - this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head - this.x_shift = 0; // X shift from tick context X - this.ys = []; // list of y coordinates for each note - // we need to hold on to these for ties and beams. - if (noteStruct.align_center) { - this.setCenterAlignment(noteStruct.align_center); - } - // The render surface. - this.render_options = { - annotation_spacing: 5, - glyph_font_scale: 1, - stroke_px: 1, - scale: 1, - font: '', - y_shift: 0, - }; - } - /** - * Get the play note, which is arbitrary data that can be used by an - * audio player. - */ - getPlayNote() { - return this.playNote; - } - /** - * Set the play note, which is arbitrary data that can be used by an - * audio player. - */ - setPlayNote(note) { - this.playNote = note; - return this; - } - /** - * @returns true if this note is a type of rest. - * - * Rests don't have pitches, but take up space in the score. - * Subclasses should override this default implementation. - */ - isRest() { - return false; - } - /** Add stroke. */ - addStroke(index, stroke) { - stroke.setNote(this); - stroke.setIndex(index); - this.modifiers.push(stroke); - this.preFormatted = false; - return this; - } - /** Get the target stave. */ - getStave() { - return this.stave; - } - /** Check and get the target stave. */ - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - /** Set the target stave. */ - setStave(stave) { - this.stave = stave; - this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed. - this.setContext(this.stave.getContext()); - return this; - } - /** Get spacing to the left of the notes. */ - getLeftDisplacedHeadPx() { - return this.leftDisplacedHeadPx; - } - /** Get spacing to the right of the notes. */ - getRightDisplacedHeadPx() { - return this.rightDisplacedHeadPx; - } - /** Set spacing to the left of the notes. */ - setLeftDisplacedHeadPx(x) { - this.leftDisplacedHeadPx = x; - return this; - } - /** Set spacing to the right of the notes. */ - setRightDisplacedHeadPx(x) { - this.rightDisplacedHeadPx = x; - return this; - } - /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ - shouldIgnoreTicks() { - return this.ignore_ticks; - } - /** Get the stave line number for the note. */ - // eslint-disable-next-line - getLineNumber(isTopNote) { - return 0; - } - /** Get the stave line number for rest. */ - getLineForRest() { - return 0; - } - /** - * @deprecated Use `getGlyphProps()` instead. - */ - // eslint-disable-next-line - getGlyph() { - return this.glyphProps; - } - /** Get the glyph associated with this note. */ - getGlyphProps() { - return this.glyphProps; - } - /** Get the glyph width. */ - getGlyphWidth() { - return this.glyphProps.getWidth(this.render_options.glyph_font_scale); - } - /** - * Set Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - setYs(ys) { - this.ys = ys; - return this; - } - /** - * Get Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - getYs() { - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoYValues', 'No Y-values calculated for this note.'); - } - return this.ys; - } - /** - * Get the Y position of the space above the stave onto which text can - * be rendered. - */ - getYForTopText(text_line) { - return this.checkStave().getYForTopText(text_line); - } - /** Return the voice that this note belongs in. */ - getVoice() { - if (!this.voice) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoVoice', 'Note has no voice.'); - return this.voice; - } - /** Attach this note to `voice`. */ - setVoice(voice) { - this.voice = voice; - this.preFormatted = false; - return this; - } - /** Get the `TickContext` for this note. */ - getTickContext() { - return this.checkTickContext(); - } - /** Set the `TickContext` for this note. */ - setTickContext(tc) { - this.tickContext = tc; - this.preFormatted = false; - return this; - } - /** Accessor to duration. */ - getDuration() { - return this.duration; - } - /** Accessor to isDotted. */ - isDotted() { - return this.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Dot).length > 0; - } - /** Accessor to hasStem. */ - hasStem() { - return false; - } - /** Accessor to note type. */ - getNoteType() { - return this.noteType; - } - /** Get the beam. */ - getBeam() { - return this.beam; - } - /** Check and get the beam. */ - checkBeam() { - return (0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.beam, 'NoBeam', 'No beam attached to instance'); - } - /** Check it has a beam. */ - hasBeam() { - return this.beam != undefined; - } - /** Set the beam. */ - setBeam(beam) { - this.beam = beam; - return this; - } - /** - * Attach a modifier to this note. - * @param modifier the Modifier to add. - * @param index of the key to modify. - * @returns this - */ - addModifier(modifier, index = 0) { - const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; - // Backwards compatibility with 3.0.9. - if (typeof index === 'string') { - index = parseInt(index); - // eslint-disable-next-line - console.warn(signature + ' expected a number for `index`, but received a string.'); - } - // Some versions of VexFlow had the two parameters reversed. - // Check here and throw an error if the argument types are not correct. - if (typeof modifier !== 'object' || typeof index !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); - } - modifier.setNote(this); - modifier.setIndex(index); - super.addModifier(modifier); - return this; - } - /** Get all modifiers of a specific type in `this.modifiers`. */ - getModifiersByType(type) { - return this.modifiers.filter((modifier) => modifier.getCategory() === type); - } - /** Get the coordinates for where modifiers begin. */ - // eslint-disable-next-line - getModifierStartXY(position, index, options) { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - return { - x: this.getAbsoluteX(), - y: this.ys[0], - }; - } - getRightParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getRightDisplacedHeadPx() : 0; - } - getLeftParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; - } - getFirstDotPx() { - let px = this.getRightDisplacedHeadPx(); - if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) - px += _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); - return px; - } - /** Get the metrics for this note. */ - getMetrics() { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); - } - const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; - const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; - const width = this.getWidth(); - const glyphWidth = this.getGlyphWidth(); - const notePx = width - - modLeftPx - // subtract left modifiers - modRightPx - // subtract right modifiers - this.leftDisplacedHeadPx - // subtract left displaced head - this.rightDisplacedHeadPx; // subtract right displaced head - // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory. - return { - width, - glyphWidth, - notePx, - // Modifier spacing. - modLeftPx, - modRightPx, - // Displaced note head on left or right. - leftDisplacedHeadPx: this.leftDisplacedHeadPx, - rightDisplacedHeadPx: this.rightDisplacedHeadPx, - glyphPx: 0, - }; - } - /** - * Get the absolute `X` position of this note's tick context. This - * excludes x_shift, so you'll need to factor it in if you're - * looking for the post-formatted x-position. - */ - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - // Position note to left edge of tick context. - let x = tickContext.getX(); - if (this.stave) { - x += this.stave.getNoteStartX() + _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('stave.padding'); - } - if (this.isCenterAligned()) { - x += this.getCenterXShift(); - } - return x; - } - /** Get the direction of the stem. */ - getStemDirection() { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - } - /** Get the top and bottom `y` values of the stem. */ - getStemExtents() { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - } - /** Get the `x` coordinate to the right of the note. */ - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieStartX += note_glyph_width / 2; - tieStartX += -this.width / 2 + this.width + 2; - return tieStartX; - } - /** Get the `x` coordinate to the left of the note. */ - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieEndX += note_glyph_width / 2; - tieEndX -= this.width / 2 + 2; - return tieEndX; - } - // Get the pitches in the note - getKeys() { - return this.keys; - } - // Get the properties for all the keys in the note - getKeyProps() { - return this.keyProps; - } -} - - -/***/ }), - -/***/ "./src/notehead.ts": -/*!*************************!*\ - !*** ./src/notehead.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteHead": () => (/* binding */ NoteHead) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (NoteHead.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.NoteHead', args); -} -/** - * Draw slashnote head manually. No glyph exists for this. - * @param ctx the Canvas context - * @param duration the duration of the note. ex: "4" - * @param x the x coordinate to draw at - * @param y the y coordinate to draw at - * @param stem_direction the direction of the stem - */ -function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { - const width = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.SLASH_NOTEHEAD_WIDTH; - ctx.save(); - ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH); - let fill = false; - if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToNumber(duration) > 2) { - fill = true; - } - if (!fill) - x -= (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STEM_WIDTH / 2) * stem_direction; - ctx.beginPath(); - ctx.moveTo(x, y + staveSpace); - ctx.lineTo(x, y + 1); - ctx.lineTo(x + width, y - staveSpace); - ctx.lineTo(x + width, y); - ctx.lineTo(x, y + staveSpace); - ctx.closePath(); - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - if (_tables__WEBPACK_IMPORTED_MODULE_4__.Tables.durationToFraction(duration).equals(0.5)) { - const breve_lines = [-3, -1, width + 1, width + 3]; - for (let i = 0; i < breve_lines.length; i++) { - ctx.beginPath(); - ctx.moveTo(x + breve_lines[i], y - 10); - ctx.lineTo(x + breve_lines[i], y + 11); - ctx.stroke(); - } - } - ctx.restore(); -} -/** - * `NoteHeads` are typically not manipulated - * directly, but used internally in `StaveNote`. - * - * See `tests/notehead_tests.ts` for usage examples. - */ -class NoteHead extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.NoteHead; - } - constructor(noteStruct) { - super(noteStruct); - this.custom_glyph = false; - this.stem_up_x_offset = 0; - this.stem_down_x_offset = 0; - this.index = noteStruct.index; - this.x = noteStruct.x || 0; - this.y = noteStruct.y || 0; - if (noteStruct.note_type) - this.noteType = noteStruct.note_type; - this.displaced = noteStruct.displaced || false; - this.stem_direction = noteStruct.stem_direction || _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - this.line = noteStruct.line || 0; - // Get glyph code based on duration and note type. This could be - // regular notes, rests, or other custom codes. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - // Swap out the glyph with ledger lines - if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { - this.glyphProps.code_head = this.glyphProps.ledger_code_head; - } - this.glyph_code = this.glyphProps.code_head; - this.x_shift = noteStruct.x_shift || 0; - if (noteStruct.custom_glyph_code) { - this.custom_glyph = true; - this.glyph_code = noteStruct.custom_glyph_code; - this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; - this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; - } - this.setStyle(noteStruct.style); - this.slashed = noteStruct.slashed || false; - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads - glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.NOTATION_FONT_SCALE }); - this.setWidth(this.custom_glyph && - !this.glyph_code.startsWith('noteheadSlashed') && - !this.glyph_code.startsWith('noteheadCircled') - ? _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) - : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); - } - /** Get the width of the notehead. */ - getWidth() { - return this.width; - } - /** Determine if the notehead is displaced. */ - isDisplaced() { - return this.displaced === true; - } - /** Set the X coordinate. */ - setX(x) { - this.x = x; - return this; - } - /** Get the Y coordinate. */ - getY() { - return this.y; - } - /** Set the Y coordinate. */ - setY(y) { - this.y = y; - return this; - } - /** Get the stave line the notehead is placed on. */ - getLine() { - return this.line; - } - /** Set the stave line the notehead is placed on. */ - setLine(line) { - this.line = line; - return this; - } - /** Get the canvas `x` coordinate position of the notehead. */ - getAbsoluteX() { - // If the note has not been preformatted, then get the static x value - // Otherwise, it's been formatted and we should use it's x value relative - // to its tick context - const x = !this.preFormatted ? this.x : super.getAbsoluteX(); - // For a more natural displaced notehead, we adjust the displacement amount - // by half the stem width in order to maintain a slight overlap with the stem - const displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; - const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; - return (x + - fontShift + - (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); - } - /** Get the `BoundingBox` for the `NoteHead`. */ - getBoundingBox() { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const spacing = this.checkStave().getSpacingBetweenLines(); - const half_spacing = spacing / 2; - const min_y = this.y - half_spacing; - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); - } - /** Set notehead to a provided `stave`. */ - setStave(stave) { - const line = this.getLine(); - this.stave = stave; - if (this.stave) { - this.setY(this.stave.getYForNote(line)); - this.setContext(this.stave.getContext()); - } - return this; - } - /** Pre-render formatting. */ - preFormat() { - if (this.preFormatted) - return this; - const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; - this.setWidth(width); - this.preFormatted = true; - return this; - } - /** Draw the notehead. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let head_x = this.getAbsoluteX(); - if (this.custom_glyph) { - // head_x += this.x_shift; - head_x += - this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? this.stem_up_x_offset + - (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) - : this.stem_down_x_offset; - } - const y = this.y; - L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); - // Begin and end positions for head. - const stem_direction = this.stem_direction; - const glyph_font_scale = this.render_options.glyph_font_scale; - const categorySuffix = `${this.glyph_code}Stem${stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`; - if (this.noteType === 's') { - const staveSpace = this.checkStave().getSpacingBetweenLines(); - drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); - } - else { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { - category: `noteHead.${categorySuffix}`, - }); - } - } -} -/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ -NoteHead.DEBUG = false; - - -/***/ }), - -/***/ "./src/notesubgroup.ts": -/*!*****************************!*\ - !*** ./src/notesubgroup.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "NoteSubGroup": () => (/* binding */ NoteSubGroup) -/* harmony export */ }); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2016 -// -// ## Description -// -// This file implements `NoteSubGroup` which is used to format and -// render notes as a `Modifier` -// ex) ClefNote, TimeSigNote and BarNote. - - - - - -class NoteSubGroup extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.NoteSubGroup; - } - // Arrange groups inside a `ModifierContext` - static format(groups, state) { - if (!groups || groups.length === 0) - return false; - let width = 0; - for (let i = 0; i < groups.length; ++i) { - const group = groups[i]; - group.preFormat(); - width += group.getWidth(); - } - state.left_shift += width; - return true; - } - constructor(subNotes) { - super(); - this.preFormatted = false; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; - this.subNotes = subNotes; - this.subNotes.forEach((subNote) => { - subNote.setIgnoreTicks(false); - }); - this.width = 0; - this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_0__.Formatter(); - this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__.Voice({ - num_beats: 4, - beat_value: 4, - resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION, - }).setStrict(false); - this.voice.addTickables(this.subNotes); - } - preFormat() { - if (this.preFormatted) - return; - this.formatter.joinVoices([this.voice]).format([this.voice], 0); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - this.alignSubNotesWithNote(this.subNotes, note); // Modifier function - this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); - } -} - - -/***/ }), - -/***/ "./src/ornament.ts": -/*!*************************!*\ - !*** ./src/ornament.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Ornament": () => (/* binding */ Ornament) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// MIT License - - - - - - - -// eslint-disable-next-line -function L(...args) { - if (Ornament.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_6__.log)('Vex.Flow.Ornament', args); -} -/** - * Ornament implements ornaments as modifiers that can be - * attached to notes. The complete list of ornaments is available in - * `tables.ts` under `Vex.Flow.ornamentCodes`. - * - * See `tests/ornament_tests.ts` for usage examples. - */ -class Ornament extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - /** Ornaments category string. */ - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Ornament; - } - static get minPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Arrange ornaments inside `ModifierContext` */ - static format(ornaments, state) { - if (!ornaments || ornaments.length === 0) - return false; - let width = 0; // width is used by ornaments, which are always centered on the note head - let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately - let left_shift = state.left_shift; - let yOffset = 0; - for (let i = 0; i < ornaments.length; ++i) { - const ornament = ornaments[i]; - const increment = 2; - if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { - ornament.x_shift += right_shift + 2; - } - if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { - ornament.x_shift -= left_shift + 2; - } - if (ornament.reportedWidth && ornament.x_shift < 0) { - left_shift += ornament.reportedWidth; - } - else if (ornament.reportedWidth && ornament.x_shift >= 0) { - right_shift += ornament.reportedWidth + Ornament.minPadding; - } - else { - width = Math.max(ornament.getWidth(), width); - } - // articulations above/below the line can be stacked. - if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { - // Unfortunately we don't know the stem direction. So we base it - // on the line number, but also allow it to be overridden. - const ornamentNote = (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(ornament.note, 'NoAttachedNote'); - if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - state.top_text_line += increment; - ornament.y_shift += yOffset; - yOffset -= ornament.glyph.bbox.getH(); - } - else { - state.text_line += increment; - ornament.y_shift += yOffset; - yOffset += ornament.glyph.bbox.getH(); - } - } - else { - if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - ornament.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else { - ornament.setTextLine(state.text_line); - state.text_line += increment; - } - } - } - // Note: 'legit' ornaments don't consider other modifiers when calculating their - // X position, but jazz ornaments sometimes need to. - state.left_shift = left_shift + width / 2; - state.right_shift = right_shift + width / 2; - return true; - } - /** - * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, - * these are generally on the top of the staff. - */ - static get ornamentNoteTransition() { - return ['flip', 'jazzTurn', 'smear']; - } - /** - * ornamentAttack indicates something that happens in the attach, placed before the note and - * any accidentals - */ - static get ornamentAttack() { - return ['scoop']; - } - /** - * The ornament is aligned based on the note head, but without regard to whether the - * stem goes up or down. - */ - static get ornamentAlignWithNoteHead() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; - } - /** - * An ornament that happens on the release of the note, generally placed after the - * note and overlapping the next beat/measure.. - */ - static get ornamentRelease() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; - } - /** ornamentArticulation goes above/below the note based on space availablity */ - static get ornamentArticulation() { - return ['bend', 'plungerClosed', 'plungerOpen']; - } - /** - * Legacy ornaments have hard-coded metrics. If additional ornament types are - * added, get their metrics here. - */ - getMetrics() { - const ornamentMetrics = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().getMetrics().ornament; - if (!ornamentMetrics) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `ornament missing`); - return ornamentMetrics[this.ornament.code]; - } - /** - * Create a new ornament of type `type`, which is an entry in - * `Vex.Flow.ornamentCodes` in `tables.ts`. - */ - constructor(type) { - super(); - this.type = type; - this.delayed = false; - this.render_options = { - font_scale: 38, - accidentalLowerPadding: 3, - accidentalUpperPadding: 3, - }; - this.ornament = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.ornamentCodes(this.type); - // new ornaments have their origin at the origin, and have more specific - // metrics. Legacy ornaments do some - // x scaling, and have hard-coded metrics - const metrics = this.getMetrics(); - // some jazz ornaments are above or below depending on stem direction. - this.adjustForStemDirection = false; - // some jazz ornaments like falls are supposed to overlap with future bars - // and so we report a different width than they actually take up. - this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; - this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; - this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; - if (!this.ornament) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); - } - this.x_shift = metrics ? metrics.xOffset : 0; - this.y_shift = metrics ? metrics.yOffset : 0; - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(this.ornament.code, this.render_options.font_scale, { - category: `ornament.${this.ornament.code}`, - }); - // Is this a jazz ornament that goes between this note and the next note. - if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - this.delayed = true; - } - // Legacy ornaments need this. I don't know why, but horizontal spacing issues - // happen if I don't set it. - if (!metrics) { - this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift - } - } - /** Set whether the ornament is to be delayed. */ - setDelayed(delayed) { - this.delayed = delayed; - return this; - } - /** Set the upper accidental for the ornament. */ - setUpperAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); - this.accidentalUpper.setOrigin(0.5, 1.0); - return this; - } - /** Set the lower accidental for the ornament. */ - setLowerAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(_tables__WEBPACK_IMPORTED_MODULE_3__.Tables.accidentalCodes(accid).code, scale); - this.accidentalLower.setOrigin(0.5, 1.0); - return this; - } - /** Render ornament in position next to note. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDir = note.getStemDirection(); - const stave = note.checkStave(); - this.applyStyle(); - ctx.openGroup('ornament', this.getAttribute('id')); - // Get stem extents - const stemExtents = note.checkStem().getExtents(); - let y = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? stemExtents.baseY : stemExtents.topY; - // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isTabNote)(note)) { - if (note.hasStem()) { - if (stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - y = stave.getYForTopText(this.text_line); - } - } - else { - // Without a stem - y = stave.getYForTopText(this.text_line); - } - } - const isPlacedOnNoteheadSide = stemDir === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN; - const spacing = stave.getSpacingBetweenLines(); - let lineSpacing = 1; - // Beamed stems are longer than quarter note stems, adjust accordingly - if (!isPlacedOnNoteheadSide && note.hasBeam()) { - lineSpacing += 0.5; - } - const totalSpacing = spacing * (this.text_line + lineSpacing); - const glyphYBetweenLines = y - totalSpacing; - // Get initial coordinates for the modifier position - const start = note.getModifierStartXY(this.position, this.index); - let glyphX = start.x; - // If the ornament is aligned with the note head, don't consider the stave y - // but use the 'natural' modifier y - let glyphY = this.ornamentAlignWithNoteHead - ? start.y - : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); - glyphY += this.y_shift; - // Ajdust x position if ornament is delayed - if (this.delayed) { - let delayXShift = 0; - const startX = glyphX - (stave.getX() - 10); - if (this.delayXShift !== undefined) { - delayXShift = this.delayXShift; - } - else { - delayXShift += this.glyph.getMetrics().width / 2; - const nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_4__.TickContext.getNextContext(note.getTickContext()); - if (nextContext) { - delayXShift += (nextContext.getX() - startX) * 0.5; - } - else { - delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; - } - this.delayXShift = delayXShift; - } - glyphX += delayXShift; - } - L('Rendering ornament: ', this.ornament, glyphX, glyphY); - if (this.accidentalLower) { - this.accidentalLower.render(ctx, glyphX, glyphY); - glyphY -= this.accidentalLower.getMetrics().height; - glyphY -= this.render_options.accidentalLowerPadding; - } - if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { - glyphY += this.stemUpYOffset; - } - if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - glyphY = note.checkStave().getBoundingBox().getY() + 40; - } - this.glyph.render(ctx, glyphX + this.x_shift, glyphY); - if (this.accidentalUpper) { - glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; - this.accidentalUpper.render(ctx, glyphX, glyphY); - } - ctx.closeGroup(); - this.restoreStyle(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ -Ornament.DEBUG = false; - - -/***/ }), - -/***/ "./src/parenthesis.ts": -/*!****************************!*\ - !*** ./src/parenthesis.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Parenthesis": () => (/* binding */ Parenthesis) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Rodrigo Vilar -// MIT License - - - - -/** Parenthesis implements parenthesis modifiers for notes. */ -class Parenthesis extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Parenthesis; - } - /** Add parentheses to the notes. */ - static buildAndAttach(notes) { - for (const note of notes) { - for (let i = 0; i < note.keys.length; i++) { - note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT), i); - note.addModifier(new Parenthesis(_modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT), i); - } - } - } - /** Arrange parentheses inside a ModifierContext. */ - static format(parentheses, state) { - if (!parentheses || parentheses.length === 0) - return false; - let x_widthL = 0; - let x_widthR = 0; - for (let i = 0; i < parentheses.length; ++i) { - const parenthesis = parentheses[i]; - const note = parenthesis.getNote(); - const pos = parenthesis.getPosition(); - const index = parenthesis.checkIndex(); - let shift = 0; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.RIGHT) { - shift = note.getRightParenthesisPx(index); - x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; - } - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.LEFT) { - shift = note.getLeftParenthesisPx(index); - x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; - } - parenthesis.setXShift(shift); - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - /** - * Constructor - * - * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT - */ - constructor(position) { - super(); - this.position = position !== null && position !== void 0 ? position : _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT; - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - } - /** Set the associated note. */ - setNote(note) { - this.note = note; - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isGraceNote)(note)) { - this.point = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point'); - this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); - } - return this; - } - /** Render the parenthesis. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - const x = start.x + this.x_shift; - const y = start.y + this.y_shift; - if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { - category: `noteHead.standard.noteheadParenthesisRight`, - }); - } - else if (this.position == _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { - category: `noteHead.standard.noteheadParenthesisLeft`, - }); - } - } -} - - -/***/ }), - -/***/ "./src/parser.ts": -/*!***********************!*\ - !*** ./src/parser.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Parser": () => (/* binding */ Parser) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// A generic text parsing class for VexFlow. - -// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (Parser.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_0__.log)('Vex.Flow.Parser', args); -} -const NO_ERROR_POS = -1; -// Converts parser results into an easy to reference list that can be -// used in triggers. This function returns: -// - nested array in which the leaf elements are string or null -// - string (including empty strings) -// - null -function flattenMatches(r) { - if ('matchedString' in r) - return r.matchedString; // string - if ('results' in r) - return flattenMatches(r.results); - const results = r; - if (results.length === 1) - return flattenMatches(results[0]); - if (results.length === 0) - return null; - return results.map(flattenMatches); // nested array -} -// This is the base parser class. Given an arbitrary context-free grammar, it -// can parse any line and execute code when specific rules are met (e.g., -// when a string is terminated.) -class Parser { - // For an example of a simple grammar, take a look at tests/parser_tests.ts or - // the EasyScore grammar in easyscore.ts. - constructor(grammar) { - this.grammar = grammar; - this.line = ''; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - } - // Parse `line` using current grammar. Returns `{success: true}` if the - // line parsed correctly, otherwise returns `{success: false, errorPos: N}` - // where `errorPos` is the location of the error in the string. - parse(line) { - this.line = line; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - const result = this.expect(this.grammar.begin()); - result.errorPos = this.errorPos; - return result; - } - matchFail(returnPos) { - if (this.errorPos === NO_ERROR_POS) - this.errorPos = this.pos; - this.pos = returnPos; - } - matchSuccess() { - this.errorPos = NO_ERROR_POS; - } - // Look for `token` in this.line[this.pos], and return success - // if one is found. `token` is specified as a regular expression. - matchToken(token, noSpace = false) { - const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); - const workingLine = this.line.slice(this.pos); - const result = workingLine.match(regexp); - if (result !== null) { - return { - success: true, - matchedString: result[2], - incrementPos: result[1].length, - pos: this.pos, - }; - } - else { - return { success: false, pos: this.pos }; - } - } - // Execute rule to match a sequence of tokens (or rules). If `maybe` is - // set, then return success even if the token is not found, but reset - // the position before exiting. - // TODO: expectOne(...) is never called with the `maybe` parameter. - expectOne(rule, maybe = false) { - const results = []; - const pos = this.pos; - let allMatches = true; - let oneMatch = false; - maybe = maybe === true || rule.maybe === true; - // Execute all sub rules in sequence. - if (rule.expect) { - for (const next of rule.expect) { - const localPos = this.pos; - const result = this.expect(next); - // If `rule.or` is set, then return success if any one - // of the subrules match, else all subrules must match. - if (result.success) { - results.push(result); - oneMatch = true; - if (rule.or) - break; - } - else { - allMatches = false; - if (!rule.or) { - this.pos = localPos; - break; - } - } - } - } - const gotOne = (rule.or && oneMatch) || allMatches; - const success = gotOne || maybe === true; - const numMatches = gotOne ? 1 : 0; - if (maybe && !gotOne) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - // Try to match multiple (one or more) instances of the rule. If `maybe` is set, - // then a failed match is also a success (but the position is reset). - expectOneOrMore(rule, maybe = false) { - const results = []; - const pos = this.pos; - let numMatches = 0; - let more = true; - do { - const result = this.expectOne(rule); - if (result.success && result.results) { - numMatches++; - results.push(result.results); - } - else { - more = false; - } - } while (more); - const success = numMatches > 0 || maybe === true; - if (maybe && !(numMatches > 0)) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`. - expectZeroOrMore(rule) { - return this.expectOneOrMore(rule, true); - } - // Execute the rule produced by the provided `rules` function. This - // offloads to one of the above matchers and consolidates the results. It is also - // responsible for executing any code triggered by the rule (in `rule.run`.) - expect(ruleFunc) { - L('Evaluating rule function:', ruleFunc); - if (!ruleFunc) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Invalid rule function'); - } - let result; - // Get rule from Grammar class. - // expect(...) handles both lexing & parsing: - // - lexer rules produce tokens. - // - parser rules produce expressions which may trigger code via the - // { run: () => ... } trigger functions in easyscore.ts. - // These functions build the VexFlow objects that are displayed on screen. - const rule = ruleFunc.bind(this.grammar)(); - if (rule.token) { - // A lexer rule has a `token` property. - // Base case: parse the regex and throw an error if the - // line doesn't match. - result = this.matchToken(rule.token, rule.noSpace === true); - if (result.success) { - // Token match! Update position and throw away parsed portion - // of string. - this.pos += result.incrementPos; - } - } - else if (rule.expect) { - // A parser rule has an `expect` property. - if (rule.oneOrMore) { - result = this.expectOneOrMore(rule); - } - else if (rule.zeroOrMore) { - result = this.expectZeroOrMore(rule); - } - else { - result = this.expectOne(rule); - } - } - else { - L(rule); - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); - } - // If there's a trigger attached to this rule, then run it. - // Make the matches accessible through `state.matches` in the - // `run: (state) => ...` trigger. - const matches = []; - result.matches = matches; - if (result.results) { - result.results.forEach((r) => matches.push(flattenMatches(r))); - } - if (rule.run && result.success) { - rule.run({ matches }); - } - return result; - } -} -Parser.DEBUG = false; - - -/***/ }), - -/***/ "./src/pedalmarking.ts": -/*!*****************************!*\ - !*** ./src/pedalmarking.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "PedalMarking": () => (/* binding */ PedalMarking) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -// eslint-disable-next-line -function L(...args) { - if (PedalMarking.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.PedalMarking', args); -} -/** - * Draws a pedal glyph with the provided `name` on a rendering `context` - * at the coordinates `x` and `y. Takes into account the glyph data - * coordinate shifts. - */ -function drawPedalGlyph(name, context, x, y, point) { - const glyph_data = PedalMarking.GLYPHS[name]; - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph(glyph_data.code, point, { category: 'pedalMarking' }); - glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift); -} -/** - * PedalMarking implements different types of pedal markings. These notation - * elements indicate to the performer when to depress and release the a pedal. - * - * In order to create "Sostenuto", and "una corda" markings, you must set - * custom text for the release/depress pedal markings. - */ -class PedalMarking extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.PedalMarking; - } - /** - * Create a sustain pedal marking. Returns the defaults PedalMarking. - * Which uses the traditional "Ped" and "*"" markings. - */ - static createSustain(notes) { - const pedal = new PedalMarking(notes); - return pedal; - } - /** Create a sostenuto pedal marking */ - static createSostenuto(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.MIXED); - pedal.setCustomText('Sost. Ped.'); - return pedal; - } - /** Create an una corda pedal marking */ - static createUnaCorda(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.TEXT); - pedal.setCustomText('una corda', 'tre corda'); - return pedal; - } - constructor(notes) { - super(); - this.notes = notes; - this.type = PedalMarking.type.TEXT; - this.line = 0; - // Custom text for the release/depress markings - this.custom_depress_text = ''; - this.custom_release_text = ''; - this.resetFont(); - this.render_options = { - bracket_height: 10, - text_margin_right: 6, - bracket_line_width: 1, - color: 'black', - }; - } - /** Set pedal type. */ - setType(type) { - type = typeof type === 'string' ? PedalMarking.typeString[type] : type; - if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { - this.type = type; - } - return this; - } - /** - * Set custom text for the `depress`/`release` pedal markings. No text is - * set if the parameter is falsy. - */ - setCustomText(depress, release) { - this.custom_depress_text = depress || ''; - this.custom_release_text = release || ''; - return this; - } - /** Set the staff line to render the markings on. */ - setLine(line) { - this.line = line; - return this; - } - /** Draw the bracket based pedal markings. */ - drawBracketed() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - let prev_x; - let prev_y; - // Iterate through each note - this.notes.forEach((note, index, notes) => { - // Each note triggers the opposite pedal action - is_pedal_depressed = !is_pedal_depressed; - // Get the initial coordinates for the note - const x = note.getAbsoluteX(); - const y = note.checkStave().getYForBottomText(this.line + 3); - // Throw if current note is positioned before the previous note - if (x < prev_x) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); - } - // Determine if the previous or next note are the same - // as the current note. We need to keep track of this for - // when adjustments are made for the release+depress action - const next_is_same = notes[index + 1] === note; - const prev_is_same = notes[index - 1] === note; - let x_shift = 0; - const point = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - if (is_pedal_depressed) { - // Adjustment for release+depress - x_shift = prev_is_same ? 5 : 0; - if (this.type === PedalMarking.type.MIXED && !prev_is_same) { - // For MIXED style, start with text instead of bracket - if (this.custom_depress_text) { - // If we have custom text, use instead of the default "Ped" glyph - const text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - x_shift = text_width / 2 + this.render_options.text_margin_right; - } - else { - // Render the Ped glyph in position - drawPedalGlyph('pedal_depress', ctx, x, y, point); - x_shift = 20 + this.render_options.text_margin_right; - } - } - else { - // Draw start bracket - ctx.beginPath(); - ctx.moveTo(x, y - this.render_options.bracket_height); - ctx.lineTo(x + x_shift, y); - ctx.stroke(); - ctx.closePath(); - } - } - else { - // Adjustment for release+depress - x_shift = next_is_same ? -5 : 0; - // Draw end bracket - ctx.beginPath(); - ctx.moveTo(prev_x, prev_y); - ctx.lineTo(x + x_shift, y); - ctx.lineTo(x, y - this.render_options.bracket_height); - ctx.stroke(); - ctx.closePath(); - } - // Store previous coordinates - prev_x = x + x_shift; - prev_y = y; - }); - } - /** - * Draw the text based pedal markings. This defaults to the traditional - * "Ped" and "*"" symbols if no custom text has been provided. - */ - drawText() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - // Iterate through each note, placing glyphs or custom text accordingly - this.notes.forEach((note) => { - is_pedal_depressed = !is_pedal_depressed; - const stave = note.checkStave(); - const x = note.getAbsoluteX(); - const y = stave.getYForBottomText(this.line + 3); - const point = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - let text_width = 0; - if (is_pedal_depressed) { - if (this.custom_depress_text) { - text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_depress', ctx, x, y, point); - } - } - else { - if (this.custom_release_text) { - text_width = ctx.measureText(this.custom_release_text).width; - ctx.fillText(this.custom_release_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_release', ctx, x, y, point); - } - } - }); - } - /** Render the pedal marking in position on the rendering context. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - ctx.setFont(this.textFont); - L('Rendering Pedal Marking'); - if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { - ctx.setLineWidth(this.render_options.bracket_line_width); - this.drawBracketed(); - } - else if (this.type === PedalMarking.type.TEXT) { - this.drawText(); - } - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ -PedalMarking.DEBUG = false; -PedalMarking.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, -}; -/** Glyph data */ -PedalMarking.GLYPHS = { - pedal_depress: { - code: 'keyboardPedalPed', - x_shift: -10, - y_shift: 0, - }, - pedal_release: { - code: 'keyboardPedalUp', - x_shift: -2, - y_shift: 3, - }, -}; -/** Pedal type as number. */ -PedalMarking.type = { - TEXT: 1, - BRACKET: 2, - MIXED: 3, -}; -/** Pedal type as string. */ -PedalMarking.typeString = { - text: PedalMarking.type.TEXT, - bracket: PedalMarking.type.BRACKET, - mixed: PedalMarking.type.MIXED, -}; - - -/***/ }), - -/***/ "./src/registry.ts": -/*!*************************!*\ - !*** ./src/registry.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Registry": () => (/* binding */ Registry) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// @author Mohit Cheppudira -// -// ## Description -// -// This file implements a registry for VexFlow elements. It allows users -// to track, query, and manage some subset of generated elements, and -// dynamically get and set attributes. -// -// There are two ways to register with a registry: -// -// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or, -// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future -// elements will automatically register with it. -// -// Once an element is registered, selected attributes are tracked and indexed by -// the registry. This allows fast look up of elements by attributes like id, type, -// and class. - -// Indexes are represented as maps of maps of maps. This allows -// for both multi-labeling (e.g., an element can have multiple classes) -// and efficient lookup. -class Index { - constructor() { - this.id = {}; - this.type = {}; - this.class = {}; - } -} -class Registry { - static getDefaultRegistry() { - return Registry.defaultRegistry; - } - // If you call `enableDefaultRegistry`, any new elements will auto-register with - // the provided registry as soon as they're constructed. - static enableDefaultRegistry(registry) { - Registry.defaultRegistry = registry; - } - static disableDefaultRegistry() { - Registry.defaultRegistry = undefined; - } - constructor() { - this.index = new Index(); - } - clear() { - this.index = new Index(); - return this; - } - setIndexValue(name, value, id, elem) { - const index = this.index; - if (!index[name][value]) { - index[name][value] = {}; - } - index[name][value][id] = elem; - } - // Updates the indexes for element 'id'. If an element's attribute changes - // from A -> B, make sure to remove the element from A. - updateIndex({ id, name, value, oldValue }) { - const elem = this.getElementById(id); - if (oldValue !== undefined && this.index[name][oldValue]) { - delete this.index[name][oldValue][id]; - } - if (value && elem) { - this.setIndexValue(name, value, elem.getAttribute('id'), elem); - } - } - /** - * Register element `elem` with this registry. - * This adds the element to its index and watches it for attribute changes. - * @param elem - * @param id - * @returns this - */ - register(elem, id) { - id = id || elem.getAttribute('id'); - if (!id) { - throw new _util__WEBPACK_IMPORTED_MODULE_0__.RuntimeError("Can't add element without `id` attribute to registry"); - } - // Manually add id to index, then update other indexes. - elem.setAttribute('id', id); - this.setIndexValue('id', id, id, elem); - this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); - elem.onRegister(this); - return this; - } - getElementById(id) { - var _a, _b; - return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found. - } - getElementsByAttribute(attribute, value) { - const index_attr = this.index[attribute]; - if (index_attr) { - const index_attr_val = index_attr[value]; - if (index_attr_val) { - const keys = Object.keys(index_attr_val); - return keys.map((k) => index_attr_val[k]); - } - } - return []; - } - getElementsByType(type) { - return this.getElementsByAttribute('type', type); - } - getElementsByClass(className) { - return this.getElementsByAttribute('class', className); - } - // This is called by the element when an attribute value changes. If an indexed - // attribute changes, then update the local index. - onUpdate(info) { - const allowedNames = ['id', 'type', 'class']; - if (allowedNames.includes(info.name)) { - this.updateIndex(info); - } - return this; - } -} - - -/***/ }), - -/***/ "./src/rendercontext.ts": -/*!******************************!*\ - !*** ./src/rendercontext.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RenderContext": () => (/* binding */ RenderContext), -/* harmony export */ "drawDot": () => (/* binding */ drawDot) -/* harmony export */ }); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021. -// MIT License - -class RenderContext { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_0__.Category.RenderContext; - } - set font(f) { - this.setFont(f); - } - get font() { - return this.getFont(); - } - /** - * This is kept for backwards compatibility with 3.0.9. - * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. - */ - setRawFont(f) { - this.setFont(f); - return this; - } -} -/** - * Draw a tiny dot marker on the specified context. A great debugging aid. - * @param ctx context - * @param x dot x coordinate - * @param y dot y coordinate - * @param color - */ -function drawDot(ctx, x, y, color = '#F55') { - ctx.save(); - ctx.setFillStyle(color); - // draw a circle - ctx.beginPath(); - ctx.arc(x, y, 3, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.restore(); -} - - -/***/ }), - -/***/ "./src/renderer.ts": -/*!*************************!*\ - !*** ./src/renderer.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Renderer": () => (/* binding */ Renderer), -/* harmony export */ "RendererBackends": () => (/* binding */ RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* binding */ RendererLineEndType) -/* harmony export */ }); -/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.ts"); -/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web */ "./src/web.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var RendererBackends; -(function (RendererBackends) { - RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; - RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; -})(RendererBackends || (RendererBackends = {})); -// End of line types -var RendererLineEndType; -(function (RendererLineEndType) { - RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; - RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; - RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; -})(RendererLineEndType || (RendererLineEndType = {})); -/** - * Support Canvas & SVG rendering contexts. - */ -class Renderer { - static buildContext(elementId, backend, width, height, background = '#FFF') { - const renderer = new Renderer(elementId, backend); - if (width && height) { - renderer.resize(width, height); - } - const ctx = renderer.getContext(); - ctx.setBackgroundFillStyle(background); - Renderer.lastContext = ctx; - return ctx; - } - static getCanvasContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); - } - static getSVGContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); - } - // Draw a dashed line (horizontal, vertical or diagonal - // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space. - // setting the second number to 0 draws a solid line. - static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { - context.beginPath(); - const dx = toX - fromX; - const dy = toY - fromY; - const angle = Math.atan2(dy, dx); - let x = fromX; - let y = fromY; - context.moveTo(fromX, fromY); - let idx = 0; - let draw = true; - while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { - const dashLength = dashPattern[idx++ % dashPattern.length]; - const nx = x + Math.cos(angle) * dashLength; - x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); - const ny = y + Math.sin(angle) * dashLength; - y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); - if (draw) { - context.lineTo(x, y); - } - else { - context.moveTo(x, y); - } - draw = !draw; - } - context.closePath(); - context.stroke(); - } - constructor(arg0, arg1) { - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_2__.isRenderContext)(arg0)) { - // The user has provided what looks like a RenderContext, let's just use it. - this.ctx = arg0; - } - else { - if (arg1 === undefined) { - // The backend must be specified if the render context isn't directly provided. - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidArgument', 'Missing backend argument'); - } - const backend = arg1; - let element; - if (typeof arg0 == 'string') { - const maybeElement = document.getElementById(arg0); - if (!maybeElement) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); - } - element = maybeElement; - } - else { - element = arg0; - } - // Verify backend and create context - if (backend === Renderer.Backends.CANVAS) { - if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLCanvas)(element)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); - } - const context = element.getContext('2d', { willReadFrequently: true }); - if (!context) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', "Can't get canvas context"); - } - this.ctx = new _canvascontext__WEBPACK_IMPORTED_MODULE_0__.CanvasContext(context); - } - else if (backend === Renderer.Backends.SVG) { - if (!(0,_web__WEBPACK_IMPORTED_MODULE_4__.isHTMLDiv)(element)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); - } - this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_1__.SVGContext(element); - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('InvalidBackend', `No support for backend: ${backend}`); - } - } - } - resize(width, height) { - this.ctx.resize(width, height); - return this; - } - getContext() { - return this.ctx; - } -} -Renderer.Backends = RendererBackends; -Renderer.LineEndType = RendererLineEndType; -// Used by vexflow_test_helpers.ts -// Should this be private? -// Can we do this in a cleaner way? -Renderer.lastContext = undefined; - - -/***/ }), - -/***/ "./src/repeatnote.ts": -/*!***************************!*\ - !*** ./src/repeatnote.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RepeatNote": () => (/* binding */ RepeatNote) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - - -// Map `type` to SMuFL glyph code. -const CODES = { - '1': 'repeat1Bar', - '2': 'repeat2Bars', - '4': 'repeat4Bars', - slash: 'repeatBarSlash', -}; -class RepeatNote extends _glyphnote__WEBPACK_IMPORTED_MODULE_1__.GlyphNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.RepeatNote; - } - constructor(type, noteStruct, options) { - const glyphCode = CODES[type] || 'repeat1Bar'; - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyphCode, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { - category: 'repeatNote', - }); - super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); - } -} - - -/***/ }), - -/***/ "./src/stave.ts": -/*!**********************!*\ - !*** ./src/stave.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stave": () => (/* binding */ Stave) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./clef */ "./src/clef.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.ts"); -/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.ts"); -/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.ts"); -/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.ts"); -/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.ts"); -/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - - - - - - - - - - -// Used by Stave.format() to sort the modifiers at the beginning and end of a stave. -// The keys (computed property names) match the CATEGORY property in the -// Barline, Clef, KeySignature, TimeSignature classes. -const SORT_ORDER_BEG_MODIFIERS = { - [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 0, - [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 1, - [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 2, - [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 3, -}; -const SORT_ORDER_END_MODIFIERS = { - [_timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY]: 0, - [_keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY]: 1, - [_stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline.CATEGORY]: 2, - [_clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY]: 3, -}; -class Stave extends _element__WEBPACK_IMPORTED_MODULE_2__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Stave; - } - // This is the sum of the padding that normally goes on left + right of a stave during - // drawing. Used to size staves correctly with content width. - static get defaultPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); - } - // Right padding, used by system if startX is already determined. - static get rightPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.endPaddingMax'); - } - constructor(x, y, width, options) { - super(); - // Initialized by the constructor via this.resetLines(). - this.height = 0; - this.x = x; - this.y = y; - this.width = width; - this.formatted = false; - this.start_x = x + 5; - this.end_x = x + width; - this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.) - this.measure = 0; - this.clef = 'treble'; - this.endClef = undefined; - this.resetFont(); - this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); - this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; - this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; - this.resetLines(); - // beg bar - this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.left_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - // end bar - this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(this.options.right_bar ? _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE : _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - } - /** Set default style for ledger lines. */ - setDefaultLedgerLineStyle(style) { - this.defaultLedgerLineStyle = style; - } - /** Get default style for ledger lines. */ - getDefaultLedgerLineStyle() { - return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); - } - space(spacing) { - return this.options.spacing_between_lines_px * spacing; - } - resetLines() { - this.options.line_config = []; - for (let i = 0; i < this.options.num_lines; i++) { - this.options.line_config.push({ visible: true }); - } - this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; - this.options.bottom_text_position = this.options.num_lines; - } - setNoteStartX(x) { - if (!this.formatted) - this.format(); - this.start_x = x; - return this; - } - getNoteStartX() { - if (!this.formatted) - this.format(); - return this.start_x; - } - getNoteEndX() { - if (!this.formatted) - this.format(); - return this.end_x; - } - getTieStartX() { - return this.start_x; - } - getTieEndX() { - return this.end_x; - } - getX() { - return this.x; - } - getNumLines() { - return this.options.num_lines; - } - setNumLines(n) { - this.options.num_lines = n; - this.resetLines(); - return this; - } - setY(y) { - this.y = y; - return this; - } - getY() { - return this.y; - } - getTopLineTopY() { - return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; - } - getBottomLineBottomY() { - return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS / 2; - } - setX(x) { - const shift = x - this.x; - this.formatted = false; - this.x = x; - this.start_x += shift; - this.end_x += shift; - for (let i = 0; i < this.modifiers.length; i++) { - const mod = this.modifiers[i]; - mod.setX(mod.getX() + shift); - } - return this; - } - setWidth(width) { - this.formatted = false; - this.width = width; - this.end_x = this.x + width; - // reset the x position of the end barline (TODO(0xfe): This makes no sense) - // this.modifiers[1].setX(this.end_x); - return this; - } - getWidth() { - return this.width; - } - getStyle() { - return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: _tables__WEBPACK_IMPORTED_MODULE_12__.Tables.STAVE_LINE_THICKNESS }, super.getStyle()); - } - /** - * Set the measure number of this Stave. - */ - setMeasure(measure) { - this.measure = measure; - return this; - } - /** - * Return the measure number of this Stave. - */ - getMeasure() { - return this.measure; - } - /** - * Gets the pixels to shift from the beginning of the stave - * following the modifier at the provided index - * @param {Number} index The index from which to determine the shift - * @return {Number} The amount of pixels shifted - */ - getModifierXShift(index = 0) { - if (typeof index !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('InvalidIndex', 'Must be of number type'); - } - if (!this.formatted) - this.format(); - if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN).length === 1) { - return 0; - } - // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test' - if (this.modifiers[index].getPosition() === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.RIGHT) { - return 0; - } - let start_x = this.start_x - this.x; - const begBarline = this.modifiers[0]; - if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { - start_x -= begBarline.getWidth(); - } - return start_x; - } - /** Coda & Segno Symbol functions */ - setRepetitionType(type, yShift = 0) { - this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_7__.Repetition(type, this.x, yShift)); - return this; - } - // Volta functions - setVoltaType(type, number_t, y) { - this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_11__.Volta(type, number_t, this.x, y)); - return this; - } - // Section functions - setSection(section, y, xOffset = 0, fontSize, drawRect = true) { - const staveSection = new _stavesection__WEBPACK_IMPORTED_MODULE_8__.StaveSection(section, this.x + xOffset, y, drawRect); - if (fontSize) - staveSection.setFontSize(fontSize); - this.modifiers.push(staveSection); - return this; - } - // Tempo functions - setTempo(tempo, y) { - this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_9__.StaveTempo(tempo, this.x, y)); - return this; - } - // Text functions - setText(text, position, options = {}) { - this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_10__.StaveText(text, position, options)); - return this; - } - getHeight() { - return this.height; - } - getSpacingBetweenLines() { - return this.options.spacing_between_lines_px; - } - getBoundingBox() { - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); - } - getBottomY() { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; - return score_bottom; - } - getBottomLineY() { - return this.getYForLine(this.options.num_lines); - } - // This returns - /** @returns the y for the *center* of a staff line */ - getYForLine(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - const y = this.y + line * spacing + headroom * spacing; - return y; - } - getLineForY(y) { - // Does the reverse of getYForLine - somewhat dumb and just calls - // getYForLine until the right value is reaches - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return (y - this.y) / spacing - headroom; - } - getYForTopText(line = 0) { - return this.getYForLine(-line - this.options.top_text_position); - } - getYForBottomText(line = 0) { - return this.getYForLine(this.options.bottom_text_position + line); - } - getYForNote(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return this.y + headroom * spacing + 5 * spacing - line * spacing; - } - getYForGlyphs() { - return this.getYForLine(3); - } - // This method adds a stave modifier to the stave. Note that the first two - // modifiers (BarLines) are automatically added upon construction. - addModifier(modifier, position) { - if (position !== undefined) { - modifier.setPosition(position); - } - modifier.setStave(this); - this.formatted = false; - this.modifiers.push(modifier); - return this; - } - addEndModifier(modifier) { - this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - // Bar Line functions - setBegBarType(type) { - // Only valid bar types at beginning of stave is none, single or begin repeat - const { SINGLE, REPEAT_BEGIN, NONE } = _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType; - if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { - this.modifiers[0].setType(type); - this.formatted = false; - } - return this; - } - setEndBarType(type) { - // Repeat end not valid at end of stave - if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { - this.modifiers[1].setType(type); - this.formatted = false; - } - return this; - } - setClef(clefSpec, size, annotation, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { - this.endClef = clefSpec; - } - else { - this.clef = clefSpec; - } - const clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_1__.Clef.CATEGORY); - if (clefs.length === 0) { - this.addClef(clefSpec, size, annotation, position); - } - else { - clefs[0].setType(clefSpec, size, annotation); - } - return this; - } - getClef() { - return this.clef; - } - setEndClef(clefSpec, size, annotation) { - this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - getEndClef() { - return this.endClef; - } - setKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - const keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature.CATEGORY); - if (keySignatures.length === 0) { - this.addKeySignature(keySpec, cancelKeySpec, position); - } - else { - keySignatures[0].setKeySig(keySpec, cancelKeySpec); - } - return this; - } - setEndKeySignature(keySpec, cancelKeySpec) { - this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - setTimeSignature(timeSpec, customPadding, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - const timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature.CATEGORY); - if (timeSignatures.length === 0) { - this.addTimeSignature(timeSpec, customPadding, position); - } - else { - timeSignatures[0].setTimeSig(timeSpec); - } - return this; - } - setEndTimeSignature(timeSpec, customPadding) { - this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - /** - * Add a key signature to the stave. - * - * Example: - * `stave.addKeySignature('Db');` - * @param keySpec new key specification `[A-G][b|#]?` - * @param cancelKeySpec - * @param position - * @returns - */ - addKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN; - } - this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_4__.KeySignature(keySpec, cancelKeySpec).setPosition(position), position); - return this; - } - /** - * Add a clef to the stave. - * - * Example: - * - * stave.addClef('treble') - * @param clef clef (treble|bass|...) see {@link Clef.types} - * @param size - * @param annotation - * @param position - * @returns - */ - addClef(clef, size, annotation, position) { - if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN) { - this.clef = clef; - } - else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END) { - this.endClef = clef; - } - this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_1__.Clef(clef, size, annotation), position); - return this; - } - addEndClef(clef, size, annotation) { - this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - /** - * Add a time signature to the stave - * - * Example: - * - * `stave.addTimeSignature('4/4');` - * @param timeSpec time signature specification `(C\||C|\d\/\d)` - * @param customPadding - * @param position - * @returns - */ - addTimeSignature(timeSpec, customPadding, position) { - this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_13__.TimeSignature(timeSpec, customPadding), position); - return this; - } - addEndTimeSignature(timeSpec, customPadding) { - this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - return this; - } - // Deprecated - addTrebleGlyph() { - this.addClef('treble'); - return this; - } - /** - * @param position - * @param category - * @returns array of StaveModifiers that match the provided position and category. - */ - getModifiers(position, category) { - const noPosition = position === undefined; - const noCategory = category === undefined; - if (noPosition && noCategory) { - return this.modifiers; - } - else if (noPosition) { - // A category was provided. - return this.modifiers.filter((m) => category === m.getCategory()); - } - else if (noCategory) { - // A position was provided. - return this.modifiers.filter((m) => position === m.getPosition()); - } - else { - // Both position and category were provided! - return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); - } - } - /** - * Use the modifier's `getCategory()` as a key for the `order` array. - * The retrieved value is used to sort modifiers from left to right (0 to to 3). - */ - sortByCategory(items, order) { - for (let i = items.length - 1; i >= 0; i--) { - for (let j = 0; j < i; j++) { - if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { - const temp = items[j]; - items[j] = items[j + 1]; - items[j + 1] = temp; - } - } - } - } - format() { - const begBarline = this.modifiers[0]; - const endBarline = this.modifiers[1]; - const begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); - const endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.END); - this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); - this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); - if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) { - begModifiers.push(begModifiers.splice(0, 1)[0]); - begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.SINGLE)); - } - if (endModifiers.indexOf(endBarline) > 0) { - endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_5__.Barline(_stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.NONE)); - } - let width; - let padding; - let modifier; - let offset = 0; - let x = this.x; - for (let i = 0; i < begModifiers.length; i++) { - modifier = begModifiers[i]; - padding = modifier.getPadding(i + offset); - width = modifier.getWidth(); - x += padding; - modifier.setX(x); - x += width; - if (padding + width === 0) - offset--; - } - this.start_x = x; - x = this.x + this.width; - const widths = { - left: 0, - right: 0, - paddingRight: 0, - paddingLeft: 0, - }; - let lastBarlineIdx = 0; - for (let i = 0; i < endModifiers.length; i++) { - modifier = endModifiers[i]; - lastBarlineIdx = (0,_typeguard__WEBPACK_IMPORTED_MODULE_14__.isBarline)(modifier) ? i : lastBarlineIdx; - widths.right = 0; - widths.left = 0; - widths.paddingRight = 0; - widths.paddingLeft = 0; - const layoutMetrics = modifier.getLayoutMetrics(); - if (layoutMetrics) { - if (i !== 0) { - widths.right = layoutMetrics.xMax || 0; - widths.paddingRight = layoutMetrics.paddingRight || 0; - } - widths.left = -layoutMetrics.xMin || 0; - widths.paddingLeft = layoutMetrics.paddingLeft || 0; - if (i === endModifiers.length - 1) { - widths.paddingLeft = 0; - } - } - else { - widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); - if (i !== 0) { - widths.right = modifier.getWidth(); - } - if (i === 0) { - widths.left = modifier.getWidth(); - } - } - x -= widths.paddingRight; - x -= widths.right; - modifier.setX(x); - x -= widths.left; - x -= widths.paddingLeft; - } - this.end_x = endModifiers.length === 1 ? this.x + this.width : x; - this.formatted = true; - } - /** - * All drawing functions below need the context to be set. - */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - this.applyStyle(); - ctx.openGroup('stave', this.getAttribute('id')); - if (!this.formatted) - this.format(); - const num_lines = this.options.num_lines; - const width = this.width; - const x = this.x; - let y; - // Render lines - for (let line = 0; line < num_lines; line++) { - y = this.getYForLine(line); - if (this.options.line_config[line].visible) { - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + width, y); - ctx.stroke(); - } - } - ctx.closeGroup(); - this.restoreStyle(); - // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.) - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - // Only draw modifier if it has a draw function - if (typeof modifier.draw === 'function') { - modifier.applyStyle(ctx); - modifier.draw(this, this.getModifierXShift(i)); - modifier.restoreStyle(ctx); - } - } - // Render measure numbers - if (this.measure > 0) { - ctx.save(); - ctx.setFont(this.textFont); - const textWidth = ctx.measureText('' + this.measure).width; - y = this.getYForTopText(0) + 3; - ctx.fillText('' + this.measure, this.x - textWidth / 2, y); - ctx.restore(); - } - return this; - } - getVerticalBarWidth() { - return this.options.vertical_bar_width; - } - /** - * Get the current configuration for the Stave. - * @return {Array} An array of configuration objects. - */ - getConfigForLines() { - return this.options.line_config; - } - /** - * Configure properties of the lines in the Stave - * @param line_number The index of the line to configure. - * @param line_config An configuration object for the specified line. - * @throws RuntimeError "StaveConfigError" When the specified line number is out of - * range of the number of lines specified in the constructor. - */ - setConfigForLine(line_number, line_config) { - if (line_number >= this.options.num_lines || line_number < 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); - } - if (line_config.visible === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); - } - if (typeof line_config.visible !== 'boolean') { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); - } - this.options.line_config[line_number] = line_config; - return this; - } - /** - * Set the staff line configuration array for all of the lines at once. - * @param lines_configuration An array of line configuration objects. These objects - * are of the same format as the single one passed in to setLineConfiguration(). - * The caller can set null for any line config entry if it is desired that the default be used - * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have - * exactly the same number of elements as the num_lines configuration object set in - * the constructor. - */ - setConfigForLines(lines_configuration) { - if (lines_configuration.length !== this.options.num_lines) { - throw new _util__WEBPACK_IMPORTED_MODULE_15__.RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); - } - // Make sure the defaults are present in case an incomplete set of - // configuration options were supplied. - // eslint-disable-next-line - for (const line_config in lines_configuration) { - // Allow '{}' to be used if the caller just wants the default for a particular node. - if (lines_configuration[line_config].visible == undefined) { - lines_configuration[line_config] = this.options.line_config[line_config]; - } - this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); - } - this.options.line_config = lines_configuration; - return this; - } - static formatBegModifiers(staves) { - const adjustCategoryStartX = (category) => { - let minStartX = 0; - // Calculate min start X for the category - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); - // Consider only the first instance - if (modifiers.length > 0 && modifiers[0].getX() > minStartX) - minStartX = modifiers[0].getX(); - }); - let adjustX = 0; - staves.forEach((stave) => { - adjustX = 0; - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, category); - // Calculate adjustement required for the stave - modifiers.forEach((modifier) => { - if (minStartX - modifier.getX() > adjustX) - adjustX = minStartX - modifier.getX(); - }); - const allModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN); - let bAdjust = false; - // Apply adjustment to all the modifiers in and beyond the category - allModifiers.forEach((modifier) => { - if (modifier.getCategory() === category) - bAdjust = true; - if (bAdjust && adjustX > 0) - modifier.setX(modifier.getX() + adjustX); - }); - // Apply adjustment also to note start. - stave.setNoteStartX(stave.getNoteStartX() + adjustX); - }); - }; - // Make sure that staves are formatted - staves.forEach((stave) => { - if (!stave.formatted) - stave.format(); - }); - // Align Clefs - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Clef); - // Align key signatures - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.KeySignature); - // Align time signatures - adjustCategoryStartX(_typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.TimeSignature); - let maxX = 0; - // align note start - staves.forEach((stave) => { - if (stave.getNoteStartX() > maxX) - maxX = stave.getNoteStartX(); - }); - staves.forEach((stave) => { - stave.setNoteStartX(maxX); - }); - maxX = 0; - // align REPEAT_BEGIN - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); - modifiers.forEach((modifier) => { - if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) - if (modifier.getX() > maxX) - maxX = modifier.getX(); - }); - }); - staves.forEach((stave) => { - const modifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_6__.StaveModifierPosition.BEGIN, _typeguard__WEBPACK_IMPORTED_MODULE_14__.Category.Barline); - modifiers.forEach((modifier) => { - if (modifier.getType() == _stavebarline__WEBPACK_IMPORTED_MODULE_5__.BarlineType.REPEAT_BEGIN) - modifier.setX(maxX); - }); - }); - } -} -Stave.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_3__.Font.SANS_SERIF, - size: 8, - weight: _font__WEBPACK_IMPORTED_MODULE_3__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_3__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavebarline.ts": -/*!*****************************!*\ - !*** ./src/stavebarline.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Barline": () => (/* binding */ Barline), -/* harmony export */ "BarlineType": () => (/* binding */ BarlineType) -/* harmony export */ }); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Author Larry Kuhns 2011 - - - -var BarlineType; -(function (BarlineType) { - BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; - BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; - BarlineType[BarlineType["END"] = 3] = "END"; - BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; - BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; - BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; - BarlineType[BarlineType["NONE"] = 7] = "NONE"; -})(BarlineType || (BarlineType = {})); -class Barline extends _stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Barline; - } - static get type() { - return BarlineType; - } - static get typeString() { - return { - single: BarlineType.SINGLE, - double: BarlineType.DOUBLE, - end: BarlineType.END, - repeatBegin: BarlineType.REPEAT_BEGIN, - repeatEnd: BarlineType.REPEAT_END, - repeatBoth: BarlineType.REPEAT_BOTH, - none: BarlineType.NONE, - }; - } - constructor(type) { - super(); - this.thickness = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STAVE_LINE_THICKNESS; - const TYPE = BarlineType; - this.widths = {}; - this.widths[TYPE.SINGLE] = 5; - this.widths[TYPE.DOUBLE] = 5; - this.widths[TYPE.END] = 5; - this.widths[TYPE.REPEAT_BEGIN] = 5; - this.widths[TYPE.REPEAT_END] = 5; - this.widths[TYPE.REPEAT_BOTH] = 5; - this.widths[TYPE.NONE] = 5; - this.paddings = {}; - this.paddings[TYPE.SINGLE] = 0; - this.paddings[TYPE.DOUBLE] = 0; - this.paddings[TYPE.END] = 0; - this.paddings[TYPE.REPEAT_BEGIN] = 15; - this.paddings[TYPE.REPEAT_END] = 15; - this.paddings[TYPE.REPEAT_BOTH] = 15; - this.paddings[TYPE.NONE] = 0; - this.layoutMetricsMap = {}; - this.layoutMetricsMap[TYPE.SINGLE] = { - xMin: 0, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.DOUBLE] = { - xMin: -3, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.END] = { - xMin: -5, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_END] = { - xMin: -10, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { - xMin: -2, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { - xMin: -10, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.NONE] = { - xMin: 0, - xMax: 0, - paddingLeft: 5, - paddingRight: 5, - }; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__.StaveModifierPosition.BEGIN); - this.setType(type); - } - getType() { - return this.type; - } - setType(type) { - this.type = typeof type === 'string' ? Barline.typeString[type] : type; - this.setWidth(this.widths[this.type]); - this.setPadding(this.paddings[this.type]); - this.setLayoutMetrics(this.layoutMetricsMap[this.type]); - return this; - } - // Draw barlines - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('stavebarline', this.getAttribute('id')); - switch (this.type) { - case BarlineType.SINGLE: - this.drawVerticalBar(stave, this.x, false); - break; - case BarlineType.DOUBLE: - this.drawVerticalBar(stave, this.x, true); - break; - case BarlineType.END: - this.drawVerticalEndBar(stave, this.x); - break; - case BarlineType.REPEAT_BEGIN: - // If the barline is shifted over (in front of clef/time/key) - // Draw vertical bar at the beginning. - this.drawRepeatBar(stave, this.x, true); - if (stave.getX() !== this.x) { - this.drawVerticalBar(stave, stave.getX()); - } - break; - case BarlineType.REPEAT_END: - this.drawRepeatBar(stave, this.x, false); - break; - case BarlineType.REPEAT_BOTH: - this.drawRepeatBar(stave, this.x, false); - this.drawRepeatBar(stave, this.x, true); - break; - default: - // Default is NONE, so nothing to draw - break; - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } - drawVerticalBar(stave, x, double_bar) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - if (double_bar) { - staveCtx.fillRect(x - 3, topY, 1, botY - topY); - } - staveCtx.fillRect(x, topY, 1, botY - topY); - } - drawVerticalEndBar(stave, x) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - staveCtx.fillRect(x - 5, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - } - drawRepeatBar(stave, x, begin) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - let x_shift = 3; - if (!begin) { - x_shift = -5; - } - staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - const dot_radius = 2; - // Shift dots left or right - if (begin) { - x_shift += 4; - } - else { - x_shift -= 4; - } - const dot_x = x + x_shift + dot_radius / 2; - // calculate the y offset based on number of stave lines - let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); - y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; - let dot_y = topY + y_offset + dot_radius / 2; - // draw the top repeat dot - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - // draw the bottom repeat dot - dot_y += stave.getSpacingBetweenLines(); - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - } -} - - -/***/ }), - -/***/ "./src/staveconnector.ts": -/*!*******************************!*\ - !*** ./src/staveconnector.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveConnector": () => (/* binding */ StaveConnector) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - -function drawBoldDoubleLine(ctx, type, topX, topY, botY) { - if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); - } - let x_shift = 3; - let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues - const thickLineOffset = 2; // For aesthetics - if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { - x_shift = -5; // Flips the side of the thin line - variableWidth = 3; - } - // Thin line - ctx.fillRect(topX + x_shift, topY, 1, botY - topY); - // Thick line - ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); -} -/** StaveConnector implements the connector lines between staves of a system. */ -class StaveConnector extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StaveConnector; - } - constructor(top_stave, bottom_stave) { - super(); - this.thickness = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.STAVE_LINE_THICKNESS; - this.width = 3; - this.top_stave = top_stave; - this.bottom_stave = bottom_stave; - this.type = StaveConnector.type.DOUBLE; - this.resetFont(); - // 1. Offset Bold Double Left to align with offset Repeat Begin bars - // 2. Offset BRACE type not to overlap with another StaveConnector - this.x_shift = 0; - this.texts = []; - } - /** - * Set type. - * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} - */ - setType(type) { - const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; - // Be certain that the type is a valid type: - if (Object.values(StaveConnector.type).includes(newType)) { - this.type = newType; - } - return this; - } - /** - * Get type. - * @returns number {@link StaveConnector.type} - */ - getType() { - return this.type; - } - /** Set optional associated Text. */ - setText(text, options = {}) { - this.texts.push({ - content: text, - options: Object.assign({ shift_x: 0, shift_y: 0 }, options), - }); - return this; - } - setXShift(x_shift) { - if (typeof x_shift !== 'number') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', 'x_shift must be a Number'); - } - this.x_shift = x_shift; - return this; - } - getXShift() { - return this.x_shift; - } - /** Render connector and associated text. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let topY = this.top_stave.getYForLine(0); - let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; - let width = this.width; - let topX = this.top_stave.getX(); - const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || - this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || - this.type === StaveConnector.type.THIN_DOUBLE; - if (isRightSidedConnector) { - topX = this.top_stave.getX() + this.top_stave.getWidth(); - } - let attachment_height = botY - topY; - switch (this.type) { - case StaveConnector.type.SINGLE: - width = 1; - break; - case StaveConnector.type.SINGLE_LEFT: - width = 1; - break; - case StaveConnector.type.SINGLE_RIGHT: - width = 1; - break; - case StaveConnector.type.DOUBLE: - topX -= this.width + 2; - topY -= this.thickness; - attachment_height += 0.5; - break; - case StaveConnector.type.BRACE: { - width = 12; - // May need additional code to draw brace - const x1 = this.top_stave.getX() - 2 + this.x_shift; - const y1 = topY; - const x3 = x1; - const y3 = botY; - const x2 = x1 - width; - const y2 = y1 + attachment_height / 2.0; - const cpx1 = x2 - 0.9 * width; - const cpy1 = y1 + 0.2 * attachment_height; - const cpx2 = x1 + 1.1 * width; - const cpy2 = y2 - 0.135 * attachment_height; - const cpx3 = cpx2; - const cpy3 = y2 + 0.135 * attachment_height; - const cpx4 = cpx1; - const cpy4 = y3 - 0.2 * attachment_height; - const cpx5 = x2 - width; - const cpy5 = cpy4; - const cpx6 = x1 + 0.4 * width; - const cpy6 = y2 + 0.135 * attachment_height; - const cpx7 = cpx6; - const cpy7 = y2 - 0.135 * attachment_height; - const cpx8 = cpx5; - const cpy8 = cpy1; - ctx.beginPath(); - ctx.moveTo(x1, y1); - ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); - ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); - ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); - ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); - ctx.fill(); - ctx.stroke(); - break; - } - case StaveConnector.type.BRACKET: - topY -= 6; - botY += 6; - attachment_height = botY - topY; - _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); - _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); - topX -= this.width + 2; - break; - case StaveConnector.type.BOLD_DOUBLE_LEFT: - drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); - break; - case StaveConnector.type.BOLD_DOUBLE_RIGHT: - drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); - break; - case StaveConnector.type.THIN_DOUBLE: - width = 1; - attachment_height -= this.thickness; - break; - case StaveConnector.type.NONE: - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); - } - if (this.type !== StaveConnector.type.BRACE && - this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && - this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && - this.type !== StaveConnector.type.NONE) { - ctx.fillRect(topX, topY, width, attachment_height); - } - // If the connector is a thin double barline, draw the paralell line - if (this.type === StaveConnector.type.THIN_DOUBLE) { - ctx.fillRect(topX - 3, topY, width, attachment_height); - } - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - // Add stave connector text - for (let i = 0; i < this.texts.length; i++) { - const text = this.texts[i]; - const text_width = ctx.measureText('' + text.content).width; - const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; - const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; - ctx.fillText('' + text.content, x, y + 4); - } - ctx.restore(); - } -} -StaveConnector.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 16, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.NORMAL, -}; -/** - * SINGLE_LEFT and SINGLE are the same value for compatibility - * with older versions of vexflow which didn't have right sided - * stave connectors. - */ -StaveConnector.type = { - SINGLE_RIGHT: 0, - SINGLE_LEFT: 1, - SINGLE: 1, - DOUBLE: 2, - BRACE: 3, - BRACKET: 4, - BOLD_DOUBLE_LEFT: 5, - BOLD_DOUBLE_RIGHT: 6, - THIN_DOUBLE: 7, - NONE: 8, -}; -/** - * Connector type: - * * "singleRight" - * * "singleLeft" - * * "single" - * * "double" - * * "brace" - * * "bracket" - * * "boldDoubleLeft" - * * "boldDoubleRight" - * * "thinDouble" - * * "none" - */ -StaveConnector.typeString = { - singleRight: StaveConnector.type.SINGLE_RIGHT, - singleLeft: StaveConnector.type.SINGLE_LEFT, - single: StaveConnector.type.SINGLE, - double: StaveConnector.type.DOUBLE, - brace: StaveConnector.type.BRACE, - bracket: StaveConnector.type.BRACKET, - boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, - boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, - thinDouble: StaveConnector.type.THIN_DOUBLE, - none: StaveConnector.type.NONE, -}; - - -/***/ }), - -/***/ "./src/stavehairpin.ts": -/*!*****************************!*\ - !*** ./src/stavehairpin.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveHairpin": () => (/* binding */ StaveHairpin) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/ -// -// This class implements hairpins between notes. -// Hairpins can be either crescendo or decrescendo. - - - - -class StaveHairpin extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.StaveHairpin; - } - /* Helper function to convert ticks into pixels. - * Requires a Formatter with voices joined and formatted (to - * get pixels per tick) - * - * options is struct that has: - * - * { - * height: px, - * y_shift: px, // vertical offset - * left_shift_ticks: 0, // left horizontal offset expressed in ticks - * right_shift_ticks: 0 // right horizontal offset expressed in ticks - * } - * - **/ - static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { - var _a, _b; - const ppt = formatter.pixelsPerTick; - if (ppt == null) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); - } - const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); - const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); - const hairpin_options = { - height: options.height, - y_shift: options.y_shift, - left_shift_px: l_shift_px, - right_shift_px: r_shift_px, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - new StaveHairpin({ - first_note: notes.first_note, - last_note: notes.last_note, - }, type) - .setContext(ctx) - .setRenderOptions(hairpin_options) - .setPosition(position) - .draw(); - } - /** - * Create a new hairpin from the specified notes. - * - * @param {!Object} notes The notes to tie up. - * Notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * } - * @param {!Object} type The type of hairpin - */ - constructor(notes, type) { - super(); - this.setNotes(notes); - this.hairpin = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW; - this.render_options = { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - } - setPosition(position) { - if (position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW) { - this.position = position; - } - return this; - } - setRenderOptions(options) { - if (options.height != null && - options.y_shift != null && - options.left_shift_px != null && - options.right_shift_px != null) { - this.render_options = options; - } - return this; - } - /** - * Set the notes to attach this hairpin to. - * - * @param {!Object} notes The start and end notes. - */ - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.last_note = notes.last_note; - return this; - } - renderHairpin(params) { - const ctx = this.checkContext(); - let dis = this.render_options.y_shift + 20; - let y_shift = params.first_y; - if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE) { - dis = -dis + 30; - y_shift = params.first_y - params.staff_height; - } - const l_shift = this.render_options.left_shift_px; - const r_shift = this.render_options.right_shift_px; - ctx.beginPath(); - switch (this.hairpin) { - case StaveHairpin.type.CRESC: - ctx.moveTo(params.last_x + r_shift, y_shift + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); - break; - case StaveHairpin.type.DECRESC: - ctx.moveTo(params.first_x + l_shift, y_shift + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); - break; - default: - // Default is NONE, so nothing to draw - break; - } - ctx.stroke(); - ctx.closePath(); - } - draw() { - this.checkContext(); - this.setRendered(); - const firstNote = this.first_note; - const lastNote = this.last_note; - if (!firstNote || !lastNote) - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NoNote', 'Notes required to draw'); - const start = firstNote.getModifierStartXY(this.position, 0); - const end = lastNote.getModifierStartXY(this.position, 0); - this.renderHairpin({ - first_x: start.x, - last_x: end.x, - first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), - last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), - staff_height: firstNote.checkStave().getHeight(), - }); - } -} -StaveHairpin.type = { - CRESC: 1, - DECRESC: 2, -}; - - -/***/ }), - -/***/ "./src/staveline.ts": -/*!**************************!*\ - !*** ./src/staveline.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveLine": () => (/* binding */ StaveLine) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// This file implements `StaveLine` which are simply lines that connect -// two notes. This object is highly configurable, see the `render_options`. -// A simple line is often used for notating glissando articulations, but you -// can format a `StaveLine` with arrows or colors for more pedagogical -// purposes, such as diagrams. - - - - - -// Attribution: Arrow rendering implementations based off of -// Patrick Horgan's article, "Drawing lines and arcs with -// arrow heads on HTML5 Canvas" -// -// Draw an arrow head that connects between 3 coordinates. -function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { - // all cases do this. - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.lineTo(x0, y0); - ctx.closePath(); - ctx.fill(); -} -class StaveLine extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveLine; - } - // Initialize the StaveLine with the given `notes`. - // - // `notes` is a struct that has: - // - // ``` - // { - // first_note: Note, - // last_note: Note, - // first_indices: [n1, n2, n3], - // last_indices: [n1, n2, n3] - // } - // ``` - constructor(notes) { - super(); - this.setNotes(notes); - this.text = ''; - this.resetFont(); - this.render_options = { - // Space to add to the left or the right - padding_left: 4, - padding_right: 3, - // The width of the line in pixels - line_width: 1, - // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?). - line_dash: undefined, - // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?). - rounded_end: true, - // The color of the line and arrowheads - color: undefined, - // Flags to draw arrows on each end of the line - draw_start_arrow: false, - draw_end_arrow: false, - // The length of the arrowhead sides - arrowhead_length: 10, - // The angle of the arrowhead - arrowhead_angle: Math.PI / 8, - // The position of the text - text_position_vertical: StaveLine.TextVerticalPosition.TOP, - text_justification: StaveLine.TextJustification.CENTER, - }; - } - // The the annotation for the `StaveLine` - setText(text) { - this.text = text; - return this; - } - // Set the notes for the `StaveLine` - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) - notes.first_indices = [0]; - if (!notes.last_indices) - notes.last_indices = [0]; - if (notes.first_indices.length !== notes.last_indices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.first_indices = notes.first_indices; - this.last_note = notes.last_note; - this.last_indices = notes.last_indices; - return this; - } - // Apply the style of the `StaveLine` to the context - applyLineStyle() { - const ctx = this.checkContext(); - const render_options = this.render_options; - if (render_options.line_dash) { - ctx.setLineDash(render_options.line_dash); - } - if (render_options.line_width) { - ctx.setLineWidth(render_options.line_width); - } - if (render_options.rounded_end) { - ctx.setLineCap('round'); - } - else { - ctx.setLineCap('square'); - } - } - // Apply the text styling to the context - applyFontStyle() { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - const render_options = this.render_options; - const color = render_options.color; - if (color) { - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - } - } - // Helper function to draw a line with arrow heads - drawArrowLine(ctx, pt1, pt2) { - const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; - const x1 = pt1.x; - const y1 = pt1.y; - const x2 = pt2.x; - const y2 = pt2.y; - // For ends with arrow we actually want to stop before we get to the arrow - // so that wide lines won't put a flat end on the arrow. - const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; - let end_x; - let end_y; - let start_x; - let start_y; - if (this.render_options.draw_end_arrow || both_arrows) { - end_x = Math.round(x1 + (x2 - x1) * ratio); - end_y = Math.round(y1 + (y2 - y1) * ratio); - } - else { - end_x = x2; - end_y = y2; - } - if (this.render_options.draw_start_arrow || both_arrows) { - start_x = x1 + (x2 - x1) * (1 - ratio); - start_y = y1 + (y2 - y1) * (1 - ratio); - } - else { - start_x = x1; - start_y = y1; - } - if (this.render_options.color) { - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - } - // Draw the shaft of the arrow - ctx.beginPath(); - ctx.moveTo(start_x, start_y); - ctx.lineTo(end_x, end_y); - ctx.stroke(); - ctx.closePath(); - // calculate the angle of the line - const line_angle = Math.atan2(y2 - y1, x2 - x1); - // h is the line length of a side of the arrow head - const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); - let angle1; - let angle2; - let top_x; - let top_y; - let bottom_x; - let bottom_y; - if (this.render_options.draw_end_arrow || both_arrows) { - angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; - top_x = x2 + Math.cos(angle1) * h; - top_y = y2 + Math.sin(angle1) * h; - angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; - bottom_x = x2 + Math.cos(angle2) * h; - bottom_y = y2 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); - } - if (this.render_options.draw_start_arrow || both_arrows) { - angle1 = line_angle + this.render_options.arrowhead_angle; - top_x = x1 + Math.cos(angle1) * h; - top_y = y1 + Math.sin(angle1) * h; - angle2 = line_angle - this.render_options.arrowhead_angle; - bottom_x = x1 + Math.cos(angle2) * h; - bottom_y = y1 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); - } - } - // Renders the `StaveLine` on the context - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const first_note = this.first_note; - const last_note = this.last_note; - const render_options = this.render_options; - ctx.save(); - this.applyLineStyle(); - // Cycle through each set of indices and draw lines - let start_position = { x: 0, y: 0 }; - let end_position = { x: 0, y: 0 }; - this.first_indices.forEach((first_index, i) => { - const last_index = this.last_indices[i]; - // Get initial coordinates for the start/end of the line - start_position = first_note.getModifierStartXY(2, first_index); - end_position = last_note.getModifierStartXY(1, last_index); - const upwards_slope = start_position.y > end_position.y; - // Adjust `x` coordinates for modifiers - start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; - end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; - // Adjust first `x` coordinates for displacements - const notehead_width = first_note.getGlyphProps().getWidth(); - const first_displaced = first_note.getKeyProps()[first_index].displaced; - if (first_displaced && first_note.getStemDirection() === 1) { - start_position.x += notehead_width + render_options.padding_left; - } - // Adjust last `x` coordinates for displacements - const last_displaced = last_note.getKeyProps()[last_index].displaced; - if (last_displaced && last_note.getStemDirection() === -1) { - end_position.x -= notehead_width + render_options.padding_right; - } - // Adjust y position better if it's not coming from the center of the note - start_position.y += upwards_slope ? -3 : 1; - end_position.y += upwards_slope ? 2 : 0; - this.drawArrowLine(ctx, start_position, end_position); - }); - ctx.restore(); - // Determine the x coordinate where to start the text - const text_width = ctx.measureText(this.text).width; - const justification = render_options.text_justification; - let x = 0; - if (justification === StaveLine.TextJustification.LEFT) { - x = start_position.x; - } - else if (justification === StaveLine.TextJustification.CENTER) { - const delta_x = end_position.x - start_position.x; - const center_x = delta_x / 2 + start_position.x; - x = center_x - text_width / 2; - } - else if (justification === StaveLine.TextJustification.RIGHT) { - x = end_position.x - text_width; - } - // Determine the y value to start the text - let y = 0; - const vertical_position = render_options.text_position_vertical; - if (vertical_position === StaveLine.TextVerticalPosition.TOP) { - y = first_note.checkStave().getYForTopText(); - } - else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { - y = first_note.checkStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_1__.Tables.TEXT_HEIGHT_OFFSET_HACK); - } - // Draw the text - ctx.save(); - this.applyFontStyle(); - ctx.fillText(this.text, x, y); - ctx.restore(); - return this; - } -} -/** Default text font. */ -StaveLine.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); -// Text Positioning -StaveLine.TextVerticalPosition = { - TOP: 1, - BOTTOM: 2, -}; -StaveLine.TextJustification = _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification; - - -/***/ }), - -/***/ "./src/stavemodifier.ts": -/*!******************************!*\ - !*** ./src/stavemodifier.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveModifier": () => (/* binding */ StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* binding */ StaveModifierPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// A base class for stave modifiers (e.g. clefs, key signatures) - - - -var StaveModifierPosition; -(function (StaveModifierPosition) { - StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; - StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; - StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; - StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; - StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; - StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; - StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; -})(StaveModifierPosition || (StaveModifierPosition = {})); -class StaveModifier extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveModifier; - } - static get Position() { - return StaveModifierPosition; - } - constructor() { - super(); - this.width = 0; - this.x = 0; - this.padding = 10; - this.position = StaveModifierPosition.ABOVE; - } - getPosition() { - return this.position; - } - setPosition(position) { - this.position = position; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_2__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - setStave(stave) { - this.stave = stave; - return this; - } - getWidth() { - return this.width; - } - setWidth(width) { - this.width = width; - return this; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - return this; - } - /** - * Runs setYShift() for the Glyph object so that it matches the position of line for - * the Stave provided. A `customShift` can also be given (measured in the same units - * as `setYShift` not in lines) and this will be added after all other positions are - * calculated from the Stave. - * - * Note that this routine only sets the yShift; it does not actually "place" (meaning - * draw) the Glyph on the Stave. Call .draw() afterwards to do that. - */ - placeGlyphOnLine(glyph, stave, line, customShift = 0) { - glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); - } - getPadding(index) { - return index !== undefined && index < 2 ? 0 : this.padding; - } - setPadding(padding) { - this.padding = padding; - return this; - } - setLayoutMetrics(layoutMetrics) { - this.layoutMetrics = layoutMetrics; - return this; - } - getLayoutMetrics() { - return this.layoutMetrics; - } - // eslint-disable-next-line - draw(...args) { - // DO NOTHING. - } -} - - -/***/ }), - -/***/ "./src/stavenote.ts": -/*!**************************!*\ - !*** ./src/stavenote.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveNote": () => (/* binding */ StaveNote) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./notehead */ "./src/notehead.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This file implements notes for standard notation. This consists of one or -// more `NoteHeads`, an optional stem, and an optional flag. -// -// Throughout these comments, a "note" refers to the entire `StaveNote`, -// and a "key" refers to a specific pitch/notehead within a note. -// -// See `tests/stavenote_tests.ts` for usage examples. - - - - - - - - -function showDeprecationWarningForNoteHeads() { - // eslint-disable-next-line - console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); -} -// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (StaveNote.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_7__.log)('Vex.Flow.StaveNote', args); -} -const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? note.keyProps.length - 1 : 0); -// Helper methods for rest positioning in ModifierContext. -function shiftRestVertical(rest, note, dir) { - const delta = dir; - rest.line += delta; - rest.maxLine += delta; - rest.minLine += delta; - rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); -} -// Called from formatNotes :: center a rest between two notes -function centerRest(rest, noteU, noteL) { - const delta = rest.line - (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(noteU.minLine, noteL.maxLine); - rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); - rest.line -= delta; - rest.maxLine -= delta; - rest.minLine -= delta; -} -class StaveNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.StaveNote; - } - /** - * @deprecated Use Stem.UP. - */ - static get STEM_UP() { - return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - } - /** - * @deprecated Use Stem.DOWN. - */ - static get STEM_DOWN() { - return _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; - } - static get LEDGER_LINE_OFFSET() { - return 3; - } - static get minNoteheadPadding() { - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - /** Format notes inside a ModifierContext. */ - static format(notes, state) { - if (!notes || notes.length < 2) - return false; - const notesList = []; - for (let i = 0; i < notes.length; i++) { - // Formatting uses sortedKeyProps to calculate line and minL. - const props = notes[i].sortedKeyProps; - const line = props[0].keyProps.line; - let minL = props[props.length - 1].keyProps.line; - const stemDirection = notes[i].getStemDirection(); - const stemMax = notes[i].getStemLength() / 10; - const stemMin = notes[i].getStemMinimumLength() / 10; - let maxL; - if (notes[i].isRest()) { - maxL = line + notes[i].glyphProps.line_above; - minL = line - notes[i].glyphProps.line_below; - } - else { - maxL = - stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; - minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; - } - notesList.push({ - line: props[0].keyProps.line, - maxLine: maxL, - minLine: minL, - isrest: notes[i].isRest(), - stemDirection: stemDirection, - stemMax, - stemMin, - voice_shift: notes[i].getVoiceShiftWidth(), - is_displaced: notes[i].isDisplaced(), - note: notes[i], - }); - } - let voices = 0; - let noteU = undefined; - let noteM = undefined; - let noteL = undefined; - const draw = [false, false, false]; - for (let i = 0; i < notesList.length; i++) { - draw[i] = notesList[i].note.render_options.draw == false ? false : true; - } - if (draw[0] && draw[1] && draw[2]) { - // Three visible notes - voices = 3; - noteU = notesList[0]; - noteM = notesList[1]; - noteL = notesList[2]; - } - else if (draw[0] && draw[1]) { - // Two visible notes, 0 & 1 - voices = 2; - noteU = notesList[0]; - noteL = notesList[1]; - } - else if (draw[0] && draw[2]) { - // Two visible notes, 0 & 2 - voices = 2; - noteU = notesList[0]; - noteL = notesList[2]; - } - else if (draw[1] && draw[2]) { - // Two visible notes, 1 & 2 - voices = 2; - noteU = notesList[1]; - noteL = notesList[2]; - } - else { - // No shift required for less than 2 visible notes - return true; - } - // for two voice backward compatibility, ensure upper voice is stems up - // for three voices, the voices must be in order (upper, middle, lower) - if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { - noteU = notesList[1]; - noteL = notesList[0]; - } - const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); - let xShift = 0; - // Test for two voice note intersection - if (voices === 2) { - const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; - if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { - noteL.note.render_options.draw = false; - } - else if (noteU.minLine <= noteL.maxLine + lineSpacing) { - if (noteU.isrest) { - // shift rest up - shiftRestVertical(noteU, noteL, 1); - } - else if (noteL.isrest) { - // shift rest down - shiftRestVertical(noteL, noteU, -1); - } - else { - //Instead of shifting notes, remove the appropriate flag - //If we are sharing a line, switch one notes stem direction. - //If we are sharing a line and in the same voice, only then offset one note - const lineDiff = Math.abs(noteU.line - noteL.line); - if (noteU.note.hasStem() && noteL.note.hasStem()) { - //If we have different dot values, must offset - //Or If we have a white mixed with a black notehead, must offset - let whiteNoteHeadCount = 0; - let blackNoteHeadCount = 0; - if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteU.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteU.note.duration) > 2) { - blackNoteHeadCount++; - } - if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteL.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (_tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToNumber(noteL.note.duration) > 2) { - blackNoteHeadCount++; - } - if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) || - noteU.note.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot).length !== noteL.note.getModifiersByType(_typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.Dot).length) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (lineDiff < 1 && lineDiff > 0) { - //if the notes are quite close but not on the same line, shift - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.voice !== noteL.note.voice) { - //If we are not in the same voice - if (noteU.stemDirection === noteL.stemDirection) { - if (noteU.line != noteL.line) { - xShift = voiceXShift + 2; - noteU.note.setXShift(xShift); - } - else { - //same line, swap stem direction for one note - if (noteL.stemDirection === 1) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - } - } - } //Very close whole notes - } - else if (lineDiff < 1) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - // upper voice is middle voice, so shift it right - noteU.note.setXShift(xShift); - } - else { - // shift lower voice right - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.hasStem()) { - noteU.stemDirection = -noteU.note.getStemDirection(); - noteU.note.setStemDirection(noteU.stemDirection); - } - else if (noteL.note.hasStem()) { - noteL.stemDirection = -noteL.note.getStemDirection(); - noteL.note.setStemDirection(noteL.stemDirection); - } - } - } - // format complete - state.right_shift += xShift; - return true; - } - if (!noteM) - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('InvalidState', 'noteM not defined.'); - // For three voices, test if rests can be repositioned - // - // Special case 1 :: middle voice rest between two notes - // - if (noteM.isrest && !noteU.isrest && !noteL.isrest) { - if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { - const restHeight = noteM.maxLine - noteM.minLine; - const space = noteU.minLine - noteL.maxLine; - if (restHeight < space) { - // center middle voice rest between the upper and lower voices - centerRest(noteM, noteU, noteL); - } - else { - xShift = voiceXShift + 2; // shift middle rest right - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - // format complete - state.right_shift += xShift; - return true; - } - } - // Special case 2 :: all voices are rests - if (noteU.isrest && noteM.isrest && noteL.isrest) { - // Hide upper voice rest - noteU.note.render_options.draw = false; - // Hide lower voice rest - noteL.note.render_options.draw = false; - // format complete - state.right_shift += xShift; - return true; - } - // Test if any other rests can be repositioned - if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { - // Hide middle voice rest - noteM.note.render_options.draw = false; - } - if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { - // Hide middle voice rest - noteM.note.render_options.draw = false; - } - if (noteU.isrest && noteU.minLine <= noteM.maxLine) { - // shift upper voice rest up; - shiftRestVertical(noteU, noteM, 1); - } - if (noteL.isrest && noteM.minLine <= noteL.maxLine) { - // shift lower voice rest down - shiftRestVertical(noteL, noteM, -1); - } - // If middle voice intersects upper or lower voice - if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { - // shift middle note right - xShift = voiceXShift + 2; - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - state.right_shift += xShift; - return true; - } - static postFormat(notes) { - if (!notes) - return false; - notes.forEach((note) => note.postFormat()); - return true; - } - constructor(noteStruct) { - var _a, _b, _c; - super(noteStruct); - ////////////////////////////////////////////////////////////////////////////////////////////////// - // INSTANCE MEMBERS - this.minLine = 0; - this.maxLine = 0; - // Sorted variant of keyProps used internally - this.sortedKeyProps = []; - this.ledgerLineStyle = {}; - this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; - this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; - // Pull note rendering properties. - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - // if true, displace note to right - this.displaced = false; - this.dot_shiftY = 0; - // for displaced ledger lines - this.use_default_head_x = false; - // Drawing - this._noteHeads = []; - this.modifiers = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads and rests - glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.NOTATION_FONT_SCALE, - // number of stroke px to the left and right of head - stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); - this.calculateKeyProps(); - this.buildStem(); - // Set the stem direction - if (noteStruct.auto_stem) { - this.autoStem(); - } - else { - this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); - } - this.reset(); - this.buildFlag(); - } - reset() { - super.reset(); - // Save prior noteHead styles & reapply them after making new noteheads. - const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); - this.buildNoteHeads(); - this._noteHeads.forEach((noteHead, index) => { - const noteHeadStyle = noteHeadStyles[index]; - if (noteHeadStyle) - noteHead.setStyle(noteHeadStyle); - }); - const stave = this.stave; - if (stave) { - this._noteHeads.forEach((head) => head.setStave(stave)); - } - this.calcNoteDisplacements(); - return this; - } - setBeam(beam) { - this.beam = beam; - this.calcNoteDisplacements(); - // Update stem extension if a beam is assigned. - if (this.stem) { - this.stem.setExtension(this.getStemExtension()); - } - return this; - } - // Builds a `Stem` for the note - buildStem() { - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem({ hide: !!this.isRest() })); - return this; - } - // Builds a `NoteHead` for each key in the note - buildNoteHeads() { - this._noteHeads = []; - const stemDirection = this.getStemDirection(); - const keys = this.getKeys(); - let lastLine = undefined; - let lineDiff = undefined; - let displaced = false; - // Draw notes from bottom to top. - // For down-stem notes, we draw from top to bottom. - let start; - let end; - let step; - if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - start = 0; - end = keys.length; - step = 1; - } - else { - start = keys.length - 1; - end = -1; - step = -1; - } - for (let i = start; i !== end; i += step) { - // Building noteheads rely on sortedKeNotes in order to calculate the displacements - const noteProps = this.sortedKeyProps[i].keyProps; - const line = noteProps.line; - // Keep track of last line with a note head, so that consecutive heads - // are correctly displaced. - if (lastLine === undefined) { - lastLine = line; - } - else { - lineDiff = Math.abs(lastLine - line); - if (lineDiff === 0 || lineDiff === 0.5) { - displaced = !displaced; - } - else { - displaced = false; - this.use_default_head_x = true; - } - } - lastLine = line; - const notehead = new _notehead__WEBPACK_IMPORTED_MODULE_2__.NoteHead({ - duration: this.duration, - note_type: this.noteType, - displaced, - stem_direction: stemDirection, - custom_glyph_code: noteProps.code, - glyph_font_scale: this.render_options.glyph_font_scale, - x_shift: noteProps.shift_right, - stem_up_x_offset: noteProps.stem_up_x_offset, - stem_down_x_offset: noteProps.stem_down_x_offset, - line: noteProps.line, - }); - this.addChildElement(notehead); - this._noteHeads[this.sortedKeyProps[i].index] = notehead; - } - } - // Automatically sets the stem direction based on the keys in the note - autoStem() { - this.setStemDirection(this.calculateOptimalStemDirection()); - } - calculateOptimalStemDirection() { - // Figure out optimal stem direction based on given notes - // minLine & maxLine rely on sortedKeyProps - this.minLine = this.sortedKeyProps[0].keyProps.line; - this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; - const MIDDLE_LINE = 3; - const decider = (this.minLine + this.maxLine) / 2; - const stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN; - return stemDirection; - } - // Calculates and stores the properties for each key in the note - calculateKeyProps() { - let lastLine; - for (let i = 0; i < this.keys.length; ++i) { - const key = this.keys[i]; - // All rests use the same position on the line. - // if (this.glyph.rest) key = this.glyph.position; - if (this.glyphProps.rest) - this.glyphProps.position = key; - const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; - const props = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.keyProperties(key, this.clef, options); - if (!props) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); - } - // Override line placement for default rests - if (props.key === 'R') { - if (this.duration === '1' || this.duration === 'w') { - props.line = 4; - } - else { - props.line = 3; - } - } - // Calculate displacement of this note - const line = props.line; - if (lastLine == undefined) { - lastLine = line; - } - else { - if (Math.abs(lastLine - line) === 0.5) { - this.displaced = true; - props.displaced = true; - // Have to mark the previous note as - // displaced as well, for modifier placement - if (this.keyProps.length > 0) { - this.keyProps[i - 1].displaced = true; - } - } - } - lastLine = line; - this.keyProps.push(props); - } - // Sort the notes from lowest line to highest line in sortedKeyProps - // Warn no longer required as keyProps remains unsorted - this.keyProps.forEach((keyProps, index) => { - this.sortedKeyProps.push({ keyProps, index }); - }); - this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); - } - // Get the `BoundingBox` for the entire note - getBoundingBox() { - var _a, _b; - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); - const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; - let minY = 0; - let maxY = 0; - const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; - const lineSpacing = halfLineSpacing * 2; - if (this.isRest()) { - const y = this.ys[0]; - const frac = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.durationToFraction(this.duration); - if (frac.equals(1) || frac.equals(2)) { - minY = y - halfLineSpacing; - maxY = y + halfLineSpacing; - } - else { - minY = y - this.glyphProps.line_above * lineSpacing; - maxY = y + this.glyphProps.line_below * lineSpacing; - } - } - else if (this.glyphProps.stem) { - const ys = this.getStemExtents(); - ys.baseY += halfLineSpacing * this.getStemDirection(); - minY = Math.min(ys.topY, ys.baseY); - maxY = Math.max(ys.topY, ys.baseY); - } - else { - minY = 0; - maxY = 0; - for (let i = 0; i < this.ys.length; ++i) { - const yy = this.ys[i]; - if (i === 0) { - minY = yy; - maxY = yy; - } - else { - minY = Math.min(yy, minY); - maxY = Math.max(yy, maxY); - } - } - minY -= halfLineSpacing; - maxY += halfLineSpacing; - } - return new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(x, minY, w, maxY - minY); - } - // Gets the line number of the bottom note in the chord. - // If `isTopNote` is `true` then get the top note's line number instead - getLineNumber(isTopNote) { - if (!this.keyProps.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); - } - let resultLine = this.keyProps[0].line; - // No precondition assumed for sortedness of keyProps array - for (let i = 0; i < this.keyProps.length; i++) { - const thisLine = this.keyProps[i].line; - if (isTopNote) { - if (thisLine > resultLine) - resultLine = thisLine; - } - else { - if (thisLine < resultLine) - resultLine = thisLine; - } - } - return resultLine; - } - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest() { - return this.glyphProps.rest; - } - // Determine if the current note is a chord - isChord() { - return !this.isRest() && this.keys.length > 1; - } - // Determine if the `StaveNote` has a stem - hasStem() { - return this.glyphProps.stem; - } - hasFlag() { - return super.hasFlag() && !this.isRest(); - } - getStemX() { - if (this.noteType === 'r') { - return this.getCenterGlyphX(); - } - else { - // We adjust the origin of the stem because we want the stem left-aligned - // with the notehead if stemmed-down, and right-aligned if stemmed-up - return super.getStemX() + (this.stem_direction ? _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / (2 * -this.stem_direction) : 0); - } - } - // Get the `y` coordinate for text placed on the top/bottom of a - // note at a desired `text_line` - getYForTopText(textLine) { - const extents = this.getStemExtents(); - return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - getYForBottomText(textLine) { - const extents = this.getStemExtents(); - return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - // Sets the current note to the provided `stave`. This applies - // `y` values to the `NoteHeads`. - setStave(stave) { - super.setStave(stave); - const ys = this._noteHeads.map((notehead) => { - notehead.setStave(stave); - return notehead.getY(); - }); - this.setYs(ys); - if (this.stem) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - this.stem.setYBounds(y_top, y_bottom); - } - return this; - } - // Check if note is shifted to the right - isDisplaced() { - return this.displaced; - } - // Sets whether shift note to the right. `displaced` is a `boolean` - setNoteDisplaced(displaced) { - this.displaced = displaced; - return this; - } - // Get the starting `x` coordinate for a `StaveTie` - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; - if (this.modifierContext) - tieStartX += this.modifierContext.getRightShift(); - return tieStartX; - } - // Get the ending `x` coordinate for a `StaveTie` - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - tieEndX += this.x_shift - this.leftDisplacedHeadPx; - return tieEndX; - } - // Get the stave line on which to place a rest - getLineForRest() { - let restLine = this.keyProps[0].line; - if (this.keyProps.length > 1) { - const lastLine = this.keyProps[this.keyProps.length - 1].line; - const top = Math.max(restLine, lastLine); - const bot = Math.min(restLine, lastLine); - restLine = (0,_util__WEBPACK_IMPORTED_MODULE_7__.midLine)(top, bot); - } - return restLine; - } - // Get the default `x` and `y` coordinates for the provided `position` - // and key `index` - getModifierStartXY(position, index, options = {}) { - var _a, _b; - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - const { ABOVE, BELOW, LEFT, RIGHT } = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position; - let x = 0; - if (position === LEFT) { - // FIXME: Left modifier padding, move to font file - x = -1 * 2; - } - else if (position === RIGHT) { - // FIXME: Right modifier padding, move to font file - x = this.getGlyphWidth() + this.x_shift + 2; - if (this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP && - this.hasFlag() && - (options.forceFlagRight || isInnerNoteIndex(this, index))) { - x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; - } - } - else if (position === BELOW || position === ABOVE) { - x = this.getGlyphWidth() / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - // Sets the style of the complete StaveNote, including all keys - // and the stem. - setStyle(style) { - return super.setGroupStyle(style); - } - setStemStyle(style) { - const stem = this.getStem(); - if (stem) - stem.setStyle(style); - return this; - } - getStemStyle() { - var _a; - return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - setLedgerLineStyle(style) { - this.ledgerLineStyle = style; - } - getLedgerLineStyle() { - return this.ledgerLineStyle; - } - setFlagStyle(style) { - var _a; - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); - } - getFlagStyle() { - var _a; - return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - // Sets the notehead at `index` to the provided coloring `style`. - // - // `style` is an `object` with the following properties: `shadowColor`, - // `shadowBlur`, `fillStyle`, `strokeStyle` - setKeyStyle(index, style) { - this._noteHeads[index].setStyle(style); - return this; - } - setKeyLine(index, line) { - this.keyProps[index].line = line; - this.reset(); - return this; - } - getKeyLine(index) { - return this.keyProps[index].line; - } - // Get the width of the note if it is displaced. Used for `Voice` - // formatting - getVoiceShiftWidth() { - // TODO: may need to accommodate for dot here. - return this.getGlyphWidth() * (this.displaced ? 2 : 1); - } - // Calculates and sets the extra pixels to the left or right - // if the note is displaced. - calcNoteDisplacements() { - this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN ? this.getGlyphWidth() : 0); - // For upstems with flags, the extra space is unnecessary, since it's taken - // up by the flag. - this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? this.getGlyphWidth() : 0); - } - // Pre-render formatting - preFormat() { - if (this.preFormatted) - return; - let noteHeadPadding = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - // If there are no modifiers on this note, make sure there is adequate padding - // between the notes. - if (this.modifierContext.getWidth() === 0) { - noteHeadPadding = StaveNote.minNoteheadPadding; - } - } - let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; - // For upward flagged notes, the width of the flag needs to be added - if (this.shouldDrawFlag() && this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - width += this.getGlyphWidth(); - // TODO: Add flag width as a separate metric - } - this.setWidth(width); - this.preFormatted = true; - } - /** - * @typedef {Object} noteHeadBounds - * @property {number} y_top the highest notehead bound - * @property {number} y_bottom the lowest notehead bound - * @property {number|Null} displaced_x the starting x for displaced noteheads - * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads - * @property {number} highest_line the highest notehead line in traditional music line - * numbering (bottom line = 1, top line = 5) - * @property {number} lowest_line the lowest notehead line - * @property {number|false} highest_displaced_line the highest staff line number - * for a displaced notehead - * @property {number|false} lowest_displaced_line - * @property {number} highest_non_displaced_line - * @property {number} lowest_non_displaced_line - */ - /** - * Get the staff line and y value for the highest & lowest noteheads - * @returns {noteHeadBounds} - */ - getNoteHeadBounds() { - // Top and bottom Y values for stem. - let yTop = +Infinity; - let yBottom = -Infinity; - let nonDisplacedX; - let displacedX; - let highestLine = this.checkStave().getNumLines(); - let lowestLine = 1; - let highestDisplacedLine; - let lowestDisplacedLine; - let highestNonDisplacedLine = highestLine; - let lowestNonDisplacedLine = lowestLine; - this._noteHeads.forEach((notehead) => { - const line = notehead.getLine(); - const y = notehead.getY(); - yTop = Math.min(y, yTop); - yBottom = Math.max(y, yBottom); - if (displacedX === undefined && notehead.isDisplaced()) { - displacedX = notehead.getAbsoluteX(); - } - if (nonDisplacedX === undefined && !notehead.isDisplaced()) { - nonDisplacedX = notehead.getAbsoluteX(); - } - highestLine = Math.max(line, highestLine); - lowestLine = Math.min(line, lowestLine); - if (notehead.isDisplaced()) { - highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); - lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); - } - else { - highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); - lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); - } - }, this); - return { - y_top: yTop, - y_bottom: yBottom, - displaced_x: displacedX, - non_displaced_x: nonDisplacedX, - highest_line: highestLine, - lowest_line: lowestLine, - highest_displaced_line: highestDisplacedLine, - lowest_displaced_line: lowestDisplacedLine, - highest_non_displaced_line: highestNonDisplacedLine, - lowest_non_displaced_line: lowestNonDisplacedLine, - }; - } - // Get the starting `x` coordinate for the noteheads - getNoteHeadBeginX() { - return this.getAbsoluteX() + this.x_shift; - } - // Get the ending `x` coordinate for the noteheads - getNoteHeadEndX() { - const xBegin = this.getNoteHeadBeginX(); - return xBegin + this.getGlyphWidth(); - } - get noteHeads() { - return this._noteHeads.slice(); - } - /** @deprecated use StaveNote.noteHeads instead. */ - get note_heads() { - showDeprecationWarningForNoteHeads(); - return this.noteHeads; - } - // Draw the ledger lines between the stave and the highest/lowest keys - drawLedgerLines() { - const stave = this.checkStave(); - const { glyphProps, render_options: { stroke_px }, } = this; - const ctx = this.checkContext(); - const width = glyphProps.getWidth() + stroke_px * 2; - const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH / 2; - if (this.isRest()) - return; - if (!ctx) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); - // Early out if there are no ledger lines to draw. - if (highest_line < 6 && lowest_line > 0) - return; - const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); - const drawLedgerLine = (y, normal, displaced) => { - let x; - if (displaced && normal) - x = min_x - stroke_px; - else if (normal) - x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; - else - x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; - const ledgerWidth = normal && displaced ? doubleWidth : width; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + ledgerWidth, y); - ctx.stroke(); - }; - const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); - this.applyStyle(ctx, style); - // Draw ledger lines below the staff: - for (let line = 6; line <= highest_line; ++line) { - const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; - const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - // Draw ledger lines above the staff: - for (let line = 0; line >= lowest_line; --line) { - const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; - const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - this.restoreStyle(ctx, style); - } - // Draw all key modifiers - drawModifiers(noteheadParam) { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - const index = modifier.checkIndex(); - const notehead = this._noteHeads[index]; - if (notehead == noteheadParam) { - const noteheadStyle = notehead.getStyle(); - notehead.applyStyle(ctx, noteheadStyle); - modifier.setContext(ctx); - modifier.drawWithStyle(); - notehead.restoreStyle(ctx, noteheadStyle); - } - } - } - shouldDrawFlag() { - const hasStem = this.stem !== undefined; - const hasFlag = this.glyphProps.flag == true; - const hasNoBeam = this.beam === undefined; - return hasStem && hasFlag && hasNoBeam; - } - // Draw the flag for the note - drawFlag() { - var _a, _b, _c, _d, _e; - const ctx = this.checkContext(); - if (!ctx) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - if (this.shouldDrawFlag()) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - // eslint-disable-next-line - const noteStemHeight = this.stem.getHeight(); - const flagX = this.getStemX(); - // What's with the magic +/- 2 - // ANSWER: a corner of the note stem pokes out beyond the tip of the flag. - // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely. - // Alternatively, we could shorten the stem. - const flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN - ? // Down stems are below the note head and have flags on the right. - y_top - - noteStemHeight + - 2 - - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - - ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) - : // Up stems are above the note head and have flags on the right. - y_bottom - - noteStemHeight - - 2 + - (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - - ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); - // Draw the Flag - (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); - } - } - // Draw the NoteHeads - drawNoteHeads() { - const ctx = this.checkContext(); - this._noteHeads.forEach((notehead) => { - notehead.applyStyle(ctx); - ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); - notehead.setContext(ctx).draw(); - this.drawModifiers(notehead); - ctx.closeGroup(); - notehead.restoreStyle(ctx); - }); - } - drawStem(stemOptions) { - // GCR TODO: I can't find any context in which this is called with the stemStruct - // argument in the codebase or tests. Nor can I find a case where super.drawStem - // is called at all. Perhaps these should be removed? - const ctx = this.checkContext(); - if (stemOptions) { - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__.Stem(stemOptions)); - } - // If we will render a flag, we shorten the stem so that the tip - // does not poke through the flag. - if (this.shouldDrawFlag() && this.stem) { - this.stem.adjustHeightForFlag(); - } - if (this.stem) { - this.stem.setContext(ctx).draw(); - } - } - /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ - getStaveNoteScale() { - return 1.0; - } - /** - * Override stemmablenote stem extension to adjust for distance from middle line. - */ - getStemExtension() { - const super_stem_extension = super.getStemExtension(); - if (!this.glyphProps.stem) { - return super_stem_extension; - } - const stem_direction = this.getStemDirection(); - if (stem_direction !== this.calculateOptimalStemDirection()) { - return super_stem_extension; // no adjustment for manually set stem direction. - } - let mid_line_distance; - const MIDDLE_LINE = 3; - if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - // Note that the use of maxLine here instead of minLine might - // seem counterintuitive, but in the case of (say) treble clef - // chord(F2, E4) stem up, we do not want to extend the stem because - // of F2, when a normal octave-length stem above E4 is fine. - // - // maxLine and minLine are set in calculateOptimalStemDirection() so - // will be known. - mid_line_distance = MIDDLE_LINE - this.maxLine; - } - else { - mid_line_distance = this.minLine - MIDDLE_LINE; - } - // how many lines more than an octave is the relevant notehead? - const lines_over_octave_from_mid_line = mid_line_distance - 3.5; - if (lines_over_octave_from_mid_line <= 0) { - return super_stem_extension; - } - const stave = this.getStave(); - let spacing_between_lines = 10; - if (stave != undefined) { - spacing_between_lines = stave.getSpacingBetweenLines(); - } - return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; - } - // Draws all the `StaveNote` parts. This is the main drawing method. - draw() { - if (this.render_options.draw === false) - return; - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); - } - const ctx = this.checkContext(); - const xBegin = this.getNoteHeadBeginX(); - const shouldRenderStem = this.hasStem() && !this.beam; - // Format note head x positions - this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); - if (this.stem) { - // Format stem x positions - const stemX = this.getStemX(); - this.stem.setNoteHeadXBounds(stemX, stemX); - } - L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); - // Apply the overall style -- may be contradicted by local settings: - this.applyStyle(); - ctx.openGroup('stavenote', this.getAttribute('id')); - this.drawLedgerLines(); - if (shouldRenderStem) - this.drawStem(); - this.drawNoteHeads(); - this.drawFlag(); - ctx.closeGroup(); - this.restoreStyle(); - this.setRendered(); - } -} -StaveNote.DEBUG = false; - - -/***/ }), - -/***/ "./src/staverepetition.ts": -/*!********************************!*\ - !*** ./src/staverepetition.ts ***! - \********************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Repetition": () => (/* binding */ Repetition) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - - - -class Repetition extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.Repetition; - } - constructor(type, x, y_shift) { - super(); - this.symbol_type = type; - this.x = x; - this.x_shift = 0; - this.y_shift = y_shift; - this.resetFont(); - } - setShiftX(x) { - this.x_shift = x; - return this; - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - this.setRendered(); - switch (this.symbol_type) { - case Repetition.type.CODA_RIGHT: - this.drawCodaFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.CODA_LEFT: - this.drawSymbolText(stave, x, 'Coda', true); - break; - case Repetition.type.SEGNO_LEFT: - this.drawSignoFixed(stave, x); - break; - case Repetition.type.SEGNO_RIGHT: - this.drawSignoFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.DC: - this.drawSymbolText(stave, x, 'D.C.', false); - break; - case Repetition.type.DC_AL_CODA: - this.drawSymbolText(stave, x, 'D.C. al', true); - break; - case Repetition.type.DC_AL_FINE: - this.drawSymbolText(stave, x, 'D.C. al Fine', false); - break; - case Repetition.type.DS: - this.drawSymbolText(stave, x, 'D.S.', false); - break; - case Repetition.type.DS_AL_CODA: - this.drawSymbolText(stave, x, 'D.S. al', true); - break; - case Repetition.type.DS_AL_FINE: - this.drawSymbolText(stave, x, 'D.S. al Fine', false); - break; - case Repetition.type.FINE: - this.drawSymbolText(stave, x, 'Fine', false); - break; - case Repetition.type.TO_CODA: - this.drawSymbolText(stave, x, 'To', true); - break; - default: - break; - } - return this; - } - drawCodaFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); - return this; - } - drawSignoFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); - return this; - } - drawSymbolText(stave, x, text, draw_coda) { - const ctx = stave.checkContext(); - ctx.save(); - ctx.setFont(this.textFont); - let text_x = 0; - let symbol_x = 0; - const modifierWidth = stave.getNoteStartX() - this.x; - switch (this.symbol_type) { - // To the left with symbol - case Repetition.type.CODA_LEFT: - // Offset Coda text to right of stave beginning - text_x = this.x + stave.getVerticalBarWidth(); - symbol_x = - text_x + - ctx.measureText(text).width + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - // To the right without symbol - case Repetition.type.DC: - case Repetition.type.DC_AL_FINE: - case Repetition.type.DS: - case Repetition.type.DS_AL_FINE: - case Repetition.type.FINE: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width; - break; - // To the right with symbol - default: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width - - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - symbol_x = - text_x + - ctx.measureText(text).width + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - } - const y = stave.getYForTopText(stave.getNumLines()) + - this.y_shift + - _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); - if (draw_coda) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' }); - } - ctx.fillText(text, text_x, y + 5); - ctx.restore(); - return this; - } -} -Repetition.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; -Repetition.type = { - NONE: 1, - CODA_LEFT: 2, - CODA_RIGHT: 3, - SEGNO_LEFT: 4, - SEGNO_RIGHT: 5, - DC: 6, - DC_AL_CODA: 7, - DC_AL_FINE: 8, - DS: 9, - DS_AL_CODA: 10, - DS_AL_FINE: 11, - FINE: 12, - TO_CODA: 13, // To Coda at end of stave -}; - - -/***/ }), - -/***/ "./src/stavesection.ts": -/*!*****************************!*\ - !*** ./src/stavesection.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveSection": () => (/* binding */ StaveSection) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - - -class StaveSection extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveSection; - } - constructor(section, x, shift_y, drawRect = true) { - super(); - this.setWidth(16); - this.section = section; - this.x = x; - this.shift_x = 0; - this.shift_y = shift_y; - this.drawRect = drawRect; - this.resetFont(); - } - setStaveSection(section) { - this.section = section; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const borderWidth = 2; - const padding = 2; - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(borderWidth); - ctx.setFont(this.textFont); - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_2__.TextFormatter.create(this.textFont); - const textWidth = textFormatter.getWidthForTextInPx(this.section); - const textY = textFormatter.getYForStringInPx(this.section); - const textHeight = textY.height; - const headroom = -1 * textY.yMin; - const width = textWidth + 2 * padding; // add left & right padding - const height = textHeight + 2 * padding; // add top & bottom padding - // Seems to be a good default y - const y = stave.getYForTopText(1.5) + this.shift_y; - const x = this.x + shift_x; - if (this.drawRect) { - ctx.beginPath(); - ctx.rect(x, y - height + headroom, width, height); - ctx.stroke(); - } - ctx.fillText(this.section, x + padding, y - padding); - ctx.restore(); - return this; - } -} -StaveSection.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 10, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetempo.ts": -/*!***************************!*\ - !*** ./src/stavetempo.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTempo": () => (/* binding */ StaveTempo) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _textformatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./textformatter */ "./src/textformatter.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Radosaw Eichler 2012 - - - - - - -class StaveTempo extends _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StaveTempo; - } - constructor(tempo, x, shift_y) { - super(); - /** Font size for note. */ - this.render_options = { glyph_font_scale: 30 }; - this.tempo = tempo; - this.position = _stavemodifier__WEBPACK_IMPORTED_MODULE_2__.StaveModifierPosition.ABOVE; - this.x = x; - this.shift_x = 10; - this.shift_y = shift_y; - this.resetFont(); - } - setTempo(tempo) { - this.tempo = tempo; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const ctx = stave.checkContext(); - this.setRendered(); - const options = this.render_options; - // FIXME: What does the '38' mean? Why 38? Is that supposed to - // be the default font size for standard notation? - const scale = options.glyph_font_scale / 38; - const name = this.tempo.name; - const duration = this.tempo.duration; - const dots = this.tempo.dots || 0; - const bpm = this.tempo.bpm; - let x = this.x + this.shift_x + shift_x; - const y = stave.getYForTopText(1) + this.shift_y; - ctx.save(); - const textFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(this.textFont); - if (name) { - ctx.setFont(this.textFont); - ctx.fillText(name, x, y); - x += textFormatter.getWidthForTextInPx(name); - } - if (duration && bpm) { - // Override the weight and style. - const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); - ctx.setFont(noteTextFont); - const noteTextFormatter = _textformatter__WEBPACK_IMPORTED_MODULE_4__.TextFormatter.create(noteTextFont); - if (name) { - x += noteTextFormatter.getWidthForTextInPx('|'); - ctx.fillText('(', x, y); - x += noteTextFormatter.getWidthForTextInPx('('); - } - const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(duration); - x += 3 * scale; - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); - x += _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); - // Draw stem and flags - if (glyphProps.stem) { - let stem_height = 30; - if (glyphProps.beam_count) - stem_height += 3 * (glyphProps.beam_count - 1); - stem_height *= scale; - const y_top = y - stem_height; - ctx.fillRect(x - scale, y_top, scale, stem_height); - if (glyphProps.code && glyphProps.code_flag_upstem) { - const flagMetrics = _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { - category: 'flag.staveTempo', - }); - x += (flagMetrics.width * _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; - } - } - // Draw dot - for (let i = 0; i < dots; i++) { - x += 6 * scale; - ctx.beginPath(); - ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); - ctx.fill(); - } - ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); - } - ctx.restore(); - return this; - } -} -StaveTempo.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 14, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetext.ts": -/*!**************************!*\ - !*** ./src/stavetext.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveText": () => (/* binding */ StaveText) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 - - - - - -class StaveText extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.StaveText; - } - constructor(text, position, options = {}) { - super(); - this.setWidth(16); - this.text = text; - this.position = position; - this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: _textnote__WEBPACK_IMPORTED_MODULE_2__.TextNote.Justification.CENTER }, options); - this.resetFont(); - } - setStaveText(text) { - this.text = text; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - setText(text) { - this.text = text; - return this; - } - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - const text_width = ctx.measureText('' + this.text).width; - let x; - let y; - switch (this.position) { - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT: - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.RIGHT: - y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; - if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.LEFT) { - x = stave.getX() - text_width - 24 + this.options.shift_x; - } - else { - x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; - } - break; - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE: - case _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BELOW: - x = stave.getX() + this.options.shift_x; - if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.CENTER) { - x += stave.getWidth() / 2 - text_width / 2; - } - else if (this.options.justification === _textnote__WEBPACK_IMPORTED_MODULE_2__.TextJustification.RIGHT) { - x += stave.getWidth() - text_width; - } - if (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.ABOVE) { - y = stave.getYForTopText(2) + this.options.shift_y; - } - else { - y = stave.getYForBottomText(2) + this.options.shift_y; - } - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); - } - ctx.fillText('' + this.text, x, y + 4); - ctx.restore(); - return this; - } -} -StaveText.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 16, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stavetie.ts": -/*!*************************!*\ - !*** ./src/stavetie.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StaveTie": () => (/* binding */ StaveTie) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - - -class StaveTie extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.StaveTie; - } - /** - * @param notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes, text) { - super(); - this.setNotes(notes); - this.text = text; - this.render_options = { - cp1: 8, - cp2: 12, - text_shift_x: 0, - first_x_shift: 0, - last_x_shift: 0, - y_shift: 7, - tie_spacing: 0, - }; - this.resetFont(); - } - setDirection(direction) { - this.direction = direction; - return this; - } - /** - * Set the notes to attach this tie to. - * - * @param {!Object} notes The notes to tie up. - */ - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) { - notes.first_indices = [0]; - } - if (!notes.last_indices) { - notes.last_indices = [0]; - } - if (notes.first_indices.length !== notes.last_indices.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); - } - this.notes = notes; - return this; - } - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial() { - return !this.notes.first_note || !this.notes.last_note; - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - let cp1 = this.render_options.cp1; - let cp2 = this.render_options.cp2; - if (Math.abs(params.last_x_px - params.first_x_px) < 10) { - cp1 = 2; - cp2 = 8; - } - const first_x_shift = this.render_options.first_x_shift; - const last_x_shift = this.render_options.last_x_shift; - const y_shift = this.render_options.y_shift * params.direction; - // setNotes(...) verified that first_indices and last_indices are not undefined. - // As a result, we use the ! non-null assertion operator here. - // eslint-disable-next-line - const first_indices = this.notes.first_indices; - // eslint-disable-next-line - const last_indices = this.notes.last_indices; - this.applyStyle(); - ctx.openGroup('stavetie', this.getAttribute('id')); - for (let i = 0; i < first_indices.length; ++i) { - const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; - const first_y_px = params.first_ys[first_indices[i]] + y_shift; - const last_y_px = params.last_ys[last_indices[i]] + y_shift; - if (isNaN(first_y_px) || isNaN(last_y_px)) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Bad indices for tie rendering.'); - } - const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; - const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; - ctx.beginPath(); - ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); - ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); - ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); - ctx.closePath(); - ctx.fill(); - } - ctx.closeGroup(); - this.restoreStyle(); - } - renderText(first_x_px, last_x_px) { - var _a, _b, _c; - if (!this.text) - return; - const ctx = this.checkContext(); - let center_x = (first_x_px + last_x_px) / 2; - center_x -= ctx.measureText(this.text).width / 2; - const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); - if (stave) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); - ctx.restore(); - } - } - /** - * Returns the TieNotes structure of the first and last note this tie connects. - */ - getNotes() { - return this.notes; - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.notes.first_note; - const last_note = this.notes.last_note; - // Provide some default values so the compiler doesn't complain. - let first_x_px = 0; - let last_x_px = 0; - let first_ys = [0]; - let last_ys = [0]; - let stem_direction = 0; - if (first_note) { - first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; - stem_direction = first_note.getStemDirection(); - first_ys = first_note.getYs(); - } - else if (last_note) { - const stave = last_note.checkStave(); - first_x_px = stave.getTieStartX(); - first_ys = last_note.getYs(); - this.notes.first_indices = this.notes.last_indices; - } - if (last_note) { - last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; - stem_direction = last_note.getStemDirection(); - last_ys = last_note.getYs(); - } - else if (first_note) { - const stave = first_note.checkStave(); - last_x_px = stave.getTieEndX(); - last_ys = first_note.getYs(); - this.notes.last_indices = this.notes.first_indices; - } - if (this.direction) { - stem_direction = this.direction; - } - this.renderTie({ - first_x_px, - last_x_px, - first_ys, - last_ys, - direction: stem_direction, - }); - this.renderText(first_x_px, last_x_px); - return true; - } -} -/** Default text font. */ -StaveTie.TEXT_FONT = Object.assign({}, _element__WEBPACK_IMPORTED_MODULE_0__.Element.TEXT_FONT); - - -/***/ }), - -/***/ "./src/stavevolta.ts": -/*!***************************!*\ - !*** ./src/stavevolta.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Volta": () => (/* binding */ Volta), -/* harmony export */ "VoltaType": () => (/* binding */ VoltaType) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Larry Kuhns 2011 - - - -var VoltaType; -(function (VoltaType) { - VoltaType[VoltaType["NONE"] = 1] = "NONE"; - VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; - VoltaType[VoltaType["MID"] = 3] = "MID"; - VoltaType[VoltaType["END"] = 4] = "END"; - VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; -})(VoltaType || (VoltaType = {})); -class Volta extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Volta; - } - static get type() { - return VoltaType; - } - constructor(type, number, x, y_shift) { - super(); - this.volta = type; - this.x = x; - this.y_shift = y_shift; - this.number = number; - this.resetFont(); - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - const ctx = stave.checkContext(); - this.setRendered(); - let width = stave.getWidth() - x; // don't include x (offset) for width - const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - const vert_height = 1.5 * stave.getSpacingBetweenLines(); - switch (this.volta) { - case VoltaType.BEGIN: - ctx.fillRect(this.x + x, top_y, 1, vert_height); - break; - case VoltaType.END: - width -= 5; - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - case VoltaType.BEGIN_END: - width -= 3; - ctx.fillRect(this.x + x, top_y, 1, vert_height); - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - default: - break; - } - // If the beginning of a volta, draw measure number - if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.number, this.x + x + 5, top_y + 15); - ctx.restore(); - } - ctx.fillRect(this.x + x, top_y, width, 1); - return this; - } -} -Volta.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 9, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/stem.ts": -/*!*********************!*\ - !*** ./src/stem.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stem": () => (/* binding */ Stem) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// This file implements the `Stem` object. Generally this object is handled -// by its parent `StemmableNote`. - - - - -// eslint-disable-next-line -function L(...args) { - if (Stem.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.Stem', args); -} -class Stem extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.Stem; - } - // Stem directions - static get UP() { - return 1; - } - static get DOWN() { - return -1; - } - // Theme - static get WIDTH() { - return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_WIDTH; - } - static get HEIGHT() { - return _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.STEM_HEIGHT; - } - constructor(options) { - super(); - this.stem_up_y_offset = 0; - this.stem_down_y_offset = 0; - this.stem_up_y_base_offset = 0; - this.stem_down_y_base_offset = 0; - // Default notehead x bounds - this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; - this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; - // Y bounds for top/bottom most notehead - this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; - this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; - // Stem top extension - this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; - // Direction of the stem - this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; - // Flag to override all draw calls - this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; - this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; - this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; - // Use to adjust the rendered height without affecting - // the results of `.getExtents()` - this.renderHeightAdjustment = 0; - this.setOptions(options); - } - setOptions(options) { - // Changing where the stem meets the head - this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; - this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; - this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; - this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; - } - // Set the x bounds for the default notehead - setNoteHeadXBounds(x_begin, x_end) { - this.x_begin = x_begin; - this.x_end = x_end; - return this; - } - // Set the direction of the stem in relation to the noteheads - setDirection(direction) { - this.stem_direction = direction; - } - // Set the extension for the stem, generally for flags or beams - setExtension(ext) { - this.stem_extension = ext; - } - getExtension() { - return this.stem_extension; - } - // The the y bounds for the top and bottom noteheads - setYBounds(y_top, y_bottom) { - this.y_top = y_top; - this.y_bottom = y_bottom; - } - // Gets the entire height for the stem - getHeight() { - const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; - const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping. - return unsigned_height * this.stem_direction; - } - getBoundingBox() { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); - } - // Get the y coordinates for the very base of the stem to the top of - // the extension - getExtents() { - const isStemUp = this.stem_direction === Stem.UP; - const ys = [this.y_top, this.y_bottom]; - const stemHeight = Stem.HEIGHT + this.stem_extension; - const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); - const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); - const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; - return { topY: stemTipY, baseY: outerMostNoteheadY }; - } - setVisibility(isVisible) { - this.hide = !isVisible; - return this; - } - setStemlet(isStemlet, stemletHeight) { - this.isStemlet = isStemlet; - this.stemletHeight = stemletHeight; - return this; - } - adjustHeightForFlag() { - this.renderHeightAdjustment = _tables__WEBPACK_IMPORTED_MODULE_1__.Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); - } - adjustHeightForBeam() { - this.renderHeightAdjustment = -Stem.WIDTH / 2; - } - // Render the stem onto the canvas - draw() { - this.setRendered(); - if (this.hide) - return; - const ctx = this.checkContext(); - let stem_x; - let stem_y; - const stem_direction = this.stem_direction; - let y_base_offset = 0; - if (stem_direction === Stem.DOWN) { - // Down stems are rendered to the left of the head. - stem_x = this.x_begin; - stem_y = this.y_top + this.stem_down_y_offset; - y_base_offset = this.stem_down_y_base_offset; - } - else { - // Up stems are rendered to the right of the head. - stem_x = this.x_end; - stem_y = this.y_bottom - this.stem_up_y_offset; - y_base_offset = this.stem_up_y_base_offset; - } - const stemHeight = this.getHeight(); - L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); - // The offset from the stem's base which is required fo satisfy the stemlet height - const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; - // Draw the stem - ctx.save(); - this.applyStyle(); - ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); - ctx.beginPath(); - ctx.setLineWidth(Stem.WIDTH); - ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); - ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); - ctx.stroke(); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ -Stem.DEBUG = false; - - -/***/ }), - -/***/ "./src/stemmablenote.ts": -/*!******************************!*\ - !*** ./src/stemmablenote.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StemmableNote": () => (/* binding */ StemmableNote) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// `StemmableNote` is an abstract interface for notes with optional stems. -// Examples of stemmable notes are `StaveNote` and `TabNote` - - - - - - -class StemmableNote extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.StemmableNote; - } - constructor(noteStruct) { - super(noteStruct); - } - // Get and set the note's `Stem` - getStem() { - return this.stem; - } - checkStem() { - if (!this.stem) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to instance'); - } - return this.stem; - } - setStem(stem) { - this.stem = stem; - this.addChildElement(stem); - return this; - } - // Builds and sets a new stem - buildStem() { - const stem = new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(); - this.setStem(stem); - return this; - } - buildFlag(category = 'flag') { - const { glyphProps } = this; - if (this.hasFlag()) { - const flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; - if (flagCode) - this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(flagCode, this.render_options.glyph_font_scale, { category }); - } - } - // Get the custom glyph associated with the outer note head on the base of the stem. - getBaseCustomNoteHeadGlyphProps() { - if (this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - return this.customGlyphs[this.customGlyphs.length - 1]; - } - else { - return this.customGlyphs[0]; - } - } - // Get the full length of stem - getStemLength() { - return _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT + this.getStemExtension(); - } - // Get the number of beams for this duration - getBeamCount() { - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - return glyphProps.beam_count; - } - else { - return 0; - } - } - // Get the minimum length of stem - getStemMinimumLength() { - const frac = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.durationToFraction(this.duration); - let length = frac.value() <= 1 ? 0 : 20; - // if note is flagged, cannot shorten beam - switch (this.duration) { - case '8': - if (this.beam == undefined) - length = 35; - break; - case '16': - length = this.beam == undefined ? 35 : 25; - break; - case '32': - length = this.beam == undefined ? 45 : 35; - break; - case '64': - length = this.beam == undefined ? 50 : 40; - break; - case '128': - length = this.beam == undefined ? 55 : 45; - break; - default: - break; - } - return length; - } - // Get/set the direction of the stem - getStemDirection() { - if (!this.stem_direction) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem_direction; - } - setStemDirection(direction) { - if (!direction) - direction = _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP; - if (direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP && direction !== _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); - } - this.stem_direction = direction; - // Reset and reformat everything. Flag has to be built before calling getStemExtension. - this.reset(); - if (this.hasFlag()) { - this.buildFlag(); - } - this.beam = undefined; - if (this.stem) { - this.stem.setDirection(direction); - this.stem.setExtension(this.getStemExtension()); - // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten - // the stem appropriately. If there's no custom note head, lookup the standard notehead. - const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); - // Get the font-specific customizations for the note heads. - const offsets = _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { - offsetYBaseStemUp: 0, - offsetYTopStemUp: 0, - offsetYBaseStemDown: 0, - offsetYTopStemDown: 0, - }); - // Configure the stem to use these offsets. - this.stem.setOptions({ - stem_up_y_offset: offsets.offsetYTopStemUp, - stem_down_y_offset: offsets.offsetYTopStemDown, - stem_up_y_base_offset: offsets.offsetYBaseStemUp, - stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset, - }); - } - if (this.preFormatted) { - this.preFormat(); - } - return this; - } - // Get the `x` coordinate of the stem - getStemX() { - const x_begin = this.getAbsoluteX() + this.x_shift; - const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); - const stem_x = this.stem_direction === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.DOWN ? x_begin : x_end; - return stem_x; - } - // Get the `x` coordinate for the center of the glyph. - // Used for `TabNote` stems and stemlets over rests - getCenterGlyphX() { - return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; - } - // Get the stem extension for the current duration - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != undefined) { - return this.stem_extension_override; - } - // Use stem_beam_extension with beams - if (this.beam) { - return glyphProps.stem_beam_extension; - } - if (glyphProps) { - return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; - } - return 0; - } - // Set the stem length to a specific. Will override the default length. - setStemLength(height) { - this.stem_extension_override = height - _stem__WEBPACK_IMPORTED_MODULE_2__.Stem.HEIGHT; - return this; - } - // Get the top and bottom `y` values of the stem. - getStemExtents() { - if (!this.stem) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem.getExtents(); - } - /** Gets the `y` value for the top modifiers at a specific `textLine`. */ - getYForTopText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - else { - return stave.getYForTopText(textLine); - } - } - /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ - getYForBottomText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - else { - return stave.getYForBottomText(textLine); - } - } - hasFlag() { - return _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.getGlyphProps(this.duration).flag == true && !this.beam; - } - /** Post formats the note. */ - postFormat() { - var _a; - (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); - this.postFormatted = true; - return this; - } - /** Renders the stem onto the canvas. */ - drawStem(stemOptions) { - var _a; - this.checkContext(); - this.setRendered(); - this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__.Stem(stemOptions)); - (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); - } -} - - -/***/ }), - -/***/ "./src/stringnumber.ts": -/*!*****************************!*\ - !*** ./src/stringnumber.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "StringNumber": () => (/* binding */ StringNumber) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns -// -// This file implements the `StringNumber` class which renders string -// number annotations beside notes. - - - - - - - -class StringNumber extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.StringNumber; - } - static get metrics() { - var _a; - return ((_a = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { - verticalPadding: 0, - stemPadding: 0, - leftPadding: 0, - rightPadding: 0, - }); - } - // ## Static Methods - // Arrange string numbers inside a `ModifierContext` - static format(nums, state) { - const left_shift = state.left_shift; - const right_shift = state.right_shift; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shift_left = 0; - let shift_right = 0; - const modLines = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - if (!(0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStaveNote)(note)) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoStaveNote'); - } - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const mc = note.getModifierContext(); - const verticalSpaceNeeded = (num.radius * 2) / _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE + 0.5; - if (mc) { - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.ABOVE) { - num.text_line = mc.getState().top_text_line; - state.top_text_line += verticalSpaceNeeded; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.ModifierPosition.BELOW) { - num.text_line = mc.getState().text_line; - state.text_line += verticalSpaceNeeded; - } - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left); - } - if (right_shift === 0) { - shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); - } - } - prev_note = note; - } - const glyphLine = modLines === 0 ? props.line : modLines; - nums_list.push({ - pos, - note, - num, - line: glyphLine, - shiftL: shift_left, - shiftR: shift_right, - }); - } - // Sort string numbers by line number. - nums_list.sort((a, b) => b.line - a.line); - let num_shiftR = 0; - let x_widthL = 0; - let x_widthR = 0; - let last_line = null; - let last_note = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const note = nums_list[i].note; - const pos = nums_list[i].pos; - const num = nums_list[i].num; - const line = nums_list[i].line; - const shiftR = nums_list[i].shiftR; - // Reset the position of the string number every line. - if (line !== last_line || note !== last_note) { - num_shiftR = right_shift + shiftR; - } - const num_width = num.getWidth() + num_spacing; - if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT) { - num.setXShift(left_shift); - num_shift = shift_left + num_width; // spacing - x_widthL = num_shift > x_widthL ? num_shift : x_widthL; - } - else if (pos === _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT) { - num.setXShift(num_shiftR); - num_shift += num_width; // spacing - x_widthR = num_shift > x_widthR ? num_shift : x_widthR; - } - last_line = line; - last_note = note; - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - constructor(number) { - super(); - this.string_number = number; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE; // Default position above stem or note head - this.x_shift = 0; - this.y_shift = 0; - this.text_line = 0; - this.stem_offset = 0; - this.x_offset = 0; // Horizontal offset from default - this.y_offset = 0; // Vertical offset from default - this.dashed = true; // true - draw dashed extension false - no extension - this.leg = _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line - this.radius = 8; - this.drawCircle = true; - this.setWidth(this.radius * 2 + 4); - this.resetFont(); - } - setLineEndType(leg) { - if (leg >= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.NONE && leg <= _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN) { - this.leg = leg; - } - return this; - } - setStringNumber(number) { - this.string_number = number; - return this; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - setLastNote(note) { - this.last_note = note; - return this; - } - setDashed(dashed) { - this.dashed = dashed; - return this; - } - setDrawCircle(drawCircle) { - this.drawCircle = drawCircle; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - const stemDirection = note.hasStem() ? note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP; - let dot_x = start.x + this.x_shift + this.x_offset; - let stem_ext = {}; - if (note.hasStem()) { - stem_ext = note.checkStem().getExtents(); - } - let dot_y = start.y + this.y_shift + this.y_offset; - switch (this.position) { - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.ABOVE: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a < b ? a : b)); - if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP) { - dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; - } - dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; - } - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.BELOW: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a > b ? a : b)); - if (note.hasStem() && stemDirection == _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN) { - dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; - } - dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.STAVE_LINE_DISTANCE; - } - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.LEFT: - dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; - break; - case _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT: - dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); - } - ctx.save(); - if (this.drawCircle) { - ctx.beginPath(); - ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); - ctx.setLineWidth(1.5); - ctx.stroke(); - } - ctx.setFont(this.textFont); - const x = dot_x - ctx.measureText(this.string_number).width / 2; - ctx.fillText('' + this.string_number, x, dot_y + 4.5); - const lastNote = this.last_note; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isStemmableNote)(lastNote)) { - // Only StemmableNote objects have getStemX(). - const end = lastNote.getStemX() - note.getX() + 5; - ctx.setStrokeStyle('#000000'); - ctx.setLineCap('round'); - ctx.setLineWidth(0.6); - if (this.dashed) { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); - } - else { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); - } - let len; - let pattern; - switch (this.leg) { - case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.UP: - len = -10; - pattern = this.dashed ? [3, 3] : [3, 0]; - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - case _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.LineEndType.DOWN: - len = 10; - pattern = this.dashed ? [3, 3] : [3, 0]; - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - default: - break; - } - } - ctx.restore(); - } -} -StringNumber.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; - - -/***/ }), - -/***/ "./src/strokes.ts": -/*!************************!*\ - !*** ./src/strokes.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Stroke": () => (/* binding */ Stroke) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Larry Kuhns -// -// This file implements the `Stroke` class which renders chord strokes -// that can be arpeggiated, brushed, rasquedo, etc. - - - - - -class Stroke extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Stroke; - } - // Arrange strokes inside `ModifierContext` - static format(strokes, state) { - const left_shift = state.left_shift; - const stroke_spacing = 0; - if (!strokes || strokes.length === 0) - return false; - const strokeList = strokes.map((stroke) => { - const note = stroke.getNote(); - const index = stroke.checkIndex(); - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - // Only StaveNote objects have getKeyProps(). - const { line } = note.getKeyProps()[index]; - const shift = note.getLeftDisplacedHeadPx(); - return { line, shift, stroke }; - } - else if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isTabNote)(note)) { - // Only TabNote objects have getPositions(). - const { str: string } = note.getPositions()[index]; - return { line: string, shift: 0, stroke }; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Internal', 'Unexpected instance.'); - } - }); - const strokeShift = left_shift; - // There can only be one stroke .. if more than one, they overlay each other - const xShift = strokeList.reduce((xShift, { stroke, shift }) => { - stroke.setXShift(strokeShift + shift); - return Math.max(stroke.getWidth() + stroke_spacing, xShift); - }, 0); - state.left_shift += xShift; - return true; - } - constructor(type, options) { - super(); - this.options = Object.assign({ all_voices: true }, options); - // multi voice - span stroke across all voices if true - this.all_voices = this.options.all_voices; - // multi voice - end note of stroke, set in draw() - this.type = type; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT; - this.render_options = { - font_scale: 38, - }; - this.resetFont(); - this.setXShift(0); - this.setWidth(10); - } - getPosition() { - return this.position; - } - addEndNote(note) { - this.note_end = note; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let ys = note.getYs(); - let topY = start.y; - let botY = start.y; - const x = start.x - 5; - const line_space = note.checkStave().getSpacingBetweenLines(); - const notes = this.checkModifierContext().getMembers(note.getCategory()); - for (let i = 0; i < notes.length; i++) { - const note = notes[i]; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isNote)(note)) { - // Only Note objects have getYs(). - // note is an instance of either StaveNote or TabNote. - ys = note.getYs(); - for (let n = 0; n < ys.length; n++) { - if (this.note === notes[i] || this.all_voices) { - topY = Math.min(topY, ys[n]); - botY = Math.max(botY, ys[n]); - } - } - } - } - let arrow = ''; - let arrow_shift_x = 0; - let arrow_y = 0; - let text_shift_x = 0; - let text_y = 0; - switch (this.type) { - case Stroke.Type.BRUSH_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - arrow_y = topY - line_space / 2 + 10; - botY += line_space / 2; - break; - case Stroke.Type.BRUSH_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = 0.5; - arrow_y = botY + line_space / 2; - topY -= line_space / 2; - break; - case Stroke.Type.ROLL_DOWN: - case Stroke.Type.RASQUEDO_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - text_shift_x = this.x_shift + arrow_shift_x - 2; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - topY += 1.5 * line_space; - if ((botY - topY) % 2 !== 0) { - botY += 0.5 * line_space; - } - else { - botY += line_space; - } - arrow_y = topY - line_space; - text_y = botY + line_space + 2; - } - else { - topY += 1.5 * line_space; - botY += line_space; - arrow_y = topY - 0.75 * line_space; - text_y = botY + 0.25 * line_space; - } - break; - case Stroke.Type.ROLL_UP: - case Stroke.Type.RASQUEDO_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = -4; - text_shift_x = this.x_shift + arrow_shift_x - 1; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - arrow_y = line_space / 2; - topY += 0.5 * line_space; - if ((botY - topY) % 2 === 0) { - botY += line_space / 2; - } - arrow_y = botY + 0.5 * line_space; - text_y = topY - 1.25 * line_space; - } - else { - topY += 0.25 * line_space; - botY += 0.5 * line_space; - arrow_y = botY + 0.25 * line_space; - text_y = topY - line_space; - } - break; - case Stroke.Type.ARPEGGIO_DIRECTIONLESS: - topY += 0.5 * line_space; - botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); - } - let strokeLine = 'straight'; - // Draw the stroke - if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { - ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); - } - else { - strokeLine = 'wiggly'; - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_3__.isStaveNote)(note)) { - for (let i = topY; i <= botY; i += line_space) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - } - else { - let i; - for (i = topY; i <= botY; i += 10) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - if (this.type === Stroke.Type.RASQUEDO_DOWN) { - text_y = i + 0.25 * line_space; - } - } - } - if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { - return; // skip drawing arrow heads or text - } - // Draw the arrow head - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { - category: `stroke_${strokeLine}.${arrow}`, - }); - // Draw the rasquedo "R" - if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('R', x + text_shift_x, text_y); - ctx.restore(); - } - } -} -Stroke.Type = { - BRUSH_DOWN: 1, - BRUSH_UP: 2, - ROLL_DOWN: 3, - ROLL_UP: 4, - RASQUEDO_DOWN: 5, - RASQUEDO_UP: 6, - ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow -}; -Stroke.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/svgcontext.ts": -/*!***************************!*\ - !*** ./src/svgcontext.ts ***! - \***************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "SVGContext": () => (/* binding */ SVGContext) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _rendercontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendercontext */ "./src/rendercontext.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// @author Gregory Ristow (2015) - - - - -/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */ -const ATTRIBUTES_TO_IGNORE = { - path: { - x: true, - y: true, - width: true, - height: true, - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - rect: { - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - text: { - width: true, - height: true, - }, -}; -/** Create the SVG in the SVG namespace. */ -const SVG_NS = 'http://www.w3.org/2000/svg'; -const TWO_PI = 2 * Math.PI; -class MeasureTextCache { - constructor() { - // The cache is keyed first by the text string, then by the font attributes - // joined together. - this.cache = {}; - } - lookup(text, svg, attributes) { - let entries = this.cache[text]; - if (entries === undefined) { - entries = {}; - this.cache[text] = entries; - } - const family = attributes['font-family']; - const size = attributes['font-size']; - const weight = attributes['font-weight']; - const style = attributes['font-style']; - const key = `${family}%${size}%${weight}%${style}`; - let entry = entries[key]; - if (entry === undefined) { - entry = this.measureImpl(text, svg, attributes); - entries[key] = entry; - } - return entry; - } - measureImpl(text, svg, attributes) { - let txt = this.txt; - if (!txt) { - // Create the SVG text element that will be used to measure text in the event - // of a cache miss. - txt = document.createElementNS(SVG_NS, 'text'); - this.txt = txt; - } - txt.textContent = text; - if (attributes['font-family']) - txt.setAttributeNS(null, 'font-family', attributes['font-family']); - if (attributes['font-size']) - txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); - if (attributes['font-style']) - txt.setAttributeNS(null, 'font-style', attributes['font-style']); - if (attributes['font-weight']) - txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); - svg.appendChild(txt); - const bbox = txt.getBBox(); - svg.removeChild(txt); - return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; - } -} -/** - * SVG rendering context with an API similar to CanvasRenderingContext2D. - */ -class SVGContext extends _rendercontext__WEBPACK_IMPORTED_MODULE_1__.RenderContext { - constructor(element) { - super(); - this.width = 0; - this.height = 0; - this.precision = 1; - this.backgroundFillStyle = 'white'; - /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ - this.fontCSSString = ''; - this.element = element; - this.precision = Math.pow(10, _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RENDER_PRECISION_PLACES); - // Create a SVG element and add it to the container element. - const svg = this.create('svg'); - this.element.appendChild(svg); - this.svg = svg; - this.parent = this.svg; - this.groups = [this.svg]; - this.path = ''; - this.pen = { x: NaN, y: NaN }; - this.lineWidth = 1.0; - const defaultFontAttributes = { - 'font-family': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - 'font-size': _font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE + 'pt', - 'font-weight': _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - 'font-style': _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, - }; - this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); - this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); - this.groupAttributes = []; - this.applyAttributes(svg, this.attributes); - this.groupAttributes.push(Object.assign({}, this.attributes)); - this.shadow_attributes = { - width: 0, - color: 'black', - }; - this.state_stack = []; - } - round(n) { - return Math.round(n * this.precision) / this.precision; - } - create(svgElementType) { - return document.createElementNS(SVG_NS, svgElementType); - } - // Allow grouping elements in containers for interactivity. - openGroup(cls, id, attrs) { - const group = this.create('g'); - this.groups.push(group); - this.parent.appendChild(group); - this.parent = group; - if (cls) - group.setAttribute('class', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(cls)); - if (id) - group.setAttribute('id', (0,_util__WEBPACK_IMPORTED_MODULE_3__.prefix)(id)); - if (attrs && attrs.pointerBBox) { - group.setAttribute('pointer-events', 'bounding-box'); - } - this.applyAttributes(group, this.attributes); - this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); - return group; - } - closeGroup() { - this.groups.pop(); - this.groupAttributes.pop(); - this.parent = this.groups[this.groups.length - 1]; - } - add(elem) { - this.parent.appendChild(elem); - } - setFillStyle(style) { - this.attributes.fill = style; - return this; - } - /** - * Used to set the fill color for `clearRect()`. This allows us to simulate - * cutting a "hole" into the SVG drawing. - */ - setBackgroundFillStyle(style) { - this.backgroundFillStyle = style; - return this; - } - setStrokeStyle(style) { - this.attributes.stroke = style; - return this; - } - setShadowColor(color) { - this.shadow_attributes.color = color; - return this; - } - /** - * @param blur A non-negative float specifying the level of shadow blur, where 0 - * represents no blur and larger numbers represent increasingly more blur. - * @returns this - */ - setShadowBlur(blur) { - this.shadow_attributes.width = blur; - return this; - } - /** - * @param width - * @returns this - */ - setLineWidth(width) { - this.attributes['stroke-width'] = width; - this.lineWidth = width; - return this; - } - /** - * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] - * @returns this - * - * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) - */ - setLineDash(lineDash) { - if (Object.prototype.toString.call(lineDash) === '[object Array]') { - this.attributes['stroke-dasharray'] = lineDash.join(','); - return this; - } - else { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); - } - } - /** - * @param capType - * @returns this - */ - setLineCap(capType) { - this.attributes['stroke-linecap'] = capType; - return this; - } - // ### Sizing & Scaling Methods: - // TODO (GCR): See note at scale() -- separate our internal - // conception of pixel-based width/height from the style.width - // and style.height properties eventually to allow users to - // apply responsive sizing attributes to the SVG. - resize(width, height) { - this.width = width; - this.height = height; - this.element.style.width = width.toString(); - this.svg.style.width = width.toString(); - this.svg.style.height = height.toString(); - const attributes = { - width, - height, - }; - this.applyAttributes(this.svg, attributes); - this.scale(this.state.scaleX, this.state.scaleY); - return this; - } - scale(x, y) { - // uses viewBox to scale - // TODO (GCR): we may at some point want to distinguish the - // style.width / style.height properties that are applied to - // the SVG object from our internal conception of the SVG - // width/height. This would allow us to create automatically - // scaling SVG's that filled their containers, for instance. - // - // As this isn't implemented in Canvas contexts, - // I've left as is for now, but in using the viewBox to - // handle internal scaling, am trying to make it possible - // for us to eventually move in that direction. - this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; - this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; - const visibleWidth = this.width / this.state.scaleX; - const visibleHeight = this.height / this.state.scaleY; - this.setViewBox(0, 0, visibleWidth, visibleHeight); - return this; - } - /** - * 1 arg: string in the "x y w h" format - * 4 args: x:number, y:number, w:number, h:number - */ - setViewBox(viewBox_or_minX, minY, width, height) { - if (typeof viewBox_or_minX === 'string') { - this.svg.setAttribute('viewBox', viewBox_or_minX); - } - else { - const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; - this.svg.setAttribute('viewBox', viewBoxString); - } - } - // ### Drawing helper methods: - applyAttributes(element, attributes) { - const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; - for (const attrName in attributes) { - if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { - continue; - } - if (attributes[attrName] && - (this.groupAttributes.length == 0 || - attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) - element.setAttributeNS(null, attrName, attributes[attrName]); - } - return element; - } - // ### Shape & Path Methods: - clear() { - // Clear the SVG by removing all inner children. - // (This approach is usually slightly more efficient - // than removing the old SVG & adding a new one to - // the container element, since it does not cause the - // container to resize twice. Also, the resize - // triggered by removing the entire SVG can trigger - // a touchcancel event when the element resizes away - // from a touch point.) - while (this.svg.lastChild) { - this.svg.removeChild(this.svg.lastChild); - } - // Replace the viewbox attribute we just removed. - this.scale(this.state.scaleX, this.state.scaleY); - } - // ## Rectangles: - rect(x, y, width, height, attributes) { - // Avoid invalid negative height attributes by flipping the rectangle on its head: - if (height < 0) { - y += height; - height *= -1; - } - const rectangle = this.create('rect'); - attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; - x = this.round(x); - y = this.round(y); - width = this.round(width); - height = this.round(height); - this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); - this.add(rectangle); - return this; - } - fillRect(x, y, width, height) { - const attributes = { fill: this.attributes.fill, stroke: 'none' }; - this.rect(x, y, width, height, attributes); - return this; - } - clearRect(x, y, width, height) { - // Currently this fills a rect with the backgroundFillStyle, rather - // than "cut a hole" into the existing shapes. - // - // Since tabNote seems to be the only module that makes use of this - // it may be worth creating a separate tabStave that would - // draw lines around locations of tablature fingering. - this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); - return this; - } - // ## Paths: - beginPath() { - this.path = ''; - this.pen.x = NaN; - this.pen.y = NaN; - return this; - } - moveTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'M' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - lineTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'L' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - bezierCurveTo(x1, y1, x2, y2, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - x2 = this.round(x2); - y2 = this.round(y2); - this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - quadraticCurveTo(x1, y1, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - let x0 = x + radius * Math.cos(startAngle); - let y0 = y + radius * Math.sin(startAngle); - x0 = this.round(x0); - y0 = this.round(y0); - // svg behavior different from canvas. Don't normalize angles if - // we are drawing a circle because they both normalize to 0 - const tmpStartTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(startAngle); - const tmpEndTest = (0,_util__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle)(endAngle); - if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || - (counterclockwise && startAngle - endAngle >= TWO_PI) || - tmpStartTest === tmpEndTest) { - let x1 = x + radius * Math.cos(startAngle + Math.PI); - let y1 = y + radius * Math.sin(startAngle + Math.PI); - // There's no way to specify a completely circular arc in SVG so we have to - // use two semi-circular arcs. - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; - this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; - this.pen.x = x0; - this.pen.y = y0; - } - else { - let x1 = x + radius * Math.cos(endAngle); - let y1 = y + radius * Math.sin(endAngle); - startAngle = tmpStartTest; - endAngle = tmpEndTest; - let large; - if (Math.abs(endAngle - startAngle) < Math.PI) { - large = counterclockwise; - } - else { - large = !counterclockwise; - } - if (startAngle > endAngle) { - large = !large; - } - const sweep = !counterclockwise; - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; - this.pen.x = x1; - this.pen.y = y1; - } - return this; - } - closePath() { - this.path += 'Z'; - return this; - } - getShadowStyle() { - const sa = this.shadow_attributes; - // A CSS drop-shadow filter blur looks different than a canvas shadowBlur - // of the same radius, so we scale the drop-shadow radius here to make it - // look close to the canvas shadow. - return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; - } - fill(attributes) { - const path = this.create('path'); - if (typeof attributes === 'undefined') { - attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); - } - attributes.d = this.path; - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - stroke() { - const path = this.create('path'); - const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - // ## Text Methods: - measureText(text) { - return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); - } - fillText(text, x, y) { - if (!text || text.length <= 0) { - return this; - } - x = this.round(x); - y = this.round(y); - const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, - y }); - const txt = this.create('text'); - txt.textContent = text; - this.applyAttributes(txt, attributes); - this.add(txt); - return this; - } - // TODO: State should be deep-copied. - save() { - this.state_stack.push({ - state: { - 'font-family': this.state['font-family'], - 'font-weight': this.state['font-weight'], - 'font-style': this.state['font-style'], - 'font-size': this.state['font-size'], - scale: this.state.scale, - }, - attributes: { - 'font-family': this.attributes['font-family'], - 'font-weight': this.attributes['font-weight'], - 'font-style': this.attributes['font-style'], - 'font-size': this.attributes['font-size'], - fill: this.attributes.fill, - stroke: this.attributes.stroke, - 'stroke-width': this.attributes['stroke-width'], - 'stroke-dasharray': this.attributes['stroke-dasharray'], - }, - shadow_attributes: { - width: this.shadow_attributes.width, - color: this.shadow_attributes.color, - }, - lineWidth: this.lineWidth, - }); - return this; - } - // TODO: State should be deep-restored. - restore() { - const savedState = this.state_stack.pop(); - if (savedState) { - const state = savedState; - this.state['font-family'] = state.state['font-family']; - this.state['font-weight'] = state.state['font-weight']; - this.state['font-style'] = state.state['font-style']; - this.state['font-size'] = state.state['font-size']; - this.state.scale = state.state.scale; - this.attributes['font-family'] = state.attributes['font-family']; - this.attributes['font-weight'] = state.attributes['font-weight']; - this.attributes['font-style'] = state.attributes['font-style']; - this.attributes['font-size'] = state.attributes['font-size']; - this.attributes.fill = state.attributes.fill; - this.attributes.stroke = state.attributes.stroke; - this.attributes['stroke-width'] = state.attributes['stroke-width']; - this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; - this.shadow_attributes.width = state.shadow_attributes.width; - this.shadow_attributes.color = state.shadow_attributes.color; - this.lineWidth = state.lineWidth; - } - return this; - } - set fillStyle(style) { - this.setFillStyle(style); - } - get fillStyle() { - return this.attributes.fill; - } - set strokeStyle(style) { - this.setStrokeStyle(style); - } - get strokeStyle() { - return this.attributes.stroke; - } - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted - * into the font-weight attribute (e.g., font-weight="bold") - * @param style is a string (e.g., 'italic', 'normal') that is inserted into the - * font-style attribute (e.g., font-style="italic") - */ - setFont(f, size, weight, style) { - const fontInfo = _font__WEBPACK_IMPORTED_MODULE_0__.Font.validate(f, size, weight, style); - this.fontCSSString = _font__WEBPACK_IMPORTED_MODULE_0__.Font.toCSSString(fontInfo); - const fontAttributes = { - 'font-family': fontInfo.family, - 'font-size': fontInfo.size, - 'font-weight': fontInfo.weight, - 'font-style': fontInfo.style, - }; - this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); - this.state = Object.assign(Object.assign({}, this.state), fontAttributes); - return this; - } - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont() { - return this.fontCSSString; - } -} -SVGContext.measureTextCache = new MeasureTextCache(); - - -/***/ }), - -/***/ "./src/system.ts": -/*!***********************!*\ - !*** ./src/system.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "System": () => (/* binding */ System) -/* harmony export */ }); -/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.ts"); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - - - -/** - * System implements a musical system, which is a collection of staves, - * each which can have one or more voices. All voices across all staves in - * the system are formatted together. - */ -class System extends _element__WEBPACK_IMPORTED_MODULE_1__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.System; - } - constructor(params = {}) { - super(); - this.setOptions(params); - this.partStaves = []; - this.partStaveInfos = []; - this.partVoices = []; - } - /** Set formatting options. */ - setOptions(options = {}) { - if (!options.factory) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); - } - this.factory = options.factory; - this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); - if (this.options.noJustification === false && typeof options.width === 'undefined') { - this.options.autoWidth = true; - } - } - /** Get origin X. */ - getX() { - return this.options.x; - } - /** Set origin X. */ - setX(x) { - this.options.x = x; - this.partStaves.forEach((s) => { - s.setX(x); - }); - } - /** Get origin y. */ - getY() { - return this.options.y; - } - /** Set origin y. */ - setY(y) { - this.options.y = y; - this.partStaves.forEach((s) => { - s.setY(y); - }); - } - /** Get associated staves. */ - getStaves() { - return this.partStaves; - } - /** Get associated voices. */ - getVoices() { - return this.partVoices; - } - /** Set associated context. */ - setContext(context) { - super.setContext(context); - this.factory.setContext(context); - return this; - } - /** - * Add connector between staves. - * @param type see {@link StaveConnector.typeString} - */ - addConnector(type = 'double') { - this.connector = this.factory.StaveConnector({ - top_stave: this.partStaves[0], - bottom_stave: this.partStaves[this.partStaves.length - 1], - type, - }); - return this.connector; - } - /** - * Add a stave to the system. - * - * Example (one voice): - * - * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` - * - * Example (two voices): - * - * `system.addStave({voices: [` - * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` - * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` - * `]});` - */ - addStave(params) { - var _a; - const staveOptions = Object.assign({ left_bar: false }, params.options); - const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); - const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); - const ctx = this.getContext(); - p.voices.forEach((voice) => { - voice - .setContext(ctx) - .setStave(stave) - .getTickables() - .forEach((tickable) => tickable.setStave(stave)); - this.partVoices.push(voice); - }); - this.partStaves.push(stave); - this.partStaveInfos.push(p); - return stave; - } - /** - * Add voices to the system with stave already assigned. - */ - addVoices(voices) { - const ctx = this.getContext(); - voices.forEach((voice) => { - voice.setContext(ctx); - this.partVoices.push(voice); - }); - } - /** Format the system. */ - format() { - const options_details = this.options.details; - let justifyWidth = 0; - const formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter(options_details); - this.formatter = formatter; - let y = this.options.y; - let startX = 0; - const debugNoteMetricsYs = []; - this.partStaves.forEach((part, index) => { - y = y + part.space(this.partStaveInfos[index].spaceAbove); - part.setY(y); - y = y + part.space(this.partStaveInfos[index].spaceBelow); - y = y + part.space(this.options.spaceBetweenStaves); - if (this.partStaveInfos[index].debugNoteMetrics) { - debugNoteMetricsYs.push({ y, stave: part }); - y += 15; - } - startX = Math.max(startX, part.getNoteStartX()); - }); - // Re-assign Stave to update y position - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - const stave = tickable.getStave(); - if (stave) - tickable.setStave(stave); - }); - }); - // Join the voices - formatter.joinVoices(this.partVoices); - // Update the start position of all staves. - this.partStaves.forEach((part) => part.setNoteStartX(startX)); - if (this.options.autoWidth && this.partVoices.length > 0) { - justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); - this.options.width = justifyWidth + _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.rightPadding + (startX - this.options.x); - this.partStaves.forEach((part) => { - part.setWidth(this.options.width); - }); - } - else { - justifyWidth = this.options.noPadding - ? this.options.width - (startX - this.options.x) - : this.options.width - (startX - this.options.x) - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.defaultPadding; - } - if (this.partVoices.length > 0) { - formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); - } - formatter.postFormat(); - for (let i = 0; i < this.options.formatIterations; i++) { - formatter.tune(options_details); - } - this.startX = startX; - this.debugNoteMetricsYs = debugNoteMetricsYs; - this.lastY = y; - this.boundingBox = new _boundingbox__WEBPACK_IMPORTED_MODULE_0__.BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); - _stave__WEBPACK_IMPORTED_MODULE_4__.Stave.formatBegModifiers(this.partStaves); - } - /** Render the system. */ - draw() { - // Render debugging information, if requested. - const ctx = this.checkContext(); - if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('NoFormatter', 'format() must be called before draw()'); - } - this.setRendered(); - if (this.options.debugFormatter) { - _formatter__WEBPACK_IMPORTED_MODULE_2__.Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); - } - this.debugNoteMetricsYs.forEach((d) => { - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - if (tickable.getStave() === d.stave) - _note__WEBPACK_IMPORTED_MODULE_3__.Note.plotMetrics(ctx, tickable, d.y); - }); - }); - }); - } -} - - -/***/ }), - -/***/ "./src/tables.ts": -/*!***********************!*\ - !*** ./src/tables.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tables": () => (/* binding */ Tables) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - - -const RESOLUTION = 16384; -/** - * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow. - * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks. - */ -const durations = { - '1/2': RESOLUTION * 2, - 1: RESOLUTION / 1, - 2: RESOLUTION / 2, - 4: RESOLUTION / 4, - 8: RESOLUTION / 8, - 16: RESOLUTION / 16, - 32: RESOLUTION / 32, - 64: RESOLUTION / 64, - 128: RESOLUTION / 128, - 256: RESOLUTION / 256, -}; -const durationAliases = { - w: '1', - h: '2', - q: '4', - // This is the default duration used to render bars (BarNote). Bars no longer - // consume ticks, so this should be a no-op. - // TODO(0xfe): This needs to be cleaned up. - b: '256', -}; -const keySignatures = { - C: { num: 0 }, - Am: { num: 0 }, - F: { acc: 'b', num: 1 }, - Dm: { acc: 'b', num: 1 }, - Bb: { acc: 'b', num: 2 }, - Gm: { acc: 'b', num: 2 }, - Eb: { acc: 'b', num: 3 }, - Cm: { acc: 'b', num: 3 }, - Ab: { acc: 'b', num: 4 }, - Fm: { acc: 'b', num: 4 }, - Db: { acc: 'b', num: 5 }, - Bbm: { acc: 'b', num: 5 }, - Gb: { acc: 'b', num: 6 }, - Ebm: { acc: 'b', num: 6 }, - Cb: { acc: 'b', num: 7 }, - Abm: { acc: 'b', num: 7 }, - G: { acc: '#', num: 1 }, - Em: { acc: '#', num: 1 }, - D: { acc: '#', num: 2 }, - Bm: { acc: '#', num: 2 }, - A: { acc: '#', num: 3 }, - 'F#m': { acc: '#', num: 3 }, - E: { acc: '#', num: 4 }, - 'C#m': { acc: '#', num: 4 }, - B: { acc: '#', num: 5 }, - 'G#m': { acc: '#', num: 5 }, - 'F#': { acc: '#', num: 6 }, - 'D#m': { acc: '#', num: 6 }, - 'C#': { acc: '#', num: 7 }, - 'A#m': { acc: '#', num: 7 }, -}; -const clefs = { - treble: { line_shift: 0 }, - bass: { line_shift: 6 }, - tenor: { line_shift: 4 }, - alto: { line_shift: 3 }, - soprano: { line_shift: 1 }, - percussion: { line_shift: 0 }, - 'mezzo-soprano': { line_shift: 2 }, - 'baritone-c': { line_shift: 5 }, - 'baritone-f': { line_shift: 5 }, - subbass: { line_shift: 7 }, - french: { line_shift: -1 }, -}; -const notesInfo = { - C: { index: 0, int_val: 0 }, - CN: { index: 0, int_val: 0, accidental: 'n' }, - 'C#': { index: 0, int_val: 1, accidental: '#' }, - 'C##': { index: 0, int_val: 2, accidental: '##' }, - CB: { index: 0, int_val: 11, accidental: 'b' }, - CBB: { index: 0, int_val: 10, accidental: 'bb' }, - D: { index: 1, int_val: 2 }, - DN: { index: 1, int_val: 2, accidental: 'n' }, - 'D#': { index: 1, int_val: 3, accidental: '#' }, - 'D##': { index: 1, int_val: 4, accidental: '##' }, - DB: { index: 1, int_val: 1, accidental: 'b' }, - DBB: { index: 1, int_val: 0, accidental: 'bb' }, - E: { index: 2, int_val: 4 }, - EN: { index: 2, int_val: 4, accidental: 'n' }, - 'E#': { index: 2, int_val: 5, accidental: '#' }, - 'E##': { index: 2, int_val: 6, accidental: '##' }, - EB: { index: 2, int_val: 3, accidental: 'b' }, - EBB: { index: 2, int_val: 2, accidental: 'bb' }, - F: { index: 3, int_val: 5 }, - FN: { index: 3, int_val: 5, accidental: 'n' }, - 'F#': { index: 3, int_val: 6, accidental: '#' }, - 'F##': { index: 3, int_val: 7, accidental: '##' }, - FB: { index: 3, int_val: 4, accidental: 'b' }, - FBB: { index: 3, int_val: 3, accidental: 'bb' }, - G: { index: 4, int_val: 7 }, - GN: { index: 4, int_val: 7, accidental: 'n' }, - 'G#': { index: 4, int_val: 8, accidental: '#' }, - 'G##': { index: 4, int_val: 9, accidental: '##' }, - GB: { index: 4, int_val: 6, accidental: 'b' }, - GBB: { index: 4, int_val: 5, accidental: 'bb' }, - A: { index: 5, int_val: 9 }, - AN: { index: 5, int_val: 9, accidental: 'n' }, - 'A#': { index: 5, int_val: 10, accidental: '#' }, - 'A##': { index: 5, int_val: 11, accidental: '##' }, - AB: { index: 5, int_val: 8, accidental: 'b' }, - ABB: { index: 5, int_val: 7, accidental: 'bb' }, - B: { index: 6, int_val: 11 }, - BN: { index: 6, int_val: 11, accidental: 'n' }, - 'B#': { index: 6, int_val: 12, accidental: '#' }, - 'B##': { index: 6, int_val: 13, accidental: '##' }, - BB: { index: 6, int_val: 10, accidental: 'b' }, - BBB: { index: 6, int_val: 9, accidental: 'bb' }, - R: { index: 6, rest: true }, - X: { - index: 6, - accidental: '', - octave: 4, - code: 'noteheadXBlack', - shift_right: 5.5, - }, -}; -const validNoteTypes = { - n: { name: 'note' }, - r: { name: 'rest' }, - h: { name: 'harmonic' }, - m: { name: 'muted' }, - s: { name: 'slash' }, - g: { name: 'ghost' }, - d: { name: 'diamond' }, - x: { name: 'x' }, - ci: { name: 'circled' }, - cx: { name: 'circle x' }, - sf: { name: 'slashed' }, - sb: { name: 'slashed backward' }, - sq: { name: 'square' }, - tu: { name: 'triangle up' }, - td: { name: 'triangle down' }, -}; -const accidentals = { - '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, - '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, - b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, - bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, - n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, - '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, - '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, - db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, - d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, - '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, - '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, - '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, - bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, - bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, - o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, - k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, - bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, - '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 }, - ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, - afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, - accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, - accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlatAndFlat: { - code: 'accidentalNarrowReversedFlatAndFlat', - parenRightPaddingAdjustment: -1, - }, - accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, - accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, -}; -// Helps determine the layout of accidentals. -const accidentalColumns = { - 1: { - a: [1], - b: [1], - }, - 2: { - a: [1, 2], - }, - 3: { - a: [1, 3, 2], - b: [1, 2, 1], - second_on_bottom: [1, 2, 3], - }, - 4: { - a: [1, 3, 4, 2], - b: [1, 2, 3, 1], - spaced_out_tetrachord: [1, 2, 1, 2], - }, - 5: { - a: [1, 3, 5, 4, 2], - b: [1, 2, 4, 3, 1], - spaced_out_pentachord: [1, 2, 3, 2, 1], - very_spaced_out_pentachord: [1, 2, 1, 2, 1], - }, - 6: { - a: [1, 3, 5, 6, 4, 2], - b: [1, 2, 4, 5, 3, 1], - spaced_out_hexachord: [1, 3, 2, 1, 3, 2], - very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], - }, -}; -const articulations = { - 'a.': { code: 'augmentationDot', between_lines: true }, - av: { - aboveCode: 'articStaccatissimoAbove', - belowCode: 'articStaccatissimoBelow', - between_lines: true, - }, - 'a>': { - aboveCode: 'articAccentAbove', - belowCode: 'articAccentBelow', - between_lines: true, - }, - 'a-': { - aboveCode: 'articTenutoAbove', - belowCode: 'articTenutoBelow', - between_lines: true, - }, - 'a^': { - aboveCode: 'articMarcatoAbove', - belowCode: 'articMarcatoBelow', - between_lines: false, - }, - 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, - ao: { - aboveCode: 'pluckedSnapPizzicatoAbove', - belowCode: 'pluckedSnapPizzicatoBelow', - between_lines: false, - }, - ah: { code: 'stringsHarmonic', between_lines: false }, - 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, - 'a@a': { code: 'fermataAbove', between_lines: false }, - 'a@u': { code: 'fermataBelow', between_lines: false }, - 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, - 'a@as': { code: 'fermataShortAbove', between_lines: false }, - 'a@us': { code: 'fermataShortBelow', between_lines: false }, - 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, - 'a@al': { code: 'fermataLongAbove', between_lines: false }, - 'a@ul': { code: 'fermataLongBelow', between_lines: false }, - 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, - 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, - 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, - 'a|': { code: 'stringsUpBow', between_lines: false }, - am: { code: 'stringsDownBow', between_lines: false }, - 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked -}; -const ornaments = { - mordent: { code: 'ornamentShortTrill' }, - mordent_inverted: { code: 'ornamentMordent' }, - turn: { code: 'ornamentTurn' }, - turn_inverted: { code: 'ornamentTurnSlash' }, - tr: { code: 'ornamentTrill' }, - upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, - downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, - prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, - pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, - upmordent: { code: 'ornamentPrecompSlideTrillBach' }, - downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, - lineprall: { code: 'ornamentPrecompAppoggTrill' }, - prallprall: { code: 'ornamentTremblement' }, - scoop: { code: 'brassScoop' }, - doit: { code: 'brassDoitMedium' }, - fall: { code: 'brassFallLipShort' }, - doitLong: { code: 'brassLiftMedium' }, - fallLong: { code: 'brassFallRoughMedium' }, - bend: { code: 'brassBend' }, - plungerClosed: { code: 'brassMuteClosed' }, - plungerOpen: { code: 'brassMuteOpen' }, - flip: { code: 'brassFlip' }, - jazzTurn: { code: 'brassJazzTurn' }, - smear: { code: 'brassSmear' }, -}; -class Tables { - /** - * @returns the `Font` object at the head of the music font stack. - */ - static currentMusicFont() { - if (Tables.MUSIC_FONT_STACK.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); - } - else { - return Tables.MUSIC_FONT_STACK[0]; - } - } - static clefProperties(clef) { - if (!clef || !(clef in clefs)) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArgument', 'Invalid clef: ' + clef); - return clefs[clef]; - } - /** - * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). - * @param clef - * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). - * @returns properties for the specified note. - */ - static keyProperties(keyOctaveGlyph, clef = 'treble', params) { - let options = { octave_shift: 0, duration: '4' }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - const duration = Tables.sanitizeDuration(options.duration); - const pieces = keyOctaveGlyph.split('/'); - if (pieces.length < 2) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); - } - const key = pieces[0].toUpperCase(); - const value = notesInfo[key]; - if (!value) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', 'Invalid key name: ' + key); - if (value.octave) - pieces[1] = value.octave.toString(); - let octave = parseInt(pieces[1], 10); - // Octave_shift is the shift to compensate for clef 8va/8vb. - octave += -1 * options.octave_shift; - const baseIndex = octave * 7 - 4 * 7; - let line = (baseIndex + value.index) / 2; - line += Tables.clefProperties(clef).line_shift; - let stroke = 0; - if (line <= 0 && (line * 2) % 2 === 0) - stroke = 1; // stroke up - if (line >= 6 && (line * 2) % 2 === 0) - stroke = -1; // stroke down - // Integer value for note arithmetic. - const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; - // If the user specified a glyph, overwrite the glyph code. - const code = value.code; - const shift_right = value.shift_right; - let customNoteHeadProps = {}; - if (pieces.length > 2 && pieces[2]) { - const glyphName = pieces[2].toUpperCase(); - customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; - } - return Object.assign({ key, - octave, - line, - int_value, accidental: value.accidental, code, - stroke, - shift_right, displaced: false }, customNoteHeadProps); - } - static integerToNote(integer) { - if (typeof integer === 'undefined' || integer < 0 || integer > 11) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); - } - const table = { - 0: 'C', - 1: 'C#', - 2: 'D', - 3: 'D#', - 4: 'E', - 5: 'F', - 6: 'F#', - 7: 'G', - 8: 'G#', - 9: 'A', - 10: 'A#', - 11: 'B', - }; - const noteValue = table[integer]; - if (!noteValue) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); - } - return noteValue; - } - static tabToGlyphProps(fret, scale = 1.0) { - let glyph = undefined; - let width = 0; - let shift_y = 0; - if (fret.toUpperCase() === 'X') { - const glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); - glyph = 'accidentalDoubleSharp'; - if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidMetrics', 'Width and height required'); - width = glyphMetrics.width; - shift_y = -glyphMetrics.height / 2; - } - else { - width = Tables.textWidth(fret); - } - return { - text: fret, - code: glyph, - getWidth: () => width * scale, - shift_y, - }; - } - // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size. - // TODO: The actual width depends on the font family, size, weight, style. - static textWidth(text) { - return 7 * text.toString().length; - } - static articulationCodes(artic) { - return articulations[artic]; - } - static accidentalCodes(acc) { - return accidentals[acc]; - } - static ornamentCodes(acc) { - return ornaments[acc]; - } - static keySignature(spec) { - const keySpec = keySignatures[spec]; - if (!keySpec) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); - } - if (!keySpec.acc) { - return []; - } - const accidentalList = { - b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], - '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], - }; - const notes = accidentalList[keySpec.acc]; - const acc_list = []; - for (let i = 0; i < keySpec.num; ++i) { - const line = notes[i]; - acc_list.push({ type: keySpec.acc, line }); - } - return acc_list; - } - static getKeySignatures() { - return keySignatures; - } - static hasKeySignature(spec) { - return spec in keySignatures; - } - /** - * Convert duration aliases to the number based duration. - * If the input isn't an alias, simply return the input. - * @param duration - * @returns Example: 'q' -> '4', '8' -> '8' - */ - static sanitizeDuration(duration) { - const durationNumber = durationAliases[duration]; - if (durationNumber !== undefined) { - duration = durationNumber; - } - if (durations[duration] === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); - } - return duration; - } - /** Convert the `duration` to a fraction. */ - static durationToFraction(duration) { - return new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction().parse(Tables.sanitizeDuration(duration)); - } - /** Convert the `duration` to a number. */ - static durationToNumber(duration) { - return Tables.durationToFraction(duration).value(); - } - /* Convert the `duration` to total ticks. */ - static durationToTicks(duration) { - duration = Tables.sanitizeDuration(duration); - const ticks = durations[duration]; - if (ticks === undefined) { - throw new _util__WEBPACK_IMPORTED_MODULE_2__.RuntimeError('InvalidDuration'); - } - return ticks; - } - static codeNoteHead(type, duration) { - let code = ''; - switch (type) { - /* Diamond */ - case 'D0': - code = 'noteheadDiamondWhole'; - break; - case 'D1': - code = 'noteheadDiamondHalf'; - break; - case 'D2': - code = 'noteheadDiamondBlack'; - break; - case 'D3': - code = 'noteheadDiamondBlack'; - break; - /* Triangle */ - case 'T0': - code = 'noteheadTriangleUpWhole'; - break; - case 'T1': - code = 'noteheadTriangleUpHalf'; - break; - case 'T2': - code = 'noteheadTriangleUpBlack'; - break; - case 'T3': - code = 'noteheadTriangleUpBlack'; - break; - /* Cross */ - case 'X0': - code = 'noteheadXWhole'; - break; - case 'X1': - code = 'noteheadXHalf'; - break; - case 'X2': - code = 'noteheadXBlack'; - break; - case 'X3': - code = 'noteheadCircleX'; - break; - /* Square */ - case 'S1': - code = 'noteheadSquareWhite'; - break; - case 'S2': - code = 'noteheadSquareBlack'; - break; - /* Rectangle */ - case 'R1': - code = 'vexNoteHeadRectWhite'; // no smufl code - break; - case 'R2': - code = 'vexNoteHeadRectBlack'; // no smufl code - break; - case 'DO': - code = 'noteheadTriangleUpBlack'; - break; - case 'RE': - code = 'noteheadMoonBlack'; - break; - case 'MI': - code = 'noteheadDiamondBlack'; - break; - case 'FA': - code = 'noteheadTriangleLeftBlack'; - break; - case 'FAUP': - code = 'noteheadTriangleRightBlack'; - break; - case 'SO': - code = 'noteheadBlack'; - break; - case 'LA': - code = 'noteheadSquareBlack'; - break; - case 'TI': - code = 'noteheadTriangleRoundDownBlack'; - break; - case 'D': - case 'H': // left for backwards compatibility - switch (duration) { - case '1/2': - code = 'noteheadDiamondDoubleWhole'; - break; - case '1': - code = 'noteheadDiamondWhole'; - break; - case '2': - code = 'noteheadDiamondHalf'; - break; - default: - code = 'noteheadDiamondBlack'; - break; - } - break; - case 'N': - case 'G': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWhole'; - break; - case '1': - code = 'noteheadWhole'; - break; - case '2': - code = 'noteheadHalf'; - break; - default: - code = 'noteheadBlack'; - break; - } - break; - case 'M': // left for backwards compatibility - case 'X': - switch (duration) { - case '1/2': - code = 'noteheadXDoubleWhole'; - break; - case '1': - code = 'noteheadXWhole'; - break; - case '2': - code = 'noteheadXHalf'; - break; - default: - code = 'noteheadXBlack'; - break; - } - break; - case 'CX': - switch (duration) { - case '1/2': - code = 'noteheadCircleXDoubleWhole'; - break; - case '1': - code = 'noteheadCircleXWhole'; - break; - case '2': - code = 'noteheadCircleXHalf'; - break; - default: - code = 'noteheadCircleX'; - break; - } - break; - case 'CI': - switch (duration) { - case '1/2': - code = 'noteheadCircledDoubleWhole'; - break; - case '1': - code = 'noteheadCircledWhole'; - break; - case '2': - code = 'noteheadCircledHalf'; - break; - default: - code = 'noteheadCircledBlack'; - break; - } - break; - case 'SQ': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWholeSquare'; - break; - case '1': - code = 'noteheadSquareWhite'; - break; - case '2': - code = 'noteheadSquareWhite'; - break; - default: - code = 'noteheadSquareBlack'; - break; - } - break; - case 'TU': - switch (duration) { - case '1/2': - code = 'noteheadTriangleUpDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleUpWhole'; - break; - case '2': - code = 'noteheadTriangleUpHalf'; - break; - default: - code = 'noteheadTriangleUpBlack'; - break; - } - break; - case 'TD': - switch (duration) { - case '1/2': - code = 'noteheadTriangleDownDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleDownWhole'; - break; - case '2': - code = 'noteheadTriangleDownHalf'; - break; - default: - code = 'noteheadTriangleDownBlack'; - break; - } - break; - case 'SF': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole1'; - break; - case '1': - code = 'noteheadSlashedWhole1'; - break; - case '2': - code = 'noteheadSlashedHalf1'; - break; - default: - code = 'noteheadSlashedBlack1'; - } - break; - case 'SB': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole2'; - break; - case '1': - code = 'noteheadSlashedWhole2'; - break; - case '2': - code = 'noteheadSlashedHalf2'; - break; - default: - code = 'noteheadSlashedBlack2'; - } - break; - } - return code; - } - // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads. - // The default type is a regular note ('n'). - static getGlyphProps(duration, type = 'n') { - duration = Tables.sanitizeDuration(duration); - // Lookup duration for default glyph head code - let code = durationCodes[duration]; - if (code === undefined) { - code = durationCodes['4']; - } - // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash) - let glyphTypeProperties = code[type]; - // Try and get it from the custom list of note heads - const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); - if (codeNoteHead != '') - glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); - const code_head = glyphTypeProperties.code_head; - // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale). - // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH). - const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.getWidth(code_head, scale); - // Merge duration props for 'duration' with the note head properties. - return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); - } -} -Tables.SOFTMAX_FACTOR = 10; -Tables.STEM_WIDTH = 1.5; -Tables.STEM_HEIGHT = 35; -Tables.STAVE_LINE_THICKNESS = 1; -Tables.RENDER_PRECISION_PLACES = 3; -Tables.RESOLUTION = RESOLUTION; -/** - * Customize this by calling Flow.setMusicFont(...fontNames); - */ -Tables.MUSIC_FONT_STACK = []; -Tables.NOTATION_FONT_SCALE = 39; -Tables.TABLATURE_FONT_SCALE = 39; -Tables.SLASH_NOTEHEAD_WIDTH = 15; -Tables.STAVE_LINE_DISTANCE = 10; -// HACK: -// Since text origins are positioned at the baseline, we must -// compensate for the ascender of the text. Of course, 1 staff space is -// a very poor approximation. -// -// This will be deprecated in the future. This is a temporary solution until -// we have more robust text metrics. -Tables.TEXT_HEIGHT_OFFSET_HACK = 1; -Tables.accidentalMap = accidentals; -Tables.accidentalColumnsTable = accidentalColumns; -Tables.unicode = { - // ♯ accidental sharp - sharp: String.fromCharCode(0x266f), - // ♭ accidental flat - flat: String.fromCharCode(0x266d), - // ♮ accidental natural - natural: String.fromCharCode(0x266e), - // △ major seventh - triangle: String.fromCharCode(0x25b3), - // ø half-diminished - 'o-with-slash': String.fromCharCode(0x00f8), - // ° diminished - degrees: String.fromCharCode(0x00b0), - // ○ diminished - circle: String.fromCharCode(0x25cb), -}; -/* The list of valid note types. Used by note.ts during parseNoteStruct(). */ -Tables.validTypes = validNoteTypes; -// Default time signature. -Tables.TIME4_4 = { - num_beats: 4, - beat_value: 4, - resolution: RESOLUTION, -}; -// 1/2, 1, 2, 4, 8, 16, 32, 64, 128 -// NOTE: There is no 256 here! However, there are other mentions of 256 in this file. -// For example, in durations has a 256 key, and sanitizeDuration() can return 256. -// The sanitizeDuration() bit may need to be removed by 0xfe. -const durationCodes = { - '1/2': { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Breve rest - code_head: 'restDoubleWhole', - rest: true, - position: 'B/5', - dot_shiftY: 0.5, - }, - s: { - // Breve note slash - - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 1: { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Whole rest - code_head: 'restWhole', - ledger_code_head: 'restWholeLegerLine', - rest: true, - position: 'D/5', - dot_shiftY: 0.5, - }, - s: { - // Whole note slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 2: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Half rest - code_head: 'restHalf', - ledger_code_head: 'restHalfLegerLine', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - }, - s: { - // Half note slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 4: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Quarter rest - code_head: 'restQuarter', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.5, - line_below: 1.5, - }, - s: { - // Quarter slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 8: { - common: { - code_head: '', - stem: true, - flag: true, - beam_count: 1, - stem_beam_extension: 0, - code_flag_upstem: 'flag8thUp', - code_flag_downstem: 'flag8thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Eighth rest - code_head: 'rest8th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 1.0, - }, - s: { - // Eighth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 16: { - common: { - code_head: '', - beam_count: 2, - stem_beam_extension: 0, - stem: true, - flag: true, - code_flag_upstem: 'flag16thUp', - code_flag_downstem: 'flag16thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Sixteenth rest - code_head: 'rest16th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 2.0, - }, - s: { - // Sixteenth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 32: { - common: { - code_head: '', - beam_count: 3, - stem_beam_extension: 7.5, - stem: true, - flag: true, - code_flag_upstem: 'flag32ndUp', - code_flag_downstem: 'flag32ndDown', - stem_up_extension: 9, - stem_down_extension: 9, - tabnote_stem_up_extension: 9, - tabnote_stem_down_extension: 9, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Thirty-second rest - code_head: 'rest32nd', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 2.0, - }, - s: { - // Thirty-second slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 64: { - common: { - code_head: '', - beam_count: 4, - stem_beam_extension: 15, - stem: true, - flag: true, - code_flag_upstem: 'flag64thUp', - code_flag_downstem: 'flag64thDown', - stem_up_extension: 13, - stem_down_extension: 13, - tabnote_stem_up_extension: 13, - tabnote_stem_down_extension: 13, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Sixty-fourth rest - code_head: 'rest64th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 3.0, - }, - s: { - // Sixty-fourth slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 128: { - common: { - code_head: '', - beam_count: 5, - stem_beam_extension: 22.5, - stem: true, - flag: true, - code_flag_upstem: 'flag128thUp', - code_flag_downstem: 'flag128thDown', - stem_up_extension: 22, - stem_down_extension: 22, - tabnote_stem_up_extension: 22, - tabnote_stem_down_extension: 22, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - // Hundred-twenty-eight rest - code_head: 'rest128th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -2.5, - line_above: 3.0, - line_below: 3.0, - }, - s: { - // Hundred-twenty-eight slash - // Drawn with canvas primitives - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, -}; - - -/***/ }), - -/***/ "./src/tabnote.ts": -/*!************************!*\ - !*** ./src/tabnote.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabNote": () => (/* binding */ TabNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// -// The file implements notes for Tablature notation. This consists of one or -// more fret positions, and can either be drawn with or without stems. -// -// See `tests/tabnote_tests.ts` for usage examples. - - - - - - - - -// Gets the unused strings grouped together if consecutive. -// -// Parameters: -// * num_lines - The number of lines -// * strings_used - An array of numbers representing which strings have fret positions -function getUnusedStringGroups(num_lines, strings_used) { - const stem_through = []; - let group = []; - for (let string = 1; string <= num_lines; string++) { - const is_used = strings_used.indexOf(string) > -1; - if (!is_used) { - group.push(string); - } - else { - stem_through.push(group); - group = []; - } - } - if (group.length > 0) - stem_through.push(group); - return stem_through; -} -// Gets groups of points that outline the partial stem lines -// between fret positions -// -// Parameters: -// * stem_Y - The `y` coordinate the stem is located on -// * unused_strings - An array of groups of unused strings -// * stave - The stave to use for reference -// * stem_direction - The direction of the stem -function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { - const up_stem = stem_direction !== 1; - const down_stem = stem_direction !== -1; - const line_spacing = stave.getSpacingBetweenLines(); - const total_lines = stave.getNumLines(); - const stem_lines = []; - unused_strings.forEach((strings) => { - const containsLastString = strings.indexOf(total_lines) > -1; - const containsFirstString = strings.indexOf(1) > -1; - if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { - return; - } - // If there's only one string in the group, push a duplicate value. - // We do this because we need 2 strings to convert into upper/lower y - // values. - if (strings.length === 1) { - strings.push(strings[0]); - } - const line_ys = []; - // Iterate through each group string and store it's y position - strings.forEach((string, index, strings) => { - const isTopBound = string === 1; - const isBottomBound = string === total_lines; - // Get the y value for the appropriate staff line, - // we adjust for a 0 index array, since string numbers are index 1 - let y = stave.getYForLine(string - 1); - // Unless the string is the first or last, add padding to each side - // of the line - if (index === 0 && !isTopBound) { - y -= line_spacing / 2 - 1; - } - else if (index === strings.length - 1 && !isBottomBound) { - y += line_spacing / 2 - 1; - } - // Store the y value - line_ys.push(y); - // Store a subsequent y value connecting this group to the main - // stem above/below the stave if it's the top/bottom string - if (stem_direction === 1 && isTopBound) { - line_ys.push(stem_y - 2); - } - else if (stem_direction === -1 && isBottomBound) { - line_ys.push(stem_y + 2); - } - }); - // Add the sorted y values to the - stem_lines.push(line_ys.sort((a, b) => a - b)); - }); - return stem_lines; -} -class TabNote extends _stemmablenote__WEBPACK_IMPORTED_MODULE_4__.StemmableNote { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_6__.Category.TabNote; - } - // Initialize the TabNote with a `noteStruct` full of properties - // and whether to `draw_stem` when rendering the note - constructor(noteStruct, draw_stem = false) { - super(noteStruct); - this.glyphPropsArr = []; - // Return the number of the greatest string, which is the string lowest on the display - this.greatestString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); - }; - // Return the number of the least string, which is the string highest on the display - this.leastString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); - }; - this.ghost = false; // Renders parenthesis around notes - // Note properties - // The fret positions in the note. An array of `{ str: X, fret: X }` - this.positions = noteStruct.positions || []; - // Render Options - this.render_options = Object.assign(Object.assign({}, this.render_options), { - // font size for note heads and rests - glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.TABLATURE_FONT_SCALE, - // Flag to draw a stem - draw_stem, - // Flag to draw dot modifiers - draw_dots: draw_stem, - // Flag to extend the main stem through the stave and fret positions - draw_stem_through_stave: false, - // vertical shift from stave line - y_shift: 0, - // normal glyph scale - scale: 1.0, - // default tablature font - font: `${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SIZE}pt ${_font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF}` }); - this.glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.getGlyphProps(this.duration, this.noteType); - (0,_util__WEBPACK_IMPORTED_MODULE_7__.defined)(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - this.buildStem(); - if (noteStruct.stem_direction) { - this.setStemDirection(noteStruct.stem_direction); - } - else { - this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP); - } - // Renders parenthesis around notes - this.ghost = false; - this.updateWidth(); - } - reset() { - super.reset(); - if (this.stave) - this.setStave(this.stave); - return this; - } - // Set as ghost `TabNote`, surrounds the fret positions with parenthesis. - // Often used for indicating frets that are being bent to - setGhost(ghost) { - this.ghost = ghost; - this.updateWidth(); - return this; - } - // Determine if the note has a stem - hasStem() { - if (this.render_options.draw_stem) - return true; - return false; - } - // Get the default stem extension for the note - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != null) { - return this.stem_extension_override; - } - if (glyphProps) { - return this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? glyphProps.tabnote_stem_up_extension - : glyphProps.tabnote_stem_down_extension; - } - return 0; - } - // Calculate and store the width of the note - updateWidth() { - this.glyphPropsArr = []; - this.width = 0; - for (let i = 0; i < this.positions.length; ++i) { - let fret = this.positions[i].fret; - if (this.ghost) - fret = '(' + fret + ')'; - const glyphProps = _tables__WEBPACK_IMPORTED_MODULE_5__.Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); - this.glyphPropsArr.push(glyphProps); - this.width = Math.max(glyphProps.getWidth(), this.width); - } - // For some reason we associate a notehead glyph with a TabNote, and this - // glyph is used for certain width calculations. Of course, this is totally - // incorrect since a notehead is a poor approximation for the dimensions of - // a fret number which can have multiple digits. As a result, we must - // overwrite getWidth() to return the correct width - this.glyphProps.getWidth = () => this.width; - } - // Set the `stave` to the note - setStave(stave) { - super.setStave(stave); - const ctx = stave.getContext(); - this.setContext(ctx); - // Calculate the fret number width based on font used - if (ctx) { - this.width = 0; - for (let i = 0; i < this.glyphPropsArr.length; ++i) { - const glyphProps = this.glyphPropsArr[i]; - const text = '' + glyphProps.text; - if (text.toUpperCase() !== 'X') { - ctx.save(); - ctx.setFont(this.render_options.font); - glyphProps.width = ctx.measureText(text).width; - ctx.restore(); - glyphProps.getWidth = () => glyphProps.width; - } - this.width = Math.max(glyphProps.getWidth(), this.width); - } - this.glyphProps.getWidth = () => this.width; - } - // we subtract 1 from `line` because getYForLine expects a 0-based index, - // while the position.str is a 1-based index - const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); - this.setYs(ys); - if (this.stem) { - this.stem.setYBounds(this.getStemY(), this.getStemY()); - } - return this; - } - // Get the fret positions for the note - getPositions() { - return this.positions; - } - // Get the default `x` and `y` coordinates for a modifier at a specific - // `position` at a fret position `index` - getModifierStartXY(position, index) { - if (!this.preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - let x = 0; - if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.LEFT) { - x = -1 * 2; // FIXME: modifier padding, move to font file - } - else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.RIGHT) { - x = this.width + 2; // FIXME: modifier padding, move to font file - } - else if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.BELOW || position === _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.ABOVE) { - const note_glyph_width = this.glyphProps.getWidth(); - x = note_glyph_width / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - // Get the default line for rest - getLineForRest() { - return Number(this.positions[0].str); - } - // Pre-render formatting - preFormat() { - if (this.preFormatted) - return; - if (this.modifierContext) - this.modifierContext.preFormat(); - // width is already set during init() - this.preFormatted = true; - } - // Get the x position for the stem - getStemX() { - return this.getCenterGlyphX(); - } - // Get the y position for the stem - getStemY() { - const num_lines = this.checkStave().getNumLines(); - // The decimal staff line amounts provide optimal spacing between the - // fret number and the stem - const stemUpLine = -0.5; - const stemDownLine = num_lines - 0.5; - const stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; - return this.checkStave().getYForLine(stemStartLine); - } - // Get the stem extents for the tabnote - getStemExtents() { - return this.checkStem().getExtents(); - } - // Draw the fal onto the context - drawFlag() { - var _a; - const { beam, glyphProps, render_options: { draw_stem }, } = this; - const context = this.checkContext(); - const shouldDrawFlag = beam == undefined && draw_stem; - // Now it's the flag's turn. - if (glyphProps.flag && shouldDrawFlag) { - const flag_x = this.getStemX(); - const flag_y = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.DOWN - ? // Down stems are below the note head and have flags on the right. - this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) - : // Up stems are above the note head and have flags on the right. - this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); - // Draw the Flag - //this.flag?.setOptions({ category: 'flag.tabStem' }); - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); - //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' }); - } - } - // Render the modifiers onto the context. - drawModifiers() { - this.modifiers.forEach((modifier) => { - // Only draw the dots if enabled. - if ((0,_typeguard__WEBPACK_IMPORTED_MODULE_6__.isDot)(modifier) && !this.render_options.draw_dots) { - return; - } - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - }); - } - // Render the stem extension through the fret positions - drawStemThrough() { - const stemX = this.getStemX(); - const stemY = this.getStemY(); - const ctx = this.checkContext(); - const drawStem = this.render_options.draw_stem; - const stemThrough = this.render_options.draw_stem_through_stave; - if (drawStem && stemThrough) { - const numLines = this.checkStave().getNumLines(); - const stringsUsed = this.positions.map((position) => Number(position.str)); - const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); - const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); - ctx.save(); - ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__.Stem.WIDTH); - stemLines.forEach((bounds) => { - if (bounds.length === 0) - return; - ctx.beginPath(); - ctx.moveTo(stemX, bounds[0]); - ctx.lineTo(stemX, bounds[bounds.length - 1]); - ctx.stroke(); - ctx.closePath(); - }); - ctx.restore(); - } - } - // Render the fret positions onto the context - drawPositions() { - var _a; - const ctx = this.checkContext(); - const x = this.getAbsoluteX(); - const ys = this.ys; - for (let i = 0; i < this.positions.length; ++i) { - const y = ys[i] + this.render_options.y_shift; - const glyphProps = this.glyphPropsArr[i]; - // Center the fret text beneath the notation note head - const note_glyph_width = this.glyphProps.getWidth(); - const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; - // FIXME: Magic numbers. - ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); - if (glyphProps.code) { - _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); - } - else { - ctx.save(); - ctx.setFont(this.render_options.font); - const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; - ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); - ctx.restore(); - } - } - } - // The main rendering function for the entire note. - draw() { - const ctx = this.checkContext(); - if (this.ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_7__.RuntimeError('NoYValues', "Can't draw note without Y values."); - } - this.setRendered(); - const render_stem = this.beam == undefined && this.render_options.draw_stem; - this.applyStyle(); - ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); - this.drawPositions(); - this.drawStemThrough(); - if (this.stem && render_stem) { - const stem_x = this.getStemX(); - this.stem.setNoteHeadXBounds(stem_x, stem_x); - this.stem.setContext(ctx).draw(); - } - this.drawFlag(); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(); - } -} - - -/***/ }), - -/***/ "./src/tabslide.ts": -/*!*************************!*\ - !*** ./src/tabslide.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabSlide": () => (/* binding */ TabSlide) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - - - -class TabSlide extends _tabtie__WEBPACK_IMPORTED_MODULE_1__.TabTie { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TabSlide; - } - static get SLIDE_UP() { - return 1; - } - static get SLIDE_DOWN() { - return -1; - } - static createSlideUp(notes) { - return new TabSlide(notes, TabSlide.SLIDE_UP); - } - static createSlideDown(notes) { - return new TabSlide(notes, TabSlide.SLIDE_DOWN); - } - /** - * @param notes is a struct of the form: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * @param notes.first_note the starting note of the slide - * @param notes.last_note the ending note of the slide - * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. - * @param notes.last_indices currently unused. we assume it's the same as first_indices. - * - * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN - */ - constructor(notes, direction) { - super(notes, 'sl.'); - // Determine the direction automatically if it is not provided. - if (!direction) { - let first_fret = notes.first_note.getPositions()[0].fret; - if (typeof first_fret === 'string') { - first_fret = parseInt(first_fret, 10); - } - let last_fret = notes.last_note.getPositions()[0].fret; - if (typeof last_fret === 'string') { - last_fret = parseInt(last_fret, 10); - } - // If either of the frets are 'X', parseInt() above will return NaN. - // Choose TabSlide.SLIDE_UP by default. - if (isNaN(first_fret) || isNaN(last_fret)) { - direction = TabSlide.SLIDE_UP; - } - else { - direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; - } - } - this.direction = direction; - this.render_options.cp1 = 11; - this.render_options.cp2 = 14; - this.render_options.y_shift = 0.5; - this.resetFont(); - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - const first_x_px = params.first_x_px; - const first_ys = params.first_ys; - const last_x_px = params.last_x_px; - const direction = params.direction; - if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadSlide', 'Invalid slide direction'); - } - // eslint-disable-next-line - const first_indices = this.notes.first_indices; - for (let i = 0; i < first_indices.length; ++i) { - const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; - if (isNaN(slide_y)) { - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('BadArguments', 'Bad indices for slide rendering.'); - } - ctx.beginPath(); - ctx.moveTo(first_x_px, slide_y + 3 * direction); - ctx.lineTo(last_x_px, slide_y - 3 * direction); - ctx.closePath(); - ctx.stroke(); - } - this.setRendered(); - } -} -TabSlide.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SERIF, - size: 10, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/tabstave.ts": -/*!*************************!*\ - !*** ./src/tabstave.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabStave": () => (/* binding */ TabStave) -/* harmony export */ }); -/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stave */ "./src/stave.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. - - -class TabStave extends _stave__WEBPACK_IMPORTED_MODULE_0__.Stave { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabStave; - } - constructor(x, y, width, options) { - const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); - super(x, y, width, tab_options); - } - getYForGlyphs() { - return this.getYForLine(2.5); - } - // Deprecated - addTabGlyph() { - this.addClef('tab'); - return this; - } -} - - -/***/ }), - -/***/ "./src/tabtie.ts": -/*!***********************!*\ - !*** ./src/tabtie.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TabTie": () => (/* binding */ TabTie) -/* harmony export */ }); -/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// This class implements varies types of ties between contiguous notes. The -// ties include: regular ties, hammer ons, pull offs, and slides. - - -class TabTie extends _stavetie__WEBPACK_IMPORTED_MODULE_0__.StaveTie { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.TabTie; - } - static createHammeron(notes) { - return new TabTie(notes, 'H'); - } - static createPulloff(notes) { - return new TabTie(notes, 'P'); - } - /** - * @param notes is a struct that has: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes, text) { - super(notes, text); - this.render_options.cp1 = 9; - this.render_options.cp2 = 11; - this.render_options.y_shift = 3; - this.direction = -1; // Tab tie's are always face up. - } -} - - -/***/ }), - -/***/ "./src/textbracket.ts": -/*!****************************!*\ - !*** ./src/textbracket.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextBracket": () => (/* binding */ TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* binding */ TextBracketPosition) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Cyril Silverman -// -// This file implements `TextBrackets` which extend between two notes. -// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created -// using this class. - - - - - - -// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`. -// eslint-disable-next-line -function L(...args) { - if (TextBracket.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_5__.log)('Vex.Flow.TextBracket', args); -} -var TextBracketPosition; -(function (TextBracketPosition) { - TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; - TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; -})(TextBracketPosition || (TextBracketPosition = {})); -class TextBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TextBracket; - } - static get Position() { - return TextBracketPosition; - } - static get PositionString() { - return { - top: TextBracketPosition.TOP, - bottom: TextBracketPosition.BOTTOM, - }; - } - /** - * @deprecated Use `TextBracket.Position` instead. - */ - static get Positions() { - L('Positions is deprecated, use TextBracketPosition instead.'); - return TextBracketPosition; - } - /** - * @deprecated Use `TextBracket.PositionString` instead. - */ - static get PositionsString() { - L('PositionsString is deprecated, use PositionString instead.'); - return TextBracket.PositionString; - } - constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { - super(); - this.start = start; - this.stop = stop; - this.text = text; - this.superscript = superscript; - this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; - this.line = 1; - this.resetFont(); - this.render_options = { - dashed: true, - dash: [5], - color: 'black', - line_width: 1, - show_bracket: true, - bracket_height: 8, - // In the BOTTOM position, the bracket line can extend - // under the superscript. - underline_superscript: true, - }; - } - /** - * Apply the text backet styling to the provided context. - * @param ctx - * @returns this - */ - applyStyle(ctx) { - ctx.setFont(this.font); - const options = this.render_options; - ctx.setStrokeStyle(options.color); - ctx.setFillStyle(options.color); - ctx.setLineWidth(options.line_width); - return this; - } - // Set whether the bracket line should be `dashed`. You can also - // optionally set the `dash` pattern by passing in an array of numbers - setDashed(dashed, dash) { - this.render_options.dashed = dashed; - if (dash) - this.render_options.dash = dash; - return this; - } - // Set the rendering `context` for the octave bracket - setLine(line) { - this.line = line; - return this; - } - // Draw the octave bracket on the rendering context - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let y = 0; - switch (this.position) { - case TextBracketPosition.TOP: - y = this.start.checkStave().getYForTopText(this.line); - break; - case TextBracketPosition.BOTTOM: - y = this.start.checkStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_3__.Tables.TEXT_HEIGHT_OFFSET_HACK); - break; - default: - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); - } - // Get the preliminary start and stop coordintates for the bracket - const start = { x: this.start.getAbsoluteX(), y }; - const stop = { x: this.stop.getAbsoluteX(), y }; - L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); - const bracket_height = this.render_options.bracket_height * this.position; - ctx.save(); - this.applyStyle(ctx); - // Draw text - ctx.fillText(this.text, start.x, start.y); - // Get the width and height for the octave number - const main_measure = ctx.measureText(this.text); - const main_width = main_measure.width; - const main_height = main_measure.height; - // Calculate the y position for the super script - const super_y = start.y - main_height / 2.5; - // We called this.resetFont() in the constructor, so we know this.textFont is available. - // eslint-disable-next-line - const { family, size, weight, style } = this.textFont; - // To draw the superscript, we scale the font size by 1/1.4. - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_1__.Font.scaleSize(size, 0.714286); - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, start.x + main_width + 1, super_y); - // Determine width and height of the superscript - const super_measure = ctx.measureText(this.superscript); - const super_width = super_measure.width; - const super_height = super_measure.height; - // Setup initial coordinates for the bracket line - let start_x = start.x; - let line_y = super_y; - const end_x = stop.x + this.stop.getGlyphProps().getWidth(); - // Adjust x and y coordinates based on position - if (this.position === TextBracketPosition.TOP) { - start_x += main_width + super_width + 5; - line_y -= super_height / 2.7; - } - else if (this.position === TextBracketPosition.BOTTOM) { - line_y += super_height / 2.7; - start_x += main_width + 2; - if (!this.render_options.underline_superscript) { - start_x += super_width; - } - } - if (this.render_options.dashed) { - // Main line - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); - // Ending Bracket - if (this.render_options.show_bracket) { - _renderer__WEBPACK_IMPORTED_MODULE_2__.Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); - } - } - else { - ctx.beginPath(); - ctx.moveTo(start_x, line_y); - // Main line - ctx.lineTo(end_x, line_y); - if (this.render_options.show_bracket) { - // Ending bracket - ctx.lineTo(end_x, line_y + bracket_height); - } - ctx.stroke(); - ctx.closePath(); - } - ctx.restore(); - } -} -TextBracket.DEBUG = false; -TextBracket.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_1__.Font.SERIF, - size: 15, - weight: _font__WEBPACK_IMPORTED_MODULE_1__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_1__.FontStyle.ITALIC, -}; - - -/***/ }), - -/***/ "./src/textdynamics.ts": -/*!*****************************!*\ - !*** ./src/textdynamics.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextDynamics": () => (/* binding */ TextDynamics) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (TextDynamics.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_3__.log)('Vex.Flow.TextDynamics', args); -} -/** - * `TextDynamics` renders traditional - * text dynamics markings, **ie: p, f, sfz, rfz, ppp** - * - * You can render any dynamics string that contains a combination of - * the following letters: P, M, F, Z, R, S - */ -class TextDynamics extends _note__WEBPACK_IMPORTED_MODULE_1__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TextDynamics; - } - /** The glyph data for each dynamics letter. */ - static get GLYPHS() { - return { - f: { - code: 'dynamicForte', - width: 12, - }, - p: { - code: 'dynamicPiano', - width: 14, - }, - m: { - code: 'dynamicMezzo', - width: 17, - }, - s: { - code: 'dynamicSforzando', - width: 10, - }, - z: { - code: 'dynamicZ', - width: 12, - }, - r: { - code: 'dynamicRinforzando', - width: 12, - }, - }; - } - /** - * Create the dynamics marking. - * - * A `TextDynamics` object inherits from `Note` so that it can be formatted - * within a `Voice`. - * - * @param noteStruct an object that contains a `duration` property and a - * `sequence` of letters that represents the letters to render. - */ - constructor(noteStruct) { - super(noteStruct); - this.sequence = (noteStruct.text || '').toLowerCase(); - this.line = noteStruct.line || 0; - this.glyphs = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 }); - L('New Dynamics Text: ', this.sequence); - } - /** Set the Stave line on which the note should be placed. */ - setLine(line) { - this.line = line; - return this; - } - /** Preformat the dynamics text. */ - preFormat() { - let total_width = 0; - // length of this.glyphs must be <= - // length of this.sequence, so if we're formatted before - // create new glyphs. - this.glyphs = []; - // Iterate through each letter - this.sequence.split('').forEach((letter) => { - // Get the glyph data for the letter - const glyph_data = TextDynamics.GLYPHS[letter]; - if (!glyph_data) - throw new _util__WEBPACK_IMPORTED_MODULE_3__.RuntimeError('Invalid dynamics character: ' + letter); - const size = (0,_util__WEBPACK_IMPORTED_MODULE_3__.defined)(this.render_options.glyph_font_size); - const glyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(glyph_data.code, size, { category: 'textNote' }); - // Add the glyph - this.glyphs.push(glyph); - total_width += glyph_data.width; - }); - // Store the width of the text - this.setWidth(total_width); - this.preFormatted = true; - return this; - } - /** Draw the dynamics text on the rendering context. */ - draw() { - this.setRendered(); - const x = this.getAbsoluteX(); - const y = this.checkStave().getYForLine(this.line + -3); - L('Rendering Dynamics: ', this.sequence); - let letter_x = x; - this.glyphs.forEach((glyph, index) => { - const current_letter = this.sequence[index]; - glyph.render(this.checkContext(), letter_x, y); - letter_x += TextDynamics.GLYPHS[current_letter].width; - }); - } -} -/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ -TextDynamics.DEBUG = false; - - -/***/ }), - -/***/ "./src/textformatter.ts": -/*!******************************!*\ - !*** ./src/textformatter.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextFormatter": () => (/* binding */ TextFormatter) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - -// eslint-disable-next-line -function L(...args) { - if (TextFormatter.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)('Vex.Flow.TextFormatter', args); -} -/** - * Text widths are stored in a cache, so we don't have to recompute widths - * for the same font + string combination. - * - * The cache is first keyed by the font information. The key is of the form: - * `${family}-${size}-${weight}-${style}` - * The second level key is the specific text to be measured. - * - * The stored value is the measured width in `em` units. - * textWidth == textWidthCache[cacheKey][textToMeasure] - */ -const textWidthCache = {}; -const textHeightCache = {}; -/** - * Applications may register additional fonts via `TextFormatter.registerInfo(info)`. - * The metrics for those fonts will be made available to the application. - */ -const registry = {}; -class TextFormatter { - /** - * Return all registered font families. - */ - static getFontFamilies() { - const registeredFonts = []; - for (const fontFamily in registry) { - const formatterInfo = registry[fontFamily]; - registeredFonts.push(Object.assign({}, formatterInfo)); - } - return registeredFonts; - } - /** - * Call `TextFormatter.registerInfo(info)` to register font information before using this method. - * - * This method creates a formatter for the font that most closely matches the requested font. - * We compare font family, bold, and italic attributes. - * This method will return a fallback formatter if there are no matches. - */ - static create(requestedFont = {}) { - L('create: ', requestedFont); - if (!requestedFont.family) { - requestedFont.family = _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF; - } - // TODO: One potential (small) optimization is to cache the TextFormatter object - // returned for each font info. We would probably want to clear the cache if - // the registry is ever updated. - const candidates = []; - // The incoming font family is a string of comma-separated font family names. - // (e.g., `PetalumaScript, Arial, sans-serif`). - const requestedFamilies = requestedFont.family.split(/\s*,\s*/); - for (const requestedFamily of requestedFamilies) { - for (const fontFamily in registry) { - // Support cases where the registry contains 'Roboto Slab Medium', - // but the requestedFont.family is 'Roboto Slab'. - if (fontFamily.startsWith(requestedFamily)) { - candidates.push(registry[fontFamily]); - } - } - if (candidates.length > 0) { - break; - } - } - let formatter; - if (candidates.length === 0) { - // No match, so return a fallback text formatter. - formatter = new TextFormatter(Object.values(registry)[0]); - } - else if (candidates.length === 1) { - formatter = new TextFormatter(candidates[0]); - } - else { - const bold = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isBold(requestedFont.weight); - const italic = _font__WEBPACK_IMPORTED_MODULE_0__.Font.isItalic(requestedFont.style); - const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); - if (perfectMatch) { - formatter = new TextFormatter(perfectMatch); - } - else { - const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); - if (partialMatch) { - formatter = new TextFormatter(partialMatch); - } - else { - formatter = new TextFormatter(candidates[0]); - } - } - } - const fontSize = requestedFont.size; - if (typeof fontSize !== 'undefined') { - const fontSizeInPt = _font__WEBPACK_IMPORTED_MODULE_0__.Font.convertSizeToPointValue(fontSize); - formatter.setFontSize(fontSizeInPt); - } - return formatter; - } - /** - * @param fontFamily used as a key to the font registry. - * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` - */ - static getInfo(fontFamily) { - return registry[fontFamily]; - } - /** - * Apps may register their own fonts and metrics, and those metrics - * will be available to the app for formatting. - * - * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. - * @param info - * @param overwrite - */ - static registerInfo(info, overwrite = false) { - L('registerInfo: ', info, overwrite); - const fontFamily = info.family; - const currFontInfo = registry[fontFamily]; - if (currFontInfo === undefined || overwrite) { - registry[fontFamily] = info; - } - } - /** - * Use `TextFormatter.create(...)` to build an instance from information previously - * registered via `TextFormatter.registerInfo(info)`. - */ - constructor(formatterInfo) { - /** Font family. */ - this.family = ''; - /** Specified in `pt` units. */ - this.size = 14; - /** Font metrics are extracted at 1000 upem (units per em). */ - this.resolution = 1000; - /** - * For text formatting, we do not require glyph outlines, but instead rely on glyph - * bounding box metrics such as: - * ``` - * { - * x_min: 48, - * x_max: 235, - * y_min: -17, - * y_max: 734, - * ha: 751, - * leftSideBearing: 48, - * advanceWidth: 286, - * } - * ``` - */ - this.glyphs = {}; - this.serifs = false; - this.monospaced = false; - this.italic = false; - this.bold = false; - this.superscriptOffset = 0; - this.subscriptOffset = 0; - this.maxSizeGlyph = '@'; - // This is an internal key used to index the `textWidthCache`. - this.cacheKey = ''; - this.updateParams(formatterInfo); - } - get localHeightCache() { - var _a; - if (textHeightCache[this.cacheKey] === undefined) { - textHeightCache[this.cacheKey] = {}; - } - return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; - } - updateParams(params) { - if (params.family) - this.family = params.family; - if (params.resolution) - this.resolution = params.resolution; - if (params.glyphs) - this.glyphs = params.glyphs; - if (params.serifs) - this.serifs = params.serifs; - if (params.monospaced) - this.monospaced = params.monospaced; - if (params.italic) - this.italic = params.italic; - if (params.bold) - this.bold = params.bold; - if (params.maxSizeGlyph) - this.maxSizeGlyph = params.maxSizeGlyph; - if (params.superscriptOffset) - this.superscriptOffset = params.superscriptOffset; - if (params.subscriptOffset) - this.subscriptOffset = params.subscriptOffset; - this.updateCacheKey(); - } - /** Create a hash with the current font data, so we can cache computed widths. */ - updateCacheKey() { - const family = this.family.replace(/\s+/g, '_'); - const size = this.size; - const weight = this.bold ? _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.BOLD : _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL; - const style = this.italic ? _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.ITALIC : _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL; - // Use the same key format as SVGContext. - this.cacheKey = `${family}%${size}%${weight}%${style}`; - } - /** - * The glyphs table is indexed by the character (e.g., 'C', '@'). - * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. - */ - getGlyphMetrics(character) { - if (this.glyphs[character]) { - return this.glyphs[character]; - } - else { - return this.glyphs[this.maxSizeGlyph]; - } - } - get maxHeight() { - const metrics = this.getGlyphMetrics(this.maxSizeGlyph); - return (metrics.ha / this.resolution) * this.fontSizeInPixels; - } - /** - * Retrieve the character's advanceWidth as a fraction of an `em` unit. - * For the space character ' ' as defined in the: - * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. - * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. - */ - getWidthForCharacterInEm(c) { - var _a; - const metrics = this.getGlyphMetrics(c); - if (!metrics) { - // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript. - return 0.65; - } - else { - const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; - return advanceWidth / this.resolution; - } - } - /** - * Retrieve the character's y bounds (ymin, ymax) and height. - */ - getYForCharacterInPx(c) { - const metrics = this.getGlyphMetrics(c); - const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - if (!metrics) { - return rv; - } - else { - if (typeof metrics.y_min === 'number') { - rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; - } - if (typeof metrics.y_max === 'number') { - rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; - } - rv.height = rv.yMax - rv.yMin; - return rv; - } - } - getYForStringInPx(str) { - const entry = this.localHeightCache; - const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - const cache = entry[str]; - if (cache !== undefined) { - return cache; - } - for (let i = 0; i < str.length; ++i) { - const curY = this.getYForCharacterInPx(str[i]); - extent.yMin = Math.min(extent.yMin, curY.yMin); - extent.yMax = Math.max(extent.yMax, curY.yMax); - extent.height = extent.yMax - extent.yMin; - } - entry[str] = extent; - return extent; - } - /** - * Retrieve the total width of `text` in `em` units. - */ - getWidthForTextInEm(text) { - const key = this.cacheKey; - // Get the cache for this specific font family, size, weight, style combination. - // The cache contains previously computed widths for different `text` strings. - let cachedWidths = textWidthCache[key]; - if (cachedWidths === undefined) { - cachedWidths = {}; - textWidthCache[key] = cachedWidths; - } - let width = cachedWidths[text]; - if (width === undefined) { - width = 0; - for (let i = 0; i < text.length; ++i) { - width += this.getWidthForCharacterInEm(text[i]); - } - cachedWidths[text] = width; - } - return width; - } - /** The width of the text (in `em`) is scaled by the font size (in `px`). */ - getWidthForTextInPx(text) { - return this.getWidthForTextInEm(text) * this.fontSizeInPixels; - } - /** - * @param size in pt. - */ - setFontSize(size) { - this.size = size; - // The width cache key depends on the current font size. - this.updateCacheKey(); - return this; - } - /** `this.size` is specified in points. Convert to pixels. */ - get fontSizeInPixels() { - return this.size * _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleToPxFrom.pt; - } - getResolution() { - return this.resolution; - } -} -/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ -TextFormatter.DEBUG = false; - - -/***/ }), - -/***/ "./src/textnote.ts": -/*!*************************!*\ - !*** ./src/textnote.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TextJustification": () => (/* binding */ TextJustification), -/* harmony export */ "TextNote": () => (/* binding */ TextNote) -/* harmony export */ }); -/* harmony import */ var _font__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./font */ "./src/font.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var TextJustification; -(function (TextJustification) { - TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; - TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; - TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; -})(TextJustification || (TextJustification = {})); -/** - * `TextNote` is a notation element that is positioned in time. Generally - * meant for objects that sit above/below the staff and inline with each other. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - * Examples of this would be such as dynamics, lyrics, chord changes, etc. - */ -class TextNote extends _note__WEBPACK_IMPORTED_MODULE_2__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.TextNote; - } - /** Glyph data. */ - static get GLYPHS() { - return { - segno: { - code: 'segno', - }, - tr: { - code: 'ornamentTrill', - }, - mordent: { - code: 'ornamentMordent', - }, - mordent_upper: { - code: 'ornamentShortTrill', - }, - mordent_lower: { - code: 'ornamentMordent', - }, - f: { - code: 'dynamicForte', - }, - p: { - code: 'dynamicPiano', - }, - m: { - code: 'dynamicMezzo', - }, - s: { - code: 'dynamicSforzando', - }, - z: { - code: 'dynamicZ', - }, - coda: { - code: 'coda', - }, - pedal_open: { - code: 'keyboardPedalPed', - }, - pedal_close: { - code: 'keyboardPedalUp', - }, - caesura_straight: { - code: 'caesura', - }, - caesura_curved: { - code: 'caesuraCurved', - }, - breath: { - code: 'breathMarkComma', - }, - tick: { - code: 'breathMarkTick', - }, - turn: { - code: 'ornamentTurn', - }, - turn_inverted: { - code: 'ornamentTurnSlash', - }, - }; - } - constructor(noteStruct) { - super(noteStruct); - this.text = noteStruct.text || ''; - this.superscript = noteStruct.superscript; - this.subscript = noteStruct.subscript; - this.setFont(noteStruct.font); - this.line = noteStruct.line || 0; - this.smooth = noteStruct.smooth || false; - this.ignore_ticks = noteStruct.ignore_ticks || false; - this.justification = TextJustification.LEFT; - // Determine and set initial note width. Note that the text width is - // an approximation and isn't very accurate. The only way to accurately - // measure the length of text is with `CanvasRenderingContext2D.measureText()`. - if (noteStruct.glyph) { - const struct = TextNote.GLYPHS[noteStruct.glyph]; - if (!struct) - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('Invalid glyph type: ' + noteStruct.glyph); - this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__.Glyph(struct.code, 40, { category: 'textNote' }); - this.setWidth(this.glyph.getMetrics().width); - } - else { - this.glyph = undefined; - } - } - /** Set the horizontal justification of the TextNote. */ - setJustification(just) { - this.justification = just; - return this; - } - /** Set the Stave line on which the note should be placed. */ - setLine(line) { - this.line = line; - return this; - } - /** Return the Stave line on which the TextNote is placed. */ - getLine() { - return this.line; - } - /** Return the unformatted text of this TextNote. */ - getText() { - return this.text; - } - /** Pre-render formatting. */ - preFormat() { - if (this.preFormatted) - return; - const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); - if (this.smooth) { - this.setWidth(0); - } - else { - if (this.glyph) { - // Width already set. - } - else { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - this.setWidth(ctx.measureText(this.text).width); - } - } - if (this.justification === TextJustification.CENTER) { - this.leftDisplacedHeadPx = this.width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - this.leftDisplacedHeadPx = this.width; - } - // We reposition to the center of the note head - this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; - this.preFormatted = true; - } - /** - * Renders the TextNote. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - */ - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); - this.setRendered(); - // Reposition to center of note head - let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; - // Align based on tick-context width. - const width = this.getWidth(); - if (this.justification === TextJustification.CENTER) { - x -= width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - x -= width; - } - let y; - if (this.glyph) { - y = stave.getYForLine(this.line + -3); - this.glyph.render(ctx, x, y); - } - else { - y = stave.getYForLine(this.line + -3); - this.applyStyle(ctx); - ctx.setFont(this.textFont); - ctx.fillText(this.text, x, y); - const height = ctx.measureText(this.text).height; - // We called this.setFont(...) in the constructor, so we know this.textFont is available. - // eslint-disable-next-line - const { family, size, weight, style } = this.textFont; - // Scale the font size by 1/1.3. - const smallerFontSize = _font__WEBPACK_IMPORTED_MODULE_0__.Font.scaleSize(size, 0.769231); - if (this.superscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); - } - if (this.subscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); - } - this.restoreStyle(ctx); - } - } -} -TextNote.TEXT_FONT = { - family: _font__WEBPACK_IMPORTED_MODULE_0__.Font.SANS_SERIF, - size: 12, - weight: _font__WEBPACK_IMPORTED_MODULE_0__.FontWeight.NORMAL, - style: _font__WEBPACK_IMPORTED_MODULE_0__.FontStyle.NORMAL, -}; -TextNote.Justification = TextJustification; - - -/***/ }), - -/***/ "./src/tickable.ts": -/*!*************************!*\ - !*** ./src/tickable.ts ***! - \*************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tickable": () => (/* binding */ Tickable) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -/** - * Tickable represents a element that sit on a score and - * has a duration, i.e., Tickables occupy space in the musical rendering dimension. - */ -class Tickable extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Tickable; - } - constructor() { - super(); - this._preFormatted = false; - this._postFormatted = false; - // These properties represent the duration of - // this tickable element. - this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); // Fractional value of ticks - this.intrinsicTicks = 0; // Floating point value of ticks - this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(1, 1); - // Formatter metrics - this.width = 0; - this.x_shift = 0; // Shift from tick context - this.modifiers = []; - this.tupletStack = []; - this.align_center = false; - this.center_x_shift = 0; // Shift from tick context if center aligned - // This flag tells the formatter to ignore this tickable during - // formatting and justification. It is set by tickables such as BarNote. - this.ignore_ticks = false; - // This is a space for an external formatting class or function to maintain - // metrics. - this.formatterMetrics = { - // The freedom of a tickable is the distance it can move without colliding - // with neighboring elements. A formatter can set these values during its - // formatting pass, which a different formatter can then use to fine tune. - freedom: { left: 0, right: 0 }, - // The simplified rational duration of this tick as a string. It can be - // used as an index to a map or hashtable. - duration: '', - // The number of formatting iterations undergone. - iterations: 0, - // The space in pixels allocated by this formatter, along with the mean space - // for tickables of this duration, and the deviation from the mean. - space: { - used: 0, - mean: 0, - deviation: 0, - }, - }; - } - /** Reset the Tickable, this function will be overloaded. */ - reset() { - return this; - } - /** Return the ticks. */ - getTicks() { - return this.ticks; - } - /** Check if it ignores the ticks. */ - shouldIgnoreTicks() { - return this.ignore_ticks; - } - /** Ignore the ticks. */ - setIgnoreTicks(flag) { - this.ignore_ticks = flag; - return this; - } - /** Set width of note. Used by the formatter for positioning. */ - setWidth(width) { - this.width = width; - } - /** Get width of note. Used by the formatter for positioning. */ - getWidth() { - if (!this._preFormatted) { - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); - } - return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); - } - /** Displace note by `x` pixels. Used by the formatter. */ - setXShift(x) { - this.x_shift = x; - return this; - } - /** Get the `x` displaced pixels of the note. */ - getXShift() { - return this.x_shift; - } - /** Get `x` position of this tick context. */ - getX() { - const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); - return tickContext.getX() + this.x_shift; - } - /** Return the formatterMetrics. */ - getFormatterMetrics() { - return this.formatterMetrics; - } - /** Return the center `x` shift. */ - getCenterXShift() { - if (this.isCenterAligned()) { - return this.center_x_shift; - } - return 0; - } - /** Set the center `x` shift. */ - setCenterXShift(centerXShift) { - this.center_x_shift = centerXShift; - return this; - } - // Check if tickable is center aligned. */ - isCenterAligned() { - return this.align_center; - } - // Set/unset center alignment. */ - setCenterAlignment(align_center) { - this.align_center = align_center; - return this; - } - /** - * Return the associated voice. Every tickable must be associated with a voice. - * This allows formatters and preFormatter to associate them with the right modifierContexts. - */ - getVoice() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.voice, 'NoVoice', 'Tickable has no voice.'); - } - /** Set the associated voice. */ - setVoice(voice) { - this.voice = voice; - } - /** Get the tuplet. */ - getTuplet() { - return this.tuplet; - } - /** Return a list of Tuplets. */ - getTupletStack() { - return this.tupletStack; - } - /** - * Reset the specific Tuplet (if this is not provided, all tuplets are reset). - * Remove any prior tuplets from the tick calculation and - * reset the intrinsic tick value. - */ - resetTuplet(tuplet) { - let noteCount; - let notesOccupied; - if (tuplet) { - const i = this.tupletStack.indexOf(tuplet); - if (i !== -1) { - this.tupletStack.splice(i, 1); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - // Revert old multiplier by inverting numerator & denom.: - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - while (this.tupletStack.length) { - tuplet = this.tupletStack.pop(); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - // Revert old multiplier by inverting numerator & denom.: - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - /** Attach to new tuplet. */ - setTuplet(tuplet) { - if (tuplet) { - this.tupletStack.push(tuplet); - const noteCount = tuplet.getNoteCount(); - const notesOccupied = tuplet.getNotesOccupied(); - this.applyTickMultiplier(notesOccupied, noteCount); - } - this.tuplet = tuplet; - return this; - } - /** - * Add self to the provided ModifierContext `mc`. - * If this tickable has modifiers, set modifierContext. - * @returns this - */ - addToModifierContext(mc) { - this.modifierContext = mc; - for (let i = 0; i < this.modifiers.length; ++i) { - this.modifierContext.addMember(this.modifiers[i]); - } - this.modifierContext.addMember(this); - this._preFormatted = false; - return this; - } - /** - * Optional, if tickable has modifiers, associate a Modifier. - * @param mod the modifier - */ - // eslint-disable-next-line @typescript-eslint/no-unused-vars - addModifier(modifier, index = 0) { - this.modifiers.push(modifier); - this._preFormatted = false; - return this; - } - /** Get the list of associated modifiers. */ - getModifiers() { - return this.modifiers; - } - /** Set the Tick Context. */ - setTickContext(tc) { - this.tickContext = tc; - this._preFormatted = false; - } - checkTickContext(message = 'Tickable has no tick context.') { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.tickContext, 'NoTickContext', message); - } - /** Preformat the Tickable. */ - preFormat() { - if (this._preFormatted) - return; - this.width = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - this.width += this.modifierContext.getWidth(); - } - } - /** Set preformatted status. */ - set preFormatted(value) { - this._preFormatted = value; - } - get preFormatted() { - return this._preFormatted; - } - /** Postformat the Tickable. */ - postFormat() { - if (this._postFormatted) - return this; - this._postFormatted = true; - return this; - } - /** Set postformatted status. */ - set postFormatted(value) { - this._postFormatted = value; - } - get postFormatted() { - return this._postFormatted; - } - /** Return the intrinsic ticks. */ - getIntrinsicTicks() { - return this.intrinsicTicks; - } - /** Set the intrinsic ticks. */ - setIntrinsicTicks(intrinsicTicks) { - this.intrinsicTicks = intrinsicTicks; - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - /** Get the tick multiplier. */ - getTickMultiplier() { - return this.tickMultiplier; - } - /** Apply a tick multiplier. */ - applyTickMultiplier(numerator, denominator) { - this.tickMultiplier.multiply(numerator, denominator); - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - /** Set the duration. */ - setDuration(duration) { - const ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION / duration.denominator); - this.ticks = this.tickMultiplier.clone().multiply(ticks); - this.intrinsicTicks = this.ticks.value(); - } - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - return tickContext.getX(); - } - /** Attach this note to a modifier context. */ - setModifierContext(mc) { - this.modifierContext = mc; - return this; - } - /** Get `ModifierContext`. */ - getModifierContext() { - return this.modifierContext; - } - /** Check and get `ModifierContext`. */ - checkModifierContext() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); - } -} - - -/***/ }), - -/***/ "./src/tickcontext.ts": -/*!****************************!*\ - !*** ./src/tickcontext.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TickContext": () => (/* binding */ TickContext) -/* harmony export */ }); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// A formatter for abstract tickable objects, such as notes, chords, -// tabs, etc. - - -/** - * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. - */ -class TickContext { - static getNextContext(tContext) { - const contexts = tContext.tContexts; - const index = contexts.indexOf(tContext); - if (index + 1 < contexts.length) - return contexts[index + 1]; - } - constructor(options) { - this.preFormatted = false; - this.postFormatted = false; - this.tickID = options && options.tickID ? options.tickID : 0; - this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_0__.Fraction(0, 1); - this.maxTickable = undefined; // Biggest tickable - this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks - this.minTickable = undefined; - this.padding = 1; // padding on each side (width += padding * 2) - this.x = 0; - this.xBase = 0; // base x position without xOffset - this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO) - this.tickables = []; // Notes, tabs, chords, lyrics. - this.tickablesByVoice = {}; // Tickables indexed by voice number - // Formatting metrics - this.notePx = 0; // width of widest note in this context - this.glyphPx = 0; // width of glyph (note head) - this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes - this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes - this.modLeftPx = 0; // Left modifier pixels - this.modRightPx = 0; // Right modifier pixels - this.totalLeftPx = 0; // Total left pixels - this.totalRightPx = 0; // Total right pixels - this.tContexts = []; // Parent array of tick contexts - this.width = 0; - this.formatterMetrics = { - // The freedom of a tickcontext is the distance it can move without colliding - // with neighboring elements. A formatter can set these values during its - // formatting pass, which a different formatter can then use to fine tune. - freedom: { left: 0, right: 0 }, - }; - } - getTickID() { - return this.tickID; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - this.xBase = x; - this.xOffset = 0; - return this; - } - getXBase() { - return this.xBase; - } // use of xBase and xOffset is optional, avoids offset creep - setXBase(xBase) { - this.xBase = xBase; - this.x = xBase + this.xOffset; - } - getXOffset() { - return this.xOffset; - } - setXOffset(xOffset) { - this.xOffset = xOffset; - this.x = this.xBase + xOffset; - } - getWidth() { - return this.width + this.padding * 2; - } - setPadding(padding) { - this.padding = padding; - return this; - } - getMaxTicks() { - return this.maxTicks; - } - getMinTicks() { - return this.minTicks; - } - getMaxTickable() { - return this.maxTickable; - } - getMinTickable() { - return this.minTickable; - } - getTickables() { - return this.tickables; - } - /** - * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). - * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 - * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. - */ - getTickableForVoice(voiceIndex) { - return this.tickablesByVoice[voiceIndex]; - } - getTickablesByVoice() { - return this.tickablesByVoice; - } - getCenterAlignedTickables() { - return this.tickables.filter((tickable) => tickable.isCenterAligned()); - } - /** Gets widths context, note and left/right modifiers for formatting. */ - getMetrics() { - const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; - return { - width, - glyphPx, - notePx, - leftDisplacedHeadPx, - rightDisplacedHeadPx, - modLeftPx, - modRightPx, - totalLeftPx, - totalRightPx, - }; - } - getCurrentTick() { - return this.currentTick; - } - setCurrentTick(tick) { - this.currentTick = tick; - this.preFormatted = false; - } - addTickable(tickable, voiceIndex) { - if (!tickable) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid tickable added.'); - } - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - if (ticks.greaterThan(this.maxTicks)) { - this.maxTicks = ticks.clone(); - this.maxTickable = tickable; - } - if (this.minTicks == null) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - else if (ticks.lessThan(this.minTicks)) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - } - tickable.setTickContext(this); - this.tickables.push(tickable); - this.tickablesByVoice[voiceIndex || 0] = tickable; - this.preFormatted = false; - return this; - } - preFormat() { - if (this.preFormatted) - return this; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - tickable.preFormat(); - const metrics = tickable.getMetrics(); - // Maintain max displaced head pixels from all tickables in the context - this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); - this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); - // Maintain the widest note for all tickables in the context - this.notePx = Math.max(this.notePx, metrics.notePx); - // Maintain the widest note head - this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); - // Total modifier shift - this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); - this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); - // Total shift - this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); - this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); - // Recalculate the tick context total width - this.width = this.notePx + this.totalLeftPx + this.totalRightPx; - } - return this; - } - postFormat() { - if (this.postFormatted) - return this; - this.postFormatted = true; - return this; - } - getFormatterMetrics() { - return this.formatterMetrics; - } -} - - -/***/ }), - -/***/ "./src/timesigglyph.ts": -/*!*****************************!*\ - !*** ./src/timesigglyph.ts ***! - \*****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSignatureGlyph": () => (/* binding */ TimeSignatureGlyph) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Renders time signatures glyphs for staffs -// This class is used by TimeSignature to render the associated glyphs - - -class TimeSignatureGlyph extends _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph { - constructor(timeSignature, topDigits, botDigits, code, point, options) { - var _a; - super(code, point, options); - this.timeSignature = timeSignature; - this.topGlyphs = []; - this.botGlyphs = []; - let topWidth = 0; - for (let i = 0; i < topDigits.length; ++i) { - let timeSigType = topDigits[i]; - switch (topDigits[i]) { - case '-': - timeSigType = 'Minus'; - break; - case '+': - timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; - break; - case '(': - timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; - break; - case ')': - timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; - break; - } - const topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.topGlyphs.push(topGlyph); - topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; - } - let botWidth = 0; - for (let i = 0; i < botDigits.length; ++i) { - let timeSigType = botDigits[i]; - switch (botDigits[i]) { - case '+': - timeSigType = 'PlusSmall'; - break; - case '(': - timeSigType = 'ParensLeftSmall'; - break; - case ')': - timeSigType = 'ParensRightSmall'; - break; - } - const botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.botGlyphs.push(botGlyph); - botWidth += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(botGlyph.getMetrics().width); - } - this.width = Math.max(topWidth, botWidth); - this.xMin = this.getMetrics().x_min; - this.topStartX = (this.width - topWidth) / 2.0; - this.botStartX = (this.width - botWidth) / 2.0; - this.reset(); - } - getMetrics() { - return { - x_min: this.xMin, - x_max: this.xMin + this.width, - width: this.width, - }; - } - renderToStave(x) { - const stave = this.checkStave(); - const ctx = this.checkContext(); - let start_x = x + this.topStartX; - let y = 0; - if (this.botGlyphs.length > 0) - y = stave.getYForLine(this.timeSignature.topLine); - else - y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; - for (let i = 0; i < this.topGlyphs.length; ++i) { - const glyph = this.topGlyphs[i]; - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); - start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); - } - start_x = x + this.botStartX; - y = stave.getYForLine(this.timeSignature.bottomLine); - for (let i = 0; i < this.botGlyphs.length; ++i) { - const glyph = this.botGlyphs[i]; - this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); - start_x += (0,_util__WEBPACK_IMPORTED_MODULE_1__.defined)(glyph.getMetrics().width); - } - } -} - - -/***/ }), - -/***/ "./src/timesignature.ts": -/*!******************************!*\ - !*** ./src/timesignature.ts ***! - \******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSignature": () => (/* binding */ TimeSignature) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _timesigglyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./timesigglyph */ "./src/timesigglyph.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// ## Description -// Implements time signatures glyphs for staffs -// See tables.js for the internal time signatures -// representation - - - - - - -const assertIsValidTimeSig = (timeSpec) => { - const numbers = timeSpec.split('/'); - if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); - } - numbers.forEach((number) => { - // Characters consisting in number 0..9, '+', '-', '(' or ')' - if (/^[0-9+\-()]+$/.test(number) == false) { - throw new _util__WEBPACK_IMPORTED_MODULE_5__.RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); - } - }); -}; -/** - * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from - * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced - * such as "3/4(6/8)" or "2/4+5/8". - */ -class TimeSignature extends _stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_4__.Category.TimeSignature; - } - static get glyphs() { - return { - C: { - code: 'timeSigCommon', - point: 40, - line: 2, - }, - 'C|': { - code: 'timeSigCutCommon', - point: 40, - line: 2, - }, - }; - } - constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { - super(); - this.timeSpec = '4/4'; - this.line = 0; - this.is_numeric = true; - this.validate_args = validate_args; - const padding = customPadding; - // point must be defined before parsing spec. - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.currentMusicFont(); - this.point = musicFont.lookupMetric('digits.point'); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.topLine = 2 + fontLineShift; - this.bottomLine = 4 + fontLineShift; - this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__.StaveModifierPosition.BEGIN); - this.setTimeSig(timeSpec); - this.setPadding(padding); - } - /** - * Return TimeSignatureInfo given a string, consisting of line (number), - * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or - * TimeSignatureGlyph object). - */ - parseTimeSpec(timeSpec) { - var _a, _b; - if (timeSpec === 'C' || timeSpec === 'C|') { - const { line, code, point } = TimeSignature.glyphs[timeSpec]; - return { - line, - num: false, - glyph: new _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph(code, point), - }; - } - if (this.validate_args) { - assertIsValidTimeSig(timeSpec); - } - const parts = timeSpec.split('/'); - return { - line: 0, - num: true, - glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), - }; - } - /** - * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both - * top and bottom digits along with plus signs etc.) - */ - makeTimeSignatureGlyph(topDigits, botDigits) { - // note that 'code' is ignored by TimeSignatureGlyph when rendering. - return new _timesigglyph__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); - } - /** - * Returns {line, num (=getIsNumeric), glyph} -- - * but these can also be accessed directly w/ getters and setters. - */ - getInfo() { - const { line, is_numeric, glyph } = this; - return { line, num: is_numeric, glyph }; - } - /** - * Set a new time signature specification without changing customPadding, etc. - * - * The getter for this is `getTimeSpec` not `getTimeSig`. - */ - setTimeSig(timeSpec) { - this.timeSpec = timeSpec; - const info = this.parseTimeSpec(timeSpec); - this.setGlyph(info.glyph); - this.is_numeric = info.num; - this.line = info.line; - return this; - } - /** - * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature - */ - getTimeSpec() { - return this.timeSpec; - } - /** - * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ - * denominator time signatures such as 3/4 and 2 for cut/common. - */ - getLine() { - return this.line; - } - /** - * Set the line number that the TimeSignature sits on. Half-values are acceptable - * for spaces, etc. Can be altered, for instance, for signatures that sit above the - * staff in large orchestral scores. - */ - setLine(line) { - this.line = line; - } - /** - * Get the Glyph object used to create the time signature. Numeric time signatures - * such as 3/8 have a composite Glyph stored as a single Glyph object. - */ - getGlyph() { - return this.glyph; - } - /** - * Set the Glyph object used to draw the time signature, and update the width of the - * TimeSignature to match. The Glyph must define width in its metrics. - */ - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth((0,_util__WEBPACK_IMPORTED_MODULE_5__.defined)(this.glyph.getMetrics().width)); - } - /** - * Return a boolean on whether this TimeSignature is drawn with one or more numbers - * (such as 4/4) or not (as in cut time). - */ - getIsNumeric() { - return this.is_numeric; - } - /** - * Set whether this TimeSignature is drawn with one or more numbers. - */ - setIsNumeric(isNumeric) { - this.is_numeric = isNumeric; - } - /** - * Draw the time signature on a Stave using its RenderContext. Both setStave - * and setContext must already be run. - */ - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('timesignature', this.getAttribute('id')); - this.glyph.setStave(stave); - this.glyph.setContext(ctx); - this.placeGlyphOnLine(this.glyph, stave, this.line); - this.glyph.renderToStave(this.x); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} - - -/***/ }), - -/***/ "./src/timesignote.ts": -/*!****************************!*\ - !*** ./src/timesignote.ts ***! - \****************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "TimeSigNote": () => (/* binding */ TimeSigNote) -/* harmony export */ }); -/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.ts"); -/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author Taehoon Moon 2014 - - - -class TimeSigNote extends _note__WEBPACK_IMPORTED_MODULE_0__.Note { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_2__.Category.TimeSigNote; - } - constructor(timeSpec, customPadding) { - super({ duration: 'b' }); - this.timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_1__.TimeSignature(timeSpec, customPadding); - this.setWidth(this.timeSig.getGlyph().getMetrics().width); - // Note properties - this.ignore_ticks = true; - } - /* Overridden to ignore */ - // eslint-disable-next-line - addToModifierContext(mc) { - // DO NOTHING. - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const tsGlyph = this.timeSig.getGlyph(); - if (!tsGlyph.getContext()) { - tsGlyph.setContext(ctx); - } - tsGlyph.setStave(stave); - tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); - tsGlyph.renderToStave(this.getAbsoluteX()); - } -} - - -/***/ }), - -/***/ "./src/tremolo.ts": -/*!************************!*\ - !*** ./src/tremolo.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tremolo": () => (/* binding */ Tremolo) -/* harmony export */ }); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Mike Corrigan -// MIT License - - - - - - -/** Tremolo implements tremolo notation. */ -class Tremolo extends _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tremolo; - } - /** - * @param num number of bars - */ - constructor(num) { - super(); - this.num = num; - this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__.Modifier.Position.CENTER; - this.code = 'tremolo1'; - // big strokes scales initialised to 1 (no scale) - this.y_spacing_scale = 1; - this.extra_stroke_scale = 1; - } - /** Draw the tremolo on the rendering context. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDirection = note.getStemDirection(); - const start = note.getModifierStartXY(this.position, this.index); - let x = start.x; - const gn = (0,_typeguard__WEBPACK_IMPORTED_MODULE_5__.isGraceNote)(note); - const scale = gn ? _gracenote__WEBPACK_IMPORTED_MODULE_1__.GraceNote.SCALE : 1; - const category = `tremolo.${gn ? 'grace' : 'default'}`; - const musicFont = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont(); - let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; - // add y_spacing_scale for big strokes (#1258) - y_spacing *= this.y_spacing_scale; - const height = this.num * y_spacing; - let y = note.getStemExtents().baseY - height; - if (stemDirection < 0) { - y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; - } - else { - y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; - } - const fontScale = musicFont.lookupMetric(`${category}.point`); - x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP ? 'Up' : 'Down'}`); - for (let i = 0; i < this.num; ++i) { - _glyph__WEBPACK_IMPORTED_MODULE_0__.Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); - y += y_spacing; - } - } -} - - -/***/ }), - -/***/ "./src/tuning.ts": -/*!***********************!*\ - !*** ./src/tuning.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tuning": () => (/* binding */ Tuning) -/* harmony export */ }); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - -/** `Tuning` implements varies types of tunings for tablature. */ -class Tuning { - static get names() { - return { - standard: 'E/5,B/4,G/4,D/4,A/3,E/3', - dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', - dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', - eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', - standardBanjo: 'D/5,B/4,G/4,D/4,G/5', - }; - } - /** - * Constructor. - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { - this.tuningValues = []; - // Default to standard tuning. - this.setTuning(tuningString); - } - /** Return the note number associated to the note string. */ - noteToInteger(noteString) { - var _a; - return (_a = _tables__WEBPACK_IMPORTED_MODULE_0__.Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; - } - /** - * Set tuning identified by tuning name (eg. 'dagdad') - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - setTuning(tuningString) { - if (Tuning.names[tuningString]) { - tuningString = Tuning.names[tuningString]; - } - this.tuningValues = []; - const keys = tuningString.split(/\s*,\s*/); - if (keys.length === 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); - } - for (let i = 0; i < keys.length; ++i) { - this.tuningValues[i] = this.noteToInteger(keys[i]); - } - } - /** Return the note number associated with a tablature string. */ - getValueForString(stringNum) { - const s = Number(stringNum); - if (s < 1 || s > this.tuningValues.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); - } - return this.tuningValues[s - 1]; - } - /** Return the note number associated with a tablature string and fret. */ - getValueForFret(fretNum, stringNum) { - const stringValue = this.getValueForString(stringNum); - const f = Number(fretNum); - if (f < 0) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); - } - return stringValue + f; - } - /** Return the note string associated with tablature string and fret. */ - getNoteForFret(fretNum, stringNum) { - const noteValue = this.getValueForFret(fretNum, stringNum); - const octave = Math.floor(noteValue / 12); - const value = noteValue % 12; - return `${_tables__WEBPACK_IMPORTED_MODULE_0__.Tables.integerToNote(value)}/${octave}`; - } -} - - -/***/ }), - -/***/ "./src/tuplet.ts": -/*!***********************!*\ - !*** ./src/tuplet.ts ***! - \***********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Tuplet": () => (/* binding */ Tuplet), -/* harmony export */ "TupletLocation": () => (/* binding */ TupletLocation) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./formatter */ "./src/formatter.ts"); -/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.ts"); -/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -/** - * ## Description - * - * Create a new tuplet from the specified notes. The notes must - * be part of the same voice. If they are of different rhythmic - * values, then options.num_notes must be set. - * - * @constructor - * @param {Array.} A set of notes: staveNotes, - * notes, etc... any class that inherits stemmableNote at some - * point in its prototype chain. - * @param options: object { - * - * num_notes: fit this many notes into... - * notes_occupied: ...the space of this many notes - * - * Together, these two properties make up the tuplet ratio - * in the form of num_notes : notes_occupied. - * num_notes defaults to the number of notes passed in, so - * it is important that if you omit this property, all of - * the notes passed should be of the same note value. - * notes_occupied defaults to 2 -- so you should almost - * certainly pass this parameter for anything other than - * a basic triplet. - * - * location: - * default 1, which is above the notes: ┌─── 3 ───┐ - * -1 is below the notes └─── 3 ───┘ - * - * bracketed: boolean, draw a bracket around the tuplet number - * when true: ┌─── 3 ───┐ when false: 3 - * defaults to true if notes are not beamed, false otherwise - * - * ratioed: boolean - * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ - * defaults to true if the difference between num_notes and - * notes_occupied is greater than 1. - * - * y_offset: int, default 0 - * manually offset a tuplet, for instance to avoid collisions - * with articulations, etc... - * } - */ - - - - - - - -var TupletLocation; -(function (TupletLocation) { - TupletLocation[TupletLocation["BOTTOM"] = -1] = "BOTTOM"; - TupletLocation[TupletLocation["TOP"] = 1] = "TOP"; -})(TupletLocation || (TupletLocation = {})); -class Tuplet extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_5__.Category.Tuplet; - } - static get LOCATION_TOP() { - return TupletLocation.TOP; - } - static get LOCATION_BOTTOM() { - return TupletLocation.BOTTOM; - } - static get NESTING_OFFSET() { - return 15; - } - static get metrics() { - const tupletMetrics = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().getMetrics().tuplet; - if (!tupletMetrics) - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadMetrics', `tuplet missing`); - return tupletMetrics; - } - constructor(notes, options = {}) { - super(); - this.numerator_glyphs = []; - this.denom_glyphs = []; - if (!notes || !notes.length) { - throw new _util__WEBPACK_IMPORTED_MODULE_6__.RuntimeError('BadArguments', 'No notes provided for tuplet.'); - } - this.options = options; - this.notes = notes; - this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; - // We accept beats_occupied, but warn that it's deprecated: - // the preferred property name is now notes_occupied. - if (this.options.beats_occupied) { - this.beatsOccupiedDeprecationWarning(); - } - this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; - if (this.options.bracketed != undefined) { - this.bracketed = this.options.bracketed; - } - else { - this.bracketed = notes.some((note) => !note.hasBeam()); - } - this.ratioed = - this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; - this.point = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.tupletPoint'); - this.y_pos = 16; - this.x_pos = 100; - this.width = 200; - this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); - _formatter__WEBPACK_IMPORTED_MODULE_1__.Formatter.AlignRestsToNotes(notes, true, true); - this.resolveGlyphs(); - this.attach(); - } - attach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.setTuplet(this); - } - } - detach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.resetTuplet(this); - } - } - /** - * Set whether or not the bracket is drawn. - */ - setBracketed(bracketed) { - this.bracketed = !!bracketed; - return this; - } - /** - * Set whether or not the ratio is shown. - */ - setRatioed(ratioed) { - this.ratioed = !!ratioed; - return this; - } - /** - * Set the tuplet indicator to be displayed either on the top or bottom of the stave. - */ - setTupletLocation(location) { - if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { - // eslint-disable-next-line - console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); - location = Tuplet.LOCATION_TOP; - } - this.location = location; - return this; - } - getNotes() { - return this.notes; - } - getNoteCount() { - return this.num_notes; - } - beatsOccupiedDeprecationWarning() { - // eslint-disable-next-line - console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); - } - getBeatsOccupied() { - this.beatsOccupiedDeprecationWarning(); - return this.getNotesOccupied(); - } - setBeatsOccupied(beats) { - this.beatsOccupiedDeprecationWarning(); - return this.setNotesOccupied(beats); - } - getNotesOccupied() { - return this.notes_occupied; - } - setNotesOccupied(notes) { - this.detach(); - this.notes_occupied = notes; - this.resolveGlyphs(); - this.attach(); - } - resolveGlyphs() { - this.numerator_glyphs = []; - let n = this.num_notes; - while (n >= 1) { - this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - this.denom_glyphs = []; - n = this.notes_occupied; - while (n >= 1) { - this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_2__.Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - } - // determine how many tuplets are nested within this tuplet - // on the same side (above/below), to calculate a y - // offset for this tuplet: - getNestedTupletCount() { - const location = this.location; - const first_note = this.notes[0]; - let maxTupletCount = countTuplets(first_note, location); - let minTupletCount = countTuplets(first_note, location); - // Count the tuplets that are on the same side (above/below) - // as this tuplet: - function countTuplets(note, location) { - return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; - } - this.notes.forEach((note) => { - const tupletCount = countTuplets(note, location); - maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; - minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; - }); - return maxTupletCount - minTupletCount; - } - // determine the y position of the tuplet: - getYPosition() { - // offset the tuplet for any nested tuplets between - // it and the notes: - const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; - // offset the tuplet for any manual y_offset: - const y_offset = this.options.y_offset || 0; - // now iterate through the notes and find our highest - // or lowest locations, to form a base y_pos - const first_note = this.notes[0]; - let y_pos; - if (this.location === Tuplet.LOCATION_TOP) { - y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; - // check modifiers above note to see if they will collide with tuplet beam - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - let modLines = 0; - const mc = note.getModifierContext(); - if (mc) { - modLines = Math.max(modLines, mc.getState().top_text_line); - } - const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; - if (note.hasStem() || note.isRest()) { - const top_y = note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? note.getStemExtents().topY - Tuplet.metrics.stemOffset - : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; - y_pos = Math.min(top_y, y_pos); - if (modLines > 0) { - y_pos = Math.min(modY, y_pos); - } - } - } - } - else { - let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4 - // check modifiers below note to see if they will collide with tuplet beam - this.notes.forEach((nn) => { - const mc = nn.getModifierContext(); - if (mc) { - lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); - } - }); - y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; - for (let i = 0; i < this.notes.length; ++i) { - if (this.notes[i].hasStem() || this.notes[i].isRest()) { - const bottom_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__.Stem.UP - ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset - : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; - if (bottom_y > y_pos) { - y_pos = bottom_y; - } - } - } - } - return y_pos + nested_tuplet_y_offset + y_offset; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - // determine x value of left bound of tuplet - const first_note = this.notes[0]; - const last_note = this.notes[this.notes.length - 1]; - if (!this.bracketed) { - this.x_pos = first_note.getStemX(); - this.width = last_note.getStemX() - this.x_pos; - } - else { - this.x_pos = first_note.getTieLeftX() - 5; - this.width = last_note.getTieRightX() - this.x_pos + 5; - } - // determine y value for tuplet - this.y_pos = this.getYPosition(); - const addGlyphWidth = (width, glyph) => width + (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - // calculate total width of tuplet notation - let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); - if (this.ratioed) { - width = this.denom_glyphs.reduce(addGlyphWidth, width); - width += this.point * 0.32; - } - const notation_center_x = this.x_pos + this.width / 2; - const notation_start_x = notation_center_x - width / 2; - // draw bracket if the tuplet is not beamed - if (this.bracketed) { - const line_width = this.width / 2 - width / 2 - 5; - // only draw the bracket if it has positive length - if (line_width > 0) { - ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - } - } - // draw numerator glyphs - const shiftY = _tables__WEBPACK_IMPORTED_MODULE_4__.Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); - let x_offset = 0; - this.numerator_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - }); - // display colon and denominator if the ratio is to be shown - if (this.ratioed) { - const colon_x = notation_start_x + x_offset + this.point * 0.16; - const colon_radius = this.point * 0.06; - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - x_offset += this.point * 0.32; - this.denom_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += (0,_util__WEBPACK_IMPORTED_MODULE_6__.defined)(glyph.getMetrics().width); - }); - } - } -} - - -/***/ }), - -/***/ "./src/typeguard.ts": -/*!**************************!*\ - !*** ./src/typeguard.ts ***! - \**************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Category": () => (/* binding */ Category), -/* harmony export */ "isAccidental": () => (/* binding */ isAccidental), -/* harmony export */ "isAnnotation": () => (/* binding */ isAnnotation), -/* harmony export */ "isBarline": () => (/* binding */ isBarline), -/* harmony export */ "isCategory": () => (/* binding */ isCategory), -/* harmony export */ "isDot": () => (/* binding */ isDot), -/* harmony export */ "isGraceNote": () => (/* binding */ isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* binding */ isGraceNoteGroup), -/* harmony export */ "isNote": () => (/* binding */ isNote), -/* harmony export */ "isRenderContext": () => (/* binding */ isRenderContext), -/* harmony export */ "isStaveNote": () => (/* binding */ isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* binding */ isStemmableNote), -/* harmony export */ "isTabNote": () => (/* binding */ isTabNote) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -/* eslint-disable @typescript-eslint/no-explicit-any */ -/** - * Use instead of `instanceof` as a more flexible type guard. - * @param obj check if this object's CATEGORY matches the provided category. - * @param category a string representing a category of VexFlow objects. - * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. - * If `false`, we do not check the superclass or other ancestors. - * @returns true if `obj` has a static `CATEGORY` property that matches `category`. - */ -function isCategory(obj, category, checkAncestors = true) { - // obj is undefined, a number, a primitive string, or null. - if (typeof obj !== 'object' || obj === null) { - return false; - } - // `obj.constructor` is a reference to the constructor function that created the `obj` instance. - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor - let constructorFcn = obj.constructor; - // Check if the object's static .CATEGORY matches the provided category. - if (checkAncestors) { - // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY. - while (obj !== null) { - constructorFcn = obj.constructor; - if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { - return true; - } - obj = Object.getPrototypeOf(obj); - } - return false; - } - else { - // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string. - return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; - } -} -const isAccidental = (obj) => isCategory(obj, Category.Accidental); -const isAnnotation = (obj) => isCategory(obj, Category.Annotation); -const isBarline = (obj) => isCategory(obj, Category.Barline); -const isDot = (obj) => isCategory(obj, Category.Dot); -const isGraceNote = (obj) => isCategory(obj, Category.GraceNote); -const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup); -const isNote = (obj) => isCategory(obj, Category.Note); -const isRenderContext = (obj) => isCategory(obj, Category.RenderContext); -const isStaveNote = (obj) => isCategory(obj, Category.StaveNote); -const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote); -const isTabNote = (obj) => isCategory(obj, Category.TabNote); -// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites. -// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums -var Category; -(function (Category) { - Category["Accidental"] = "Accidental"; - Category["Annotation"] = "Annotation"; - Category["Articulation"] = "Articulation"; - Category["Barline"] = "Barline"; - Category["BarNote"] = "BarNote"; - Category["Beam"] = "Beam"; - Category["Bend"] = "Bend"; - Category["ChordSymbol"] = "ChordSymbol"; - Category["Clef"] = "Clef"; - Category["ClefNote"] = "ClefNote"; - Category["Crescendo"] = "Crescendo"; - Category["Curve"] = "Curve"; - Category["Dot"] = "Dot"; - Category["Element"] = "Element"; - Category["Fraction"] = "Fraction"; - Category["FretHandFinger"] = "FretHandFinger"; - Category["GhostNote"] = "GhostNote"; - Category["Glyph"] = "Glyph"; - Category["GlyphNote"] = "GlyphNote"; - Category["GraceNote"] = "GraceNote"; - Category["GraceNoteGroup"] = "GraceNoteGroup"; - Category["GraceTabNote"] = "GraceTabNote"; - Category["KeySignature"] = "KeySignature"; - Category["KeySigNote"] = "KeySigNote"; - Category["Modifier"] = "Modifier"; - Category["MultiMeasureRest"] = "MultiMeasureRest"; - Category["Note"] = "Note"; - Category["NoteHead"] = "NoteHead"; - Category["NoteSubGroup"] = "NoteSubGroup"; - Category["Ornament"] = "Ornament"; - Category["Parenthesis"] = "Parenthesis"; - Category["PedalMarking"] = "PedalMarking"; - Category["RenderContext"] = "RenderContext"; - Category["RepeatNote"] = "RepeatNote"; - Category["Repetition"] = "Repetition"; - Category["Stave"] = "Stave"; - Category["StaveConnector"] = "StaveConnector"; - Category["StaveHairpin"] = "StaveHairpin"; - Category["StaveLine"] = "StaveLine"; - Category["StaveModifier"] = "StaveModifier"; - Category["StaveNote"] = "StaveNote"; - Category["StaveSection"] = "StaveSection"; - Category["StaveTempo"] = "StaveTempo"; - Category["StaveText"] = "StaveText"; - Category["StaveTie"] = "StaveTie"; - Category["Stem"] = "Stem"; - Category["StemmableNote"] = "StemmableNote"; - Category["StringNumber"] = "StringNumber"; - Category["Stroke"] = "Stroke"; - Category["System"] = "System"; - Category["TabNote"] = "TabNote"; - Category["TabSlide"] = "TabSlide"; - Category["TabStave"] = "TabStave"; - Category["TabTie"] = "TabTie"; - Category["TextBracket"] = "TextBracket"; - Category["TextDynamics"] = "TextDynamics"; - Category["TextNote"] = "TextNote"; - Category["Tickable"] = "Tickable"; - Category["TimeSignature"] = "TimeSignature"; - Category["TimeSigNote"] = "TimeSigNote"; - Category["Tremolo"] = "Tremolo"; - Category["Tuplet"] = "Tuplet"; - Category["Vibrato"] = "Vibrato"; - Category["VibratoBracket"] = "VibratoBracket"; - Category["Voice"] = "Voice"; - Category["Volta"] = "Volta"; -})(Category || (Category = {})); - - -/***/ }), - -/***/ "./src/util.ts": -/*!*********************!*\ - !*** ./src/util.ts ***! - \*********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "RuntimeError": () => (/* binding */ RuntimeError), -/* harmony export */ "defined": () => (/* binding */ defined), -/* harmony export */ "globalObject": () => (/* binding */ globalObject), -/* harmony export */ "log": () => (/* binding */ log), -/* harmony export */ "midLine": () => (/* binding */ midLine), -/* harmony export */ "normalizeAngle": () => (/* binding */ normalizeAngle), -/* harmony export */ "prefix": () => (/* binding */ prefix), -/* harmony export */ "sumArray": () => (/* binding */ sumArray), -/* harmony export */ "warn": () => (/* binding */ warn) -/* harmony export */ }); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// Note: Keep this module free of imports to reduce the chance of circular dependencies. -/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ -class RuntimeError extends Error { - constructor(code, message = '') { - super('[RuntimeError] ' + code + ': ' + message); - this.code = code; - } -} -/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ -// eslint-disable-next-line -function globalObject() { - if (typeof globalThis !== 'undefined') { - return globalThis; - } - if (typeof self !== 'undefined') { - return self; - } - if (typeof window !== 'undefined') { - return window; - } - if (typeof __webpack_require__.g !== 'undefined') { - return __webpack_require__.g; - } - return Function('return this')(); -} -/** - * Check that `x` is of type `T` and not `undefined`. - * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. - */ -function defined(x, code = 'undefined', message = '') { - if (x === undefined) { - throw new RuntimeError(code, message); - } - return x; -} -/** Default log function sends all arguments to console. */ -// eslint-disable-next-line -function log(block, ...args) { - if (!args) - return; - const line = Array.prototype.slice.call(args).join(' '); - globalObject().console.log(block + ': ' + line); -} -/** Dump warning to console. */ -// eslint-disable-next-line -function warn(...args) { - const line = args.join(' '); - const err = new Error(); - globalObject().console.log('Warning: ', line, err.stack); -} -/** Round number to nearest fractional value (`.5`, `.25`, etc.) */ -function roundN(x, n) { - return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; -} -/** Locate the mid point between stave lines. Returns a fractional line if a space. */ -function midLine(a, b) { - let mid_line = b + (a - b) / 2; - if (mid_line % 2 > 0) { - mid_line = roundN(mid_line * 10, 5) / 10; - } - return mid_line; -} -/** - * Used by various classes (e.g., SVGContext) to provide a - * unique prefix to element names (or other keys in shared namespaces). - */ -function prefix(text) { - return `vf-${text}`; -} -/** - * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). - */ -function normalizeAngle(a) { - a = a % (2 * Math.PI); - if (a < 0) { - a += 2 * Math.PI; - } - return a; -} -/** - * Return the sum of an array of numbers. - */ -function sumArray(arr) { - return arr.reduce((a, b) => a + b, 0); -} - - -/***/ }), - -/***/ "./src/vex.ts": -/*!********************!*\ - !*** ./src/vex.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Vex": () => (/* binding */ Vex) -/* harmony export */ }); -/* harmony import */ var _flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./flow */ "./src/flow.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// -// Utility methods used by the rest of the VexFlow codebase. - - -class Vex { - // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead. - // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) { - // arr.forEach(callbackFn); - // } - /** - * Take `arr` and return a new list consisting of the sorted, unique, - * contents of arr. Does not modify `arr`. - */ - // eslint-disable-next-line - static sortAndUnique(arr, cmp, eq) { - if (arr.length > 1) { - const newArr = []; - let last; - arr.sort(cmp); - for (let i = 0; i < arr.length; ++i) { - if (i === 0 || !eq(arr[i], last)) { - newArr.push(arr[i]); - } - last = arr[i]; - } - return newArr; - } - else { - return arr; - } - } - /** Check if array `arr` contains `obj`. */ - // eslint-disable-next-line - static contains(arr, obj) { - let i = arr.length; - while (i--) { - if (arr[i] === obj) { - return true; - } - } - return false; - } - // Get the 2D Canvas context from DOM element `canvas_sel`. - static getCanvasContext(canvasSelector) { - if (!canvasSelector) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); - } - const canvas = document.getElementById(canvasSelector); - if (!(canvas && canvas.getContext)) { - throw new _util__WEBPACK_IMPORTED_MODULE_1__.RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); - } - return canvas.getContext('2d'); - } - /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ - // eslint-disable-next-line - static benchmark(s, f) { - const start_time = new Date().getTime(); - f(); - const elapsed = new Date().getTime() - start_time; - (0,_util__WEBPACK_IMPORTED_MODULE_1__.log)(s, elapsed + 'ms'); - } - // Get stack trace. - static stackTrace() { - const err = new Error(); - return err.stack; - } -} -Vex.Flow = _flow__WEBPACK_IMPORTED_MODULE_0__.Flow; - - -/***/ }), - -/***/ "./src/vibrato.ts": -/*!************************!*\ - !*** ./src/vibrato.ts ***! - \************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Vibrato": () => (/* binding */ Vibrato) -/* harmony export */ }); -/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bend */ "./src/bend.ts"); -/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - -/** `Vibrato` implements diverse vibratos. */ -class Vibrato extends _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Vibrato; - } - /** Arrange vibratos inside a `ModifierContext`. */ - static format(vibratos, state, context) { - if (!vibratos || vibratos.length === 0) - return false; - // Vibratos are always on top. - let text_line = state.top_text_line; - let width = 0; - let shift = state.right_shift - 7; - // If there's a bend, drop the text line - const bends = context.getMembers(_bend__WEBPACK_IMPORTED_MODULE_0__.Bend.CATEGORY); - if (bends && bends.length > 0) { - const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.STAVE_LINE_DISTANCE; - text_line = text_line - (bendHeight + 1); - } - else { - state.top_text_line += 1; - } - // Format Vibratos - for (let i = 0; i < vibratos.length; ++i) { - const vibrato = vibratos[i]; - vibrato.setXShift(shift); - vibrato.setTextLine(text_line); - width += vibrato.getWidth(); - shift += width; - } - state.right_shift += width; - return true; - } - constructor() { - super(); - this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT; - this.render_options = { - harsh: false, - vibrato_width: 20, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - }; - this.setVibratoWidth(this.render_options.vibrato_width); - } - /** Set harsh vibrato. */ - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - /** Set vibrato width in pixels. */ - setVibratoWidth(width) { - this.render_options.vibrato_width = width; - this.setWidth(width); - return this; - } - /** Draw the vibrato on the rendering context. */ - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__.Modifier.Position.RIGHT, this.index); - const vx = start.x + this.x_shift; - const vy = note.getYForTopText(this.text_line) + 2; - Vibrato.renderVibrato(ctx, vx, vy, this.render_options); - } - /** - * Static rendering method that can be called from - * other classes (e.g. VibratoBracket). - */ - static renderVibrato(ctx, x, y, opts) { - const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; - const num_waves = vibrato_width / wave_width; - ctx.beginPath(); - let i; - if (harsh) { - ctx.moveTo(x, y + wave_girth + 1); - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x + wave_width, y - wave_height / 2); - x += wave_width; - ctx.lineTo(x + wave_width, y + wave_height / 2); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); - x -= wave_width; - ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); - x -= wave_width; - } - ctx.fill(); - } - else { - ctx.moveTo(x, y + wave_girth); - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); - x += wave_width; - ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - } - ctx.fill(); - } - } -} - - -/***/ }), - -/***/ "./src/vibratobracket.ts": -/*!*******************************!*\ - !*** ./src/vibratobracket.ts ***! - \*******************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "VibratoBracket": () => (/* binding */ VibratoBracket) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Balazs Forian-Szabo -// MIT License - - - - -// eslint-disable-next-line -function L(...args) { - if (VibratoBracket.DEBUG) - (0,_util__WEBPACK_IMPORTED_MODULE_2__.log)('Vex.Flow.VibratoBracket', args); -} -/** `VibratoBracket` renders vibrato effect between two notes. */ -class VibratoBracket extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_1__.Category.VibratoBracket; - } - /** - * Either the stop or start note must be set, or both of them. - * An undefined value for the start or stop note indicates that the vibrato - * is drawn from the beginning or until the end of the stave accordingly. - */ - constructor(bracket_data) { - super(); - if (bracket_data.start) - this.start = bracket_data.start; - if (bracket_data.stop) - this.stop = bracket_data.stop; - this.line = 1; - this.render_options = { - harsh: false, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - vibrato_width: 0, - }; - } - /** Set line position of the vibrato bracket. */ - setLine(line) { - this.line = line; - return this; - } - /** Set harsh vibrato bracket. */ - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - /** Draw the vibrato bracket on the rendering context. */ - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || - (this.stop && this.stop.checkStave().getYForTopText(this.line)) || - 0; - // If start note is not set then vibrato will be drawn - // from the beginning of the stave - const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; - // If stop note is not set then vibrato will be drawn - // until the end of the stave - const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || - (this.start && this.start.checkStave().getTieEndX() - 10) || - 0; - this.render_options.vibrato_width = stop_x - start_x; - L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); - _vibrato__WEBPACK_IMPORTED_MODULE_3__.Vibrato.renderVibrato(ctx, start_x, y, this.render_options); - } -} -/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ -VibratoBracket.DEBUG = false; - - -/***/ }), - -/***/ "./src/voice.ts": -/*!**********************!*\ - !*** ./src/voice.ts ***! - \**********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Voice": () => (/* binding */ Voice), -/* harmony export */ "VoiceMode": () => (/* binding */ VoiceMode) -/* harmony export */ }); -/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.ts"); -/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.ts"); -/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.ts"); -/* harmony import */ var _typeguard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeguard */ "./src/typeguard.ts"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License - - - - - -var VoiceMode; -(function (VoiceMode) { - VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; - VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; - VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; -})(VoiceMode || (VoiceMode = {})); -/** - * `Voice` is mainly a container object to group `Tickables` for formatting. - */ -class Voice extends _element__WEBPACK_IMPORTED_MODULE_0__.Element { - static get CATEGORY() { - return _typeguard__WEBPACK_IMPORTED_MODULE_3__.Category.Voice; - } - /** - * Modes allow the addition of ticks in three different ways: - * - STRICT: This is the default. Ticks must fill the voice. - * - SOFT: Ticks can be added without restrictions. - * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. - */ - static get Mode() { - return VoiceMode; - } - constructor(time) { - super(); - this.resolutionMultiplier = 1; - this.mode = VoiceMode.STRICT; - this.preFormatted = false; - this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(0, 1); - this.largestTickWidth = 0; - this.tickables = []; - this.options = { - softmaxFactor: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.SOFTMAX_FACTOR, - }; - // Convert the `time` string into a VoiceTime object if necessary. - let voiceTime; - if (typeof time === 'string') { - // Time signature shortcut: "4/4", "3/8", etc. - const match = time.match(/(\d+)\/(\d+)/); - if (match) { - voiceTime = { - num_beats: parseInt(match[1]), - beat_value: parseInt(match[2]), - }; - } - } - else { - voiceTime = time; - } - // Default time signature is 4/4. - this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: _tables__WEBPACK_IMPORTED_MODULE_2__.Tables.RESOLUTION }, voiceTime); - // Recalculate total ticks. - this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_1__.Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); - // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration. - this.smallestTickCount = this.totalTicks.clone(); - } - /** Get the total ticks in the voice. */ - getTotalTicks() { - return this.totalTicks; - } - /** Get the total ticks used in the voice by all the tickables. */ - getTicksUsed() { - return this.ticksUsed; - } - /** Get the largest width of all the tickables. */ - getLargestTickWidth() { - return this.largestTickWidth; - } - /** Get the tick count for the shortest tickable */ - getSmallestTickCount() { - return this.smallestTickCount; - } - /** Get the tickables in the voice. */ - getTickables() { - return this.tickables; - } - /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ - getMode() { - return this.mode; - } - /** - * Set the voice mode. - * @param mode value from `VoiceMode` or Voice.Mode - */ - setMode(mode) { - this.mode = mode; - return this; - } - /** Get the resolution multiplier for the voice. */ - getResolutionMultiplier() { - return this.resolutionMultiplier; - } - /** Get the actual tick resolution for the voice. */ - getActualResolution() { - return this.resolutionMultiplier * this.time.resolution; - } - /** Set the voice's stave. */ - setStave(stave) { - this.stave = stave; - // Reset the bounding box so we can reformat. - this.boundingBox = undefined; - return this; - } - getStave() { - return this.stave; - } - /** Get the bounding box for the voice. */ - getBoundingBox() { - if (!this.boundingBox) { - const stave = this.checkStave(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - if (!tickable.getStave()) - tickable.setStave(stave); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - } - this.boundingBox = boundingBox; - } - return this.boundingBox; - } - /** Set the voice mode to strict or soft. */ - setStrict(strict) { - this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; - return this; - } - /** Determine if the voice is complete according to the voice mode. */ - isComplete() { - if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { - return this.ticksUsed.equals(this.totalTicks); - } - else { - return true; - } - } - /** - * We use softmax to layout the tickables proportional to the exponent of - * their duration. The softmax factor is used to determine the 'linearness' of - * the layout. - * - * The softmax of all the tickables in this voice should sum to 1. - */ - setSoftmaxFactor(factor) { - this.options.softmaxFactor = factor; - this.expTicksUsed = 0; // reset - return this; - } - /** - * Calculate the sum of the exponents of all the ticks in this voice to use - * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) - * - * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, - * not "expected" ticks used. - */ - reCalculateExpTicksUsed() { - const totalTicks = this.ticksUsed.value(); - const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); - this.expTicksUsed = (0,_util__WEBPACK_IMPORTED_MODULE_4__.sumArray)(this.tickables.map(exp)); - return this.expTicksUsed; - } - /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ - softmax(tickValue) { - if (!this.expTicksUsed) { - this.expTicksUsed = this.reCalculateExpTicksUsed(); - } - const totalTicks = this.ticksUsed.value(); - const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); - const sm = exp(tickValue) / this.expTicksUsed; - return sm; - } - /** Add a tickable to the voice. */ - addTickable(tickable) { - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - // Update the total ticks for this line. - this.ticksUsed.add(ticks); - this.expTicksUsed = 0; // reset - if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && - this.ticksUsed.greaterThan(this.totalTicks)) { - this.ticksUsed.subtract(ticks); - throw new _util__WEBPACK_IMPORTED_MODULE_4__.RuntimeError('BadArgument', 'Too many ticks.'); - } - // Track the smallest tickable for formatting. - if (ticks.lessThan(this.smallestTickCount)) { - this.smallestTickCount = ticks.clone(); - } - this.resolutionMultiplier = this.ticksUsed.denominator; - // Expand total ticks using denominator from ticks used. - this.totalTicks.add(0, this.ticksUsed.denominator); - } - // Add the tickable to the line. - this.tickables.push(tickable); - tickable.setVoice(this); - return this; - } - /** Add an array of tickables to the voice. */ - addTickables(tickables) { - for (let i = 0; i < tickables.length; ++i) { - this.addTickable(tickables[i]); - } - return this; - } - /** Preformat the voice by applying the voice's stave to each note. */ - preFormat() { - if (this.preFormatted) - return this; - const stave = this.checkStave(); - this.tickables.forEach((tickable) => { - if (!tickable.getStave()) { - tickable.setStave(stave); - } - }); - this.preFormatted = true; - return this; - } - checkStave() { - return (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(this.stave, 'NoStave', 'No stave attached to instance.'); - } - /** - * Render the voice onto the canvas `context` and an optional `stave`. - * If `stave` is omitted, it is expected that the notes have staves - * already set. - * - * This method also calculates the voice's boundingBox while drawing - * the notes. Note the similarities with this.getBoundingBox(). - */ - draw(context = this.checkContext(), stave) { - stave = stave !== null && stave !== void 0 ? stave : this.stave; - this.setRendered(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - // Set the stave if provided. - if (stave) { - tickable.setStave(stave); - } - (0,_util__WEBPACK_IMPORTED_MODULE_4__.defined)(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - tickable.setContext(context); - tickable.drawWithStyle(); - } - this.boundingBox = boundingBox; - } -} - - -/***/ }), - -/***/ "./src/web.ts": -/*!********************!*\ - !*** ./src/web.ts ***! - \********************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "isHTMLCanvas": () => (/* binding */ isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* binding */ isHTMLDiv) -/* harmony export */ }); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./src/util.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// Author: Ron B. Yeh -// MIT License -// -// Utilities for working with Web APIs. -// See: https://developer.mozilla.org/en-US/docs/Web/API - -// eslint-disable-next-line -function isHTMLCanvas(element) { - if (!element) - return false; - const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); - return ( - // It's either an instance of the HTMLCanvasElement class, - (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || - // OR it's pretending to be a element. Good enough! - // Do not rely on .tagName, because node-canvas doesn't provide a tagName. - (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); -} -// eslint-disable-next-line -function isHTMLDiv(element) { - if (!element) - return false; - const global = (0,_util__WEBPACK_IMPORTED_MODULE_0__.globalObject)(); - return ( - // It's either an instance of the HTMLDivElement class. - (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || - // OR it's pretending to be a
. See: svgcontext.ts. - (typeof element.appendChild === 'function' && typeof element.style === 'object')); -} - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ (() => { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = (exports, definition) => { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ })(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ (() => { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ })(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ (() => { -/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) -/******/ })(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ (() => { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = (exports) => { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ })(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. -(() => { -/*!********************************!*\ - !*** ./entry/vexflow-debug.ts ***! - \********************************/ -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Accidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Accidental), -/* harmony export */ "Annotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Annotation), -/* harmony export */ "AnnotationHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationHorizontalJustify), -/* harmony export */ "AnnotationVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.AnnotationVerticalJustify), -/* harmony export */ "Articulation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Articulation), -/* harmony export */ "BEAM_BOTH": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_BOTH), -/* harmony export */ "BEAM_LEFT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_LEFT), -/* harmony export */ "BEAM_RIGHT": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BEAM_RIGHT), -/* harmony export */ "BarNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarNote), -/* harmony export */ "Barline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Barline), -/* harmony export */ "BarlineType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BarlineType), -/* harmony export */ "Beam": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Beam), -/* harmony export */ "Bend": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Bend), -/* harmony export */ "BoundingBox": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBox), -/* harmony export */ "BoundingBoxComputation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.BoundingBoxComputation), -/* harmony export */ "Builder": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Builder), -/* harmony export */ "CanvasContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CanvasContext), -/* harmony export */ "Category": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Category), -/* harmony export */ "ChordSymbol": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbol), -/* harmony export */ "ChordSymbolHorizontalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolHorizontalJustify), -/* harmony export */ "ChordSymbolVerticalJustify": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ChordSymbolVerticalJustify), -/* harmony export */ "Clef": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Clef), -/* harmony export */ "ClefNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ClefNote), -/* harmony export */ "Crescendo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Crescendo), -/* harmony export */ "Curve": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Curve), -/* harmony export */ "CurvePosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.CurvePosition), -/* harmony export */ "Dot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Dot), -/* harmony export */ "EasyScore": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScore), -/* harmony export */ "EasyScoreGrammar": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.EasyScoreGrammar), -/* harmony export */ "Element": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Element), -/* harmony export */ "Factory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Factory), -/* harmony export */ "Flow": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Flow), -/* harmony export */ "Font": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Font), -/* harmony export */ "FontStyle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontStyle), -/* harmony export */ "FontWeight": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FontWeight), -/* harmony export */ "Formatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Formatter), -/* harmony export */ "Fraction": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Fraction), -/* harmony export */ "FretHandFinger": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.FretHandFinger), -/* harmony export */ "GhostNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GhostNote), -/* harmony export */ "Glyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Glyph), -/* harmony export */ "GlyphNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GlyphNote), -/* harmony export */ "GraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNote), -/* harmony export */ "GraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceNoteGroup), -/* harmony export */ "GraceTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.GraceTabNote), -/* harmony export */ "KeyManager": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeyManager), -/* harmony export */ "KeySigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySigNote), -/* harmony export */ "KeySignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.KeySignature), -/* harmony export */ "Modifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Modifier), -/* harmony export */ "ModifierContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierContext), -/* harmony export */ "ModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.ModifierPosition), -/* harmony export */ "MultiMeasureRest": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.MultiMeasureRest), -/* harmony export */ "Music": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Music), -/* harmony export */ "Note": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Note), -/* harmony export */ "NoteHead": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteHead), -/* harmony export */ "NoteSubGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.NoteSubGroup), -/* harmony export */ "Ornament": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Ornament), -/* harmony export */ "OutlineCode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.OutlineCode), -/* harmony export */ "Parenthesis": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parenthesis), -/* harmony export */ "Parser": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Parser), -/* harmony export */ "PedalMarking": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.PedalMarking), -/* harmony export */ "Piece": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Piece), -/* harmony export */ "Registry": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Registry), -/* harmony export */ "RenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RenderContext), -/* harmony export */ "Renderer": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Renderer), -/* harmony export */ "RendererBackends": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererBackends), -/* harmony export */ "RendererLineEndType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RendererLineEndType), -/* harmony export */ "RepeatNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RepeatNote), -/* harmony export */ "Repetition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Repetition), -/* harmony export */ "RuntimeError": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.RuntimeError), -/* harmony export */ "SVGContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SVGContext), -/* harmony export */ "Stave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stave), -/* harmony export */ "StaveConnector": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveConnector), -/* harmony export */ "StaveHairpin": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveHairpin), -/* harmony export */ "StaveLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveLine), -/* harmony export */ "StaveModifier": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifier), -/* harmony export */ "StaveModifierPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveModifierPosition), -/* harmony export */ "StaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveNote), -/* harmony export */ "StaveSection": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveSection), -/* harmony export */ "StaveTempo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTempo), -/* harmony export */ "StaveText": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveText), -/* harmony export */ "StaveTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StaveTie), -/* harmony export */ "Stem": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stem), -/* harmony export */ "StemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StemmableNote), -/* harmony export */ "StringNumber": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.StringNumber), -/* harmony export */ "Stroke": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Stroke), -/* harmony export */ "SymbolModifiers": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolModifiers), -/* harmony export */ "SymbolTypes": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.SymbolTypes), -/* harmony export */ "System": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.System), -/* harmony export */ "TabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabNote), -/* harmony export */ "TabSlide": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabSlide), -/* harmony export */ "TabStave": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabStave), -/* harmony export */ "TabTie": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TabTie), -/* harmony export */ "TextBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracket), -/* harmony export */ "TextBracketPosition": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextBracketPosition), -/* harmony export */ "TextDynamics": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextDynamics), -/* harmony export */ "TextFormatter": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextFormatter), -/* harmony export */ "TextJustification": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextJustification), -/* harmony export */ "TextNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TextNote), -/* harmony export */ "TickContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TickContext), -/* harmony export */ "Tickable": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tickable), -/* harmony export */ "TimeSigNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSigNote), -/* harmony export */ "TimeSignature": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignature), -/* harmony export */ "TimeSignatureGlyph": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TimeSignatureGlyph), -/* harmony export */ "Tremolo": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tremolo), -/* harmony export */ "Tuning": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuning), -/* harmony export */ "Tuplet": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Tuplet), -/* harmony export */ "TupletLocation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.TupletLocation), -/* harmony export */ "Vex": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vex), -/* harmony export */ "Vibrato": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Vibrato), -/* harmony export */ "VibratoBracket": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VibratoBracket), -/* harmony export */ "Voice": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Voice), -/* harmony export */ "VoiceMode": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoiceMode), -/* harmony export */ "Volta": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.Volta), -/* harmony export */ "VoltaType": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.VoltaType), -/* harmony export */ "default": () => (/* reexport module object */ _src_index__WEBPACK_IMPORTED_MODULE_3__), -/* harmony export */ "defined": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.defined), -/* harmony export */ "drawDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.drawDot), -/* harmony export */ "globalObject": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.globalObject), -/* harmony export */ "isAccidental": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAccidental), -/* harmony export */ "isAnnotation": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isAnnotation), -/* harmony export */ "isBarline": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isBarline), -/* harmony export */ "isCategory": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isCategory), -/* harmony export */ "isDot": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isDot), -/* harmony export */ "isGraceNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNote), -/* harmony export */ "isGraceNoteGroup": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isGraceNoteGroup), -/* harmony export */ "isHTMLCanvas": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLCanvas), -/* harmony export */ "isHTMLDiv": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isHTMLDiv), -/* harmony export */ "isNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isNote), -/* harmony export */ "isRenderContext": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isRenderContext), -/* harmony export */ "isStaveNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStaveNote), -/* harmony export */ "isStemmableNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isStemmableNote), -/* harmony export */ "isTabNote": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.isTabNote), -/* harmony export */ "log": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.log), -/* harmony export */ "midLine": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.midLine), -/* harmony export */ "normalizeAngle": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.normalizeAngle), -/* harmony export */ "prefix": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.prefix), -/* harmony export */ "sumArray": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.sumArray), -/* harmony export */ "warn": () => (/* reexport safe */ _src_index__WEBPACK_IMPORTED_MODULE_3__.warn) -/* harmony export */ }); -/* harmony import */ var _src_flow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../src/flow */ "./src/flow.ts"); -/* harmony import */ var _src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../src/fonts/load_all */ "./src/fonts/load_all.ts"); -/* harmony import */ var _src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../src/fonts/textfonts */ "./src/fonts/textfonts.ts"); -/* harmony import */ var _src_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../src/index */ "./src/index.ts"); -// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010. -// MIT License -// -// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js. -// It statically bundles all the music engraving fonts. -// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js -// sets the webpack mode to 'development' to produce an unminified build. -// In the future, we could do something different with this entry file, such as turn on flags for logging. - - - -(0,_src_fonts_load_all__WEBPACK_IMPORTED_MODULE_1__.loadAllMusicFonts)(); -_src_flow__WEBPACK_IMPORTED_MODULE_0__.Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); -(0,_src_fonts_textfonts__WEBPACK_IMPORTED_MODULE_2__.loadTextFonts)(); -// Re-export all exports from index.ts. - -// Also collect all exports into a default export for CJS projects. - - -})(); - -__webpack_exports__ = __webpack_exports__["default"]; -/******/ return __webpack_exports__; -/******/ })() -; -}); -//# sourceMappingURL=vexflow-debug.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-debug.js.map b/build/cjs/vexflow-debug.js.map deleted file mode 100644 index 8355461516..0000000000 --- a/build/cjs/vexflow-debug.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-debug.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;;;;;;;;;;;ACVO;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACFP;AACA;AACA;AACA;AACsC;AACN;AACM;AACN;AACE;AAC+D;AAC3D;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,+CAAQ;AACxC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,oFAAoF;AACpF;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,iDAAiD;AAChF;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,wCAAwC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,yBAAyB;AAC/D,6BAA6B,kEAA6B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,+CAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,uDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wDAAY;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,wBAAwB,4DAAgB;AACxC;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,QAAQ,8CAAO,+DAA+D,KAAK;AACnF;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,iCAAiC,yCAAK,CAAC,2DAAsB,GAAG;AAChE,kCAAkC,yCAAK,CAAC,2DAAsB,GAAG;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,2CAA2C,KAAK;AAC/D;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8EAA8E,qCAAqC,IAAI;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC,+BAA+B,8CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;AC5dA;AACA;AACoC;AACoB;AAC1B;AACI;AACc;AACmB;AACtC;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kEAAkE;AAC5D;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,8DAA8D;AAC/D;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,+CAAQ;AACxC;AACA;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA,kCAAkC,gEAAoB;AACtD;AACA,8FAA8F,+DAA0B;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA,kEAAkE,+DAA0B;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2DAAe;AACpC;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qDAAS;AAC7B;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qDAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF,8BAA8B,gEAAoB;AAClD,8CAA8C,6DAAsB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,+DAA0B;AAClE,8CAA8C,4CAAS;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,+DAA0B;AACxE,8CAA8C,0CAAO;AACrD;AACA;AACA,mEAAmE,+DAA0B;AAC7F;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,uDAAiB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC3RA;AACA;AACA;AACgC;AACM;AACR;AACI;AAC2D;AACzC;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,QAAQ,eAAe,EAAE,wDAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uDAAW,UAAU,uDAAW;AACrE;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA,YAAY,mCAAmC;AAC/C;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,qDAAS;AACtB;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,0CAAO;AAClF,2DAA2D,4CAAS;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,+CAAQ;AAC1C;AACA;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uHAAuH,8CAAO;AAC9H;AACA;AACA;AACA;AACA,6EAA6E,0CAAO;AACpF;AACA;AACA,gBAAgB,2DAAe;AAC/B;AACA;AACA,8DAA8D,+DAA0B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,0CAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4CAAS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,iCAAiC,8DAAuB;AACxD;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,6DAAwB;AACpD;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,QAAQ,8CAAO,yDAAyD,UAAU;AAClF,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA,sBAAsB,qDAAS;AAC/B;AACA,gBAAgB,IAAI;AACpB;AACA;AACA,wBAAwB,4DAAuB,gCAAgC,gBAAgB;AAC/F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,EAAE,OAAO,EAAE;AACtD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClVA;AACA;AAC8B;AACwB;AACf;AACV;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,sBAAsB,uCAAI;AACjC;AACA,eAAe,wDAAgB;AAC/B;AACA,uBAAuB,6DAAkB;AACzC,gBAAgB,eAAe;AAC/B;AACA,sBAAsB;AACtB;AACA,qBAAqB,sDAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,6DAAkB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,kDAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC5EA;AACA;AACoC;AACE;AACR;AACI;AACQ;AACqB;AACzB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA,eAAe,4CAAS;AACxB;AACA,WAAW,0CAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACP;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA,oBAAoB,+CAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,wBAAwB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,0CAA0C,sDAAiB;AAC3D,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,0FAA0F,+CAAQ;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,+CAAQ;AACrD;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,iDAAiD,+CAAQ;AACzD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,2DAAsB;AAC9E;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,0CAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,2DAAsB;AAClF;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iEAAiE,4CAAS,GAAG,0DAAqB,GAAG,uDAAkB;AACvH;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,0BAA0B,2DAAsB;AAChD,sBAAsB,+CAAY;AAClC;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,yBAAyB,uDAAW;AACpC;AACA;AACA,8BAA8B,qDAAS;AACvC;AACA;AACA,gDAAgD,0CAAO,GAAG,4CAAS;AACnE;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,wDAAwD,oDAAoD,IAAI;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oBAAoB;AACxD;AACA;AACA;AACA,4BAA4B,kBAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC,oDAAoD,IAAI;AACjH;AACA;AACA;AACA,0BAA0B;AAC1B,kCAAkC;AAClC;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4CAAS;AAC5C;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,4CAAS;AACxC;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,4CAAS;AAC7C;AACA;AACA,oCAAoC,0CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAqD,8CAA8C,IAAI;AACvH;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA,kEAAkE,0CAAO;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAuB,eAAe;AACzE,gDAAgD,2DAAsB;AACtE,gDAAgD,2DAAsB;AACtE,sCAAsC,2DAAsB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,2DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6CAAU;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iCAAiC;AACzD;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACvzBA;AACA;AACoC;AACE;AACU;AACE;AACZ;AACtC;AACO,mBAAmB,+CAAQ;AAClC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA,gBAAgB,qDAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gCAAgC;AAC7D;AACA,mCAAmC,2BAA2B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,+DAAwB;AAC7E;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,EAAE,uDAAiB;;;;;;;;;;;;;;;ACvPpD;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,QAAQ;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC/HA;AACA;AAC8B;AACkB;AACJ;AACP;AACrC;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2CAAI;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,mDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,8BAA8B,mDAAgB;AAC9C,0BAA0B,+DAA4B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACJ;AACc;AACQ;AACb;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,oEAAoE;AAC9D;AACP;AACA;AACA;AACA,CAAC,gEAAgE;AAC1D;AACP;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B;AACP;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C;AACA;AACA;AACA;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,4DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAA4B;AACzD,4BAA4B,iDAAc;AAC1C;AACA;AACA;AACA;AACA;AACA,4BAA4B,gCAAgC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,2DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oDAAiB;AACrC,mBAAmB,mDAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,mBAAmB;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qBAAqB;AAClD;AACA;AACA;AACA;AACA,sCAAsC,qCAAqC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8BAA8B;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAK,gCAAgC,yBAAyB;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA,iEAAiE,iBAAiB,kBAAkB;AACpG;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,kCAAkC;AACvE;AACA;AACA;AACA;AACA;AACA,qCAAqC,mCAAmC;AACxE;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,iEAAiE,aAAa,mBAAmB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gEAAoB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mEAA8B;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8BAA8B;AAC9D,gDAAgD,iDAAc;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACtsBA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACD;AACtC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,yDAAa;AACvC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA,sBAAsB,kDAAc,0CAA0C,UAAU;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA,yDAAyD,UAAU,eAAe,WAAW;AAC7F,wDAAwD,UAAU,eAAe,WAAW,GAAG,UAAU;AACzG,2DAA2D,UAAU,eAAe,WAAW,GAAG,UAAU;AAC5G,gCAAgC;AAChC,kCAAkC,yCAAK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,8BAA8B,UAAU;AACxC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzKA;AACA;AACA;AAC8B;AACE;AACF;AACS;AACvC;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,gBAAgB,eAAe;AAC/B;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA,sBAAsB,kDAAc,8CAA8C,UAAU;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA,sBAAsB,kDAAc,8CAA8C,UAAU;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB;AACzB,kCAAkC,UAAU;AAC5C,SAAS;AACT;AACA;AACA,mCAAmC,yCAAK;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACc;AACL;AACV;AAC7B;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,uCAAI;AACnC;AACA;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,oEAA0B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B;AACP;AACA;AACA;AACA,CAAC,sCAAsC;AAChC,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mBAAmB;AACnC,gBAAgB,mBAAmB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;;;;;;;ACnIA;AACA;AACA;AACA;AACsC;AACsC;AACtC;AAC/B,kBAAkB,+CAAQ;AACjC;AACA,eAAe,oDAAY;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA,qBAAqB,qDAAS;AAC9B,0BAA0B,aAAa;AACvC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA,4BAA4B,sCAAsC;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C,oBAAoB,2BAA2B;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,uDAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA,YAAY,qDAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1JA;AACA;AAC8C;AAClB;AACsB;AAClB;AACE;AACJ;AACsB;AACpD;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,8BAA8B;AACrE,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,gBAAgB,UAAU;AAC1B;AACA;AACA,sDAAsD;AACtD;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,qBAAqB,8CAAO;AAC5B,gBAAgB,8BAA8B;AAC9C;AACA,iFAAiF,UAAU,WAAW,EAAE;AACxG;AACA,oCAAoC,qDAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,2CAA2C;AAC3C;AACA;AACA,kCAAkC,gBAAgB;AAClD,kCAAkC,6CAA6C;AAC/E;AACA,kDAAkD,0CAAO,GAAG,4CAAS;AACrE;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,wBAAwB,UAAU;AAClC,YAAY,oDAAkB,WAAW,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,qDAAqD,+BAA+B,qEAA0B,EAAE,yEAA4B,wBAAwB,cAAc;AAClL,qBAAqB;AACrB;AACA;AACA;AACA,0BAA0B,2CAAM;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;AACA,4BAA4B;AAC5B,kCAAkC,oDAAoD;AACtF;AACA;AACA;AACA,6BAA6B;AAC7B,kCAAkC,0BAA0B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AChaA;AACA;AACA;AACqD;AACf;AACC;AACE;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA,sBAAsB,aAAa;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kEAA2B;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,sCAAsC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C;AACA,kCAAkC,kBAAkB,EAAE,UAAU;AAChE;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAAM;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,kCAAkC;AAClH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D;AAC1D;AACA;AACA;AACA,4BAA4B,qDAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gDAAa;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA,eAAe,+DAA4B;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpYA;AACA;AACA;AAC0C;AACwD;AACpD;AACV;AACN;AACc;AACN;AACN;AACQ;AACJ;AACI;AACU;AACV;AACA;AACA;AACU;AACR;AACU;AACE;AACR;AACR;AACQ;AACR;AACI;AACV;AACkB;AACV;AACA;AACF;AACQ;AACZ;AACE;AACE;AACM;AACE;AACR;AACM;AACA;AACV;AACkB;AACF;AAClB;AACK;AACrC;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF;AACjF;AACA;AACA,6BAA6B,YAAY,4BAA4B;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,6CAA6C,EAAE;AAC7G;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA,gBAAgB,uCAAuC;AACvD;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,mDAAY;AAC5B,0BAA0B,gEAAwB;AAClD;AACA;AACA,0BAA0B,6DAAqB;AAC/C;AACA;AACA,uBAAuB,6DAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,8EAA8E,8CAA8C;AAC9J,0BAA0B,gDAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oDAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,6CAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA,eAAe;AACf,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAc;AACxC;AACA;AACA;AACA;AACA,0BAA0B,mDAAU;AACpC;AACA;AACA;AACA;AACA,kCAAkC,qBAAqB,2EAAkC,YAAY,yEAAgC,EAAE;AACvI,+BAA+B,mDAAU;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uEAAuE;AACzG,gCAAgC,qDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E,6BAA6B,gDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,4CAA4C;AAC9E,yBAAyB,wDAAY;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+BAA+B;AACjE,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,iCAAiC,wDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sDAAW;AAC9B;AACA;AACA,mBAAmB,8DAAe;AAClC;AACA;AACA,4BAA4B,+CAAO;AACnC,qCAAqC,gEAAgB;AACrD;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C,0BAA0B,0CAAK;AAC/B;AACA;AACA;AACA;AACA,8BAA8B,4DAAc;AAC5C;AACA;AACA;AACA;AACA;AACA,mBAAmB,kDAAS;AAC5B;AACA;AACA,kCAAkC,wBAAwB;AAC1D,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA,wBAAwB,gDAAQ;AAChC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kDAAS;AAClC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,4DAAc;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,sDAAW;AAC3C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA,2BAA2B,4CAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,6CAA6C;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA,mBAAmB,iDAAS;AAC5B;AACA;AACA,kCAAkC;AAClC;AACA,eAAe;AACf,0BAA0B,wDAAY;AACtC,sBAAsB,mEAAuB;AAC7C;AACA;AACA;AACA;AACA;AACA,kCAAkC,WAAW;AAC7C,0BAA0B,wDAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,uDAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7fvD,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AAC0C;AACwD;AACpD;AACV;AACN;AACA;AACc;AACsB;AAClB;AACqF;AACvG;AACQ;AACE;AACO;AACnB;AACY;AACJ;AACA;AACiB;AACb;AACF;AACY;AACV;AACR;AACQ;AACA;AACU;AACJ;AACJ;AACI;AACJ;AACc;AACJ;AACE;AACtB;AACF;AACQ;AACQ;AACR;AACM;AACV;AACY;AACR;AACU;AAC6B;AACnC;AACV;AACsB;AACJ;AACJ;AACN;AAC+B;AAC/B;AACO;AACL;AACF;AACF;AACU;AAClB;AACgB;AACX;AACO;AACR;AACA;AACE;AACE;AACA;AACJ;AAC+B;AACnB;AACE;AACS;AACb;AACI;AACJ;AACR;AACF;AACA;AACY;AACV;AACc;AACP;AACpC;AACP;AACA;AACA;AACA,qBAAqB,8CAAO;AAC5B;AACA,gBAAgB,yCAAE;AAClB;AACA,kBAAkB,2CAAI;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,6CAAS;AAC3D,QAAQ,6DAAuB;AAC/B,QAAQ,2DAAsB;AAC9B,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sBAAsB,6DAAuB;AAC7C;AACA;AACA;AACA,eAAe,oEAA8B;AAC7C;AACA;AACA,QAAQ,oEAA8B;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,gEAA0B;AACzC;AACA;AACA,QAAQ,gEAA0B;AAClC;AACA;AACA,eAAe,iEAA2B;AAC1C;AACA;AACA,QAAQ,iEAA2B;AACnC;AACA;AACA,eAAe,wDAAkB;AACjC;AACA;AACA,QAAQ,wDAAkB;AAC1B;AACA;AACA,eAAe,uDAAiB;AAChC;AACA;AACA,QAAQ,uDAAiB;AACzB;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,oDAAc;AAC7B;AACA;AACA,eAAe,yDAAmB;AAClC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,eAAe,6DAAuB;AACtC;AACA;AACA,eAAe,2DAAqB;AACpC;AACA;AACA;AACA,eAAe,0DAAoB;AACnC;AACA;AACA,eAAe,4DAAsB;AACrC;AACA;AACA,kBAAkB,mDAAU;AAC5B,kBAAkB,mDAAU;AAC5B,oBAAoB,uDAAY;AAChC,eAAe,mDAAO;AACtB,eAAe,6CAAO;AACtB,YAAY,uCAAI;AAChB,YAAY,uCAAI;AAChB,mBAAmB,qDAAW;AAC9B,8BAA8B,2EAAsB;AACpD,qBAAqB,yDAAa;AAClC,mBAAmB,qDAAW;AAC9B,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,WAAW,sCAAG;AACd,iBAAiB,kDAAS;AAC1B,eAAe,8CAAO;AACtB,eAAe,8CAAO;AACtB,YAAY,wCAAI;AAChB,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,sBAAsB,4DAAc;AACpC,iBAAiB,kDAAS;AAC1B,aAAa,0CAAK;AAClB,iBAAiB,kDAAS;AAC1B,iBAAiB,kDAAS;AAC1B,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,oBAAoB,wDAAY;AAChC,kBAAkB,oDAAU;AAC5B,gBAAgB,gDAAQ;AACxB,uBAAuB,8DAAe;AACtC,wBAAwB,gEAAgB;AACxC,aAAa,0CAAK;AAClB,YAAY,wCAAI;AAChB,gBAAgB,gDAAQ;AACxB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,cAAc,4CAAM;AACpB,oBAAoB,wDAAY;AAChC,gBAAgB,gDAAQ;AACxB,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,kBAAkB,oDAAU;AAC5B,kBAAkB,yDAAU;AAC5B,aAAa,0CAAK;AAClB,sBAAsB,4DAAc;AACpC,oBAAoB,wDAAY;AAChC,iBAAiB,kDAAS;AAC1B,qBAAqB,0DAAa;AAClC,iBAAiB,kDAAS;AAC1B,kBAAkB,oDAAU;AAC5B,iBAAiB,kDAAS;AAC1B,gBAAgB,gDAAQ;AACxB,YAAY,wCAAI;AAChB,oBAAoB,wDAAY;AAChC,cAAc,6CAAM;AACpB,kBAAkB,oDAAU;AAC5B,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,gBAAgB,gDAAQ;AACxB,gBAAgB,gDAAQ;AACxB,cAAc,4CAAM;AACpB,mBAAmB,sDAAW;AAC9B,oBAAoB,wDAAY;AAChC,qBAAqB,0DAAa;AAClC,gBAAgB,gDAAQ;AACxB,mBAAmB,sDAAW;AAC9B,qBAAqB,0DAAa;AAClC,mBAAmB,sDAAW;AAC9B,eAAe,8CAAO;AACtB,cAAc,4CAAM;AACpB,cAAc,4CAAM;AACpB,eAAe,8CAAO;AACtB,sBAAsB,4DAAc;AACpC,aAAa,0CAAK;AAClB,aAAa,+CAAK;AAClB;AACA;AACA,mCAAmC,oEAA2B;AAC9D,iCAAiC,kEAAyB;AAC1D,oCAAoC,sEAA4B;AAChE,kCAAkC,oEAA0B;AAC5D,mBAAmB,qDAAW;AAC9B,uBAAuB,yDAAe;AACtC,qBAAqB,kDAAa;AAClC,kBAAkB,8CAAU;AAC5B,iBAAiB,6CAAS;AAC1B,wBAAwB,wDAAgB;AACxC,wBAAwB,wDAAgB;AACxC,2BAA2B,2DAAmB;AAC9C,mBAAmB,uDAAW;AAC9B,6BAA6B,kEAAqB;AAClD,iBAAiB,mDAAS;AAC1B,2BAA2B,8DAAmB;AAC9C,yBAAyB,yDAAiB;AAC1C,iBAAiB,8CAAS;;;;;;;;;;;;;;;;;;AClV1B,iBAAiB,SAAI,IAAI,SAAI;AAC7B,4BAA4B,+DAA+D,iBAAiB;AAC5G;AACA,oCAAoC,MAAM,+BAA+B,YAAY;AACrF,mCAAmC,MAAM,mCAAmC,YAAY;AACxF,gCAAgC;AAChC;AACA,KAAK;AACL;AACiC;AAC1B;AACP;AACA;AACA;AACA,CAAC,gCAAgC;AAC1B;AACP;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8CAA8C;AAC9D,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,sBAAsB,oBAAoB,EAAE,KAAK;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,QAAQ;AAC3D,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6CAA6C;AAC7C;AACA,0BAA0B,mBAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9XO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC98GA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzhBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;ACzFO;AACP;AACA;AACA,cAAc;AACd;;;;;;;;;;;;;;;ACJO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9kCA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC1eO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9pCO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;ACrhBA;AACA;AACA;AACA;AAC6C;AACF;AACI;AACJ;AACI;AAC/C;AACA,YAAY,UAAU;AACtB;AACO;AACP,IAAI,0DAAW;AACf,IAAI,4DAAY;AAChB,IAAI,4DAAY;AAChB,IAAI,wDAAU;AACd,IAAI,wDAAU;AACd;AACA;AACA;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC+B;AACgB;AACI;AAC5C;AACP,IAAI,4CAAS,YAAY,wDAAW,EAAE,4DAAc;AACpD;;;;;;;;;;;;;;;;;;ACfA;AACA;AAC+B;AACc;AACI;AAC1C;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACuB;AACD;AAC9C;AACP,IAAI,4CAAS,aAAa,+DAAiB,EAAE,8DAAe;AAC5D;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACc;AACI;AAC1C;AACP,IAAI,4CAAS,WAAW,sDAAU,EAAE,0DAAa;AACjD;;;;;;;;;;;;;;;;;;ACPA;AACA;AAC+B;AACkB;AACI;AAC9C;AACP,IAAI,4CAAS,aAAa,0DAAY,EAAE,8DAAe;AACvD;;;;;;;;;;;;;;;ACPO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9lDA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;AC/iBO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC91BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;AC71BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;ACr2BO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACr2BA;AACA;AAC+B;AACkB;AACY;AACR;AACG;AACT;AACE;AAC1C;AACP;AACA;AACA,yBAAyB,iEAAY;AACrC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,wDAAQ;AACjC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,0DAAS;AAClC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,8DAAc;AACvC,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,yBAAyB,sEAAkB;AAC3C,gBAAgB,iCAAiC;AACjD,QAAQ,4CAAS;AACjB;AACA;AACA;AACA,QAAQ,sEAA0B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AACA;AAC8B;AACA;AACQ;AACc;AACpB;AACkB;AAChB;AACU;AACM;AACqB;AACvC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA,iDAAiD,sBAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,0BAA0B;AACtE;AACA,YAAY,kDAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA,wCAAwC,sBAAsB,IAAI;AAClE;AACA,0CAA0C,6DAAe;AACzD,6BAA6B,qDAAW;AACxC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,kCAAkC,cAAc,4DAAuB,kCAAkC;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,8BAA8B,uCAAuC,SAAS,wCAAwC,OAAO,6BAA6B;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe;AACjD,+EAA+E,kBAAkB;AACjG;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA,0BAA0B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AACvE;AACA,0CAA0C,wDAAqB;AAC/D;AACA;AACA,wCAAwC,kCAAkC;AAC1E,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC3E;AACA,6BAA6B,0CAAK,CAAC,mDAAc,UAAU,oDAAe;AAC1E;AACA,uCAAuC,wDAAqB;AAC5D;AACA;AACA,4CAA4C,+BAA+B;AAC3E;AACA,2DAA2D,+BAA+B;AAC1F;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAc;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uDAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,gDAAgD,qCAAqC,0DAAqB,oBAAoB;AAC9H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA,qBAAqB,+CAAQ;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,oCAAoC,sDAAiB;AACrD,0BAA0B,+CAAY;AACtC;AACA,yCAAyC,mDAAY;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+CAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA,2CAA2C,6DAAe;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,qDAAW;AACzE;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,qCAAqC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,gBAAgB,8CAA8C;AAC9D;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,8CAAO;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,yCAAyC;AAClF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,oBAAoB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6BAA6B;AACrE;AACA,2EAA2E,wDAAoB;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACn2BA;AACA;AACA;AACA;AACA;AACuC;AACD;AACtC;AACO;AACP;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oCAAoC,EAAE,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAe,GAAG,iBAAiB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACA;AACA;AACqD;AACG;AACtB;AACc;AACT;AACD;AAC/B,6BAA6B,+CAAQ;AAC5C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA,kCAAkC,gEAAoB;AACtD;AACA,iCAAiC,6DAAsB;AACvD,oDAAoD,+DAA0B;AAC9E;AACA,iCAAiC,6DAAsB;AACvD,gDAAgD,+DAA0B;AAC1E;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA,oBAAoB,uCAAuC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,mDAAmD;AACnD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa,IAAI;AAC5C;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB,EAAE;AAChD;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;ACnKA;AACA;AACA;AACgD;AACK;AACf;AACtC;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,gBAAgB,wDAAY;AAC5B;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AAC4C;AACsB;AAC9B;AACF;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,KAAK,GAAG,SAAS;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA;AACA;AACA,eAAe,sDAAc;AAC7B;AACA;AACA,uCAAuC,SAAS,EAAE,KAAK,EAAE,IAAI;AAC7D,wCAAwC,SAAS,EAAE,IAAI;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,SAAS,GAAG,KAAK,GAAG,IAAI;AACxE;AACA,sDAAsD,MAAM;AAC5D,gDAAgD,SAAS,GAAG,IAAI;AAChE;AACA;AACA;AACA;AACA,QAAQ,8CAAO;AACf;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA,yBAAyB;AACzB;AACA,kBAAkB,+CAAY,sBAAsB,MAAM;AAC1D;AACA;AACA,gBAAgB,cAAc;AAC9B;AACA,sBAAsB,+CAAY,sBAAsB,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2EAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qDAAW;AACnC;AACA;AACA,eAAe,8CAAO,oCAAoC,WAAW;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxYA;AACA;AACA;AAC8B;AACS;AAChC,wBAAwB,uCAAI;AACnC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA,uCAAuC,6BAA6B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC9DA;AACwC;AACV;AACI;AACK;AACD;AAC/B,wBAAwB,iDAAS;AACxC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,kBAAkB,+DAA0B,6DAA6D;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAW,2BAA2B,8CAAW;AACxE;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,+DAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,4CAAS;AACpD;AACA;AACA,gEAAgE,4CAAS;AACzE,qCAAqC,uDAAkB;AACvD;AACA;AACA;AACA,mDAAmD,0CAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;AC1IA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACU;AACF;AACE;AACF;AACJ;AACA;AACkB;AACvB;AACG;AAChC;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACO,6BAA6B,+CAAQ;AAC5C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA,iCAAiC,uDAAW;AAC5C;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA,8BAA8B,yCAAyC;AACvE;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,0GAA0G,oEAA4B;AACtI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,iDAAS;AAC1C;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oEAA4B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAW;AAC5C,4CAA4C,+CAAQ,GAAG,2CAAM;AAC7D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACM;AACG;AAChC,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA,2BAA2B,kDAAe,CAAC,GAAG;AAC9C;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAC6B;AACA;AACE;AACL;AACH;AACA;AACO;AACW;AACT;AACF;AACP;AACI;AACC;AACJ;AACF;AACM;AACF;AACA;AACH;AACA;AACvB;AAC4B;AACD;AACM;AACL;AACJ;AACI;AACA;AACK;AACF;AACF;AACE;AACF;AACF;AACO;AACC;AACX;AACD;AACI;AACI;AACJ;AACG;AACL;AACM;AACJ;AACK;AACL;AACE;AACL;AACO;AACE;AACF;AACH;AACI;AACJ;AACM;AACH;AACF;AACD;AACD;AACE;AACN;AACS;AACD;AACL;AACG;AACJ;AACzB;AAC0B;AACC;AACA;AACF;AACK;AACC;AACC;AACL;AACA;AACG;AACC;AACC;AACF;AACJ;AACD;AACA;AACG;AACL;AACvB;AACsB;AACI;AACO;AACT;AACF;;;;;;;;;;;;;;;;;AC7FtB;AACA;AACA;AACA;AACA;AACgC;AACM;AAC/B;AACP;AACA,yBAAyB,yCAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,oDAAgB;AAClD;AACA,sBAAsB,+CAAY,0CAA0C,SAAS;AACrF;AACA,uFAAuF,oDAAgB;AACvG;AACA;AACA;AACA,6BAA6B,sDAAkB;AAC/C,wBAAwB,IAAI,sDAAkB,EAAE;AAChD,+CAA+C,sDAAkB;AACjE,6BAA6B,+CAAW;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACK;AACN;AAC1B,2BAA2B,yDAAa;AAC/C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD,kCAAkC;AAClC;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,2DAAsB;AACnD,0BAA0B,yCAAK;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,wDAAmB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,6BAA6B,2BAA2B;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,SAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,uBAAuB,wDAAmB,CAAC,8CAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,qEAAyB;AACrE;AACA;AACA;AACA;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;;;;;;;;;;;;;;;;;;ACrSA;AACA;AAC8C;AAChB;AACS;AAChC,yBAAyB,uCAAI;AACpC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA,gBAAgB,eAAe;AAC/B,gCAAgC,uDAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClCA;AACA;AACoC;AACG;AACQ;AACxC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8CAAO,sCAAsC,UAAU;AAC/D,eAAe,8CAAO,oCAAoC,UAAU;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC0C;AACA;AACI;AAChB;AACc;AAChB;AACsB;AACA;AACJ;AACR;AACM;AACJ;AACM;AACX;AACI;AACI;AACP;AACpC;AACA;AACA;AACA;AACA,QAAQ,2CAAG;AACX;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAgB,SAAS,2DAAkB;AACnD,QAAQ,6DAAkB,SAAS,6DAAoB;AACvD,QAAQ,4CAAU,SAAS,qDAAY;AACvC,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,oDAAa,SAAS,wDAAe;AAC7C,QAAQ,kEAAqB,SAAS,gEAAuB;AAC7D,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,+DAAmB,SAAS,8DAAqB;AACzD,QAAQ,8DAAmB,SAAS,8DAAqB;AACzD,QAAQ,sDAAe,SAAS,0DAAiB;AACjD,QAAQ,0DAAiB,SAAS,4DAAmB;AACrD,QAAQ,4DAAkB,SAAS,6DAAoB;AACvD,QAAQ,8CAAW,SAAS,sDAAa;AACzC,QAAQ,qDAAc,SAAS,yDAAgB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAoB,iBAAiB,2DAAkB;AAC/D;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC7IA;AACA;AACA;AACA;AACoC;AACJ;AACM;AACkB;AACtB;AACc;AACE;AACjB;AACjC;AACA;AACA;AACA,6BAA6B,+CAAQ,GAAG,+BAA+B;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,+BAA+B,6CAAO;AAC7C;AACA,eAAe,iEAAyB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD,8CAA8C,yJAAyJ,+DAA0B,kDAAkD,+DAA0B,2EAA2E;AACxX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC,YAAY,qDAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,uEAA2B;AAC3E,yCAAyC,qDAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AC7LA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,wBAAwB;AAC9C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,wBAAwB;AAC1C,oBAAoB,yBAAyB;AAC7C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,kBAAkB,yBAAyB;AAC3C,kBAAkB,wBAAwB;AAC1C,sBAAsB,wBAAwB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,4BAA4B;AAC/C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,2BAA2B;AAC5C,kBAAkB,2BAA2B;AAC7C,oBAAoB,4BAA4B;AAChD,qBAAqB,4BAA4B;AACjD,kBAAkB,2BAA2B;AAC7C,mBAAmB,2BAA2B;AAC9C,iBAAiB,4BAA4B;AAC7C,kBAAkB,4BAA4B;AAC9C,oBAAoB,2BAA2B;AAC/C,qBAAqB,2BAA2B;AAChD,kBAAkB,4BAA4B;AAC9C,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,iCAAiC,UAAU;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,eAAe;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wCAAwC,UAAU;AACpF;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,4CAA4C,cAAc;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAChG;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,KAAK,IAAI,UAAU;AAC5F;AACA;AACA;AACA,4BAA4B,eAAe;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,eAAe;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,uCAAuC,UAAU;AACnF;AACA;AACA,sBAAsB,+CAAY,mCAAmC,MAAM,IAAI,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClXA;AACA;AAC8B;AACY;AACR;AACI;AACC;AACQ;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,mBAAmB,+CAAQ;AAClC;AACA;AACA;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,QAAQ,uDAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,sDAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,oBAAoB,2DAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,2BAA2B;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,wDAAwD,yDAAoB;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,sCAAsC;AACtC,uCAAuC;AACvC,0BAA0B;AAC1B,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,oDAAY;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,4DAAuB;AACzC;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,4DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AC1eA;AACA;AAC4C;AACZ;AACF;AACA;AACI;AACK;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,gEAA2B;AAC7C;AACA,qBAAqB,sDAAiB;AACtC;AACA,QAAQ,4DAAuB;AAC/B;AACA;AACA;AACA,cAAc,sDAAiB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,8DAAyB;AACjC;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B,EAAE;AACzF;AACA;AACA;AACA,cAAc,kDAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,6CAAU;AACrD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,MAAM,mBAAmB,0CAAO,iBAAiB;AACnG;AACA;AACA;AACA;AACA;AACA,YAAY,qDAAiB;AAC7B,sCAAsC,eAAe;AACrD,aAAa;AACb;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACwC;AACF;AACJ;AACK;AACP;AACzB,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,iDAAS;AACtC,yBAAyB,yCAAK;AAC9B;AACA;AACA,wBAAwB,sDAAiB;AACzC,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACA;AACgC;AACM;AACR;AACI;AACU;AACM;AACE;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,+CAAQ;AACtC;AACA;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,6CAA6C;AAC7C;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,8CAAO;AAC5C,oFAAoF,8DAAuB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,8DAAuB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,4DAAuB;AACvD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yDAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,0CAA0C,UAAU;AACtF;AACA;AACA;AACA,yBAAyB,yCAAK;AAC9B,kCAAkC,mBAAmB;AACrD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,yCAAK,CAAC,2DAAsB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4CAAS;AACrC;AACA,YAAY,qDAAS;AACrB;AACA,gCAAgC,4CAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,4CAAS;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,oEAA0B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACtRA;AACA;AACA;AACgC;AACwB;AACtB;AACkB;AACpD;AACO,0BAA0B,+CAAQ;AACzC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA,4BAA4B,sBAAsB;AAClD,iDAAiD,4DAAqB;AACtE,iDAAiD,6DAAsB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,wBAAwB;AAChD;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA,wBAAwB,4DAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,6DAAsB;AACpG,qBAAqB,4DAAuB;AAC5C,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,qBAAqB,4DAAuB;AAC5C,sBAAsB,4DAAuB;AAC7C,YAAY,uDAAW;AACvB,yBAAyB,4DAAuB;AAChD,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,sBAAsB;AACjG;AACA;AACA,6BAA6B,8DAAuB;AACpD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA,kCAAkC,6DAAsB;AACxD,YAAY,qDAAiB;AAC7B;AACA,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;ACxFA;AACA;AACA;AAC2C;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,cAAc;AACnE,kDAAkD,4BAA4B;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnNA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,yCAAK,2BAA2B,0BAA0B;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB,gCAAgC,mCAAmC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB,gCAAgC,mCAAmC;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,2BAA2B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,2BAA2B,yEAAyE;AACpG;AACA;AACA;AACA;AACA;AACA,oIAAoI;AACpI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnHA;AACA;AACuC;AAChC;AACP;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACgD;AACN;AACI;AACR;AACU;AACzC;AACP;AACA;AACA;AACA,CAAC,4CAA4C;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA,CAAC,kDAAkD;AACnD;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+CAAY,gDAAgD,aAAa;AACvG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kDAAY;AACjC,8BAA8B,+CAAY;AAC1C;AACA,2DAA2D,0BAA0B;AACrF;AACA,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,yDAAa;AAC5C;AACA;AACA,qBAAqB,+CAAS;AAC9B,8BAA8B,+CAAY;AAC1C;AACA,+BAA+B,mDAAU;AACzC;AACA;AACA,0BAA0B,+CAAY,8CAA8C,QAAQ;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9HA;AACgC;AACQ;AACN;AACK;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,yBAAyB,iDAAS;AACzC;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA,0BAA0B,yCAAK,YAAY,4DAAuB;AAClE;AACA,SAAS;AACT,qCAAqC,+CAA+C;AACpF;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvBA;AACA;AAC4C;AACd;AACM;AACiB;AACP;AACQ;AACE;AACT;AACD;AACJ;AACF;AACH;AACH;AACc;AACE;AACZ;AACtC;AACA;AACA;AACA;AACA,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB,KAAK,gEAAqB;AAC1B,KAAK,mEAAsB;AAC3B;AACA;AACA,KAAK,mEAAsB;AAC3B,KAAK,gEAAqB;AAC1B,KAAK,2DAAgB;AACrB,KAAK,gDAAa;AAClB;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,uDAAc;AAC7B;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA,0BAA0B,6DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,uCAAuC,wHAAwH,gEAA0B,oHAAoH;AAC7S,wBAAwB;AACxB,wCAAwC;AACxC;AACA;AACA,6BAA6B,kDAAO,yBAAyB,6DAAkB,GAAG,2DAAgB;AAClG;AACA,gCAAgC,kDAAO,0BAA0B,6DAAkB,GAAG,2DAAgB;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4BAA4B;AACpD,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,iEAA2B;AAChE;AACA;AACA,0DAA0D,iEAA2B;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qFAAqF,iEAA2B,EAAE;AACjJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB,gBAAgB,cAAc;AAC9B;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA,8BAA8B,uEAA2B;AACzD;AACA;AACA;AACA,oDAAoD,uEAA2B;AAC/E;AACA;AACA;AACA;AACA,qCAAqC,mEAAwB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,wDAAU;AAC1C;AACA;AACA;AACA;AACA,gCAAgC,+CAAK;AACrC;AACA;AACA;AACA;AACA,iCAAiC,uDAAY;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAU;AAC1C;AACA;AACA;AACA,wCAAwC;AACxC,gCAAgC,kDAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qEAAyB;AAC5D;AACA;AACA;AACA;AACA;AACA,gBAAgB,6BAA6B,EAAE,sDAAW;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,mEAAwB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,yBAAyB,qEAAyB;AAClD;AACA;AACA;AACA;AACA;AACA,kDAAkD,gDAAa;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,qEAAyB;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,0DAA0D,gEAAqB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,qEAAyB;AAC9E;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,2DAA2D,mEAAsB;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,uEAA2B;AAClD;AACA,6BAA6B,uDAAY;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,uEAA2B;AAC9E;AACA;AACA,8BAA8B,qEAAyB;AACvD;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA,6CAA6C,qEAAyB;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,0DAAa;AAC1C;AACA;AACA;AACA,uDAAuD,qEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,QAAQ;AAC/C,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,uEAA2B;AAC1E,+CAA+C,qEAAyB;AACxE;AACA;AACA,gEAAgE,mEAAwB;AACxF;AACA,0CAA0C,kDAAO,CAAC,6DAAkB;AACpE;AACA;AACA,0CAA0C,kDAAO,CAAC,2DAAgB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA,6BAA6B,sDAAS;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gDAAY;AAClC;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA,kFAAkF;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,qDAAqD,uEAA2B;AAChF;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wDAAwD,uEAA2B;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,6BAA6B,sDAAa;AAC1C;AACA,6BAA6B,8DAAqB;AAClD;AACA,6BAA6B,+DAAsB;AACnD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,iDAAiD,uEAA2B,EAAE,yDAAgB;AAC9F;AACA,0CAA0C,mEAAwB;AAClE;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;AChuBA;AACA;AACA;AACuE;AACrC;AACK;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;AAC5B,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrMA;AACA;AACoC;AACiB;AACrB;AACE;AACK;AACD;AACtC;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA,6BAA6B;AAC7B,+BAA+B;AAC/B;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,6BAA6B,6CAAO;AAC3C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA,yBAAyB,gEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,qCAAqC,wBAAwB;AAC7D,SAAS;AACT;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY,qDAAqD,UAAU;AACrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACE;AACC;AACD;AAC/B,2BAA2B,6CAAO;AACzC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAuB,iBAAiB,8DAAuB;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8DAAuB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC/JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACF;AACa;AACR;AACD;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,wBAAwB,6CAAO;AACtC;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0DAA0D,mEAA8B;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,EAAE,uDAAiB;AACzD;AACA;AACA;AACA;AACA;AACA,8BAA8B,wDAAiB;;;;;;;;;;;;;;;;;;;ACjR/C;AACA;AACA;AACA;AACoC;AACG;AACN;AAC1B;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sDAAsD;AAChD,4BAA4B,6CAAO;AAC1C;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC4C;AACN;AACA;AACR;AACkB;AACd;AACK;AACsB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA,iFAAiF,0CAAO;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,8CAAO;AACrC;AACA;AACA;AACA;AACA;AACO,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA;AACA;AACA;AACA;AACA,eAAe,0CAAO;AACtB;AACA;AACA;AACA;AACA;AACA,eAAe,4CAAS;AACxB;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA,4BAA4B,4DAAuB;AACnD;AACA;AACA,iCAAiC,4DAAuB;AACxD;AACA;AACA;AACA,0DAA0D,oDAAY,2CAA2C,oDAAY;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D;AAC5D;AACA,6DAA6D,+DAA0B;AACvF;AACA,6EAA6E;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oGAAoG,0CAAO;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI,GAAG,uBAAuB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAW;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+CAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0CAAO,GAAG,4CAAS;AACzE;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0BAA0B,yDAAoB;AAC9C;AACA,0BAA0B,+CAAY,qDAAqD,IAAI;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,iBAAiB;AACxD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,2CAA2C;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8DAAyB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qDAAW;AAC9B;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,6CAAU;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,4BAA4B,EAAE,wDAAiB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E,4CAAS;AACvF;AACA;AACA,kGAAkG,0CAAO;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,0CAAO;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B,kBAAkB,aAAa;AAC/B,kBAAkB,aAAa;AAC/B,kBAAkB,QAAQ;AAC1B;AACA,kBAAkB,QAAQ;AAC1B,kBAAkB,cAAc;AAChC;AACA,kBAAkB,cAAc;AAChC,kBAAkB,QAAQ;AAC1B,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B,WAAW,IAAI;AAC7D;AACA;AACA,sEAAsE,6CAAU;AAChF;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA,gBAAgB,iKAAiK;AACjL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,4CAAS;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAmB;AACxF;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAI;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA,+BAA+B,0CAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;AC3jCA;AACA;AACqD;AACrB;AACgB;AACd;AACK;AAChC,yBAAyB,yDAAa;AAC7C;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,+DAA+D,kBAAkB;AACvL;AACA;AACA;AACA;AACA,QAAQ,qDAAiB,sDAAsD,4DAAuB,iEAAiE,mBAAmB;AAC1L;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA,wBAAwB,4DAAuB;AAC/C;AACA;AACA;AACA;AACA,YAAY,4DAAuB;AACnC;AACA,YAAY,qDAAiB,iCAAiC,kBAAkB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACjKA;AACA;AACqD;AACL;AACA;AACT;AAChC,2BAA2B,yDAAa;AAC/C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA,+CAA+C;AAC/C,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACqD;AACrB;AACuC;AACrC;AACc;AACT;AAChC,yBAAyB,yDAAa;AAC7C;AACA,eAAe,2DAAmB;AAClC;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,wBAAwB,uEAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAoB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,oBAAoB,mCAAmC;AACtH;AACA,sCAAsC,gEAAoB;AAC1D;AACA;AACA;AACA;AACA;AACA,+BAA+B,yDAAoB;AACnD;AACA,YAAY,qDAAiB;AAC7B,iBAAiB,kDAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,qDAAiB;AACzD;AACA,qBAAqB;AACrB,8CAA8C,+DAA0B;AACxE;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACqD;AACkB;AACd;AAClB;AACD;AAC/B,wBAAwB,yDAAa;AAC5C;AACA,eAAe,0DAAkB;AACjC;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA,uCAAuC,uCAAuC,oEAA6B,EAAE;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,sEAA0B;AAC3C,iBAAiB,uEAA2B;AAC5C;AACA,sCAAsC,sEAA0B;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,uEAA2B;AAC5C,iBAAiB,uEAA2B;AAC5C;AACA,mDAAmD,+DAAwB;AAC3E;AACA;AACA,wDAAwD,8DAAuB;AAC/E;AACA;AACA,sCAAsC,uEAA2B;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;ACpFA;AACA;AACA;AACA;AACoC;AACG;AACD;AAC/B,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,uDAAiB;;;;;;;;;;;;;;;;;;;ACnLxD;AACA;AACqD;AACL;AACT;AAChC;AACP;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AACxB,oBAAoB,yDAAa;AACxC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACoC;AACF;AACK;AACI;AAC3C;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO,mBAAmB,6CAAO;AACjC;AACA,eAAe,qDAAa;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sDAAiB;AAChC;AACA;AACA,eAAe,uDAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6GAA6G;AAC7G;AACA;AACA;AACA,kBAAkB,+CAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4DAAuB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AClKA;AACA;AACA;AACA;AACA;AACgC;AACF;AACA;AACI;AACK;AACD;AAC/B,4BAA4B,uCAAI;AACvC;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;AACA;AACA,gBAAgB,aAAa;AAC7B;AACA,yDAAyD,4CAAS;AAClE;AACA,gCAAgC,yCAAK,mDAAmD,UAAU;AAClG;AACA;AACA;AACA;AACA,wCAAwC,4CAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,8DAAyB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,wBAAwB,0CAAO;AAC/B,0BAA0B,0CAAO,kBAAkB,4CAAS;AAC5D,sBAAsB,+CAAY,2CAA2C,UAAU;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,4DAAuB,iCAAiC,qBAAqB;AACzG;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,4CAAS;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA,gDAAgD,8CAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,yDAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uCAAI;AAC7B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChOA;AACA;AACA;AACA;AACA;AACqD;AACG;AAClB;AACR;AACI;AACmC;AAC/B;AAC/B,2BAA2B,+CAAQ;AAC1C;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA,sBAAsB,4DAAuB;AAC7C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA,iBAAiB,uDAAW;AAC5B,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA,2DAA2D,+DAA0B;AACrF;AACA,4BAA4B,6DAAsB;AAClD;AACA;AACA;AACA,iCAAiC,6DAAsB;AACvD;AACA;AACA;AACA;AACA;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA,oDAAoD;AACpD;AACA;AACA,6BAA6B,8DAAuB;AACpD;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB,EAAE;AACjD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,4BAA4B;AAC5B,mBAAmB,gEAAyB,EAAE;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gEAAyB,WAAW,gEAAyB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,0CAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,0CAAO;AAClE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,2DAA2D,4CAAS;AACpE;AACA;AACA,mGAAmG,+DAA0B;AAC7H;AACA;AACA,iBAAiB,6DAAsB;AACvC;AACA;AACA,iBAAiB,8DAAuB;AACxC;AACA;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,2DAAe;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA,qBAAqB,8DAAuB;AAC5C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA,qBAAqB,gEAAyB;AAC9C;AACA;AACA,oBAAoB,8DAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;;AC7PA;AACA;AACA;AACA;AACA;AACqD;AACrB;AACM;AACiC;AACjC;AAC/B,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B;AACA,wBAAwB,OAAO;AAC/B;AACA,yBAAyB;AACzB;AACA,qBAAqB,qDAAS;AAC9B;AACA,wBAAwB,cAAc;AACtC,yBAAyB;AACzB;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA,SAAS;AACT;AACA;AACA,oDAAoD,eAAe;AACnE;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,uCAAuC,kBAAkB;AACzD;AACA;AACA;AACA;AACA,wBAAwB,6DAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA,gBAAgB,kDAAM;AACtB;AACA;AACA;AACA,gCAAgC,eAAe;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uDAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,0BAA0B,+CAAY,mCAAmC,WAAW;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uDAAW;AAC3B,mCAAmC,WAAW;AAC9C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C,oBAAoB,qDAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,QAAQ,qDAAiB;AACzB,gCAAgC,WAAW,GAAG,MAAM;AACpD,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB,UAAU,4CAAS;AACnB,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACvNA;AACA;AACA;AACqD;AACL;AACd;AAC4B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,wBAAwB;AAC7E;AACA;AACA;AACA,uDAAuD,0BAA0B;AACjF;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACO,yBAAyB,yDAAa;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,mEAA8B;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,2BAA2B,kDAAe;AAC1C,yBAAyB,4CAAS;AAClC,2BAA2B,oDAAiB;AAC5C,0BAA0B,mDAAgB;AAC1C;AACA,qCAAqC,sBAAsB;AAC3D,0CAA0C,iFAAiF;AAC3H;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,6CAAM;AAC9C;AACA,qCAAqC,6CAAM;AAC3C;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA;AACA,wDAAwD,qBAAqB;AAC7E;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAgD;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,qDAAc;AAC3C,2BAA2B,qDAAc;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAC9E,6BAA6B,QAAQ,EAAE,QAAQ,QAAQ,IAAI,EAAE,GAAG;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,IAAI,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,eAAe,KAAK,SAAS;AACvE;AACA;AACA;AACA;AACA,uDAAuD,sBAAsB,gBAAgB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB,4DAA4D;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,gDAAa;AACtC,6BAA6B,mDAAgB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACnjBA;AACA;AAC4C;AACR;AACI;AACV;AACE;AACO;AACD;AACtC;AACA;AACA;AACA;AACA;AACO,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,qDAAqD,iLAAiL,cAAc,yBAAyB,YAAY,mDAAmD,0BAA0B;AACtW;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAyD,EAAE;AACpF;AACA;AACA;AACA,yBAAyB;AACzB,yDAAyD,WAAW;AACpE,iDAAiD,aAAa;AAC9D,UAAU,EAAE;AACZ;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D,gGAAgG,wFAAwF;AACxL,gDAAgD,+EAA+E,aAAa,uBAAuB;AACnK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,8BAA8B,iDAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,sDAAkB;AAClE;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,mEAAmE,wDAAoB;AACvF;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA;AACA,+BAA+B,qDAAW;AAC1C,QAAQ,4DAAwB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,YAAY,+DAAuB;AACnC;AACA;AACA;AACA;AACA;AACA,wBAAwB,mDAAgB;AACxC,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA;;;;;;;;;;;;;;;;;;AC3MA;AACsC;AACN;AACM;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ;AACjB,UAAU,QAAQ;AAClB,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,UAAU,kBAAkB;AAC5B,WAAW,kBAAkB;AAC7B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,UAAU,kBAAkB;AAC5B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,SAAS,kBAAkB;AAC3B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B,YAAY,kBAAkB;AAC9B,aAAa,kBAAkB;AAC/B;AACA;AACA,cAAc,eAAe;AAC7B,YAAY,eAAe;AAC3B,aAAa,eAAe;AAC5B,YAAY,eAAe;AAC3B,eAAe,eAAe;AAC9B,kBAAkB,eAAe;AACjC,uBAAuB,eAAe;AACtC,oBAAoB,eAAe;AACnC,oBAAoB,eAAe;AACnC,eAAe,eAAe;AAC9B,cAAc,gBAAgB;AAC9B;AACA;AACA,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,wCAAwC;AAClD,WAAW,yCAAyC;AACpD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,uCAAuC;AACnD,aAAa,wCAAwC;AACrD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B,UAAU,uCAAuC;AACjD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,uCAAuC;AACjD,WAAW,wCAAwC;AACnD,SAAS,uBAAuB;AAChC,UAAU,wCAAwC;AAClD,YAAY,wCAAwC;AACpD,aAAa,yCAAyC;AACtD,UAAU,wCAAwC;AAClD,WAAW,wCAAwC;AACnD,SAAS,sBAAsB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B,SAAS,WAAW;AACpB,UAAU,iBAAiB;AAC3B,UAAU,kBAAkB;AAC5B,UAAU,iBAAiB;AAC3B,UAAU,0BAA0B;AACpC,UAAU,gBAAgB;AAC1B,UAAU,qBAAqB;AAC/B,UAAU,uBAAuB;AACjC;AACA;AACA,WAAW,0DAA0D;AACrE,YAAY,gEAAgE;AAC5E,SAAS,yDAAyD;AAClE,UAAU,+DAA+D;AACzE,SAAS,4DAA4D;AACrE,MAAM,KAAK,+DAA+D;AAC1E,MAAM,KAAK,gEAAgE;AAC3E,UAAU,oFAAoF;AAC9F,SAAS,wEAAwE;AACjF,YAAY,gFAAgF;AAC5F,WAAW,0EAA0E;AACrF,YAAY,uEAAuE;AACnF,UAAU,+DAA+D;AACzE,WAAW,sEAAsE;AACjF,SAAS,yDAAyD;AAClE,SAAS,0DAA0D;AACnE,WAAW,mEAAmE;AAC9E,aAAa,mEAAmE;AAChF,YAAY,mEAAmE;AAC/E,YAAY,mEAAmE;AAC/E,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,8BAA8B,iEAAiE;AAC/F,2BAA2B,8DAA8D;AACzF,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,wBAAwB,2DAA2D;AACnF,uBAAuB,0DAA0D;AACjF,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,oCAAoC,uEAAuE;AAC3G,iCAAiC,oEAAoE;AACrG,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,+BAA+B,kEAAkE;AACjG,iCAAiC,oEAAoE;AACrG,4BAA4B,+DAA+D;AAC3F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,sCAAsC,yEAAyE;AAC/G,wCAAwC,2EAA2E;AACnH,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,kCAAkC,qEAAqE;AACvG,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,sCAAsC,yEAAyE;AAC/G,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,iCAAiC,oEAAoE;AACrG,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,kCAAkC,qEAAqE;AACvG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,+BAA+B,kEAAkE;AACjG,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,6BAA6B,gEAAgE;AAC7F,8BAA8B,iEAAiE;AAC/F,gCAAgC,mEAAmE;AACnG,iCAAiC,oEAAoE;AACrG,+BAA+B,kEAAkE;AACjG,gCAAgC,mEAAmE;AACnG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,uCAAuC,0EAA0E;AACjH,oCAAoC,uEAAuE;AAC3G,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,wCAAwC,2EAA2E;AACnH,qCAAqC,wEAAwE;AAC7G,sCAAsC,yEAAyE;AAC/G,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,qCAAqC,wEAAwE;AAC7G,kCAAkC,qEAAqE;AACvG,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,wBAAwB,2DAA2D;AACnF,wBAAwB,2DAA2D;AACnF,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,0BAA0B,6DAA6D;AACvF,4BAA4B,+DAA+D;AAC3F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,2BAA2B,8DAA8D;AACzF,6BAA6B,gEAAgE;AAC7F,mCAAmC,sEAAsE;AACzG,qCAAqC,wEAAwE;AAC7G,oCAAoC,uEAAuE;AAC3G;AACA;AACA;AACA,KAAK;AACL,4BAA4B,+DAA+D;AAC3F,6BAA6B,gEAAgE;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,YAAY,8CAA8C;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,wDAAwD;AACpE;AACA;AACA;AACA;AACA,KAAK;AACL,UAAU,+CAA+C;AACzD,YAAY,4EAA4E;AACxF,aAAa,4CAA4C;AACzD,aAAa,4CAA4C;AACzD,aAAa,sFAAsF;AACnG,cAAc,iDAAiD;AAC/D,cAAc,iDAAiD;AAC/D,aAAa,oFAAoF;AACjG,cAAc,gDAAgD;AAC9D,cAAc,gDAAgD;AAC9D,cAAc,4FAA4F;AAC1G,eAAe,oDAAoD;AACnE,eAAe,oDAAoD;AACnE,YAAY,4CAA4C;AACxD,UAAU,8CAA8C;AACxD,YAAY,+CAA+C;AAC3D;AACA;AACA,eAAe,4BAA4B;AAC3C,wBAAwB,yBAAyB;AACjD,YAAY,sBAAsB;AAClC,qBAAqB,2BAA2B;AAChD,UAAU,uBAAuB;AACjC,eAAe,6CAA6C;AAC5D,iBAAiB,iDAAiD;AAClE,eAAe,4CAA4C;AAC3D,iBAAiB,yCAAyC;AAC1D,iBAAiB,uCAAuC;AACxD,mBAAmB,qDAAqD;AACxE,iBAAiB,oCAAoC;AACrD,kBAAkB,6BAA6B;AAC/C,aAAa,oBAAoB;AACjC,YAAY,yBAAyB;AACrC,YAAY,2BAA2B;AACvC,gBAAgB,yBAAyB;AACzC,gBAAgB,8BAA8B;AAC9C,YAAY,mBAAmB;AAC/B,qBAAqB,yBAAyB;AAC9C,mBAAmB,uBAAuB;AAC1C,YAAY,mBAAmB;AAC/B,gBAAgB,uBAAuB;AACvC,aAAa,oBAAoB;AACjC;AACO;AACP;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2EAA2E;AAC7G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA,gGAAgG,SAAS;AACzG;AACA;AACA;AACA,wBAAwB;AACxB;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,kFAAkF,eAAe;AACnI;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,+CAA+C;AACnF;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,sBAAsB,+CAAY,8EAA8E,QAAQ;AACxH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,oDAAoD,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,yCAAK;AAC1C;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,gDAAgD,KAAK;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA,4BAA4B,yBAAyB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,SAAS;AACnG;AACA;AACA;AACA;AACA;AACA,mBAAmB,+CAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,0BAA0B,6CAA6C;AACvI;AACA;AACA;AACA,iEAAiE,kDAAc;AAC/E;AACA,2DAA2D,kBAAkB,oBAAoB;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;;;;;;;;;;;;;;;;;;;;;;;AC3xCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC8B;AACE;AACM;AACR;AACkB;AACd;AACY;AACC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACO,sBAAsB,yDAAa;AAC1C;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA,0DAA0D,iBAAiB;AAC3E;AACA;AACA,4DAA4D;AAC5D;AACA,8BAA8B,gEAA2B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4CAAS,CAAC,KAAK,kDAAe,CAAC,GAAG;AACvD,0BAA0B,yDAAoB;AAC9C,QAAQ,8CAAO,kEAAkE,cAAc,cAAc,cAAc;AAC3H;AACA;AACA;AACA;AACA;AACA,kCAAkC,0CAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,0CAAO;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA,+BAA+B,2DAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+BAA+B;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,yBAAyB,6DAAsB;AAC/C,wBAAwB;AACxB;AACA,8BAA8B,8DAAuB;AACrD,gCAAgC;AAChC;AACA,8BAA8B,8DAAuB,iBAAiB,8DAAuB;AAC7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,0CAAO;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,oCAAoC,WAAW,IAAI;AACnE;AACA;AACA;AACA;AACA;AACA,uDAAuD,4CAAS;AAChE;AACA;AACA;AACA;AACA;AACA,sCAAsC,0BAA0B;AAChE;AACA,wFAAwF,0BAA0B;AAClH;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iDAAK;AACrB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,6CAAU;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,qDAAiB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA,4DAA4D,mBAAmB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACqD;AACnB;AACK;AACD;AAC/B,uBAAuB,2CAAM;AACpC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,wBAAwB,0BAA0B;AAClD;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,kDAAe;AAC3B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;ACpGA;AACgC;AACO;AAChC,uBAAuB,yCAAK;AACnC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA,4CAA4C,kEAAkE;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACsC;AACC;AAChC,qBAAqB,+CAAQ;AACpC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACoC;AACiB;AACf;AACJ;AACK;AACI;AAC3C;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACO;AACP;AACA;AACA;AACA,CAAC,kDAAkD;AAC5C,0BAA0B,6CAAO;AACxC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,8EAA8E;AAChG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E,mEAA8B;AACxG;AACA;AACA,0BAA0B,+CAAY,oCAAoC,eAAe;AACzF;AACA;AACA,wBAAwB;AACxB,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8BAA8B;AAC9C;AACA,gCAAgC,iDAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAuB;AACnC;AACA;AACA,gBAAgB,8DAAuB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6CAAU;AACtB;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;;;;;;;;;;;;;;;;;;;ACvLA;AACA;AACgC;AACF;AACS;AACa;AACpD;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,2BAA2B,uCAAI;AACtC;AACA,eAAe,6DAAqB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,0BAA0B,qBAAqB;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,yBAAyB,8CAAO;AAChC,8BAA8B,yCAAK,0BAA0B,sBAAsB;AACnF;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AChHA;AACA;AACqD;AACxB;AAC7B;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC,kDAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,8CAAW;AACpC,2BAA2B,gDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,+DAA4B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,kDAAe,GAAG,oDAAiB;AACtE,oCAAoC,mDAAgB,GAAG,mDAAgB;AACvE;AACA,2BAA2B,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iBAAiB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,wDAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;AC5TA;AACA;AACqD;AACrB;AACF;AACS;AACD;AAC/B;AACP;AACA;AACA;AACA;AACA,CAAC,8CAA8C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACO,uBAAuB,uCAAI;AAClC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC,6BAA6B,yCAAK,oBAAoB,sBAAsB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,8BAA8B;AAClD;AACA,oCAAoC,iDAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,kDAAe;AAC3B;AACA,YAAY,oDAAiB;AAC7B,WAAW,mDAAgB;AAC3B;AACA;;;;;;;;;;;;;;;;;;;;AChNA;AACA;AACoC;AACE;AACJ;AACK;AACQ;AAC/C;AACA;AACA;AACA;AACO,uBAAuB,6CAAO;AACrC;AACA,eAAe,yDAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,+CAAQ,QAAQ;AACzC,iCAAiC;AACjC,kCAAkC,+CAAQ;AAC1C;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,sDAAiB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;;;;;;;;;;;;;;;;;AChSA;AACA;AACA;AACA;AACA;AACsC;AACA;AACtC;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,+CAAQ;AACvC,4BAA4B,+CAAQ;AACpC,sCAAsC;AACtC,mCAAmC;AACnC;AACA,0BAA0B;AAC1B;AACA,wBAAwB;AACxB,0BAA0B;AAC1B,6BAA6B;AAC7B,oCAAoC;AACpC;AACA,yBAAyB;AACzB,0BAA0B;AAC1B,sCAAsC;AACtC,uCAAuC;AACvC,4BAA4B;AAC5B,6BAA6B;AAC7B,8BAA8B;AAC9B,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,uHAAuH;AACvI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACjMA;AACA;AACA;AACA;AACA;AACgC;AACC;AAC1B,iCAAiC,yCAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAK;AACtC;AACA,wBAAwB,8CAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA,YAAY,uDAAmB;AAC/B,uBAAuB,8CAAO;AAC9B;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACgC;AACuC;AACrC;AACkB;AACb;AACQ;AAC/C;AACA;AACA;AACA,kBAAkB,+CAAY,2CAA2C,SAAS;AAClF;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,SAAS;AACtF;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACO,4BAA4B,yDAAa;AAChD;AACA,eAAe,8DAAsB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,4DAAuB;AACjD;AACA;AACA;AACA;AACA,yBAAyB,uEAA2B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA,2BAA2B,yCAAK;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6DAAkB;AACrC;AACA;AACA,gBAAgB,kCAAkC;AAClD;AACA;AACA;AACA,gBAAgB,0BAA0B;AAC1C,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,8CAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;ACxLA;AACA;AAC8B;AACkB;AACT;AAChC,0BAA0B,uCAAI;AACrC;AACA,eAAe,4DAAoB;AACnC;AACA;AACA,gBAAgB,eAAe;AAC/B,2BAA2B,yDAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACgC;AACQ;AACF;AACR;AACI;AACkB;AACpD;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAwB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAW;AAC9B,2BAA2B,uDAAe;AAC1C,oCAAoC,yBAAyB;AAC7D,0BAA0B,4DAAuB;AACjD,kDAAkD,SAAS;AAC3D;AACA;AACA;AACA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA,2CAA2C,SAAS;AACpD;AACA,oDAAoD,SAAS;AAC7D,uCAAuC,SAAS,cAAc,kBAAkB,0CAAO,iBAAiB;AACxG,wBAAwB,cAAc;AACtC,YAAY,qDAAiB,oCAAoC,0CAA0C;AAC3G;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACxDA;AACA;AACkC;AACI;AACtC;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,yDAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,2CAA2C,aAAa;AAC1F;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,wDAAwD,yBAAyB,GAAG,UAAU;AAChI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY,qDAAqD,QAAQ;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAoB,QAAQ,GAAG,OAAO;AACxD;AACA;;;;;;;;;;;;;;;;;;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4BAA4B;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACoC;AACI;AACR;AACF;AACI;AACK;AACQ;AACxC;AACP;AACA;AACA;AACA,CAAC,wCAAwC;AAClC,qBAAqB,6CAAO;AACnC;AACA,eAAe,uDAAe;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,4DAAuB;AACrD;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,4DAAuB;AAC5C;AACA;AACA;AACA;AACA,QAAQ,mEAA2B;AACnC;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,yCAAK;AACnD;AACA;AACA;AACA;AACA;AACA,0CAA0C,yCAAK;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,uBAAuB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,0CAAO;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,4BAA4B,uBAAuB;AACnD;AACA,0EAA0E,0CAAO;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,8CAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAuB;AAC9C;AACA;AACA;AACA,wBAAwB,8CAAO;AAC/B,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8CAAO;AACnC,aAAa;AACb;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;ACtH7B;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,MAAM,6BAA6B,MAAM;AACjF;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP,iBAAiB,KAAK;AACtB;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;;;;;;;;;;;;;;;;;ACtFA;AACA;AACA;AAC8B;AACa;AACpC;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA,sBAAsB,+CAAY;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,uCAAI;;;;;;;;;;;;;;;;;;;ACpEf;AACA;AAC8B;AACQ;AACJ;AACK;AACvC;AACO,sBAAsB,+CAAQ;AACrC;AACA,eAAe,wDAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gDAAa;AACtD;AACA,yGAAyG,+DAA0B;AACnI;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,qBAAqB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,8DAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,8DAAuB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAA4D;AAC5E;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AClHA;AACA;AACA;AACoC;AACG;AACV;AACO;AACpC;AACA;AACA;AACA,QAAQ,0CAAG;AACX;AACA;AACO,6BAA6B,6CAAO;AAC3C;AACA,eAAe,+DAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,2DAAqB;AAC7B;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACpEA;AACA;AACoC;AACE;AACJ;AACK;AACkB;AAClD;AACP;AACA;AACA;AACA;AACA,CAAC,8BAA8B;AAC/B;AACA;AACA;AACO,oBAAoB,6CAAO;AAClC;AACA,eAAe,sDAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+CAAQ;AACrC;AACA;AACA;AACA,2BAA2B,0DAAqB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yCAAyC,sDAAiB,EAAE;AAChG;AACA,8BAA8B,+CAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,2BAA2B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,+CAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA,0BAA0B,+CAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,sBAAsB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe,8CAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA,YAAY,8CAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACsC;AACtC;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA,mBAAmB,mDAAY;AAC/B;AACA;AACA;AACA;AACA;AACA;;;;;;;UC7BA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;WCPD;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACmC;AACuB;AACH;AACvD,sEAAiB;AACjB,wDAAiB;AACjB,mEAAa;AACb;AAC6B;AAC7B;AACwC","sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/./src/version.ts","webpack://Vex/./src/accidental.ts","webpack://Vex/./src/annotation.ts","webpack://Vex/./src/articulation.ts","webpack://Vex/./src/barnote.ts","webpack://Vex/./src/beam.ts","webpack://Vex/./src/bend.ts","webpack://Vex/./src/boundingbox.ts","webpack://Vex/./src/boundingboxcomputation.ts","webpack://Vex/./src/canvascontext.ts","webpack://Vex/./src/chordsymbol.ts","webpack://Vex/./src/clef.ts","webpack://Vex/./src/clefnote.ts","webpack://Vex/./src/crescendo.ts","webpack://Vex/./src/curve.ts","webpack://Vex/./src/dot.ts","webpack://Vex/./src/easyscore.ts","webpack://Vex/./src/element.ts","webpack://Vex/./src/factory.ts","webpack://Vex/./src/flow.ts","webpack://Vex/./src/font.ts","webpack://Vex/./src/fonts/bravura_glyphs.ts","webpack://Vex/./src/fonts/bravura_metrics.ts","webpack://Vex/./src/fonts/custom_glyphs.ts","webpack://Vex/./src/fonts/custom_metrics.ts","webpack://Vex/./src/fonts/gonville_glyphs.ts","webpack://Vex/./src/fonts/gonville_metrics.ts","webpack://Vex/./src/fonts/leland_glyphs.ts","webpack://Vex/./src/fonts/leland_metrics.ts","webpack://Vex/./src/fonts/load_all.ts","webpack://Vex/./src/fonts/load_bravura.ts","webpack://Vex/./src/fonts/load_custom.ts","webpack://Vex/./src/fonts/load_gonville.ts","webpack://Vex/./src/fonts/load_leland.ts","webpack://Vex/./src/fonts/load_petaluma.ts","webpack://Vex/./src/fonts/petaluma_glyphs.ts","webpack://Vex/./src/fonts/petaluma_metrics.ts","webpack://Vex/./src/fonts/petalumascript_glyphs.ts","webpack://Vex/./src/fonts/robotoslab_glyphs.ts","webpack://Vex/./src/fonts/sans_bold_text_metrics.ts","webpack://Vex/./src/fonts/sans_text_metrics.ts","webpack://Vex/./src/fonts/serif_text_metrics.ts","webpack://Vex/./src/fonts/textfonts.ts","webpack://Vex/./src/formatter.ts","webpack://Vex/./src/fraction.ts","webpack://Vex/./src/frethandfinger.ts","webpack://Vex/./src/ghostnote.ts","webpack://Vex/./src/glyph.ts","webpack://Vex/./src/glyphnote.ts","webpack://Vex/./src/gracenote.ts","webpack://Vex/./src/gracenotegroup.ts","webpack://Vex/./src/gracetabnote.ts","webpack://Vex/./src/index.ts","webpack://Vex/./src/keymanager.ts","webpack://Vex/./src/keysignature.ts","webpack://Vex/./src/keysignote.ts","webpack://Vex/./src/modifier.ts","webpack://Vex/./src/modifiercontext.ts","webpack://Vex/./src/multimeasurerest.ts","webpack://Vex/./src/music.ts","webpack://Vex/./src/note.ts","webpack://Vex/./src/notehead.ts","webpack://Vex/./src/notesubgroup.ts","webpack://Vex/./src/ornament.ts","webpack://Vex/./src/parenthesis.ts","webpack://Vex/./src/parser.ts","webpack://Vex/./src/pedalmarking.ts","webpack://Vex/./src/registry.ts","webpack://Vex/./src/rendercontext.ts","webpack://Vex/./src/renderer.ts","webpack://Vex/./src/repeatnote.ts","webpack://Vex/./src/stave.ts","webpack://Vex/./src/stavebarline.ts","webpack://Vex/./src/staveconnector.ts","webpack://Vex/./src/stavehairpin.ts","webpack://Vex/./src/staveline.ts","webpack://Vex/./src/stavemodifier.ts","webpack://Vex/./src/stavenote.ts","webpack://Vex/./src/staverepetition.ts","webpack://Vex/./src/stavesection.ts","webpack://Vex/./src/stavetempo.ts","webpack://Vex/./src/stavetext.ts","webpack://Vex/./src/stavetie.ts","webpack://Vex/./src/stavevolta.ts","webpack://Vex/./src/stem.ts","webpack://Vex/./src/stemmablenote.ts","webpack://Vex/./src/stringnumber.ts","webpack://Vex/./src/strokes.ts","webpack://Vex/./src/svgcontext.ts","webpack://Vex/./src/system.ts","webpack://Vex/./src/tables.ts","webpack://Vex/./src/tabnote.ts","webpack://Vex/./src/tabslide.ts","webpack://Vex/./src/tabstave.ts","webpack://Vex/./src/tabtie.ts","webpack://Vex/./src/textbracket.ts","webpack://Vex/./src/textdynamics.ts","webpack://Vex/./src/textformatter.ts","webpack://Vex/./src/textnote.ts","webpack://Vex/./src/tickable.ts","webpack://Vex/./src/tickcontext.ts","webpack://Vex/./src/timesigglyph.ts","webpack://Vex/./src/timesignature.ts","webpack://Vex/./src/timesignote.ts","webpack://Vex/./src/tremolo.ts","webpack://Vex/./src/tuning.ts","webpack://Vex/./src/tuplet.ts","webpack://Vex/./src/typeguard.ts","webpack://Vex/./src/util.ts","webpack://Vex/./src/vex.ts","webpack://Vex/./src/vibrato.ts","webpack://Vex/./src/vibratobracket.ts","webpack://Vex/./src/voice.ts","webpack://Vex/./src/web.ts","webpack://Vex/webpack/bootstrap","webpack://Vex/webpack/runtime/define property getters","webpack://Vex/webpack/runtime/global","webpack://Vex/webpack/runtime/hasOwnProperty shorthand","webpack://Vex/webpack/runtime/make namespace object","webpack://Vex/./entry/vexflow-debug.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","/**\n * The Bravura font was created by Daniel Spreadbury @ Steinberg.\n * https://github.com/steinbergmedia/bravura/\n */\nexport const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature object\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 387,\n y_min: -87,\n y_max: 139,\n ha: 226,\n o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 387,\n y_min: -139,\n y_max: 87,\n ha: 226,\n o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z',\n },\n barlineTick: {\n x_min: -55,\n x_max: 55,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z',\n },\n breathMarkTick: {\n x_min: -142,\n x_max: 256,\n y_min: 0,\n y_max: 403,\n ha: 403,\n o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z',\n },\n segno: {\n x_min: -228,\n x_max: 228,\n y_min: -329,\n y_max: 329,\n ha: 657,\n o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z',\n },\n coda: {\n x_min: -215,\n x_max: 215,\n y_min: -264,\n y_max: 264,\n ha: 529,\n o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z',\n },\n gClef: {\n x_min: 0,\n x_max: 586,\n y_min: -594,\n y_max: 1017,\n ha: 1611,\n o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z',\n },\n cClef: {\n x_min: 0,\n x_max: 604,\n y_min: -477,\n y_max: 477,\n ha: 955,\n o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z',\n },\n fClef: {\n x_min: 0,\n x_max: 622,\n y_min: -512,\n y_max: 238,\n ha: 750,\n o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z',\n },\n unpitchedPercussionClef1: {\n x_min: 160,\n x_max: 481,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 471,\n y_min: -691,\n y_max: 707,\n ha: 1398,\n o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 357,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 239,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 317,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 325,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 338,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -219,\n y_max: 219,\n ha: 438,\n o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -371,\n y_max: 371,\n ha: 741,\n o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 221,\n y_min: 214,\n y_max: 256,\n ha: 43,\n o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z',\n },\n timeSigParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensRightSmall: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n timeSigParensLeftSmall: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 623,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 427,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 414,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 336,\n y_min: -168,\n y_max: 168,\n ha: 335,\n o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 302,\n y_min: -140,\n y_max: 140,\n ha: 279,\n o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z',\n },\n augmentationDot: {\n x_min: -59,\n x_max: 59,\n y_min: -59,\n y_max: 59,\n ha: 118,\n o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z',\n },\n tremolo1: {\n x_min: -143,\n x_max: 297,\n y_min: -550,\n y_max: -237,\n ha: 313,\n o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z',\n },\n flag8thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -700,\n y_max: -4,\n ha: 696,\n o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z',\n },\n flag8thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z',\n },\n flag16thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -796,\n y_max: -4,\n ha: 793,\n o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z',\n },\n flag16thDown: {\n x_min: -14,\n x_max: 251,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z',\n },\n flag32ndUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1039,\n y_max: -4,\n ha: 1035,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z',\n },\n flag32ndDown: {\n x_min: -14,\n x_max: 253,\n y_min: 4,\n y_max: 935,\n ha: 931,\n o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z',\n },\n flag64thUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1159,\n y_max: -4,\n ha: 1156,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z',\n },\n flag64thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 3,\n y_max: 1053,\n ha: 1049,\n o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z',\n },\n flag128thUp: {\n x_min: -16,\n x_max: 217,\n y_min: -1398,\n y_max: -4,\n ha: 1395,\n o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z',\n },\n flag128thDown: {\n x_min: -14,\n x_max: 254,\n y_min: 4,\n y_max: 1288,\n ha: 1284,\n o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z',\n },\n accidentalFlat: {\n x_min: -14,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 166,\n y_min: -314,\n y_max: 314,\n ha: 627,\n o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 225,\n y_min: -364,\n y_max: 364,\n ha: 729,\n o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 255,\n y_min: -127,\n y_max: 127,\n ha: 255,\n o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z',\n },\n accidentalDoubleFlat: {\n x_min: -14,\n x_max: 334,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z',\n },\n accidentalParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n accidentalParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 188,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 419,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 315,\n y_min: -368,\n y_max: 368,\n ha: 735,\n o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -117,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalBakiyeFlat: {\n x_min: -121,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 176,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z',\n },\n articAccentAbove: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articAccentBelow: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articTenutoAbove: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articTenutoBelow: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articStaccatoAbove: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatoBelow: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatissimoAbove: {\n x_min: -50,\n x_max: 50,\n y_min: 0,\n y_max: 173,\n ha: 173,\n o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z',\n },\n articStaccatissimoBelow: {\n x_min: -50,\n x_max: 50,\n y_min: -173,\n y_max: 0,\n ha: 173,\n o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z',\n },\n articMarcatoAbove: {\n x_min: -107,\n x_max: 107,\n y_min: -240,\n y_max: 18,\n ha: 259,\n o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z',\n },\n articMarcatoBelow: {\n x_min: -107,\n x_max: 107,\n y_min: -18,\n y_max: 241,\n ha: 259,\n o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z',\n },\n fermataAbove: {\n x_min: -305,\n x_max: 305,\n y_min: 0,\n y_max: 332,\n ha: 332,\n o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataBelow: {\n x_min: -305,\n x_max: 305,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 342,\n ha: 342,\n o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -342,\n y_max: 0,\n ha: 342,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 412,\n ha: 412,\n o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataVeryLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -412,\n y_max: 0,\n ha: 412,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -330,\n x_max: 330,\n y_min: 0,\n y_max: 536,\n ha: 536,\n o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z',\n },\n fermataVeryShortBelow: {\n x_min: -330,\n x_max: 330,\n y_min: -536,\n y_max: 0,\n ha: 536,\n o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z',\n },\n fermataShortAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 441,\n ha: 441,\n o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataShortBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -441,\n y_max: 0,\n ha: 441,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n breathMarkUpbow: {\n x_min: -118,\n x_max: 118,\n y_min: 0,\n y_max: 385,\n ha: 385,\n o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z',\n },\n caesura: {\n x_min: 0,\n x_max: 430,\n y_min: -190,\n y_max: 284,\n ha: 474,\n o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 348,\n y_min: -195,\n y_max: 292,\n ha: 486,\n o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 801,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 267,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 310,\n y_min: -118,\n y_max: 0,\n ha: 118,\n o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -118,\n y_max: 11,\n ha: 128,\n o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 310,\n y_min: 0,\n y_max: 118,\n ha: 118,\n o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -11,\n y_max: 118,\n ha: 128,\n o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 208,\n y_min: -343,\n y_max: 343,\n ha: 686,\n o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 242,\n y_min: -185,\n y_max: 206,\n ha: 391,\n o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 312,\n y_min: -417,\n y_max: 206,\n ha: 623,\n o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 381,\n y_min: -417,\n y_max: 438,\n ha: 854,\n o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 451,\n y_min: -648,\n y_max: 438,\n ha: 1086,\n o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 520,\n y_min: -648,\n y_max: 669,\n ha: 1317,\n o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z',\n },\n dynamicPiano: {\n x_min: -36,\n x_max: 355,\n y_min: -168,\n y_max: 261,\n ha: 428,\n o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z',\n },\n dynamicMezzo: {\n x_min: 32,\n x_max: 463,\n y_min: -18,\n y_max: 256,\n ha: 274,\n o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z',\n },\n dynamicForte: {\n x_min: -81,\n x_max: 413,\n y_min: -171,\n y_max: 390,\n ha: 561,\n o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z',\n },\n dynamicRinforzando: {\n x_min: 55,\n x_max: 336,\n y_min: 0,\n y_max: 258,\n ha: 258,\n o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z',\n },\n dynamicSforzando: {\n x_min: 49,\n x_max: 262,\n y_min: -21,\n y_max: 254,\n ha: 274,\n o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z',\n },\n dynamicZ: {\n x_min: 22,\n x_max: 291,\n y_min: 2,\n y_max: 235,\n ha: 233,\n o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z',\n },\n ornamentTrill: {\n x_min: -234,\n x_max: 234,\n y_min: 0,\n y_max: 354,\n ha: 354,\n o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z',\n },\n ornamentTurn: {\n x_min: -292,\n x_max: 292,\n y_min: -134,\n y_max: 134,\n ha: 269,\n o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z',\n },\n ornamentTurnSlash: {\n x_min: -292,\n x_max: 292,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z',\n },\n ornamentMordent: {\n x_min: -278,\n x_max: 278,\n y_min: -202,\n y_max: 186,\n ha: 388,\n o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z',\n },\n ornamentShortTrill: {\n x_min: -278,\n x_max: 278,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z',\n },\n ornamentTremblement: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 240,\n ha: 359,\n o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 119,\n ha: 348,\n o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 186,\n ha: 415,\n o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -407,\n x_max: 407,\n y_min: -119,\n y_max: 229,\n ha: 348,\n o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -413,\n x_max: 413,\n y_min: -119,\n y_max: 222,\n ha: 341,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -413,\n x_max: 413,\n y_min: -202,\n y_max: 222,\n ha: 424,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -413,\n x_max: 413,\n y_min: -222,\n y_max: 119,\n ha: 341,\n o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z',\n },\n stringsDownBow: {\n x_min: -158,\n x_max: 158,\n y_min: 0,\n y_max: 331,\n ha: 331,\n o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z',\n },\n stringsUpBow: {\n x_min: -103,\n x_max: 103,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z',\n },\n stringsHarmonic: {\n x_min: -77,\n x_max: 77,\n y_min: -77,\n y_max: 77,\n ha: 154,\n o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -103,\n x_max: 103,\n y_min: -103,\n y_max: 192,\n ha: 296,\n o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -103,\n x_max: 103,\n y_min: -192,\n y_max: 103,\n ha: 296,\n o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -146,\n x_max: 146,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 735,\n y_min: -1,\n y_max: 470,\n ha: 471,\n o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 409,\n y_min: 61,\n y_max: 470,\n ha: 409,\n o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2022-12-24T06:31:40.861Z',\n};\n","/**\n * The Gonville font was created by Simon Tatham.\n * https://www.chiark.greenend.org.uk/~sgtatham/gonville/\n */\nexport const GonvilleMetrics = {\n name: 'Gonville',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: 0,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: -40,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 40,\n advanceWidth: 250,\n yOffset: -402,\n },\n accidentalFlat: {\n leftSideBearing: -50,\n advanceWidth: 208,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n '8vb': {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 17,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -9,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 3,\n yOffset: -4,\n stemUpYOffset: 10,\n reportedWidth: 28,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 9,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 40,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n // articulation: {\n // },\n tremolo: {\n default: {\n point: 25,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 9,\n offsetXStemDown: -0.5,\n },\n grace: {\n point: 15,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 6.5,\n offsetXStemDown: -0.5,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 0,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n glyphs: {\n flag: {\n shiftX: -0.08,\n flag8thDown: {\n shiftX: -0.16,\n },\n flag16thDown: {\n shiftX: -0.16,\n },\n flag32ndDown: {\n shiftX: -0.16,\n shiftY: 9,\n },\n flag64thDown: {\n shiftX: -0.16,\n shiftY: 13,\n },\n flag128thDown: {\n shiftX: -0.16,\n shiftY: 22,\n },\n flag32ndUp: {\n shiftY: -9,\n },\n flag64thUp: {\n shiftY: -13,\n },\n flag128thUp: {\n shiftY: -22,\n },\n },\n clef_default: {\n point: 40,\n '6stringTabClef': {\n point: 40,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 32,\n },\n clefNote_default: {\n point: 40,\n },\n clefNote_small: {\n point: 32,\n },\n textNote: {\n point: 40,\n default: {},\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.95,\n },\n },\n ornament: {\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n tremolo: {\n default: {\n shiftY: -10,\n },\n grace: {\n shiftY: -5,\n },\n },\n },\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const LelandMetrics = {\n name: 'Leland',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.js statically bundles & preloads all of our music engraving fonts.\nimport { loadBravura } from './load_bravura';\nimport { loadCustom } from './load_custom';\nimport { loadGonville } from './load_gonville';\nimport { loadLeland } from './load_leland';\nimport { loadPetaluma } from './load_petaluma';\n// ADD_MUSIC_FONT\n// import { loadXXX } from './load_xxx';\n// Populate our font \"database\" with all our music fonts.\nexport function loadAllMusicFonts() {\n loadBravura();\n loadGonville();\n loadPetaluma();\n loadCustom();\n loadLeland();\n // ADD_MUSIC_FONT\n // loadXXX();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { BravuraMetrics } from './bravura_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, BravuraMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nimport { GonvilleMetrics } from './gonville_metrics';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, GonvilleMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { LelandFont } from './leland_glyphs';\nimport { LelandMetrics } from './leland_metrics';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, LelandMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { PetalumaFont } from './petaluma_glyphs';\nimport { PetalumaMetrics } from './petaluma_metrics';\nexport function loadPetaluma() {\n Font.load('Petaluma', PetalumaFont, PetalumaMetrics);\n}\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","/**\n * The Petaluma font was created by Steinberg Media.\n * https://github.com/steinbergmedia/petaluma\n */\nexport const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n stave: {\n padding: 15,\n endPaddingMax: 15,\n endPaddingMin: 7,\n unalignedNotePadding: 12,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -150,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['L'],\n spacing: 20,\n superSubRatio: 0.73,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 26,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 28,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 26,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 4,\n yOffset: -8,\n stemUpYOffset: 27,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 6,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 30,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 13,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 8,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n displacedShiftX: -2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemDown: 1.8,\n offsetYBaseStemUp: -1.8,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 20,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.77,\n flag16thUp: {\n shiftX: -0.75,\n },\n flag32ndUp: {\n shiftX: -0.85,\n },\n flag64thUp: {\n shiftX: -1.55,\n },\n flag128thUp: {\n shiftX: -1.3,\n },\n flag16thDown: {\n shiftX: -0.75,\n },\n flag32ndDown: {\n shiftX: -0.76,\n },\n flag64thDown: {\n shiftX: -1.5,\n },\n flag128thDown: {\n shiftX: -1.2,\n },\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n noteheadBlackStemUp: {\n shiftX: 0.5,\n },\n noteheadHalfStemUp: {\n shiftX: 0.725,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.7,\n },\n csymMajorSeventh: {\n scale: 0.8,\n },\n accidentalSharp: {\n scale: 0.7,\n },\n accidentalFlat: {\n scale: 0.8,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport * from './accidental';\nexport * from './annotation';\nexport * from './articulation';\nexport * from './barnote';\nexport * from './beam';\nexport * from './bend';\nexport * from './boundingbox';\nexport * from './boundingboxcomputation';\nexport * from './canvascontext';\nexport * from './chordsymbol';\nexport * from './clef';\nexport * from './clefnote';\nexport * from './crescendo';\nexport * from './curve';\nexport * from './dot';\nexport * from './easyscore';\nexport * from './element';\nexport * from './factory';\nexport * from './flow';\nexport * from './font';\n// Do not export './fonts/*' because they are used by the entry/* files.\nexport * from './formatter';\nexport * from './fraction';\nexport * from './frethandfinger';\nexport * from './ghostnote';\nexport * from './glyph';\nexport * from './glyphnote';\nexport * from './gracenote';\nexport * from './gracenotegroup';\nexport * from './gracetabnote';\nexport * from './keymanager';\nexport * from './keysignature';\nexport * from './keysignote';\nexport * from './modifier';\nexport * from './modifiercontext';\nexport * from './multimeasurerest';\nexport * from './music';\nexport * from './note';\nexport * from './notehead';\nexport * from './notesubgroup';\nexport * from './ornament';\nexport * from './parenthesis';\nexport * from './parser';\nexport * from './pedalmarking';\nexport * from './registry';\nexport * from './rendercontext';\nexport * from './renderer';\nexport * from './repeatnote';\nexport * from './stave';\nexport * from './stavebarline';\nexport * from './staveconnector';\nexport * from './stavehairpin';\nexport * from './staveline';\nexport * from './stavemodifier';\nexport * from './stavenote';\nexport * from './staverepetition';\nexport * from './stavesection';\nexport * from './stavetempo';\nexport * from './stavetext';\nexport * from './stavetie';\nexport * from './stavevolta';\nexport * from './stem';\nexport * from './stemmablenote';\nexport * from './stringnumber';\nexport * from './strokes';\nexport * from './svgcontext';\nexport * from './system';\n// Do not export './tables' because it is internal. Its public API is accessible via Vex.Flow.*.\nexport * from './tabnote';\nexport * from './tabslide';\nexport * from './tabstave';\nexport * from './tabtie';\nexport * from './textbracket';\nexport * from './textdynamics';\nexport * from './textformatter';\nexport * from './textnote';\nexport * from './tickable';\nexport * from './tickcontext';\nexport * from './timesigglyph';\nexport * from './timesignature';\nexport * from './timesignote';\nexport * from './tremolo';\nexport * from './tuning';\nexport * from './tuplet';\nexport * from './typeguard';\nexport * from './util';\n// Do not export './version'. It is accessible via Vex.Flow.BUILD.\nexport * from './vex';\nexport * from './vibrato';\nexport * from './vibratobracket';\nexport * from './voice';\nexport * from './web';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-debug.ts is the entry point for the build output file vexflow-debug.js.\n// It statically bundles all the music engraving fonts.\n// Currently, it is identical to vexflow.ts, but the webpack config inside Gruntfile.js\n// sets the webpack mode to 'development' to produce an unminified build.\n// In the future, we could do something different with this entry file, such as turn on flags for logging.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js b/build/cjs/vexflow-font-bravura.js deleted file mode 100644 index fc8e1c68c8..0000000000 --- a/build/cjs/vexflow-font-bravura.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Bravura=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,a)=>{for(var m in a)b.o(a,m)&&!b.o(l,m)&&Object.defineProperty(l,m,{enumerable:!0,get:a[m]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},metrics:{name:"Bravura",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}}};return l=l.default})())); -//# sourceMappingURL=vexflow-font-bravura.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-bravura.js.map b/build/cjs/vexflow-font-bravura.js.map deleted file mode 100644 index 30c43f6d65..0000000000 --- a/build/cjs/vexflow-font-bravura.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-font-bravura.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAW,QAAIC,IACnF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCaP,EAJoB,CAChBI,KDVuB,CACvBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iLAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oMAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,2CAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,svCAEPsB,KAAM,CACFT,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4oBAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,k6CAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yvCAEPyB,MAAO,CACHZ,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ymBAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP,iBAAkB,CACda,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qkBAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6fAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+4BAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yqBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koBAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qZAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y3BAEPuC,YAAa,CACT1B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPwC,iBAAkB,CACd3B,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,iIAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8PAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4MAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i1BAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mHAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkCAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uiBAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsCAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ulBAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s2BAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kCAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03BAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i0CAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4pBAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEP4E,sBAAuB,CACnB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,myCAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,srBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gbAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y/BAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,saAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wTAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8FAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kGAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,+CAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4UAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kyBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kmBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEPmG,aAAc,CACVtF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,85BAEPoG,WAAY,CACRvF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ivCAEPqG,aAAc,CACVxF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qnCAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m+CAEPuG,cAAe,CACX1F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,80CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,igBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2hBAEP0G,gBAAiB,CACb7F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s5CAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w0BAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wiBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqCAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g6BAEPkH,sCAAuC,CACnCrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,03DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwCAEPoH,qBAAsB,CAClBvG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i9BAEPqH,oBAAqB,CACjBxG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+6BAEPsH,6BAA8B,CAC1BzG,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2yCAEPuH,gBAAiB,CACb1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8MAEPwH,eAAgB,CACZ3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2pBAEPyH,iBAAkB,CACd5G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gXAEP2H,iBAAkB,CACd9G,OAAQ,EACRC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,wGAEP4H,iBAAkB,CACd/G,OAAQ,EACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,kHAEP6H,mBAAoB,CAChBhH,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,8FAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,wGAEP+H,wBAAyB,CACrBlH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yGAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,gHAEPiI,kBAAmB,CACfpH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4TAEPkI,kBAAmB,CACfrH,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2WAEPmI,aAAc,CACVtH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kaAEPqI,iBAAkB,CACdxH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0UAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wWAEPuI,qBAAsB,CAClB1H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gkBAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ooBAEPyI,sBAAuB,CACnB5H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0nBAEP2I,kBAAmB,CACf9H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wUAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,6WAEP6I,gBAAiB,CACbhI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEP+I,QAAS,CACLlI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPgJ,cAAe,CACXnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEPiJ,WAAY,CACRpI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEPkJ,gBAAiB,CACbrI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sIAEPmJ,UAAW,CACPtI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,sJAEPoJ,mBAAoB,CAChBvI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0OAEPqJ,SAAU,CACNxI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0IAEPsJ,kBAAmB,CACfzI,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEPuJ,YAAa,CACT1I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k6BAEPwJ,QAAS,CACL3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ibAEPyJ,SAAU,CACN5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,grBAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kgCAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m5CAEP4J,UAAW,CACP/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yjDAEP6J,aAAc,CACVhJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+yBAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87BAEP+J,aAAc,CACVlJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2wBAEPgK,mBAAoB,CAChBnJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPiK,iBAAkB,CACdpJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mfAEPkK,SAAU,CACNrJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,quBAEPmK,cAAe,CACXtJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2CAEPoK,aAAc,CACVvJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6bAEPqK,kBAAmB,CACfxJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2uBAEPsK,gBAAiB,CACbzJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4zBAEPuK,mBAAoB,CAChB1J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPwK,oBAAqB,CACjB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhCAEPyK,2BAA4B,CACxB5J,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szCAEP0K,oCAAqC,CACjC7J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suCAEP2K,8BAA+B,CAC3B9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47CAEP4K,mCAAoC,CAChC/J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4sCAEP6K,wCAAyC,CACrChK,MAAO,EACPC,MAAO,KACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEP8K,4CAA6C,CACzCjK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kxCAEP+K,gCAAiC,CAC7BlK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kiCAEPgL,WAAY,CACRnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEPiL,gBAAiB,CACbpK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iKAEPkL,kBAAmB,CACfrK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8LAEPmL,gBAAiB,CACbtK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,09CAEPoL,qBAAsB,CAClBvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q8CAEPqL,UAAW,CACPxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPsL,gBAAiB,CACbzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPuL,cAAe,CACX1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mNAEPwL,UAAW,CACP3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEPyL,cAAe,CACX5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6sBAEP0L,WAAY,CACR7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8ZAEP2L,eAAgB,CACZ9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEP4L,aAAc,CACV/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+OAEP6L,gBAAiB,CACbhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP8L,0BAA2B,CACvBjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEPgM,yBAA0B,CACtBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPiM,iBAAkB,CACdpL,MAAO,EACPC,MAAO,KACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gnEAEPkM,gBAAiB,CACbrL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4RAEPoM,mBAAoB,CAChBvL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kWAEPqM,iBAAkB,CACdxL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6JAEPsM,mBAAoB,CAChBzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gLAEPuM,aAAc,CACV1L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrCAEPwM,eAAgB,CACZ3L,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,ssCAEPyM,WAAY,CACR5L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6aAEP0M,YAAa,CACT7L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6oBAEP2M,YAAa,CACT9L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qlCAEP4M,eAAgB,CACZ/L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uMAEP6M,eAAgB,CACZhM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEP8M,mBAAoB,CAChBjM,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6YAEP+M,cAAe,CACXlM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEPgN,iBAAkB,CACdnM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2DAEPiN,UAAW,CACPpM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yCAEPkN,mBAAoB,CAChBrM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+QAEPmN,oBAAqB,CACjBtM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPoN,oBAAqB,CACjBvM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uNAEPqN,qBAAsB,CAClBxM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yMAEPsN,uBAAwB,CACpBzM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEPuN,wBAAyB,CACrB1M,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uPAEPwN,6BAA8B,CAC1B3M,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEPyN,wBAAyB,CACrB5M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEP0N,0BAA2B,CACvB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEP2N,oBAAqB,CACjB9M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0EAEP4N,sBAAuB,CACnB/M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEP6N,oBAAqB,CACjBhN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEP8N,sBAAuB,CACnBjN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEP+N,2BAA4B,CACxBlN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6GAEPgO,6BAA8B,CAC1BnN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPiO,4BAA6B,CACzBpN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sKAEPkO,8BAA+B,CAC3BrN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPmO,4BAA6B,CACzBtN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6FAEPoO,8BAA+B,CAC3BvN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEPqO,2BAA4B,CACxBxN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPsO,6BAA8B,CAC1BzN,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oOAEPuO,2BAA4B,CACxB1N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPwO,6BAA8B,CAC1B3N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPyO,wBAAyB,CACrB5N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kUAEP0O,qBAAsB,CAClB7N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP2O,uBAAwB,CACpB9N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP4O,oBAAqB,CACjB/N,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iMAEP6O,uBAAwB,CACpBhO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iHAEP8O,oBAAqB,CACjBjO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEP+O,yBAA0B,CACtBlO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPgP,sBAAuB,CACnBnO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEPiP,iBAAkB,CACdpO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gJAEPkP,gBAAiB,CACbrO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wIAEPmP,uBAAwB,CACpBtO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPoP,wBAAyB,CACrBvO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPqP,qBAAsB,CAClBxO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEPsP,sBAAuB,CACnBzO,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sJAEPuP,qBAAsB,CAClB1O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPwP,sBAAuB,CACnB3O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPyP,sBAAuB,CACnB5O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qMAEP0P,uBAAwB,CACpB7O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP2P,sBAAuB,CACnB9O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP4P,uBAAwB,CACpB/O,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0QAEP6P,sBAAuB,CACnBhP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mLAEP8P,uBAAwB,CACpBjP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEP+P,sBAAuB,CACnBlP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEPgQ,uBAAwB,CACpBnP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPiQ,sBAAuB,CACnBpP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPkQ,uBAAwB,CACpBrP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPmQ,8BAA+B,CAC3BtP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0RAEPoQ,2BAA4B,CACxBvP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPqQ,6BAA8B,CAC1BxP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPsQ,0BAA2B,CACvBzP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPuQ,6BAA8B,CAC1B1P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2IAEPwQ,0BAA2B,CACvB3P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEPyQ,+BAAgC,CAC5B5P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2MAEP0Q,4BAA6B,CACzB7P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0MAEP2Q,uBAAwB,CACpB9P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+IAEP4Q,sBAAuB,CACnB/P,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yIAEP6Q,yBAA0B,CACtBhQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP8Q,2BAA4B,CACxBjQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP+Q,qBAAsB,CAClBlQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPgR,uBAAwB,CACpBnQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPiR,qBAAsB,CAClBpQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPkR,uBAAwB,CACpBrQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sEAEPmR,uBAAwB,CACpBtQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gIAEPoR,yBAA0B,CACtBvQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oIAEPqR,6BAA8B,CAC1BxQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPsR,+BAAgC,CAC5BzQ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEPuR,0BAA2B,CACvB1Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uTAEPwR,uBAAwB,CACpB3Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPyR,0BAA2B,CACvB5Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEP0R,uBAAwB,CACpB7Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP2R,wBAAyB,CACrB9Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qHAEP4R,qBAAsB,CAClB/Q,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP6R,wBAAyB,CACrBhR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uRAEP8R,qBAAsB,CAClBjR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sRAEP+R,0BAA2B,CACvBlR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yJAEPgS,uBAAwB,CACpBnR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPiS,wBAAyB,CACrBpR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEPkS,yBAA0B,CACtBrR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPmS,sBAAuB,CACnBtR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+UAEPoS,uBAAwB,CACpBvR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gUAEPqS,sBAAuB,CACnBxR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2JAEPsS,uBAAwB,CACpBzR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oJAEPuS,wBAAyB,CACrB1R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEPwS,yBAA0B,CACtB3R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEPyS,wBAAyB,CACrB5R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEP0S,yBAA0B,CACtB7R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP2S,gCAAiC,CAC7B9R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qTAEP4S,6BAA8B,CAC1B/R,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP6S,gCAAiC,CAC7BhS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEP8S,6BAA8B,CAC1BjS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sUAEP+S,8BAA+B,CAC3BlS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qIAEPgT,2BAA4B,CACxBnS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iIAEPiT,8BAA+B,CAC3BpS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPkT,2BAA4B,CACxBrS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEPmT,gCAAiC,CAC7BtS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPoT,6BAA8B,CAC1BvS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gNAEPqT,qBAAsB,CAClBxS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPsT,uBAAwB,CACpBzS,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gKAEPuT,uBAAwB,CACpB1S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qJAEPwT,yBAA0B,CACtB3S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8JAEPyT,6BAA8B,CAC1B5S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mMAEP0T,+BAAgC,CAC5B7S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4LAEP2T,0BAA2B,CACvB9S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP4T,uBAAwB,CACpB/S,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wMAEP6T,0BAA2B,CACvBhT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP8T,uBAAwB,CACpBjT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8RAEP+T,wBAAyB,CACrBlT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4OAEPgU,qBAAsB,CAClBnT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mOAEPiU,sBAAuB,CACnBpT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2PAEPkU,uBAAwB,CACpBrT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gPAEPmU,wBAAyB,CACrBtT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPoU,yBAA0B,CACtBvT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sOAEPqU,wBAAyB,CACrBxT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPsU,yBAA0B,CACtBzT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPuU,gCAAiC,CAC7B1T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qNAEPwU,6BAA8B,CAC1B3T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPyU,gCAAiC,CAC7B5T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iSAEP0U,6BAA8B,CAC1B7T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEP2U,8BAA+B,CAC3B9T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iPAEP4U,2BAA4B,CACxB/T,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP6U,uBAAwB,CACpBhU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8KAEP8U,yBAA0B,CACtBjU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEP+U,uBAAwB,CACpBlU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wKAEPgV,yBAA0B,CACtBnU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mKAEPiV,sBAAuB,CACnBpU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPkV,wBAAyB,CACrBrU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wNAEPmV,wBAAyB,CACrBtU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mTAEPoV,0BAA2B,CACvBvU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8SAEPqV,qBAAsB,CAClBxU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPsV,uBAAwB,CACpBzU,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPuV,uBAAwB,CACpB1U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPwV,yBAA0B,CACtB3U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPyV,2BAA4B,CACxB5U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEP0V,6BAA8B,CAC1B7U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEP2V,2BAA4B,CACxB9U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6LAEP4V,6BAA8B,CAC1B/U,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sLAEP6V,8BAA+B,CAC3BhV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEP8V,gCAAiC,CAC7BjV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEP+V,+BAAgC,CAC5BlV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mQAEPgW,iCAAkC,CAC9BnV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kQAEPiW,4BAA6B,CACzBpV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yKAEPkW,8BAA+B,CAC3BrV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPmW,8BAA+B,CAC3BtV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPoW,gCAAiC,CAC7BvV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2KAEPqW,2BAA4B,CACxBxV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oKAEPsW,6BAA8B,CAC1BzV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEPuW,8BAA+B,CAC3B1V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4GAEPwW,gCAAiC,CAC7B3V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2GAEPyW,6BAA8B,CAC1B5V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kOAEP0W,+BAAgC,CAC5B7V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4NAEP2W,wBAAyB,CACrB9V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP4W,qBAAsB,CAClB/V,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uQAEP6W,wBAAyB,CACrBhW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP8W,qBAAsB,CAClBjW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wVAEP+W,0BAA2B,CACvBlW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+LAEPgX,uBAAwB,CACpBnW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPiX,wBAAyB,CACrBpW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wLAEPkX,qBAAsB,CAClBrW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8LAEPmX,2BAA4B,CACxBtW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPoX,wBAAyB,CACrBvW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oSAEPqX,yBAA0B,CACtBxW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uOAEPsX,sBAAuB,CACnBzW,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gOAEPuX,wBAAyB,CACrB1W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEPwX,qBAAsB,CAClB3W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPyX,wBAAyB,CACrB5W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP0X,qBAAsB,CAClB7W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEP2X,sBAAuB,CACnB9W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP4X,uBAAwB,CACpB/W,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP6X,sBAAuB,CACnBhX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oPAEP8X,uBAAwB,CACpBjX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0OAEP+X,uBAAwB,CACpBlX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wSAEPgY,wBAAyB,CACrBnX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qSAEPiY,yBAA0B,CACtBpX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEPkY,0BAA2B,CACvBrX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wXAEPmY,sBAAuB,CACnBtX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEPoY,uBAAwB,CACpBvX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kVAEPqY,wBAAyB,CACrBxX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qWAEPsY,yBAA0B,CACtBzX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0VAEPuY,sBAAuB,CACnB1X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEPwY,uBAAwB,CACpB3X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8VAEPyY,sBAAuB,CACnB5X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAEP0Y,uBAAwB,CACpB7X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6PAEP2Y,wBAAyB,CACrB9X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEP4Y,yBAA0B,CACtB/X,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEP6Y,yBAA0B,CACtBhY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEP8Y,0BAA2B,CACvBjY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEP+Y,sBAAuB,CACnBlY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPgZ,uBAAwB,CACpBnY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mPAEPiZ,wBAAyB,CACrBpY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPkZ,yBAA0B,CACtBrY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEPmZ,sBAAuB,CACnBtY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPoZ,uBAAwB,CACpBvY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEPqZ,yBAA0B,CACtBxY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oMAEPsZ,0BAA2B,CACvBzY,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2LAEPuZ,wBAAyB,CACrB1Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yTAEPwZ,yBAA0B,CACtB3Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kSAEPyZ,8BAA+B,CAC3B5Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gRAEP0Z,2BAA4B,CACxB7Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2QAEP2Z,8BAA+B,CAC3B9Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oUAEP4Z,2BAA4B,CACxB/Y,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0TAEP6Z,gCAAiC,CAC7BhZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEP8Z,6BAA8B,CAC1BjZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEP+Z,8BAA+B,CAC3BlZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iOAEPga,2BAA4B,CACxBnZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+NAEPia,iCAAkC,CAC9BpZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0SAEPka,8BAA+B,CAC3BrZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uSAEPma,+BAAgC,CAC5BtZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6OAEPoa,4BAA6B,CACzBvZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEPqa,8BAA+B,CAC3BxZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPsa,2BAA4B,CACxBzZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPua,8BAA+B,CAC3B1Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPwa,2BAA4B,CACxB3Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sSAEPya,mBAAoB,CAChB5Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kDAEP0a,qBAAsB,CAClB7Z,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mDAEP2a,iBAAkB,CACd9Z,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sCAEP4a,iBAAkB,CACd/Z,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,uCAEP6a,mBAAoB,CAChBha,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEP8a,qBAAsB,CAClBja,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEP+a,oBAAqB,CACjBla,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEPgb,sBAAuB,CACnBna,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEPib,mBAAoB,CAChBpa,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,+FAEPkb,qBAAsB,CAClBra,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,gGAEPmb,oBAAqB,CACjBta,MAAO,EACPC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,uIAEPob,sBAAuB,CACnBva,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,yJAEPqb,oBAAqB,CACjBxa,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2KAEPsb,sBAAuB,CACnBza,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,sLAEPub,oBAAqB,CACjB1a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,oMAEPwb,sBAAuB,CACnB3a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,oNAEPyb,oBAAqB,CACjB5a,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,2TAEP0b,sBAAuB,CACnB7a,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,mWAEP2b,oBAAqB,CACjB9a,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,yUAEP4b,sBAAuB,CACnB/a,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,uWAEP6b,oBAAqB,CACjBhb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,kWAEP8b,sBAAuB,CACnBjb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qYAEP+b,oBAAqB,CACjBlb,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ydAEPgc,sBAAuB,CACnBnb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,ohBAEPic,oBAAqB,CACjBpb,OAAQ,EACRC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,ueAEPkc,sBAAuB,CACnBrb,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,whBAEPmc,4BAA6B,CACzBtb,OAAQ,EACRC,MAAO,GACPC,MAAO,GACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,wGAEPoc,8BAA+B,CAC3Bvb,OAAQ,EACRC,MAAO,GACPC,OAAQ,IACRC,OAAQ,GACRC,GAAI,GACJjB,EAAG,qHAEPqc,6BAA8B,CAC1Bxb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yNAEPsc,oCAAqC,CACjCzb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+dAEPuc,qBAAsB,CAClB1b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2HAEPwc,sBAAuB,CACnB3b,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4CAGXyc,WAAY,UACZC,WAAY,IACZC,YAAa,4BCl8GbC,QCP0B,CAC1BC,KAAM,UACNC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBrd,OAAQ,CACJkM,eAAgB,CACZoR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbrR,mBAAoB,CAChBmR,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbpR,cAAe,CACXkR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbjR,mBAAoB,CAChB+Q,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbhR,oBAAqB,CACjB8Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb/Q,oBAAqB,CACjB6Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb9Q,qBAAsB,CAClB4Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb7Q,uBAAwB,CACpB2Q,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEb5Q,wBAAyB,CACrB0Q,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEb3Q,6BAA8B,CAC1ByQ,iBAAkB,EAClBC,aAAc,IACdC,QAAS,GAEblR,UAAW,CACPgR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbnR,iBAAkB,CACdiR,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBxX,gBAAiB,CACbuX,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd3X,eAAgB,CACZyX,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,IACPC,OAAQ,KAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,EACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,MAKxBE,WAAY,CACRP,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN7T,WAAY,CACR8T,SAAU,GACVX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnB/T,gBAAiB,CACb6T,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnB9T,kBAAmB,CACf4T,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnB7T,gBAAiB,CACb2T,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,GAEnB5T,qBAAsB,CAClB0T,QAAS,GACTX,QAAS,GACTY,cAAe,EACfC,cAAe,GAEnB3T,UAAW,CACPyT,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnB1T,gBAAiB,CACbwT,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnBzT,cAAe,CACXuT,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnBxT,UAAW,CACPsT,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnBvT,cAAe,CACXqT,QAAS,EACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnBtT,WAAY,CACRoT,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLX,MAAO,GACPF,MAAO,GAEXc,UAAW,CACPZ,MAAO,KACPF,MAAO,IAGfe,aAAc,CACVC,GAAI,CACAd,MAAO,IAEXe,KAAM,CACFf,MAAO,KAIfgB,OAAQ,CAEJC,WAAY,EACZjB,MAAO,GAEPkB,YAAa,GACbC,QAAS,GAEbC,aAAc,CACV5X,wBAAyB,CACrBiV,QAAS,GAEbhV,wBAAyB,CACrBgV,QAAS,IAGjB4C,QAAS,CACLV,QAAS,CACLX,MAAO,GACPR,QAAS,EACT8B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH1B,MAAO,GACPR,QAAS,EACT8B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTtC,QAAS,GAEbzc,KAAM,CACF+e,QAAS,IAEbhf,MAAO,CACHgf,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACN/b,uBAAwB,CACpBmc,kBAAmB,EACnBC,oBAAqB,GAEzBnc,wBAAyB,CACrBkc,kBAAmB,EACnBC,oBAAqB,GAEzBrc,wBAAyB,CACrBoc,kBAAmB,EACnBC,oBAAqB,GAEzBvd,cAAe,CACXsd,mBAAoB,EACpBC,oBAAqB,GAEzBtd,eAAgB,CACZqd,mBAAoB,EACpBC,oBAAqB,GAEzBxd,eAAgB,CACZud,mBAAoB,EACpBC,oBAAqB,GAEzB3d,aAAc,CACV0d,mBAAoB,KACpBC,oBAAqB,MAEzB1d,cAAe,CACXyd,mBAAoB,EACpBC,oBAAqB,GAEzB5c,oBAAqB,CACjB4c,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbxD,YAAa,EACbyD,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBzgB,OAAQ,CACJW,KAAM,CACFid,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZre,MAAO,CACHqd,QAAS,GAEb2C,KAAM,CACF3C,QAAS,IACT4C,WAAY,CACR5C,QAAS,IAGjBN,aAAc,CACVG,MAAO,GACPhd,MAAO,CACHggB,MAAO,IACP7B,OAAQ,GAEZje,MAAO,CACHie,QAAS,IAEb,iBAAkB,CACdnB,MAAO,GACPmB,QAAS,MAGjBd,WAAY,CACRL,MAAO,GACPhd,MAAO,CACHme,OAAQ,MAGhB8B,iBAAkB,CACdjD,MAAO,IAEXkD,eAAgB,CACZlD,MAAO,IAEXM,SAAU,CACNzU,aAAc,CACVmX,MAAO,KAEXlX,kBAAmB,CACfkX,MAAO,KAEXvW,WAAY,CACRuW,MAAO,GAEXtW,gBAAiB,CACbsW,MAAO,GAEXrW,kBAAmB,CACfqW,MAAO,GAEXpW,gBAAiB,CACboW,MAAO,GAEXnW,qBAAsB,CAClBmW,MAAO,GAEXlW,UAAW,CACPkW,MAAO,GAEXjW,gBAAiB,CACbiW,MAAO,GAEXhW,cAAe,CACXgW,MAAO,GAEX/V,UAAW,CACP+V,MAAO,GAEX9V,cAAe,CACX8V,MAAO,GAEX7V,WAAY,CACR6V,MAAO,IAGfG,gBAAiB,CACbpV,mBAAoB,CAChBoS,QAAS,KAEbrS,iBAAkB,CACdqS,QAAS,MAGjBiD,cAAe,CACXrV,mBAAoB,CAChBoS,QAAS,EACTgB,OAAQ,GAEZrT,iBAAkB,CACdqS,QAAS,EACTgB,OAAQ,IAGhBkC,SAAU,CACNrD,MAAO,GACPnd,eAAgB,CACZmd,MAAO,GACPmB,OAAQ,GAEZ7W,gBAAiB,CACb0V,MAAO,IAEXld,MAAO,CACHkd,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZpe,KAAM,CACFid,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZvV,cAAe,CACXuU,QAAS,EACTgB,OAAQ,GAEZtV,aAAc,CACVmU,MAAO,IAEXlU,kBAAmB,CACfkU,MAAO,IAEXjU,gBAAiB,CACboU,QAAS,GAEbnU,mBAAoB,CAChBmU,QAAS,IAGjB4B,SAAU,CACNuB,kBAAmB,CACftD,MAAO,IAEXuD,oBAAqB,CACjBvD,MAAO,KAGff,YAAa,CACT3Q,eAAgB,CACZ0U,MAAO,IAEXzU,mBAAoB,CAChByU,MAAO,IAEXxU,cAAe,CACXwU,MAAO,GAEXrU,mBAAoB,CAChBqU,MAAO,IAEXpU,oBAAqB,CACjBoU,MAAO,IAEXnU,oBAAqB,CACjBmU,MAAO,IAEXlU,qBAAsB,CAClBkU,MAAO,IAEXjU,uBAAwB,CACpBiU,MAAO,IAEXhU,wBAAyB,CACrBgU,MAAO,IAEX/T,6BAA8B,CAC1B+T,MAAO,IAEXtU,UAAW,CACPsU,MAAO,IAEXvU,iBAAkB,CACduU,MAAO,IAEX7a,gBAAiB,CACb6a,MAAO,KAEX/a,eAAgB,CACZ+a,MAAO,Q","sources":["webpack://VexFlowFont.Bravura/webpack/universalModuleDefinition","webpack://VexFlowFont.Bravura/webpack/bootstrap","webpack://VexFlowFont.Bravura/webpack/runtime/define property getters","webpack://VexFlowFont.Bravura/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Bravura/./src/fonts/bravura_glyphs.ts","webpack://VexFlowFont.Bravura/./entry/vexflow-font-bravura.ts","webpack://VexFlowFont.Bravura/./src/fonts/bravura_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Bravura\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// This entry file will be exported as a font module that can be dynamically loaded by vexflow-core.js.\n// Search for 'vexflow-font-bravura' in Gruntfile.js.\n// ADD_MUSIC_FONT\n// To add a new music engraving font named XXX, make a copy of this file and name it vexflow-font-xxx.ts.\n// Then you will need to import the xxx_glyphs.ts and xxx_metrics.ts files.\nimport { BravuraFont } from '../src/fonts/bravura_glyphs';\nimport { BravuraMetrics } from '../src/fonts/bravura_metrics';\nexport const Font = {\n data: BravuraFont,\n metrics: BravuraMetrics,\n};\nexport default Font;\n","/**\n * The Bravura font was created by Daniel Spreadbury @ Steinberg.\n * https://github.com/steinbergmedia/bravura/\n */\nexport const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature object\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","name","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","point","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","scale","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","textNote","restQuarterStemUp","restQuarterStemDown"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js b/build/cjs/vexflow-font-custom.js deleted file mode 100644 index e4363e6e8d..0000000000 --- a/build/cjs/vexflow-font-custom.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Custom=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,e)=>{for(var o in e)b.o(e,o)&&!b.o(l,o)&&Object.defineProperty(l,o,{enumerable:!0,get:e[o]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>e});const e={data:{resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},metrics:{name:"VexFlowCustom",smufl:!1,glyphs:{}}};return l=l.default})())); -//# sourceMappingURL=vexflow-font-custom.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-custom.js.map b/build/cjs/vexflow-font-custom.js.map deleted file mode 100644 index 5acab8fff6..0000000000 --- a/build/cjs/vexflow-font-custom.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-font-custom.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KDLsB,CACtBC,WAAY,IACZC,WAAY,gBACZC,OAAQ,CACJC,oBAAqB,CACjBC,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,mGAEPkB,oBAAqB,CACjBH,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kDAEPmB,4BAA6B,CACzBJ,OAAQ,MACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,+wCAEPoB,qBAAsB,CAClBL,OAAQ,SACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,q6BAEPqB,6BAA8B,CAC1BN,OAAQ,SACRC,MAAO,WACPC,GAAI,IACJjB,EAAG,skDAEPsB,gBAAiB,CACbP,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kMAEPuB,eAAgB,CACZR,OAAQ,UACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,mvBAEPwB,yBAA0B,CACtBT,OAAQ,MACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,0lDAEPyB,yBAA0B,CACtBV,OAAQ,SACRC,MAAO,SACPC,GAAI,IACJjB,EAAG,23EAEP0B,yBAA0B,CACtBX,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,qoGAEP2B,yBAA0B,CACtBZ,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,4gDAEP4B,qBAAsB,CAClBb,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kDAEP6B,qBAAsB,CAClBd,MAAO,EACPC,MAAO,OACPC,GAAI,IACJjB,EAAG,kGAEP8B,oBAAqB,CACjBf,MAAO,SACPC,MAAO,WACPC,GAAI,IACJjB,EAAG,ohBChFX+B,QCNyB,CACzBC,KAAM,gBACNC,OAAO,EACPpB,OAAQ,CAAC,I","sources":["webpack://VexFlowFont.Custom/webpack/universalModuleDefinition","webpack://VexFlowFont.Custom/webpack/bootstrap","webpack://VexFlowFont.Custom/webpack/runtime/define property getters","webpack://VexFlowFont.Custom/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Custom/./src/fonts/custom_glyphs.ts","webpack://VexFlowFont.Custom/./entry/vexflow-font-custom.ts","webpack://VexFlowFont.Custom/./src/fonts/custom_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Custom\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CustomFont } from '../src/fonts/custom_glyphs';\nimport { CustomMetrics } from '../src/fonts/custom_metrics';\nexport const Font = {\n data: CustomFont,\n metrics: CustomMetrics,\n};\nexport default Font;\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","resolution","fontFamily","glyphs","noteheadSquareWhite","x_min","x_max","ha","noteheadSquareBlack","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","metrics","name","smufl"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js b/build/cjs/vexflow-font-gonville.js deleted file mode 100644 index 14c2a2e810..0000000000 --- a/build/cjs/vexflow-font-gonville.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Gonville=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:387,y_min:-87,y_max:139,ha:226,o:"m 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z"},bracketBottom:{x_min:0,x_max:387,y_min:-139,y_max:87,ha:226,o:"m 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z"},barlineTick:{x_min:-55,x_max:55,y_min:-131,y_max:131,ha:262,o:"m 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z"},breathMarkTick:{x_min:-142,x_max:256,y_min:0,y_max:403,ha:403,o:"m 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z"},segno:{x_min:-228,x_max:228,y_min:-329,y_max:329,ha:657,o:"m -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z"},coda:{x_min:-215,x_max:215,y_min:-264,y_max:264,ha:529,o:"m -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z"},gClef:{x_min:0,x_max:586,y_min:-594,y_max:1017,ha:1611,o:"m 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z"},cClef:{x_min:0,x_max:604,y_min:-477,y_max:477,ha:955,o:"m 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z"},fClef:{x_min:0,x_max:622,y_min:-512,y_max:238,ha:750,o:"m 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z"},unpitchedPercussionClef1:{x_min:160,x_max:481,y_min:-235,y_max:235,ha:470,o:"m 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z"},"6stringTabClef":{x_min:0,x_max:471,y_min:-691,y_max:707,ha:1398,o:"m 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z"},timeSig0:{x_min:0,x_max:357,y_min:0,y_max:457,ha:457,o:"m 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z"},timeSig1:{x_min:0,x_max:239,y_min:0,y_max:457,ha:457,o:"m 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z"},timeSig2:{x_min:0,x_max:317,y_min:0,y_max:457,ha:457,o:"m 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z"},timeSig3:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z"},timeSig4:{x_min:0,x_max:325,y_min:0,y_max:457,ha:457,o:"m 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z"},timeSig5:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z"},timeSig6:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSig7:{x_min:0,x_max:306,y_min:0,y_max:457,ha:457,o:"m 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z"},timeSig8:{x_min:0,x_max:338,y_min:0,y_max:457,ha:457,o:"m 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z"},timeSig9:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSigCommon:{x_min:0,x_max:385,y_min:-219,y_max:219,ha:438,o:"m 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z"},timeSigCutCommon:{x_min:0,x_max:385,y_min:-371,y_max:371,ha:741,o:"m 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z"},timeSigPlus:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigPlusSmall:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigMinus:{x_min:0,x_max:221,y_min:214,y_max:256,ha:43,o:"m 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z"},timeSigParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensRightSmall:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},timeSigParensLeftSmall:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},noteheadDoubleWhole:{x_min:0,x_max:623,y_min:-164,y_max:164,ha:328,o:"m 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z"},noteheadWhole:{x_min:0,x_max:427,y_min:-127,y_max:127,ha:253,o:"m 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z"},noteheadHalf:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z"},noteheadBlack:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z"},noteheadXWhole:{x_min:0,x_max:414,y_min:-125,y_max:125,ha:249,o:"m 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z"},noteheadXHalf:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:250,o:"m 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z"},noteheadXBlack:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:249,o:"m 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z"},noteheadCircleX:{x_min:0,x_max:336,y_min:-168,y_max:168,ha:335,o:"m 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z"},noteheadTriangleUpWhole:{x_min:0,x_max:435,y_min:-140,y_max:140,ha:280,o:"m 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z"},noteheadTriangleUpHalf:{x_min:0,x_max:303,y_min:-140,y_max:140,ha:280,o:"m 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:302,y_min:-140,y_max:140,ha:279,o:"m 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z"},noteheadDiamondWhole:{x_min:0,x_max:435,y_min:-130,y_max:130,ha:260,o:"m 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z"},noteheadDiamondHalf:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z"},noteheadDiamondBlack:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z"},augmentationDot:{x_min:-59,x_max:59,y_min:-59,y_max:59,ha:118,o:"m -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z"},tremolo1:{x_min:-143,x_max:297,y_min:-550,y_max:-237,ha:313,o:"m 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z"},flag8thUp:{x_min:-16,x_max:220,y_min:-700,y_max:-4,ha:696,o:"m -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z"},flag8thDown:{x_min:-14,x_max:255,y_min:4,y_max:700,ha:697,o:"m 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z"},flag16thUp:{x_min:-16,x_max:220,y_min:-796,y_max:-4,ha:793,o:"m -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z"},flag16thDown:{x_min:-14,x_max:251,y_min:4,y_max:700,ha:697,o:"m 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z"},flag32ndUp:{x_min:-16,x_max:219,y_min:-1039,y_max:-4,ha:1035,o:"m -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z"},flag32ndDown:{x_min:-14,x_max:253,y_min:4,y_max:935,ha:931,o:"m 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z"},flag64thUp:{x_min:-16,x_max:219,y_min:-1159,y_max:-4,ha:1156,o:"m -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z"},flag64thDown:{x_min:-14,x_max:255,y_min:3,y_max:1053,ha:1049,o:"m 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z"},flag128thUp:{x_min:-16,x_max:217,y_min:-1398,y_max:-4,ha:1395,o:"m -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z"},flag128thDown:{x_min:-14,x_max:254,y_min:4,y_max:1288,ha:1284,o:"m 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z"},accidentalFlat:{x_min:-14,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalNatural:{x_min:0,x_max:166,y_min:-314,y_max:314,ha:627,o:"m 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z"},accidentalSharp:{x_min:0,x_max:225,y_min:-364,y_max:364,ha:729,o:"m 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z"},accidentalDoubleSharp:{x_min:0,x_max:255,y_min:-127,y_max:127,ha:255,o:"m 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z"},accidentalDoubleFlat:{x_min:-14,x_max:334,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z"},accidentalParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},accidentalParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:188,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:419,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:315,y_min:-368,y_max:368,ha:735,o:"m 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z"},accidentalBuyukMucennebFlat:{x_min:-117,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalBakiyeFlat:{x_min:-121,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalKomaSharp:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:176,y_min:-351,y_max:351,ha:702,o:"m 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z"},articAccentAbove:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articAccentBelow:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articTenutoAbove:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articTenutoBelow:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articStaccatoAbove:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatoBelow:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatissimoAbove:{x_min:-50,x_max:50,y_min:0,y_max:173,ha:173,o:"m -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z"},articStaccatissimoBelow:{x_min:-50,x_max:50,y_min:-173,y_max:0,ha:173,o:"m -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z"},articMarcatoAbove:{x_min:-107,x_max:107,y_min:-240,y_max:18,ha:259,o:"m -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z"},articMarcatoBelow:{x_min:-107,x_max:107,y_min:-18,y_max:241,ha:259,o:"m -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z"},fermataAbove:{x_min:-305,x_max:305,y_min:0,y_max:332,ha:332,o:"m -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataBelow:{x_min:-305,x_max:305,y_min:-332,y_max:0,ha:332,o:"m -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:342,ha:342,o:"m -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataLongBelow:{x_min:-269,x_max:269,y_min:-342,y_max:0,ha:342,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:412,ha:412,o:"m -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataVeryLongBelow:{x_min:-269,x_max:269,y_min:-412,y_max:0,ha:412,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryShortAbove:{x_min:-330,x_max:330,y_min:0,y_max:536,ha:536,o:"m -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z"},fermataVeryShortBelow:{x_min:-330,x_max:330,y_min:-536,y_max:0,ha:536,o:"m 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z"},fermataShortAbove:{x_min:-269,x_max:269,y_min:0,y_max:441,ha:441,o:"m -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataShortBelow:{x_min:-269,x_max:269,y_min:-441,y_max:0,ha:441,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},breathMarkComma:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},breathMarkUpbow:{x_min:-118,x_max:118,y_min:0,y_max:385,ha:385,o:"m -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z"},caesura:{x_min:0,x_max:430,y_min:-190,y_max:284,ha:474,o:"m 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z"},caesuraCurved:{x_min:0,x_max:348,y_min:-195,y_max:292,ha:486,o:"m 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z"},restMaxima:{x_min:0,x_max:801,y_min:-235,y_max:235,ha:470,o:"m 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z"},restDoubleWhole:{x_min:0,x_max:267,y_min:0,y_max:235,ha:235,o:"m 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z"},restWhole:{x_min:0,x_max:310,y_min:-118,y_max:0,ha:118,o:"m 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z"},restWholeLegerLine:{x_min:0,x_max:509,y_min:-118,y_max:11,ha:128,o:"m 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z"},restHalf:{x_min:0,x_max:310,y_min:0,y_max:118,ha:118,o:"m 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:509,y_min:-11,y_max:118,ha:128,o:"m 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z"},restQuarter:{x_min:0,x_max:208,y_min:-343,y_max:343,ha:686,o:"m 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z"},rest8th:{x_min:0,x_max:242,y_min:-185,y_max:206,ha:391,o:"m 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z"},rest16th:{x_min:0,x_max:312,y_min:-417,y_max:206,ha:623,o:"m 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z"},rest32nd:{x_min:0,x_max:381,y_min:-417,y_max:438,ha:854,o:"m 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z"},rest64th:{x_min:0,x_max:451,y_min:-648,y_max:438,ha:1086,o:"m 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z"},rest128th:{x_min:0,x_max:520,y_min:-648,y_max:669,ha:1317,o:"m 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z"},dynamicPiano:{x_min:-36,x_max:355,y_min:-168,y_max:261,ha:428,o:"m 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z"},dynamicMezzo:{x_min:32,x_max:463,y_min:-18,y_max:256,ha:274,o:"m 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z"},dynamicForte:{x_min:-81,x_max:413,y_min:-171,y_max:390,ha:561,o:"m 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z"},dynamicRinforzando:{x_min:55,x_max:336,y_min:0,y_max:258,ha:258,o:"m 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z"},dynamicSforzando:{x_min:49,x_max:262,y_min:-21,y_max:254,ha:274,o:"m 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z"},dynamicZ:{x_min:22,x_max:291,y_min:2,y_max:235,ha:233,o:"m 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z"},ornamentTrill:{x_min:-234,x_max:234,y_min:0,y_max:354,ha:354,o:"m -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z"},ornamentTurn:{x_min:-292,x_max:292,y_min:-134,y_max:134,ha:269,o:"m -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z"},ornamentTurnSlash:{x_min:-292,x_max:292,y_min:-189,y_max:189,ha:378,o:"m -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z"},ornamentMordent:{x_min:-278,x_max:278,y_min:-202,y_max:186,ha:388,o:"m -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z"},ornamentShortTrill:{x_min:-278,x_max:278,y_min:-119,y_max:119,ha:238,o:"m -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z"},ornamentTremblement:{x_min:-394,x_max:394,y_min:-119,y_max:119,ha:238,o:"m -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z"},ornamentPrecompAppoggTrill:{x_min:-394,x_max:394,y_min:-119,y_max:240,ha:359,o:"m -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-407,x_max:407,y_min:-229,y_max:119,ha:348,o:"m -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z"},ornamentPrecompSlideTrillBach:{x_min:-407,x_max:407,y_min:-229,y_max:186,ha:415,o:"m 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-407,x_max:407,y_min:-119,y_max:229,ha:348,o:"m 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-413,x_max:413,y_min:-119,y_max:222,ha:341,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-413,x_max:413,y_min:-202,y_max:222,ha:424,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompTrillLowerSuffix:{x_min:-413,x_max:413,y_min:-222,y_max:119,ha:341,o:"m -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z"},stringsDownBow:{x_min:-158,x_max:158,y_min:0,y_max:331,ha:331,o:"m -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z"},stringsUpBow:{x_min:-103,x_max:103,y_min:0,y_max:260,ha:260,o:"m -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z"},stringsHarmonic:{x_min:-77,x_max:77,y_min:-77,y_max:77,ha:154,o:"m -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z"},pluckedSnapPizzicatoAbove:{x_min:-103,x_max:103,y_min:-103,y_max:192,ha:296,o:"m -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z"},pluckedSnapPizzicatoBelow:{x_min:-103,x_max:103,y_min:-192,y_max:103,ha:296,o:"m 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z"},pluckedLeftHandPizzicato:{x_min:-146,x_max:146,y_min:-148,y_max:148,ha:296,o:"m -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z"},keyboardPedalPed:{x_min:0,x_max:735,y_min:-1,y_max:470,ha:471,o:"m 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z"},keyboardPedalUp:{x_min:0,x_max:409,y_min:61,y_max:470,ha:409,o:"m 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z"},pictChokeCymbal:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2022-12-24T06:31:40.861Z"},metrics:{name:"Gonville",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:0,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:250},csymParensRightTall:{leftSideBearing:-40,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:50,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:40,advanceWidth:250,yOffset:-402},accidentalFlat:{leftSideBearing:-50,advanceWidth:208,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:20,treble:{line:-1.2,shiftX:11}},"8vb":{point:20,treble:{line:6.3,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:18,treble:{line:-.4,shiftX:8}},"8vb":{point:18,treble:{line:5.8,shiftX:6},bass:{line:3.5,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:17,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:24,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-9,stemUpYOffset:24,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:3,yOffset:-4,stemUpYOffset:10,reportedWidth:28},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:9,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:40}},digits:{point:40,tupletPoint:28},tremolo:{default:{point:25,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:9,offsetXStemDown:-.5},grace:{point:15,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:6.5,offsetXStemDown:-.5}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:0}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadBlack:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{flag:{shiftX:-.08,flag8thDown:{shiftX:-.16},flag16thDown:{shiftX:-.16},flag32ndDown:{shiftX:-.16,shiftY:9},flag64thDown:{shiftX:-.16,shiftY:13},flag128thDown:{shiftX:-.16,shiftY:22},flag32ndUp:{shiftY:-9},flag64thUp:{shiftY:-13},flag128thUp:{shiftY:-22}},clef_default:{point:40,"6stringTabClef":{point:40,shiftY:-5.5}},clef_small:{point:32},clefNote_default:{point:40},clefNote_small:{point:32},textNote:{point:40,default:{},ornamentTrill:{shiftX:-5,shiftY:4}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.95}},ornament:{brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},tremolo:{default:{shiftY:-10},grace:{shiftY:-5}}}}};return l=l.default})())); -//# sourceMappingURL=vexflow-font-gonville.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-gonville.js.map b/build/cjs/vexflow-font-gonville.js.map deleted file mode 100644 index 90f5596033..0000000000 --- a/build/cjs/vexflow-font-gonville.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-font-gonville.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KDL6B,CAC7BC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gUAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kXAEPmB,YAAa,CACTN,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oVAEPoB,eAAgB,CACZP,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4aAEPqB,MAAO,CACHR,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,22DAEPsB,KAAM,CACFT,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3CAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,i/EAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,quDAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,siCAEP0B,yBAA0B,CACtBb,MAAO,IACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qKAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q4GAEP2B,SAAU,CACNd,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ukBAEP4B,SAAU,CACNf,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2oBAEP6B,SAAU,CACNhB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0+BAEP8B,SAAU,CACNjB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,g6BAEP+B,SAAU,CACNlB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wlCAEPgC,SAAU,CACNnB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,opCAEPiC,SAAU,CACNpB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8hCAEPkC,SAAU,CACNrB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,86BAEPmC,SAAU,CACNtB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,o9BAEPoC,SAAU,CACNvB,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sjCAEPqC,cAAe,CACXxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wtBAEPsC,iBAAkB,CACdzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ypCAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qlBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qlBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,8MAEP0C,mBAAoB,CAChB7B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP2C,wBAAyB,CACrB9B,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP4C,kBAAmB,CACf/B,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP6C,uBAAwB,CACpBhC,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qDAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qWAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6aAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uNAEPkD,eAAgB,CACZrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mxCAEPmD,cAAe,CACXtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u7CAEPoD,eAAgB,CACZvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEPqD,gBAAiB,CACbxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8yBAEPsD,wBAAyB,CACrBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o1BAEPuD,uBAAwB,CACpB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0uBAEPwD,wBAAyB,CACrB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,umBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4kBAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4UAEP4D,gBAAiB,CACb/C,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,4KAEP6D,SAAU,CACNhD,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,IACRC,GAAI,IACJjB,EAAG,wpBAEP8D,UAAW,CACPjD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,0VAEP+D,YAAa,CACTlD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8XAEPgE,WAAY,CACRnD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,o5BAEPiE,aAAc,CACVpD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,soBAEPkE,WAAY,CACRrD,OAAQ,GACRC,MAAO,IACPC,OAAQ,KACRC,OAAQ,EACRC,GAAI,KACJjB,EAAG,2nCAEPmE,aAAc,CACVtD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjCAEPoE,WAAY,CACRvD,OAAQ,GACRC,MAAO,IACPC,OAAQ,KACRC,OAAQ,EACRC,GAAI,KACJjB,EAAG,+tDAEPqE,aAAc,CACVxD,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,u6CAEPsE,YAAa,CACTzD,OAAQ,GACRC,MAAO,IACPC,OAAQ,KACRC,OAAQ,EACRC,GAAI,KACJjB,EAAG,28DAEPuE,cAAe,CACX1D,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,+wDAEPwE,eAAgB,CACZ3D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+iBAEPyE,kBAAmB,CACf5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8uBAEP0E,gBAAiB,CACb7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oxDAEP2E,sBAAuB,CACnB9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4cAEP4E,qBAAsB,CAClB/D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0nCAEP6E,qBAAsB,CAClBhE,OAAQ,IACRC,OAAQ,GACRC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uYAEP8E,sBAAuB,CACnBjE,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oTAEP+E,+BAAgC,CAC5BlE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,skBAEPgF,0CAA2C,CACvCnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpCAEPiF,gCAAiC,CAC7BpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mCAEPkF,sCAAuC,CACnCrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2EAEPmF,4BAA6B,CACzBtE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,40CAEPoF,qBAAsB,CAClBvE,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u8BAEPqF,oBAAqB,CACjBxE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mCAEPsF,6BAA8B,CAC1BzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iqDAEPuF,iBAAkB,CACd1E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8iBAEPwF,iBAAkB,CACd3E,OAAQ,IACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8iBAEPyF,iBAAkB,CACd5E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,kQAEP0F,iBAAkB,CACd7E,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,kQAEP2F,mBAAoB,CAChB9E,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP4F,mBAAoB,CAChB/E,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,GACJjB,EAAG,+LAEP6F,wBAAyB,CACrBhF,OAAQ,GACRC,MAAO,GACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0FAEP8F,wBAAyB,CACrBjF,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8HAEP+F,kBAAmB,CACflF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0cAEPgG,kBAAmB,CACfnF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mdAEPiG,aAAc,CACVpF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wjBAEPkG,aAAc,CACVrF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ioBAEPmG,iBAAkB,CACdtF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,imBAEPoG,iBAAkB,CACdvF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wnBAEPqG,qBAAsB,CAClBxF,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,u/BAEPsG,qBAAsB,CAClBzF,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qmCAEPuG,sBAAuB,CACnB1F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,w1DAEPwG,sBAAuB,CACnB3F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,wgEAEPyG,kBAAmB,CACf5F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8xBAEP0G,kBAAmB,CACf7F,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,s+BAEP2G,gBAAiB,CACb9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wVAEP4G,gBAAiB,CACb/F,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,waAEP6G,QAAS,CACLhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEP8G,cAAe,CACXjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lBAEP+G,WAAY,CACRlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kKAEPgH,gBAAiB,CACbnG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yEAEPiH,UAAW,CACPpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4EAEPkH,mBAAoB,CAChBrG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0QAEPmH,SAAU,CACNtG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uEAEPoH,kBAAmB,CACfvG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4QAEPqH,YAAa,CACTxG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y7BAEPsH,QAAS,CACLzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jBAEPuH,SAAU,CACN1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y6BAEPwH,SAAU,CACN3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qvCAEPyH,SAAU,CACN5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,umDAEP0H,UAAW,CACP7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,m7DAEP2H,aAAc,CACV9G,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,40CAEP4H,aAAc,CACV/G,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w1DAEP6H,aAAc,CACVhH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0rCAEP8H,mBAAoB,CAChBjH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+2BAEP+H,iBAAkB,CACdlH,MAAO,GACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,02BAEPgI,SAAU,CACNnH,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6gCAEPiI,cAAe,CACXpH,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mlDAEPkI,aAAc,CACVrH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s/BAEPmI,kBAAmB,CACftH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uuCAEPoI,gBAAiB,CACbvH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yjCAEPqI,mBAAoB,CAChBxH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0xBAEPsI,oBAAqB,CACjBzH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+mCAEPuI,2BAA4B,CACxB1H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2wCAEPwI,oCAAqC,CACjC3H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wyCAEPyI,8BAA+B,CAC3B5H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+nDAEP0I,mCAAoC,CAChC7H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6zCAEP2I,wCAAyC,CACrC9H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o3CAEP4I,4CAA6C,CACzC/H,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mqDAEP6I,gCAAiC,CAC7BhI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o5CAEP8I,eAAgB,CACZjI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ucAEP+I,aAAc,CACVlI,OAAQ,IACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0XAEPgJ,gBAAiB,CACbnI,OAAQ,GACRC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mWAEPiJ,0BAA2B,CACvBpI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,krBAEPkJ,0BAA2B,CACvBrI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qsBAEPmJ,yBAA0B,CACtBtI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+kBAEPoJ,iBAAkB,CACdvI,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,24FAEPqJ,gBAAiB,CACbxI,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,k5EAEPsJ,gBAAiB,CACbzI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wVAEPuJ,iBAAkB,CACd1I,MAAO,GACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iYAEPwJ,mBAAoB,CAChB3I,MAAO,GACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAGXyJ,WAAY,gBACZC,WAAY,IACZC,YAAa,4BCvkCbC,QCF2B,CAC3BC,KAAM,WACNC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnBrK,OAAQ,CACJsK,eAAgB,CACZC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbE,cAAe,CACXJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbG,mBAAoB,CAChBL,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbI,oBAAqB,CACjBN,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbK,oBAAqB,CACjBP,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbM,qBAAsB,CAClBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbO,uBAAwB,CACpBT,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbQ,wBAAyB,CACrBV,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbS,6BAA8B,CAC1BX,iBAAkB,EAClBC,aAAc,IACdC,QAAS,GAEbU,UAAW,CACPZ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbW,iBAAkB,CACdb,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElBzG,gBAAiB,CACbwG,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd5G,eAAgB,CACZ0G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBY,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,IACPC,OAAQ,KAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,IACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,EACNC,OAAQ,MAKxBE,WAAY,CACRP,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVvB,QAAS,EACTwB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTvB,QAAS,EACTwB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTvB,QAAS,EACTwB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTvB,QAAS,EACTwB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTvB,QAAS,GACTwB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTvB,SAAU,EACVwB,cAAe,GACfC,cAAe,GAEnBM,gBAAiB,CACbR,QAAS,EACTvB,SAAU,EACVwB,cAAe,GACfC,cAAe,GAEnBO,cAAe,CACXT,QAAS,EACTvB,SAAU,EACVwB,cAAe,GACfC,cAAe,GAEnBQ,UAAW,CACPV,QAAS,GACTvB,SAAU,EACVwB,cAAe,EACfC,cAAe,GAEnBS,cAAe,CACXX,QAAS,EACTvB,SAAU,EACVwB,cAAe,GACfC,cAAe,IAEnBU,WAAY,CACRZ,QAAS,GACTvB,SAAU,EACVwB,cAAe,EACfC,cAAe,IAGvBW,YAAa,CACTC,QAAS,CACLtB,MAAO,GACPF,MAAO,GAEXyB,UAAW,CACPvB,MAAO,KACPF,MAAO,IAGf0B,aAAc,CACVC,GAAI,CACAzB,MAAO,IAEX0B,KAAM,CACF1B,MAAO,KAIf2B,OAAQ,CACJ3B,MAAO,GACP4B,YAAa,IAIjBC,QAAS,CACLP,QAAS,CACLtB,MAAO,GACPpB,QAAS,EACTkD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,EACfC,iBAAkB,IAEtBC,MAAO,CACHlC,MAAO,GACPpB,QAAS,EACTkD,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,IACfC,iBAAkB,KAG1BE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACT1D,QAAS,GAEbzJ,KAAM,CACFmN,QAAS,IAEbpN,MAAO,CACHoN,QAAS,IAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNnL,uBAAwB,CACpBuL,kBAAmB,EACnBC,oBAAqB,GAEzBvL,wBAAyB,CACrBsL,kBAAmB,EACnBC,oBAAqB,GAEzBzL,wBAAyB,CACrBwL,kBAAmB,EACnBC,oBAAqB,GAEzB5L,cAAe,CACX2L,mBAAoB,EACpBC,oBAAqB,GAEzB3L,eAAgB,CACZ0L,mBAAoB,EACpBC,oBAAqB,GAEzB7L,eAAgB,CACZ4L,mBAAoB,EACpBC,oBAAqB,GAEzB/L,aAAc,CACV8L,mBAAoB,IACpBC,oBAAqB,KAEzB9L,cAAe,CACX6L,mBAAoB,IACpBC,oBAAqB,KAEzBC,oBAAqB,CACjBD,qBAAsB,EACtBD,kBAAmB,KAI/BG,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb7E,YAAa,EACb8E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAEvB9O,OAAQ,CACJ+O,KAAM,CACFpD,QAAS,IACTvI,YAAa,CACTuI,QAAS,KAEbrI,aAAc,CACVqI,QAAS,KAEbnI,aAAc,CACVmI,QAAS,IACTqD,OAAQ,GAEZtL,aAAc,CACViI,QAAS,IACTqD,OAAQ,IAEZpL,cAAe,CACX+H,QAAS,IACTqD,OAAQ,IAEZzL,WAAY,CACRyL,QAAS,GAEbvL,WAAY,CACRuL,QAAS,IAEbrL,YAAa,CACTqL,QAAS,KAGjB3D,aAAc,CACVG,MAAO,GACP,iBAAkB,CACdA,MAAO,GACPwD,QAAS,MAGjBnD,WAAY,CACRL,MAAO,IAEXyD,iBAAkB,CACdzD,MAAO,IAEX0D,eAAgB,CACZ1D,MAAO,IAEX2D,SAAU,CACN3D,MAAO,GACPsB,QAAS,CAAC,EACVxF,cAAe,CACXqE,QAAS,EACTqD,OAAQ,IAGhBnF,YAAa,CACTS,eAAgB,CACZ8E,MAAO,IAEX1E,mBAAoB,CAChB0E,MAAO,IAEXzE,cAAe,CACXyE,MAAO,GAEXxE,mBAAoB,CAChBwE,MAAO,IAEXvE,oBAAqB,CACjBuE,MAAO,IAEXtE,oBAAqB,CACjBsE,MAAO,IAEXrE,qBAAsB,CAClBqE,MAAO,IAEXpE,uBAAwB,CACpBoE,MAAO,IAEXnE,wBAAyB,CACrBmE,MAAO,IAEXlE,6BAA8B,CAC1BkE,MAAO,IAEXjE,UAAW,CACPiE,MAAO,IAEXhE,iBAAkB,CACdgE,MAAO,IAEXrL,gBAAiB,CACbqL,MAAO,KAEXvL,eAAgB,CACZuL,MAAO,MAGftD,SAAU,CACNC,WAAY,CACRqD,MAAO,GAEXjD,gBAAiB,CACbiD,MAAO,GAEXhD,kBAAmB,CACfgD,MAAO,GAEX/C,gBAAiB,CACb+C,MAAO,GAEX9C,qBAAsB,CAClB8C,MAAO,GAEX7C,UAAW,CACP6C,MAAO,GAEX5C,gBAAiB,CACb4C,MAAO,GAEX3C,cAAe,CACX2C,MAAO,GAEX1C,UAAW,CACP0C,MAAO,GAEXzC,cAAe,CACXyC,MAAO,GAEXxC,WAAY,CACRwC,MAAO,IAGfC,gBAAiB,CACbxG,mBAAoB,CAChB8C,QAAS,KAEb/C,iBAAkB,CACd+C,QAAS,MAGjB2D,cAAe,CACXzG,mBAAoB,CAChB8C,QAAS,EACTqD,OAAQ,GAEZpG,iBAAkB,CACd+C,QAAS,EACTqD,OAAQ,IAGhB3B,QAAS,CACLP,QAAS,CACLkC,QAAS,IAEbtB,MAAO,CACHsB,QAAS,O","sources":["webpack://VexFlowFont.Gonville/webpack/universalModuleDefinition","webpack://VexFlowFont.Gonville/webpack/bootstrap","webpack://VexFlowFont.Gonville/webpack/runtime/define property getters","webpack://VexFlowFont.Gonville/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Gonville/./src/fonts/gonville_glyphs.ts","webpack://VexFlowFont.Gonville/./entry/vexflow-font-gonville.ts","webpack://VexFlowFont.Gonville/./src/fonts/gonville_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Gonville\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 387,\n y_min: -87,\n y_max: 139,\n ha: 226,\n o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 387,\n y_min: -139,\n y_max: 87,\n ha: 226,\n o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z',\n },\n barlineTick: {\n x_min: -55,\n x_max: 55,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z',\n },\n breathMarkTick: {\n x_min: -142,\n x_max: 256,\n y_min: 0,\n y_max: 403,\n ha: 403,\n o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z',\n },\n segno: {\n x_min: -228,\n x_max: 228,\n y_min: -329,\n y_max: 329,\n ha: 657,\n o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z',\n },\n coda: {\n x_min: -215,\n x_max: 215,\n y_min: -264,\n y_max: 264,\n ha: 529,\n o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z',\n },\n gClef: {\n x_min: 0,\n x_max: 586,\n y_min: -594,\n y_max: 1017,\n ha: 1611,\n o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z',\n },\n cClef: {\n x_min: 0,\n x_max: 604,\n y_min: -477,\n y_max: 477,\n ha: 955,\n o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z',\n },\n fClef: {\n x_min: 0,\n x_max: 622,\n y_min: -512,\n y_max: 238,\n ha: 750,\n o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z',\n },\n unpitchedPercussionClef1: {\n x_min: 160,\n x_max: 481,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 471,\n y_min: -691,\n y_max: 707,\n ha: 1398,\n o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 357,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 239,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 317,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 325,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 338,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -219,\n y_max: 219,\n ha: 438,\n o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -371,\n y_max: 371,\n ha: 741,\n o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 221,\n y_min: 214,\n y_max: 256,\n ha: 43,\n o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z',\n },\n timeSigParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensRightSmall: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n timeSigParensLeftSmall: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 623,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 427,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 414,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 336,\n y_min: -168,\n y_max: 168,\n ha: 335,\n o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 302,\n y_min: -140,\n y_max: 140,\n ha: 279,\n o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z',\n },\n augmentationDot: {\n x_min: -59,\n x_max: 59,\n y_min: -59,\n y_max: 59,\n ha: 118,\n o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z',\n },\n tremolo1: {\n x_min: -143,\n x_max: 297,\n y_min: -550,\n y_max: -237,\n ha: 313,\n o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z',\n },\n flag8thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -700,\n y_max: -4,\n ha: 696,\n o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z',\n },\n flag8thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z',\n },\n flag16thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -796,\n y_max: -4,\n ha: 793,\n o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z',\n },\n flag16thDown: {\n x_min: -14,\n x_max: 251,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z',\n },\n flag32ndUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1039,\n y_max: -4,\n ha: 1035,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z',\n },\n flag32ndDown: {\n x_min: -14,\n x_max: 253,\n y_min: 4,\n y_max: 935,\n ha: 931,\n o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z',\n },\n flag64thUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1159,\n y_max: -4,\n ha: 1156,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z',\n },\n flag64thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 3,\n y_max: 1053,\n ha: 1049,\n o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z',\n },\n flag128thUp: {\n x_min: -16,\n x_max: 217,\n y_min: -1398,\n y_max: -4,\n ha: 1395,\n o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z',\n },\n flag128thDown: {\n x_min: -14,\n x_max: 254,\n y_min: 4,\n y_max: 1288,\n ha: 1284,\n o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z',\n },\n accidentalFlat: {\n x_min: -14,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 166,\n y_min: -314,\n y_max: 314,\n ha: 627,\n o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 225,\n y_min: -364,\n y_max: 364,\n ha: 729,\n o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 255,\n y_min: -127,\n y_max: 127,\n ha: 255,\n o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z',\n },\n accidentalDoubleFlat: {\n x_min: -14,\n x_max: 334,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z',\n },\n accidentalParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n accidentalParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 188,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 419,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 315,\n y_min: -368,\n y_max: 368,\n ha: 735,\n o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -117,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalBakiyeFlat: {\n x_min: -121,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 176,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z',\n },\n articAccentAbove: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articAccentBelow: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articTenutoAbove: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articTenutoBelow: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articStaccatoAbove: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatoBelow: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatissimoAbove: {\n x_min: -50,\n x_max: 50,\n y_min: 0,\n y_max: 173,\n ha: 173,\n o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z',\n },\n articStaccatissimoBelow: {\n x_min: -50,\n x_max: 50,\n y_min: -173,\n y_max: 0,\n ha: 173,\n o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z',\n },\n articMarcatoAbove: {\n x_min: -107,\n x_max: 107,\n y_min: -240,\n y_max: 18,\n ha: 259,\n o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z',\n },\n articMarcatoBelow: {\n x_min: -107,\n x_max: 107,\n y_min: -18,\n y_max: 241,\n ha: 259,\n o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z',\n },\n fermataAbove: {\n x_min: -305,\n x_max: 305,\n y_min: 0,\n y_max: 332,\n ha: 332,\n o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataBelow: {\n x_min: -305,\n x_max: 305,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 342,\n ha: 342,\n o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -342,\n y_max: 0,\n ha: 342,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 412,\n ha: 412,\n o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataVeryLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -412,\n y_max: 0,\n ha: 412,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -330,\n x_max: 330,\n y_min: 0,\n y_max: 536,\n ha: 536,\n o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z',\n },\n fermataVeryShortBelow: {\n x_min: -330,\n x_max: 330,\n y_min: -536,\n y_max: 0,\n ha: 536,\n o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z',\n },\n fermataShortAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 441,\n ha: 441,\n o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataShortBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -441,\n y_max: 0,\n ha: 441,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n breathMarkUpbow: {\n x_min: -118,\n x_max: 118,\n y_min: 0,\n y_max: 385,\n ha: 385,\n o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z',\n },\n caesura: {\n x_min: 0,\n x_max: 430,\n y_min: -190,\n y_max: 284,\n ha: 474,\n o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 348,\n y_min: -195,\n y_max: 292,\n ha: 486,\n o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 801,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 267,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 310,\n y_min: -118,\n y_max: 0,\n ha: 118,\n o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -118,\n y_max: 11,\n ha: 128,\n o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 310,\n y_min: 0,\n y_max: 118,\n ha: 118,\n o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -11,\n y_max: 118,\n ha: 128,\n o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 208,\n y_min: -343,\n y_max: 343,\n ha: 686,\n o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 242,\n y_min: -185,\n y_max: 206,\n ha: 391,\n o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 312,\n y_min: -417,\n y_max: 206,\n ha: 623,\n o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 381,\n y_min: -417,\n y_max: 438,\n ha: 854,\n o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 451,\n y_min: -648,\n y_max: 438,\n ha: 1086,\n o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 520,\n y_min: -648,\n y_max: 669,\n ha: 1317,\n o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z',\n },\n dynamicPiano: {\n x_min: -36,\n x_max: 355,\n y_min: -168,\n y_max: 261,\n ha: 428,\n o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z',\n },\n dynamicMezzo: {\n x_min: 32,\n x_max: 463,\n y_min: -18,\n y_max: 256,\n ha: 274,\n o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z',\n },\n dynamicForte: {\n x_min: -81,\n x_max: 413,\n y_min: -171,\n y_max: 390,\n ha: 561,\n o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z',\n },\n dynamicRinforzando: {\n x_min: 55,\n x_max: 336,\n y_min: 0,\n y_max: 258,\n ha: 258,\n o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z',\n },\n dynamicSforzando: {\n x_min: 49,\n x_max: 262,\n y_min: -21,\n y_max: 254,\n ha: 274,\n o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z',\n },\n dynamicZ: {\n x_min: 22,\n x_max: 291,\n y_min: 2,\n y_max: 235,\n ha: 233,\n o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z',\n },\n ornamentTrill: {\n x_min: -234,\n x_max: 234,\n y_min: 0,\n y_max: 354,\n ha: 354,\n o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z',\n },\n ornamentTurn: {\n x_min: -292,\n x_max: 292,\n y_min: -134,\n y_max: 134,\n ha: 269,\n o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z',\n },\n ornamentTurnSlash: {\n x_min: -292,\n x_max: 292,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z',\n },\n ornamentMordent: {\n x_min: -278,\n x_max: 278,\n y_min: -202,\n y_max: 186,\n ha: 388,\n o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z',\n },\n ornamentShortTrill: {\n x_min: -278,\n x_max: 278,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z',\n },\n ornamentTremblement: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 240,\n ha: 359,\n o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 119,\n ha: 348,\n o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 186,\n ha: 415,\n o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -407,\n x_max: 407,\n y_min: -119,\n y_max: 229,\n ha: 348,\n o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -413,\n x_max: 413,\n y_min: -119,\n y_max: 222,\n ha: 341,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -413,\n x_max: 413,\n y_min: -202,\n y_max: 222,\n ha: 424,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -413,\n x_max: 413,\n y_min: -222,\n y_max: 119,\n ha: 341,\n o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z',\n },\n stringsDownBow: {\n x_min: -158,\n x_max: 158,\n y_min: 0,\n y_max: 331,\n ha: 331,\n o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z',\n },\n stringsUpBow: {\n x_min: -103,\n x_max: 103,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z',\n },\n stringsHarmonic: {\n x_min: -77,\n x_max: 77,\n y_min: -77,\n y_max: 77,\n ha: 154,\n o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -103,\n x_max: 103,\n y_min: -103,\n y_max: 192,\n ha: 296,\n o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -103,\n x_max: 103,\n y_min: -192,\n y_max: 103,\n ha: 296,\n o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -146,\n x_max: 146,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 735,\n y_min: -1,\n y_max: 470,\n ha: 471,\n o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 409,\n y_min: 61,\n y_max: 470,\n ha: 409,\n o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2022-12-24T06:31:40.861Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs';\nimport { GonvilleMetrics } from '../src/fonts/gonville_metrics';\nexport const Font = {\n data: GonvilleSmuflFont,\n metrics: GonvilleMetrics,\n};\nexport default Font;\n","/**\n * The Gonville font was created by Simon Tatham.\n * https://www.chiark.greenend.org.uk/~sgtatham/gonville/\n */\nexport const GonvilleMetrics = {\n name: 'Gonville',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: 0,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: -40,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 40,\n advanceWidth: 250,\n yOffset: -402,\n },\n accidentalFlat: {\n leftSideBearing: -50,\n advanceWidth: 208,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n '8vb': {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 17,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -9,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 3,\n yOffset: -4,\n stemUpYOffset: 10,\n reportedWidth: 28,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 9,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 40,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n // articulation: {\n // },\n tremolo: {\n default: {\n point: 25,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 9,\n offsetXStemDown: -0.5,\n },\n grace: {\n point: 15,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 6.5,\n offsetXStemDown: -0.5,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 0,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n glyphs: {\n flag: {\n shiftX: -0.08,\n flag8thDown: {\n shiftX: -0.16,\n },\n flag16thDown: {\n shiftX: -0.16,\n },\n flag32ndDown: {\n shiftX: -0.16,\n shiftY: 9,\n },\n flag64thDown: {\n shiftX: -0.16,\n shiftY: 13,\n },\n flag128thDown: {\n shiftX: -0.16,\n shiftY: 22,\n },\n flag32ndUp: {\n shiftY: -9,\n },\n flag64thUp: {\n shiftY: -13,\n },\n flag128thUp: {\n shiftY: -22,\n },\n },\n clef_default: {\n point: 40,\n '6stringTabClef': {\n point: 40,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 32,\n },\n clefNote_default: {\n point: 40,\n },\n clefNote_small: {\n point: 32,\n },\n textNote: {\n point: 40,\n default: {},\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.95,\n },\n },\n ornament: {\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n tremolo: {\n default: {\n shiftY: -10,\n },\n grace: {\n shiftY: -5,\n },\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleX","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","arrowheadBlackUp","arrowheadBlackDown","fontFamily","resolution","generatedOn","metrics","name","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","csymDiminished","leftSideBearing","advanceWidth","yOffset","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","clef_default","width","annotations","point","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","up","down","digits","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","noteheadSquareWhite","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","shiftY","clefNote_default","clefNote_small","textNote","scale","stroke_straight","stroke_wiggly"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js b/build/cjs/vexflow-font-leland.js deleted file mode 100644 index 90b58bc314..0000000000 --- a/build/cjs/vexflow-font-leland.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(b,l){"object"==typeof exports&&"object"==typeof module?module.exports=l():"function"==typeof define&&define.amd?define([],l):"object"==typeof exports?exports.VexFlowFont=l():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Leland=l())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(l,m)=>{for(var a in m)b.o(m,a)&&!b.o(l,a)&&Object.defineProperty(l,a,{enumerable:!0,get:m[a]})},o:(b,l)=>Object.prototype.hasOwnProperty.call(b,l)},l={};b.d(l,{default:()=>m});const m={data:{glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"},metrics:{name:"Leland",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}}};return l=l.default})())); -//# sourceMappingURL=vexflow-font-leland.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-leland.js.map b/build/cjs/vexflow-font-leland.js.map deleted file mode 100644 index f30c43fcc5..0000000000 --- a/build/cjs/vexflow-font-leland.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-font-leland.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAU,OAAIC,IAClF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KDLsB,CACtBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2NAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,kPAEPmB,MAAO,CACHN,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4vCAEPoB,KAAM,CACFP,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qnBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,qxCAEPsB,MAAO,CACHT,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2mCAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s/BAEPwB,yBAA0B,CACtBX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,g3BAEPyB,SAAU,CACNZ,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0PAEP0B,SAAU,CACNb,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+XAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sxBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4xBAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suBAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,scAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6kBAEPmC,cAAe,CACXtB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhBAEPoC,iBAAkB,CACdvB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uwBAEPqC,YAAa,CACTxB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEPsC,oBAAqB,CACjBzB,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qxCAEPuC,cAAe,CACX1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8UAEPwC,aAAc,CACV3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mRAEPyC,cAAe,CACX5B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gHAEP0C,eAAgB,CACZ7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ohBAEP2C,gBAAiB,CACb9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8YAEP4C,0BAA2B,CACvB/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEP6C,oBAAqB,CACjBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qFAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2CAEP+C,wBAAyB,CACrBlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPgD,4BAA6B,CACzBnC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msCAEPiD,sBAAuB,CACnBpC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAEPkD,qBAAsB,CAClBrC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPmD,sBAAuB,CACnBtC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ubAEPoD,4BAA6B,CACzBvC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kzCAEPqD,sBAAuB,CACnBxC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iwBAEPsD,qBAAsB,CAClBzC,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u6BAEPuD,sBAAuB,CACnB1C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wcAEPwD,2BAA4B,CACxB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ghBAEPyD,qBAAsB,CAClB5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6TAEP0D,oBAAqB,CACjB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iRAEP2D,qBAAsB,CAClB9C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yOAEP4D,yBAA0B,CACtB/C,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEP6D,wBAAyB,CACrBhD,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEP8D,kBAAmB,CACfjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+EAEP+D,0BAA2B,CACvBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iCAEPgE,2BAA4B,CACxBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mCAEPiE,+BAAgC,CAC5BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qEAEPkE,gBAAiB,CACbrD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gGAEPmE,SAAU,CACNtD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yCAEPoE,UAAW,CACPvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kcAEPqE,YAAa,CACTxD,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qYAEPsE,WAAY,CACRzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0rBAEPuE,aAAc,CACV1D,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0lBAEPwE,WAAY,CACR3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,68BAEPyE,aAAc,CACV5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,s0BAEP0E,WAAY,CACR7D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,ktCAEP2E,aAAc,CACV9D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,6lCAEP4E,YAAa,CACT/D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u5CAEP6E,cAAe,CACXhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q3CAEP8E,eAAgB,CACZjE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sZAEP+E,kBAAmB,CACflE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oRAEPgF,gBAAiB,CACbnE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2nBAEPiF,sBAAuB,CACnBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,spBAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6yBAEPmF,qBAAsB,CAClBtE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+TAEPoF,sBAAuB,CACnBvE,MAAO,EACPC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gSAEPqF,+BAAgC,CAC5BxE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,maAEPsF,0CAA2C,CACvCzE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q1BAEPuF,gCAAiC,CAC7B1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qfAEPwF,sCAAuC,CACnC3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wuBAEPyF,4BAA6B,CACzB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0kBAEP0F,qBAAsB,CAClB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8fAEP2F,6BAA8B,CAC1B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o3BAEP4F,iBAAkB,CACd/E,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8NAEP6F,iBAAkB,CACdhF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,yPAEP8F,iBAAkB,CACdjF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iHAEP+F,iBAAkB,CACdlF,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,6HAEPgG,mBAAoB,CAChBnF,MAAO,EACPC,MAAO,GACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,iGAEPiG,mBAAoB,CAChBpF,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,EACPC,GAAI,GACJjB,EAAG,0GAEPkG,wBAAyB,CACrBrF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oQAEPmG,wBAAyB,CACrBtF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,iSAEPoG,kBAAmB,CACfvF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6KAEPqG,kBAAmB,CACfxF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,oLAEPsG,aAAc,CACVzF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0ZAEPuG,aAAc,CACV1F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,ycAEPwG,iBAAkB,CACd3F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qOAEPyG,iBAAkB,CACd5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4PAEP0G,qBAAsB,CAClB7F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0WAEP2G,qBAAsB,CAClB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2YAEP4G,kBAAmB,CACf/F,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2UAEP6G,kBAAmB,CACfhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8WAEP8G,gBAAiB,CACbjG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2OAEP+G,QAAS,CACLlG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEPgH,cAAe,CACXnG,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEPiH,WAAY,CACRpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPkH,gBAAiB,CACbrG,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mIAEPmH,UAAW,CACPtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qIAEPoH,mBAAoB,CAChBvG,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,yJAEPqH,SAAU,CACNxG,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+HAEPsH,kBAAmB,CACfzG,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iJAEPuH,YAAa,CACT1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,05BAEPwH,QAAS,CACL3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iXAEPyH,SAAU,CACN5G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+gBAEP0H,SAAU,CACN7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEP2H,SAAU,CACN9G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,i9BAEP4H,UAAW,CACP/G,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,irCAEP6H,aAAc,CACVhH,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEP8H,aAAc,CACVjH,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,urCAEP+H,aAAc,CACVlH,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,slCAEPgI,mBAAoB,CAChBnH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPiI,iBAAkB,CACdpH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ogBAEPkI,SAAU,CACNrH,OAAQ,GACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEPmI,cAAe,CACXtH,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,42BAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0fAEPqI,kBAAmB,CACfxH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oqBAEPsI,gBAAiB,CACbzH,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6eAEPuI,mBAAoB,CAChB1H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+SAEPwI,oBAAqB,CACjB3H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0dAEPyI,2BAA4B,CACxB5H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wkBAEP0I,oCAAqC,CACjC7H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45BAEP2I,8BAA+B,CAC3B9H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEP4I,mCAAoC,CAChC/H,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,orBAEP6I,wCAAyC,CACrChI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxBAEP8I,gCAAiC,CAC7BjI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uqBAEP+I,gBAAiB,CACblI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6QAEPgJ,cAAe,CACXnI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,oNAEPiJ,eAAgB,CACZpI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,sHAEPkJ,aAAc,CACVrI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPmJ,gBAAiB,CACbtI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iNAEPoJ,0BAA2B,CACvBvI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPqJ,0BAA2B,CACvBxI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yVAEPsJ,iBAAkB,CACdzI,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ozEAEPuJ,gBAAiB,CACb1I,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iuFAEPwJ,mBAAoB,CAChB3I,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjBAEPyJ,WAAY,CACR5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEP0J,YAAa,CACT7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qUAEP2J,YAAa,CACT9I,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0aAEP4J,eAAgB,CACZ/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6CAEP6J,eAAgB,CACZhJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iUAEP8J,mBAAoB,CAChBjJ,OAAQ,EACRC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8bAEP+J,cAAe,CACXlJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,yHAEPgK,iBAAkB,CACdnJ,MAAO,EACPC,MAAO,IACPC,MAAO,GACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6DAEPiK,6BAA8B,CAC1BpJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qXAEPkK,oCAAqC,CACjCrJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8vBAGXmK,WAAY,SACZC,WAAY,IACZC,YAAa,4BCvpCbC,QCNyB,CACzBC,KAAM,SACNC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,IAAK,KACxBC,QAAS,IACTC,cAAe,KAEnB/K,OAAQ,CACJkJ,eAAgB,CACZ8B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb/B,mBAAoB,CAChB6B,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEb9B,cAAe,CACX4B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbC,mBAAoB,CAChBH,iBAAkB,GAClBC,aAAc,IACdC,QAAS,KAEbE,oBAAqB,CACjBJ,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbG,oBAAqB,CACjBL,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbI,qBAAsB,CAClBN,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbK,uBAAwB,CACpBP,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbM,wBAAyB,CACrBR,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbO,6BAA8B,CAC1BT,iBAAkB,EAClBC,aAAc,IACdC,QAAS,GAEbQ,UAAW,CACPV,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEb7B,iBAAkB,CACd2B,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB5G,gBAAiB,CACb2G,gBAAiB,GACjBC,aAAc,IACdC,SAAU,KAEd/G,eAAgB,CACZ6G,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBS,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,IACPC,OAAQ,KAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,EACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,MAKxBE,WAAY,CACRP,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACNC,WAAY,CACRC,SAAU,GACVpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAEnBC,gBAAiB,CACbH,QAAS,GACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAEnBE,kBAAmB,CACfJ,QAAS,GACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAEnBG,gBAAiB,CACbL,QAAS,GACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,GAEnBI,qBAAsB,CAClBN,QAAS,GACTpB,QAAS,GACTqB,cAAe,EACfC,cAAe,GAEnBK,UAAW,CACPP,QAAS,EACTpB,SAAU,EACVqB,cAAe,GACfC,cAAe,GAEnBpE,gBAAiB,CACbkE,QAAS,EACTpB,SAAU,EACVqB,cAAe,GACfC,cAAe,GAEnBnE,cAAe,CACXiE,QAAS,EACTpB,SAAU,EACVqB,cAAe,GACfC,cAAe,GAEnBM,UAAW,CACPR,QAAS,GACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAEnBO,cAAe,CACXT,QAAS,EACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAEnBQ,WAAY,CACRV,QAAS,GACTpB,QAAS,EACTqB,cAAe,EACfC,cAAe,IAGvBS,YAAa,CACTC,QAAS,CACLpB,MAAO,GACPF,MAAO,GAEXuB,UAAW,CACPrB,MAAO,KACPF,MAAO,IAGfwB,aAAc,CACVC,GAAI,CACAvB,MAAO,IAEXwB,KAAM,CACFxB,MAAO,KAIfyB,OAAQ,CAEJC,WAAY,EACZ1B,MAAO,GAEP2B,YAAa,GACbC,QAAS,GAEbC,aAAc,CACVpI,wBAAyB,CACrBwE,QAAS,GAEbvE,wBAAyB,CACrBuE,QAAS,IAGjB6D,QAAS,CACLV,QAAS,CACLpB,MAAO,GACPhB,QAAS,EACT+C,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACHnC,MAAO,GACPhB,QAAS,EACT+C,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTvD,QAAS,GAEbrK,KAAM,CACF4N,QAAS,IAEb7N,MAAO,CACH6N,QAAS,KAGjBC,SAAU,CACNC,WAAY,GAEhBC,KAAM,CACFC,yBAA0B,EAG1BH,SAAU,CACNI,uBAAwB,CACpBC,kBAAmB,EACnBC,oBAAqB,GAEzBxM,wBAAyB,CACrBuM,kBAAmB,EACnBC,oBAAqB,GAEzBC,wBAAyB,CACrBF,kBAAmB,EACnBC,oBAAqB,GAEzBE,cAAe,CACXH,mBAAoB,EACpBC,oBAAqB,GAEzB7M,eAAgB,CACZ4M,mBAAoB,EACpBC,oBAAqB,GAEzBG,eAAgB,CACZJ,mBAAoB,EACpBC,oBAAqB,GAEzB/M,aAAc,CACV8M,mBAAoB,KACpBC,oBAAqB,MAEzB9M,cAAe,CACX6M,mBAAoB,EACpBC,oBAAqB,GAEzB1M,oBAAqB,CACjB0M,qBAAsB,EACtBD,kBAAmB,KAI/BK,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACb7E,YAAa,EACb8E,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvBxP,OAAQ,CACJS,KAAM,CACFqL,MAAO,GACPG,QAAS,EACTyB,OAAQ,GAEZlN,MAAO,CACHyL,QAAS,GAEbwD,KAAM,CACFxD,QAAS,IACTyD,WAAY,CACRzD,QAAS,IAGjBN,aAAc,CACVG,MAAO,GACPpL,MAAO,CACHiP,MAAO,IACPjC,OAAQ,GAEZ9M,MAAO,CACH8M,QAAS,IAEb,iBAAkB,CACd5B,MAAO,GACP4B,QAAS,MAGjBvB,WAAY,CACRL,MAAO,GACPpL,MAAO,CACHgN,OAAQ,MAGhBkC,iBAAkB,CACd9D,MAAO,IAEX+D,eAAgB,CACZ/D,MAAO,IAEXM,SAAU,CACN3E,aAAc,CACVkI,MAAO,KAEXjI,kBAAmB,CACfiI,MAAO,KAEXtD,WAAY,CACRsD,MAAO,GAEXlD,gBAAiB,CACbkD,MAAO,GAEXjD,kBAAmB,CACfiD,MAAO,GAEXhD,gBAAiB,CACbgD,MAAO,GAEX/C,qBAAsB,CAClB+C,MAAO,GAEX9C,UAAW,CACP8C,MAAO,GAEXvH,gBAAiB,CACbuH,MAAO,GAEXtH,cAAe,CACXsH,MAAO,GAEX7C,UAAW,CACP6C,MAAO,GAEX5C,cAAe,CACX4C,MAAO,GAEX3C,WAAY,CACR2C,MAAO,IAGfG,gBAAiB,CACbC,mBAAoB,CAChB9D,QAAS,KAEb+D,iBAAkB,CACd/D,QAAS,MAGjBgE,cAAe,CACXF,mBAAoB,CAChB9D,QAAS,EACTyB,OAAQ,GAEZsC,iBAAkB,CACd/D,QAAS,EACTyB,OAAQ,IAGhBwC,SAAU,CACNpE,MAAO,GACPqE,eAAgB,CACZrE,MAAO,GACP4B,OAAQ,GAEZvH,gBAAiB,CACb2F,MAAO,IAEXtL,MAAO,CACHsL,MAAO,GACPG,QAAS,EACTyB,OAAQ,GAEZjN,KAAM,CACFqL,MAAO,GACPG,QAAS,EACTyB,OAAQ,GAEZlG,cAAe,CACXyE,QAAS,EACTyB,OAAQ,GAEZjG,aAAc,CACVqE,MAAO,IAEXpE,kBAAmB,CACfoE,MAAO,IAEXnE,gBAAiB,CACbsE,QAAS,GAEbrE,mBAAoB,CAChBqE,QAAS,IAGjBqC,SAAU,CACN8B,kBAAmB,CACftE,MAAO,IAEXuE,oBAAqB,CACjBvE,MAAO,KAGfvB,YAAa,CACTrB,eAAgB,CACZyG,MAAO,IAEXxG,mBAAoB,CAChBwG,MAAO,IAEXvG,cAAe,CACXuG,MAAO,GAEXxE,mBAAoB,CAChBwE,MAAO,IAEXvE,oBAAqB,CACjBuE,MAAO,IAEXtE,oBAAqB,CACjBsE,MAAO,IAEXrE,qBAAsB,CAClBqE,MAAO,IAEXpE,uBAAwB,CACpBoE,MAAO,IAEXnE,wBAAyB,CACrBmE,MAAO,IAEXlE,6BAA8B,CAC1BkE,MAAO,IAEXjE,UAAW,CACPiE,MAAO,IAEXtG,iBAAkB,CACdsG,MAAO,IAEXtL,gBAAiB,CACbsL,MAAO,KAEXxL,eAAgB,CACZwL,MAAO,Q","sources":["webpack://VexFlowFont.Leland/webpack/universalModuleDefinition","webpack://VexFlowFont.Leland/webpack/bootstrap","webpack://VexFlowFont.Leland/webpack/runtime/define property getters","webpack://VexFlowFont.Leland/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Leland/./src/fonts/leland_glyphs.ts","webpack://VexFlowFont.Leland/./entry/vexflow-font-leland.ts","webpack://VexFlowFont.Leland/./src/fonts/leland_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Leland\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { LelandFont } from '../src/fonts/leland_glyphs';\nimport { LelandMetrics } from '../src/fonts/leland_metrics';\nexport const Font = {\n data: LelandFont,\n metrics: LelandMetrics,\n};\nexport default Font;\n","export const LelandMetrics = {\n name: 'Leland',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXBlack","noteheadCircleX","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKucukMucennebSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","brassMuteClosed","brassMuteOpen","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","fontFamily","resolution","generatedOn","metrics","name","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","clef_default","width","annotations","point","treble","line","shiftX","bass","clef_small","ornament","brassScoop","xOffset","stemUpYOffset","reportedWidth","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassFlip","brassJazzTurn","brassSmear","parenthesis","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","stem","heightAdjustmentForFlag","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpWhole","noteheadXHalf","noteheadXWhole","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","scale","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","breathMarkTick","restQuarterStemUp","restQuarterStemDown"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js b/build/cjs/vexflow-font-petaluma.js deleted file mode 100644 index f2bbabb11b..0000000000 --- a/build/cjs/vexflow-font-petaluma.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(b,m){"object"==typeof exports&&"object"==typeof module?module.exports=m():"function"==typeof define&&define.amd?define([],m):"object"==typeof exports?exports.VexFlowFont=m():(b.VexFlowFont=b.VexFlowFont||{},b.VexFlowFont.Petaluma=m())}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var b={d:(m,a)=>{for(var l in a)b.o(a,l)&&!b.o(m,l)&&Object.defineProperty(m,l,{enumerable:!0,get:a[l]})},o:(b,m)=>Object.prototype.hasOwnProperty.call(b,m)},m={};b.d(m,{default:()=>a});const a={data:{glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},metrics:{name:"Petaluma",smufl:!0,stave:{padding:15,endPaddingMax:15,endPaddingMin:7,unalignedNotePadding:12},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-150,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["L"],spacing:20,superSubRatio:.73},glyphs:{csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:15},brassFallRoughMedium:{xOffset:16,yOffset:26,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:3,yOffset:-8,stemUpYOffset:28,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:26,reportedWidth:5},brassMuteOpen:{xOffset:4,yOffset:-8,stemUpYOffset:27,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:6,yOffset:-4,stemUpYOffset:5,reportedWidth:30},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:5,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:22,tupletPoint:16,shiftY:-2},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:13,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:8,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2,displacedShiftX:-2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemDown:1.8,offsetYBaseStemUp:-1.8},noteheadBlack:{offsetYBaseStemDown:2,offsetYBaseStemUp:-2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:20},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.77,flag16thUp:{shiftX:-.75},flag32ndUp:{shiftX:-.85},flag64thUp:{shiftX:-1.55},flag128thUp:{shiftX:-1.3},flag16thDown:{shiftX:-.75},flag32ndDown:{shiftX:-.76},flag64thDown:{shiftX:-1.5},flag128thDown:{shiftX:-1.2},staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-10,shiftY:8},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{noteheadBlackStemUp:{shiftX:.5},noteheadHalfStemUp:{shiftX:.725},noteheadWholeStemUp:{shiftX:1}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.95},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.7},csymMajorSeventh:{scale:.8},accidentalSharp:{scale:.7},accidentalFlat:{scale:.8}}}}};return m=m.default})())); -//# sourceMappingURL=vexflow-font-petaluma.js.map \ No newline at end of file diff --git a/build/cjs/vexflow-font-petaluma.js.map b/build/cjs/vexflow-font-petaluma.js.map deleted file mode 100644 index d9f6383768..0000000000 --- a/build/cjs/vexflow-font-petaluma.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"vexflow-font-petaluma.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAqB,YAAID,KAEzBD,EAAkB,YAAIA,EAAkB,aAAK,CAAC,EAAGA,EAAkB,YAAY,SAAIC,IACpF,CATD,CASsB,oBAAXK,OAAyBA,OAA+B,oBAAfC,WAA6BA,WAAaC,MAAO,I,mBCRrG,IAAIC,EAAsB,CCA1BA,EAAwB,CAACP,EAASQ,KACjC,IAAI,IAAIC,KAAOD,EACXD,EAAoBG,EAAEF,EAAYC,KAASF,EAAoBG,EAAEV,EAASS,IAC5EE,OAAOC,eAAeZ,EAASS,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDF,EAAwB,CAACQ,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,4BCA3E,MCQP,EAJoB,CAChBI,KDLwB,CACxBC,OAAQ,CACJC,WAAY,CACRC,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6WAEPkB,cAAe,CACXL,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,scAEPmB,YAAa,CACTN,MAAO,EACPC,MAAO,GACPC,MAAO,IACPC,MAAO,KACPC,GAAI,IACJjB,EAAG,gLAEPoB,eAAgB,CACZP,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,smBAEPqB,MAAO,CACHR,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u0DAEPsB,KAAM,CACFT,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,mrDAEPuB,MAAO,CACHV,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,87DAEPwB,MAAO,CACHX,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,soFAEPyB,MAAO,CACHZ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qqCAEP0B,yBAA0B,CACtBb,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ytBAEP,iBAAkB,CACda,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,u3EAEP2B,SAAU,CACNd,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooBAEP4B,SAAU,CACNf,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2gBAEP6B,SAAU,CACNhB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wnCAEP8B,SAAU,CACNjB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4iCAEP+B,SAAU,CACNlB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kkCAEPgC,SAAU,CACNnB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,46BAEPiC,SAAU,CACNpB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w7BAEPkC,SAAU,CACNrB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8mBAEPmC,SAAU,CACNtB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w/BAEPoC,SAAU,CACNvB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,k2BAEPqC,cAAe,CACXxB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g3BAEPsC,iBAAkB,CACdzB,MAAO,GACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,wwDAEPuC,YAAa,CACT1B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mwBAEPwC,iBAAkB,CACd3B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uuBAEPyC,aAAc,CACV5B,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,kRAEP0C,mBAAoB,CAChB7B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,gfAEP2C,wBAAyB,CACrB9B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+bAEP4C,kBAAmB,CACf/B,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,qhBAEP6C,uBAAwB,CACpBhC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oZAEP8C,oBAAqB,CACjBjC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,u3DAEP+C,cAAe,CACXlC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,weAEPgD,aAAc,CACVnC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wbAEPiD,cAAe,CACXpC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gMAEPkD,qBAAsB,CAClBrC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjFAEPmD,eAAgB,CACZtC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpCAEPoD,cAAe,CACXvC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kjCAEPqD,eAAgB,CACZxC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8rBAEPsD,2BAA4B,CACxBzC,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uxDAEPuD,qBAAsB,CAClB1C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0jCAEPwD,oBAAqB,CACjB3C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gwBAEPyD,gBAAiB,CACb5C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2sBAEP0D,2BAA4B,CACxB7C,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wlEAEP2D,qBAAsB,CAClB9C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+hCAEP4D,oBAAqB,CACjB/C,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,whCAEP6D,qBAAsB,CAClBhD,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2tBAEP8D,0BAA2B,CACvBjD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qiCAEP+D,oBAAqB,CACjBlD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qwBAEPgE,oBAAqB,CACjBnD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yUAEPiE,gCAAiC,CAC7BpD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mhDAEPkE,0BAA2B,CACvBrD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEPmE,yBAA0B,CACtBtD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPoE,0BAA2B,CACvBvD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,6RAEPqE,8BAA+B,CAC3BxD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q/CAEPsE,wBAAyB,CACrBzD,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ieAEPuE,uBAAwB,CACpB1D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oeAEPwE,wBAAyB,CACrB3D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ySAEPyE,4BAA6B,CACzB5D,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wjEAEP0E,sBAAuB,CACnB7D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s3BAEP2E,qBAAsB,CAClB9D,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s1BAEP4E,sBAAuB,CACnB/D,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ysBAEP6E,4BAA6B,CACzBhE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kvDAEP8E,sBAAuB,CACnBjE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,o4BAEP+E,qBAAsB,CAClBlE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yyBAEPgF,sBAAuB,CACnBnE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wpBAEPiF,2BAA4B,CACxBpE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0/CAEPkF,qBAAsB,CAClBrE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ggBAEPmF,oBAAqB,CACjBtE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glBAEPoF,qBAAsB,CAClBvE,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2TAEPqF,oBAAqB,CACjBxE,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ivBAEPsF,yBAA0B,CACtBzE,OAAQ,GACRC,MAAO,GACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wYAEPuF,wBAAyB,CACrB1E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sWAEPwF,kBAAmB,CACf3E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8QAEPyF,0BAA2B,CACvB5E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2VAEP0F,2BAA4B,CACxB7E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qPAEP2F,+BAAgC,CAC5B9E,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yRAEP4F,gBAAiB,CACb/E,MAAO,EACPC,MAAO,GACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,8PAEP6F,SAAU,CACNhF,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,qUAEP8F,UAAW,CACPjF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,2lBAEP+F,YAAa,CACTlF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8hBAEPgG,WAAY,CACRnF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,0vBAEPiG,aAAc,CACVpF,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+pBAEPkG,WAAY,CACRrF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0gCAEPmG,aAAc,CACVtF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m7BAEPoG,WAAY,CACRvF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q+CAEPqG,aAAc,CACVxF,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,q5CAEPsG,YAAa,CACTzF,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,yhDAEPuG,cAAe,CACX1F,OAAQ,EACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,4+CAEPwG,eAAgB,CACZ3F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ipBAEPyG,kBAAmB,CACf5F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,+xBAEP0G,gBAAiB,CACb7F,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sgDAEP2G,sBAAuB,CACnB9F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,msBAEP4G,qBAAsB,CAClB/F,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4yCAEP6G,qBAAsB,CAClBhG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,oYAEP8G,sBAAuB,CACnBjG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yYAEP+G,+BAAgC,CAC5BlG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0qBAEPgH,0CAA2C,CACvCnG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q2CAEPiH,gCAAiC,CAC7BpG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPkH,sCAAuC,CACnCrG,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,87DAEPmH,4BAA6B,CACzBtG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,glCAEPoH,qBAAsB,CAClBvG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,47BAEPqH,oBAAqB,CACjBxG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w3BAEPsH,6BAA8B,CAC1BzG,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4wCAEPuH,gBAAiB,CACb1G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,idAEPwH,eAAgB,CACZ3G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kpCAEPyH,iBAAkB,CACd5G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qdAEP0H,iBAAkB,CACd7G,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,+fAEP2H,iBAAkB,CACd9G,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,GACPC,GAAI,GACJjB,EAAG,yTAEP4H,iBAAkB,CACd/G,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,OAAQ,EACRC,GAAI,GACJjB,EAAG,6WAEP6H,mBAAoB,CAChBhH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wOAEP8H,mBAAoB,CAChBjH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,4QAEP+H,wBAAyB,CACrBlH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,gQAEPgI,wBAAyB,CACrBnH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,qSAEPiI,kBAAmB,CACfpH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mbAEPkI,kBAAmB,CACfrH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,8dAEPmI,aAAc,CACVtH,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qtBAEPoI,aAAc,CACVvH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,OAAQ,EACRC,GAAI,IACJjB,EAAG,gtBAEPqI,iBAAkB,CACdxH,MAAO,EACPC,MAAO,IACPC,OAAQ,EACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,gpBAEPsI,iBAAkB,CACdzH,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,EACPC,GAAI,IACJjB,EAAG,47BAEPuI,qBAAsB,CAClB1H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ypCAEPwI,qBAAsB,CAClB3H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,42CAEPyI,sBAAuB,CACnB5H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgCAEP0I,sBAAuB,CACnB7H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,skCAEP2I,kBAAmB,CACf9H,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,2lBAEP4I,kBAAmB,CACf/H,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,gqBAEP6I,gBAAiB,CACbhI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2YAEP8I,gBAAiB,CACbjI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,qeAEP+I,QAAS,CACLlI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wgBAEPgJ,cAAe,CACXnI,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0rBAEPiJ,WAAY,CACRpI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qjBAEPkJ,gBAAiB,CACbrI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,wRAEPmJ,UAAW,CACPtI,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,0TAEPoJ,mBAAoB,CAChBvI,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,mpBAEPqJ,SAAU,CACNxI,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4PAEPsJ,kBAAmB,CACfzI,OAAQ,IACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,iqBAEPuJ,YAAa,CACT1I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,y+BAEPwJ,QAAS,CACL3I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,qkBAEPyJ,SAAU,CACN5I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,26BAEP0J,SAAU,CACN7I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yxCAEP2J,SAAU,CACN9I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,uiDAEP4J,UAAW,CACP/I,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,KACJjB,EAAG,upDAEP6J,aAAc,CACVhJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,ijCAEP8J,aAAc,CACVjJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,woCAEP+J,aAAc,CACVlJ,OAAQ,IACRC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,i+BAEPgK,mBAAoB,CAChBnJ,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,omBAEPiK,iBAAkB,CACdpJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+3BAEPkK,SAAU,CACNrJ,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8uBAEPmK,cAAe,CACXtJ,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,21CAEPoK,aAAc,CACVvJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,q3BAEPqK,kBAAmB,CACfxJ,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrCAEPsK,gBAAiB,CACbzJ,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4mCAEPuK,mBAAoB,CAChB1J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,84BAEPwK,oBAAqB,CACjB3J,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,spCAEPyK,2BAA4B,CACxB5J,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,45CAEP0K,oCAAqC,CACjC7J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,m5CAEP2K,8BAA+B,CAC3B9J,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,snEAEP4K,mCAAoC,CAChC/J,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,8lDAEP6K,wCAAyC,CACrChK,MAAO,EACPC,MAAO,KACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,s4CAEP8K,4CAA6C,CACzCjK,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,suDAEP+K,gCAAiC,CAC7BlK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,0yCAEPgL,WAAY,CACRnK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,oPAEPiL,gBAAiB,CACbpK,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,kRAEPkL,kBAAmB,CACfrK,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,GACPC,GAAI,IACJjB,EAAG,iUAEPmL,gBAAiB,CACbtK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ooCAEPoL,qBAAsB,CAClBvK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ovDAEPqL,UAAW,CACPxK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4nBAEPsL,gBAAiB,CACbzK,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,4gBAEPuL,cAAe,CACX1K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEPwL,UAAW,CACP3K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+MAEPyL,cAAe,CACX5K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,szBAEP0L,WAAY,CACR7K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kXAEP2L,eAAgB,CACZ9K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mmBAEP4L,aAAc,CACV/K,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,uVAEP6L,gBAAiB,CACbhL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,iTAEP8L,0BAA2B,CACvBjL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,meAEP+L,0BAA2B,CACvBlL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,skBAEPgM,yBAA0B,CACtBnL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,+aAEPiM,iBAAkB,CACdpL,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,q6EAEPkM,gBAAiB,CACbrL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mjCAEPmM,gBAAiB,CACbtL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,8TAEPoM,mBAAoB,CAChBvL,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,2eAEPqM,aAAc,CACVxL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,28DAEPsM,eAAgB,CACZzL,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qmEAEPuM,WAAY,CACR1L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,w2BAEPwM,YAAa,CACT3L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g7BAEPyM,YAAa,CACT5L,MAAO,EACPC,MAAO,KACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,koEAEP0M,eAAgB,CACZ7L,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,sXAEP2M,eAAgB,CACZ9L,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,0bAEP4M,mBAAoB,CAChB/L,OAAQ,GACRC,MAAO,IACPC,OAAQ,GACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,g+BAEP6M,cAAe,CACXhM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,umBAEP8M,iBAAkB,CACdjM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,6jBAEP+M,UAAW,CACPlM,MAAO,EACPC,MAAO,IACPC,MAAO,IACPC,MAAO,IACPC,GAAI,GACJjB,EAAG,iQAEPgN,mBAAoB,CAChBnM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,qfAEPiN,oBAAqB,CACjBpM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,8eAEPkN,oBAAqB,CACjBrM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,kqBAEPmN,qBAAsB,CAClBtM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,mrBAEPoN,uBAAwB,CACpBvM,MAAO,EACPC,MAAO,IACPC,MAAO,EACPC,MAAO,IACPC,GAAI,IACJjB,EAAG,ocAEPqN,wBAAyB,CACrBxM,OAAQ,GACRC,MAAO,IACPC,MAAO,EACPC,MAAO,KACPC,GAAI,KACJjB,EAAG,iaAEPsN,6BAA8B,CAC1BzM,MAAO,EACPC,MAAO,IACPC,OAAQ,GACRC,MAAO,KACPC,GAAI,KACJjB,EAAG,6YAEPuN,6BAA8B,CAC1B1M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,4qBAEPwN,oCAAqC,CACjC3M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,uyCAEPyN,qBAAsB,CAClB5M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,wmBAEP0N,sBAAuB,CACnB7M,MAAO,EACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,GAAI,IACJjB,EAAG,yQAGX2N,WAAY,WACZC,WAAY,IACZC,YAAa,4BCvlDbC,QCF2B,CAC3BC,KAAM,WACNC,OAAO,EACPC,MAAO,CACHC,QAAS,GACTC,cAAe,GACfC,cAAe,EACfC,qBAAsB,IAE1BC,WAAY,CACRC,0BAA2B,EAC3BC,YAAa,EACbC,kBAAmB,GAEvBC,YAAa,CACTC,OAAQ,CACJC,mBAAoB,IACpBC,gBAAiB,IACjBC,eAAgB,IAChBC,iBAAkB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAC5CC,iBAAkB,CAAC,KACnBC,QAAS,GACTC,cAAe,KAEnBvO,OAAQ,CACJgM,eAAgB,CACZwC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbzC,mBAAoB,CAChBuC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbxC,cAAe,CACXsC,iBAAkB,GAClBC,aAAc,IACdC,QAAS,GAEbrC,mBAAoB,CAChBmC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbpC,oBAAqB,CACjBkC,gBAAiB,GACjBC,aAAc,IACdC,QAAS,KAEbnC,oBAAqB,CACjBiC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEblC,qBAAsB,CAClBgC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbjC,uBAAwB,CACpB+B,gBAAiB,EACjBC,aAAc,IACdC,QAAS,KAEbhC,wBAAyB,CACrB8B,iBAAkB,IAClBC,aAAc,IACdC,QAAS,KAEb/B,6BAA8B,CAC1B6B,iBAAkB,EAClBC,aAAc,IACdC,QAAS,GAEbtC,UAAW,CACPoC,gBAAiB,EACjBC,aAAc,IACdC,QAAS,GAEbvC,iBAAkB,CACdqC,gBAAiB,IACjBE,QAAS,EACTD,aAAc,KAElB1I,gBAAiB,CACbyI,gBAAiB,EACjBC,aAAc,IACdC,SAAU,KAEd7I,eAAgB,CACZ2I,iBAAkB,GAClBC,aAAc,IACdC,SAAU,OAItBC,aAAc,CACVC,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,IACPC,OAAQ,KAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,EACNC,OAAQ,IAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,MAKxBE,WAAY,CACRP,MAAO,GACPC,YAAa,CACT,MAAO,CACHC,MAAO,GACPC,OAAQ,CACJC,MAAO,GACPC,OAAQ,IAGhB,MAAO,CACHH,MAAO,GACPC,OAAQ,CACJC,KAAM,IACNC,OAAQ,GAEZC,KAAM,CACFF,KAAM,IACNC,OAAQ,OAKxBG,SAAU,CACN/E,WAAY,CACRgF,SAAU,GACVX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnBjF,gBAAiB,CACb+E,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnBhF,kBAAmB,CACf8E,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnB/E,gBAAiB,CACb6E,QAAS,GACTX,QAAS,EACTY,cAAe,EACfC,cAAe,IAEnB9E,qBAAsB,CAClB4E,QAAS,GACTX,QAAS,GACTY,cAAe,EACfC,cAAe,GAEnB7E,UAAW,CACP2E,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnB5E,gBAAiB,CACb0E,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnB3E,cAAe,CACXyE,QAAS,EACTX,SAAU,EACVY,cAAe,GACfC,cAAe,GAEnB1E,UAAW,CACPwE,QAAS,GACTX,SAAU,EACVY,cAAe,EACfC,cAAe,GAEnBzE,cAAe,CACXuE,QAAS,EACTX,SAAU,EACVY,cAAe,EACfC,cAAe,IAEnBxE,WAAY,CACRsE,QAAS,GACTX,SAAU,EACVY,cAAe,EACfC,cAAe,IAGvBC,YAAa,CACTC,QAAS,CACLX,MAAO,GACPF,MAAO,GAEXc,UAAW,CACPZ,MAAO,KACPF,MAAO,IAGfe,aAAc,CACVC,GAAI,CACAd,MAAO,IAEXe,KAAM,CACFf,MAAO,KAIfgB,OAAQ,CAEJC,WAAY,EACZjB,MAAO,GAEPkB,YAAa,GACbC,QAAS,GAEbC,aAAc,CACV9I,wBAAyB,CACrBmG,QAAS,GAEblG,wBAAyB,CACrBkG,QAAS,IAGjB4C,QAAS,CACLV,QAAS,CACLX,MAAO,GACPR,QAAS,EACT8B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,GACfC,gBAAiB,GAErBC,MAAO,CACH1B,MAAO,GACPR,QAAS,EACT8B,eAAgB,EAChBC,gBAAiB,EACjBC,cAAe,EACfC,gBAAiB,IAGzBE,gBAAiB,CACbC,WAAY,CACRC,QAAS,GACTC,QAAS,GACTtC,QAAS,GAEb3N,KAAM,CACFiQ,QAAS,IAEblQ,MAAO,CACHkQ,QAAS,KAGjBC,SAAU,CACNC,WAAY,EACZC,iBAAkB,GAEtBC,KAAM,CACFC,yBAA0B,EAG1BJ,SAAU,CACNjN,uBAAwB,CACpBsN,kBAAmB,EACnBC,oBAAqB,GAEzBtN,wBAAyB,CACrBqN,kBAAmB,EACnBC,oBAAqB,GAEzBxN,wBAAyB,CACrBuN,kBAAmB,EACnBC,oBAAqB,GAEzB1O,cAAe,CACXyO,mBAAoB,EACpBC,oBAAqB,GAEzBzO,eAAgB,CACZwO,mBAAoB,EACpBC,oBAAqB,GAEzB3O,eAAgB,CACZ0O,mBAAoB,EACpBC,oBAAqB,GAEzB9O,aAAc,CACV8O,oBAAqB,IACrBD,mBAAoB,KAExB5O,cAAe,CACX6O,oBAAqB,EACrBD,mBAAoB,GAExB9N,oBAAqB,CACjB+N,qBAAsB,EACtBD,kBAAmB,KAI/BE,aAAc,CACVC,gBAAiB,EACjBC,YAAa,EACbzD,YAAa,EACb0D,aAAc,GAElBC,OAAQ,CACJC,eAAgB,GAChBC,WAAY,GACZC,WAAY,EACZC,kBAAmB,IAWvB5R,OAAQ,CACJW,KAAM,CACFmO,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZvP,MAAO,CACHuO,QAAS,GAEb4C,KAAM,CACF5C,QAAS,IACT5J,WAAY,CACR4J,QAAS,KAEb1J,WAAY,CACR0J,QAAS,KAEbxJ,WAAY,CACRwJ,QAAS,MAEbtJ,YAAa,CACTsJ,QAAS,KAEb3J,aAAc,CACV2J,QAAS,KAEbzJ,aAAc,CACVyJ,QAAS,KAEbvJ,aAAc,CACVuJ,QAAS,KAEbrJ,cAAe,CACXqJ,QAAS,KAEb6C,WAAY,CACR7C,QAAS,IAGjBN,aAAc,CACVG,MAAO,GACPlO,MAAO,CACHmR,MAAO,IACP9B,OAAQ,GAEZnP,MAAO,CACHmP,QAAS,IAEb,iBAAkB,CACdnB,MAAO,GACPmB,QAAS,MAGjBd,WAAY,CACRL,MAAO,GACPlO,MAAO,CACHqP,OAAQ,MAGhB+B,iBAAkB,CACdlD,MAAO,IAEXmD,eAAgB,CACZnD,MAAO,IAEXM,SAAU,CACN3F,aAAc,CACVsI,MAAO,KAEXrI,kBAAmB,CACfqI,MAAO,KAEX1H,WAAY,CACR0H,MAAO,GAEXzH,gBAAiB,CACbyH,MAAO,GAEXxH,kBAAmB,CACfwH,MAAO,GAEXvH,gBAAiB,CACbuH,MAAO,GAEXtH,qBAAsB,CAClBsH,MAAO,GAEXrH,UAAW,CACPqH,MAAO,GAEXpH,gBAAiB,CACboH,MAAO,GAEXnH,cAAe,CACXmH,MAAO,GAEXlH,UAAW,CACPkH,MAAO,GAEXjH,cAAe,CACXiH,MAAO,GAEXhH,WAAY,CACRgH,MAAO,IAGfG,gBAAiB,CACbC,mBAAoB,CAChBlD,QAAS,KAEbmD,iBAAkB,CACdnD,QAAS,MAGjBoD,cAAe,CACXF,mBAAoB,CAChBlD,QAAS,EACTgB,OAAQ,GAEZmC,iBAAkB,CACdnD,QAAS,EACTgB,OAAQ,IAGhBqC,SAAU,CACNxD,MAAO,GACPrO,eAAgB,CACZqO,MAAO,GACPmB,OAAQ,GAEZ/H,gBAAiB,CACb4G,MAAO,IAEXpO,MAAO,CACHoO,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZtP,KAAM,CACFmO,MAAO,GACPG,QAAS,EACTgB,OAAQ,GAEZzG,cAAe,CACXyF,QAAS,GACTgB,OAAQ,GAEZtG,gBAAiB,CACbsF,QAAS,GAEbrF,mBAAoB,CAChBqF,QAAS,IAGjB4B,SAAU,CACN0B,oBAAqB,CACjBtD,OAAQ,IAEZuD,mBAAoB,CAChBvD,OAAQ,MAEZwD,oBAAqB,CACjBxD,OAAQ,IAGhBlB,YAAa,CACT/B,eAAgB,CACZ+F,MAAO,IAEX9F,mBAAoB,CAChB8F,MAAO,IAEX7F,cAAe,CACX6F,MAAO,GAEX1F,mBAAoB,CAChB0F,MAAO,IAEXzF,oBAAqB,CACjByF,MAAO,IAEXxF,oBAAqB,CACjBwF,MAAO,IAEXvF,qBAAsB,CAClBuF,MAAO,IAEXtF,uBAAwB,CACpBsF,MAAO,KAEXrF,wBAAyB,CACrBqF,MAAO,IAEXpF,6BAA8B,CAC1BoF,MAAO,IAEX3F,UAAW,CACP2F,MAAO,IAEX5F,iBAAkB,CACd4F,MAAO,IAEXhM,gBAAiB,CACbgM,MAAO,IAEXlM,eAAgB,CACZkM,MAAO,Q","sources":["webpack://VexFlowFont.Petaluma/webpack/universalModuleDefinition","webpack://VexFlowFont.Petaluma/webpack/bootstrap","webpack://VexFlowFont.Petaluma/webpack/runtime/define property getters","webpack://VexFlowFont.Petaluma/webpack/runtime/hasOwnProperty shorthand","webpack://VexFlowFont.Petaluma/./src/fonts/petaluma_glyphs.ts","webpack://VexFlowFont.Petaluma/./entry/vexflow-font-petaluma.ts","webpack://VexFlowFont.Petaluma/./src/fonts/petaluma_metrics.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VexFlowFont\"] = factory();\n\telse\n\t\troot[\"VexFlowFont\"] = root[\"VexFlowFont\"] || {}, root[\"VexFlowFont\"][\"Petaluma\"] = factory();\n})((typeof window !== 'undefined' ? window : typeof globalThis !== 'undefined' ? globalThis : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { PetalumaFont } from '../src/fonts/petaluma_glyphs';\nimport { PetalumaMetrics } from '../src/fonts/petaluma_metrics';\nexport const Font = {\n data: PetalumaFont,\n metrics: PetalumaMetrics,\n};\nexport default Font;\n","/**\n * The Petaluma font was created by Steinberg Media.\n * https://github.com/steinbergmedia/petaluma\n */\nexport const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n stave: {\n padding: 15,\n endPaddingMax: 15,\n endPaddingMin: 7,\n unalignedNotePadding: 12,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -150,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['L'],\n spacing: 20,\n superSubRatio: 0.73,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 26,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 28,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 26,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 4,\n yOffset: -8,\n stemUpYOffset: 27,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 6,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 30,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 13,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 8,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n displacedShiftX: -2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemDown: 1.8,\n offsetYBaseStemUp: -1.8,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 20,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.77,\n flag16thUp: {\n shiftX: -0.75,\n },\n flag32ndUp: {\n shiftX: -0.85,\n },\n flag64thUp: {\n shiftX: -1.55,\n },\n flag128thUp: {\n shiftX: -1.3,\n },\n flag16thDown: {\n shiftX: -0.75,\n },\n flag32ndDown: {\n shiftX: -0.76,\n },\n flag64thDown: {\n shiftX: -1.5,\n },\n flag128thDown: {\n shiftX: -1.2,\n },\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n noteheadBlackStemUp: {\n shiftX: 0.5,\n },\n noteheadHalfStemUp: {\n shiftX: 0.725,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.7,\n },\n csymMajorSeventh: {\n scale: 0.8,\n },\n accidentalSharp: {\n scale: 0.7,\n },\n accidentalFlat: {\n scale: 0.8,\n },\n },\n },\n};\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","data","glyphs","bracketTop","x_min","x_max","y_min","y_max","ha","bracketBottom","barlineTick","breathMarkTick","segno","coda","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","fontFamily","resolution","generatedOn","metrics","name","smufl","stave","padding","endPaddingMax","endPaddingMin","unalignedNotePadding","accidental","noteheadAccidentalPadding","leftPadding","accidentalSpacing","chordSymbol","global","superscriptOffset","subscriptOffset","kerningOffset","lowerKerningText","upperKerningText","spacing","superSubRatio","leftSideBearing","advanceWidth","yOffset","clef_default","width","annotations","point","treble","line","shiftX","bass","clef_small","ornament","xOffset","stemUpYOffset","reportedWidth","parenthesis","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","shiftY","articulation","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","noteHead","minPadding","displacedShiftX","stem","heightAdjustmentForFlag","offsetYBaseStemUp","offsetYBaseStemDown","stringNumber","verticalPadding","stemPadding","rightPadding","tuplet","noteHeadOffset","stemOffset","bottomLine","topModifierOffset","flag","staveTempo","scale","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","textNote","noteheadBlackStemUp","noteheadHalfStemUp","noteheadWholeStemUp"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-gonville.js b/build/cjs/vexflow-gonville.js deleted file mode 100644 index 28517caf0b..0000000000 --- a/build/cjs/vexflow-gonville.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>bt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Re,BarNote:()=>Nt,Barline:()=>At,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>_,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Et,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ge,ClefNote:()=>Le,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>vi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>D,FontWeight:()=>k,Formatter:()=>De,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>ze,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>li,Repetition:()=>xe,RuntimeError:()=>x,SVGContext:()=>se,Stave:()=>Ee,StaveConnector:()=>Pe,StaveHairpin:()=>Ei,StaveLine:()=>di,StaveModifier:()=>Dt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>le,Stroke:()=>ce,SymbolModifiers:()=>kt,SymbolTypes:()=>Pt,System:()=>bi,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Ht,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>ki,Tuplet:()=>Ne,TupletLocation:()=>Ae,Vex:()=>Ui,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>zt,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>b,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,_.Accidental),a=t=>s(t,_.Annotation),o=t=>s(t,_.Barline),r=t=>s(t,_.Dot),h=t=>s(t,_.GraceNote),l=t=>s(t,_.GraceNoteGroup),c=t=>s(t,_.Note),d=t=>s(t,_.RenderContext),b=t=>s(t,_.StaveNote),m=t=>s(t,_.StemmableNote),g=t=>s(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function E(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let b;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(b=0;b<=1;b++){const t=6*h[b]-12*l[b]+6*c[b],e=-3*h[b]+9*l[b]-9*c[b]+3*d[b],i=3*l[b]-3*h[b];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===D.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return _.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.NORMAL,style:D.NORMAL};const L=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},z={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new x("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=H[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,b=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:b,stroke:c,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return z[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=z,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d,b=0;for(let t=0;tb?e.shift:b,d=e.line}let m=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,b=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===b&&.5===o(1,2)&&.5!==o(0,1)&&(b="second_on_bottom");break;case 4:r([0,2],[1,3])&&(b="spaced_out_tetrachord");break;case 5:"b"===b&&r([1,3])&&(b="spaced_out_pentachord",r([0,2],[2,4])&&(b="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(b="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(b="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?m:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][b][l-t],c[l].column=d,m=m>d?m:d;t=s}const g=[],_=[];for(let t=0;t<=m;t++)g[t]=0,_[t]=0;g[0]=b+n,_[0]=b+n,c.forEach((t=>{t.width>g[t.column]&&(g[t.column]=t.width)}));for(let t=1;t{let e=0;const i=u+t.numAcc;for(;u0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!b(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const b=r[h.root+l]===d,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!b||b&&m){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let b=d.x+n;const m=d.y+a;if(it("Rendering: ",t,b,m),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,b,m),b-=e.getMetrics().width,b-=h,b-=this.accidental.parenRightPaddingAdjustment,o.render(l,b,m),b-=o.getMetrics().width,b-=r,t.render(l,b,m)}else o.render(l,b,m)}}st.DEBUG=!1;class nt extends W{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?k.BOLD:k.NORMAL,s=this.italic?D.ITALIC:D.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(b.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>b(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=g(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,b=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===gt&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let _={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+b)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+b)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),l=function(t,e,i,s){const n=_t(ut(e,i),e);if(t&&xt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);xt(l,s)&&n.setOrigin(.5,.5),_+=Math.abs(l-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${_})`),n.render(t,c,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends W{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=g.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Et,Ct,Pt,kt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Dt extends W{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class At extends Dt{static get CATEGORY(){return _.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Nt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Nt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new At(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Nt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},b=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){b(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(x=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=x,s+=e.width,g=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=_):(l.setTextLine(e.text_line+1),e.text_line+=_+1),l.getReportWidth()&&m(b)){const t=b.getGlyphProps().getWidth();l.getHorizontal()===Et.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Rt.minPadding):l.getHorizontal()===Et.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Rt.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Et.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:k.NORMAL,style:D.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===kt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:kt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=kt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=kt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=kt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Et.LEFT?i.x:this.horizontal===Et.RIGHT?i.x+this.getWidth():this.horizontal===Et.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Et,Rt.HorizontalJustifyString={left:Et.LEFT,right:Et.RIGHT,center:Et.CENTER,centerStem:Et.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Pt,Rt.symbolModifiers=kt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=b,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,b=null,m=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(g.setXShift(l),e=r+p,d=e>d?e:d),b=_,m=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Wt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:k.BOLD,style:D.NORMAL};class Lt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;n2&&i++,2===V.durationToNumber(a.note.duration)?e++:V.durationToNumber(a.note.duration)>2&&i++,2!==e&&2!==i||s.note.getModifiersByType(_.Dot).length!==a.note.getModifiersByType(_.Dot).length||t<1&&t>0?(l=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(l):a.note.setXShift(l)):s.note.voice!==a.note.voice&&s.stemDirection===a.stemDirection&&(s.line!=a.line?(l=h+2,s.note.setXShift(l)):1===a.stemDirection&&(a.stemDirection=-1,a.note.setStemDirection(-1)))}else t<1?(l=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(l):a.note.setXShift(l)):s.note.hasStem()?(s.stemDirection=-s.note.getStemDirection(),s.note.setStemDirection(s.stemDirection)):a.note.hasStem()&&(a.stemDirection=-a.note.getStemDirection(),a.note.setStemDirection(a.stemDirection))}return e.right_shift+=l,!0}if(!n)throw new x("InvalidState","noteM not defined.");if(n.isrest&&!s.isrest&&!a.isrest&&(s.minLine<=n.maxLine||n.minLine<=a.maxLine)){return n.maxLine-n.minLinet.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),b=c.getY();n=Math.min(b,n),a=Math.max(b,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:b,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=b?b:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=b?b:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=l,s=void 0!==h&&e<=h;_(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=d,s=void 0!==c&&e>=c;_(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends W{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===zt.STRICT||this.mode===zt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=b(e),s=i?Yt:Ht;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new De,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;g(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,b=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(b+=this.y_shift,this.delayed){let t=0;const i=d-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,b),this.accidentalLower&&(this.accidentalLower.render(t,d,b),b-=this.accidentalLower.getMetrics().height,b-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(b+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(b=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,b),this.accidentalUpper&&(b-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,b)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,s=u().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,i.width=t*s,i.height=e*s,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":k.NORMAL,"font-style":D.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),b=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const m=!a;d=this.round(d),b=this.round(b),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+m} ${d} ${b}`,this.pen.x=d,this.pen.y=b}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,b=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const m=c+Math.sin(h)*e;c=r<0?Math.max(n,m):Math.min(n,m),b?t.lineTo(l,c):t.moveTo(l,c),b=!b}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class le extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=null,m=null;for(let t=0;tl?e:l):r===tt.Position.RIGHT&&(b.setXShift(h),e+=x,c=e>c?e:c),d=g,m=a}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-le.metrics.stemPadding),o+=this.radius+le.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+le.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+le.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}le.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.BOLD,style:D.NORMAL};class ce extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(b(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0}let h=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[At.CATEGORY]:0,[ge.CATEGORY]:1,[_e.CATEGORY]:2,[ve.CATEGORY]:3},Be={[ve.CATEGORY]:0,[_e.CATEGORY]:1,[At.CATEGORY]:2,[ge.CATEGORY]:3};class Ee extends W{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new At(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new ue(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Bt;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,ge.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new ge(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Be),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Bt.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new At(Bt.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:k.NORMAL,style:D.NORMAL};class Pe extends W{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,b=o+.2*a,m=n+1.1*s,g=c-.135*a,_=m,x=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,B=f,E=b;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,b,m,g,l,c),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,B,E,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new me);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?We.applyAndGetBeams(a):[];return(new De).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?We.applyAndGetBeams(h):[];(new De).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(b(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=ke(t,e.line,n,!1);else if(n>0&&nDe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,b=n/o.length,m=w(o.map((t=>Math.pow(t-b,2)))),g=Math.pow(m/o.length,.5)/b,_=Math.max(g,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=De.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new B(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=De.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new B(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:b}=this.formatterOptions,m=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),b=[];if(Object.keys(n).forEach((t=>{i[t]&&b.push(t)})),b.length>0){let a=0,o=1/0,h=0;if(b.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let E=y;const C=u(E);let P=f(C);if(1===a.length)return 0;const k=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+A1;)E-=P-M,A=D(E),N=A-(v-T),P=f(u(E)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){De.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;De.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class Ne extends W{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=V.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ne.LOCATION_TOP),De.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=Ne.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+Ne.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Re="R",Oe="B";class We extends W{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new B(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new B(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&b(t[0]))n=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(He(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}ze.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const b=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),b.push(e)}else b.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(b),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new ze(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{s=!s;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{e=!e;const s=i.checkStave(),n=i.getAbsoluteX(),a=s.getYForBottomText(this.line+3),o=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-r/2,a)):oi("pedal_depress",t,n,a,o):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-r/2,a)):oi("pedal_release",t,n,a,o)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:k.BOLD,style:D.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends W{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,b,m;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(b=n+(o-n)*(1-l),m=a+(r-a)*(1-l)):(b=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(b,m),t.lineTo(c,d),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-n),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(x=g+this.render_options.arrowhead_angle,p=n+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=n+Math.cos(u)*_,S=a+Math.sin(u)*_,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},W.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class bi extends W{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new De(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new gi(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Nt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new bt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new le(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new me}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new De(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ne(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new bi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Di=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Di(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ai.Accidental=st,Ai.Annotation=bt,Ai.Articulation=ft,Ai.Barline=At,Ai.BarNote=Nt,Ai.Beam=We,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Zt,Ai.ChordSymbol=Rt,Ai.Clef=ge,Ai.ClefNote=Le,Ai.Crescendo=Ie,Ai.Curve=Ue,Ai.Dot=Ot,Ai.EasyScore=Qe,Ai.Element=W,Ai.Factory=vi,Ai.Font=F,Ai.Formatter=De,Ai.Fraction=B,Ai.FretHandFinger=Wt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Xt,Ai.GraceTabNote=wi,Ai.KeyManager=Bi,Ai.KeySignature=_e,Ai.KeySigNote=si,Ai.Modifier=tt,Ai.ModifierContext=me,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=vt,Ai.NoteHead=Lt,Ai.NoteSubGroup=Vt,Ai.Ornament=$t,Ai.Parenthesis=Jt,Ai.Parser=ze,Ai.PedalMarking=ri,Ai.Registry=O,Ai.RenderContext=yt,Ai.Renderer=he,Ai.RepeatNote=li,Ai.Repetition=xe,Ai.Stave=Ee,Ai.StaveConnector=Pe,Ai.StaveHairpin=Ei,Ai.StaveLine=di,Ai.StaveModifier=Dt,Ai.StaveNote=Ut,Ai.StaveTempo=pe,Ai.StaveText=ye,Ai.StaveTie=Yt,Ai.Stem=nt,Ai.StringNumber=le,Ai.Stroke=ce,Ai.SVGContext=se,Ai.System=bi,Ai.TabNote=mi,Ai.TabSlide=Ci,Ai.TabStave=gi,Ai.TabTie=Ht,Ai.TextBracket=ui,Ai.TextDynamics=fi,Ai.TextFormatter=lt,Ai.TextNote=fe,Ai.TickContext=Kt,Ai.TimeSignature=ve,Ai.TimeSigNote=yi,Ai.Tremolo=Pi,Ai.Tuning=ki,Ai.Tuplet=Ne,Ai.Vibrato=de,Ai.VibratoBracket=Si,Ai.Voice=jt,Ai.Volta=Se,Ai.AnnotationHorizontalJustify=ct,Ai.AnnotationVerticalJustify=dt,Ai.ChordSymbolHorizontalJustify=Et,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=kt,Ai.CurvePosition=Ge,Ai.FontWeight=k,Ai.FontStyle=D,Ai.ModifierPosition=J,Ai.RendererBackends=ne,Ai.RendererLineEndType=ae,Ai.BarlineType=Bt,Ai.StaveModifierPosition=wt,Ai.VoltaType=re,Ai.TextBracketPosition=xi,Ai.TextJustification=oe,Ai.VoiceMode=zt;const Ni={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},Mi={name:"VexFlowCustom",smufl:!1,glyphs:{}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:387,y_min:-87,y_max:139,ha:226,o:"m 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z"},bracketBottom:{x_min:0,x_max:387,y_min:-139,y_max:87,ha:226,o:"m 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z"},barlineTick:{x_min:-55,x_max:55,y_min:-131,y_max:131,ha:262,o:"m 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z"},breathMarkTick:{x_min:-142,x_max:256,y_min:0,y_max:403,ha:403,o:"m 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z"},segno:{x_min:-228,x_max:228,y_min:-329,y_max:329,ha:657,o:"m -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z"},coda:{x_min:-215,x_max:215,y_min:-264,y_max:264,ha:529,o:"m -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z"},gClef:{x_min:0,x_max:586,y_min:-594,y_max:1017,ha:1611,o:"m 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z"},cClef:{x_min:0,x_max:604,y_min:-477,y_max:477,ha:955,o:"m 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z"},fClef:{x_min:0,x_max:622,y_min:-512,y_max:238,ha:750,o:"m 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z"},unpitchedPercussionClef1:{x_min:160,x_max:481,y_min:-235,y_max:235,ha:470,o:"m 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z"},"6stringTabClef":{x_min:0,x_max:471,y_min:-691,y_max:707,ha:1398,o:"m 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z"},timeSig0:{x_min:0,x_max:357,y_min:0,y_max:457,ha:457,o:"m 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z"},timeSig1:{x_min:0,x_max:239,y_min:0,y_max:457,ha:457,o:"m 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z"},timeSig2:{x_min:0,x_max:317,y_min:0,y_max:457,ha:457,o:"m 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z"},timeSig3:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z"},timeSig4:{x_min:0,x_max:325,y_min:0,y_max:457,ha:457,o:"m 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z"},timeSig5:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z"},timeSig6:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSig7:{x_min:0,x_max:306,y_min:0,y_max:457,ha:457,o:"m 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z"},timeSig8:{x_min:0,x_max:338,y_min:0,y_max:457,ha:457,o:"m 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z"},timeSig9:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSigCommon:{x_min:0,x_max:385,y_min:-219,y_max:219,ha:438,o:"m 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z"},timeSigCutCommon:{x_min:0,x_max:385,y_min:-371,y_max:371,ha:741,o:"m 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z"},timeSigPlus:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigPlusSmall:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigMinus:{x_min:0,x_max:221,y_min:214,y_max:256,ha:43,o:"m 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z"},timeSigParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensRightSmall:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},timeSigParensLeftSmall:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},noteheadDoubleWhole:{x_min:0,x_max:623,y_min:-164,y_max:164,ha:328,o:"m 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z"},noteheadWhole:{x_min:0,x_max:427,y_min:-127,y_max:127,ha:253,o:"m 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z"},noteheadHalf:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z"},noteheadBlack:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z"},noteheadXWhole:{x_min:0,x_max:414,y_min:-125,y_max:125,ha:249,o:"m 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z"},noteheadXHalf:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:250,o:"m 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z"},noteheadXBlack:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:249,o:"m 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z"},noteheadCircleX:{x_min:0,x_max:336,y_min:-168,y_max:168,ha:335,o:"m 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z"},noteheadTriangleUpWhole:{x_min:0,x_max:435,y_min:-140,y_max:140,ha:280,o:"m 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z"},noteheadTriangleUpHalf:{x_min:0,x_max:303,y_min:-140,y_max:140,ha:280,o:"m 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:302,y_min:-140,y_max:140,ha:279,o:"m 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z"},noteheadDiamondWhole:{x_min:0,x_max:435,y_min:-130,y_max:130,ha:260,o:"m 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z"},noteheadDiamondHalf:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z"},noteheadDiamondBlack:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z"},augmentationDot:{x_min:-59,x_max:59,y_min:-59,y_max:59,ha:118,o:"m -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z"},tremolo1:{x_min:-143,x_max:297,y_min:-550,y_max:-237,ha:313,o:"m 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z"},flag8thUp:{x_min:-16,x_max:220,y_min:-700,y_max:-4,ha:696,o:"m -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z"},flag8thDown:{x_min:-14,x_max:255,y_min:4,y_max:700,ha:697,o:"m 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z"},flag16thUp:{x_min:-16,x_max:220,y_min:-796,y_max:-4,ha:793,o:"m -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z"},flag16thDown:{x_min:-14,x_max:251,y_min:4,y_max:700,ha:697,o:"m 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z"},flag32ndUp:{x_min:-16,x_max:219,y_min:-1039,y_max:-4,ha:1035,o:"m -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z"},flag32ndDown:{x_min:-14,x_max:253,y_min:4,y_max:935,ha:931,o:"m 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z"},flag64thUp:{x_min:-16,x_max:219,y_min:-1159,y_max:-4,ha:1156,o:"m -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z"},flag64thDown:{x_min:-14,x_max:255,y_min:3,y_max:1053,ha:1049,o:"m 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z"},flag128thUp:{x_min:-16,x_max:217,y_min:-1398,y_max:-4,ha:1395,o:"m -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z"},flag128thDown:{x_min:-14,x_max:254,y_min:4,y_max:1288,ha:1284,o:"m 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z"},accidentalFlat:{x_min:-14,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalNatural:{x_min:0,x_max:166,y_min:-314,y_max:314,ha:627,o:"m 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z"},accidentalSharp:{x_min:0,x_max:225,y_min:-364,y_max:364,ha:729,o:"m 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z"},accidentalDoubleSharp:{x_min:0,x_max:255,y_min:-127,y_max:127,ha:255,o:"m 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z"},accidentalDoubleFlat:{x_min:-14,x_max:334,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z"},accidentalParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},accidentalParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:188,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:419,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:315,y_min:-368,y_max:368,ha:735,o:"m 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z"},accidentalBuyukMucennebFlat:{x_min:-117,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalBakiyeFlat:{x_min:-121,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalKomaSharp:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:176,y_min:-351,y_max:351,ha:702,o:"m 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z"},articAccentAbove:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articAccentBelow:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articTenutoAbove:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articTenutoBelow:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articStaccatoAbove:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatoBelow:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatissimoAbove:{x_min:-50,x_max:50,y_min:0,y_max:173,ha:173,o:"m -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z"},articStaccatissimoBelow:{x_min:-50,x_max:50,y_min:-173,y_max:0,ha:173,o:"m -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z"},articMarcatoAbove:{x_min:-107,x_max:107,y_min:-240,y_max:18,ha:259,o:"m -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z"},articMarcatoBelow:{x_min:-107,x_max:107,y_min:-18,y_max:241,ha:259,o:"m -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z"},fermataAbove:{x_min:-305,x_max:305,y_min:0,y_max:332,ha:332,o:"m -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataBelow:{x_min:-305,x_max:305,y_min:-332,y_max:0,ha:332,o:"m -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:342,ha:342,o:"m -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataLongBelow:{x_min:-269,x_max:269,y_min:-342,y_max:0,ha:342,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:412,ha:412,o:"m -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataVeryLongBelow:{x_min:-269,x_max:269,y_min:-412,y_max:0,ha:412,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryShortAbove:{x_min:-330,x_max:330,y_min:0,y_max:536,ha:536,o:"m -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z"},fermataVeryShortBelow:{x_min:-330,x_max:330,y_min:-536,y_max:0,ha:536,o:"m 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z"},fermataShortAbove:{x_min:-269,x_max:269,y_min:0,y_max:441,ha:441,o:"m -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataShortBelow:{x_min:-269,x_max:269,y_min:-441,y_max:0,ha:441,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},breathMarkComma:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},breathMarkUpbow:{x_min:-118,x_max:118,y_min:0,y_max:385,ha:385,o:"m -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z"},caesura:{x_min:0,x_max:430,y_min:-190,y_max:284,ha:474,o:"m 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z"},caesuraCurved:{x_min:0,x_max:348,y_min:-195,y_max:292,ha:486,o:"m 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z"},restMaxima:{x_min:0,x_max:801,y_min:-235,y_max:235,ha:470,o:"m 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z"},restDoubleWhole:{x_min:0,x_max:267,y_min:0,y_max:235,ha:235,o:"m 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z"},restWhole:{x_min:0,x_max:310,y_min:-118,y_max:0,ha:118,o:"m 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z"},restWholeLegerLine:{x_min:0,x_max:509,y_min:-118,y_max:11,ha:128,o:"m 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z"},restHalf:{x_min:0,x_max:310,y_min:0,y_max:118,ha:118,o:"m 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:509,y_min:-11,y_max:118,ha:128,o:"m 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z"},restQuarter:{x_min:0,x_max:208,y_min:-343,y_max:343,ha:686,o:"m 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z"},rest8th:{x_min:0,x_max:242,y_min:-185,y_max:206,ha:391,o:"m 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z"},rest16th:{x_min:0,x_max:312,y_min:-417,y_max:206,ha:623,o:"m 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z"},rest32nd:{x_min:0,x_max:381,y_min:-417,y_max:438,ha:854,o:"m 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z"},rest64th:{x_min:0,x_max:451,y_min:-648,y_max:438,ha:1086,o:"m 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z"},rest128th:{x_min:0,x_max:520,y_min:-648,y_max:669,ha:1317,o:"m 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z"},dynamicPiano:{x_min:-36,x_max:355,y_min:-168,y_max:261,ha:428,o:"m 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z"},dynamicMezzo:{x_min:32,x_max:463,y_min:-18,y_max:256,ha:274,o:"m 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z"},dynamicForte:{x_min:-81,x_max:413,y_min:-171,y_max:390,ha:561,o:"m 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z"},dynamicRinforzando:{x_min:55,x_max:336,y_min:0,y_max:258,ha:258,o:"m 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z"},dynamicSforzando:{x_min:49,x_max:262,y_min:-21,y_max:254,ha:274,o:"m 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z"},dynamicZ:{x_min:22,x_max:291,y_min:2,y_max:235,ha:233,o:"m 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z"},ornamentTrill:{x_min:-234,x_max:234,y_min:0,y_max:354,ha:354,o:"m -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z"},ornamentTurn:{x_min:-292,x_max:292,y_min:-134,y_max:134,ha:269,o:"m -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z"},ornamentTurnSlash:{x_min:-292,x_max:292,y_min:-189,y_max:189,ha:378,o:"m -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z"},ornamentMordent:{x_min:-278,x_max:278,y_min:-202,y_max:186,ha:388,o:"m -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z"},ornamentShortTrill:{x_min:-278,x_max:278,y_min:-119,y_max:119,ha:238,o:"m -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z"},ornamentTremblement:{x_min:-394,x_max:394,y_min:-119,y_max:119,ha:238,o:"m -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z"},ornamentPrecompAppoggTrill:{x_min:-394,x_max:394,y_min:-119,y_max:240,ha:359,o:"m -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-407,x_max:407,y_min:-229,y_max:119,ha:348,o:"m -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z"},ornamentPrecompSlideTrillBach:{x_min:-407,x_max:407,y_min:-229,y_max:186,ha:415,o:"m 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-407,x_max:407,y_min:-119,y_max:229,ha:348,o:"m 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-413,x_max:413,y_min:-119,y_max:222,ha:341,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-413,x_max:413,y_min:-202,y_max:222,ha:424,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompTrillLowerSuffix:{x_min:-413,x_max:413,y_min:-222,y_max:119,ha:341,o:"m -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z"},stringsDownBow:{x_min:-158,x_max:158,y_min:0,y_max:331,ha:331,o:"m -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z"},stringsUpBow:{x_min:-103,x_max:103,y_min:0,y_max:260,ha:260,o:"m -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z"},stringsHarmonic:{x_min:-77,x_max:77,y_min:-77,y_max:77,ha:154,o:"m -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z"},pluckedSnapPizzicatoAbove:{x_min:-103,x_max:103,y_min:-103,y_max:192,ha:296,o:"m -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z"},pluckedSnapPizzicatoBelow:{x_min:-103,x_max:103,y_min:-192,y_max:103,ha:296,o:"m 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z"},pluckedLeftHandPizzicato:{x_min:-146,x_max:146,y_min:-148,y_max:148,ha:296,o:"m -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z"},keyboardPedalPed:{x_min:0,x_max:735,y_min:-1,y_max:470,ha:471,o:"m 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z"},keyboardPedalUp:{x_min:0,x_max:409,y_min:61,y_max:470,ha:409,o:"m 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z"},pictChokeCymbal:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2022-12-24T06:31:40.861Z"},Ri={name:"Gonville",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:0,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:250},csymParensRightTall:{leftSideBearing:-40,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:50,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:40,advanceWidth:250,yOffset:-402},accidentalFlat:{leftSideBearing:-50,advanceWidth:208,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:20,treble:{line:-1.2,shiftX:11}},"8vb":{point:20,treble:{line:6.3,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:18,treble:{line:-.4,shiftX:8}},"8vb":{point:18,treble:{line:5.8,shiftX:6},bass:{line:3.5,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:17,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:24,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-9,stemUpYOffset:24,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:3,yOffset:-4,stemUpYOffset:10,reportedWidth:28},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:9,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:40}},digits:{point:40,tupletPoint:28},tremolo:{default:{point:25,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:9,offsetXStemDown:-.5},grace:{point:15,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:6.5,offsetXStemDown:-.5}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:0}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadBlack:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{flag:{shiftX:-.08,flag8thDown:{shiftX:-.16},flag16thDown:{shiftX:-.16},flag32ndDown:{shiftX:-.16,shiftY:9},flag64thDown:{shiftX:-.16,shiftY:13},flag128thDown:{shiftX:-.16,shiftY:22},flag32ndUp:{shiftY:-9},flag64thUp:{shiftY:-13},flag128thUp:{shiftY:-22}},clef_default:{point:40,"6stringTabClef":{point:40,shiftY:-5.5}},clef_small:{point:32},clefNote_default:{point:40},clefNote_small:{point:32},textNote:{point:40,default:{},ornamentTrill:{shiftX:-5,shiftY:4}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.95}},ornament:{brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},tremolo:{default:{shiftY:-10},grace:{shiftY:-5}}}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ii={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Gi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Ui{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 387,\n y_min: -87,\n y_max: 139,\n ha: 226,\n o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 387,\n y_min: -139,\n y_max: 87,\n ha: 226,\n o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z',\n },\n barlineTick: {\n x_min: -55,\n x_max: 55,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z',\n },\n breathMarkTick: {\n x_min: -142,\n x_max: 256,\n y_min: 0,\n y_max: 403,\n ha: 403,\n o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z',\n },\n segno: {\n x_min: -228,\n x_max: 228,\n y_min: -329,\n y_max: 329,\n ha: 657,\n o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z',\n },\n coda: {\n x_min: -215,\n x_max: 215,\n y_min: -264,\n y_max: 264,\n ha: 529,\n o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z',\n },\n gClef: {\n x_min: 0,\n x_max: 586,\n y_min: -594,\n y_max: 1017,\n ha: 1611,\n o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z',\n },\n cClef: {\n x_min: 0,\n x_max: 604,\n y_min: -477,\n y_max: 477,\n ha: 955,\n o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z',\n },\n fClef: {\n x_min: 0,\n x_max: 622,\n y_min: -512,\n y_max: 238,\n ha: 750,\n o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z',\n },\n unpitchedPercussionClef1: {\n x_min: 160,\n x_max: 481,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 471,\n y_min: -691,\n y_max: 707,\n ha: 1398,\n o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 357,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 239,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 317,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 325,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 338,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -219,\n y_max: 219,\n ha: 438,\n o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -371,\n y_max: 371,\n ha: 741,\n o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 221,\n y_min: 214,\n y_max: 256,\n ha: 43,\n o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z',\n },\n timeSigParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensRightSmall: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n timeSigParensLeftSmall: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 623,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 427,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 414,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 336,\n y_min: -168,\n y_max: 168,\n ha: 335,\n o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 302,\n y_min: -140,\n y_max: 140,\n ha: 279,\n o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z',\n },\n augmentationDot: {\n x_min: -59,\n x_max: 59,\n y_min: -59,\n y_max: 59,\n ha: 118,\n o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z',\n },\n tremolo1: {\n x_min: -143,\n x_max: 297,\n y_min: -550,\n y_max: -237,\n ha: 313,\n o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z',\n },\n flag8thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -700,\n y_max: -4,\n ha: 696,\n o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z',\n },\n flag8thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z',\n },\n flag16thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -796,\n y_max: -4,\n ha: 793,\n o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z',\n },\n flag16thDown: {\n x_min: -14,\n x_max: 251,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z',\n },\n flag32ndUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1039,\n y_max: -4,\n ha: 1035,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z',\n },\n flag32ndDown: {\n x_min: -14,\n x_max: 253,\n y_min: 4,\n y_max: 935,\n ha: 931,\n o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z',\n },\n flag64thUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1159,\n y_max: -4,\n ha: 1156,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z',\n },\n flag64thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 3,\n y_max: 1053,\n ha: 1049,\n o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z',\n },\n flag128thUp: {\n x_min: -16,\n x_max: 217,\n y_min: -1398,\n y_max: -4,\n ha: 1395,\n o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z',\n },\n flag128thDown: {\n x_min: -14,\n x_max: 254,\n y_min: 4,\n y_max: 1288,\n ha: 1284,\n o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z',\n },\n accidentalFlat: {\n x_min: -14,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 166,\n y_min: -314,\n y_max: 314,\n ha: 627,\n o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 225,\n y_min: -364,\n y_max: 364,\n ha: 729,\n o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 255,\n y_min: -127,\n y_max: 127,\n ha: 255,\n o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z',\n },\n accidentalDoubleFlat: {\n x_min: -14,\n x_max: 334,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z',\n },\n accidentalParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n accidentalParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 188,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 419,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 315,\n y_min: -368,\n y_max: 368,\n ha: 735,\n o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -117,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalBakiyeFlat: {\n x_min: -121,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 176,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z',\n },\n articAccentAbove: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articAccentBelow: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articTenutoAbove: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articTenutoBelow: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articStaccatoAbove: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatoBelow: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatissimoAbove: {\n x_min: -50,\n x_max: 50,\n y_min: 0,\n y_max: 173,\n ha: 173,\n o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z',\n },\n articStaccatissimoBelow: {\n x_min: -50,\n x_max: 50,\n y_min: -173,\n y_max: 0,\n ha: 173,\n o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z',\n },\n articMarcatoAbove: {\n x_min: -107,\n x_max: 107,\n y_min: -240,\n y_max: 18,\n ha: 259,\n o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z',\n },\n articMarcatoBelow: {\n x_min: -107,\n x_max: 107,\n y_min: -18,\n y_max: 241,\n ha: 259,\n o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z',\n },\n fermataAbove: {\n x_min: -305,\n x_max: 305,\n y_min: 0,\n y_max: 332,\n ha: 332,\n o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataBelow: {\n x_min: -305,\n x_max: 305,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 342,\n ha: 342,\n o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -342,\n y_max: 0,\n ha: 342,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 412,\n ha: 412,\n o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataVeryLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -412,\n y_max: 0,\n ha: 412,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -330,\n x_max: 330,\n y_min: 0,\n y_max: 536,\n ha: 536,\n o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z',\n },\n fermataVeryShortBelow: {\n x_min: -330,\n x_max: 330,\n y_min: -536,\n y_max: 0,\n ha: 536,\n o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z',\n },\n fermataShortAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 441,\n ha: 441,\n o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataShortBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -441,\n y_max: 0,\n ha: 441,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n breathMarkUpbow: {\n x_min: -118,\n x_max: 118,\n y_min: 0,\n y_max: 385,\n ha: 385,\n o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z',\n },\n caesura: {\n x_min: 0,\n x_max: 430,\n y_min: -190,\n y_max: 284,\n ha: 474,\n o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 348,\n y_min: -195,\n y_max: 292,\n ha: 486,\n o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 801,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 267,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 310,\n y_min: -118,\n y_max: 0,\n ha: 118,\n o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -118,\n y_max: 11,\n ha: 128,\n o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 310,\n y_min: 0,\n y_max: 118,\n ha: 118,\n o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -11,\n y_max: 118,\n ha: 128,\n o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 208,\n y_min: -343,\n y_max: 343,\n ha: 686,\n o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 242,\n y_min: -185,\n y_max: 206,\n ha: 391,\n o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 312,\n y_min: -417,\n y_max: 206,\n ha: 623,\n o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 381,\n y_min: -417,\n y_max: 438,\n ha: 854,\n o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 451,\n y_min: -648,\n y_max: 438,\n ha: 1086,\n o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 520,\n y_min: -648,\n y_max: 669,\n ha: 1317,\n o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z',\n },\n dynamicPiano: {\n x_min: -36,\n x_max: 355,\n y_min: -168,\n y_max: 261,\n ha: 428,\n o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z',\n },\n dynamicMezzo: {\n x_min: 32,\n x_max: 463,\n y_min: -18,\n y_max: 256,\n ha: 274,\n o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z',\n },\n dynamicForte: {\n x_min: -81,\n x_max: 413,\n y_min: -171,\n y_max: 390,\n ha: 561,\n o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z',\n },\n dynamicRinforzando: {\n x_min: 55,\n x_max: 336,\n y_min: 0,\n y_max: 258,\n ha: 258,\n o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z',\n },\n dynamicSforzando: {\n x_min: 49,\n x_max: 262,\n y_min: -21,\n y_max: 254,\n ha: 274,\n o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z',\n },\n dynamicZ: {\n x_min: 22,\n x_max: 291,\n y_min: 2,\n y_max: 235,\n ha: 233,\n o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z',\n },\n ornamentTrill: {\n x_min: -234,\n x_max: 234,\n y_min: 0,\n y_max: 354,\n ha: 354,\n o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z',\n },\n ornamentTurn: {\n x_min: -292,\n x_max: 292,\n y_min: -134,\n y_max: 134,\n ha: 269,\n o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z',\n },\n ornamentTurnSlash: {\n x_min: -292,\n x_max: 292,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z',\n },\n ornamentMordent: {\n x_min: -278,\n x_max: 278,\n y_min: -202,\n y_max: 186,\n ha: 388,\n o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z',\n },\n ornamentShortTrill: {\n x_min: -278,\n x_max: 278,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z',\n },\n ornamentTremblement: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 240,\n ha: 359,\n o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 119,\n ha: 348,\n o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 186,\n ha: 415,\n o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -407,\n x_max: 407,\n y_min: -119,\n y_max: 229,\n ha: 348,\n o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -413,\n x_max: 413,\n y_min: -119,\n y_max: 222,\n ha: 341,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -413,\n x_max: 413,\n y_min: -202,\n y_max: 222,\n ha: 424,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -413,\n x_max: 413,\n y_min: -222,\n y_max: 119,\n ha: 341,\n o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z',\n },\n stringsDownBow: {\n x_min: -158,\n x_max: 158,\n y_min: 0,\n y_max: 331,\n ha: 331,\n o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z',\n },\n stringsUpBow: {\n x_min: -103,\n x_max: 103,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z',\n },\n stringsHarmonic: {\n x_min: -77,\n x_max: 77,\n y_min: -77,\n y_max: 77,\n ha: 154,\n o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -103,\n x_max: 103,\n y_min: -103,\n y_max: 192,\n ha: 296,\n o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -103,\n x_max: 103,\n y_min: -192,\n y_max: 103,\n ha: 296,\n o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -146,\n x_max: 146,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 735,\n y_min: -1,\n y_max: 470,\n ha: 471,\n o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 409,\n y_min: 61,\n y_max: 470,\n ha: 409,\n o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2022-12-24T06:31:40.861Z',\n};\n","/**\n * The Gonville font was created by Simon Tatham.\n * https://www.chiark.greenend.org.uk/~sgtatham/gonville/\n */\nexport const GonvilleMetrics = {\n name: 'Gonville',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: 0,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: -40,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 40,\n advanceWidth: 250,\n yOffset: -402,\n },\n accidentalFlat: {\n leftSideBearing: -50,\n advanceWidth: 208,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n '8vb': {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 17,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -9,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 3,\n yOffset: -4,\n stemUpYOffset: 10,\n reportedWidth: 28,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 9,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 40,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n // articulation: {\n // },\n tremolo: {\n default: {\n point: 25,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 9,\n offsetXStemDown: -0.5,\n },\n grace: {\n point: 15,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 6.5,\n offsetXStemDown: -0.5,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 0,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n glyphs: {\n flag: {\n shiftX: -0.08,\n flag8thDown: {\n shiftX: -0.16,\n },\n flag16thDown: {\n shiftX: -0.16,\n },\n flag32ndDown: {\n shiftX: -0.16,\n shiftY: 9,\n },\n flag64thDown: {\n shiftX: -0.16,\n shiftY: 13,\n },\n flag128thDown: {\n shiftX: -0.16,\n shiftY: 22,\n },\n flag32ndUp: {\n shiftY: -9,\n },\n flag64thUp: {\n shiftY: -13,\n },\n flag128thUp: {\n shiftY: -22,\n },\n },\n clef_default: {\n point: 40,\n '6stringTabClef': {\n point: 40,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 32,\n },\n clefNote_default: {\n point: 40,\n },\n clefNote_small: {\n point: 32,\n },\n textNote: {\n point: 40,\n default: {},\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.95,\n },\n },\n ornament: {\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n tremolo: {\n default: {\n shiftY: -10,\n },\n grace: {\n shiftY: -5,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nimport { GonvilleMetrics } from './gonville_metrics';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, GonvilleMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadGonville } from '../src/fonts/load_gonville';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadGonville();\nloadCustom();\nFlow.setMusicFont('Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CustomFont","noteheadSquareWhite","noteheadSquareBlack","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","CustomMetrics","smufl","GonvilleSmuflFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleX","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalKomaSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","arrowheadBlackUp","arrowheadBlackDown","generatedOn","GonvilleMetrics","endPaddingMax","endPaddingMin","unalignedNotePadding","csymDiminished","csymHalfDiminished","csymAugmented","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","csymMajorSeventh","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","up","down","digits","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-leland.js b/build/cjs/vexflow-leland.js deleted file mode 100644 index 3feefef95d..0000000000 --- a/build/cjs/vexflow-leland.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>mt,AnnotationHorizontalJustify:()=>ct,AnnotationVerticalJustify:()=>dt,Articulation:()=>ft,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Re,BarNote:()=>Nt,Barline:()=>At,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>b,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Et,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>_e,ClefNote:()=>Le,Crescendo:()=>Ie,Curve:()=>Ue,CurvePosition:()=>Ge,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>vi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>D,FontWeight:()=>k,Formatter:()=>De,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>si,KeySignature:()=>be,Modifier:()=>tt,ModifierContext:()=>ge,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>ze,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>li,Repetition:()=>xe,RuntimeError:()=>x,SVGContext:()=>se,Stave:()=>Ee,StaveConnector:()=>Pe,StaveHairpin:()=>Ei,StaveLine:()=>di,StaveModifier:()=>Dt,StaveModifierPosition:()=>wt,StaveNote:()=>Ut,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Yt,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>le,Stroke:()=>ce,SymbolModifiers:()=>kt,SymbolTypes:()=>Pt,System:()=>mi,TabNote:()=>gi,TabSlide:()=>Ci,TabStave:()=>_i,TabTie:()=>Ht,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>lt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>ki,Tuplet:()=>Ne,TupletLocation:()=>Ae,Vex:()=>Ui,Vibrato:()=>de,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>zt,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>l,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>c,isRenderContext:()=>d,isStaveNote:()=>m,isStemmableNote:()=>g,isTabNote:()=>_,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,b.Accidental),a=t=>s(t,b.Annotation),o=t=>s(t,b.Barline),r=t=>s(t,b.Dot),h=t=>s(t,b.GraceNote),l=t=>s(t,b.GraceNoteGroup),c=t=>s(t,b.Note),d=t=>s(t,b.RenderContext),m=t=>s(t,b.StaveNote),g=t=>s(t,b.StemmableNote),_=t=>s(t,b.TabNote);var b;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(b||(b={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return b.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function E(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],l=[i,s],c=[n,a],d=[o,r];let m;this.addPoint(h[0],h[1]),this.addPoint(d[0],d[1]);const g=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*l[e]+3*(1-t)*Math.pow(t,2)*c[e]+Math.pow(t,3)*d[e];for(m=0;m<=1;m++){const t=6*h[m]-12*l[m]+6*c[m],e=-3*h[m]+9*l[m]-9*c[m]+3*d[m],i=3*l[m]-3*h[m];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===D.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return b.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.NORMAL,style:D.NORMAL};const L=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},G={w:"1",h:"2",q:"4",b:"256"},U={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},H={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},z={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new x("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=H[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let l=(7*h-28+r.index)/2;l+=V.clefProperties(e).line_shift;let c=0;l<=0&&2*l%2==0&&(c=1),l>=6&&2*l%2==0&&(c=-1);const d=void 0!==r.int_val?12*h+r.int_val:void 0,m=r.code,g=r.shift_right;let _={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();_={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:l,int_value:d,accidental:r.accidental,code:m,stroke:c,shift_right:g,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return z[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=U[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=z,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const c=[];let d,m=0;for(let t=0;tm?e.shift:m,d=e.line}let g=0;for(let t=0;tc[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let l,d,m=this.checkCollision(c[i],c[s])?"a":"b";switch(h){case 3:"a"===m&&.5===o(1,2)&&.5!==o(0,1)&&(m="second_on_bottom");break;case 4:r([0,2],[1,3])&&(m="spaced_out_tetrachord");break;case 5:"b"===m&&r([1,3])&&(m="spaced_out_pentachord",r([0,2],[2,4])&&(m="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(m="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(m="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ed?g:d}else for(l=t;l<=s;l++)d=V.accidentalColumnsTable[h][m][l-t],c[l].column=d,g=g>d?g:d;t=s}const _=[],b=[];for(let t=0;t<=g;t++)_[t]=0,b[t]=0;_[0]=m+n,b[0]=m+n,c.forEach((t=>{t.width>_[t.column]&&(_[t.column]=t.width)}));for(let t=1;t<_.length;t++)b[t]=_[t]+b[t-1];const x=b[b.length-1];let u=0;c.forEach((t=>{let e=0;const i=u+t.numAcc;for(;u0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!m(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),l=t.split("/")[1],c=h.accidental||"n",d=h.root+c;r[h.root+l]||(r[h.root+l]=o[h.root]);const m=r[h.root+l]===d,g=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==c&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!m||m&&g){r[h.root+l]=d;const n=new st(c);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{l(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,l=this.checkContext(),c=this.checkAttachedNote();this.setRendered();const d=c.getModifierStartXY(e,i);let m=d.x+n;const g=d.y+a;if(it("Rendering: ",t,m,g),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(l,m,g),m-=e.getMetrics().width,m-=h,m-=this.accidental.parenRightPaddingAdjustment,o.render(l,m,g),m-=o.getMetrics().width,m-=r,t.render(l,m,g)}else o.render(l,m,g)}}st.DEBUG=!1;class nt extends W{static get CATEGORY(){return b.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){lt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class lt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new lt(Object.values(ht)[0]);else if(1===e.length)s=new lt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new lt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new lt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?k.BOLD:k.NORMAL,s=this.italic?D.ITALIC:D.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,d&&i===nt.DOWN&&(h=Math.max(h,l.topY+o+c*this.text_line))}else if(this.verticalJustification===dt.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(m.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===dt.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,d&&i===nt.UP&&(c=l.topY=1}function ut(t,e){return xt(t,e)?e===gt?Math.ceil:Math.floor:Math.round}const pt=t=>m(t)||h(t);class ft extends tt{static get CATEGORY(){return b.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>bt(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(g(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===gt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,gt);const l=i+e.top_text_line+.5;!t.articulation.between_lines&&lt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=gt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=gt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===gt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),l=_(e),{x:c}=e.getModifierStartXY(s,i),d=!o||l,m=function(t,e){const i=e===gt&&t.getStemDirection()===nt.UP||e===_t&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),g=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let b={[gt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+m)*h;return d?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[_t]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+m)*h;return d?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!l){const t=s===gt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-b)/h+Number(a),l=function(t,e,i,s){const n=bt(ut(e,i),e);if(t&&xt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);xt(l,s)&&n.setOrigin(.5,.5),b+=Math.abs(l-r)*h*t+g*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${c}, y: ${b})`),n.render(t,c,b)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return b.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends W{static get CATEGORY(){return b.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=_.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(b.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Et,Ct,Pt,kt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Dt extends W{static get CATEGORY(){return b.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class At extends Dt{static get CATEGORY(){return b.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let l=n+h+1;s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill(),l+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,l,2,0,2*Math.PI,!1),s.fill()}}class Nt extends vt{static get CATEGORY(){return b.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Nt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new At(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Nt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return b.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},c=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},d=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},m=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let g,_=0,b=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){m(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=l.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(x=!0,e.xShift=e.xShift+(n-s),s=n,n=0,l.setEnableKerning(!1)),i||a||(n=0),e.vAlign=x,s+=e.width,_=s}if(l.updateKerningAdjustments(),l.updateOverBarAdjustments(),l.getVertical()===Ct.TOP?(l.setTextLine(e.top_text_line),e.top_text_line+=b):(l.setTextLine(e.text_line+1),e.text_line+=b+1),l.getReportWidth()&&g(m)){const t=m.getGlyphProps().getWidth();l.getHorizontal()===Et.LEFT?(r=Math.max(t,r),a=Math.max(a,_)+Rt.minPadding):l.getHorizontal()===Et.RIGHT?(h=Math.max(t,h),o=Math.max(o,_)):(a=Math.max(a,_/2)+Rt.minPadding,o=Math.max(o,_/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const l=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),c=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=c,e.right_shift+=l,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Et.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:k.NORMAL,style:D.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===kt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:kt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=kt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=kt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=kt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=lt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Et.LEFT?i.x:this.horizontal===Et.RIGHT?i.x+this.getWidth():this.horizontal===Et.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Et,Rt.HorizontalJustifyString={left:Et.LEFT,right:Et.RIGHT,center:Et.CENTER,centerStem:Et.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Pt,Rt.symbolModifiers=kt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return b.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,l=null,c=0;for(let t=0;to?a:o,r=m,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return b.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=0,m=null,g=null;for(let t=0;tc?e:c):o===tt.Position.RIGHT&&(_.setXShift(l),e=r+p,d=e>d?e:d),m=b,g=a}return e.left_shift+=c,e.right_shift+=d,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Wt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:k.BOLD,style:D.NORMAL};class Lt extends vt{static get CATEGORY(){return b.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;n2&&i++,2===V.durationToNumber(a.note.duration)?e++:V.durationToNumber(a.note.duration)>2&&i++,2!==e&&2!==i||s.note.getModifiersByType(b.Dot).length!==a.note.getModifiersByType(b.Dot).length||t<1&&t>0?(l=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(l):a.note.setXShift(l)):s.note.voice!==a.note.voice&&s.stemDirection===a.stemDirection&&(s.line!=a.line?(l=h+2,s.note.setXShift(l)):1===a.stemDirection&&(a.stemDirection=-1,a.note.setStemDirection(-1)))}else t<1?(l=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(l):a.note.setXShift(l)):s.note.hasStem()?(s.stemDirection=-s.note.getStemDirection(),s.note.setStemDirection(s.stemDirection)):a.note.hasStem()&&(a.stemDirection=-a.note.getStemDirection(),a.note.setStemDirection(a.stemDirection))}return e.right_shift+=l,!0}if(!n)throw new x("InvalidState","noteM not defined.");if(n.isrest&&!s.isrest&&!a.isrest&&(s.minLine<=n.maxLine||n.minLine<=a.maxLine)){return n.maxLine-n.minLinet.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Ut.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,l=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*l,r=t+this.glyphProps.line_below*l)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let l=0;return t===r?l=-2:t===h?(l=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(l+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(l=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+l,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Ut.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,l=r;return this._noteHeads.forEach((c=>{const d=c.getLine(),m=c.getY();n=Math.min(m,n),a=Math.max(m,a),void 0===e&&c.isDisplaced()&&(e=c.getAbsoluteX()),void 0!==t||c.isDisplaced()||(t=c.getAbsoluteX()),o=Math.max(d,o),r=Math.min(d,r),c.isDisplaced()?(i=void 0===i?d:Math.max(d,i),s=void 0===s?d:Math.min(d,s)):(h=Math.max(d,h),l=Math.min(d,l))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:l}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:l,lowest_displaced_line:c,lowest_non_displaced_line:d,displaced_x:m,non_displaced_x:g}=this.getNoteHeadBounds();if(o<6&&r>0)return;const _=Math.min(null!=m?m:0,null!=g?g:0),b=(t,e,o)=>{let r;r=o&&e?_-i:e?(null!=g?g:0)-i:(null!=m?m:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==g&&e<=l,s=void 0!==h&&e<=h;b(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==g&&e>=d,s=void 0!==c&&e>=c;b(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Ut.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Ut.DEBUG=!1;class Yt extends W{static get CATEGORY(){return b.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let l=0;lMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===zt.STRICT||this.mode===zt.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Ut.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=m(e),s=i?Yt:Ht;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return b.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new De,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;_(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const l=a-r*(this.text_line+h),c=e.getModifierStartXY(this.position,this.index);let d=c.x,m=this.ornamentAlignWithNoteHead?c.y:Math.min(s.getYForTopText(this.text_line),l);if(m+=this.y_shift,this.delayed){let t=0;const i=d-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}d+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,d,m),this.accidentalLower&&(this.accidentalLower.render(t,d,m),m-=this.accidentalLower.getMetrics().height,m-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(m+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(m=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,d+this.x_shift,m),this.accidentalUpper&&(m-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,d,m)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return b.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,s=u().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,i.width=t*s,i.height=e*s,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":k.NORMAL,"font-style":D.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),l=v(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===l){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let c,d=t+i*Math.cos(n),m=e+i*Math.sin(n);s=h,n=l,c=Math.abs(n-s)n&&(c=!c);const g=!a;d=this.round(d),m=this.round(m),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+c} ${+g} ${d} ${m}`,this.pen.x=d,this.pen.y=m}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let l=e,c=i;t.moveTo(e,i);let d=0,m=!0;for(;!(o<0?l<=s:l>=s)||!(r<0?c<=n:c>=n);){const e=a[d++%a.length],i=l+Math.cos(h)*e;l=o<0?Math.max(s,i):Math.min(s,i);const g=c+Math.sin(h)*e;c=r<0?Math.max(n,g):Math.min(n,g),m?t.lineTo(l,c):t.moveTo(l,c),m=!m}t.closePath(),t.stroke()}constructor(t,e){if(d(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class le extends tt{static get CATEGORY(){return b.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,l=0,c=0,d=null,g=null;for(let t=0;tl?e:l):r===tt.Position.RIGHT&&(m.setXShift(h),e+=x,c=e>c?e:c),d=_,g=a}return e.left_shift+=l,e.right_shift+=c,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-le.metrics.stemPadding),o+=this.radius+le.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+le.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+le.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(g(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}le.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.BOLD,style:D.NORMAL};class ce extends tt{static get CATEGORY(){return b.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(m(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0}let h=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[At.CATEGORY]:0,[_e.CATEGORY]:1,[be.CATEGORY]:2,[ve.CATEGORY]:3},Be={[ve.CATEGORY]:0,[be.CATEGORY]:1,[At.CATEGORY]:2,[_e.CATEGORY]:3};class Ee extends W{static get CATEGORY(){return b.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new At(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new ue(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Bt;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,_e.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,be.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new be(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Be),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Bt.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new At(Bt.NONE));let h=0,l=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(b.Clef),e(b.KeySignature),e(b.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,b.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,b.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:k.NORMAL,style:D.NORMAL};class Pe extends W{static get CATEGORY(){return b.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,l=n-s,c=o+a/2,d=l-.9*s,m=o+.2*a,g=n+1.1*s,_=c-.135*a,b=g,x=c+.135*a,u=d,p=h-.2*a,f=l-s,y=p,S=n+.4*s,T=c+.135*a,v=S,w=c-.135*a,B=f,E=m;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(d,m,g,_,l,c),t.bezierCurveTo(b,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,l,c),t.bezierCurveTo(v,w,B,E,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new ge);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?We.applyAndGetBeams(a):[];return(new De).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),l=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),c=r.auto_beam?We.applyAndGetBeams(h):[];(new De).joinVoices([h]).joinVoices([l]).formatToStave([h,l],i,{align_rests:r.align_rests}),h.draw(t,i),l.draw(t,e),c.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(m(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=ke(t,e.line,n,!1);else if(n>0&&nDe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const l=r.getWidth();this.minTotalWidth+=l})),this.hasMinTotalWidth=!0;const l=s>0?s/a.length:1/a.length,c=w(a.map((t=>Math.pow(t-l,2)))),d=Math.pow(c/a.length,.5)/l,m=n/o.length,g=w(o.map((t=>Math.pow(t-m,2)))),_=Math.pow(g/o.length,.5)/m,b=Math.max(_,d)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,b)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=De.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new B(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new ge;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=De.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new B(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let l=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();l+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:c,softmaxFactor:d,maxIterations:m}=this.formatterOptions,g=w(a.map((t=>Math.pow(d,o[t].getMaxTicks().value()/l))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=o[a[0]],b=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),m=[];if(Object.keys(n).forEach((t=>{i[t]&&m.push(t)})),m.length>0){let a=0,o=1/0,h=0;if(m.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),l=i[t].getMetrics(),c=i[t].getX()+l.notePx+l.modRightPx+l.rightDisplacedHeadPx;o=Math.min(o,h-c)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),c){const e=l;h=Math.pow(d,a/e)/g*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),b.getX()-_.getX()}const y=t-b.getMetrics().notePx-b.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let E=y;const C=u(E);let P=f(C);if(1===a.length)return 0;const k=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=b&&b.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+A1;)E-=P-M,A=D(E),N=A-(v-T),P=f(u(E)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,l=a.getX()-r.totalLeftPx,c=l-h;this.contextGaps.total+=c,this.contextGaps.gaps.push({x1:h,x2:l}),a.getFormatterMetrics().freedom.left=c,n.getFormatterMetrics().freedom.right=c})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let l=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));l>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(l)):l<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(l)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){De.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;De.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class Ne extends W{static get CATEGORY(){return b.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=V.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ne.LOCATION_TOP),De.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=Ne.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+Ne.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Re="R",Oe="B";class We extends W{static get CATEGORY(){return b.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new B(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),l=(c=o,c.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var c;const d=V.durationToNumber(s.getDuration())<8;if(d&&s.getTuplet()&&(h.numerator*=2),l.greaterThan(h)){if(!d){const e=o.pop();e&&t.push(e)}a.push(o);do{e=l.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else l.equals(h)&&(a.push(o),e=new B(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),l=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let c=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();c=i.getStemDirection()!==t}const d=parseInt(i.getDuration(),10)<8;h||l||c||d?(s.length>0&&t.push(s),s=c?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),l=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),c=[];return h.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),c.push(i)})),l.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&m(t[0]))n=Me(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let l=Number.MAX_VALUE,c=0,d=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let l=a/t.length;const c=s+r*(1.5*i),d=o+c*-e;e===nt.DOWN&&ld&&(l=o-c),n?(e===nt.DOWN&&l>n||e===nt.UP&&l=8&&(c=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,c=!0));const d=l.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(He(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}ze.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,l=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),c="auto"===i,d="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:l,duration:a,dots:o,type:r,clef:s,auto_stem:c});c||d.setStemDirection("up"===i?nt.UP:nt.DOWN);const m=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});d.addModifier(e,i),m.push(e)}else m.push(void 0)}));for(let t=0;tt(e,d,this))),this.elements.notes.push(d),this.elements.accidentals.push(m),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new ze(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return b.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{s=!s;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{e=!e;const s=i.checkStave(),n=i.getAbsoluteX(),a=s.getYForBottomText(this.line+3),o=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-r/2,a)):oi("pedal_depress",t,n,a,o):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-r/2,a)):oi("pedal_release",t,n,a,o)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:k.BOLD,style:D.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class li extends ei{static get CATEGORY(){return b.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function ci(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class di extends W{static get CATEGORY(){return b.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:di.TextVerticalPosition.TOP,text_justification:di.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),l=(h-this.render_options.arrowhead_length/3)/h;let c,d,m,g;this.render_options.draw_end_arrow||s?(c=Math.round(n+(o-n)*l),d=Math.round(a+(r-a)*l)):(c=o,d=r),this.render_options.draw_start_arrow||s?(m=n+(o-n)*(1-l),g=a+(r-a)*(1-l)):(m=n,g=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(m,g),t.lineTo(c,d),t.stroke(),t.closePath();const _=Math.atan2(r-a,o-n),b=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(x=_+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*b,f=r+Math.sin(x)*b,u=_+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*b,S=r+Math.sin(u)*b,ci(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(x=_+this.render_options.arrowhead_angle,p=n+Math.cos(x)*b,f=a+Math.sin(x)*b,u=_-this.render_options.arrowhead_angle,y=n+Math.cos(u)*b,S=a+Math.sin(u)*b,ci(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const l=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const c=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=c+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=c+s.padding_right),n.y+=l?-3:1,a.y+=l?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===di.TextJustification.LEFT)h=n.x;else if(r===di.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===di.TextJustification.RIGHT&&(h=a.x-o);let l=0;const c=s.text_position_vertical;return c===di.TextVerticalPosition.TOP?l=e.checkStave().getYForTopText():c===di.TextVerticalPosition.BOTTOM&&(l=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,l),t.restore(),this}}di.TEXT_FONT=Object.assign({},W.TEXT_FONT),di.TextVerticalPosition={TOP:1,BOTTOM:2},di.TextJustification=oe;class mi extends W{static get CATEGORY(){return b.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new De(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class gi extends It{static get CATEGORY(){return b.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const l=e.indexOf(r)>-1,c=e.indexOf(1)>-1;if(n&&c||a&&l)return;1===e.length&&e.push(e[0]);const d=[];e.forEach(((e,n,a)=>{const h=1===e,l=e===r;let c=i.getYForLine(e-1);0!==n||h?n!==a.length-1||l||(c+=o/2-1):c-=o/2-1,d.push(c),1===s&&h?d.push(t-2):-1===s&&l&&d.push(t+2)})),h.push(d.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return b.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return b.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),de.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new _i(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Ut(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new li(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Nt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new gi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ct.CENTER,vJustify:dt.BOTTOM},t),i=new mt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new le(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new ge}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new De(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ne(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ue(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new di({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new mi(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends gi{static get CATEGORY(){return b.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Di=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Di(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ai.Accidental=st,Ai.Annotation=mt,Ai.Articulation=ft,Ai.Barline=At,Ai.BarNote=Nt,Ai.Beam=We,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Zt,Ai.ChordSymbol=Rt,Ai.Clef=_e,Ai.ClefNote=Le,Ai.Crescendo=Ie,Ai.Curve=Ue,Ai.Dot=Ot,Ai.EasyScore=Qe,Ai.Element=W,Ai.Factory=vi,Ai.Font=F,Ai.Formatter=De,Ai.Fraction=B,Ai.FretHandFinger=Wt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Xt,Ai.GraceTabNote=wi,Ai.KeyManager=Bi,Ai.KeySignature=be,Ai.KeySigNote=si,Ai.Modifier=tt,Ai.ModifierContext=ge,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=vt,Ai.NoteHead=Lt,Ai.NoteSubGroup=Vt,Ai.Ornament=$t,Ai.Parenthesis=Jt,Ai.Parser=ze,Ai.PedalMarking=ri,Ai.Registry=O,Ai.RenderContext=yt,Ai.Renderer=he,Ai.RepeatNote=li,Ai.Repetition=xe,Ai.Stave=Ee,Ai.StaveConnector=Pe,Ai.StaveHairpin=Ei,Ai.StaveLine=di,Ai.StaveModifier=Dt,Ai.StaveNote=Ut,Ai.StaveTempo=pe,Ai.StaveText=ye,Ai.StaveTie=Yt,Ai.Stem=nt,Ai.StringNumber=le,Ai.Stroke=ce,Ai.SVGContext=se,Ai.System=mi,Ai.TabNote=gi,Ai.TabSlide=Ci,Ai.TabStave=_i,Ai.TabTie=Ht,Ai.TextBracket=ui,Ai.TextDynamics=fi,Ai.TextFormatter=lt,Ai.TextNote=fe,Ai.TickContext=Kt,Ai.TimeSignature=ve,Ai.TimeSigNote=yi,Ai.Tremolo=Pi,Ai.Tuning=ki,Ai.Tuplet=Ne,Ai.Vibrato=de,Ai.VibratoBracket=Si,Ai.Voice=jt,Ai.Volta=Se,Ai.AnnotationHorizontalJustify=ct,Ai.AnnotationVerticalJustify=dt,Ai.ChordSymbolHorizontalJustify=Et,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=kt,Ai.CurvePosition=Ge,Ai.FontWeight=k,Ai.FontStyle=D,Ai.ModifierPosition=J,Ai.RendererBackends=ne,Ai.RendererLineEndType=ae,Ai.BarlineType=Bt,Ai.StaveModifierPosition=wt,Ai.VoltaType=re,Ai.TextBracketPosition=xi,Ai.TextJustification=oe,Ai.VoiceMode=zt;const Ni={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},Mi={name:"VexFlowCustom",smufl:!1,glyphs:{}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"},Ri={name:"Leland",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ii={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},Gi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Ui{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const LelandMetrics = {\n name: 'Leland',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { LelandFont } from './leland_glyphs';\nimport { LelandMetrics } from './leland_metrics';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, LelandMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-gonville.ts is the entry point for vexflow-gonville.js.\n// This version bundles the Gonville music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadLeland } from '../src/fonts/load_leland';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadLeland();\nloadCustom();\nFlow.setMusicFont('Leland', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CustomFont","noteheadSquareWhite","noteheadSquareBlack","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","CustomMetrics","smufl","LelandFont","bracketTop","bracketBottom","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXBlack","noteheadCircleX","noteheadDoubleWholeSquare","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompTrillLowerSuffix","brassMuteClosed","brassMuteOpen","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","keyboardPedalPed","keyboardPedalUp","wiggleArpeggiatoUp","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","generatedOn","LelandMetrics","endPaddingMax","endPaddingMin","unalignedNotePadding","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","csymMinor","clef_default","shiftX","clef_small","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassFlip","brassJazzTurn","brassSmear","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","noteheadTriangleUpHalf","noteheadTriangleUpWhole","noteheadXHalf","noteheadXWhole","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","breathMarkTick","restQuarterStemUp","restQuarterStemDown","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow-petaluma.js b/build/cjs/vexflow-petaluma.js deleted file mode 100644 index dec00325f5..0000000000 --- a/build/cjs/vexflow-petaluma.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function s(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let s=t.constructor;if(i){for(;null!==t;){if(s=t.constructor,"CATEGORY"in s&&s.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in s&&s.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>st,Annotation:()=>dt,AnnotationHorizontalJustify:()=>lt,AnnotationVerticalJustify:()=>ct,Articulation:()=>ft,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Fe,BEAM_RIGHT:()=>Re,BarNote:()=>Nt,Barline:()=>At,BarlineType:()=>Bt,Beam:()=>We,Bend:()=>Mt,BoundingBox:()=>C,BoundingBoxComputation:()=>P,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>_,ChordSymbol:()=>Rt,ChordSymbolHorizontalJustify:()=>Et,ChordSymbolVerticalJustify:()=>Ct,Clef:()=>ge,ClefNote:()=>Le,Crescendo:()=>Ie,Curve:()=>Ge,CurvePosition:()=>ze,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>Xe,Element:()=>W,Factory:()=>vi,Flow:()=>Ai,Font:()=>F,FontStyle:()=>D,FontWeight:()=>k,Formatter:()=>De,Fraction:()=>B,FretHandFinger:()=>Wt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>Xt,GraceTabNote:()=>wi,KeyManager:()=>Bi,KeySigNote:()=>si,KeySignature:()=>_e,Modifier:()=>tt,ModifierContext:()=>me,ModifierPosition:()=>J,MultiMeasureRest:()=>ai,Music:()=>et,Note:()=>vt,NoteHead:()=>Lt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>ri,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>yt,Renderer:()=>he,RendererBackends:()=>ne,RendererLineEndType:()=>ae,RepeatNote:()=>bi,Repetition:()=>xe,RuntimeError:()=>x,SVGContext:()=>se,Stave:()=>Ee,StaveConnector:()=>Pe,StaveHairpin:()=>Ei,StaveLine:()=>ci,StaveModifier:()=>Dt,StaveModifierPosition:()=>wt,StaveNote:()=>Gt,StaveSection:()=>ue,StaveTempo:()=>pe,StaveText:()=>ye,StaveTie:()=>Ut,Stem:()=>nt,StemmableNote:()=>It,StringNumber:()=>be,Stroke:()=>le,SymbolModifiers:()=>kt,SymbolTypes:()=>Pt,System:()=>di,TabNote:()=>mi,TabSlide:()=>Ci,TabStave:()=>gi,TabTie:()=>Yt,TextBracket:()=>ui,TextBracketPosition:()=>xi,TextDynamics:()=>fi,TextFormatter:()=>bt,TextJustification:()=>oe,TextNote:()=>fe,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>yi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Pi,Tuning:()=>ki,Tuplet:()=>Ne,TupletLocation:()=>Ae,Vex:()=>Gi,Vibrato:()=>ce,VibratoBracket:()=>Si,Voice:()=>jt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>re,defined:()=>p,drawDot:()=>St,globalObject:()=>u,isAccidental:()=>n,isAnnotation:()=>a,isBarline:()=>o,isCategory:()=>s,isDot:()=>r,isGraceNote:()=>h,isGraceNoteGroup:()=>b,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>l,isRenderContext:()=>c,isStaveNote:()=>d,isStemmableNote:()=>m,isTabNote:()=>g,log:()=>f,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>y});const n=t=>s(t,_.Accidental),a=t=>s(t,_.Annotation),o=t=>s(t,_.Barline),r=t=>s(t,_.Dot),h=t=>s(t,_.GraceNote),b=t=>s(t,_.GraceNoteGroup),l=t=>s(t,_.Note),c=t=>s(t,_.RenderContext),d=t=>s(t,_.StaveNote),m=t=>s(t,_.StemmableNote),g=t=>s(t,_.TabNote);var _;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(_||(_={}));class x extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function u(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new x(e,i);return t}function f(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");u().console.log(t+": "+i)}function y(...t){const e=t.join(" "),i=new Error;u().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var s,n;return i%2>0&&(i=((s=10*i)%(n=5)>=n/2?parseInt(""+s/n,10)*n+n:parseInt(""+s/n,10)*n)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class B{static get CATEGORY(){return _.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new x("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/B.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?B.LCM(t[0],t[1]):B.LCM(t.shift(),B.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=B.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a+i*o;return this.set(r,n)}subtract(t=0,e=1){const[i,s]=E(t,e),n=B.LCM(this.denominator,s),a=n/this.denominator,o=n/s,r=this.numerator*a-i*o;return this.set(r,n)}multiply(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*i,this.denominator*s)}divide(t=1,e=1){const[i,s]=E(t,e);return this.set(this.numerator*s,this.denominator*i)}equals(t){const e=B.__staticFractionA.copy(t).simplify(),i=B.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=B.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new B(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return B.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=B.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),s=e[1]?parseInt(e[1],10):1;return this.set(i,s)}}function E(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}B.__staticFractionA=new B,B.__staticFractionB=new B,B.__staticFractionTmp=new B;class C{static copy(t){return new C(t.x,t.y,t.w,t.h)}constructor(t,e,i,s){this.x=t,this.y=e,this.w=i,this.h=s}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return C.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,s,n,a){this.addPoint(t,e),this.addPoint(n,a);const o=i-t;let r=o-(n-i);if(0!=r){const e=o/r;if(e>0&&e<1){const s=1-e;this.addX(s*s*t+2*s*e*i+e*e*n)}}const h=s-e;if(r=h-(a-s),0!=r){const t=h/r;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*s+t*t*a)}}}addBezierCurve(t,e,i,s,n,a,o,r){const h=[t,e],b=[i,s],l=[n,a],c=[o,r];let d;this.addPoint(h[0],h[1]),this.addPoint(c[0],c[1]);const m=(t,e)=>Math.pow(1-t,3)*h[e]+3*Math.pow(1-t,2)*t*b[e]+3*(1-t)*Math.pow(t,2)*l[e]+Math.pow(t,3)*c[e];for(d=0;d<=1;d++){const t=6*h[d]-12*b[d]+6*l[d],e=-3*h[d]+9*b[d]-9*l[d]+3*c[d],i=3*b[d]-3*h[d];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===D.ITALIC}static loadWebFont(t,e,i=!0){return A(this,void 0,void 0,(function*(){const s=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield s.load(),document.fonts.add(s),s}))}static loadWebFonts(){return A(this,void 0,void 0,(function*(){const t=F.WEB_FONT_HOST,e=F.WEB_FONT_FILES;for(const i in e){const s=e[i];F.loadWebFont(i,t+s)}}))}static load(t,e,i){let s=M[t];return s||(s=new F(t),M[t]=s),e&&s.setData(e),i&&s.setMetrics(i),s}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let s=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class W{static get CATEGORY(){return _.Element}static newID(){return"auto"+W.ID++}constructor(){var t;this.children=[],this.attrs={id:W.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const s=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return s&&(s.splice(s.indexOf(t)),this.attrs.class=s.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const s=this.attrs.id,n=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:s,name:t,value:e,oldValue:n}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return F.toCSSString(this.textFont)}setFont(t,e,i,s){const n=this.constructor.TEXT_FONT,a="object"==typeof t,o="string"==typeof t,r=void 0===t,h=void 0===e&&void 0===i&&void 0===s;return this.textFont=a?Object.assign(Object.assign({},n),t):o&&h?F.fromCSSString(t):r&&h?Object.assign({},n):F.validate(null!=t?t:n.family,null!=e?e:n.size,null!=i?i:n.weight,null!=s?s:n.style),this}getFont(){return this.textFont||this.resetFont(),F.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return F.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return F.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}W.ID=1e3,W.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.NORMAL,style:D.NORMAL};const L=16384,I={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},z={w:"1",h:"2",q:"4",b:"256"},G={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},U={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},Y={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},j={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},X={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new x("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in U))throw new x("BadArgument","Invalid clef: "+t);return U[t]}static keyProperties(t,e="treble",i){let s={octave_shift:0,duration:"4"};"object"==typeof i&&(s=Object.assign(Object.assign({},s),i));const n=V.sanitizeDuration(s.duration),a=t.split("/");if(a.length<2)throw new x("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const o=a[0].toUpperCase(),r=Y[o];if(!r)throw new x("BadArguments","Invalid key name: "+o);r.octave&&(a[1]=r.octave.toString());let h=parseInt(a[1],10);h+=-1*s.octave_shift;let b=(7*h-28+r.index)/2;b+=V.clefProperties(e).line_shift;let l=0;b<=0&&2*b%2==0&&(l=1),b>=6&&2*b%2==0&&(l=-1);const c=void 0!==r.int_val?12*h+r.int_val:void 0,d=r.code,m=r.shift_right;let g={};if(a.length>2&&a[2]){const t=a[2].toUpperCase();g={code:this.codeNoteHead(t,n)}||{}}return Object.assign({key:o,octave:h,line:b,int_value:c,accidental:r.accidental,code:d,stroke:l,shift_right:m,displaced:!1},g)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new x("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new x("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,s=0,n=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new x("InvalidMetrics","Width and height required");s=t.width,n=-t.height/2}else s=V.textWidth(t);return{text:t,code:i,getWidth:()=>s*e,shift_y:n}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return j[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return X[t]}static keySignature(t){const e=G[t];if(!e)throw new x("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],s=[];for(let t=0;tZ.getWidth(a,t)}),s)}}V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=L,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:L};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,s){this.outline=t,this.originX=e,this.originY=i,this.scale=s,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let s=0;for(;s{const e=t.getTickContext();n&&t.setStave(n),e.setXOffset(a)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new x("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new x("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new x("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let s=i[3];return s||(s="M"),{root:t,accidental:e,type:s}}throw new x("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new x("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new x("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new x("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new x("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new x("BadArguments",`Invalid direction: ${i}`);let s=(t+i*e)%et.NUM_TONES;return s<0&&(s+=et.NUM_TONES),s}getRelativeNoteName(t,e){const i=this.getNoteParts(t),s=this.getNoteValue(i.root);let n=e-s;if(Math.abs(n)>et.NUM_TONES-3){let i=1;n>0&&(i=-1);const a=(e+1+(s+1))%et.NUM_TONES*i;if(Math.abs(a)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);n=a}if(Math.abs(n)>2)throw new x("BadArguments",`Notes not related: ${t}, ${e})`);let a=i.root;if(n>0)for(let t=1;t<=n;++t)a+="#";else if(n<0)for(let t=-1;t>=n;--t)a+="b";return a}getScaleTones(t,e){const i=[t];let s=t;for(let n=0;ne.line-t.line));const l=[];let c,d=0;for(let t=0;td?e.shift:d,c=e.line}let m=0;for(let t=0;tl[i+t],a=t=>t.map(n),o=(t,e)=>{const[i,s]=a([t,e]).map((t=>t.line));return i-s},r=(...t)=>t.map(a).every((([t,e])=>!this.checkCollision(t,e))),h=s-i+1;let b,c,d=this.checkCollision(l[i],l[s])?"a":"b";switch(h){case 3:"a"===d&&.5===o(1,2)&&.5!==o(0,1)&&(d="second_on_bottom");break;case 4:r([0,2],[1,3])&&(d="spaced_out_tetrachord");break;case 5:"b"===d&&r([1,3])&&(d="spaced_out_pentachord",r([0,2],[2,4])&&(d="very_spaced_out_pentachord"));break;case 6:r([0,3],[1,4],[2,5])&&(d="spaced_out_hexachord"),r([0,2],[2,4],[1,3],[3,5])&&(d="very_spaced_out_hexachord")}if(h>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+ec?m:c}else for(b=t;b<=s;b++)c=V.accidentalColumnsTable[h][d][b-t],l[b].column=c,m=m>c?m:c;t=s}const g=[],_=[];for(let t=0;t<=m;t++)g[t]=0,_[t]=0;g[0]=d+n,_[0]=d+n,l.forEach((t=>{t.width>g[t.column]&&(g[t.column]=t.width)}));for(let t=1;t{let e=0;const i=u+t.numAcc;for(;u0?(s=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(s=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const n=Math.abs(i){const e=new B(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const n=s[e.value()];n?n.push(t):(i.push(e.value()),s[e.value()]=[t]),e.add(t.getTicks())}))}));const a=new et;e||(e="C");const o=a.createScaleMap(e),r={};i.forEach((t=>{const e=s[t],i=[],h=t=>{if(!d(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,s)=>{const h=a.getNoteParts(t.split("/")[0]),b=t.split("/")[1],l=h.accidental||"n",c=h.root+l;r[h.root+b]||(r[h.root+b]=o[h.root]);const d=r[h.root+b]===c,m=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{n(t)&&t.type==l&&t.getIndex()==s&&e.getModifiers().splice(i,1)})),!d||d&&m){r[h.root+b]=c;const n=new st(l);e.addModifier(n,s),i.push(t)}})),e.getModifiers().forEach((t=>{b(t)&&t.getGraceNotes().forEach(h)}))};e.forEach(h)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,h(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:s,x_shift:n,y_shift:a,glyph:o,render_options:{parenLeftPadding:r,parenRightPadding:h}}=this,b=this.checkContext(),l=this.checkAttachedNote();this.setRendered();const c=l.getModifierStartXY(e,i);let d=c.x+n;const m=c.y+a;if(it("Rendering: ",t,d,m),s){const t=p(this.parenLeft),e=p(this.parenRight);e.render(b,d,m),d-=e.getMetrics().width,d-=h,d-=this.accidental.parenRightPaddingAdjustment,o.render(b,d,m),d-=o.getMetrics().width,d-=r,t.render(b,d,m)}else o.render(b,d,m)}}st.DEBUG=!1;class nt extends W{static get CATEGORY(){return _.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===nt.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(nt.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new x("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===nt.UP,e=[this.y_top,this.y_bottom],i=nt.HEIGHT+this.stem_extension,s=(t?Math.min:Math.max)(...e),n=(t?Math.max:Math.min)(...e);return{topY:s+i*-this.stem_direction,baseY:n}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-nt.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const s=this.stem_direction;let n=0;s===nt.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,n=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,n=this.stem_up_y_base_offset);const a=this.getHeight();!function(...t){nt.DEBUG&&f("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const o=this.isStemlet?a-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(nt.WIDTH),t.moveTo(e,i-o+n),t.lineTo(e,i-a-this.renderHeightAdjustment*s),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function at(...t){bt.DEBUG&&f("Vex.Flow.TextFormatter",t)}nt.DEBUG=!1;const ot={},rt={},ht={};class bt{static getFontFamilies(){const t=[];for(const e in ht){const i=ht[e];t.push(Object.assign({},i))}return t}static create(t={}){at("create: ",t),t.family||(t.family=F.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ht)i.startsWith(t)&&e.push(ht[i]);if(e.length>0)break}let s;if(0===e.length)s=new bt(Object.values(ht)[0]);else if(1===e.length)s=new bt(e[0]);else{const i=F.isBold(t.weight),n=F.isItalic(t.style),a=e.find((t=>t.bold===i&&t.italic===n));if(a)s=new bt(a);else{const t=e.find((t=>t.italic===n||t.bold===i));s=new bt(t||e[0])}}const n=t.size;if(void 0!==n){const t=F.convertSizeToPointValue(n);s.setFontSize(t)}return s}static getInfo(t){return ht[t]}static registerInfo(t,e=!1){at("registerInfo: ",t,e);const i=t.family;(void 0===ht[i]||e)&&(ht[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===rt[this.cacheKey]&&(rt[this.cacheKey]={}),null!==(t=rt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?k.BOLD:k.NORMAL,s=this.italic?D.ITALIC:D.NORMAL;this.cacheKey=`${t}%${e}%${i}%${s}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},s=e[t];if(void 0!==s)return s;for(let e=0;et>e?t:e)),h+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+o,c&&i===nt.DOWN&&(h=Math.max(h,b.topY+o+l*this.text_line))}else if(this.verticalJustification===ct.CENTER){const t=e.getYForTopText(this.text_line)-1;h=t+(d.getYForBottomText(this.text_line)-t)/2+o/2}else if(this.verticalJustification===ct.TOP){h=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,c&&i===nt.UP&&(l=b.topY=1}function ut(t,e){return xt(t,e)?e===mt?Math.ceil:Math.floor:Math.round}const pt=t=>d(t)||h(t);class ft extends tt{static get CATEGORY(){return _.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const s=(t,e,i)=>_t(ut(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const n=t.checkAttachedNote();i=Math.max(n.getGlyphProps().getWidth(),i);let a=5;const o=n.hasStem()?n.getStemDirection():nt.UP;let r=0;if(m(n)){const t=n.getStem();t&&(r=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const h=n.getStave();if(h&&(a=h.getNumLines()),t.getPosition()===mt){let i=n.getLineNumber(!0);o===nt.UP&&(i+=r);let h=s(t,e.top_text_line,mt);const b=i+e.top_text_line+.5;!t.articulation.between_lines&&bt.getWidth())).reduce(((t,e)=>Math.max(e,t))),a=Math.min(Math.max(n-i,0),Math.max(n-(e.left_shift+e.right_shift),0));return e.left_shift+=a/2,e.right_shift+=a/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const s={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const n={type:s[t]};return e&&(n.position=tt.PositionString[e]),i.getFactory().Articulation(n)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=mt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=mt),this.type.endsWith("Below")&&(this.position=gt));const t=(this.position===mt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:s,glyph:n,text_line:a}=this,o=this.articulation.between_lines,r=e.checkStave(),h=r.getSpacingBetweenLines(),b=g(e),{x:l}=e.getModifierStartXY(s,i),c=!o||b,d=function(t,e){const i=e===mt&&t.getStemDirection()===nt.UP||e===gt&&t.getStemDirection()===nt.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,s),m=V.currentMusicFont().lookupMetric(`articulation.${n.getCode()}.padding`,0);let _={[mt]:()=>{n.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?s:n:Math.min(...t.getYs());if(g(t))return t.hasStem()&&i===nt.UP?s:t.checkStave().getYForTopText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)-(a+d)*h;return c?Math.min(r.getYForTopText(ft.INITIAL_OFFSET),t):t},[gt]:()=>{n.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:s,baseY:n}=t.getStemExtents();if(pt(t))return t.hasStem()?i===nt.UP?n:s:Math.max(...t.getYs());if(g(t))return t.hasStem()?i===nt.UP?t.checkStave().getYForBottomText(e):s:t.checkStave().getYForBottomText(e);throw new x("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,a)+(a+d)*h;return c?Math.max(r.getYForBottomText(ft.INITIAL_OFFSET),t):t}}[s]();if(!b){const t=s===mt?-1:1,a=e.getKeyProps()[i].line,r=(e.getYs()[i]-_)/h+Number(a),b=function(t,e,i,s){const n=_t(ut(e,i),e);if(t&&xt(n,i)&&n%1==0)return n+.5*-s;return n}(o,r,s,t);xt(b,s)&&n.setOrigin(.5,.5),_+=Math.abs(b-r)*h*t+m*t}!function(...t){ft.DEBUG&&f("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${l}, y: ${_})`),n.render(t,l,_)}}ft.DEBUG=!1,ft.INITIAL_OFFSET=-.5;class yt{static get CATEGORY(){return _.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,s="#F55"){t.save(),t.setFillStyle(s),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends W{static get CATEGORY(){return _.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new B(0,1),this.intrinsicTicks=0,this.tickMultiplier=new B(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new x("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const s=this.tupletStack.indexOf(t);return-1!==s&&(this.tupletStack.splice(s,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const s=g.space.deviation,n=s>=0?"+":"";t.setFillStyle("red"),t.fillText(n+Math.round(s),o+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const s=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const n=t.split("/");s[e]=n&&3===n.length?n[2]:i})));let n=V.durationToTicks(e.duration);if(!n)return;const a=t.dots?t.dots:e.dots;if("number"!=typeof a)return;let o=n;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new x("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new x("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(_.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new x("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new x("NoStem","No stem attached to this note.")}getStemExtents(){throw new x("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,Bt,Et,Ct,Pt,kt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class Dt extends W{static get CATEGORY(){return _.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,s=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+s)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(Bt||(Bt={}));class At extends Dt{static get CATEGORY(){return _.Barline}static get type(){return Bt}static get typeString(){return{single:Bt.SINGLE,double:Bt.DOUBLE,end:Bt.END,repeatBegin:Bt.REPEAT_BEGIN,repeatEnd:Bt.REPEAT_END,repeatBoth:Bt.REPEAT_BOTH,none:Bt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=Bt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case Bt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case Bt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case Bt.END:this.drawVerticalEndBar(t,this.x);break;case Bt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case Bt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case Bt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();i&&s.fillRect(e-3,n,1,a-n),s.fillRect(e,n,1,a-n)}drawVerticalEndBar(t,e){const i=t.checkContext(),s=t.getTopLineTopY(),n=t.getBottomLineBottomY();i.fillRect(e-5,s,1,n-s),i.fillRect(e-2,s,3,n-s)}drawRepeatBar(t,e,i){const s=t.checkContext(),n=t.getTopLineTopY(),a=t.getBottomLineBottomY();let o=3;i||(o=-5),s.fillRect(e+o,n,1,a-n),s.fillRect(e-2,n,3,a-n);i?o+=4:o-=4;const r=e+o+1;let h=(t.getNumLines()-1)*t.getSpacingBetweenLines();h=h/2-t.getSpacingBetweenLines()/2;let b=n+h+1;s.beginPath(),s.arc(r,b,2,0,2*Math.PI,!1),s.fill(),b+=t.getSpacingBetweenLines(),s.beginPath(),s.arc(r,b,2,0,2*Math.PI,!1),s.fill()}}class Nt extends vt{static get CATEGORY(){return _.BarNote}constructor(t=Bt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=Bt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?At.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Nt.DEBUG&&f("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new At(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Nt.DEBUG=!1;class Mt extends tt{static get CATEGORY(){return _.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let s=0;st{const a=t+s,o=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(a,o,t+s,n),e.stroke(),e.restore()},l=(t,i,s,n)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,n),e.quadraticCurveTo(t+s,n,t+s,i),e.stroke(),e.restore()},c=(t,i,s)=>{const n=i+4*s;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,n),e.lineTo(t+4,n),e.closePath(),e.fill()},d=(t,i)=>{e.save(),e.setFont(this.textFont);const s=t-e.measureText(i).width/2;e.fillText(i,s,h),e.restore()};let m,g=0,_=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){d(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=b.symbolBlocks[t-1];Rt.isSuperscript(e)||(n=s)}a&&n>0&&(x=!0,e.xShift=e.xShift+(n-s),s=n,n=0,b.setEnableKerning(!1)),i||a||(n=0),e.vAlign=x,s+=e.width,g=s}if(b.updateKerningAdjustments(),b.updateOverBarAdjustments(),b.getVertical()===Ct.TOP?(b.setTextLine(e.top_text_line),e.top_text_line+=_):(b.setTextLine(e.text_line+1),e.text_line+=_+1),b.getReportWidth()&&m(d)){const t=d.getGlyphProps().getWidth();b.getHorizontal()===Et.LEFT?(r=Math.max(t,r),a=Math.max(a,g)+Rt.minPadding):b.getHorizontal()===Et.RIGHT?(h=Math.max(t,h),o=Math.max(o,g)):(a=Math.max(a,g/2)+Rt.minPadding,o=Math.max(o,g/2),r=Math.max(t/2,r),h=Math.max(t/2,h))}s=0}const b=Math.min(Math.max(o-h,0),Math.max(o-e.right_shift,0)),l=Math.min(Math.max(a-r,0),Math.max(a-e.left_shift,0));return e.left_shift+=l,e.right_shift+=b,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Et.LEFT,this.vertical=Ct.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:k.NORMAL,style:D.NORMAL}}get superscriptOffset(){return Rt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Rt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Pt.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let s=0;for(;s0?this.symbolBlocks[t-1]:void 0;let s=0;e.symbolType===Pt.GLYPH&&void 0!==e.glyph&&e.glyph.code===Rt.glyphs.over.code&&(s+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Pt.GLYPH&&void 0!==i.glyph&&i.glyph.code===Rt.glyphs.over.code&&(s+=i.glyph.metrics.x_shift);let n=!1,a=!1;void 0!==i&&i.symbolType===Pt.TEXT&&(n=Rt.upperKerningText.some((t=>t===i.text[i.text.length-1])),a=Rt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const o=Rt.kerningOffset*this.textFormatter.fontSizeInPixels;return n&&e.symbolModifier===kt.SUPERSCRIPT&&(s+=o),a&&e.symbolType===Pt.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(s+=o/2),Rt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(s+=o/2)),s}getSymbolBlock(t={}){var e,i,s;const n=null!==(e=t.symbolType)&&void 0!==e?e:Pt.TEXT,a={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:n,symbolModifier:null!==(s=t.symbolModifier)&&void 0!==s?s:kt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(n===Pt.GLYPH&&"string"==typeof t.glyph){const e=Rt.glyphs[t.glyph],i=20;a.glyph=new Z(e.code,i,{category:"chordSymbol"})}else n===Pt.TEXT?a.width=this.textFormatter.getWidthForTextInEm(a.text):n===Pt.LINE&&(a.width=t.width);return a}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Pt.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Pt.TEXT,i=kt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Pt.TEXT,i=kt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Pt.GLYPH,i=kt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Pt.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let s=0;s0&&(this.addText(i,e),i=""),this.addGlyph(n,e)):i+=n}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Pt.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,s){return super.setFont(t,e,i,s),this.textFormatter=bt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Rt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Rt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,s=0;for(s=0;s0?i/n*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let s;t.setFont(this.textFont);const n=e.hasStem(),a=e.checkStave();if(this.vertical===Ct.BOTTOM){if(s=a.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines(),n=1===e.getStemDirection()?t.baseY:t.topY;s=Math.max(s,n+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(s=Math.min(a.getYForTopText(this.text_line),t-10),n){const t=e.checkStem().getExtents(),i=a.getSpacingBetweenLines();s=Math.min(s,t.topY-5-i*this.text_line)}}let o=i.x;o=this.horizontal===Et.LEFT?i.x:this.horizontal===Et.RIGHT?i.x+this.getWidth():this.horizontal===Et.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,Ft("Rendering ChordSymbol: ",this.textFormatter,o,s),this.symbolBlocks.forEach((e=>{const i=Rt.isSuperscript(e),n=Rt.isSubscript(e);let a=s;if(Ft("shift was ",e.xShift,e.yShift),Ft("curY pre sub ",a),i&&(a+=this.superscriptOffset),n&&(a+=this.subscriptOffset),Ft("curY sup/sub ",a),e.symbolType===Pt.TEXT){if((i||n)&&(t.save(),this.textFont)){const{family:e,size:i,weight:s,style:n}=this.textFont,a=F.scaleSize(i,Rt.superSubRatio);t.setFont(e,a,s,n)}Ft("Rendering Text: ",e.text,o+e.xShift,a+e.yShift),t.fillText(e.text,o+e.xShift,a+e.yShift),(i||n)&&t.restore()}else e.symbolType===Pt.GLYPH&&e.glyph?(a+=e.yShift,Ft("Rendering Glyph: ",e.glyph.code,o+e.xShift,a),e.glyph.render(t,o+e.xShift,a)):e.symbolType===Pt.LINE&&(Ft("Rendering Line : ",e.width,o,a),t.beginPath(),t.setLineWidth(1),t.moveTo(o,s),t.lineTo(o+e.width,a),t.stroke());o+=e.width,e.vAlign&&(o+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Rt.DEBUG=!1,Rt.HorizontalJustify=Et,Rt.HorizontalJustifyString={left:Et.LEFT,right:Et.RIGHT,center:Et.CENTER,centerStem:Et.CENTER_STEM},Rt.VerticalJustify=Ct,Rt.VerticalJustifyString={top:Ct.TOP,above:Ct.TOP,below:Ct.BOTTOM,bottom:Ct.BOTTOM},Rt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Rt.symbolTypes=Pt,Rt.symbolModifiers=kt,Rt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return _.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let a=i,o=0,r=null,h=null,b=null,l=0;for(let t=0;to?a:o,r=d,h=i}return e.right_shift+=o,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,h(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),s=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});g(e)&&(s.y=e.getStemExtents().baseY);const n=s.x+this.x_shift+this.width-this.radius,a=s.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(n,a,this.radius,0,2*Math.PI,!1),t.fill()}}class Wt extends tt{static get CATEGORY(){return _.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:s}=e;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,b=0,l=0,c=0,d=null,m=null;for(let t=0;tl?e:l):o===tt.Position.RIGHT&&(g.setXShift(b),e=r+p,c=e>c?e:c),d=_,m=a}return e.left_shift+=l,e.right_shift+=c,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),s={number:e[0]};return e[1]&&(s.position=e[1]),i.getFactory().Fingering(s)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=i.x+this.x_shift+this.x_offset,n=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:s-=4,n-=12;break;case tt.Position.BELOW:s-=2,n+=10;break;case tt.Position.LEFT:s-=this.width;break;case tt.Position.RIGHT:s+=1;break;default:throw new x("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,s,n),t.restore()}}Wt.TEXT_FONT={family:F.SANS_SERIF,size:9,weight:k.BOLD,style:D.NORMAL};class Lt extends vt{static get CATEGORY(){return _.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||nt.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=nt.WIDTH/2,i=V.currentMusicFont(),s=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,n=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+s+(this.displaced?(this.width-e)*this.stem_direction+n:0)}getBoundingBox(){if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new C(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===nt.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Lt.DEBUG&&f("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const s=this.stem_direction,n=this.render_options.glyph_font_scale,a=`${this.glyph_code}Stem${s===nt.UP?"Up":"Down"}`;if("s"===this.noteType){const n=this.checkStave().getSpacingBetweenLines();!function(t,e,i,s,n,a){const o=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let r=!1;if(V.durationToNumber(e)>2&&(r=!0),r||(i-=V.STEM_WIDTH/2*n),t.beginPath(),t.moveTo(i,s+a),t.lineTo(i,s+1),t.lineTo(i+o,s-a),t.lineTo(i+o,s),t.lineTo(i,s+a),t.closePath(),r?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,o+1,o+3];for(let n=0;n2&&i++,2===V.durationToNumber(a.note.duration)?e++:V.durationToNumber(a.note.duration)>2&&i++,2!==e&&2!==i||s.note.getModifiersByType(_.Dot).length!==a.note.getModifiersByType(_.Dot).length||t<1&&t>0?(b=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(b):a.note.setXShift(b)):s.note.voice!==a.note.voice&&s.stemDirection===a.stemDirection&&(s.line!=a.line?(b=h+2,s.note.setXShift(b)):1===a.stemDirection&&(a.stemDirection=-1,a.note.setStemDirection(-1)))}else t<1?(b=h+2,s.stemDirection===a.stemDirection?s.note.setXShift(b):a.note.setXShift(b)):s.note.hasStem()?(s.stemDirection=-s.note.getStemDirection(),s.note.setStemDirection(s.stemDirection)):a.note.hasStem()&&(a.stemDirection=-a.note.getStemDirection(),a.note.setStemDirection(a.stemDirection))}return e.right_shift+=b,!0}if(!n)throw new x("InvalidState","noteM not defined.");if(n.isrest&&!s.isrest&&!a.isrest&&(s.minLine<=n.maxLine||n.minLine<=a.maxLine)){return n.maxLine-n.minLinet.postFormat())),!0)}constructor(t){var e,i,s;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||Gt.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(s=t.stem_direction)&&void 0!==s?s:nt.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const s=t[i];s&&e.setStyle(s)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new nt({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,s,n,a,o,r=!1;t===nt.UP?(n=0,a=e.length,o=1):(n=e.length-1,a=-1,o=-1);for(let e=n;e!==a;e+=o){const n=this.sortedKeyProps[e].keyProps,a=n.line;void 0===i?i=a:(s=Math.abs(i-a),0===s||.5===s?r=!r:(r=!1,this.use_default_head_x=!0)),i=a;const o=new Lt({duration:this.duration,note_type:this.noteType,displaced:r,stem_direction:t,custom_glyph_code:n.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:n.shift_right,stem_up_x_offset:n.stem_up_x_offset,stem_down_x_offset:n.stem_down_x_offset,line:n.line});this.addChildElement(o),this._noteHeads[this.sortedKeyProps[e].index]=o}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?nt.UP:nt.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=a,this.keyProps.push(n)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new x("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:s,leftDisplacedHeadPx:n}=this.getMetrics(),a=this.getAbsoluteX()-s-n;let o=0,r=0;const h=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,b=2*h;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(o=t-h,r=t+h):(o=t-this.glyphProps.line_above*b,r=t+this.glyphProps.line_below*b)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=h*this.getStemDirection(),o=Math.min(t.topY,t.baseY),r=Math.max(t.topY,t.baseY)}else{o=0,r=0;for(let t=0;te&&(e=s):s1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?nt.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var s,n;if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");const{ABOVE:a,BELOW:o,LEFT:r,RIGHT:h}=tt.Position;let b=0;return t===r?b=-2:t===h?(b=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===nt.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===nt.UP?t.keyProps.length-1:0))(this,e))&&(b+=null!==(n=null===(s=null==this?void 0:this.flag)||void 0===s?void 0:s.getMetrics().width)&&void 0!==n?n:0)):t!==o&&t!==a||(b=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+b,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===nt.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===nt.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=Gt.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===nt.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,s,n=1/0,a=-1/0,o=this.checkStave().getNumLines(),r=1,h=o,b=r;return this._noteHeads.forEach((l=>{const c=l.getLine(),d=l.getY();n=Math.min(d,n),a=Math.max(d,a),void 0===e&&l.isDisplaced()&&(e=l.getAbsoluteX()),void 0!==t||l.isDisplaced()||(t=l.getAbsoluteX()),o=Math.max(c,o),r=Math.min(c,r),l.isDisplaced()?(i=void 0===i?c:Math.max(c,i),s=void 0===s?c:Math.min(c,s)):(h=Math.max(c,h),b=Math.min(c,b))}),this),{y_top:n,y_bottom:a,displaced_x:e,non_displaced_x:t,highest_line:o,lowest_line:r,highest_displaced_line:i,lowest_displaced_line:s,highest_non_displaced_line:h,lowest_non_displaced_line:b}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,s=this.checkContext(),n=e.getWidth()+2*i,a=2*(e.getWidth()+i)-nt.WIDTH/2;if(this.isRest())return;if(!s)throw new x("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:o,lowest_line:r,highest_displaced_line:h,highest_non_displaced_line:b,lowest_displaced_line:l,lowest_non_displaced_line:c,displaced_x:d,non_displaced_x:m}=this.getNoteHeadBounds();if(o<6&&r>0)return;const g=Math.min(null!=d?d:0,null!=m?m:0),_=(t,e,o)=>{let r;r=o&&e?g-i:e?(null!=m?m:0)-i:(null!=d?d:0)-i;const h=e&&o?a:n;s.beginPath(),s.moveTo(r,t),s.lineTo(r+h,t),s.stroke()},u=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(s,u);for(let e=6;e<=o;++e){const i=void 0!==m&&e<=b,s=void 0!==h&&e<=h;_(t.getYForNote(e),i,s)}for(let e=0;e>=r;--e){const i=void 0!==m&&e>=c,s=void 0!==l&&e>=l;_(t.getYForNote(e),i,s)}this.restoreStyle(s,u)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new nt(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===nt.UP?3-this.maxLine:this.minLine-3;const s=i-3.5;if(s<=0)return t;const n=this.getStave();let a=10;return null!=n&&(a=n.getSpacingBetweenLines()),t+s*a}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new x("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){Gt.DEBUG&&f("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}Gt.DEBUG=!1;class Ut extends W{static get CATEGORY(){return _.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,s=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,s=8);const n=this.render_options.first_x_shift,a=this.render_options.last_x_shift,o=this.render_options.y_shift*t.direction,r=this.notes.first_indices,h=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let b=0;bMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new x("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let s=0;s1){const e=new We(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+Gt.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){Xt.DEBUG&&f("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=d(e),s=i?Ut:Yt;this.slur=new s({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}Xt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return _.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new De,this.voice=new jt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:s,rightDisplacedHeadPx:n,modLeftPx:a,modRightPx:o,totalLeftPx:r,totalRightPx:h}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new x("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(r.x_shift+=s+2),$t.ornamentAttack.indexOf(r.type)>=0&&(r.x_shift-=n+2),r.reportedWidth&&r.x_shift<0?n+=r.reportedWidth:r.reportedWidth&&r.x_shift>=0?s+=r.reportedWidth+$t.minPadding:i=Math.max(r.getWidth(),i),$t.ornamentArticulation.indexOf(r.type)>=0){p(r.note,"NoAttachedNote").getLineNumber()>=3||r.getPosition()===tt.Position.ABOVE?(e.top_text_line+=h,r.y_shift+=a,a-=r.glyph.bbox.getH()):(e.text_line+=h,r.y_shift+=a,a+=r.glyph.bbox.getH())}else r.getPosition()===tt.Position.ABOVE?(r.setTextLine(e.top_text_line),e.top_text_line+=h):(r.setTextLine(e.text_line),e.text_line+=h)}return e.left_shift=n+i/2,e.right_shift=s+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new x("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new x("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),s=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const n=e.checkStem().getExtents();let a=i===nt.DOWN?n.baseY:n.topY;g(e)&&(e.hasStem()?i===nt.DOWN&&(a=s.getYForTopText(this.text_line)):a=s.getYForTopText(this.text_line));const o=i===nt.DOWN,r=s.getSpacingBetweenLines();let h=1;!o&&e.hasBeam()&&(h+=.5);const b=a-r*(this.text_line+h),l=e.getModifierStartXY(this.position,this.index);let c=l.x,d=this.ornamentAlignWithNoteHead?l.y:Math.min(s.getYForTopText(this.text_line),b);if(d+=this.y_shift,this.delayed){let t=0;const i=c-(s.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const n=Kt.getNextContext(e.getTickContext());t+=n?.5*(n.getX()-i):.5*(s.getX()+s.getWidth()-i),this.delayXShift=t}c+=t}!function(...t){$t.DEBUG&&f("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,c,d),this.accidentalLower&&(this.accidentalLower.render(t,c,d),d-=this.accidentalLower.getMetrics().height,d-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(d+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(d=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,c+this.x_shift,d),this.accidentalUpper&&(d-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,c,d)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return _.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;th+n.width?s:h+n.width),o===J.LEFT&&(h=a.getLeftParenthesisPx(r),i=i>h+n.width?i:h+n.width),n.setXShift(h)}return e.left_shift+=i,e.right_shift+=s,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),h(t)&&(this.point=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),s=i.x+this.x_shift,n=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,s+1,n,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,s-2,n,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=u();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends yt{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(y("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,s=u().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*s,e*s),t=t/s|0,e=e/s|0,i.width=t*s,i.height=e*s,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(s,s)}rect(t,e,i,s){return this.context2D.rect(t,e,i,s),this}fillRect(t,e,i,s){return this.context2D.fillRect(t,e,i,s),this}clearRect(t,e,i,s){return this.context2D.clearRect(t,e,i,s),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,s,n,a){return this.context2D.bezierCurveTo(t,e,i,s,n,a),this}quadraticCurveTo(t,e,i,s){return this.context2D.quadraticCurveTo(t,e,i,s),this}arc(t,e,i,s,n,a){return this.context2D.arc(t,e,i,s,n,a),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,s=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,s=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,s=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:s}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,s){const n=F.validate(t,e,i,s);return this.context2D.font=F.toCSSString(n),this.textHeight=F.convertSizeToPixelValue(n.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class se extends yt{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":F.SANS_SERIF,"font-size":F.SIZE+"pt","font-weight":k.NORMAL,"font-style":D.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const s=this.create("g");return this.groups.push(s),this.parent.appendChild(s),this.parent=s,t&&s.setAttribute("class",T(t)),e&&s.setAttribute("id",T(e)),i&&i.pointerBBox&&s.setAttribute("pointer-events","bounding-box"),this.applyAttributes(s,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),s}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new x("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,s=this.height/this.state.scaleY;return this.setViewBox(0,0,i,s),this}setViewBox(t,e,i,s){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const n=t+" "+e+" "+i+" "+s;this.svg.setAttribute("viewBox",n)}}applyAttributes(t,e){const i=te[t.nodeName];for(const s in e)i&&i[s]||!e[s]||0!=this.groupAttributes.length&&e[s]==this.groupAttributes[this.groupAttributes.length-1][s]||t.setAttributeNS(null,s,e[s]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,s,n){s<0&&(e+=s,s*=-1);const a=this.create("rect");return n=null!=n?n:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.applyAttributes(a,Object.assign({x:t,y:e,width:i,height:s},n)),this.add(a),this}fillRect(t,e,i,s){const n={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,s,n),this}clearRect(t,e,i,s){return this.rect(t,e,i,s,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,s,n,a){return n=this.round(n),a=this.round(a),t=this.round(t),e=this.round(e),i=this.round(i),s=this.round(s),this.path+="C"+t+" "+e+","+i+" "+s+","+n+" "+a,this.pen.x=n,this.pen.y=a,this}quadraticCurveTo(t,e,i,s){return i=this.round(i),s=this.round(s),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+s,this.pen.x=i,this.pen.y=s,this}arc(t,e,i,s,n,a){let o=t+i*Math.cos(s),r=e+i*Math.sin(s);o=this.round(o),r=this.round(r);const h=v(s),b=v(n);if(!a&&n-s>=ie||a&&s-n>=ie||h===b){let n=t+i*Math.cos(s+Math.PI),a=e+i*Math.sin(s+Math.PI);n=this.round(n),a=this.round(a),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 0 0 ${n} ${a} `,this.path+=`A${i} ${i} 0 0 0 ${o} ${r}`,this.pen.x=o,this.pen.y=r}else{let l,c=t+i*Math.cos(n),d=e+i*Math.sin(n);s=h,n=b,l=Math.abs(n-s)n&&(l=!l);const m=!a;c=this.round(c),d=this.round(d),i=this.round(i),this.path+=`M${o} ${r} A${i} ${i} 0 ${+l} ${+m} ${c} ${d}`,this.pen.x=c,this.pen.y=d}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return se.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const s=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),n=this.create("text");return n.textContent=t,this.applyAttributes(n,s),this.add(n),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,s){const n=F.validate(t,e,i,s);this.fontCSSString=F.toCSSString(n);const a={"font-family":n.family,"font-size":n.size,"font-weight":n.weight,"font-style":n.style};return this.attributes=Object.assign(Object.assign({},this.attributes),a),this.state=Object.assign(Object.assign({},this.state),a),this}getFont(){return this.fontCSSString}}var ne,ae,oe,re;se.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let s=this.cache[t];void 0===s&&(s={},this.cache[t]=s);const n=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let a=s[n];return void 0===a&&(a=this.measureImpl(t,e,i),s[n]=a),a}measureImpl(t,e,i){let s=this.txt;s||(s=document.createElementNS(ee,"text"),this.txt=s),s.textContent=t,i["font-family"]&&s.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&s.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&s.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&s.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(s);const n=s.getBBox();return e.removeChild(s),{x:n.x,y:n.y,width:n.width,height:n.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ne||(ne={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ae||(ae={}));class he{static buildContext(t,e,i,s,n="#FFF"){const a=new he(t,e);i&&s&&a.resize(i,s);const o=a.getContext();return o.setBackgroundFillStyle(n),he.lastContext=o,o}static getCanvasContext(t,e,i,s){return he.buildContext(t,he.Backends.CANVAS,e,i,s)}static getSVGContext(t,e,i,s){return he.buildContext(t,he.Backends.SVG,e,i,s)}static drawDashedLine(t,e,i,s,n,a){t.beginPath();const o=s-e,r=n-i,h=Math.atan2(r,o);let b=e,l=i;t.moveTo(e,i);let c=0,d=!0;for(;!(o<0?b<=s:b>=s)||!(r<0?l<=n:l>=n);){const e=a[c++%a.length],i=b+Math.cos(h)*e;b=o<0?Math.max(s,i):Math.min(s,i);const m=l+Math.sin(h)*e;l=r<0?Math.max(n,m):Math.min(n,m),d?t.lineTo(b,l):t.moveTo(b,l),d=!d}t.closePath(),t.stroke()}constructor(t,e){if(c(t))this.ctx=t;else{if(void 0===e)throw new x("InvalidArgument","Missing backend argument");const i=e;let s;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new x("BadElementId",`Can't find element with ID "${e}"`);s=e}else s=t;if(i===he.Backends.CANVAS){if(!qt(s))throw new x("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=s.getContext("2d",{willReadFrequently:!0});if(!t)throw new x("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==he.Backends.SVG)throw new x("InvalidBackend",`No support for backend: ${i}`);if(!Qt(s))throw new x("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new se(s)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}he.Backends=ne,he.LineEndType=ae,he.lastContext=void 0;class be extends tt{static get CATEGORY(){return _.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,s=e.right_shift;if(!t||0===t.length)return!1;const n=[];let a=null,o=0,r=0;for(let h=0;he.line-t.line));let h=0,b=0,l=0,c=null,m=null;for(let t=0;tb?e:b):r===tt.Position.RIGHT&&(d.setXShift(h),e+=x,l=e>l?e:l),c=g,m=a}return e.left_shift+=b,e.right_shift+=l,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=he.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=he.LineEndType.NONE&&t<=he.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),s=e.hasStem()?e.getStemDirection():nt.UP;let n=i.x+this.x_shift+this.x_offset,a={};e.hasStem()&&(a=e.checkStem().getExtents());let o=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:o=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&s==nt.DOWN&&(o=a.topY-be.metrics.stemPadding),o+=this.radius+be.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:n-=this.radius/2+be.metrics.leftPadding;break;case tt.Position.RIGHT:n+=this.radius/2+be.metrics.rightPadding;break;default:throw new x("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(n,o,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const r=n-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,r,o+4.5);const h=this.last_note;if(m(h)){const i=h.getStemX()-e.getX()+5;let s,a;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?he.drawDashedLine(t,n+10,o,n+i,o,[3,3]):he.drawDashedLine(t,n+10,o,n+i,o,[3,0]),this.leg){case he.LineEndType.UP:s=-10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a);break;case he.LineEndType.DOWN:s=10,a=this.dashed?[3,3]:[3,0],he.drawDashedLine(t,n+i,o,n+i,o+s,a)}}t.restore()}}be.TEXT_FONT={family:F.SANS_SERIF,size:F.SIZE,weight:k.BOLD,style:D.NORMAL};class le extends tt{static get CATEGORY(){return _.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const s=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(d(e)){const{line:s}=e.getKeyProps()[i];return{line:s,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(g(e)){const{str:s}=e.getPositions()[i];return{line:s,shift:0,stroke:t}}throw new x("Internal","Unexpected instance.")})),n=i,a=s.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(n+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=a,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let s=e.getYs(),n=i.y,a=i.y;const o=i.x-5,r=e.checkStave().getSpacingBetweenLines(),h=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){s-=o.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(s,this.checkStave(),t.line),this.glyphs.push(s);const a=this.xPositions[this.xPositions.length-1],o=s.getMetrics().width+n;this.xPositions.push(a+o),this.width+=o}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,s=i?e.length:e.length-this.accList.length;if(s<1)return;const n=[];for(let t=0;t0?e[0].type:void 0;let s;if(this.cancelKeySpec&&(s=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const n=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();s&&this.convertAccLines(n,s.type,s.accList),this.convertAccLines(n,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":s=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":s=i.length>0?"ParensRightSmall":"ParensRight"}const n=new Z("timeSig"+s,this.timeSignature.point);this.topGlyphs.push(n),r+=null!==(o=n.getMetrics().width)&&void 0!==o?o:0}let h=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new x("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const s=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=s[0])&&void 0!==e?e:"",null!==(i=s[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[At.CATEGORY]:0,[ge.CATEGORY]:1,[_e.CATEGORY]:2,[ve.CATEGORY]:3},Be={[ve.CATEGORY]:0,[_e.CATEGORY]:1,[At.CATEGORY]:2,[ge.CATEGORY]:3};class Ee extends W{static get CATEGORY(){return _.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,s){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},s),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new At(this.options.left_bar?Bt.SINGLE:Bt.NONE)),this.addEndModifier(new At(this.options.right_bar?Bt.SINGLE:Bt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new xe(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,s,n=!0){const a=new ue(t,this.x+i,e,n);return s&&a.setFontSize(s),this.modifiers.push(a),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new ye(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new C(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+t*i+s*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return(t-this.y)/i-s}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,s=e.space_above_staff_ln;return this.y+s*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:s}=Bt;return t!==e&&t!==i&&t!==s||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==Bt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,s){void 0===s&&(s=wt.BEGIN),s===wt.END?this.endClef=t:this.clef=t;const n=this.getModifiers(s,ge.CATEGORY);return 0===n.length?this.addClef(t,e,i,s):n[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,_e.CATEGORY);return 0===s.length?this.addKeySignature(t,e,i):s[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const s=this.getModifiers(i,ve.CATEGORY);return 0===s.length?this.addTimeSignature(t,e,i):s[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new _e(t,e).setPosition(i),i),this}addClef(t,e,i,s){return void 0===s||s===wt.BEGIN?this.clef=t:s===wt.END&&(this.endClef=t),this.addModifier(new ge(t,e,i),s),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,s=void 0===e;return i&&s?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):s?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let s=0;se[t[s+1].getCategory()]){const e=t[s];t[s]=t[s+1],t[s+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),s=this.getModifiers(wt.END);let n,a,r;this.sortByCategory(i,we),this.sortByCategory(s,Be),i.length>1&&t.getType()===Bt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new At(Bt.SINGLE))),s.indexOf(e)>0&&s.splice(0,0,new At(Bt.NONE));let h=0,b=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;n=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,n),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new x("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new x("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new x("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new x("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const s=t.getModifiers(wt.BEGIN,e);s.length>0&&s[0].getX()>i&&(i=s[0].getX())}));let s=0;t.forEach((t=>{s=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>s&&(s=i-t.getX())}));const n=t.getModifiers(wt.BEGIN);let a=!1;n.forEach((t=>{t.getCategory()===e&&(a=!0),a&&s>0&&t.setX(t.getX()+s)})),t.setNoteStartX(t.getNoteStartX()+s)}))};t.forEach((t=>{t.formatted||t.format()})),e(_.Clef),e(_.KeySignature),e(_.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,_.Barline).forEach((t=>{t.getType()==Bt.REPEAT_BEGIN&&t.setX(i)}))}))}}function Ce(t,e,i,s,n){if(e!==Pe.type.BOLD_DOUBLE_LEFT&&e!==Pe.type.BOLD_DOUBLE_RIGHT)throw new x("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let a=3,o=3.5;e===Pe.type.BOLD_DOUBLE_RIGHT&&(a=-5,o=3),t.fillRect(i+a,s,1,n-s),t.fillRect(i-2,s,o,n-s)}Ee.TEXT_FONT={family:F.SANS_SERIF,size:8,weight:k.NORMAL,style:D.NORMAL};class Pe extends W{static get CATEGORY(){return _.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Pe.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Pe.typeString[t]:t;return Object.values(Pe.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new x("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,s=this.width,n=this.top_stave.getX();(this.type===Pe.type.SINGLE_RIGHT||this.type===Pe.type.BOLD_DOUBLE_RIGHT||this.type===Pe.type.THIN_DOUBLE)&&(n=this.top_stave.getX()+this.top_stave.getWidth());let a=i-e;switch(this.type){case Pe.type.SINGLE:case Pe.type.SINGLE_LEFT:case Pe.type.SINGLE_RIGHT:s=1;break;case Pe.type.DOUBLE:n-=this.width+2,e-=this.thickness,a+=.5;break;case Pe.type.BRACE:{s=12;const n=this.top_stave.getX()-2+this.x_shift,o=e,r=n,h=i,b=n-s,l=o+a/2,c=b-.9*s,d=o+.2*a,m=n+1.1*s,g=l-.135*a,_=m,x=l+.135*a,u=c,p=h-.2*a,f=b-s,y=p,S=n+.4*s,T=l+.135*a,v=S,w=l-.135*a,B=f,E=d;t.beginPath(),t.moveTo(n,o),t.bezierCurveTo(c,d,m,g,b,l),t.bezierCurveTo(_,x,u,p,r,h),t.bezierCurveTo(f,y,S,T,b,l),t.bezierCurveTo(v,w,B,E,n,o),t.fill(),t.stroke();break}case Pe.type.BRACKET:e-=6,i+=6,a=i-e,Z.renderGlyph(t,n-5,e,40,"bracketTop"),Z.renderGlyph(t,n-5,i,40,"bracketBottom"),n-=this.width+2;break;case Pe.type.BOLD_DOUBLE_LEFT:Ce(t,this.type,n+this.x_shift,e,i-this.thickness);break;case Pe.type.BOLD_DOUBLE_RIGHT:Ce(t,this.type,n,e,i-this.thickness);break;case Pe.type.THIN_DOUBLE:s=1,a-=this.thickness;break;case Pe.type.NONE:break;default:throw new x("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Pe.type.BRACE&&this.type!==Pe.type.BOLD_DOUBLE_LEFT&&this.type!==Pe.type.BOLD_DOUBLE_RIGHT&&this.type!==Pe.type.NONE&&t.fillRect(n,e,s,a),this.type===Pe.type.THIN_DOUBLE&&t.fillRect(n-3,e,s,a),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new me);const s=(new Kt).addTickable(e).preFormat(),n=s.getMetrics();return s.setX(t+n.totalLeftPx),t+s.getWidth()+n.totalRightPx+i}),e)}static plotDebugging(t,e,i,s,n,a){const o=i+(a=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},a)).stavePadding,r=e.contextGaps;t.save(),t.setFont(F.SANS_SERIF,8),r.gaps.forEach((e=>{var i,a,r;i=o+e.x1,a=o+e.x2,r="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(r),t.setFillStyle(r),t.setLineWidth(1),t.fillRect(i,s,Math.max(a-i,0),n-s),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),o+e.x1,n+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${r.total.toFixed(2)}`,o-20,n+27),t.restore()}static FormatAndDraw(t,e,i,s){let n={auto_beam:!1,align_rests:!1};"object"==typeof s?n=Object.assign(Object.assign({},n),s):"boolean"==typeof s&&(n.auto_beam=s);const a=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(i),o=n.auto_beam?We.applyAndGetBeams(a):[];return(new De).joinVoices([a]).formatToStave([a],e,{align_rests:n.align_rests,stave:e}),a.setStave(e).draw(t,e),o.forEach((e=>e.setContext(t).draw())),a.getBoundingBox()}static FormatAndDrawTab(t,e,i,s,n,a,o){let r={auto_beam:a,align_rests:!1};"object"==typeof o?r=Object.assign(Object.assign({},r),o):"boolean"==typeof o&&(r.auto_beam=o);const h=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(n),b=new jt(V.TIME4_4).setMode(jt.Mode.SOFT).addTickables(s),l=r.auto_beam?We.applyAndGetBeams(h):[];(new De).joinVoices([h]).joinVoices([b]).formatToStave([h,b],i,{align_rests:r.align_rests}),h.draw(t,i),b.draw(t,e),l.forEach((e=>e.setContext(t).draw())),new Pe(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((s,n)=>{if(d(s)&&s.isRest()){if(s.getTuplet()&&!i)return;const a=s.getGlyphProps().position.toUpperCase();if("R/4"!==a&&"B/4"!==a)return;if(e||s.getBeam()){const e=s.getKeyProps()[0];if(0===n)e.line=ke(t,e.line,n,!1);else if(n>0&&nDe.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,s=0,n=0;const a=[],o=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new x("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:r,map:h}=this.tickContexts;this.minTotalWidth=0,r.forEach((e=>{const r=h[e];r.preFormat(),r.getTickables().length{s+=t.getMetrics().width,n+=t.getTicks().value(),a.push(t.getMetrics().width),o.push(t.getTicks().value())}));const b=r.getWidth();this.minTotalWidth+=b})),this.hasMinTotalWidth=!0;const b=s>0?s/a.length:1/a.length,l=w(a.map((t=>Math.pow(t-b,2)))),c=Math.pow(l/a.length,.5)/b,d=n/o.length,m=w(o.map((t=>Math.pow(t-d,2)))),g=Math.pow(m/o.length,.5)/d,_=Math.max(g,c)*r.length*e,u=e*i;return this.minTotalWidth+Math.max(u,_)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new x("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new x("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new x("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===jt.Mode.STRICT&&!i.isComplete())throw new x("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,B.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=De.getResolutionMultiplier(t),i=new Map,s=[];t.forEach((t=>{const n=new B(0,e);t.getTickables().forEach((t=>{const e=n.numerator;let a=i.get(t.getStave());if(a||(i.set(t.getStave(),{}),a=i.get(t.getStave())),!(a?a[e]:void 0)){const t=new me;s.push(t),a[e]=t}t.addToModifierContext(a[e]),n.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:s,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const s={},n=[],a=[],o=De.getResolutionMultiplier(t);return t.forEach(((t,r)=>{const h=new B(0,o);t.getTickables().forEach((t=>{const o=h.numerator;if(!s[o]){const t=e({tickID:o});a.push(t),s[o]=t,n.push(o)}i(t,s[o],r),h.add(t.getTicks())}))})),{map:s,array:a,list:n.sort(((t,e)=>t-e)),resolutionMultiplier:o}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,s){const n=this.tickContexts;if(!n)throw new x("NoTickContexts","preFormat requires TickContexts");const{list:a,map:o}=n;this.lossHistory=[],i&&s&&i.forEach((t=>t.setStave(s).preFormat()));let r=0,h=0;this.minTotalWidth=0;let b=0;a.forEach((t=>{const e=o[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const s=e.getMaxTicks().value();b+=s;const n=e.getMetrics();r=r+h+n.totalLeftPx,e.setX(r),h=i-n.totalLeftPx}));const{globalSoftmax:l,softmaxFactor:c,maxIterations:d}=this.formatterOptions,m=w(a.map((t=>Math.pow(c,o[t].getMaxTicks().value()/b))));if(this.minTotalWidth=r+h,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const g=o[a[0]],_=o[a[a.length-1]];function u(t){return a.map(((e,i)=>{const s=o[e],n=s.getTickablesByVoice();let r;if(i>0){const e=o[a[i-1]];for(let h=i-1;h>=0;h--){const i=o[a[h]].getTickablesByVoice(),d=[];if(Object.keys(n).forEach((t=>{i[t]&&d.push(t)})),d.length>0){let a=0,o=1/0,h=0;if(d.forEach((t=>{const e=i[t].getTicks().value();e>a&&(r=i[t],a=e);const s=n[t],h=s.getX()-(s.getMetrics().modLeftPx+s.getMetrics().leftDisplacedHeadPx),b=i[t].getMetrics(),l=i[t].getX()+b.notePx+b.modRightPx+b.rightDisplacedHeadPx;o=Math.min(o,h-l)})),o=Math.min(o,s.getX()-(e.getX()+.05*t)),l){const e=b;h=Math.pow(c,a/e)/m*t}else void 0!==r&&(h=r.getVoice().softmax(a)*t);return{expectedDistance:h,maxNegativeShiftPx:o,fromTickable:r}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function f(t){const e=y/2;let i=0;return a.forEach(((s,n)=>{const a=o[s];if(n>0){const e=a.getX(),s=t[n],o=p(s.fromTickable).getX()+s.expectedDistance-(e+i);let r=0;o>0?i+=o:o<0&&(r=Math.min(s.maxNegativeShiftPx,Math.abs(o)),i+=-r),a.setX(e+i)}a.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-a.getX())}))})),_.getX()-g.getX()}const y=t-_.getMetrics().notePx-_.getMetrics().totalRightPx-g.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),B=S.lookupMetric("stave.padding");let E=y;const C=u(E);let P=f(C);if(1===a.length)return 0;const k=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=_&&_.getMaxTickable();if(i){const s=i.getVoice();if(s.getTicksUsed().value()>s.getTotalTicks().value())return 2*vM&&F>0||P+A1;)E-=P-M,A=D(E),N=A-(v-T),P=f(u(E)),F--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const s=t.list[i-1],n=t.map[s],a=t.map[e],o=n.getMetrics(),r=a.getMetrics(),h=n.getX()+o.notePx+o.totalRightPx,b=a.getX()-r.totalLeftPx,l=b-h;this.contextGaps.total+=l,this.contextGaps.gaps.push({x1:h,x2:b}),a.getFormatterMetrics().freedom.left=l,n.getFormatterMetrics().freedom.right=l})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,s,n)=>{const a=t.getTicks().clone().simplify().toString(),o=t.getMetrics(),r=t.getFormatterMetrics(),h=t.getX()+o.notePx+o.modRightPx+o.rightDisplacedHeadPx;let b=0;if(s{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),n=t.getFormatterMetrics();n.space.mean=i[e].mean,n.duration=e,n.iterations+=1,n.space.deviation=n.space.used-n.space.mean,s+=Math.pow(n.space.deviation,2)}))})),this.totalCost=Math.sqrt(s),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const s=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let n=0;return this.totalShift=0,i.list.forEach(((t,e,a)=>{const o=i.map[t],r=e>0?i.map[a[e-1]]:void 0,h=et.getFormatterMetrics().space.deviation)));b>0?n=-Math.min(o.getFormatterMetrics().freedom.right,Math.abs(b)):b<0&&(n=h?Math.min(h.getFormatterMetrics().freedom.right,Math.abs(b)):0),n*=s,this.totalShift+=n})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const s=Object.assign({align_rests:!1},i);this.voices=t;const n=this.formatterOptions.softmaxFactor;return n&&this.voices.forEach((t=>t.setSoftmaxFactor(n))),this.alignRests(t,s.align_rests),this.createTickContexts(t),this.preFormat(e,s.context,t,s.stave),s.stave&&this.postFormat(),this}formatToStave(t,e,i){const s=Object.assign({context:e.getContext()},i),n=e.getNoteEndX()-e.getNoteStartX()-Ee.defaultPadding;return function(...t){De.DEBUG&&f("Vex.Flow.Formatter",t)}("Formatting voices to width: ",n),this.format(t,n,s)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ae;De.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ae||(Ae={}));class Ne extends W{static get CATEGORY(){return _.Tuplet}static get LOCATION_TOP(){return Ae.TOP}static get LOCATION_BOTTOM(){return Ae.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new x("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new x("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=V.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Ne.LOCATION_TOP),De.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=n(e,t),s=n(e,t);function n(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const a=n(e,t);i=a>i?a:i,s=a0&&(s=Math.min(a,s))}}}else{let t=Ne.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),s=i.checkStave().getYForLine(t)+Ne.metrics.noteHeadOffset;for(let t=0;ts&&(s=e)}}return s+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const s=(t,e)=>t+p(e.getMetrics().width);let n=this.numerator_glyphs.reduce(s,0);this.ratioed&&(n=this.denom_glyphs.reduce(s,n),n+=.32*this.point);const a=this.x_pos+this.width/2-n/2;if(this.bracketed){const e=this.width/2-n/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+n/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Ne.LOCATION_BOTTOM?1:0),1,10*this.location))}const o=V.currentMusicFont().lookupMetric("digits.shiftY",0);let r=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)})),this.ratioed){const e=a+r+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),r+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,a+r,this.y_pos+this.point/3-2+o),r+=p(e.getMetrics().width)}))}}}function Me(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?nt.DOWN:nt.UP}const Fe="L",Re="R",Oe="B";class We extends W{static get CATEGORY(){return _.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new B).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new B(3,i)];if(i>4)return[new B(2,i)];if(i<=4)return[new B(1,i)]}return[new B(1,4)]}static applyAndGetBeams(t,e,i){return We.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new B(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new x("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),s=t;let n=0,a=[],o=[];function r(){i.length-1>n?n+=1:n=0}!function(){let t=[],e=new B(0,1);s.forEach((s=>{if(t=[],s.shouldIgnoreTicks())return a.push(o),void(o=t);o.push(s);const h=i[n].clone(),b=(l=o,l.reduce(((t,e)=>e.getTicks().clone().add(t)),new B(0,1))).add(e);var l;const c=V.durationToNumber(s.getDuration())<8;if(c&&s.getTuplet()&&(h.numerator*=2),b.greaterThan(h)){if(!c){const e=o.pop();e&&t.push(e)}a.push(o);do{e=b.subtract(i[n]),r()}while(e.greaterThanEquals(i[n]));o=t}else b.equals(h)&&(a.push(o),e=new B(0,1),o=t,r())})),o.length>0&&a.push(o)}(),function(){const t=[];a.forEach((i=>{let s=[];i.forEach(((i,n,a)=>{const o=0===n||n===a.length-1,r=a[n-1],h=!e.beam_rests&&i.isRest(),b=e.beam_rests&&e.beam_middle_only&&i.isRest()&&o;let l=!1;if(e.maintain_stem_directions&&r&&!i.isRest()&&!r.isRest()){const t=r.getStemDirection();l=i.getStemDirection()!==t}const c=parseInt(i.getDuration(),10)<8;h||b||l||c?(s.length>0&&t.push(s),s=l?[i]:[]):s.push(i)})),s.length>0&&t.push(s)})),a=t}(),a.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const h=a.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),b=function(){const t=[];return a.forEach((e=>{let i;e.forEach((e=>{const s=e.getTuplet();s&&i!==s&&(i=s,t.push(i))}))})),t}(),l=[];return h.forEach((t=>{const i=new We(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),l.push(i)})),b.forEach((t=>{const e=t.notes[0].stem_direction===nt.DOWN?Ae.BOTTOM:Ae.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new x("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,s;this.stem_direction=t[0].getStemDirection();let n=this.stem_direction;if(e&&d(t[0]))n=Me(t);else if(e&&g(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);n=e>-1?nt.UP:nt.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,s){return i+(t-e)*s}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:s,slope_iterations:n,slope_cost:a}}=this,o=t[0],r=function(t,e){const i=t.getStemExtents().topY,s=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-s)}(o,t[t.length-1]),h=(i-s)/n;let b=Number.MAX_VALUE,l=0,c=0;for(let n=s;n<=i;n+=h){let i=0,s=0;for(let a=1;an)&&(h=n,o=Math.min(...s.getYs()),r=s.getBeamCount())}let b=a/t.length;const l=s+r*(1.5*i),c=o+l*-e;e===nt.DOWN&&bc&&(b=o-l),n?(e===nt.DOWN&&b>n||e===nt.UP&&b=8&&(l=-1!==this.break_on_indices.indexOf(h),this.render_options.secondary_break_ticks&&r>=this.render_options.secondary_break_ticks&&(r=0,l=!0));const c=b.getIntrinsicTicks(){const i=e.getStem();if(i){const s=e.getStemX();i.setNoteHeadXBounds(s,s),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let s=this.getBeamYToDraw();const n=i.getStemX(),a=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||n>0||(this.pos=s),o?this.matchSuccess():this.matchFail(s),{success:o,results:i,numMatches:n}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ue("Evaluating rule function:",t),!t)throw new x("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ue(i),new x("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const s=[];return e.matches=s,e.results&&e.results.forEach((t=>s.push(Ye(t)))),i.run&&e.success&&i.run({matches:s}),e}}function je(...t){Qe.DEBUG&&f("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class Xe{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){je("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){je("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){je("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){je("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){je("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){je("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){je("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){je("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),je("endChord")}commitPiece(){je("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),s=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:n,duration:a,dots:o,type:r}=this.piece,h=et.accidentals,b=n.map((t=>{var e;return t.key+(h.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),l="auto"===i,c="g"==(null==r?void 0:r.toLowerCase())?t.GhostNote({duration:a,dots:o}):t.StaveNote({keys:b,duration:a,dots:o,type:r,clef:s,auto_stem:l});l||c.setStemDirection("up"===i?nt.UP:nt.DOWN);const d=[];n.forEach(((e,i)=>{const s=e.accid;if("string"==typeof s){const e=t.Accidental({type:s});c.addModifier(e,i),d.push(e)}else d.push(void 0)}));for(let t=0;tt(e,c,this))),this.elements.notes.push(c),this.elements.accidentals.push(d),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const s=t.factory,n=null!==(e=t.builder)&&void 0!==e?e:new Ke(s);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ft.easyScoreHook,Wt.easyScoreHook],throwOnError:!1},t),{factory:s,builder:n}),this.factory=s,this.builder=n,this.grammar=new Xe(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw je(i),new x("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends It{static get CATEGORY(){return _.GhostNote}constructor(t){if(!t)throw new x("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new x("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=ri.type.TEXT&&t<=ri.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,s=!1;this.notes.forEach(((n,a,o)=>{s=!s;const r=n.getAbsoluteX(),h=n.checkStave().getYForBottomText(this.line+3);if(r{e=!e;const s=i.checkStave(),n=i.getAbsoluteX(),a=s.getYForBottomText(this.line+3),o=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let r=0;e?this.custom_depress_text?(r=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,n-r/2,a)):oi("pedal_depress",t,n,a,o):this.custom_release_text?(r=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,n-r/2,a)):oi("pedal_release",t,n,a,o)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){ri.DEBUG&&f("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===ri.type.BRACKET||this.type===ri.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===ri.type.TEXT&&this.drawText(),t.restore()}}ri.DEBUG=!1,ri.TEXT_FONT={family:F.SERIF,size:12,weight:k.BOLD,style:D.ITALIC},ri.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},ri.type={TEXT:1,BRACKET:2,MIXED:3},ri.typeString={text:ri.type.TEXT,bracket:ri.type.BRACKET,mixed:ri.type.MIXED};const hi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class bi extends ei{static get CATEGORY(){return _.RepeatNote}constructor(t,e,i){super(new Z(hi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function li(t,e,i,s,n,a,o){t.beginPath(),t.moveTo(e,i),t.lineTo(s,n),t.lineTo(a,o),t.lineTo(e,i),t.closePath(),t.fill()}class ci extends W{static get CATEGORY(){return _.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:ci.TextVerticalPosition.TOP,text_justification:ci.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new x("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new x("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const s=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,n=e.x,a=e.y,o=i.x,r=i.y,h=Math.sqrt((o-n)*(o-n)+(r-a)*(r-a)),b=(h-this.render_options.arrowhead_length/3)/h;let l,c,d,m;this.render_options.draw_end_arrow||s?(l=Math.round(n+(o-n)*b),c=Math.round(a+(r-a)*b)):(l=o,c=r),this.render_options.draw_start_arrow||s?(d=n+(o-n)*(1-b),m=a+(r-a)*(1-b)):(d=n,m=a),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(d,m),t.lineTo(l,c),t.stroke(),t.closePath();const g=Math.atan2(r-a,o-n),_=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let x,u,p,f,y,S;(this.render_options.draw_end_arrow||s)&&(x=g+Math.PI+this.render_options.arrowhead_angle,p=o+Math.cos(x)*_,f=r+Math.sin(x)*_,u=g+Math.PI-this.render_options.arrowhead_angle,y=o+Math.cos(u)*_,S=r+Math.sin(u)*_,li(t,p,f,o,r,y,S)),(this.render_options.draw_start_arrow||s)&&(x=g+this.render_options.arrowhead_angle,p=n+Math.cos(x)*_,f=a+Math.sin(x)*_,u=g-this.render_options.arrowhead_angle,y=n+Math.cos(u)*_,S=a+Math.sin(u)*_,li(t,p,f,n,a,y,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,s=this.render_options;t.save(),this.applyLineStyle();let n={x:0,y:0},a={x:0,y:0};this.first_indices.forEach(((o,r)=>{const h=this.last_indices[r];n=e.getModifierStartXY(2,o),a=i.getModifierStartXY(1,h);const b=n.y>a.y;n.x+=e.getMetrics().modRightPx+s.padding_left,a.x-=i.getMetrics().modLeftPx+s.padding_right;const l=e.getGlyphProps().getWidth();e.getKeyProps()[o].displaced&&1===e.getStemDirection()&&(n.x+=l+s.padding_left);i.getKeyProps()[h].displaced&&-1===i.getStemDirection()&&(a.x-=l+s.padding_right),n.y+=b?-3:1,a.y+=b?2:0,this.drawArrowLine(t,n,a)})),t.restore();const o=t.measureText(this.text).width,r=s.text_justification;let h=0;if(r===ci.TextJustification.LEFT)h=n.x;else if(r===ci.TextJustification.CENTER){h=(a.x-n.x)/2+n.x-o/2}else r===ci.TextJustification.RIGHT&&(h=a.x-o);let b=0;const l=s.text_position_vertical;return l===ci.TextVerticalPosition.TOP?b=e.checkStave().getYForTopText():l===ci.TextVerticalPosition.BOTTOM&&(b=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,h,b),t.restore(),this}}ci.TEXT_FONT=Object.assign({},W.TEXT_FONT),ci.TextVerticalPosition={TOP:1,BOTTOM:2},ci.TextJustification=oe;class di extends W{static get CATEGORY(){return _.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new x("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),s=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),n=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),a=this.getContext();return n.voices.forEach((t=>{t.setContext(a).setStave(s).getTickables().forEach((t=>t.setStave(s))),this.partVoices.push(t)})),this.partStaves.push(s),this.partStaveInfos.push(n),s}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new De(t);this.formatter=i;let s=this.options.y,n=0;const a=[];this.partStaves.forEach(((t,e)=>{s+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(s),s+=t.space(this.partStaveInfos[e].spaceBelow),s+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(a.push({y:s,stave:t}),s+=15),n=Math.max(n,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(n))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Ee.rightPadding+(n-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(n-this.options.x):this.options.width-(n-this.options.x)-Ee.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class mi extends It{static get CATEGORY(){return _.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new x("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new x("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=nt.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:s}}=this,n=this.checkContext(),a=null==e&&s;if(i.flag&&a){const e=this.getStemX(),i=this.getStemDirection()===nt.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(n,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{r(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),s=this.render_options.draw_stem,n=this.render_options.draw_stem_through_stave;if(s&&n){const s=function(t,e,i,s){const n=1!==s,a=-1!==s,o=i.getSpacingBetweenLines(),r=i.getNumLines(),h=[];return e.forEach((e=>{const b=e.indexOf(r)>-1,l=e.indexOf(1)>-1;if(n&&l||a&&b)return;1===e.length&&e.push(e[0]);const c=[];e.forEach(((e,n,a)=>{const h=1===e,b=e===r;let l=i.getYForLine(e-1);0!==n||h?n!==a.length-1||b||(l+=o/2-1):l-=o/2-1,c.push(l),1===s&&h?c.push(t-2):-1===s&&b&&c.push(t+2)})),h.push(c.sort(((t,e)=>t-e)))})),h}(e,function(t,e){const i=[];let s=[];for(let n=1;n<=t;n++)e.indexOf(n)>-1?(i.push(s),s=[]):s.push(n);return s.length>0&&i.push(s),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(nt.WIDTH),s.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),s=this.ys;for(let n=0;n{const i=fi.GLYPHS[e];if(!i)throw new x("Invalid dynamics character: "+e);const s=p(this.render_options.glyph_font_size),n=new Z(i.code,s,{category:"textNote"});this.glyphs.push(n),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,s)=>{const n=this.sequence[s];t.render(this.checkContext(),i,e),i+=fi.GLYPHS[n].width}))}}fi.DEBUG=!1;class yi extends vt{static get CATEGORY(){return _.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends W{static get CATEGORY(){return _.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,s=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=s-i,function(...t){Si.DEBUG&&f("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",s,"y:",e),ce.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&f("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:s}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new x("renderer.elementId not set in FactoryOptions");let n=this.options.renderer.backend;if(void 0===n){n=qt(document.getElementById(t))?he.Backends.CANVAS:he.Backends.SVG}this.context=he.buildContext(t,n,e,i,s)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),s=new Ee(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),s=new gi(i.x,i.y,i.width,i.options);return this.staves.push(s),s.setContext(this.context),this.stave=s,s}StaveNote(t){const e=new Gt(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const s=new ei(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}RepeatNote(t,e,i){const s=new bi(t,e,i);return this.stave&&s.setStave(this.stave),s.setContext(this.context),this.renderQ.push(s),s}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new fe(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Nt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new Le(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new yi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new si(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new mi(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new Xt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new st(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:lt.CENTER,vJustify:ct.BOTTOM},t),i=new dt(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Rt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ft(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),s=new $t(t);return s.setPosition(i.position),i.upperAccidental&&s.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&s.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&s.setDelayed(i.delayed),s.setContext(this.context),s}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new fi({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Wt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new be(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new me}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ai(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new jt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Pe(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new De(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Ne(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,s,n,a;const o=new We(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return o.breakSecondaryAt(null!==(s=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==s?s:[]),(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections)&&Object.entries(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections).forEach((([t,e])=>{o.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(o),o}Curve(t){const e=new Ge(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Ut({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const s=new ci({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&s.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&s.setFont(t.options.font),s.setContext(this.context),this.renderQ.push(s),s}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new ui({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new di(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new ri(e.notes);return i.setType(ri.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},W.TEXT_FONT);class wi extends mi{static get CATEGORY(){return _.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${F.SANS_SERIF}`}),this.updateWidth()}}class Bi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new x("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;es?Ci.SLIDE_DOWN:Ci.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new x("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,s=t.first_ys,n=t.last_x_px,a=t.direction;if(a!==Ci.SLIDE_UP&&a!==Ci.SLIDE_DOWN)throw new x("BadSlide","Invalid slide direction");const o=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new x("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),s=Number(t);if(s<0)throw new x("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+s}getNoteForFret(t,e){const i=this.getValueForFret(t,e),s=Math.floor(i/12),n=i%12;return`${V.integerToNote(n)}/${s}`}}var Di=function(t,e,i,s){return new(i||(i=Promise))((function(n,a){function o(t){try{h(s.next(t))}catch(t){a(t)}}function r(t){try{h(s.throw(t))}catch(t){a(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,r)}h((s=s.apply(t,e||[])).next())}))};class Ai{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>F.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return Di(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ai.Accidental=st,Ai.Annotation=dt,Ai.Articulation=ft,Ai.Barline=At,Ai.BarNote=Nt,Ai.Beam=We,Ai.Bend=Mt,Ai.BoundingBox=C,Ai.BoundingBoxComputation=P,Ai.CanvasContext=Zt,Ai.ChordSymbol=Rt,Ai.Clef=ge,Ai.ClefNote=Le,Ai.Crescendo=Ie,Ai.Curve=Ge,Ai.Dot=Ot,Ai.EasyScore=Qe,Ai.Element=W,Ai.Factory=vi,Ai.Font=F,Ai.Formatter=De,Ai.Fraction=B,Ai.FretHandFinger=Wt,Ai.GhostNote=ti,Ai.Glyph=Z,Ai.GlyphNote=ei,Ai.GraceNote=ii,Ai.GraceNoteGroup=Xt,Ai.GraceTabNote=wi,Ai.KeyManager=Bi,Ai.KeySignature=_e,Ai.KeySigNote=si,Ai.Modifier=tt,Ai.ModifierContext=me,Ai.MultiMeasureRest=ai,Ai.Music=et,Ai.Note=vt,Ai.NoteHead=Lt,Ai.NoteSubGroup=Vt,Ai.Ornament=$t,Ai.Parenthesis=Jt,Ai.Parser=He,Ai.PedalMarking=ri,Ai.Registry=O,Ai.RenderContext=yt,Ai.Renderer=he,Ai.RepeatNote=bi,Ai.Repetition=xe,Ai.Stave=Ee,Ai.StaveConnector=Pe,Ai.StaveHairpin=Ei,Ai.StaveLine=ci,Ai.StaveModifier=Dt,Ai.StaveNote=Gt,Ai.StaveTempo=pe,Ai.StaveText=ye,Ai.StaveTie=Ut,Ai.Stem=nt,Ai.StringNumber=be,Ai.Stroke=le,Ai.SVGContext=se,Ai.System=di,Ai.TabNote=mi,Ai.TabSlide=Ci,Ai.TabStave=gi,Ai.TabTie=Yt,Ai.TextBracket=ui,Ai.TextDynamics=fi,Ai.TextFormatter=bt,Ai.TextNote=fe,Ai.TickContext=Kt,Ai.TimeSignature=ve,Ai.TimeSigNote=yi,Ai.Tremolo=Pi,Ai.Tuning=ki,Ai.Tuplet=Ne,Ai.Vibrato=ce,Ai.VibratoBracket=Si,Ai.Voice=jt,Ai.Volta=Se,Ai.AnnotationHorizontalJustify=lt,Ai.AnnotationVerticalJustify=ct,Ai.ChordSymbolHorizontalJustify=Et,Ai.ChordSymbolVerticalJustify=Ct,Ai.SymbolTypes=Pt,Ai.SymbolModifiers=kt,Ai.CurvePosition=ze,Ai.FontWeight=k,Ai.FontStyle=D,Ai.ModifierPosition=J,Ai.RendererBackends=ne,Ai.RendererLineEndType=ae,Ai.BarlineType=Bt,Ai.StaveModifierPosition=wt,Ai.VoltaType=re,Ai.TextBracketPosition=xi,Ai.TextJustification=oe,Ai.VoiceMode=Ht;const Ni={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},Mi={name:"VexFlowCustom",smufl:!1,glyphs:{}};const Fi={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Ri={name:"Petaluma",smufl:!0,stave:{padding:15,endPaddingMax:15,endPaddingMin:7,unalignedNotePadding:12},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-150,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["L"],spacing:20,superSubRatio:.73},glyphs:{csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:15},brassFallRoughMedium:{xOffset:16,yOffset:26,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:3,yOffset:-8,stemUpYOffset:28,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:26,reportedWidth:5},brassMuteOpen:{xOffset:4,yOffset:-8,stemUpYOffset:27,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:6,yOffset:-4,stemUpYOffset:5,reportedWidth:30},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:5,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:22,tupletPoint:16,shiftY:-2},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:13,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:8,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2,displacedShiftX:-2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemDown:1.8,offsetYBaseStemUp:-1.8},noteheadBlack:{offsetYBaseStemDown:2,offsetYBaseStemUp:-2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:20},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.77,flag16thUp:{shiftX:-.75},flag32ndUp:{shiftX:-.85},flag64thUp:{shiftX:-1.55},flag128thUp:{shiftX:-1.3},flag16thDown:{shiftX:-.75},flag32ndDown:{shiftX:-.76},flag64thDown:{shiftX:-1.5},flag128thDown:{shiftX:-1.2},staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-10,shiftY:8},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{noteheadBlackStemUp:{shiftX:.5},noteheadHalfStemUp:{shiftX:.725},noteheadWholeStemUp:{shiftX:1}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.95},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.7},csymMajorSeventh:{scale:.8},accidentalSharp:{scale:.7},accidentalFlat:{scale:.8}}}};const Oi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Wi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Li={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Ii={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},zi={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Gi{static sortAndUnique(t,e,i){if(t.length>1){const s=[];let n;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","/**\n * The Petaluma font was created by Steinberg Media.\n * https://github.com/steinbergmedia/petaluma\n */\nexport const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n stave: {\n padding: 15,\n endPaddingMax: 15,\n endPaddingMin: 7,\n unalignedNotePadding: 12,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -150,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['L'],\n spacing: 20,\n superSubRatio: 0.73,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 26,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 28,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 26,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 4,\n yOffset: -8,\n stemUpYOffset: 27,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 6,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 30,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 13,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 8,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n displacedShiftX: -2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemDown: 1.8,\n offsetYBaseStemUp: -1.8,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 20,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.77,\n flag16thUp: {\n shiftX: -0.75,\n },\n flag32ndUp: {\n shiftX: -0.85,\n },\n flag64thUp: {\n shiftX: -1.55,\n },\n flag128thUp: {\n shiftX: -1.3,\n },\n flag16thDown: {\n shiftX: -0.75,\n },\n flag32ndDown: {\n shiftX: -0.76,\n },\n flag64thDown: {\n shiftX: -1.5,\n },\n flag128thDown: {\n shiftX: -1.2,\n },\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n noteheadBlackStemUp: {\n shiftX: 0.5,\n },\n noteheadHalfStemUp: {\n shiftX: 0.725,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.7,\n },\n csymMajorSeventh: {\n scale: 0.8,\n },\n accidentalSharp: {\n scale: 0.7,\n },\n accidentalFlat: {\n scale: 0.8,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { PetalumaFont } from './petaluma_glyphs';\nimport { PetalumaMetrics } from './petaluma_metrics';\nexport function loadPetaluma() {\n Font.load('Petaluma', PetalumaFont, PetalumaMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow-petaluma.ts is the entry point for vexflow-petaluma.js.\n// This version bundles the Petaluma music engraving font.\nimport { Flow } from '../src/flow';\nimport { loadCustom } from '../src/fonts/load_custom';\nimport { loadPetaluma } from '../src/fonts/load_petaluma';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadPetaluma();\nloadCustom();\nFlow.setMusicFont('Petaluma', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","CustomFont","noteheadSquareWhite","noteheadSquareBlack","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","CustomMetrics","smufl","PetalumaFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalKomaSharp","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","PetalumaMetrics","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","displacedShiftX","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","arrowheadBlackDown","arrowheadBlackUp","stroke_wiggly","noteheadBlackStemUp","noteheadHalfStemUp","noteheadWholeStemUp","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/cjs/vexflow.js b/build/cjs/vexflow.js deleted file mode 100644 index 97687f1a92..0000000000 --- a/build/cjs/vexflow.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * VexFlow 4.2.0-beta.1 2023-01-10T00:21:01.976Z 0882a0dadf7dc89b98f0b26593d26ed4d8e34341 - * Copyright (c) 2010 Mohit Muthanna Cheppudira - * https://www.vexflow.com https://github.com/0xfe/vexflow - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Vex=e():t.Vex=e()}("undefined"!=typeof window?window:"undefined"!=typeof globalThis?globalThis:this,(()=>(()=>{"use strict";var t={d:(e,i)=>{for(var b in i)t.o(i,b)&&!t.o(e,b)&&Object.defineProperty(e,b,{enumerable:!0,get:i[b]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var e={};t.d(e,{default:()=>i});var i={};function b(t,e,i=!0){if("object"!=typeof t||null===t)return!1;let b=t.constructor;if(i){for(;null!==t;){if(b=t.constructor,"CATEGORY"in b&&b.CATEGORY===e)return!0;t=Object.getPrototypeOf(t)}return!1}return"CATEGORY"in b&&b.CATEGORY===e}t.r(i),t.d(i,{Accidental:()=>bt,Annotation:()=>ct,AnnotationHorizontalJustify:()=>ht,AnnotationVerticalJustify:()=>mt,Articulation:()=>ut,BEAM_BOTH:()=>Oe,BEAM_LEFT:()=>Ae,BEAM_RIGHT:()=>Ne,BarNote:()=>Mt,Barline:()=>Et,BarlineType:()=>zt,Beam:()=>Re,Bend:()=>Ft,BoundingBox:()=>D,BoundingBoxComputation:()=>C,Builder:()=>Ke,CanvasContext:()=>Zt,Category:()=>x,ChordSymbol:()=>Nt,ChordSymbolHorizontalJustify:()=>Bt,ChordSymbolVerticalJustify:()=>Dt,Clef:()=>_e,ClefNote:()=>We,Crescendo:()=>Le,Curve:()=>Ie,CurvePosition:()=>Ue,Dot:()=>Ot,EasyScore:()=>Qe,EasyScoreGrammar:()=>je,Element:()=>R,Factory:()=>vi,Flow:()=>Ei,Font:()=>A,FontStyle:()=>k,FontWeight:()=>P,Formatter:()=>ke,Fraction:()=>z,FretHandFinger:()=>Rt,GhostNote:()=>ti,Glyph:()=>Z,GlyphNote:()=>ei,GraceNote:()=>ii,GraceNoteGroup:()=>jt,GraceTabNote:()=>wi,KeyManager:()=>zi,KeySigNote:()=>bi,KeySignature:()=>xe,Modifier:()=>tt,ModifierContext:()=>de,ModifierPosition:()=>J,MultiMeasureRest:()=>ni,Music:()=>et,Note:()=>vt,NoteHead:()=>Wt,NoteSubGroup:()=>Vt,Ornament:()=>$t,OutlineCode:()=>$,Parenthesis:()=>Jt,Parser:()=>He,PedalMarking:()=>li,Piece:()=>Ve,Registry:()=>O,RenderContext:()=>ft,Renderer:()=>oe,RendererBackends:()=>ae,RendererLineEndType:()=>ne,RepeatNote:()=>ri,Repetition:()=>ge,RuntimeError:()=>g,SVGContext:()=>be,Stave:()=>Be,StaveConnector:()=>Ce,StaveHairpin:()=>Bi,StaveLine:()=>mi,StaveModifier:()=>kt,StaveModifierPosition:()=>wt,StaveNote:()=>It,StaveSection:()=>ye,StaveTempo:()=>pe,StaveText:()=>fe,StaveTie:()=>Yt,Stem:()=>at,StemmableNote:()=>Lt,StringNumber:()=>re,Stroke:()=>he,SymbolModifiers:()=>Pt,SymbolTypes:()=>Ct,System:()=>ci,TabNote:()=>di,TabSlide:()=>Di,TabStave:()=>_i,TabTie:()=>Gt,TextBracket:()=>yi,TextBracketPosition:()=>gi,TextDynamics:()=>ui,TextFormatter:()=>rt,TextJustification:()=>se,TextNote:()=>ue,TickContext:()=>Kt,Tickable:()=>Tt,TimeSigNote:()=>fi,TimeSignature:()=>ve,TimeSignatureGlyph:()=>Te,Tremolo:()=>Ci,Tuning:()=>Pi,Tuplet:()=>Me,TupletLocation:()=>Ee,Vex:()=>Vi,Vibrato:()=>me,VibratoBracket:()=>Si,Voice:()=>Xt,VoiceMode:()=>Ht,Volta:()=>Se,VoltaType:()=>le,defined:()=>p,drawDot:()=>St,globalObject:()=>y,isAccidental:()=>a,isAnnotation:()=>n,isBarline:()=>s,isCategory:()=>b,isDot:()=>l,isGraceNote:()=>o,isGraceNoteGroup:()=>r,isHTMLCanvas:()=>qt,isHTMLDiv:()=>Qt,isNote:()=>h,isRenderContext:()=>m,isStaveNote:()=>c,isStemmableNote:()=>d,isTabNote:()=>_,log:()=>u,midLine:()=>S,normalizeAngle:()=>v,prefix:()=>T,sumArray:()=>w,warn:()=>f});const a=t=>b(t,x.Accidental),n=t=>b(t,x.Annotation),s=t=>b(t,x.Barline),l=t=>b(t,x.Dot),o=t=>b(t,x.GraceNote),r=t=>b(t,x.GraceNoteGroup),h=t=>b(t,x.Note),m=t=>b(t,x.RenderContext),c=t=>b(t,x.StaveNote),d=t=>b(t,x.StemmableNote),_=t=>b(t,x.TabNote);var x;!function(t){t.Accidental="Accidental",t.Annotation="Annotation",t.Articulation="Articulation",t.Barline="Barline",t.BarNote="BarNote",t.Beam="Beam",t.Bend="Bend",t.ChordSymbol="ChordSymbol",t.Clef="Clef",t.ClefNote="ClefNote",t.Crescendo="Crescendo",t.Curve="Curve",t.Dot="Dot",t.Element="Element",t.Fraction="Fraction",t.FretHandFinger="FretHandFinger",t.GhostNote="GhostNote",t.Glyph="Glyph",t.GlyphNote="GlyphNote",t.GraceNote="GraceNote",t.GraceNoteGroup="GraceNoteGroup",t.GraceTabNote="GraceTabNote",t.KeySignature="KeySignature",t.KeySigNote="KeySigNote",t.Modifier="Modifier",t.MultiMeasureRest="MultiMeasureRest",t.Note="Note",t.NoteHead="NoteHead",t.NoteSubGroup="NoteSubGroup",t.Ornament="Ornament",t.Parenthesis="Parenthesis",t.PedalMarking="PedalMarking",t.RenderContext="RenderContext",t.RepeatNote="RepeatNote",t.Repetition="Repetition",t.Stave="Stave",t.StaveConnector="StaveConnector",t.StaveHairpin="StaveHairpin",t.StaveLine="StaveLine",t.StaveModifier="StaveModifier",t.StaveNote="StaveNote",t.StaveSection="StaveSection",t.StaveTempo="StaveTempo",t.StaveText="StaveText",t.StaveTie="StaveTie",t.Stem="Stem",t.StemmableNote="StemmableNote",t.StringNumber="StringNumber",t.Stroke="Stroke",t.System="System",t.TabNote="TabNote",t.TabSlide="TabSlide",t.TabStave="TabStave",t.TabTie="TabTie",t.TextBracket="TextBracket",t.TextDynamics="TextDynamics",t.TextNote="TextNote",t.Tickable="Tickable",t.TimeSignature="TimeSignature",t.TimeSigNote="TimeSigNote",t.Tremolo="Tremolo",t.Tuplet="Tuplet",t.Vibrato="Vibrato",t.VibratoBracket="VibratoBracket",t.Voice="Voice",t.Volta="Volta"}(x||(x={}));class g extends Error{constructor(t,e=""){super("[RuntimeError] "+t+": "+e),this.code=t}}function y(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==t.g?t.g:Function("return this")()}function p(t,e="undefined",i=""){if(void 0===t)throw new g(e,i);return t}function u(t,...e){if(!e)return;const i=Array.prototype.slice.call(e).join(" ");y().console.log(t+": "+i)}function f(...t){const e=t.join(" "),i=new Error;y().console.log("Warning: ",e,i.stack)}function S(t,e){let i=e+(t-e)/2;var b,a;return i%2>0&&(i=((b=10*i)%(a=5)>=a/2?parseInt(""+b/a,10)*a+a:parseInt(""+b/a,10)*a)/10),i}function T(t){return`vf-${t}`}function v(t){return(t%=2*Math.PI)<0&&(t+=2*Math.PI),t}function w(t){return t.reduce(((t,e)=>t+e),0)}class z{static get CATEGORY(){return x.Fraction}static GCD(t,e){if("number"!=typeof t||Number.isNaN(t)||"number"!=typeof e||Number.isNaN(e))throw new g("BadArgument",`Invalid numbers: ${t}, ${e}`);let i;for(;0!==e;)i=e,e=t%e,t=i;return t}static LCM(t,e){return t*e/z.GCD(t,e)}static LCMM(t){return 0===t.length?0:1===t.length?t[0]:2===t.length?z.LCM(t[0],t[1]):z.LCM(t.shift(),z.LCMM(t))}constructor(t,e){this.numerator=1,this.denominator=1,this.set(t,e)}set(t=1,e=1){return this.numerator=t,this.denominator=e,this}value(){return this.numerator/this.denominator}simplify(){let t=this.numerator,e=this.denominator;const i=z.GCD(t,e);return t/=i,e/=i,e<0&&(e=-e,t=-t),this.set(t,e)}add(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n+i*s;return this.set(l,a)}subtract(t=0,e=1){const[i,b]=B(t,e),a=z.LCM(this.denominator,b),n=a/this.denominator,s=a/b,l=this.numerator*n-i*s;return this.set(l,a)}multiply(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*i,this.denominator*b)}divide(t=1,e=1){const[i,b]=B(t,e);return this.set(this.numerator*b,this.denominator*i)}equals(t){const e=z.__staticFractionA.copy(t).simplify(),i=z.__staticFractionB.copy(this).simplify();return e.numerator===i.numerator&&e.denominator===i.denominator}greaterThan(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>0}greaterThanEquals(t){const e=z.__staticFractionB.copy(this);return e.subtract(t),e.numerator>=0}lessThan(t){return!this.greaterThanEquals(t)}lessThanEquals(t){return!this.greaterThan(t)}clone(){return new z(this.numerator,this.denominator)}copy(t){return"number"==typeof t?this.set(t,1):this.set(t.numerator,t.denominator)}quotient(){return Math.floor(this.numerator/this.denominator)}remainder(){return this.numerator%this.denominator}makeAbs(){return this.denominator=Math.abs(this.denominator),this.numerator=Math.abs(this.numerator),this}toString(){return`${this.numerator}/${this.denominator}`}toSimplifiedString(){return z.__staticFractionTmp.copy(this).simplify().toString()}toMixedString(){let t="";const e=this.quotient(),i=z.__staticFractionTmp.copy(this);return e<0&&i.makeAbs(),0!==e?(t+=e,0!==i.numerator&&(t+=` ${i.toSimplifiedString()}`)):t=0===i.numerator?"0":i.toSimplifiedString(),t}parse(t){const e=t.split("/"),i=parseInt(e[0],10),b=e[1]?parseInt(e[1],10):1;return this.set(i,b)}}function B(t,e=1){return"number"==typeof t?[t,e]:[t.numerator,t.denominator]}z.__staticFractionA=new z,z.__staticFractionB=new z,z.__staticFractionTmp=new z;class D{static copy(t){return new D(t.x,t.y,t.w,t.h)}constructor(t,e,i,b){this.x=t,this.y=e,this.w=i,this.h=b}getX(){return this.x}getY(){return this.y}getW(){return this.w}getH(){return this.h}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setW(t){return this.w=t,this}setH(t){return this.h=t,this}move(t,e){return this.x+=t,this.y+=e,this}clone(){return D.copy(this)}mergeWith(t){const e=t,i=this.xthis.x2)&&(this.x2=t),(isNaN(this.y1)||ethis.y2)&&(this.y2=e)}addX(t){this.addPoint(t,this.y1)}addY(t){this.addPoint(this.x1,t)}addQuadraticCurve(t,e,i,b,a,n){this.addPoint(t,e),this.addPoint(a,n);const s=i-t;let l=s-(a-i);if(0!=l){const e=s/l;if(e>0&&e<1){const b=1-e;this.addX(b*b*t+2*b*e*i+e*e*a)}}const o=b-e;if(l=o-(n-b),0!=l){const t=o/l;if(t>0&&t<1){const i=1-t;this.addY(i*i*e+2*i*t*b+t*t*n)}}}addBezierCurve(t,e,i,b,a,n,s,l){const o=[t,e],r=[i,b],h=[a,n],m=[s,l];let c;this.addPoint(o[0],o[1]),this.addPoint(m[0],m[1]);const d=(t,e)=>Math.pow(1-t,3)*o[e]+3*Math.pow(1-t,2)*t*r[e]+3*(1-t)*Math.pow(t,2)*h[e]+Math.pow(t,3)*m[e];for(c=0;c<=1;c++){const t=6*o[c]-12*r[c]+6*h[c],e=-3*o[c]+9*r[c]-9*h[c]+3*m[c],i=3*r[c]-3*o[c];if(0===e){if(0===t)continue;const e=-i/t;0=600;{const e=parseInt(t,10);return isNaN(e)?"bold"===t.toLowerCase():e>=600}}return!1}static isItalic(t){return!!t&&t.toLowerCase()===k.ITALIC}static loadWebFont(t,e,i=!0){return E(this,void 0,void 0,(function*(){const b=new FontFace(t,(i?`url(${e}2) format('woff2'), `:"")+`url(${e}) format('woff')`);return yield b.load(),document.fonts.add(b),b}))}static loadWebFonts(){return E(this,void 0,void 0,(function*(){const t=A.WEB_FONT_HOST,e=A.WEB_FONT_FILES;for(const i in e){const b=e[i];A.loadWebFont(i,t+b)}}))}static load(t,e,i){let b=F[t];return b||(b=new A(t),F[t]=b),e&&b.setData(e),i&&b.setMetrics(i),b}constructor(t){this.name=t}getName(){return this.name}getData(){return p(this.data,"FontError","Missing font data")}getMetrics(){return p(this.metrics,"FontError","Missing metrics")}setData(t){this.data=t}setMetrics(t){this.metrics=t}hasData(){return void 0!==this.data}getResolution(){return this.getData().resolution}getGlyphs(){return this.getData().glyphs}lookupMetric(t,e){const i=t.split(".");let b=this.getMetrics();for(let t=0;tt[e]))}}return[]}getElementsByType(t){return this.getElementsByAttribute("type",t)}getElementsByClass(t){return this.getElementsByAttribute("class",t)}onUpdate(t){return["id","type","class"].includes(t.name)&&this.updateIndex(t),this}}class R{static get CATEGORY(){return x.Element}static newID(){return"auto"+R.ID++}constructor(){var t;this.children=[],this.attrs={id:R.newID(),type:this.getCategory(),class:""},this.rendered=!1,null===(t=O.getDefaultRegistry())||void 0===t||t.register(this)}addChildElement(t){return this.children.push(t),this}getCategory(){return this.constructor.CATEGORY}setStyle(t){return this.style=t,this}setGroupStyle(t){return this.style=t,this.children.forEach((e=>e.setGroupStyle(t))),this}getStyle(){return this.style}applyStyle(t=this.context,e=this.getStyle()){return e&&t?(t.save(),e.shadowColor&&t.setShadowColor(e.shadowColor),e.shadowBlur&&t.setShadowBlur(e.shadowBlur),e.fillStyle&&t.setFillStyle(e.fillStyle),e.strokeStyle&&t.setStrokeStyle(e.strokeStyle),e.lineWidth&&t.setLineWidth(e.lineWidth),this):this}restoreStyle(t=this.context,e=this.getStyle()){return e&&t?(t.restore(),this):this}drawWithStyle(){this.checkContext(),this.applyStyle(),this.draw(),this.restoreStyle()}hasClass(t){var e;return!!this.attrs.class&&-1!=(null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ").indexOf(t))}addClass(t){var e;return this.hasClass(t)||(this.attrs.class?this.attrs.class=`${this.attrs.class} ${t}`:this.attrs.class=`${t}`,null===(e=this.registry)||void 0===e||e.onUpdate({id:this.attrs.id,name:"class",value:t,oldValue:void 0})),this}removeClass(t){var e,i;if(!this.hasClass(t))return this;const b=null===(e=this.attrs.class)||void 0===e?void 0:e.split(" ");return b&&(b.splice(b.indexOf(t)),this.attrs.class=b.join(" ")),null===(i=this.registry)||void 0===i||i.onUpdate({id:this.attrs.id,name:"class",value:void 0,oldValue:t}),this}onRegister(t){return this.registry=t,this}isRendered(){return this.rendered}setRendered(t=!0){return this.rendered=t,this}getAttributes(){return this.attrs}getAttribute(t){return this.attrs[t]}getSVGElement(t=""){const e=T(this.attrs.id+t),i=document.getElementById(e);if(i)return i}setAttribute(t,e){var i;const b=this.attrs.id,a=this.attrs[t];return this.attrs[t]=e,null===(i=this.registry)||void 0===i||i.onUpdate({id:b,name:t,value:e,oldValue:a}),this}getBoundingBox(){return this.boundingBox}getContext(){return this.context}setContext(t){return this.context=t,this}checkContext(){return p(this.context,"NoContext","No rendering context attached to instance.")}set font(t){this.setFont(t)}get font(){return A.toCSSString(this.textFont)}setFont(t,e,i,b){const a=this.constructor.TEXT_FONT,n="object"==typeof t,s="string"==typeof t,l=void 0===t,o=void 0===e&&void 0===i&&void 0===b;return this.textFont=n?Object.assign(Object.assign({},a),t):s&&o?A.fromCSSString(t):l&&o?Object.assign({},a):A.validate(null!=t?t:a.family,null!=e?e:a.size,null!=i?i:a.weight,null!=b?b:a.style),this}getFont(){return this.textFont||this.resetFont(),A.toCSSString(this.textFont)}resetFont(){this.setFont()}get fontInfo(){return this.textFont||this.resetFont(),Object.assign({},this.textFont)}set fontInfo(t){this.setFont(t)}setFontSize(t){const e=this.fontInfo;return this.setFont(e.family,t,e.weight,e.style),this}getFontSize(){return this.fontSize}set fontSize(t){this.setFontSize(t)}get fontSize(){let t=this.fontInfo.size;return"number"==typeof t&&(t=`${t}pt`),t}get fontSizeInPoints(){return A.convertSizeToPointValue(this.fontSize)}get fontSizeInPixels(){return A.convertSizeToPixelValue(this.fontSize)}get fontStyle(){return this.fontInfo.style}set fontStyle(t){const e=this.fontInfo;this.setFont(e.family,e.size,e.weight,t)}get fontWeight(){return this.fontInfo.weight+""}set fontWeight(t){const e=this.fontInfo;this.setFont(e.family,e.size,t,e.style)}}R.ID=1e3,R.TEXT_FONT={family:A.SANS_SERIF,size:A.SIZE,weight:P.NORMAL,style:k.NORMAL};const W=16384,L={"1/2":32768,1:16384,2:8192,4:4096,8:2048,16:1024,32:512,64:256,128:128,256:64},U={w:"1",h:"2",q:"4",b:"256"},I={C:{num:0},Am:{num:0},F:{acc:"b",num:1},Dm:{acc:"b",num:1},Bb:{acc:"b",num:2},Gm:{acc:"b",num:2},Eb:{acc:"b",num:3},Cm:{acc:"b",num:3},Ab:{acc:"b",num:4},Fm:{acc:"b",num:4},Db:{acc:"b",num:5},Bbm:{acc:"b",num:5},Gb:{acc:"b",num:6},Ebm:{acc:"b",num:6},Cb:{acc:"b",num:7},Abm:{acc:"b",num:7},G:{acc:"#",num:1},Em:{acc:"#",num:1},D:{acc:"#",num:2},Bm:{acc:"#",num:2},A:{acc:"#",num:3},"F#m":{acc:"#",num:3},E:{acc:"#",num:4},"C#m":{acc:"#",num:4},B:{acc:"#",num:5},"G#m":{acc:"#",num:5},"F#":{acc:"#",num:6},"D#m":{acc:"#",num:6},"C#":{acc:"#",num:7},"A#m":{acc:"#",num:7}},Y={treble:{line_shift:0},bass:{line_shift:6},tenor:{line_shift:4},alto:{line_shift:3},soprano:{line_shift:1},percussion:{line_shift:0},"mezzo-soprano":{line_shift:2},"baritone-c":{line_shift:5},"baritone-f":{line_shift:5},subbass:{line_shift:7},french:{line_shift:-1}},G={C:{index:0,int_val:0},CN:{index:0,int_val:0,accidental:"n"},"C#":{index:0,int_val:1,accidental:"#"},"C##":{index:0,int_val:2,accidental:"##"},CB:{index:0,int_val:11,accidental:"b"},CBB:{index:0,int_val:10,accidental:"bb"},D:{index:1,int_val:2},DN:{index:1,int_val:2,accidental:"n"},"D#":{index:1,int_val:3,accidental:"#"},"D##":{index:1,int_val:4,accidental:"##"},DB:{index:1,int_val:1,accidental:"b"},DBB:{index:1,int_val:0,accidental:"bb"},E:{index:2,int_val:4},EN:{index:2,int_val:4,accidental:"n"},"E#":{index:2,int_val:5,accidental:"#"},"E##":{index:2,int_val:6,accidental:"##"},EB:{index:2,int_val:3,accidental:"b"},EBB:{index:2,int_val:2,accidental:"bb"},F:{index:3,int_val:5},FN:{index:3,int_val:5,accidental:"n"},"F#":{index:3,int_val:6,accidental:"#"},"F##":{index:3,int_val:7,accidental:"##"},FB:{index:3,int_val:4,accidental:"b"},FBB:{index:3,int_val:3,accidental:"bb"},G:{index:4,int_val:7},GN:{index:4,int_val:7,accidental:"n"},"G#":{index:4,int_val:8,accidental:"#"},"G##":{index:4,int_val:9,accidental:"##"},GB:{index:4,int_val:6,accidental:"b"},GBB:{index:4,int_val:5,accidental:"bb"},A:{index:5,int_val:9},AN:{index:5,int_val:9,accidental:"n"},"A#":{index:5,int_val:10,accidental:"#"},"A##":{index:5,int_val:11,accidental:"##"},AB:{index:5,int_val:8,accidental:"b"},ABB:{index:5,int_val:7,accidental:"bb"},B:{index:6,int_val:11},BN:{index:6,int_val:11,accidental:"n"},"B#":{index:6,int_val:12,accidental:"#"},"B##":{index:6,int_val:13,accidental:"##"},BB:{index:6,int_val:10,accidental:"b"},BBB:{index:6,int_val:9,accidental:"bb"},R:{index:6,rest:!0},X:{index:6,accidental:"",octave:4,code:"noteheadXBlack",shift_right:5.5}},H={"#":{code:"accidentalSharp",parenRightPaddingAdjustment:-1},"##":{code:"accidentalDoubleSharp",parenRightPaddingAdjustment:-1},b:{code:"accidentalFlat",parenRightPaddingAdjustment:-2},bb:{code:"accidentalDoubleFlat",parenRightPaddingAdjustment:-2},n:{code:"accidentalNatural",parenRightPaddingAdjustment:-1},"{":{code:"accidentalParensLeft",parenRightPaddingAdjustment:-1},"}":{code:"accidentalParensRight",parenRightPaddingAdjustment:-1},db:{code:"accidentalThreeQuarterTonesFlatZimmermann",parenRightPaddingAdjustment:-1},d:{code:"accidentalQuarterToneFlatStein",parenRightPaddingAdjustment:0},"++":{code:"accidentalThreeQuarterTonesSharpStein",parenRightPaddingAdjustment:-1},"+":{code:"accidentalQuarterToneSharpStein",parenRightPaddingAdjustment:-1},"+-":{code:"accidentalKucukMucennebSharp",parenRightPaddingAdjustment:-1},bs:{code:"accidentalBakiyeFlat",parenRightPaddingAdjustment:-1},bss:{code:"accidentalBuyukMucennebFlat",parenRightPaddingAdjustment:-1},o:{code:"accidentalSori",parenRightPaddingAdjustment:-1},k:{code:"accidentalKoron",parenRightPaddingAdjustment:-1},bbs:{code:"vexAccidentalMicrotonal1",parenRightPaddingAdjustment:-1},"++-":{code:"vexAccidentalMicrotonal2",parenRightPaddingAdjustment:-1},ashs:{code:"vexAccidentalMicrotonal3",parenRightPaddingAdjustment:-1},afhf:{code:"vexAccidentalMicrotonal4",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaUp:{code:"accSagittal5v7KleismaUp",parenRightPaddingAdjustment:-1},accSagittal5v7KleismaDown:{code:"accSagittal5v7KleismaDown",parenRightPaddingAdjustment:-1},accSagittal5CommaUp:{code:"accSagittal5CommaUp",parenRightPaddingAdjustment:-1},accSagittal5CommaDown:{code:"accSagittal5CommaDown",parenRightPaddingAdjustment:-1},accSagittal7CommaUp:{code:"accSagittal7CommaUp",parenRightPaddingAdjustment:-1},accSagittal7CommaDown:{code:"accSagittal7CommaDown",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisUp:{code:"accSagittal25SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal25SmallDiesisDown:{code:"accSagittal25SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisUp:{code:"accSagittal35MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35MediumDiesisDown:{code:"accSagittal35MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisUp:{code:"accSagittal11MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11MediumDiesisDown:{code:"accSagittal11MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisUp:{code:"accSagittal11LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11LargeDiesisDown:{code:"accSagittal11LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisUp:{code:"accSagittal35LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal35LargeDiesisDown:{code:"accSagittal35LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SDown:{code:"accSagittalSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalFlat25SUp:{code:"accSagittalFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7CDown:{code:"accSagittalSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7CUp:{code:"accSagittalFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5CDown:{code:"accSagittalSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5CUp:{code:"accSagittalFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kDown:{code:"accSagittalSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kUp:{code:"accSagittalFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalSharp:{code:"accSagittalSharp",parenRightPaddingAdjustment:-1},accSagittalFlat:{code:"accSagittalFlat",parenRightPaddingAdjustment:-1},accSagittalSharp5v7kUp:{code:"accSagittalSharp5v7kUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v7kDown:{code:"accSagittalFlat5v7kDown",parenRightPaddingAdjustment:-1},accSagittalSharp5CUp:{code:"accSagittalSharp5CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5CDown:{code:"accSagittalFlat5CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7CUp:{code:"accSagittalSharp7CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7CDown:{code:"accSagittalFlat7CDown",parenRightPaddingAdjustment:-1},accSagittalSharp25SUp:{code:"accSagittalSharp25SUp",parenRightPaddingAdjustment:-1},accSagittalFlat25SDown:{code:"accSagittalFlat25SDown",parenRightPaddingAdjustment:-1},accSagittalSharp35MUp:{code:"accSagittalSharp35MUp",parenRightPaddingAdjustment:-1},accSagittalFlat35MDown:{code:"accSagittalFlat35MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11MUp:{code:"accSagittalSharp11MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11MDown:{code:"accSagittalFlat11MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11LUp:{code:"accSagittalSharp11LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11LDown:{code:"accSagittalFlat11LDown",parenRightPaddingAdjustment:-1},accSagittalSharp35LUp:{code:"accSagittalSharp35LUp",parenRightPaddingAdjustment:-1},accSagittalFlat35LDown:{code:"accSagittalFlat35LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp25SDown:{code:"accSagittalDoubleSharp25SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat25SUp:{code:"accSagittalDoubleFlat25SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7CDown:{code:"accSagittalDoubleSharp7CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7CUp:{code:"accSagittalDoubleFlat7CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5CDown:{code:"accSagittalDoubleSharp5CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5CUp:{code:"accSagittalDoubleFlat5CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v7kDown:{code:"accSagittalDoubleSharp5v7kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v7kUp:{code:"accSagittalDoubleFlat5v7kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp:{code:"accSagittalDoubleSharp",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat:{code:"accSagittalDoubleFlat",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaUp:{code:"accSagittal7v11KleismaUp",parenRightPaddingAdjustment:-1},accSagittal7v11KleismaDown:{code:"accSagittal7v11KleismaDown",parenRightPaddingAdjustment:-1},accSagittal17CommaUp:{code:"accSagittal17CommaUp",parenRightPaddingAdjustment:-1},accSagittal17CommaDown:{code:"accSagittal17CommaDown",parenRightPaddingAdjustment:-1},accSagittal55CommaUp:{code:"accSagittal55CommaUp",parenRightPaddingAdjustment:-1},accSagittal55CommaDown:{code:"accSagittal55CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v11CommaUp:{code:"accSagittal7v11CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v11CommaDown:{code:"accSagittal7v11CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisUp:{code:"accSagittal5v11SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v11SmallDiesisDown:{code:"accSagittal5v11SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SDown:{code:"accSagittalSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SUp:{code:"accSagittalFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CDown:{code:"accSagittalSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CUp:{code:"accSagittalFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalSharp55CDown:{code:"accSagittalSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalFlat55CUp:{code:"accSagittalFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17CDown:{code:"accSagittalSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalFlat17CUp:{code:"accSagittalFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kDown:{code:"accSagittalSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kUp:{code:"accSagittalFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v11kUp:{code:"accSagittalSharp7v11kUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11kDown:{code:"accSagittalFlat7v11kDown",parenRightPaddingAdjustment:-1},accSagittalSharp17CUp:{code:"accSagittalSharp17CUp",parenRightPaddingAdjustment:-1},accSagittalFlat17CDown:{code:"accSagittalFlat17CDown",parenRightPaddingAdjustment:-1},accSagittalSharp55CUp:{code:"accSagittalSharp55CUp",parenRightPaddingAdjustment:-1},accSagittalFlat55CDown:{code:"accSagittalFlat55CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v11CUp:{code:"accSagittalSharp7v11CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v11CDown:{code:"accSagittalFlat7v11CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v11SUp:{code:"accSagittalSharp5v11SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v11SDown:{code:"accSagittalFlat5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v11SDown:{code:"accSagittalDoubleSharp5v11SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v11SUp:{code:"accSagittalDoubleFlat5v11SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11CDown:{code:"accSagittalDoubleSharp7v11CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11CUp:{code:"accSagittalDoubleFlat7v11CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp55CDown:{code:"accSagittalDoubleSharp55CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat55CUp:{code:"accSagittalDoubleFlat55CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17CDown:{code:"accSagittalDoubleSharp17CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17CUp:{code:"accSagittalDoubleFlat17CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v11kDown:{code:"accSagittalDoubleSharp7v11kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v11kUp:{code:"accSagittalDoubleFlat7v11kUp",parenRightPaddingAdjustment:-1},accSagittal23CommaUp:{code:"accSagittal23CommaUp",parenRightPaddingAdjustment:-1},accSagittal23CommaDown:{code:"accSagittal23CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v19CommaUp:{code:"accSagittal5v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal5v19CommaDown:{code:"accSagittal5v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisUp:{code:"accSagittal5v23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v23SmallDiesisDown:{code:"accSagittal5v23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SDown:{code:"accSagittalSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SUp:{code:"accSagittalFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CDown:{code:"accSagittalSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CUp:{code:"accSagittalFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CDown:{code:"accSagittalSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalFlat23CUp:{code:"accSagittalFlat23CUp",parenRightPaddingAdjustment:-1},accSagittalSharp23CUp:{code:"accSagittalSharp23CUp",parenRightPaddingAdjustment:-1},accSagittalFlat23CDown:{code:"accSagittalFlat23CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v19CUp:{code:"accSagittalSharp5v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v19CDown:{code:"accSagittalFlat5v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v23SUp:{code:"accSagittalSharp5v23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v23SDown:{code:"accSagittalFlat5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v23SDown:{code:"accSagittalDoubleSharp5v23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v23SUp:{code:"accSagittalDoubleFlat5v23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp5v19CDown:{code:"accSagittalDoubleSharp5v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat5v19CUp:{code:"accSagittalDoubleFlat5v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23CDown:{code:"accSagittalDoubleSharp23CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23CUp:{code:"accSagittalDoubleFlat23CUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaUp:{code:"accSagittal19SchismaUp",parenRightPaddingAdjustment:-1},accSagittal19SchismaDown:{code:"accSagittal19SchismaDown",parenRightPaddingAdjustment:-1},accSagittal17KleismaUp:{code:"accSagittal17KleismaUp",parenRightPaddingAdjustment:-1},accSagittal17KleismaDown:{code:"accSagittal17KleismaDown",parenRightPaddingAdjustment:-1},accSagittal143CommaUp:{code:"accSagittal143CommaUp",parenRightPaddingAdjustment:-1},accSagittal143CommaDown:{code:"accSagittal143CommaDown",parenRightPaddingAdjustment:-1},accSagittal11v49CommaUp:{code:"accSagittal11v49CommaUp",parenRightPaddingAdjustment:-1},accSagittal11v49CommaDown:{code:"accSagittal11v49CommaDown",parenRightPaddingAdjustment:-1},accSagittal19CommaUp:{code:"accSagittal19CommaUp",parenRightPaddingAdjustment:-1},accSagittal19CommaDown:{code:"accSagittal19CommaDown",parenRightPaddingAdjustment:-1},accSagittal7v19CommaUp:{code:"accSagittal7v19CommaUp",parenRightPaddingAdjustment:-1},accSagittal7v19CommaDown:{code:"accSagittal7v19CommaDown",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisUp:{code:"accSagittal49SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49SmallDiesisDown:{code:"accSagittal49SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisUp:{code:"accSagittal23SmallDiesisUp",parenRightPaddingAdjustment:-1},accSagittal23SmallDiesisDown:{code:"accSagittal23SmallDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisUp:{code:"accSagittal5v13MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13MediumDiesisDown:{code:"accSagittal5v13MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisUp:{code:"accSagittal11v19MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19MediumDiesisDown:{code:"accSagittal11v19MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisUp:{code:"accSagittal49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49MediumDiesisDown:{code:"accSagittal49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisUp:{code:"accSagittal5v49MediumDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v49MediumDiesisDown:{code:"accSagittal5v49MediumDiesisDown",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisUp:{code:"accSagittal49LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal49LargeDiesisDown:{code:"accSagittal49LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisUp:{code:"accSagittal11v19LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal11v19LargeDiesisDown:{code:"accSagittal11v19LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisUp:{code:"accSagittal5v13LargeDiesisUp",parenRightPaddingAdjustment:-1},accSagittal5v13LargeDiesisDown:{code:"accSagittal5v13LargeDiesisDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SDown:{code:"accSagittalSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalFlat23SUp:{code:"accSagittalFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalSharp49SDown:{code:"accSagittalSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalFlat49SUp:{code:"accSagittalFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CDown:{code:"accSagittalSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CUp:{code:"accSagittalFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp19CDown:{code:"accSagittalSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalFlat19CUp:{code:"accSagittalFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CDown:{code:"accSagittalSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CUp:{code:"accSagittalFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalSharp143CDown:{code:"accSagittalSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalFlat143CUp:{code:"accSagittalFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalSharp17kDown:{code:"accSagittalSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalFlat17kUp:{code:"accSagittalFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sDown:{code:"accSagittalSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalFlat19sUp:{code:"accSagittalFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalSharp19sUp:{code:"accSagittalSharp19sUp",parenRightPaddingAdjustment:-1},accSagittalFlat19sDown:{code:"accSagittalFlat19sDown",parenRightPaddingAdjustment:-1},accSagittalSharp17kUp:{code:"accSagittalSharp17kUp",parenRightPaddingAdjustment:-1},accSagittalFlat17kDown:{code:"accSagittalFlat17kDown",parenRightPaddingAdjustment:-1},accSagittalSharp143CUp:{code:"accSagittalSharp143CUp",parenRightPaddingAdjustment:-1},accSagittalFlat143CDown:{code:"accSagittalFlat143CDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v49CUp:{code:"accSagittalSharp11v49CUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v49CDown:{code:"accSagittalFlat11v49CDown",parenRightPaddingAdjustment:-1},accSagittalSharp19CUp:{code:"accSagittalSharp19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat19CDown:{code:"accSagittalFlat19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp7v19CUp:{code:"accSagittalSharp7v19CUp",parenRightPaddingAdjustment:-1},accSagittalFlat7v19CDown:{code:"accSagittalFlat7v19CDown",parenRightPaddingAdjustment:-1},accSagittalSharp49SUp:{code:"accSagittalSharp49SUp",parenRightPaddingAdjustment:-1},accSagittalFlat49SDown:{code:"accSagittalFlat49SDown",parenRightPaddingAdjustment:-1},accSagittalSharp23SUp:{code:"accSagittalSharp23SUp",parenRightPaddingAdjustment:-1},accSagittalFlat23SDown:{code:"accSagittalFlat23SDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13MUp:{code:"accSagittalSharp5v13MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13MDown:{code:"accSagittalFlat5v13MDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19MUp:{code:"accSagittalSharp11v19MUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19MDown:{code:"accSagittalFlat11v19MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49MUp:{code:"accSagittalSharp49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat49MDown:{code:"accSagittalFlat49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v49MUp:{code:"accSagittalSharp5v49MUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v49MDown:{code:"accSagittalFlat5v49MDown",parenRightPaddingAdjustment:-1},accSagittalSharp49LUp:{code:"accSagittalSharp49LUp",parenRightPaddingAdjustment:-1},accSagittalFlat49LDown:{code:"accSagittalFlat49LDown",parenRightPaddingAdjustment:-1},accSagittalSharp11v19LUp:{code:"accSagittalSharp11v19LUp",parenRightPaddingAdjustment:-1},accSagittalFlat11v19LDown:{code:"accSagittalFlat11v19LDown",parenRightPaddingAdjustment:-1},accSagittalSharp5v13LUp:{code:"accSagittalSharp5v13LUp",parenRightPaddingAdjustment:-1},accSagittalFlat5v13LDown:{code:"accSagittalFlat5v13LDown",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp23SDown:{code:"accSagittalDoubleSharp23SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat23SUp:{code:"accSagittalDoubleFlat23SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp49SDown:{code:"accSagittalDoubleSharp49SDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat49SUp:{code:"accSagittalDoubleFlat49SUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp7v19CDown:{code:"accSagittalDoubleSharp7v19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat7v19CUp:{code:"accSagittalDoubleFlat7v19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19CDown:{code:"accSagittalDoubleSharp19CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19CUp:{code:"accSagittalDoubleFlat19CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp11v49CDown:{code:"accSagittalDoubleSharp11v49CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat11v49CUp:{code:"accSagittalDoubleFlat11v49CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp143CDown:{code:"accSagittalDoubleSharp143CDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat143CUp:{code:"accSagittalDoubleFlat143CUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp17kDown:{code:"accSagittalDoubleSharp17kDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat17kUp:{code:"accSagittalDoubleFlat17kUp",parenRightPaddingAdjustment:-1},accSagittalDoubleSharp19sDown:{code:"accSagittalDoubleSharp19sDown",parenRightPaddingAdjustment:-1},accSagittalDoubleFlat19sUp:{code:"accSagittalDoubleFlat19sUp",parenRightPaddingAdjustment:-1},accSagittalShaftUp:{code:"accSagittalShaftUp",parenRightPaddingAdjustment:-1},accSagittalShaftDown:{code:"accSagittalShaftDown",parenRightPaddingAdjustment:-1},accSagittalAcute:{code:"accSagittalAcute",parenRightPaddingAdjustment:-1},accSagittalGrave:{code:"accSagittalGrave",parenRightPaddingAdjustment:-1},accSagittal1MinaUp:{code:"accSagittal1MinaUp",parenRightPaddingAdjustment:-1},accSagittal1MinaDown:{code:"accSagittal1MinaDown",parenRightPaddingAdjustment:-1},accSagittal2MinasUp:{code:"accSagittal2MinasUp",parenRightPaddingAdjustment:-1},accSagittal2MinasDown:{code:"accSagittal2MinasDown",parenRightPaddingAdjustment:-1},accSagittal1TinaUp:{code:"accSagittal1TinaUp",parenRightPaddingAdjustment:-1},accSagittal1TinaDown:{code:"accSagittal1TinaDown",parenRightPaddingAdjustment:-1},accSagittal2TinasUp:{code:"accSagittal2TinasUp",parenRightPaddingAdjustment:-1},accSagittal2TinasDown:{code:"accSagittal2TinasDown",parenRightPaddingAdjustment:-1},accSagittal3TinasUp:{code:"accSagittal3TinasUp",parenRightPaddingAdjustment:-1},accSagittal3TinasDown:{code:"accSagittal3TinasDown",parenRightPaddingAdjustment:-1},accSagittal4TinasUp:{code:"accSagittal4TinasUp",parenRightPaddingAdjustment:-1},accSagittal4TinasDown:{code:"accSagittal4TinasDown",parenRightPaddingAdjustment:-1},accSagittal5TinasUp:{code:"accSagittal5TinasUp",parenRightPaddingAdjustment:-1},accSagittal5TinasDown:{code:"accSagittal5TinasDown",parenRightPaddingAdjustment:-1},accSagittal6TinasUp:{code:"accSagittal6TinasUp",parenRightPaddingAdjustment:-1},accSagittal6TinasDown:{code:"accSagittal6TinasDown",parenRightPaddingAdjustment:-1},accSagittal7TinasUp:{code:"accSagittal7TinasUp",parenRightPaddingAdjustment:-1},accSagittal7TinasDown:{code:"accSagittal7TinasDown",parenRightPaddingAdjustment:-1},accSagittal8TinasUp:{code:"accSagittal8TinasUp",parenRightPaddingAdjustment:-1},accSagittal8TinasDown:{code:"accSagittal8TinasDown",parenRightPaddingAdjustment:-1},accSagittal9TinasUp:{code:"accSagittal9TinasUp",parenRightPaddingAdjustment:-1},accSagittal9TinasDown:{code:"accSagittal9TinasDown",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaUp:{code:"accSagittalFractionalTinaUp",parenRightPaddingAdjustment:-1},accSagittalFractionalTinaDown:{code:"accSagittalFractionalTinaDown",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlat:{code:"accidentalNarrowReversedFlat",parenRightPaddingAdjustment:-1},accidentalNarrowReversedFlatAndFlat:{code:"accidentalNarrowReversedFlatAndFlat",parenRightPaddingAdjustment:-1},accidentalWilsonPlus:{code:"accidentalWilsonPlus",parenRightPaddingAdjustment:-1},accidentalWilsonMinus:{code:"accidentalWilsonMinus",parenRightPaddingAdjustment:-1}},X={"a.":{code:"augmentationDot",between_lines:!0},av:{aboveCode:"articStaccatissimoAbove",belowCode:"articStaccatissimoBelow",between_lines:!0},"a>":{aboveCode:"articAccentAbove",belowCode:"articAccentBelow",between_lines:!0},"a-":{aboveCode:"articTenutoAbove",belowCode:"articTenutoBelow",between_lines:!0},"a^":{aboveCode:"articMarcatoAbove",belowCode:"articMarcatoBelow",between_lines:!1},"a+":{code:"pluckedLeftHandPizzicato",between_lines:!1},ao:{aboveCode:"pluckedSnapPizzicatoAbove",belowCode:"pluckedSnapPizzicatoBelow",between_lines:!1},ah:{code:"stringsHarmonic",between_lines:!1},"a@":{aboveCode:"fermataAbove",belowCode:"fermataBelow",between_lines:!1},"a@a":{code:"fermataAbove",between_lines:!1},"a@u":{code:"fermataBelow",between_lines:!1},"a@s":{aboveCode:"fermataShortAbove",belowCode:"fermataShortBelow",between_lines:!1},"a@as":{code:"fermataShortAbove",between_lines:!1},"a@us":{code:"fermataShortBelow",between_lines:!1},"a@l":{aboveCode:"fermataLongAbove",belowCode:"fermataLongBelow",between_lines:!1},"a@al":{code:"fermataLongAbove",between_lines:!1},"a@ul":{code:"fermataLongBelow",between_lines:!1},"a@vl":{aboveCode:"fermataVeryLongAbove",belowCode:"fermataVeryLongBelow",between_lines:!1},"a@avl":{code:"fermataVeryLongAbove",between_lines:!1},"a@uvl":{code:"fermataVeryLongBelow",between_lines:!1},"a|":{code:"stringsUpBow",between_lines:!1},am:{code:"stringsDownBow",between_lines:!1},"a,":{code:"pictChokeCymbal",between_lines:!1}},j={mordent:{code:"ornamentShortTrill"},mordent_inverted:{code:"ornamentMordent"},turn:{code:"ornamentTurn"},turn_inverted:{code:"ornamentTurnSlash"},tr:{code:"ornamentTrill"},upprall:{code:"ornamentPrecompSlideTrillDAnglebert"},downprall:{code:"ornamentPrecompDoubleCadenceUpperPrefix"},prallup:{code:"ornamentPrecompTrillSuffixDandrieu"},pralldown:{code:"ornamentPrecompTrillLowerSuffix"},upmordent:{code:"ornamentPrecompSlideTrillBach"},downmordent:{code:"ornamentPrecompDoubleCadenceUpperPrefixTurn"},lineprall:{code:"ornamentPrecompAppoggTrill"},prallprall:{code:"ornamentTremblement"},scoop:{code:"brassScoop"},doit:{code:"brassDoitMedium"},fall:{code:"brassFallLipShort"},doitLong:{code:"brassLiftMedium"},fallLong:{code:"brassFallRoughMedium"},bend:{code:"brassBend"},plungerClosed:{code:"brassMuteClosed"},plungerOpen:{code:"brassMuteOpen"},flip:{code:"brassFlip"},jazzTurn:{code:"brassJazzTurn"},smear:{code:"brassSmear"}};class V{static currentMusicFont(){if(0===V.MUSIC_FONT_STACK.length)throw new g("NoFonts","The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).");return V.MUSIC_FONT_STACK[0]}static clefProperties(t){if(!t||!(t in Y))throw new g("BadArgument","Invalid clef: "+t);return Y[t]}static keyProperties(t,e="treble",i){let b={octave_shift:0,duration:"4"};"object"==typeof i&&(b=Object.assign(Object.assign({},b),i));const a=V.sanitizeDuration(b.duration),n=t.split("/");if(n.length<2)throw new g("BadArguments",`First argument must be note/octave or note/octave/glyph-code: ${t}`);const s=n[0].toUpperCase(),l=G[s];if(!l)throw new g("BadArguments","Invalid key name: "+s);l.octave&&(n[1]=l.octave.toString());let o=parseInt(n[1],10);o+=-1*b.octave_shift;let r=(7*o-28+l.index)/2;r+=V.clefProperties(e).line_shift;let h=0;r<=0&&2*r%2==0&&(h=1),r>=6&&2*r%2==0&&(h=-1);const m=void 0!==l.int_val?12*o+l.int_val:void 0,c=l.code,d=l.shift_right;let _={};if(n.length>2&&n[2]){const t=n[2].toUpperCase();_={code:this.codeNoteHead(t,a)}||{}}return Object.assign({key:s,octave:o,line:r,int_value:m,accidental:l.accidental,code:c,stroke:h,shift_right:d,displaced:!1},_)}static integerToNote(t){if(void 0===t||t<0||t>11)throw new g("BadArguments",`integerToNote() requires an integer in the range [0, 11]: ${t}`);const e={0:"C",1:"C#",2:"D",3:"D#",4:"E",5:"F",6:"F#",7:"G",8:"G#",9:"A",10:"A#",11:"B"}[t];if(!e)throw new g("BadArguments",`Unknown note value for integer: ${t}`);return e}static tabToGlyphProps(t,e=1){let i,b=0,a=0;if("X"===t.toUpperCase()){const t=new Z("accidentalDoubleSharp",V.TABLATURE_FONT_SCALE).getMetrics();if(i="accidentalDoubleSharp",null==t.width||null==t.height)throw new g("InvalidMetrics","Width and height required");b=t.width,a=-t.height/2}else b=V.textWidth(t);return{text:t,code:i,getWidth:()=>b*e,shift_y:a}}static textWidth(t){return 7*t.toString().length}static articulationCodes(t){return X[t]}static accidentalCodes(t){return H[t]}static ornamentCodes(t){return j[t]}static keySignature(t){const e=I[t];if(!e)throw new g("BadKeySignature",`Bad key signature spec: '${t}'`);if(!e.acc)return[];const i={b:[2,.5,2.5,1,3,1.5,3.5],"#":[0,1.5,-.5,1,2.5,.5,2]}[e.acc],b=[];for(let t=0;tZ.getWidth(n,t)}),b)}}V.SOFTMAX_FACTOR=10,V.STEM_WIDTH=1.5,V.STEM_HEIGHT=35,V.STAVE_LINE_THICKNESS=1,V.RENDER_PRECISION_PLACES=3,V.RESOLUTION=W,V.MUSIC_FONT_STACK=[],V.NOTATION_FONT_SCALE=39,V.TABLATURE_FONT_SCALE=39,V.SLASH_NOTEHEAD_WIDTH=15,V.STAVE_LINE_DISTANCE=10,V.TEXT_HEIGHT_OFFSET_HACK=1,V.accidentalMap=H,V.accidentalColumnsTable={1:{a:[1],b:[1]},2:{a:[1,2]},3:{a:[1,3,2],b:[1,2,1],second_on_bottom:[1,2,3]},4:{a:[1,3,4,2],b:[1,2,3,1],spaced_out_tetrachord:[1,2,1,2]},5:{a:[1,3,5,4,2],b:[1,2,4,3,1],spaced_out_pentachord:[1,2,3,2,1],very_spaced_out_pentachord:[1,2,1,2,1]},6:{a:[1,3,5,6,4,2],b:[1,2,4,5,3,1],spaced_out_hexachord:[1,3,2,1,3,2],very_spaced_out_hexachord:[1,2,1,2,1,2]}},V.unicode={sharp:String.fromCharCode(9839),flat:String.fromCharCode(9837),natural:String.fromCharCode(9838),triangle:String.fromCharCode(9651),"o-with-slash":String.fromCharCode(248),degrees:String.fromCharCode(176),circle:String.fromCharCode(9675)},V.validTypes={n:{name:"note"},r:{name:"rest"},h:{name:"harmonic"},m:{name:"muted"},s:{name:"slash"},g:{name:"ghost"},d:{name:"diamond"},x:{name:"x"},ci:{name:"circled"},cx:{name:"circle x"},sf:{name:"slashed"},sb:{name:"slashed backward"},sq:{name:"square"},tu:{name:"triangle up"},td:{name:"triangle down"}},V.TIME4_4={num_beats:4,beat_value:4,resolution:W};const K={"1/2":{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restDoubleWhole",rest:!0,position:"B/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},1:{common:{code_head:"",stem:!1,flag:!1,stem_up_extension:-V.STEM_HEIGHT,stem_down_extension:-V.STEM_HEIGHT,tabnote_stem_up_extension:-V.STEM_HEIGHT,tabnote_stem_down_extension:-V.STEM_HEIGHT,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restWhole",ledger_code_head:"restWholeLegerLine",rest:!0,position:"D/5",dot_shiftY:.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},2:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restHalf",ledger_code_head:"restHalfLegerLine",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},4:{common:{code_head:"",stem:!0,flag:!1,stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"restQuarter",stem:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1.5,line_below:1.5},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},8:{common:{code_head:"",stem:!0,flag:!0,beam_count:1,stem_beam_extension:0,code_flag_upstem:"flag8thUp",code_flag_downstem:"flag8thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest8th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:1},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},16:{common:{code_head:"",beam_count:2,stem_beam_extension:0,stem:!0,flag:!0,code_flag_upstem:"flag16thUp",code_flag_downstem:"flag16thDown",stem_up_extension:0,stem_down_extension:0,tabnote_stem_up_extension:0,tabnote_stem_down_extension:0,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest16th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-.5,line_above:1,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},32:{common:{code_head:"",beam_count:3,stem_beam_extension:7.5,stem:!0,flag:!0,code_flag_upstem:"flag32ndUp",code_flag_downstem:"flag32ndDown",stem_up_extension:9,stem_down_extension:9,tabnote_stem_up_extension:9,tabnote_stem_down_extension:9,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest32nd",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:2},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},64:{common:{code_head:"",beam_count:4,stem_beam_extension:15,stem:!0,flag:!0,code_flag_upstem:"flag64thUp",code_flag_downstem:"flag64thDown",stem_up_extension:13,stem_down_extension:13,tabnote_stem_up_extension:13,tabnote_stem_down_extension:13,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest64th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-1.5,line_above:2,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}},128:{common:{code_head:"",beam_count:5,stem_beam_extension:22.5,stem:!0,flag:!0,code_flag_upstem:"flag128thUp",code_flag_downstem:"flag128thDown",stem_up_extension:22,stem_down_extension:22,tabnote_stem_up_extension:22,tabnote_stem_down_extension:22,dot_shiftY:0,line_above:0,line_below:0},r:{code_head:"rest128th",stem:!1,flag:!1,rest:!0,position:"B/4",dot_shiftY:-2.5,line_above:3,line_below:3},s:{getWidth:()=>V.SLASH_NOTEHEAD_WIDTH,position:"B/4"}}};var $,J;!function(t){t[t.MOVE=0]="MOVE",t[t.LINE=1]="LINE",t[t.QUADRATIC=2]="QUADRATIC",t[t.BEZIER=3]="BEZIER"}($||($={}));class q{constructor(t,e,i){this.point=-1,this.metrics=Z.loadMetrics(t,e,i),this.bbox=Z.getOutlineBoundingBox(this.metrics.outline,this.metrics.scale,this.metrics.x_shift,this.metrics.y_shift),i&&(this.point=Z.lookupFontMetric(this.metrics.font,i,e,"point",-1))}}class Q{constructor(t,e,i,b){this.outline=t,this.originX=e,this.originY=i,this.scale=b,this.i=0,this.precision=1,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES)}done(){return this.i>=this.outline.length}next(){return Math.round(this.outline[this.i++]*this.precision/this.precision)}nextX(){return Math.round((this.originX+this.outline[this.i++]*this.scale)*this.precision)/this.precision}nextY(){return Math.round((this.originY-this.outline[this.i++]*this.scale)*this.precision)/this.precision}static parse(t){const e=[],i=t.split(" ");let b=0;for(;b{const e=t.getTickContext();a&&t.setStave(a),e.setXOffset(n)}))}}class et{static get NUM_TONES(){return this.canonical_notes.length}static get roots(){return["c","d","e","f","g","a","b"]}static get root_values(){return[0,2,4,5,7,9,11]}static get root_indices(){return{c:0,d:1,e:2,f:3,g:4,a:5,b:6}}static get canonical_notes(){return["c","c#","d","d#","e","f","f#","g","g#","a","a#","b"]}static get diatonic_intervals(){return["unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","octave"]}static get diatonic_accidentals(){return{unison:{note:0,accidental:0},m2:{note:1,accidental:-1},M2:{note:1,accidental:0},m3:{note:2,accidental:-1},M3:{note:2,accidental:0},p4:{note:3,accidental:0},dim5:{note:4,accidental:-1},p5:{note:4,accidental:0},m6:{note:5,accidental:-1},M6:{note:5,accidental:0},b7:{note:6,accidental:-1},M7:{note:6,accidental:0},octave:{note:7,accidental:0}}}static get intervals(){return{u:0,unison:0,m2:1,b2:1,min2:1,S:1,H:1,2:2,M2:2,maj2:2,T:2,W:2,m3:3,b3:3,min3:3,M3:4,3:4,maj3:4,4:5,p4:5,"#4":6,b5:6,aug4:6,dim5:6,5:7,p5:7,"#5":8,b6:8,aug5:8,6:9,M6:9,maj6:9,b7:10,m7:10,min7:10,dom7:10,M7:11,maj7:11,8:12,octave:12}}static get scales(){return{major:[2,2,1,2,2,2,1],minor:[2,1,2,2,1,2,2],ionian:[2,2,1,2,2,2,1],dorian:[2,1,2,2,2,1,2],phyrgian:[1,2,2,2,1,2,2],lydian:[2,2,2,1,2,2,1],mixolydian:[2,2,1,2,2,1,2],aeolian:[2,1,2,2,1,2,2],locrian:[1,2,2,1,2,2,2]}}static get scaleTypes(){return{M:et.scales.major,m:et.scales.minor}}static get accidentals(){return["bb","b","n","#","##"]}static get noteValues(){return{c:{root_index:0,int_val:0},cn:{root_index:0,int_val:0},"c#":{root_index:0,int_val:1},"c##":{root_index:0,int_val:2},cb:{root_index:0,int_val:11},cbb:{root_index:0,int_val:10},d:{root_index:1,int_val:2},dn:{root_index:1,int_val:2},"d#":{root_index:1,int_val:3},"d##":{root_index:1,int_val:4},db:{root_index:1,int_val:1},dbb:{root_index:1,int_val:0},e:{root_index:2,int_val:4},en:{root_index:2,int_val:4},"e#":{root_index:2,int_val:5},"e##":{root_index:2,int_val:6},eb:{root_index:2,int_val:3},ebb:{root_index:2,int_val:2},f:{root_index:3,int_val:5},fn:{root_index:3,int_val:5},"f#":{root_index:3,int_val:6},"f##":{root_index:3,int_val:7},fb:{root_index:3,int_val:4},fbb:{root_index:3,int_val:3},g:{root_index:4,int_val:7},gn:{root_index:4,int_val:7},"g#":{root_index:4,int_val:8},"g##":{root_index:4,int_val:9},gb:{root_index:4,int_val:6},gbb:{root_index:4,int_val:5},a:{root_index:5,int_val:9},an:{root_index:5,int_val:9},"a#":{root_index:5,int_val:10},"a##":{root_index:5,int_val:11},ab:{root_index:5,int_val:8},abb:{root_index:5,int_val:7},b:{root_index:6,int_val:11},bn:{root_index:6,int_val:11},"b#":{root_index:6,int_val:0},"b##":{root_index:6,int_val:1},bb:{root_index:6,int_val:10},bbb:{root_index:6,int_val:9}}}isValidNoteValue(t){return t>=0&&t=0&&t3)throw new g("BadArguments","Invalid note name: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|bb|n|#|##)?$/.exec(e);if(null!==i){return{root:i[1],accidental:i[2]}}throw new g("BadArguments","Invalid note name: "+t)}getKeyParts(t){if(!t||t.length<1)throw new g("BadArguments","Invalid key: "+t);const e=t.toLowerCase(),i=/^([cdefgab])(b|#)?(mel|harm|m|M)?$/.exec(e);if(null!==i){const t=i[1],e=i[2];let b=i[3];return b||(b="M"),{root:t,accidental:e,type:b}}throw new g("BadArguments",`Invalid key: ${t}`)}getNoteValue(t){const e=et.noteValues[t];if(void 0===e)throw new g("BadArguments",`Invalid note name: ${t}`);return e.int_val}getIntervalValue(t){const e=et.intervals[t];if(void 0===e)throw new g("BadArguments",`Invalid interval name: ${t}`);return e}getCanonicalNoteName(t){if(!this.isValidNoteValue(t))throw new g("BadArguments",`Invalid note value: ${t}`);return et.canonical_notes[t]}getCanonicalIntervalName(t){if(!this.isValidIntervalValue(t))throw new g("BadArguments",`Invalid interval value: ${t}`);return et.diatonic_intervals[t]}getRelativeNoteValue(t,e,i=1){if(1!==i&&-1!==i)throw new g("BadArguments",`Invalid direction: ${i}`);let b=(t+i*e)%et.NUM_TONES;return b<0&&(b+=et.NUM_TONES),b}getRelativeNoteName(t,e){const i=this.getNoteParts(t),b=this.getNoteValue(i.root);let a=e-b;if(Math.abs(a)>et.NUM_TONES-3){let i=1;a>0&&(i=-1);const n=(e+1+(b+1))%et.NUM_TONES*i;if(Math.abs(n)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);a=n}if(Math.abs(a)>2)throw new g("BadArguments",`Notes not related: ${t}, ${e})`);let n=i.root;if(a>0)for(let t=1;t<=a;++t)n+="#";else if(a<0)for(let t=-1;t>=a;--t)n+="b";return n}getScaleTones(t,e){const i=[t];let b=t;for(let a=0;ae.line-t.line));const h=[];let m,c=0;for(let t=0;tc?e.shift:c,m=e.line}let d=0;for(let t=0;th[i+t],n=t=>t.map(a),s=(t,e)=>{const[i,b]=n([t,e]).map((t=>t.line));return i-b},l=(...t)=>t.map(n).every((([t,e])=>!this.checkCollision(t,e))),o=b-i+1;let r,m,c=this.checkCollision(h[i],h[b])?"a":"b";switch(o){case 3:"a"===c&&.5===s(1,2)&&.5!==s(0,1)&&(c="second_on_bottom");break;case 4:l([0,2],[1,3])&&(c="spaced_out_tetrachord");break;case 5:"b"===c&&l([1,3])&&(c="spaced_out_pentachord",l([0,2],[2,4])&&(c="very_spaced_out_pentachord"));break;case 6:l([0,3],[1,4],[2,5])&&(c="spaced_out_hexachord"),l([0,2],[2,4],[1,3],[3,5])&&(c="very_spaced_out_hexachord")}if(o>=7){let e=2,i=!0;for(;!0===i;){i=!1;for(let t=0;t+em?d:m}else for(r=t;r<=b;r++)m=V.accidentalColumnsTable[o][c][r-t],h[r].column=m,d=d>m?d:m;t=b}const _=[],x=[];for(let t=0;t<=d;t++)_[t]=0,x[t]=0;_[0]=c+a,x[0]=c+a,h.forEach((t=>{t.width>_[t.column]&&(_[t.column]=t.width)}));for(let t=1;t<_.length;t++)x[t]=_[t]+x[t-1];const g=x[x.length-1];let y=0;h.forEach((t=>{let e=0;const i=y+t.numAcc;for(;y0?(b=e.flatLine||e.dblSharpLine?2.5:3,t.dblSharpLine&&(i-=.5)):(b=t.flatLine||t.dblSharpLine?2.5:3,e.dblSharpLine&&(i-=.5));const a=Math.abs(i){const e=new z(0,1);t.getTickables().forEach((t=>{if(t.shouldIgnoreTicks())return;const a=b[e.value()];a?a.push(t):(i.push(e.value()),b[e.value()]=[t]),e.add(t.getTicks())}))}));const n=new et;e||(e="C");const s=n.createScaleMap(e),l={};i.forEach((t=>{const e=b[t],i=[],o=t=>{if(!c(t)||t.isRest()||t.shouldIgnoreTicks())return;const e=t;e.keys.forEach(((t,b)=>{const o=n.getNoteParts(t.split("/")[0]),r=t.split("/")[1],h=o.accidental||"n",m=o.root+h;l[o.root+r]||(l[o.root+r]=s[o.root]);const c=l[o.root+r]===m,d=i.indexOf(t)>-1;if(e.getModifiers().forEach(((t,i)=>{a(t)&&t.type==h&&t.getIndex()==b&&e.getModifiers().splice(i,1)})),!c||c&&d){l[o.root+r]=m;const a=new bt(h);e.addModifier(a,b),i.push(t)}})),e.getModifiers().forEach((t=>{r(t)&&t.getGraceNotes().forEach(o)}))};e.forEach(o)}))}constructor(t){super(),it("New accidental: ",t),this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38,parenLeftPadding:2,parenRightPadding:2},this.accidental=V.accidentalCodes(this.type),p(this.accidental,"ArgumentError",`Unknown accidental type: ${t}`),this.cautionary=!1,this.reset()}reset(){const t=this.render_options.font_scale;this.glyph=new Z(this.accidental.code,t),this.glyph.setOriginX(1),this.cautionary&&(this.parenLeft=new Z(V.accidentalCodes("{").code,t),this.parenRight=new Z(V.accidentalCodes("}").code,t),this.parenLeft.setOriginX(1),this.parenRight.setOriginX(1))}getWidth(){if(this.cautionary){const t=p(this.parenLeft),e=p(this.parenRight),i=t.getMetrics().width+e.getMetrics().width+this.render_options.parenLeftPadding+this.render_options.parenRightPadding;return this.glyph.getMetrics().width+i}return this.glyph.getMetrics().width}setNote(t){return p(t,"ArgumentError",`Bad note value: ${t}`),this.note=t,o(t)&&(this.render_options.font_scale=25,this.reset()),this}setAsCautionary(){return this.cautionary=!0,this.render_options.font_scale=28,this.reset(),this}draw(){const{type:t,position:e,index:i,cautionary:b,x_shift:a,y_shift:n,glyph:s,render_options:{parenLeftPadding:l,parenRightPadding:o}}=this,r=this.checkContext(),h=this.checkAttachedNote();this.setRendered();const m=h.getModifierStartXY(e,i);let c=m.x+a;const d=m.y+n;if(it("Rendering: ",t,c,d),b){const t=p(this.parenLeft),e=p(this.parenRight);e.render(r,c,d),c-=e.getMetrics().width,c-=o,c-=this.accidental.parenRightPaddingAdjustment,s.render(r,c,d),c-=s.getMetrics().width,c-=l,t.render(r,c,d)}else s.render(r,c,d)}}bt.DEBUG=!1;class at extends R{static get CATEGORY(){return x.Stem}static get UP(){return 1}static get DOWN(){return-1}static get WIDTH(){return V.STEM_WIDTH}static get HEIGHT(){return V.STEM_HEIGHT}constructor(t){super(),this.stem_up_y_offset=0,this.stem_down_y_offset=0,this.stem_up_y_base_offset=0,this.stem_down_y_base_offset=0,this.x_begin=(null==t?void 0:t.x_begin)||0,this.x_end=(null==t?void 0:t.x_end)||0,this.y_top=(null==t?void 0:t.y_top)||0,this.y_bottom=(null==t?void 0:t.y_bottom)||0,this.stem_extension=(null==t?void 0:t.stem_extension)||0,this.stem_direction=(null==t?void 0:t.stem_direction)||0,this.hide=(null==t?void 0:t.hide)||!1,this.isStemlet=(null==t?void 0:t.isStemlet)||!1,this.stemletHeight=(null==t?void 0:t.stemletHeight)||0,this.renderHeightAdjustment=0,this.setOptions(t)}setOptions(t){this.stem_up_y_offset=(null==t?void 0:t.stem_up_y_offset)||0,this.stem_down_y_offset=(null==t?void 0:t.stem_down_y_offset)||0,this.stem_up_y_base_offset=(null==t?void 0:t.stem_up_y_base_offset)||0,this.stem_down_y_base_offset=(null==t?void 0:t.stem_down_y_base_offset)||0}setNoteHeadXBounds(t,e){return this.x_begin=t,this.x_end=e,this}setDirection(t){this.stem_direction=t}setExtension(t){this.stem_extension=t}getExtension(){return this.stem_extension}setYBounds(t,e){this.y_top=t,this.y_bottom=e}getHeight(){const t=this.stem_direction===at.UP?this.stem_up_y_offset:this.stem_down_y_offset;return(this.y_bottom-this.y_top+(at.HEIGHT-t+this.stem_extension))*this.stem_direction}getBoundingBox(){throw new g("NotImplemented","getBoundingBox() not implemented.")}getExtents(){const t=this.stem_direction===at.UP,e=[this.y_top,this.y_bottom],i=at.HEIGHT+this.stem_extension,b=(t?Math.min:Math.max)(...e),a=(t?Math.max:Math.min)(...e);return{topY:b+i*-this.stem_direction,baseY:a}}setVisibility(t){return this.hide=!t,this}setStemlet(t,e){return this.isStemlet=t,this.stemletHeight=e,this}adjustHeightForFlag(){this.renderHeightAdjustment=V.currentMusicFont().lookupMetric("stem.heightAdjustmentForFlag",-3)}adjustHeightForBeam(){this.renderHeightAdjustment=-at.WIDTH/2}draw(){if(this.setRendered(),this.hide)return;const t=this.checkContext();let e,i;const b=this.stem_direction;let a=0;b===at.DOWN?(e=this.x_begin,i=this.y_top+this.stem_down_y_offset,a=this.stem_down_y_base_offset):(e=this.x_end,i=this.y_bottom-this.stem_up_y_offset,a=this.stem_up_y_base_offset);const n=this.getHeight();!function(...t){at.DEBUG&&u("Vex.Flow.Stem",t)}("Rendering stem - ","Top Y: ",this.y_top,"Bottom Y: ",this.y_bottom);const s=this.isStemlet?n-this.stemletHeight*this.stem_direction:0;t.save(),this.applyStyle(),t.openGroup("stem",this.getAttribute("id"),{pointerBBox:!0}),t.beginPath(),t.setLineWidth(at.WIDTH),t.moveTo(e,i-s+a),t.lineTo(e,i-n-this.renderHeightAdjustment*b),t.stroke(),t.closeGroup(),this.restoreStyle(),t.restore()}}function nt(...t){rt.DEBUG&&u("Vex.Flow.TextFormatter",t)}at.DEBUG=!1;const st={},lt={},ot={};class rt{static getFontFamilies(){const t=[];for(const e in ot){const i=ot[e];t.push(Object.assign({},i))}return t}static create(t={}){nt("create: ",t),t.family||(t.family=A.SANS_SERIF);const e=[],i=t.family.split(/\s*,\s*/);for(const t of i){for(const i in ot)i.startsWith(t)&&e.push(ot[i]);if(e.length>0)break}let b;if(0===e.length)b=new rt(Object.values(ot)[0]);else if(1===e.length)b=new rt(e[0]);else{const i=A.isBold(t.weight),a=A.isItalic(t.style),n=e.find((t=>t.bold===i&&t.italic===a));if(n)b=new rt(n);else{const t=e.find((t=>t.italic===a||t.bold===i));b=new rt(t||e[0])}}const a=t.size;if(void 0!==a){const t=A.convertSizeToPointValue(a);b.setFontSize(t)}return b}static getInfo(t){return ot[t]}static registerInfo(t,e=!1){nt("registerInfo: ",t,e);const i=t.family;(void 0===ot[i]||e)&&(ot[i]=t)}constructor(t){this.family="",this.size=14,this.resolution=1e3,this.glyphs={},this.serifs=!1,this.monospaced=!1,this.italic=!1,this.bold=!1,this.superscriptOffset=0,this.subscriptOffset=0,this.maxSizeGlyph="@",this.cacheKey="",this.updateParams(t)}get localHeightCache(){var t;return void 0===lt[this.cacheKey]&&(lt[this.cacheKey]={}),null!==(t=lt[this.cacheKey])&&void 0!==t?t:{}}updateParams(t){t.family&&(this.family=t.family),t.resolution&&(this.resolution=t.resolution),t.glyphs&&(this.glyphs=t.glyphs),t.serifs&&(this.serifs=t.serifs),t.monospaced&&(this.monospaced=t.monospaced),t.italic&&(this.italic=t.italic),t.bold&&(this.bold=t.bold),t.maxSizeGlyph&&(this.maxSizeGlyph=t.maxSizeGlyph),t.superscriptOffset&&(this.superscriptOffset=t.superscriptOffset),t.subscriptOffset&&(this.subscriptOffset=t.subscriptOffset),this.updateCacheKey()}updateCacheKey(){const t=this.family.replace(/\s+/g,"_"),e=this.size,i=this.bold?P.BOLD:P.NORMAL,b=this.italic?k.ITALIC:k.NORMAL;this.cacheKey=`${t}%${e}%${i}%${b}`}getGlyphMetrics(t){return this.glyphs[t]?this.glyphs[t]:this.glyphs[this.maxSizeGlyph]}get maxHeight(){return this.getGlyphMetrics(this.maxSizeGlyph).ha/this.resolution*this.fontSizeInPixels}getWidthForCharacterInEm(t){var e;const i=this.getGlyphMetrics(t);if(i){return(null!==(e=i.advanceWidth)&&void 0!==e?e:0)/this.resolution}return.65}getYForCharacterInPx(t){const e=this.getGlyphMetrics(t),i={yMin:0,yMax:this.maxHeight,height:this.maxHeight};return e?("number"==typeof e.y_min&&(i.yMin=e.y_min/this.resolution*this.fontSizeInPixels),"number"==typeof e.y_max&&(i.yMax=e.y_max/this.resolution*this.fontSizeInPixels),i.height=i.yMax-i.yMin,i):i}getYForStringInPx(t){const e=this.localHeightCache,i={yMin:0,yMax:this.maxHeight,height:this.maxHeight},b=e[t];if(void 0!==b)return b;for(let e=0;et>e?t:e)),o+=(this.text_line+1)*V.STAVE_LINE_DISTANCE+s,m&&i===at.DOWN&&(o=Math.max(o,r.topY+s+h*this.text_line))}else if(this.verticalJustification===mt.CENTER){const t=e.getYForTopText(this.text_line)-1;o=t+(c.getYForBottomText(this.text_line)-t)/2+s/2}else if(this.verticalJustification===mt.TOP){o=Math.min(...e.getYs())-(this.text_line+1)*V.STAVE_LINE_DISTANCE,m&&i===at.UP&&(h=r.topY=1}function yt(t,e){return gt(t,e)?e===dt?Math.ceil:Math.floor:Math.round}const pt=t=>c(t)||o(t);class ut extends tt{static get CATEGORY(){return x.Articulation}static format(t,e){if(!t||0===t.length)return!1;let i=0;const b=(t,e,i)=>xt(yt(e,i),p(t.glyph.getMetrics().height)/10+.5);t.forEach((t=>{const a=t.checkAttachedNote();i=Math.max(a.getGlyphProps().getWidth(),i);let n=5;const s=a.hasStem()?a.getStemDirection():at.UP;let l=0;if(d(a)){const t=a.getStem();t&&(l=Math.abs(t.getHeight())/V.STAVE_LINE_DISTANCE)}const o=a.getStave();if(o&&(n=o.getNumLines()),t.getPosition()===dt){let i=a.getLineNumber(!0);s===at.UP&&(i+=l);let o=b(t,e.top_text_line,dt);const r=i+e.top_text_line+.5;!t.articulation.between_lines&&rt.getWidth())).reduce(((t,e)=>Math.max(e,t))),n=Math.min(Math.max(a-i,0),Math.max(a-(e.left_shift+e.right_shift),0));return e.left_shift+=n/2,e.right_shift+=n/2,!0}static easyScoreHook({articulations:t},e,i){if(!t)return;const b={staccato:"a.",tenuto:"a-",accent:"a>"};t.split(",").map((t=>t.trim().split("."))).map((([t,e])=>{const a={type:b[t]};return e&&(a.position=tt.PositionString[e]),i.getFactory().Articulation(a)})).map((t=>e.addModifier(t,0)))}constructor(t){super(),this.type=t,this.position=dt,this.render_options={font_scale:38},this.reset()}reset(){this.articulation=V.articulationCodes(this.type),this.articulation||(this.articulation={code:this.type,between_lines:!1},this.type.endsWith("Above")&&(this.position=dt),this.type.endsWith("Below")&&(this.position=_t));const t=(this.position===dt?this.articulation.aboveCode:this.articulation.belowCode)||this.articulation.code;this.glyph=new Z(null!=t?t:"",this.render_options.font_scale),p(this.glyph,"ArgumentError",`Articulation not found: ${this.type}`),this.setWidth(p(this.glyph.getMetrics().width))}setBetweenLines(t=!0){return this.articulation.between_lines=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=this.checkIndex(),{position:b,glyph:a,text_line:n}=this,s=this.articulation.between_lines,l=e.checkStave(),o=l.getSpacingBetweenLines(),r=_(e),{x:h}=e.getModifierStartXY(b,i),m=!s||r,c=function(t,e){const i=e===dt&&t.getStemDirection()===at.UP||e===_t&&t.getStemDirection()===at.DOWN;return pt(t)?t.hasStem()&&i?.5:1:t.hasStem()&&i?1:0}(e,b),d=V.currentMusicFont().lookupMetric(`articulation.${a.getCode()}.padding`,0);let x={[dt]:()=>{a.setOrigin(.5,1);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?b:a:Math.min(...t.getYs());if(_(t))return t.hasStem()&&i===at.UP?b:t.checkStave().getYForTopText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)-(n+c)*o;return m?Math.min(l.getYForTopText(ut.INITIAL_OFFSET),t):t},[_t]:()=>{a.setOrigin(.5,0);const t=function(t,e){const i=t.getStemDirection(),{topY:b,baseY:a}=t.getStemExtents();if(pt(t))return t.hasStem()?i===at.UP?a:b:Math.max(...t.getYs());if(_(t))return t.hasStem()?i===at.UP?t.checkStave().getYForBottomText(e):b:t.checkStave().getYForBottomText(e);throw new g("UnknownCategory","Only can get the top and bottom ys of stavenotes and tabnotes")}(e,n)+(n+c)*o;return m?Math.max(l.getYForBottomText(ut.INITIAL_OFFSET),t):t}}[b]();if(!r){const t=b===dt?-1:1,n=e.getKeyProps()[i].line,l=(e.getYs()[i]-x)/o+Number(n),r=function(t,e,i,b){const a=xt(yt(e,i),e);if(t&>(a,i)&&a%1==0)return a+.5*-b;return a}(s,l,b,t);gt(r,b)&&a.setOrigin(.5,.5),x+=Math.abs(r-l)*o*t+d*t}!function(...t){ut.DEBUG&&u("Vex.Flow.Articulation",t)}(`Rendering articulation at (x: ${h}, y: ${x})`),a.render(t,h,x)}}ut.DEBUG=!1,ut.INITIAL_OFFSET=-.5;class ft{static get CATEGORY(){return x.RenderContext}set font(t){this.setFont(t)}get font(){return this.getFont()}setRawFont(t){return this.setFont(t),this}}function St(t,e,i,b="#F55"){t.save(),t.setFillStyle(b),t.beginPath(),t.arc(e,i,3,0,2*Math.PI,!1),t.closePath(),t.fill(),t.restore()}class Tt extends R{static get CATEGORY(){return x.Tickable}constructor(){super(),this._preFormatted=!1,this._postFormatted=!1,this.ticks=new z(0,1),this.intrinsicTicks=0,this.tickMultiplier=new z(1,1),this.width=0,this.x_shift=0,this.modifiers=[],this.tupletStack=[],this.align_center=!1,this.center_x_shift=0,this.ignore_ticks=!1,this.formatterMetrics={freedom:{left:0,right:0},duration:"",iterations:0,space:{used:0,mean:0,deviation:0}}}reset(){return this}getTicks(){return this.ticks}shouldIgnoreTicks(){return this.ignore_ticks}setIgnoreTicks(t){return this.ignore_ticks=t,this}setWidth(t){this.width=t}getWidth(){if(!this._preFormatted)throw new g("UnformattedNote","Can't call GetWidth on an unformatted note.");return this.width+(this.modifierContext?this.modifierContext.getWidth():0)}setXShift(t){return this.x_shift=t,this}getXShift(){return this.x_shift}getX(){return this.checkTickContext("Can't getX() without a TickContext.").getX()+this.x_shift}getFormatterMetrics(){return this.formatterMetrics}getCenterXShift(){return this.isCenterAligned()?this.center_x_shift:0}setCenterXShift(t){return this.center_x_shift=t,this}isCenterAligned(){return this.align_center}setCenterAlignment(t){return this.align_center=t,this}getVoice(){return p(this.voice,"NoVoice","Tickable has no voice.")}setVoice(t){this.voice=t}getTuplet(){return this.tuplet}getTupletStack(){return this.tupletStack}resetTuplet(t){let e,i;if(t){const b=this.tupletStack.indexOf(t);return-1!==b&&(this.tupletStack.splice(b,1),e=t.getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i)),this}for(;this.tupletStack.length;)e=(t=this.tupletStack.pop()).getNoteCount(),i=t.getNotesOccupied(),this.applyTickMultiplier(e,i);return this}setTuplet(t){if(t){this.tupletStack.push(t);const e=t.getNoteCount(),i=t.getNotesOccupied();this.applyTickMultiplier(i,e)}return this.tuplet=t,this}addToModifierContext(t){this.modifierContext=t;for(let t=0;t0){const b=_.space.deviation,a=b>=0?"+":"";t.setFillStyle("red"),t.fillText(a+Math.round(b),s+e.getXShift(),i-10)}t.restore()}static parseDuration(t){if(!t)return;const e=/(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/.exec(t);if(!e)return;return{duration:e[1],dots:e[2].length,type:e[3]||"n"}}static parseNoteStruct(t){const e=vt.parseDuration(t.duration);if(!e)return;let i=t.type;if(i&&!V.validTypes[i])return;const b=[];i||(i=e.type||"n",void 0!==t.keys&&t.keys.forEach(((t,e)=>{const a=t.split("/");b[e]=a&&3===a.length?a[2]:i})));let a=V.durationToTicks(e.duration);if(!a)return;const n=t.dots?t.dots:e.dots;if("number"!=typeof n)return;let s=a;for(let t=0;tV.getGlyphProps(this.duration,t))),this.playNote=void 0,this.ignore_ticks=!1,this.width=0,this.leftDisplacedHeadPx=0,this.rightDisplacedHeadPx=0,this.x_shift=0,this.ys=[],t.align_center&&this.setCenterAlignment(t.align_center),this.render_options={annotation_spacing:5,glyph_font_scale:1,stroke_px:1,scale:1,font:"",y_shift:0}}getPlayNote(){return this.playNote}setPlayNote(t){return this.playNote=t,this}isRest(){return!1}addStroke(t,e){return e.setNote(this),e.setIndex(t),this.modifiers.push(e),this.preFormatted=!1,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this.setYs([t.getYForLine(0)]),this.setContext(this.stave.getContext()),this}getLeftDisplacedHeadPx(){return this.leftDisplacedHeadPx}getRightDisplacedHeadPx(){return this.rightDisplacedHeadPx}setLeftDisplacedHeadPx(t){return this.leftDisplacedHeadPx=t,this}setRightDisplacedHeadPx(t){return this.rightDisplacedHeadPx=t,this}shouldIgnoreTicks(){return this.ignore_ticks}getLineNumber(t){return 0}getLineForRest(){return 0}getGlyph(){return this.glyphProps}getGlyphProps(){return this.glyphProps}getGlyphWidth(){return this.glyphProps.getWidth(this.render_options.glyph_font_scale)}setYs(t){return this.ys=t,this}getYs(){if(0===this.ys.length)throw new g("NoYValues","No Y-values calculated for this note.");return this.ys}getYForTopText(t){return this.checkStave().getYForTopText(t)}getVoice(){if(!this.voice)throw new g("NoVoice","Note has no voice.");return this.voice}setVoice(t){return this.voice=t,this.preFormatted=!1,this}getTickContext(){return this.checkTickContext()}setTickContext(t){return this.tickContext=t,this.preFormatted=!1,this}getDuration(){return this.duration}isDotted(){return this.getModifiersByType(x.Dot).length>0}hasStem(){return!1}getNoteType(){return this.noteType}getBeam(){return this.beam}checkBeam(){return p(this.beam,"NoBeam","No beam attached to instance")}hasBeam(){return null!=this.beam}setBeam(t){return this.beam=t,this}addModifier(t,e=0){const i="Note.addModifier(modifier: Modifier, index: number=0)";if("string"==typeof e&&(e=parseInt(e),console.warn(i+" expected a number for `index`, but received a string.")),"object"!=typeof t||"number"!=typeof e)throw new g("WrongParams","Incorrect call signature. Use "+i+" instead.");return t.setNote(this),t.setIndex(e),super.addModifier(t),this}getModifiersByType(t){return this.modifiers.filter((e=>e.getCategory()===t))}getModifierStartXY(t,e,i){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");return{x:this.getAbsoluteX(),y:this.ys[0]}}getRightParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getRightDisplacedHeadPx():0}getLeftParenthesisPx(t){return this.getKeyProps()[t].displaced?this.getLeftDisplacedHeadPx()-this.x_shift:-this.x_shift}getFirstDotPx(){let t=this.getRightDisplacedHeadPx();return 0!==this.checkModifierContext().getMembers("Parenthesis").length&&(t+=V.currentMusicFont().lookupMetric("parenthesis.default.width")),t}getMetrics(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getMetrics on an unformatted note.");const t=this.modifierContext?this.modifierContext.getState().left_shift:0,e=this.modifierContext?this.modifierContext.getState().right_shift:0,i=this.getWidth();return{width:i,glyphWidth:this.getGlyphWidth(),notePx:i-t-e-this.leftDisplacedHeadPx-this.rightDisplacedHeadPx,modLeftPx:t,modRightPx:e,leftDisplacedHeadPx:this.leftDisplacedHeadPx,rightDisplacedHeadPx:this.rightDisplacedHeadPx,glyphPx:0}}getAbsoluteX(){let t=this.checkTickContext("Can't getAbsoluteX() without a TickContext.").getX();return this.stave&&(t+=this.stave.getNoteStartX()+V.currentMusicFont().lookupMetric("stave.padding")),this.isCenterAligned()&&(t+=this.getCenterXShift()),t}getStemDirection(){throw new g("NoStem","No stem attached to this note.")}getStemExtents(){throw new g("NoStem","No stem attached to this note.")}getTieRightX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t+=-this.width/2+this.width+2,t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.glyphProps.getWidth()/2,t-=this.width/2+2,t}getKeys(){return this.keys}getKeyProps(){return this.keyProps}}var wt,zt,Bt,Dt,Ct,Pt;!function(t){t[t.CENTER=0]="CENTER",t[t.LEFT=1]="LEFT",t[t.RIGHT=2]="RIGHT",t[t.ABOVE=3]="ABOVE",t[t.BELOW=4]="BELOW",t[t.BEGIN=5]="BEGIN",t[t.END=6]="END"}(wt||(wt={}));class kt extends R{static get CATEGORY(){return x.StaveModifier}static get Position(){return wt}constructor(){super(),this.width=0,this.x=0,this.padding=10,this.position=wt.ABOVE}getPosition(){return this.position}setPosition(t){return this.position=t,this}getStave(){return this.stave}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}setStave(t){return this.stave=t,this}getWidth(){return this.width}setWidth(t){return this.width=t,this}getX(){return this.x}setX(t){return this.x=t,this}placeGlyphOnLine(t,e,i,b=0){t.setYShift(e.getYForLine(null!=i?i:0)-e.getYForGlyphs()+b)}getPadding(t){return void 0!==t&&t<2?0:this.padding}setPadding(t){return this.padding=t,this}setLayoutMetrics(t){return this.layoutMetrics=t,this}getLayoutMetrics(){return this.layoutMetrics}draw(...t){}}!function(t){t[t.SINGLE=1]="SINGLE",t[t.DOUBLE=2]="DOUBLE",t[t.END=3]="END",t[t.REPEAT_BEGIN=4]="REPEAT_BEGIN",t[t.REPEAT_END=5]="REPEAT_END",t[t.REPEAT_BOTH=6]="REPEAT_BOTH",t[t.NONE=7]="NONE"}(zt||(zt={}));class Et extends kt{static get CATEGORY(){return x.Barline}static get type(){return zt}static get typeString(){return{single:zt.SINGLE,double:zt.DOUBLE,end:zt.END,repeatBegin:zt.REPEAT_BEGIN,repeatEnd:zt.REPEAT_END,repeatBoth:zt.REPEAT_BOTH,none:zt.NONE}}constructor(t){super(),this.thickness=V.STAVE_LINE_THICKNESS;const e=zt;this.widths={},this.widths[e.SINGLE]=5,this.widths[e.DOUBLE]=5,this.widths[e.END]=5,this.widths[e.REPEAT_BEGIN]=5,this.widths[e.REPEAT_END]=5,this.widths[e.REPEAT_BOTH]=5,this.widths[e.NONE]=5,this.paddings={},this.paddings[e.SINGLE]=0,this.paddings[e.DOUBLE]=0,this.paddings[e.END]=0,this.paddings[e.REPEAT_BEGIN]=15,this.paddings[e.REPEAT_END]=15,this.paddings[e.REPEAT_BOTH]=15,this.paddings[e.NONE]=0,this.layoutMetricsMap={},this.layoutMetricsMap[e.SINGLE]={xMin:0,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.DOUBLE]={xMin:-3,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.END]={xMin:-5,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_END]={xMin:-10,xMax:1,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BEGIN]={xMin:-2,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.REPEAT_BOTH]={xMin:-10,xMax:10,paddingLeft:5,paddingRight:5},this.layoutMetricsMap[e.NONE]={xMin:0,xMax:0,paddingLeft:5,paddingRight:5},this.setPosition(wt.BEGIN),this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Et.typeString[t]:t,this.setWidth(this.widths[this.type]),this.setPadding(this.paddings[this.type]),this.setLayoutMetrics(this.layoutMetricsMap[this.type]),this}draw(t){const e=t.checkContext();switch(this.setRendered(),this.applyStyle(e),e.openGroup("stavebarline",this.getAttribute("id")),this.type){case zt.SINGLE:this.drawVerticalBar(t,this.x,!1);break;case zt.DOUBLE:this.drawVerticalBar(t,this.x,!0);break;case zt.END:this.drawVerticalEndBar(t,this.x);break;case zt.REPEAT_BEGIN:this.drawRepeatBar(t,this.x,!0),t.getX()!==this.x&&this.drawVerticalBar(t,t.getX());break;case zt.REPEAT_END:this.drawRepeatBar(t,this.x,!1);break;case zt.REPEAT_BOTH:this.drawRepeatBar(t,this.x,!1),this.drawRepeatBar(t,this.x,!0)}e.closeGroup(),this.restoreStyle(e)}drawVerticalBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();i&&b.fillRect(e-3,a,1,n-a),b.fillRect(e,a,1,n-a)}drawVerticalEndBar(t,e){const i=t.checkContext(),b=t.getTopLineTopY(),a=t.getBottomLineBottomY();i.fillRect(e-5,b,1,a-b),i.fillRect(e-2,b,3,a-b)}drawRepeatBar(t,e,i){const b=t.checkContext(),a=t.getTopLineTopY(),n=t.getBottomLineBottomY();let s=3;i||(s=-5),b.fillRect(e+s,a,1,n-a),b.fillRect(e-2,a,3,n-a);i?s+=4:s-=4;const l=e+s+1;let o=(t.getNumLines()-1)*t.getSpacingBetweenLines();o=o/2-t.getSpacingBetweenLines()/2;let r=a+o+1;b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill(),r+=t.getSpacingBetweenLines(),b.beginPath(),b.arc(l,r,2,0,2*Math.PI,!1),b.fill()}}class Mt extends vt{static get CATEGORY(){return x.BarNote}constructor(t=zt.SINGLE){super({duration:"b"}),this.metrics={widths:{}};const e=zt;this.metrics.widths={[e.SINGLE]:8,[e.DOUBLE]:12,[e.END]:15,[e.REPEAT_BEGIN]:14,[e.REPEAT_END]:14,[e.REPEAT_BOTH]:18,[e.NONE]:0},this.ignore_ticks=!0,this.setType(t)}getType(){return this.type}setType(t){return this.type="string"==typeof t?Et.typeString[t]:t,this.setWidth(this.metrics.widths[this.type]),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkContext();!function(...t){Mt.DEBUG&&u("Vex.Flow.BarNote",t)}("Rendering bar line at: ",this.getAbsoluteX()),this.applyStyle(t);const e=new Et(this.type);e.setX(this.getAbsoluteX()),e.draw(this.checkStave()),this.restoreStyle(t),this.setRendered()}}Mt.DEBUG=!1;class Ft extends tt{static get CATEGORY(){return x.Bend}static get UP(){return 0}static get DOWN(){return 1}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let b=0;bt{const n=t+b,s=i;e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,i),e.quadraticCurveTo(n,s,t+b,a),e.stroke(),e.restore()},h=(t,i,b,a)=>{e.save(),e.beginPath(),e.setLineWidth(this.render_options.line_width),e.setStrokeStyle(this.render_options.line_style),e.setFillStyle(this.render_options.line_style),e.moveTo(t,a),e.quadraticCurveTo(t+b,a,t+b,i),e.stroke(),e.restore()},m=(t,i,b)=>{const a=i+4*b;e.beginPath(),e.moveTo(t,i),e.lineTo(t-4,a),e.lineTo(t+4,a),e.closePath(),e.fill()},c=(t,i)=>{e.save(),e.setFont(this.textFont);const b=t-e.measureText(i).width/2;e.fillText(i,b,o),e.restore()};let d,_=0,x=0;if(null===(t=this.tap)||void 0===t?void 0:t.length){c(i.getModifierStartXY(tt.Position.CENTER,this.index).x,this.tap)}for(let t=0;t0){const e=r.symbolBlocks[t-1];Nt.isSuperscript(e)||(a=b)}n&&a>0&&(g=!0,e.xShift=e.xShift+(a-b),b=a,a=0,r.setEnableKerning(!1)),i||n||(a=0),e.vAlign=g,b+=e.width,_=b}if(r.updateKerningAdjustments(),r.updateOverBarAdjustments(),r.getVertical()===Dt.TOP?(r.setTextLine(e.top_text_line),e.top_text_line+=x):(r.setTextLine(e.text_line+1),e.text_line+=x+1),r.getReportWidth()&&d(c)){const t=c.getGlyphProps().getWidth();r.getHorizontal()===Bt.LEFT?(l=Math.max(t,l),n=Math.max(n,_)+Nt.minPadding):r.getHorizontal()===Bt.RIGHT?(o=Math.max(t,o),s=Math.max(s,_)):(n=Math.max(n,_/2)+Nt.minPadding,s=Math.max(s,_/2),l=Math.max(t/2,l),o=Math.max(t/2,o))}b=0}const r=Math.min(Math.max(s-o,0),Math.max(s-e.right_shift,0)),h=Math.min(Math.max(n-l,0),Math.max(n-e.left_shift,0));return e.left_shift+=h,e.right_shift+=r,!0}constructor(){super(),this.symbolBlocks=[],this.horizontal=Bt.LEFT,this.vertical=Dt.TOP,this.useKerning=!0,this.reportWidth=!0,this.resetFont()}static get TEXT_FONT(){let t="Roboto Slab, Times, serif";return"Petaluma"===V.currentMusicFont().getName()&&(t="PetalumaScript, Arial, sans-serif"),{family:t,size:12,weight:P.NORMAL,style:k.NORMAL}}get superscriptOffset(){return Nt.superscriptOffset*this.textFormatter.fontSizeInPixels}get subscriptOffset(){return Nt.subscriptOffset*this.textFormatter.fontSizeInPixels}setReportWidth(t){return this.reportWidth=t,this}getReportWidth(){return this.reportWidth}updateOverBarAdjustments(){const t=this.symbolBlocks.findIndex((({symbolType:t,glyph:e})=>t===Ct.GLYPH&&void 0!==e&&"csymDiagonalArrangementSlash"===e.code));if(t<0)return;const e=this.symbolBlocks[t].width/4,i=.25*this.textFormatter.fontSizeInPixels;let b=0;for(;b0?this.symbolBlocks[t-1]:void 0;let b=0;e.symbolType===Ct.GLYPH&&void 0!==e.glyph&&e.glyph.code===Nt.glyphs.over.code&&(b+=e.glyph.metrics.x_shift),void 0!==i&&i.symbolType===Ct.GLYPH&&void 0!==i.glyph&&i.glyph.code===Nt.glyphs.over.code&&(b+=i.glyph.metrics.x_shift);let a=!1,n=!1;void 0!==i&&i.symbolType===Ct.TEXT&&(a=Nt.upperKerningText.some((t=>t===i.text[i.text.length-1])),n=Nt.lowerKerningText.some((t=>t===i.text[i.text.length-1])));const s=Nt.kerningOffset*this.textFormatter.fontSizeInPixels;return a&&e.symbolModifier===Pt.SUPERSCRIPT&&(b+=s),n&&e.symbolType===Ct.TEXT&&(e.text[0]>="a"&&e.text[0]<="z"&&(b+=s/2),Nt.upperKerningText.some((t=>t===(null==i?void 0:i.text[i.text.length-1])))&&(b+=s/2)),b}getSymbolBlock(t={}){var e,i,b;const a=null!==(e=t.symbolType)&&void 0!==e?e:Ct.TEXT,n={text:null!==(i=t.text)&&void 0!==i?i:"",symbolType:a,symbolModifier:null!==(b=t.symbolModifier)&&void 0!==b?b:Pt.NONE,xShift:0,yShift:0,vAlign:!1,width:0};if(a===Ct.GLYPH&&"string"==typeof t.glyph){const e=Nt.glyphs[t.glyph],i=20;n.glyph=new Z(e.code,i,{category:"chordSymbol"})}else a===Ct.TEXT?n.width=this.textFormatter.getWidthForTextInEm(n.text):a===Ct.LINE&&(n.width=t.width);return n}addSymbolBlock(t){return this.symbolBlocks.push(this.getSymbolBlock(t)),this}addText(t,e={}){const i=Ct.TEXT;return this.addSymbolBlock(Object.assign(Object.assign({},e),{text:t,symbolType:i}))}addTextSuperscript(t){const e=Ct.TEXT,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addTextSubscript(t){const e=Ct.TEXT,i=Pt.SUBSCRIPT;return this.addSymbolBlock({text:t,symbolType:e,symbolModifier:i})}addGlyphSuperscript(t){const e=Ct.GLYPH,i=Pt.SUPERSCRIPT;return this.addSymbolBlock({glyph:t,symbolType:e,symbolModifier:i})}addGlyph(t,e={}){const i=Ct.GLYPH;return this.addSymbolBlock(Object.assign(Object.assign({},e),{glyph:t,symbolType:i}))}addGlyphOrText(t,e={}){let i="";for(let b=0;b0&&(this.addText(i,e),i=""),this.addGlyph(a,e)):i+=a}return i.length>0&&this.addText(i,e),this}addLine(t,e={}){const i=Ct.LINE;return this.addSymbolBlock(Object.assign(Object.assign({},e),{symbolType:i,width:t}))}setFont(t,e,i,b){return super.setFont(t,e,i,b),this.textFormatter=rt.create(this.textFont),this}setEnableKerning(t){return this.useKerning=t,this}setVertical(t){return this.vertical="string"==typeof t?Nt.VerticalJustifyString[t]:t,this}getVertical(){return this.vertical}setHorizontal(t){return this.horizontal="string"==typeof t?Nt.HorizontalJustifyString[t]:t,this}getHorizontal(){return this.horizontal}getWidth(){let t=0;return this.symbolBlocks.forEach((e=>{t+=e.vAlign?0:e.width})),t}getYOffsetForText(t){var e;let i=0,b=0;for(b=0;b0?i/a*-1:0}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),t.save(),this.applyStyle(),t.openGroup("chordsymbol",this.getAttribute("id"));const i=e.getModifierStartXY(tt.Position.ABOVE,this.index);let b;t.setFont(this.textFont);const a=e.hasStem(),n=e.checkStave();if(this.vertical===Dt.BOTTOM){if(b=n.getYForBottomText(this.text_line+V.TEXT_HEIGHT_OFFSET_HACK),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines(),a=1===e.getStemDirection()?t.baseY:t.topY;b=Math.max(b,a+i*(this.text_line+2))}}else{const t=Math.min(...e.getYs());if(b=Math.min(n.getYForTopText(this.text_line),t-10),a){const t=e.checkStem().getExtents(),i=n.getSpacingBetweenLines();b=Math.min(b,t.topY-5-i*this.text_line)}}let s=i.x;s=this.horizontal===Bt.LEFT?i.x:this.horizontal===Bt.RIGHT?i.x+this.getWidth():this.horizontal===Bt.CENTER?i.x-this.getWidth()/2:e.getStemX()-this.getWidth()/2,At("Rendering ChordSymbol: ",this.textFormatter,s,b),this.symbolBlocks.forEach((e=>{const i=Nt.isSuperscript(e),a=Nt.isSubscript(e);let n=b;if(At("shift was ",e.xShift,e.yShift),At("curY pre sub ",n),i&&(n+=this.superscriptOffset),a&&(n+=this.subscriptOffset),At("curY sup/sub ",n),e.symbolType===Ct.TEXT){if((i||a)&&(t.save(),this.textFont)){const{family:e,size:i,weight:b,style:a}=this.textFont,n=A.scaleSize(i,Nt.superSubRatio);t.setFont(e,n,b,a)}At("Rendering Text: ",e.text,s+e.xShift,n+e.yShift),t.fillText(e.text,s+e.xShift,n+e.yShift),(i||a)&&t.restore()}else e.symbolType===Ct.GLYPH&&e.glyph?(n+=e.yShift,At("Rendering Glyph: ",e.glyph.code,s+e.xShift,n),e.glyph.render(t,s+e.xShift,n)):e.symbolType===Ct.LINE&&(At("Rendering Line : ",e.width,s,n),t.beginPath(),t.setLineWidth(1),t.moveTo(s,b),t.lineTo(s+e.width,n),t.stroke());s+=e.width,e.vAlign&&(s+=e.xShift)})),t.closeGroup(),this.restoreStyle(),t.restore()}}Nt.DEBUG=!1,Nt.HorizontalJustify=Bt,Nt.HorizontalJustifyString={left:Bt.LEFT,right:Bt.RIGHT,center:Bt.CENTER,centerStem:Bt.CENTER_STEM},Nt.VerticalJustify=Dt,Nt.VerticalJustifyString={top:Dt.TOP,above:Dt.TOP,below:Dt.BOTTOM,bottom:Dt.BOTTOM},Nt.glyphs={diminished:{code:"csymDiminished"},dim:{code:"csymDiminished"},halfDiminished:{code:"csymHalfDiminished"},"+":{code:"csymAugmented"},augmented:{code:"csymAugmented"},majorSeventh:{code:"csymMajorSeventh"},minor:{code:"csymMinor"},"-":{code:"csymMinor"},"(":{code:"csymParensLeftTall"},leftParen:{code:"csymParensLeftTall"},")":{code:"csymParensRightTall"},rightParen:{code:"csymParensRightTall"},leftBracket:{code:"csymBracketLeftTall"},rightBracket:{code:"csymBracketRightTall"},leftParenTall:{code:"csymParensLeftVeryTall"},rightParenTall:{code:"csymParensRightVeryTall"},"/":{code:"csymDiagonalArrangementSlash"},over:{code:"csymDiagonalArrangementSlash"},"#":{code:"accidentalSharp"},b:{code:"accidentalFlat"}},Nt.symbolTypes=Ct,Nt.symbolModifiers=Pt,Nt.noFormat=!1;class Ot extends tt{static get CATEGORY(){return x.Dot}static getDots(t){return t.getModifiersByType(Ot.CATEGORY)}static buildAndAttach(t,e){for(const i of t)if(null==e?void 0:e.all)for(let t=0;te.line-t.line));let n=i,s=0,l=null,o=null,r=null,h=0;for(let t=0;ts?n:s,l=c,o=i}return e.right_shift+=s,!0}constructor(){super(),this.position=tt.Position.RIGHT,this.radius=2,this.setWidth(5),this.dot_shiftY=0}setNote(t){return this.note=t,o(t)&&(this.radius*=.5,this.setWidth(3)),this}setDotShiftY(t){return this.dot_shiftY=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.checkStave().getSpacingBetweenLines(),b=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0});_(e)&&(b.y=e.getStemExtents().baseY);const a=b.x+this.x_shift+this.width-this.radius,n=b.y+this.y_shift+this.dot_shiftY*i;t.beginPath(),t.arc(a,n,this.radius,0,2*Math.PI,!1),t.fill()}}class Rt extends tt{static get CATEGORY(){return x.FretHandFinger}static format(t,e){const{left_shift:i,right_shift:b}=e;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let o=0;oe.line-t.line));let o=0,r=0,h=0,m=0,c=null,d=null;for(let t=0;th?e:h):s===tt.Position.RIGHT&&(_.setXShift(r),e=l+p,m=e>m?e:m),c=x,d=n}return e.left_shift+=h,e.right_shift+=m,!0}static easyScoreHook({fingerings:t}={},e,i){null==t||t.split(",").map((t=>{const e=t.trim().split("."),b={number:e[0]};return e[1]&&(b.position=e[1]),i.getFactory().Fingering(b)})).map(((t,i)=>e.addModifier(t,i)))}constructor(t){super(),this.finger=t,this.width=7,this.position=tt.Position.LEFT,this.x_shift=0,this.y_shift=0,this.x_offset=0,this.y_offset=0,this.resetFont()}setFretHandFinger(t){return this.finger=t,this}getFretHandFinger(){return this.finger}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=i.x+this.x_shift+this.x_offset,a=i.y+this.y_shift+this.y_offset+5;switch(this.position){case tt.Position.ABOVE:b-=4,a-=12;break;case tt.Position.BELOW:b-=2,a+=10;break;case tt.Position.LEFT:b-=this.width;break;case tt.Position.RIGHT:b+=1;break;default:throw new g("InvalidPosition",`The position ${this.position} does not exist`)}t.save(),t.setFont(this.textFont),t.fillText(""+this.finger,b,a),t.restore()}}Rt.TEXT_FONT={family:A.SANS_SERIF,size:9,weight:P.BOLD,style:k.NORMAL};class Wt extends vt{static get CATEGORY(){return x.NoteHead}constructor(t){super(t),this.custom_glyph=!1,this.stem_up_x_offset=0,this.stem_down_x_offset=0,this.index=t.index,this.x=t.x||0,this.y=t.y||0,t.note_type&&(this.noteType=t.note_type),this.displaced=t.displaced||!1,this.stem_direction=t.stem_direction||at.UP,this.line=t.line||0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),(this.line>5||this.line<0)&&this.glyphProps.ledger_code_head&&(this.glyphProps.code_head=this.glyphProps.ledger_code_head),this.glyph_code=this.glyphProps.code_head,this.x_shift=t.x_shift||0,t.custom_glyph_code&&(this.custom_glyph=!0,this.glyph_code=t.custom_glyph_code,this.stem_up_x_offset=t.stem_up_x_offset||0,this.stem_down_x_offset=t.stem_down_x_offset||0),this.setStyle(t.style),this.slashed=t.slashed||!1,this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE}),this.setWidth(!this.custom_glyph||this.glyph_code.startsWith("noteheadSlashed")||this.glyph_code.startsWith("noteheadCircled")?this.glyphProps.getWidth(this.render_options.glyph_font_scale):Z.getWidth(this.glyph_code,this.render_options.glyph_font_scale))}getWidth(){return this.width}isDisplaced(){return!0===this.displaced}setX(t){return this.x=t,this}getY(){return this.y}setY(t){return this.y=t,this}getLine(){return this.line}setLine(t){return this.line=t,this}getAbsoluteX(){const t=this.preFormatted?super.getAbsoluteX():this.x,e=at.WIDTH/2,i=V.currentMusicFont(),b=i.lookupMetric("notehead.shiftX",0)*this.stem_direction,a=i.lookupMetric("noteHead.displacedShiftX",0)*this.stem_direction;return t+b+(this.displaced?(this.width-e)*this.stem_direction+a:0)}getBoundingBox(){if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const t=this.checkStave().getSpacingBetweenLines(),e=t/2,i=this.y-e;return new D(this.getAbsoluteX(),i,this.width,t)}setStave(t){const e=this.getLine();return this.stave=t,this.stave&&(this.setY(this.stave.getYForNote(e)),this.setContext(this.stave.getContext())),this}preFormat(){if(this.preFormatted)return this;const t=this.getWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx;return this.setWidth(t),this.preFormatted=!0,this}draw(){const t=this.checkContext();this.setRendered();let e=this.getAbsoluteX();this.custom_glyph&&(e+=this.stem_direction===at.UP?this.stem_up_x_offset+(this.glyphProps.stem?this.glyphProps.getWidth(this.render_options.glyph_font_scale)-this.width:0):this.stem_down_x_offset);const i=this.y;!function(...t){Wt.DEBUG&&u("Vex.Flow.NoteHead",t)}("Drawing note head '",this.noteType,this.duration,"' at",e,i);const b=this.stem_direction,a=this.render_options.glyph_font_scale,n=`${this.glyph_code}Stem${b===at.UP?"Up":"Down"}`;if("s"===this.noteType){const a=this.checkStave().getSpacingBetweenLines();!function(t,e,i,b,a,n){const s=V.SLASH_NOTEHEAD_WIDTH;t.save(),t.setLineWidth(V.STEM_WIDTH);let l=!1;if(V.durationToNumber(e)>2&&(l=!0),l||(i-=V.STEM_WIDTH/2*a),t.beginPath(),t.moveTo(i,b+n),t.lineTo(i,b+1),t.lineTo(i+s,b-n),t.lineTo(i+s,b),t.lineTo(i,b+n),t.closePath(),l?t.fill():t.stroke(),V.durationToFraction(e).equals(.5)){const e=[-3,-1,s+1,s+3];for(let a=0;a2&&i++,2===V.durationToNumber(n.note.duration)?e++:V.durationToNumber(n.note.duration)>2&&i++,2!==e&&2!==i||b.note.getModifiersByType(x.Dot).length!==n.note.getModifiersByType(x.Dot).length||t<1&&t>0?(r=o+2,b.stemDirection===n.stemDirection?b.note.setXShift(r):n.note.setXShift(r)):b.note.voice!==n.note.voice&&b.stemDirection===n.stemDirection&&(b.line!=n.line?(r=o+2,b.note.setXShift(r)):1===n.stemDirection&&(n.stemDirection=-1,n.note.setStemDirection(-1)))}else t<1?(r=o+2,b.stemDirection===n.stemDirection?b.note.setXShift(r):n.note.setXShift(r)):b.note.hasStem()?(b.stemDirection=-b.note.getStemDirection(),b.note.setStemDirection(b.stemDirection)):n.note.hasStem()&&(n.stemDirection=-n.note.getStemDirection(),n.note.setStemDirection(n.stemDirection))}return e.right_shift+=r,!0}if(!a)throw new g("InvalidState","noteM not defined.");if(a.isrest&&!b.isrest&&!n.isrest&&(b.minLine<=a.maxLine||a.minLine<=n.maxLine)){return a.maxLine-a.minLinet.postFormat())),!0)}constructor(t){var e,i,b;super(t),this.minLine=0,this.maxLine=0,this.sortedKeyProps=[],this.ledgerLineStyle={},this.clef=null!==(e=t.clef)&&void 0!==e?e:"treble",this.octave_shift=null!==(i=t.octave_shift)&&void 0!==i?i:0,this.glyphProps=V.getGlyphProps(this.duration,this.noteType),p(this.glyphProps,"BadArguments",`No glyph found for duration '${this.duration}' and type '${this.noteType}'`),this.displaced=!1,this.dot_shiftY=0,this.use_default_head_x=!1,this._noteHeads=[],this.modifiers=[],this.render_options=Object.assign(Object.assign({},this.render_options),{glyph_font_scale:t.glyph_font_scale||V.NOTATION_FONT_SCALE,stroke_px:t.stroke_px||It.LEDGER_LINE_OFFSET}),this.calculateKeyProps(),this.buildStem(),t.auto_stem?this.autoStem():this.setStemDirection(null!==(b=t.stem_direction)&&void 0!==b?b:at.UP),this.reset(),this.buildFlag()}reset(){super.reset();const t=this._noteHeads.map((t=>t.getStyle()));this.buildNoteHeads(),this._noteHeads.forEach(((e,i)=>{const b=t[i];b&&e.setStyle(b)}));const e=this.stave;return e&&this._noteHeads.forEach((t=>t.setStave(e))),this.calcNoteDisplacements(),this}setBeam(t){return this.beam=t,this.calcNoteDisplacements(),this.stem&&this.stem.setExtension(this.getStemExtension()),this}buildStem(){return this.setStem(new at({hide:!!this.isRest()})),this}buildNoteHeads(){this._noteHeads=[];const t=this.getStemDirection(),e=this.getKeys();let i,b,a,n,s,l=!1;t===at.UP?(a=0,n=e.length,s=1):(a=e.length-1,n=-1,s=-1);for(let e=a;e!==n;e+=s){const a=this.sortedKeyProps[e].keyProps,n=a.line;void 0===i?i=n:(b=Math.abs(i-n),0===b||.5===b?l=!l:(l=!1,this.use_default_head_x=!0)),i=n;const s=new Wt({duration:this.duration,note_type:this.noteType,displaced:l,stem_direction:t,custom_glyph_code:a.code,glyph_font_scale:this.render_options.glyph_font_scale,x_shift:a.shift_right,stem_up_x_offset:a.stem_up_x_offset,stem_down_x_offset:a.stem_down_x_offset,line:a.line});this.addChildElement(s),this._noteHeads[this.sortedKeyProps[e].index]=s}}autoStem(){this.setStemDirection(this.calculateOptimalStemDirection())}calculateOptimalStemDirection(){this.minLine=this.sortedKeyProps[0].keyProps.line,this.maxLine=this.sortedKeyProps[this.keyProps.length-1].keyProps.line;return(this.minLine+this.maxLine)/2<3?at.UP:at.DOWN}calculateKeyProps(){let t;for(let e=0;e0&&(this.keyProps[e-1].displaced=!0)),t=n,this.keyProps.push(a)}this.keyProps.forEach(((t,e)=>{this.sortedKeyProps.push({keyProps:t,index:e})})),this.sortedKeyProps.sort(((t,e)=>t.keyProps.line-e.keyProps.line))}getBoundingBox(){var t,e;if(!this.preFormatted)throw new g("UnformattedNote","Can't call getBoundingBox on an unformatted note.");const{width:i,modLeftPx:b,leftDisplacedHeadPx:a}=this.getMetrics(),n=this.getAbsoluteX()-b-a;let s=0,l=0;const o=(null!==(e=null===(t=this.getStave())||void 0===t?void 0:t.getSpacingBetweenLines())&&void 0!==e?e:0)/2,r=2*o;if(this.isRest()){const t=this.ys[0],e=V.durationToFraction(this.duration);e.equals(1)||e.equals(2)?(s=t-o,l=t+o):(s=t-this.glyphProps.line_above*r,l=t+this.glyphProps.line_below*r)}else if(this.glyphProps.stem){const t=this.getStemExtents();t.baseY+=o*this.getStemDirection(),s=Math.min(t.topY,t.baseY),l=Math.max(t.topY,t.baseY)}else{s=0,l=0;for(let t=0;te&&(e=b):b1}hasStem(){return this.glyphProps.stem}hasFlag(){return super.hasFlag()&&!this.isRest()}getStemX(){return"r"===this.noteType?this.getCenterGlyphX():super.getStemX()+(this.stem_direction?at.WIDTH/(2*-this.stem_direction):0)}getYForTopText(t){const e=this.getStemExtents();return Math.min(this.checkStave().getYForTopText(t),e.topY-this.render_options.annotation_spacing*(t+1))}getYForBottomText(t){const e=this.getStemExtents();return Math.max(this.checkStave().getYForTopText(t),e.baseY+this.render_options.annotation_spacing*t)}setStave(t){super.setStave(t);const e=this._noteHeads.map((e=>(e.setStave(t),e.getY())));if(this.setYs(e),this.stem){const{y_top:t,y_bottom:e}=this.getNoteHeadBounds();this.stem.setYBounds(t,e)}return this}isDisplaced(){return this.displaced}setNoteDisplaced(t){return this.displaced=t,this}getTieRightX(){let t=this.getAbsoluteX();return t+=this.getGlyphWidth()+this.x_shift+this.rightDisplacedHeadPx,this.modifierContext&&(t+=this.modifierContext.getRightShift()),t}getTieLeftX(){let t=this.getAbsoluteX();return t+=this.x_shift-this.leftDisplacedHeadPx,t}getLineForRest(){let t=this.keyProps[0].line;if(this.keyProps.length>1){const e=this.keyProps[this.keyProps.length-1].line;t=S(Math.max(t,e),Math.min(t,e))}return t}getModifierStartXY(t,e,i={}){var b,a;if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");const{ABOVE:n,BELOW:s,LEFT:l,RIGHT:o}=tt.Position;let r=0;return t===l?r=-2:t===o?(r=this.getGlyphWidth()+this.x_shift+2,this.stem_direction===at.UP&&this.hasFlag()&&(i.forceFlagRight||((t,e)=>e===(t.getStemDirection()===at.UP?t.keyProps.length-1:0))(this,e))&&(r+=null!==(a=null===(b=null==this?void 0:this.flag)||void 0===b?void 0:b.getMetrics().width)&&void 0!==a?a:0)):t!==s&&t!==n||(r=this.getGlyphWidth()/2),{x:this.getAbsoluteX()+r,y:this.ys[e]}}setStyle(t){return super.setGroupStyle(t)}setStemStyle(t){const e=this.getStem();return e&&e.setStyle(t),this}getStemStyle(){var t;return null===(t=this.stem)||void 0===t?void 0:t.getStyle()}setLedgerLineStyle(t){this.ledgerLineStyle=t}getLedgerLineStyle(){return this.ledgerLineStyle}setFlagStyle(t){var e;null===(e=this.flag)||void 0===e||e.setStyle(t)}getFlagStyle(){var t;return null===(t=this.flag)||void 0===t?void 0:t.getStyle()}setKeyStyle(t,e){return this._noteHeads[t].setStyle(e),this}setKeyLine(t,e){return this.keyProps[t].line=e,this.reset(),this}getKeyLine(t){return this.keyProps[t].line}getVoiceShiftWidth(){return this.getGlyphWidth()*(this.displaced?2:1)}calcNoteDisplacements(){this.setLeftDisplacedHeadPx(this.displaced&&this.stem_direction===at.DOWN?this.getGlyphWidth():0),this.setRightDisplacedHeadPx(!this.hasFlag()&&this.displaced&&this.stem_direction===at.UP?this.getGlyphWidth():0)}preFormat(){if(this.preFormatted)return;let t=0;this.modifierContext&&(this.modifierContext.preFormat(),0===this.modifierContext.getWidth()&&(t=It.minNoteheadPadding));let e=this.getGlyphWidth()+this.leftDisplacedHeadPx+this.rightDisplacedHeadPx+t;this.shouldDrawFlag()&&this.stem_direction===at.UP&&(e+=this.getGlyphWidth()),this.setWidth(e),this.preFormatted=!0}getNoteHeadBounds(){let t,e,i,b,a=1/0,n=-1/0,s=this.checkStave().getNumLines(),l=1,o=s,r=l;return this._noteHeads.forEach((h=>{const m=h.getLine(),c=h.getY();a=Math.min(c,a),n=Math.max(c,n),void 0===e&&h.isDisplaced()&&(e=h.getAbsoluteX()),void 0!==t||h.isDisplaced()||(t=h.getAbsoluteX()),s=Math.max(m,s),l=Math.min(m,l),h.isDisplaced()?(i=void 0===i?m:Math.max(m,i),b=void 0===b?m:Math.min(m,b)):(o=Math.max(m,o),r=Math.min(m,r))}),this),{y_top:a,y_bottom:n,displaced_x:e,non_displaced_x:t,highest_line:s,lowest_line:l,highest_displaced_line:i,lowest_displaced_line:b,highest_non_displaced_line:o,lowest_non_displaced_line:r}}getNoteHeadBeginX(){return this.getAbsoluteX()+this.x_shift}getNoteHeadEndX(){return this.getNoteHeadBeginX()+this.getGlyphWidth()}get noteHeads(){return this._noteHeads.slice()}get note_heads(){return console.warn("StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.","This accessor will be removed in VexFlow 5.0."),this.noteHeads}drawLedgerLines(){const t=this.checkStave(),{glyphProps:e,render_options:{stroke_px:i}}=this,b=this.checkContext(),a=e.getWidth()+2*i,n=2*(e.getWidth()+i)-at.WIDTH/2;if(this.isRest())return;if(!b)throw new g("NoCanvasContext","Can't draw without a canvas context.");const{highest_line:s,lowest_line:l,highest_displaced_line:o,highest_non_displaced_line:r,lowest_displaced_line:h,lowest_non_displaced_line:m,displaced_x:c,non_displaced_x:d}=this.getNoteHeadBounds();if(s<6&&l>0)return;const _=Math.min(null!=c?c:0,null!=d?d:0),x=(t,e,s)=>{let l;l=s&&e?_-i:e?(null!=d?d:0)-i:(null!=c?c:0)-i;const o=e&&s?n:a;b.beginPath(),b.moveTo(l,t),b.lineTo(l+o,t),b.stroke()},y=Object.assign(Object.assign({},t.getDefaultLedgerLineStyle()),this.getLedgerLineStyle());this.applyStyle(b,y);for(let e=6;e<=s;++e){const i=void 0!==d&&e<=r,b=void 0!==o&&e<=o;x(t.getYForNote(e),i,b)}for(let e=0;e>=l;--e){const i=void 0!==d&&e>=m,b=void 0!==h&&e>=h;x(t.getYForNote(e),i,b)}this.restoreStyle(b,y)}drawModifiers(t){const e=this.checkContext();for(let i=0;i{e.applyStyle(t),t.openGroup("notehead",e.getAttribute("id"),{pointerBBox:!0}),e.setContext(t).draw(),this.drawModifiers(e),t.closeGroup(),e.restoreStyle(t)}))}drawStem(t){const e=this.checkContext();t&&this.setStem(new at(t)),this.shouldDrawFlag()&&this.stem&&this.stem.adjustHeightForFlag(),this.stem&&this.stem.setContext(e).draw()}getStaveNoteScale(){return 1}getStemExtension(){const t=super.getStemExtension();if(!this.glyphProps.stem)return t;const e=this.getStemDirection();if(e!==this.calculateOptimalStemDirection())return t;let i;i=e===at.UP?3-this.maxLine:this.minLine-3;const b=i-3.5;if(b<=0)return t;const a=this.getStave();let n=10;return null!=a&&(n=a.getSpacingBetweenLines()),t+b*n}draw(){if(!1===this.render_options.draw)return;if(0===this.ys.length)throw new g("NoYValues","Can't draw note without Y values.");const t=this.checkContext(),e=this.getNoteHeadBeginX(),i=this.hasStem()&&!this.beam;if(this._noteHeads.forEach((t=>t.setX(e))),this.stem){const t=this.getStemX();this.stem.setNoteHeadXBounds(t,t)}!function(...t){It.DEBUG&&u("Vex.Flow.StaveNote",t)}("Rendering ",this.isChord()?"chord :":"note :",this.keys),this.applyStyle(),t.openGroup("stavenote",this.getAttribute("id")),this.drawLedgerLines(),i&&this.drawStem(),this.drawNoteHeads(),this.drawFlag(),t.closeGroup(),this.restoreStyle(),this.setRendered()}}It.DEBUG=!1;class Yt extends R{static get CATEGORY(){return x.StaveTie}constructor(t,e){super(),this.setNotes(t),this.text=e,this.render_options={cp1:8,cp2:12,text_shift_x:0,first_x_shift:0,last_x_shift:0,y_shift:7,tie_spacing:0},this.resetFont()}setDirection(t){return this.direction=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Tie needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Tied notes must have same number of indices.");return this.notes=t,this}isPartial(){return!this.notes.first_note||!this.notes.last_note}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext();let i=this.render_options.cp1,b=this.render_options.cp2;Math.abs(t.last_x_px-t.first_x_px)<10&&(i=2,b=8);const a=this.render_options.first_x_shift,n=this.render_options.last_x_shift,s=this.render_options.y_shift*t.direction,l=this.notes.first_indices,o=this.notes.last_indices;this.applyStyle(),e.openGroup("stavetie",this.getAttribute("id"));for(let r=0;rMath.pow(this.options.softmaxFactor,e.getTicks().value()/t)))),this.expTicksUsed}softmax(t){this.expTicksUsed||(this.expTicksUsed=this.reCalculateExpTicksUsed());const e=this.ticksUsed.value();return(t=>Math.pow(this.options.softmaxFactor,t/e))(t)/this.expTicksUsed}addTickable(t){if(!t.shouldIgnoreTicks()){const e=t.getTicks();if(this.ticksUsed.add(e),this.expTicksUsed=0,(this.mode===Ht.STRICT||this.mode===Ht.FULL)&&this.ticksUsed.greaterThan(this.totalTicks))throw this.ticksUsed.subtract(e),new g("BadArgument","Too many ticks.");e.lessThan(this.smallestTickCount)&&(this.smallestTickCount=e.clone()),this.resolutionMultiplier=this.ticksUsed.denominator,this.totalTicks.add(0,this.ticksUsed.denominator)}return this.tickables.push(t),t.setVoice(this),this}addTickables(t){for(let e=0;e{e.getStave()||e.setStave(t)})),this.preFormatted=!0,this}checkStave(){return p(this.stave,"NoStave","No stave attached to instance.")}draw(t=this.checkContext(),e){let i;e=null!=e?e:this.stave,this.setRendered();for(let b=0;b1){const e=new Re(t);e.render_options.beam_width=3,e.render_options.partial_beam_length=4,this.beams.push(e)}return this}setWidth(t){return this.width=t,this}getWidth(){return this.width+It.minNoteheadPadding}getGraceNotes(){return this.grace_notes}draw(){const t=this.checkContext(),e=this.checkAttachedNote();if(this.setRendered(),function(...t){jt.DEBUG&&u("Vex.Flow.GraceNoteGroup",t)}("Drawing grace note group for:",e),this.alignSubNotesWithNote(this.getGraceNotes(),e),this.grace_notes.forEach((e=>e.setContext(t).draw())),this.beams.forEach((e=>e.setContext(t).draw())),this.show_slur){const i=c(e),b=i?Yt:Gt;this.slur=new b({last_note:this.grace_notes[0],first_note:e,first_indices:[0],last_indices:[0]}),this.slur.render_options.cp2=12,this.slur.render_options.y_shift=(i?7:5)+this.render_options.slur_y_shift,this.slur.setContext(t).draw()}}}jt.DEBUG=!1;class Vt extends tt{static get CATEGORY(){return x.NoteSubGroup}static format(t,e){if(!t||0===t.length)return!1;let i=0;for(let e=0;e{t.setIgnoreTicks(!1)})),this.width=0,this.formatter=new ke,this.voice=new Xt({num_beats:4,beat_value:4,resolution:V.RESOLUTION}).setStrict(!1),this.voice.addTickables(this.subNotes)}preFormat(){this.preFormatted||(this.formatter.joinVoices([this.voice]).format([this.voice],0),this.setWidth(this.formatter.getMinTotalWidth()),this.preFormatted=!0)}setWidth(t){return this.width=t,this}getWidth(){return this.width}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered(),this.alignSubNotesWithNote(this.subNotes,e),this.subNotes.forEach((e=>e.setContext(t).drawWithStyle()))}}class Kt{static getNextContext(t){const e=t.tContexts,i=e.indexOf(t);if(i+1t.isCenterAligned()))}getMetrics(){const{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}=this;return{width:t,glyphPx:e,notePx:i,leftDisplacedHeadPx:b,rightDisplacedHeadPx:a,modLeftPx:n,modRightPx:s,totalLeftPx:l,totalRightPx:o}}getCurrentTick(){return this.currentTick}setCurrentTick(t){this.currentTick=t,this.preFormatted=!1}addTickable(t,e){if(!t)throw new g("BadArgument","Invalid tickable added.");if(!t.shouldIgnoreTicks()){const e=t.getTicks();e.greaterThan(this.maxTicks)&&(this.maxTicks=e.clone(),this.maxTickable=t),(null==this.minTicks||e.lessThan(this.minTicks))&&(this.minTicks=e.clone(),this.minTickable=t)}return t.setTickContext(this),this.tickables.push(t),this.tickablesByVoice[e||0]=t,this.preFormatted=!1,this}preFormat(){if(this.preFormatted)return this;for(let t=0;t=0&&(l.x_shift+=b+2),$t.ornamentAttack.indexOf(l.type)>=0&&(l.x_shift-=a+2),l.reportedWidth&&l.x_shift<0?a+=l.reportedWidth:l.reportedWidth&&l.x_shift>=0?b+=l.reportedWidth+$t.minPadding:i=Math.max(l.getWidth(),i),$t.ornamentArticulation.indexOf(l.type)>=0){p(l.note,"NoAttachedNote").getLineNumber()>=3||l.getPosition()===tt.Position.ABOVE?(e.top_text_line+=o,l.y_shift+=n,n-=l.glyph.bbox.getH()):(e.text_line+=o,l.y_shift+=n,n+=l.glyph.bbox.getH())}else l.getPosition()===tt.Position.ABOVE?(l.setTextLine(e.top_text_line),e.top_text_line+=o):(l.setTextLine(e.text_line),e.text_line+=o)}return e.left_shift=a+i/2,e.right_shift=b+i/2,!0}static get ornamentNoteTransition(){return["flip","jazzTurn","smear"]}static get ornamentAttack(){return["scoop"]}static get ornamentAlignWithNoteHead(){return["doit","fall","fallLong","doitLong","bend","plungerClosed","plungerOpen","scoop"]}static get ornamentRelease(){return["doit","fall","fallLong","doitLong","jazzTurn","smear","flip"]}static get ornamentArticulation(){return["bend","plungerClosed","plungerOpen"]}getMetrics(){const t=V.currentMusicFont().getMetrics().ornament;if(!t)throw new g("BadMetrics","ornament missing");return t[this.ornament.code]}constructor(t){super(),this.type=t,this.delayed=!1,this.render_options={font_scale:38,accidentalLowerPadding:3,accidentalUpperPadding:3},this.ornament=V.ornamentCodes(this.type);const e=this.getMetrics();if(this.adjustForStemDirection=!1,this.reportedWidth=e&&e.reportedWidth?e.reportedWidth:0,this.stemUpYOffset=e&&e.stemUpYOffset?e.stemUpYOffset:0,this.ornamentAlignWithNoteHead=$t.ornamentAlignWithNoteHead.indexOf(this.type)>=0,!this.ornament)throw new g("ArgumentError",`Ornament not found: '${this.type}'`);this.x_shift=e?e.xOffset:0,this.y_shift=e?e.yOffset:0,this.glyph=new Z(this.ornament.code,this.render_options.font_scale,{category:`ornament.${this.ornament.code}`}),$t.ornamentNoteTransition.indexOf(this.type)>=0&&(this.delayed=!0),e||this.glyph.setOrigin(.5,1)}setDelayed(t){return this.delayed=t,this}setUpperAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalUpper=new Z(V.accidentalCodes(t).code,e),this.accidentalUpper.setOrigin(.5,1),this}setLowerAccidental(t){const e=this.render_options.font_scale/1.3;return this.accidentalLower=new Z(V.accidentalCodes(t).code,e),this.accidentalLower.setOrigin(.5,1),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getStemDirection(),b=e.checkStave();this.applyStyle(),t.openGroup("ornament",this.getAttribute("id"));const a=e.checkStem().getExtents();let n=i===at.DOWN?a.baseY:a.topY;_(e)&&(e.hasStem()?i===at.DOWN&&(n=b.getYForTopText(this.text_line)):n=b.getYForTopText(this.text_line));const s=i===at.DOWN,l=b.getSpacingBetweenLines();let o=1;!s&&e.hasBeam()&&(o+=.5);const r=n-l*(this.text_line+o),h=e.getModifierStartXY(this.position,this.index);let m=h.x,c=this.ornamentAlignWithNoteHead?h.y:Math.min(b.getYForTopText(this.text_line),r);if(c+=this.y_shift,this.delayed){let t=0;const i=m-(b.getX()-10);if(void 0!==this.delayXShift)t=this.delayXShift;else{t+=this.glyph.getMetrics().width/2;const a=Kt.getNextContext(e.getTickContext());t+=a?.5*(a.getX()-i):.5*(b.getX()+b.getWidth()-i),this.delayXShift=t}m+=t}!function(...t){$t.DEBUG&&u("Vex.Flow.Ornament",t)}("Rendering ornament: ",this.ornament,m,c),this.accidentalLower&&(this.accidentalLower.render(t,m,c),c-=this.accidentalLower.getMetrics().height,c-=this.render_options.accidentalLowerPadding),this.stemUpYOffset&&e.hasStem()&&1===e.getStemDirection()&&(c+=this.stemUpYOffset),e.getLineNumber()<5&&$t.ornamentNoteTransition.indexOf(this.type)>=0&&(c=e.checkStave().getBoundingBox().getY()+40),this.glyph.render(t,m+this.x_shift,c),this.accidentalUpper&&(c-=this.glyph.getMetrics().height+this.render_options.accidentalUpperPadding,this.accidentalUpper.render(t,m,c)),t.closeGroup(),this.restoreStyle()}}$t.DEBUG=!1;class Jt extends tt{static get CATEGORY(){return x.Parenthesis}static buildAndAttach(t){for(const e of t)for(let t=0;to+a.width?b:o+a.width),s===J.LEFT&&(o=n.getLeftParenthesisPx(l),i=i>o+a.width?i:o+a.width),a.setXShift(o)}return e.left_shift+=i,e.right_shift+=b,!0}constructor(t){super(),this.position=null!=t?t:tt.Position.LEFT,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width"))}setNote(t){return this.note=t,this.point=V.currentMusicFont().lookupMetric("parenthesis.default.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.default.width")),o(t)&&(this.point=V.currentMusicFont().lookupMetric("parenthesis.gracenote.point"),this.setWidth(V.currentMusicFont().lookupMetric("parenthesis.gracenote.width"))),this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index,{forceFlagRight:!0}),b=i.x+this.x_shift,a=i.y+this.y_shift;this.position==tt.Position.RIGHT?Z.renderGlyph(t,b+1,a,this.point,"noteheadParenthesisRight",{category:"noteHead.standard.noteheadParenthesisRight"}):this.position==tt.Position.LEFT&&Z.renderGlyph(t,b-2,a,this.point,"noteheadParenthesisLeft",{category:"noteHead.standard.noteheadParenthesisLeft"})}}function qt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLCanvasElement&&t instanceof e.HTMLCanvasElement||"function"==typeof t.getContext&&"function"==typeof t.toDataURL}function Qt(t){if(!t)return!1;const e=y();return"function"==typeof e.HTMLDivElement&&t instanceof e.HTMLDivElement||"function"==typeof t.appendChild&&"object"==typeof t.style}class Zt extends ft{static get WIDTH(){return 600}static get HEIGHT(){return 400}static get CANVAS_BROWSER_SIZE_LIMIT(){return 32767}static sanitizeCanvasDims(t,e){const i=this.CANVAS_BROWSER_SIZE_LIMIT;return Math.max(t,e)>i&&(f("Canvas dimensions exceed browser limit. Cropping to "+i),t>i&&(t=i),e>i&&(e=i)),[t,e]}constructor(t){super(),this.textHeight=0,this.context2D=t,t.canvas?this.canvas=t.canvas:this.canvas={width:Zt.WIDTH,height:Zt.HEIGHT}}clear(){this.context2D.clearRect(0,0,this.canvas.width,this.canvas.height)}openGroup(t,e,i){}closeGroup(){}add(t){}setFillStyle(t){return this.context2D.fillStyle=t,this}setBackgroundFillStyle(t){return this}setStrokeStyle(t){return this.context2D.strokeStyle=t,this}setShadowColor(t){return this.context2D.shadowColor=t,this}setShadowBlur(t){const e=this.context2D.getTransform(),i=Math.sqrt(e.a*e.a+e.b*e.b+e.c*e.c+e.d*e.d);return this.context2D.shadowBlur=i*t,this}setLineWidth(t){return this.context2D.lineWidth=t,this}setLineCap(t){return this.context2D.lineCap=t,this}setLineDash(t){return this.context2D.setLineDash(t),this}scale(t,e){return this.context2D.scale(t,e),this}resize(t,e){const i=this.context2D.canvas,b=y().devicePixelRatio||1;return[t,e]=Zt.sanitizeCanvasDims(t*b,e*b),t=t/b|0,e=e/b|0,i.width=t*b,i.height=e*b,qt(i)&&(i.style.width=t+"px",i.style.height=e+"px"),this.scale(b,b)}rect(t,e,i,b){return this.context2D.rect(t,e,i,b),this}fillRect(t,e,i,b){return this.context2D.fillRect(t,e,i,b),this}clearRect(t,e,i,b){return this.context2D.clearRect(t,e,i,b),this}beginPath(){return this.context2D.beginPath(),this}moveTo(t,e){return this.context2D.moveTo(t,e),this}lineTo(t,e){return this.context2D.lineTo(t,e),this}bezierCurveTo(t,e,i,b,a,n){return this.context2D.bezierCurveTo(t,e,i,b,a,n),this}quadraticCurveTo(t,e,i,b){return this.context2D.quadraticCurveTo(t,e,i,b),this}arc(t,e,i,b,a,n){return this.context2D.arc(t,e,i,b,a,n),this}fill(){return this.context2D.fill(),this}stroke(){return this.context2D.stroke(),this}closePath(){return this.context2D.closePath(),this}measureText(t){const e=this.context2D.measureText(t);let i=0,b=0;return e.fontBoundingBoxAscent?(i=-e.fontBoundingBoxAscent,b=e.fontBoundingBoxDescent+e.fontBoundingBoxAscent):(i=-e.actualBoundingBoxAscent,b=e.actualBoundingBoxDescent+e.actualBoundingBoxAscent),{x:0,y:i,width:e.width,height:b}}fillText(t,e,i){return this.context2D.fillText(t,e,i),this}save(){return this.context2D.save(),this}restore(){return this.context2D.restore(),this}set fillStyle(t){this.context2D.fillStyle=t}get fillStyle(){return this.context2D.fillStyle}set strokeStyle(t){this.context2D.strokeStyle=t}get strokeStyle(){return this.context2D.strokeStyle}setFont(t,e,i,b){const a=A.validate(t,e,i,b);return this.context2D.font=A.toCSSString(a),this.textHeight=A.convertSizeToPixelValue(a.size),this}getFont(){return this.context2D.font}}const te={path:{x:!0,y:!0,width:!0,height:!0,"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},rect:{"font-family":!0,"font-weight":!0,"font-style":!0,"font-size":!0},text:{width:!0,height:!0}},ee="http://www.w3.org/2000/svg",ie=2*Math.PI;class be extends ft{constructor(t){super(),this.width=0,this.height=0,this.precision=1,this.backgroundFillStyle="white",this.fontCSSString="",this.element=t,this.precision=Math.pow(10,V.RENDER_PRECISION_PLACES);const e=this.create("svg");this.element.appendChild(e),this.svg=e,this.parent=this.svg,this.groups=[this.svg],this.path="",this.pen={x:NaN,y:NaN},this.lineWidth=1;const i={"font-family":A.SANS_SERIF,"font-size":A.SIZE+"pt","font-weight":P.NORMAL,"font-style":k.NORMAL};this.state=Object.assign({scaleX:1,scaleY:1},i),this.attributes=Object.assign({"stroke-width":.3,"stroke-dasharray":"none",fill:"black",stroke:"black"},i),this.groupAttributes=[],this.applyAttributes(e,this.attributes),this.groupAttributes.push(Object.assign({},this.attributes)),this.shadow_attributes={width:0,color:"black"},this.state_stack=[]}round(t){return Math.round(t*this.precision)/this.precision}create(t){return document.createElementNS(ee,t)}openGroup(t,e,i){const b=this.create("g");return this.groups.push(b),this.parent.appendChild(b),this.parent=b,t&&b.setAttribute("class",T(t)),e&&b.setAttribute("id",T(e)),i&&i.pointerBBox&&b.setAttribute("pointer-events","bounding-box"),this.applyAttributes(b,this.attributes),this.groupAttributes.push(Object.assign(Object.assign({},this.groupAttributes[this.groupAttributes.length-1]),this.attributes)),b}closeGroup(){this.groups.pop(),this.groupAttributes.pop(),this.parent=this.groups[this.groups.length-1]}add(t){this.parent.appendChild(t)}setFillStyle(t){return this.attributes.fill=t,this}setBackgroundFillStyle(t){return this.backgroundFillStyle=t,this}setStrokeStyle(t){return this.attributes.stroke=t,this}setShadowColor(t){return this.shadow_attributes.color=t,this}setShadowBlur(t){return this.shadow_attributes.width=t,this}setLineWidth(t){return this.attributes["stroke-width"]=t,this.lineWidth=t,this}setLineDash(t){if("[object Array]"===Object.prototype.toString.call(t))return this.attributes["stroke-dasharray"]=t.join(","),this;throw new g("ArgumentError","lineDash must be an array of integers.")}setLineCap(t){return this.attributes["stroke-linecap"]=t,this}resize(t,e){this.width=t,this.height=e,this.element.style.width=t.toString(),this.svg.style.width=t.toString(),this.svg.style.height=e.toString();const i={width:t,height:e};return this.applyAttributes(this.svg,i),this.scale(this.state.scaleX,this.state.scaleY),this}scale(t,e){this.state.scaleX=this.state.scaleX?this.state.scaleX*t:t,this.state.scaleY=this.state.scaleY?this.state.scaleY*e:e;const i=this.width/this.state.scaleX,b=this.height/this.state.scaleY;return this.setViewBox(0,0,i,b),this}setViewBox(t,e,i,b){if("string"==typeof t)this.svg.setAttribute("viewBox",t);else{const a=t+" "+e+" "+i+" "+b;this.svg.setAttribute("viewBox",a)}}applyAttributes(t,e){const i=te[t.nodeName];for(const b in e)i&&i[b]||!e[b]||0!=this.groupAttributes.length&&e[b]==this.groupAttributes[this.groupAttributes.length-1][b]||t.setAttributeNS(null,b,e[b]);return t}clear(){for(;this.svg.lastChild;)this.svg.removeChild(this.svg.lastChild);this.scale(this.state.scaleX,this.state.scaleY)}rect(t,e,i,b,a){b<0&&(e+=b,b*=-1);const n=this.create("rect");return a=null!=a?a:{fill:"none","stroke-width":this.lineWidth,stroke:"black"},t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.applyAttributes(n,Object.assign({x:t,y:e,width:i,height:b},a)),this.add(n),this}fillRect(t,e,i,b){const a={fill:this.attributes.fill,stroke:"none"};return this.rect(t,e,i,b,a),this}clearRect(t,e,i,b){return this.rect(t,e,i,b,{fill:this.backgroundFillStyle,stroke:"none"}),this}beginPath(){return this.path="",this.pen.x=NaN,this.pen.y=NaN,this}moveTo(t,e){return t=this.round(t),e=this.round(e),this.path+="M"+t+" "+e,this.pen.x=t,this.pen.y=e,this}lineTo(t,e){return t=this.round(t),e=this.round(e),this.path+="L"+t+" "+e,this.pen.x=t,this.pen.y=e,this}bezierCurveTo(t,e,i,b,a,n){return a=this.round(a),n=this.round(n),t=this.round(t),e=this.round(e),i=this.round(i),b=this.round(b),this.path+="C"+t+" "+e+","+i+" "+b+","+a+" "+n,this.pen.x=a,this.pen.y=n,this}quadraticCurveTo(t,e,i,b){return i=this.round(i),b=this.round(b),t=this.round(t),e=this.round(e),this.path+="Q"+t+" "+e+","+i+" "+b,this.pen.x=i,this.pen.y=b,this}arc(t,e,i,b,a,n){let s=t+i*Math.cos(b),l=e+i*Math.sin(b);s=this.round(s),l=this.round(l);const o=v(b),r=v(a);if(!n&&a-b>=ie||n&&b-a>=ie||o===r){let a=t+i*Math.cos(b+Math.PI),n=e+i*Math.sin(b+Math.PI);a=this.round(a),n=this.round(n),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 0 0 ${a} ${n} `,this.path+=`A${i} ${i} 0 0 0 ${s} ${l}`,this.pen.x=s,this.pen.y=l}else{let h,m=t+i*Math.cos(a),c=e+i*Math.sin(a);b=o,a=r,h=Math.abs(a-b)a&&(h=!h);const d=!n;m=this.round(m),c=this.round(c),i=this.round(i),this.path+=`M${s} ${l} A${i} ${i} 0 ${+h} ${+d} ${m} ${c}`,this.pen.x=m,this.pen.y=c}return this}closePath(){return this.path+="Z",this}getShadowStyle(){const t=this.shadow_attributes;return`filter: drop-shadow(0 0 ${t.width/1.5}px ${t.color})`}fill(t){const e=this.create("path");return void 0===t&&(t=Object.assign(Object.assign({},this.attributes),{stroke:"none"})),t.d=this.path,this.shadow_attributes.width>0&&(t.style=this.getShadowStyle()),this.applyAttributes(e,t),this.add(e),this}stroke(){const t=this.create("path"),e=Object.assign(Object.assign({},this.attributes),{fill:"none","stroke-width":this.lineWidth,d:this.path});return this.shadow_attributes.width>0&&(e.style=this.getShadowStyle()),this.applyAttributes(t,e),this.add(t),this}measureText(t){return be.measureTextCache.lookup(t,this.svg,this.attributes)}fillText(t,e,i){if(!t||t.length<=0)return this;e=this.round(e),i=this.round(i);const b=Object.assign(Object.assign({},this.attributes),{stroke:"none",x:e,y:i}),a=this.create("text");return a.textContent=t,this.applyAttributes(a,b),this.add(a),this}save(){return this.state_stack.push({state:{"font-family":this.state["font-family"],"font-weight":this.state["font-weight"],"font-style":this.state["font-style"],"font-size":this.state["font-size"],scale:this.state.scale},attributes:{"font-family":this.attributes["font-family"],"font-weight":this.attributes["font-weight"],"font-style":this.attributes["font-style"],"font-size":this.attributes["font-size"],fill:this.attributes.fill,stroke:this.attributes.stroke,"stroke-width":this.attributes["stroke-width"],"stroke-dasharray":this.attributes["stroke-dasharray"]},shadow_attributes:{width:this.shadow_attributes.width,color:this.shadow_attributes.color},lineWidth:this.lineWidth}),this}restore(){const t=this.state_stack.pop();if(t){const e=t;this.state["font-family"]=e.state["font-family"],this.state["font-weight"]=e.state["font-weight"],this.state["font-style"]=e.state["font-style"],this.state["font-size"]=e.state["font-size"],this.state.scale=e.state.scale,this.attributes["font-family"]=e.attributes["font-family"],this.attributes["font-weight"]=e.attributes["font-weight"],this.attributes["font-style"]=e.attributes["font-style"],this.attributes["font-size"]=e.attributes["font-size"],this.attributes.fill=e.attributes.fill,this.attributes.stroke=e.attributes.stroke,this.attributes["stroke-width"]=e.attributes["stroke-width"],this.attributes["stroke-dasharray"]=e.attributes["stroke-dasharray"],this.shadow_attributes.width=e.shadow_attributes.width,this.shadow_attributes.color=e.shadow_attributes.color,this.lineWidth=e.lineWidth}return this}set fillStyle(t){this.setFillStyle(t)}get fillStyle(){return this.attributes.fill}set strokeStyle(t){this.setStrokeStyle(t)}get strokeStyle(){return this.attributes.stroke}setFont(t,e,i,b){const a=A.validate(t,e,i,b);this.fontCSSString=A.toCSSString(a);const n={"font-family":a.family,"font-size":a.size,"font-weight":a.weight,"font-style":a.style};return this.attributes=Object.assign(Object.assign({},this.attributes),n),this.state=Object.assign(Object.assign({},this.state),n),this}getFont(){return this.fontCSSString}}var ae,ne,se,le;be.measureTextCache=new class{constructor(){this.cache={}}lookup(t,e,i){let b=this.cache[t];void 0===b&&(b={},this.cache[t]=b);const a=`${i["font-family"]}%${i["font-size"]}%${i["font-weight"]}%${i["font-style"]}`;let n=b[a];return void 0===n&&(n=this.measureImpl(t,e,i),b[a]=n),n}measureImpl(t,e,i){let b=this.txt;b||(b=document.createElementNS(ee,"text"),this.txt=b),b.textContent=t,i["font-family"]&&b.setAttributeNS(null,"font-family",i["font-family"]),i["font-size"]&&b.setAttributeNS(null,"font-size",`${i["font-size"]}`),i["font-style"]&&b.setAttributeNS(null,"font-style",i["font-style"]),i["font-weight"]&&b.setAttributeNS(null,"font-weight",`${i["font-weight"]}`),e.appendChild(b);const a=b.getBBox();return e.removeChild(b),{x:a.x,y:a.y,width:a.width,height:a.height}}},function(t){t[t.CANVAS=1]="CANVAS",t[t.SVG=2]="SVG"}(ae||(ae={})),function(t){t[t.NONE=1]="NONE",t[t.UP=2]="UP",t[t.DOWN=3]="DOWN"}(ne||(ne={}));class oe{static buildContext(t,e,i,b,a="#FFF"){const n=new oe(t,e);i&&b&&n.resize(i,b);const s=n.getContext();return s.setBackgroundFillStyle(a),oe.lastContext=s,s}static getCanvasContext(t,e,i,b){return oe.buildContext(t,oe.Backends.CANVAS,e,i,b)}static getSVGContext(t,e,i,b){return oe.buildContext(t,oe.Backends.SVG,e,i,b)}static drawDashedLine(t,e,i,b,a,n){t.beginPath();const s=b-e,l=a-i,o=Math.atan2(l,s);let r=e,h=i;t.moveTo(e,i);let m=0,c=!0;for(;!(s<0?r<=b:r>=b)||!(l<0?h<=a:h>=a);){const e=n[m++%n.length],i=r+Math.cos(o)*e;r=s<0?Math.max(b,i):Math.min(b,i);const d=h+Math.sin(o)*e;h=l<0?Math.max(a,d):Math.min(a,d),c?t.lineTo(r,h):t.moveTo(r,h),c=!c}t.closePath(),t.stroke()}constructor(t,e){if(m(t))this.ctx=t;else{if(void 0===e)throw new g("InvalidArgument","Missing backend argument");const i=e;let b;if("string"==typeof t){const e=document.getElementById(t);if(!e)throw new g("BadElementId",`Can't find element with ID "${e}"`);b=e}else b=t;if(i===oe.Backends.CANVAS){if(!qt(b))throw new g("BadElement","CANVAS context requires an HTMLCanvasElement.");const t=b.getContext("2d",{willReadFrequently:!0});if(!t)throw new g("BadElement","Can't get canvas context");this.ctx=new Zt(t)}else{if(i!==oe.Backends.SVG)throw new g("InvalidBackend",`No support for backend: ${i}`);if(!Qt(b))throw new g("BadElement","SVG context requires an HTMLDivElement.");this.ctx=new be(b)}}}resize(t,e){return this.ctx.resize(t,e),this}getContext(){return this.ctx}}oe.Backends=ae,oe.LineEndType=ne,oe.lastContext=void 0;class re extends tt{static get CATEGORY(){return x.StringNumber}static get metrics(){var t;return null!==(t=V.currentMusicFont().getMetrics().stringNumber)&&void 0!==t?t:{verticalPadding:0,stemPadding:0,leftPadding:0,rightPadding:0}}static format(t,e){const i=e.left_shift,b=e.right_shift;if(!t||0===t.length)return!1;const a=[];let n=null,s=0,l=0;for(let o=0;oe.line-t.line));let o=0,r=0,h=0,m=null,d=null;for(let t=0;tr?e:r):l===tt.Position.RIGHT&&(c.setXShift(o),e+=g,h=e>h?e:h),m=_,d=n}return e.left_shift+=r,e.right_shift+=h,!0}constructor(t){super(),this.string_number=t,this.position=tt.Position.ABOVE,this.x_shift=0,this.y_shift=0,this.text_line=0,this.stem_offset=0,this.x_offset=0,this.y_offset=0,this.dashed=!0,this.leg=oe.LineEndType.NONE,this.radius=8,this.drawCircle=!0,this.setWidth(2*this.radius+4),this.resetFont()}setLineEndType(t){return t>=oe.LineEndType.NONE&&t<=oe.LineEndType.DOWN&&(this.leg=t),this}setStringNumber(t){return this.string_number=t,this}setOffsetX(t){return this.x_offset=t,this}setOffsetY(t){return this.y_offset=t,this}setLastNote(t){return this.last_note=t,this}setDashed(t){return this.dashed=t,this}setDrawCircle(t){return this.drawCircle=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index),b=e.hasStem()?e.getStemDirection():at.UP;let a=i.x+this.x_shift+this.x_offset,n={};e.hasStem()&&(n=e.checkStem().getExtents());let s=i.y+this.y_shift+this.y_offset;switch(this.position){case tt.Position.ABOVE:s=e.getYs().reduce(((t,e)=>tt>e?t:e)),e.hasStem()&&b==at.DOWN&&(s=n.topY-re.metrics.stemPadding),s+=this.radius+re.metrics.verticalPadding+this.text_line*V.STAVE_LINE_DISTANCE;break;case tt.Position.LEFT:a-=this.radius/2+re.metrics.leftPadding;break;case tt.Position.RIGHT:a+=this.radius/2+re.metrics.rightPadding;break;default:throw new g("InvalidPosition",`The position ${this.position} is invalid`)}t.save(),this.drawCircle&&(t.beginPath(),t.arc(a,s,this.radius,0,2*Math.PI,!1),t.setLineWidth(1.5),t.stroke()),t.setFont(this.textFont);const l=a-t.measureText(this.string_number).width/2;t.fillText(""+this.string_number,l,s+4.5);const o=this.last_note;if(d(o)){const i=o.getStemX()-e.getX()+5;let b,n;switch(t.setStrokeStyle("#000000"),t.setLineCap("round"),t.setLineWidth(.6),this.dashed?oe.drawDashedLine(t,a+10,s,a+i,s,[3,3]):oe.drawDashedLine(t,a+10,s,a+i,s,[3,0]),this.leg){case oe.LineEndType.UP:b=-10,n=this.dashed?[3,3]:[3,0],oe.drawDashedLine(t,a+i,s,a+i,s+b,n);break;case oe.LineEndType.DOWN:b=10,n=this.dashed?[3,3]:[3,0],oe.drawDashedLine(t,a+i,s,a+i,s+b,n)}}t.restore()}}re.TEXT_FONT={family:A.SANS_SERIF,size:A.SIZE,weight:P.BOLD,style:k.NORMAL};class he extends tt{static get CATEGORY(){return x.Stroke}static format(t,e){const i=e.left_shift;if(!t||0===t.length)return!1;const b=t.map((t=>{const e=t.getNote(),i=t.checkIndex();if(c(e)){const{line:b}=e.getKeyProps()[i];return{line:b,shift:e.getLeftDisplacedHeadPx(),stroke:t}}if(_(e)){const{str:b}=e.getPositions()[i];return{line:b,shift:0,stroke:t}}throw new g("Internal","Unexpected instance.")})),a=i,n=b.reduce(((t,{stroke:e,shift:i})=>(e.setXShift(a+i),Math.max(e.getWidth()+0,t))),0);return e.left_shift+=n,!0}constructor(t,e){super(),this.options=Object.assign({all_voices:!0},e),this.all_voices=this.options.all_voices,this.type=t,this.position=tt.Position.LEFT,this.render_options={font_scale:38},this.resetFont(),this.setXShift(0),this.setWidth(10)}getPosition(){return this.position}addEndNote(t){return this.note_end=t,this}draw(){const t=this.checkContext(),e=this.checkAttachedNote();this.setRendered();const i=e.getModifierStartXY(this.position,this.index);let b=e.getYs(),a=i.y,n=i.y;const s=i.x-5,l=e.checkStave().getSpacingBetweenLines(),o=this.checkModifierContext().getMembers(e.getCategory());for(let t=0;t0){b-=s.map((t=>t.getTextHeight())).reduce(((t,e)=>t>e?t:e))/V.STAVE_LINE_DISTANCE+1}else e.top_text_line+=1;for(let e=0;e=t.line?i.above:i.below}}this.placeGlyphOnLine(b,this.checkStave(),t.line),this.glyphs.push(b);const n=this.xPositions[this.xPositions.length-1],s=b.getMetrics().width+a;this.xPositions.push(n+s),this.width+=s}cancelKey(t){return this.formatted=!1,this.cancelKeySpec=t,this}convertToCancelAccList(t){const e=V.keySignature(t),i=this.accList.length>0&&e.length>0&&e[0].type!==this.accList[0].type,b=i?e.length:e.length-this.accList.length;if(b<1)return;const a=[];for(let t=0;t0?e[0].type:void 0;let b;if(this.cancelKeySpec&&(b=this.convertToCancelAccList(this.cancelKeySpec)),this.alterKeySpec&&this.convertToAlterAccList(this.alterKeySpec),this.accList.length>0){const a=(this.position===wt.END?t.getEndClef():t.getClef())||t.getClef();b&&this.convertAccLines(a,b.type,b.accList),this.convertAccLines(a,i,e);for(let t=0;t0?"PlusSmall":"Plus";break;case"(":b=i.length>0?"ParensLeftSmall":"ParensLeft";break;case")":b=i.length>0?"ParensRightSmall":"ParensRight"}const a=new Z("timeSig"+b,this.timeSignature.point);this.topGlyphs.push(a),l+=null!==(s=a.getMetrics().width)&&void 0!==s?s:0}let o=0;for(let t=0;t0?e.getYForLine(this.timeSignature.topLine):(e.getYForLine(this.timeSignature.topLine)+e.getYForLine(this.timeSignature.bottomLine))/2;for(let t=0;t{const e=t.split("/");if(2!==e.length&&"+"!==e[0]&&"-"!==e[0])throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must be in the form "/"`);e.forEach((e=>{if(0==/^[0-9+\-()]+$/.test(e))throw new g("BadTimeSignature",`Invalid time spec: ${t}. Must contain valid signatures.`)}))})(t);const b=t.split("/");return{line:0,num:!0,glyph:this.makeTimeSignatureGlyph(null!==(e=b[0])&&void 0!==e?e:"",null!==(i=b[1])&&void 0!==i?i:"")}}makeTimeSignatureGlyph(t,e){return new Te(this,t,e,"timeSig0",this.point)}getInfo(){const{line:t,is_numeric:e,glyph:i}=this;return{line:t,num:e,glyph:i}}setTimeSig(t){this.timeSpec=t;const e=this.parseTimeSpec(t);return this.setGlyph(e.glyph),this.is_numeric=e.num,this.line=e.line,this}getTimeSpec(){return this.timeSpec}getLine(){return this.line}setLine(t){this.line=t}getGlyph(){return this.glyph}setGlyph(t){this.glyph=t,this.setWidth(p(this.glyph.getMetrics().width))}getIsNumeric(){return this.is_numeric}setIsNumeric(t){this.is_numeric=t}draw(){const t=this.checkStave(),e=t.checkContext();this.setRendered(),this.applyStyle(e),e.openGroup("timesignature",this.getAttribute("id")),this.glyph.setStave(t),this.glyph.setContext(e),this.placeGlyphOnLine(this.glyph,t,this.line),this.glyph.renderToStave(this.x),e.closeGroup(),this.restoreStyle(e)}}const we={[Et.CATEGORY]:0,[_e.CATEGORY]:1,[xe.CATEGORY]:2,[ve.CATEGORY]:3},ze={[ve.CATEGORY]:0,[xe.CATEGORY]:1,[Et.CATEGORY]:2,[_e.CATEGORY]:3};class Be extends R{static get CATEGORY(){return x.Stave}static get defaultPadding(){const t=V.currentMusicFont();return t.lookupMetric("stave.padding")+t.lookupMetric("stave.endPaddingMax")}static get rightPadding(){return V.currentMusicFont().lookupMetric("stave.endPaddingMax")}constructor(t,e,i,b){super(),this.height=0,this.x=t,this.y=e,this.width=i,this.formatted=!1,this.start_x=t+5,this.end_x=t+i,this.modifiers=[],this.measure=0,this.clef="treble",this.endClef=void 0,this.resetFont(),this.options=Object.assign({vertical_bar_width:10,num_lines:5,fill_style:"#999999",left_bar:!0,right_bar:!0,spacing_between_lines_px:V.STAVE_LINE_DISTANCE,space_above_staff_ln:4,space_below_staff_ln:4,top_text_position:1,bottom_text_position:4,line_config:[]},b),this.bounds={x:this.x,y:this.y,w:this.width,h:0},this.defaultLedgerLineStyle={strokeStyle:"#444",lineWidth:1.4},this.resetLines(),this.addModifier(new Et(this.options.left_bar?zt.SINGLE:zt.NONE)),this.addEndModifier(new Et(this.options.right_bar?zt.SINGLE:zt.NONE))}setDefaultLedgerLineStyle(t){this.defaultLedgerLineStyle=t}getDefaultLedgerLineStyle(){return Object.assign(Object.assign({},this.getStyle()),this.defaultLedgerLineStyle)}space(t){return this.options.spacing_between_lines_px*t}resetLines(){this.options.line_config=[];for(let t=0;ti.getWidth()&&(e-=i.getWidth()),e}setRepetitionType(t,e=0){return this.modifiers.push(new ge(t,this.x,e)),this}setVoltaType(t,e,i){return this.modifiers.push(new Se(t,e,this.x,i)),this}setSection(t,e,i=0,b,a=!0){const n=new ye(t,this.x+i,e,a);return b&&n.setFontSize(b),this.modifiers.push(n),this}setTempo(t,e){return this.modifiers.push(new pe(t,this.x,e)),this}setText(t,e,i={}){return this.modifiers.push(new fe(t,e,i)),this}getHeight(){return this.height}getSpacingBetweenLines(){return this.options.spacing_between_lines_px}getBoundingBox(){return new D(this.x,this.y,this.width,this.getBottomY()-this.y)}getBottomY(){const t=this.options,e=t.spacing_between_lines_px;return this.getYForLine(t.num_lines)+t.space_below_staff_ln*e}getBottomLineY(){return this.getYForLine(this.options.num_lines)}getYForLine(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+t*i+b*i}getLineForY(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return(t-this.y)/i-b}getYForTopText(t=0){return this.getYForLine(-t-this.options.top_text_position)}getYForBottomText(t=0){return this.getYForLine(this.options.bottom_text_position+t)}getYForNote(t){const e=this.options,i=e.spacing_between_lines_px,b=e.space_above_staff_ln;return this.y+b*i+5*i-t*i}getYForGlyphs(){return this.getYForLine(3)}addModifier(t,e){return void 0!==e&&t.setPosition(e),t.setStave(this),this.formatted=!1,this.modifiers.push(t),this}addEndModifier(t){return this.addModifier(t,wt.END),this}setBegBarType(t){const{SINGLE:e,REPEAT_BEGIN:i,NONE:b}=zt;return t!==e&&t!==i&&t!==b||(this.modifiers[0].setType(t),this.formatted=!1),this}setEndBarType(t){return t!==zt.REPEAT_BEGIN&&(this.modifiers[1].setType(t),this.formatted=!1),this}setClef(t,e,i,b){void 0===b&&(b=wt.BEGIN),b===wt.END?this.endClef=t:this.clef=t;const a=this.getModifiers(b,_e.CATEGORY);return 0===a.length?this.addClef(t,e,i,b):a[0].setType(t,e,i),this}getClef(){return this.clef}setEndClef(t,e,i){return this.setClef(t,e,i,wt.END),this}getEndClef(){return this.endClef}setKeySignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,xe.CATEGORY);return 0===b.length?this.addKeySignature(t,e,i):b[0].setKeySig(t,e),this}setEndKeySignature(t,e){return this.setKeySignature(t,e,wt.END),this}setTimeSignature(t,e,i){void 0===i&&(i=wt.BEGIN);const b=this.getModifiers(i,ve.CATEGORY);return 0===b.length?this.addTimeSignature(t,e,i):b[0].setTimeSig(t),this}setEndTimeSignature(t,e){return this.setTimeSignature(t,e,wt.END),this}addKeySignature(t,e,i){return void 0===i&&(i=wt.BEGIN),this.addModifier(new xe(t,e).setPosition(i),i),this}addClef(t,e,i,b){return void 0===b||b===wt.BEGIN?this.clef=t:b===wt.END&&(this.endClef=t),this.addModifier(new _e(t,e,i),b),this}addEndClef(t,e,i){return this.addClef(t,e,i,wt.END),this}addTimeSignature(t,e,i){return this.addModifier(new ve(t,e),i),this}addEndTimeSignature(t,e){return this.addTimeSignature(t,e,wt.END),this}addTrebleGlyph(){return this.addClef("treble"),this}getModifiers(t,e){const i=void 0===t,b=void 0===e;return i&&b?this.modifiers:i?this.modifiers.filter((t=>e===t.getCategory())):b?this.modifiers.filter((e=>t===e.getPosition())):this.modifiers.filter((i=>t===i.getPosition()&&e===i.getCategory()))}sortByCategory(t,e){for(let i=t.length-1;i>=0;i--)for(let b=0;be[t[b+1].getCategory()]){const e=t[b];t[b]=t[b+1],t[b+1]=e}}format(){const t=this.modifiers[0],e=this.modifiers[1],i=this.getModifiers(wt.BEGIN),b=this.getModifiers(wt.END);let a,n,l;this.sortByCategory(i,we),this.sortByCategory(b,ze),i.length>1&&t.getType()===zt.REPEAT_BEGIN&&(i.push(i.splice(0,1)[0]),i.splice(0,0,new Et(zt.SINGLE))),b.indexOf(e)>0&&b.splice(0,0,new Et(zt.NONE));let o=0,r=this.x;for(let t=0;t0){t.save(),t.setFont(this.textFont);const e=t.measureText(""+this.measure).width;a=this.getYForTopText(0)+3,t.fillText(""+this.measure,this.x-e/2,a),t.restore()}return this}getVerticalBarWidth(){return this.options.vertical_bar_width}getConfigForLines(){return this.options.line_config}setConfigForLine(t,e){if(t>=this.options.num_lines||t<0)throw new g("StaveConfigError","The line number must be within the range of the number of lines in the Stave.");if(void 0===e.visible)throw new g("StaveConfigError","The line configuration object is missing the 'visible' property.");if("boolean"!=typeof e.visible)throw new g("StaveConfigError","The line configuration objects 'visible' property must be true or false.");return this.options.line_config[t]=e,this}setConfigForLines(t){if(t.length!==this.options.num_lines)throw new g("StaveConfigError","The length of the lines configuration array must match the number of lines in the Stave");for(const e in t)null==t[e].visible&&(t[e]=this.options.line_config[e]),this.options.line_config[e]=Object.assign(Object.assign({},this.options.line_config[e]),t[e]);return this.options.line_config=t,this}static formatBegModifiers(t){const e=e=>{let i=0;t.forEach((t=>{const b=t.getModifiers(wt.BEGIN,e);b.length>0&&b[0].getX()>i&&(i=b[0].getX())}));let b=0;t.forEach((t=>{b=0;t.getModifiers(wt.BEGIN,e).forEach((t=>{i-t.getX()>b&&(b=i-t.getX())}));const a=t.getModifiers(wt.BEGIN);let n=!1;a.forEach((t=>{t.getCategory()===e&&(n=!0),n&&b>0&&t.setX(t.getX()+b)})),t.setNoteStartX(t.getNoteStartX()+b)}))};t.forEach((t=>{t.formatted||t.format()})),e(x.Clef),e(x.KeySignature),e(x.TimeSignature);let i=0;t.forEach((t=>{t.getNoteStartX()>i&&(i=t.getNoteStartX())})),t.forEach((t=>{t.setNoteStartX(i)})),i=0,t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.getX()>i&&(i=t.getX())}))})),t.forEach((t=>{t.getModifiers(wt.BEGIN,x.Barline).forEach((t=>{t.getType()==zt.REPEAT_BEGIN&&t.setX(i)}))}))}}function De(t,e,i,b,a){if(e!==Ce.type.BOLD_DOUBLE_LEFT&&e!==Ce.type.BOLD_DOUBLE_RIGHT)throw new g("InvalidConnector","A REPEAT_BEGIN or REPEAT_END type must be provided.");let n=3,s=3.5;e===Ce.type.BOLD_DOUBLE_RIGHT&&(n=-5,s=3),t.fillRect(i+n,b,1,a-b),t.fillRect(i-2,b,s,a-b)}Be.TEXT_FONT={family:A.SANS_SERIF,size:8,weight:P.NORMAL,style:k.NORMAL};class Ce extends R{static get CATEGORY(){return x.StaveConnector}constructor(t,e){super(),this.thickness=V.STAVE_LINE_THICKNESS,this.width=3,this.top_stave=t,this.bottom_stave=e,this.type=Ce.type.DOUBLE,this.resetFont(),this.x_shift=0,this.texts=[]}setType(t){const e="string"==typeof t?Ce.typeString[t]:t;return Object.values(Ce.type).includes(e)&&(this.type=e),this}getType(){return this.type}setText(t,e={}){return this.texts.push({content:t,options:Object.assign({shift_x:0,shift_y:0},e)}),this}setXShift(t){if("number"!=typeof t)throw new g("InvalidType","x_shift must be a Number");return this.x_shift=t,this}getXShift(){return this.x_shift}draw(){const t=this.checkContext();this.setRendered();let e=this.top_stave.getYForLine(0),i=this.bottom_stave.getYForLine(this.bottom_stave.getNumLines()-1)+this.thickness,b=this.width,a=this.top_stave.getX();(this.type===Ce.type.SINGLE_RIGHT||this.type===Ce.type.BOLD_DOUBLE_RIGHT||this.type===Ce.type.THIN_DOUBLE)&&(a=this.top_stave.getX()+this.top_stave.getWidth());let n=i-e;switch(this.type){case Ce.type.SINGLE:case Ce.type.SINGLE_LEFT:case Ce.type.SINGLE_RIGHT:b=1;break;case Ce.type.DOUBLE:a-=this.width+2,e-=this.thickness,n+=.5;break;case Ce.type.BRACE:{b=12;const a=this.top_stave.getX()-2+this.x_shift,s=e,l=a,o=i,r=a-b,h=s+n/2,m=r-.9*b,c=s+.2*n,d=a+1.1*b,_=h-.135*n,x=d,g=h+.135*n,y=m,p=o-.2*n,u=r-b,f=p,S=a+.4*b,T=h+.135*n,v=S,w=h-.135*n,z=u,B=c;t.beginPath(),t.moveTo(a,s),t.bezierCurveTo(m,c,d,_,r,h),t.bezierCurveTo(x,g,y,p,l,o),t.bezierCurveTo(u,f,S,T,r,h),t.bezierCurveTo(v,w,z,B,a,s),t.fill(),t.stroke();break}case Ce.type.BRACKET:e-=6,i+=6,n=i-e,Z.renderGlyph(t,a-5,e,40,"bracketTop"),Z.renderGlyph(t,a-5,i,40,"bracketBottom"),a-=this.width+2;break;case Ce.type.BOLD_DOUBLE_LEFT:De(t,this.type,a+this.x_shift,e,i-this.thickness);break;case Ce.type.BOLD_DOUBLE_RIGHT:De(t,this.type,a,e,i-this.thickness);break;case Ce.type.THIN_DOUBLE:b=1,n-=this.thickness;break;case Ce.type.NONE:break;default:throw new g("InvalidType",`The provided StaveConnector.type (${this.type}) is invalid.`)}this.type!==Ce.type.BRACE&&this.type!==Ce.type.BOLD_DOUBLE_LEFT&&this.type!==Ce.type.BOLD_DOUBLE_RIGHT&&this.type!==Ce.type.NONE&&t.fillRect(a,e,b,n),this.type===Ce.type.THIN_DOUBLE&&t.fillRect(a-3,e,b,n),t.save(),t.setLineWidth(2),t.setFont(this.textFont);for(let e=0;e{e.addToModifierContext(new de);const b=(new Kt).addTickable(e).preFormat(),a=b.getMetrics();return b.setX(t+a.totalLeftPx),t+b.getWidth()+a.totalRightPx+i}),e)}static plotDebugging(t,e,i,b,a,n){const s=i+(n=Object.assign({stavePadding:V.currentMusicFont().lookupMetric("stave.padding")},n)).stavePadding,l=e.contextGaps;t.save(),t.setFont(A.SANS_SERIF,8),l.gaps.forEach((e=>{var i,n,l;i=s+e.x1,n=s+e.x2,l="rgba(100,200,100,0.4)",t.beginPath(),t.setStrokeStyle(l),t.setFillStyle(l),t.setLineWidth(1),t.fillRect(i,b,Math.max(n-i,0),a-b),t.setFillStyle("green"),t.fillText(Math.round(e.x2-e.x1).toString(),s+e.x1,a+12)})),t.setFillStyle("red"),t.fillText(`Loss: ${(e.totalCost||0).toFixed(2)} Shift: ${(e.totalShift||0).toFixed(2)} Gap: ${l.total.toFixed(2)}`,s-20,a+27),t.restore()}static FormatAndDraw(t,e,i,b){let a={auto_beam:!1,align_rests:!1};"object"==typeof b?a=Object.assign(Object.assign({},a),b):"boolean"==typeof b&&(a.auto_beam=b);const n=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(i),s=a.auto_beam?Re.applyAndGetBeams(n):[];return(new ke).joinVoices([n]).formatToStave([n],e,{align_rests:a.align_rests,stave:e}),n.setStave(e).draw(t,e),s.forEach((e=>e.setContext(t).draw())),n.getBoundingBox()}static FormatAndDrawTab(t,e,i,b,a,n,s){let l={auto_beam:n,align_rests:!1};"object"==typeof s?l=Object.assign(Object.assign({},l),s):"boolean"==typeof s&&(l.auto_beam=s);const o=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(a),r=new Xt(V.TIME4_4).setMode(Xt.Mode.SOFT).addTickables(b),h=l.auto_beam?Re.applyAndGetBeams(o):[];(new ke).joinVoices([o]).joinVoices([r]).formatToStave([o,r],i,{align_rests:l.align_rests}),o.draw(t,i),r.draw(t,e),h.forEach((e=>e.setContext(t).draw())),new Ce(i,e).setContext(t).draw()}static AlignRestsToNotes(t,e,i){t.forEach(((b,a)=>{if(c(b)&&b.isRest()){if(b.getTuplet()&&!i)return;const n=b.getGlyphProps().position.toUpperCase();if("R/4"!==n&&"B/4"!==n)return;if(e||b.getBeam()){const e=b.getKeyProps()[0];if(0===a)e.line=Pe(t,e.line,a,!1);else if(a>0&&ake.AlignRestsToNotes(t.getTickables(),e)))}preCalculateMinTotalWidth(t){const e=V.currentMusicFont().lookupMetric("stave.unalignedNotePadding");let i=0,b=0,a=0;const n=[],s=[];if(this.hasMinTotalWidth)return this.minTotalWidth;if(!t)throw new g("BadArgument","'voices' required to run preCalculateMinTotalWidth");this.createTickContexts(t);const{list:l,map:o}=this.tickContexts;this.minTotalWidth=0,l.forEach((e=>{const l=o[e];l.preFormat(),l.getTickables().length{b+=t.getMetrics().width,a+=t.getTicks().value(),n.push(t.getMetrics().width),s.push(t.getTicks().value())}));const r=l.getWidth();this.minTotalWidth+=r})),this.hasMinTotalWidth=!0;const r=b>0?b/n.length:1/n.length,h=w(n.map((t=>Math.pow(t-r,2)))),m=Math.pow(h/n.length,.5)/r,c=a/s.length,d=w(s.map((t=>Math.pow(t-c,2)))),_=Math.pow(d/s.length,.5)/c,x=Math.max(_,m)*l.length*e,y=e*i;return this.minTotalWidth+Math.max(y,x)}getMinTotalWidth(){if(!this.hasMinTotalWidth)throw new g("NoMinTotalWidth","Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");return this.minTotalWidth}static getResolutionMultiplier(t){if(!t||!t.length)throw new g("BadArgument","No voices to format");const e=t[0].getTotalTicks();return t.reduce(((t,i)=>{if(!i.getTotalTicks().equals(e))throw new g("TickMismatch","Voices should have same total note duration in ticks.");if(i.getMode()===Xt.Mode.STRICT&&!i.isComplete())throw new g("IncompleteVoice","Voice does not have enough notes.");return Math.max(t,z.LCM(t,i.getResolutionMultiplier()))}),1)}createModifierContexts(t){if(0==t.length)return;const e=ke.getResolutionMultiplier(t),i=new Map,b=[];t.forEach((t=>{const a=new z(0,e);t.getTickables().forEach((t=>{const e=a.numerator;let n=i.get(t.getStave());if(n||(i.set(t.getStave(),{}),n=i.get(t.getStave())),!(n?n[e]:void 0)){const t=new de;b.push(t),n[e]=t}t.addToModifierContext(n[e]),a.add(t.getTicks())}))})),this.modifierContexts.push({map:i,array:b,resolutionMultiplier:e})}createTickContexts(t){const e=function(t,e,i){if(0==t.length)return{map:{},array:[],list:[],resolutionMultiplier:0};const b={},a=[],n=[],s=ke.getResolutionMultiplier(t);return t.forEach(((t,l)=>{const o=new z(0,s);t.getTickables().forEach((t=>{const s=o.numerator;if(!b[s]){const t=e({tickID:s});n.push(t),b[s]=t,a.push(s)}i(t,b[s],l),o.add(t.getTicks())}))})),{map:b,array:n,list:a.sort(((t,e)=>t-e)),resolutionMultiplier:s}}(t,(t=>new Kt(t)),((t,e,i)=>e.addTickable(t,i)));this.tickContexts=e;const i=this.tickContexts.array;return i.forEach((t=>{t.tContexts=i})),e}getTickContexts(){return this.tickContexts}preFormat(t=0,e,i,b){const a=this.tickContexts;if(!a)throw new g("NoTickContexts","preFormat requires TickContexts");const{list:n,map:s}=a;this.lossHistory=[],i&&b&&i.forEach((t=>t.setStave(b).preFormat()));let l=0,o=0;this.minTotalWidth=0;let r=0;n.forEach((t=>{const e=s[t];e.preFormat();const i=e.getWidth();this.minTotalWidth+=i;const b=e.getMaxTicks().value();r+=b;const a=e.getMetrics();l=l+o+a.totalLeftPx,e.setX(l),o=i-a.totalLeftPx}));const{globalSoftmax:h,softmaxFactor:m,maxIterations:c}=this.formatterOptions,d=w(n.map((t=>Math.pow(m,s[t].getMaxTicks().value()/r))));if(this.minTotalWidth=l+o,this.hasMinTotalWidth=!0,t<=0)return this.evaluate();const _=s[n[0]],x=s[n[n.length-1]];function y(t){return n.map(((e,i)=>{const b=s[e],a=b.getTickablesByVoice();let l;if(i>0){const e=s[n[i-1]];for(let o=i-1;o>=0;o--){const i=s[n[o]].getTickablesByVoice(),c=[];if(Object.keys(a).forEach((t=>{i[t]&&c.push(t)})),c.length>0){let n=0,s=1/0,o=0;if(c.forEach((t=>{const e=i[t].getTicks().value();e>n&&(l=i[t],n=e);const b=a[t],o=b.getX()-(b.getMetrics().modLeftPx+b.getMetrics().leftDisplacedHeadPx),r=i[t].getMetrics(),h=i[t].getX()+r.notePx+r.modRightPx+r.rightDisplacedHeadPx;s=Math.min(s,o-h)})),s=Math.min(s,b.getX()-(e.getX()+.05*t)),h){const e=r;o=Math.pow(m,n/e)/d*t}else void 0!==l&&(o=l.getVoice().softmax(n)*t);return{expectedDistance:o,maxNegativeShiftPx:s,fromTickable:l}}}}return{expectedDistance:0,fromTickablePx:0,maxNegativeShiftPx:0}}))}function u(t){const e=f/2;let i=0;return n.forEach(((b,a)=>{const n=s[b];if(a>0){const e=n.getX(),b=t[a],s=p(b.fromTickable).getX()+b.expectedDistance-(e+i);let l=0;s>0?i+=s:s<0&&(l=Math.min(b.maxNegativeShiftPx,Math.abs(s)),i+=-l),n.setX(e+i)}n.getCenterAlignedTickables().forEach((t=>{t.setCenterXShift(e-n.getX())}))})),x.getX()-_.getX()}const f=t-x.getMetrics().notePx-x.getMetrics().totalRightPx-_.getMetrics().totalLeftPx,S=V.currentMusicFont(),T=S.lookupMetric("stave.endPaddingMin"),v=S.lookupMetric("stave.endPaddingMax"),z=S.lookupMetric("stave.padding");let B=f;const D=y(B);let C=u(D);if(1===n.length)return 0;const P=((t,e)=>{let i=t/2;if(e.length>1)for(let t=1;t{let e=0;const i=x&&x.getMaxTickable();if(i){const b=i.getVoice();if(b.getTicksUsed().value()>b.getTotalTicks().value())return 2*vF&&A>0||C+E1;)B-=C-F,E=k(B),M=E-(v-T),C=u(y(B)),A--;return this.justifyWidth=t,this.evaluate()}evaluate(){const t=this.tickContexts,e=this.justifyWidth;this.contextGaps={total:0,gaps:[]},t.list.forEach(((e,i)=>{if(0===i)return;const b=t.list[i-1],a=t.map[b],n=t.map[e],s=a.getMetrics(),l=n.getMetrics(),o=a.getX()+s.notePx+s.totalRightPx,r=n.getX()-l.totalLeftPx,h=r-o;this.contextGaps.total+=h,this.contextGaps.gaps.push({x1:o,x2:r}),n.getFormatterMetrics().freedom.left=h,a.getFormatterMetrics().freedom.right=h})),this.durationStats={};const i=this.durationStats;this.voices.forEach((t=>{t.getTickables().forEach(((t,b,a)=>{const n=t.getTicks().clone().simplify().toString(),s=t.getMetrics(),l=t.getFormatterMetrics(),o=t.getX()+s.notePx+s.modRightPx+s.rightDisplacedHeadPx;let r=0;if(b{t.getTickables().forEach((t=>{const e=t.getTicks().clone().simplify().toString(),a=t.getFormatterMetrics();a.space.mean=i[e].mean,a.duration=e,a.iterations+=1,a.space.deviation=a.space.used-a.space.mean,b+=Math.pow(a.space.deviation,2)}))})),this.totalCost=Math.sqrt(b),this.lossHistory.push(this.totalCost),this.totalCost}tune(t){var e;const i=this.tickContexts;if(!i)return 0;const b=null!==(e=null==t?void 0:t.alpha)&&void 0!==e?e:.5;let a=0;return this.totalShift=0,i.list.forEach(((t,e,n)=>{const s=i.map[t],l=e>0?i.map[n[e-1]]:void 0,o=et.getFormatterMetrics().space.deviation)));r>0?a=-Math.min(s.getFormatterMetrics().freedom.right,Math.abs(r)):r<0&&(a=o?Math.min(o.getFormatterMetrics().freedom.right,Math.abs(r)):0),a*=b,this.totalShift+=a})),this.evaluate()}postFormat(){return this.modifierContexts.forEach((t=>{t.array.forEach((t=>t.postFormat()))})),this.tickContexts.list.forEach((t=>{this.tickContexts.map[t].postFormat()})),this}joinVoices(t){return this.createModifierContexts(t),this.hasMinTotalWidth=!1,this}format(t,e,i){const b=Object.assign({align_rests:!1},i);this.voices=t;const a=this.formatterOptions.softmaxFactor;return a&&this.voices.forEach((t=>t.setSoftmaxFactor(a))),this.alignRests(t,b.align_rests),this.createTickContexts(t),this.preFormat(e,b.context,t,b.stave),b.stave&&this.postFormat(),this}formatToStave(t,e,i){const b=Object.assign({context:e.getContext()},i),a=e.getNoteEndX()-e.getNoteStartX()-Be.defaultPadding;return function(...t){ke.DEBUG&&u("Vex.Flow.Formatter",t)}("Formatting voices to width: ",a),this.format(t,a,b)}getTickContext(t){var e;return null===(e=this.tickContexts)||void 0===e?void 0:e.map[t]}}var Ee;ke.DEBUG=!1,function(t){t[t.BOTTOM=-1]="BOTTOM",t[t.TOP=1]="TOP"}(Ee||(Ee={}));class Me extends R{static get CATEGORY(){return x.Tuplet}static get LOCATION_TOP(){return Ee.TOP}static get LOCATION_BOTTOM(){return Ee.BOTTOM}static get NESTING_OFFSET(){return 15}static get metrics(){const t=V.currentMusicFont().getMetrics().tuplet;if(!t)throw new g("BadMetrics","tuplet missing");return t}constructor(t,e={}){if(super(),this.numerator_glyphs=[],this.denom_glyphs=[],!t||!t.length)throw new g("BadArguments","No notes provided for tuplet.");this.options=e,this.notes=t,this.num_notes=null!=this.options.num_notes?this.options.num_notes:t.length,this.options.beats_occupied&&this.beatsOccupiedDeprecationWarning(),this.notes_occupied=this.options.notes_occupied||this.options.beats_occupied||2,null!=this.options.bracketed?this.bracketed=this.options.bracketed:this.bracketed=t.some((t=>!t.hasBeam())),this.ratioed=null!=this.options.ratioed?this.options.ratioed:Math.abs(this.notes_occupied-this.num_notes)>1,this.point=V.currentMusicFont().lookupMetric("digits.tupletPoint"),this.y_pos=16,this.x_pos=100,this.width=200,this.setTupletLocation(this.options.location||Me.LOCATION_TOP),ke.AlignRestsToNotes(t,!0,!0),this.resolveGlyphs(),this.attach()}attach(){for(let t=0;t=1;)this.numerator_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10);for(this.denom_glyphs=[],t=this.notes_occupied;t>=1;)this.denom_glyphs.unshift(new Z("timeSig"+t%10,this.point)),t=parseInt((t/10).toString(),10)}getNestedTupletCount(){const t=this.location,e=this.notes[0];let i=a(e,t),b=a(e,t);function a(t,e){return t.getTupletStack().filter((t=>t.location===e)).length}return this.notes.forEach((e=>{const n=a(e,t);i=n>i?n:i,b=n0&&(b=Math.min(n,b))}}}else{let t=Me.metrics.bottomLine;this.notes.forEach((e=>{const i=e.getModifierContext();i&&(t=Math.max(t,i.getState().text_line+1))})),b=i.checkStave().getYForLine(t)+Me.metrics.noteHeadOffset;for(let t=0;tb&&(b=e)}}return b+t+e}draw(){const t=this.checkContext();this.setRendered();const e=this.notes[0],i=this.notes[this.notes.length-1];this.bracketed?(this.x_pos=e.getTieLeftX()-5,this.width=i.getTieRightX()-this.x_pos+5):(this.x_pos=e.getStemX(),this.width=i.getStemX()-this.x_pos),this.y_pos=this.getYPosition();const b=(t,e)=>t+p(e.getMetrics().width);let a=this.numerator_glyphs.reduce(b,0);this.ratioed&&(a=this.denom_glyphs.reduce(b,a),a+=.32*this.point);const n=this.x_pos+this.width/2-a/2;if(this.bracketed){const e=this.width/2-a/2-5;e>0&&(t.fillRect(this.x_pos,this.y_pos,e,1),t.fillRect(this.x_pos+this.width/2+a/2+5,this.y_pos,e,1),t.fillRect(this.x_pos,this.y_pos+(this.location===Me.LOCATION_BOTTOM?1:0),1,10*this.location),t.fillRect(this.x_pos+this.width,this.y_pos+(this.location===Me.LOCATION_BOTTOM?1:0),1,10*this.location))}const s=V.currentMusicFont().lookupMetric("digits.shiftY",0);let l=0;if(this.numerator_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)})),this.ratioed){const e=n+l+.16*this.point,i=.06*this.point;t.beginPath(),t.arc(e,this.y_pos-.08*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),t.beginPath(),t.arc(e,this.y_pos+.12*this.point,i,0,2*Math.PI,!1),t.closePath(),t.fill(),l+=.32*this.point,this.denom_glyphs.forEach((e=>{e.render(t,n+l,this.y_pos+this.point/3-2+s),l+=p(e.getMetrics().width)}))}}}function Fe(t){let e=0;return t.forEach((t=>{t.keyProps&&t.keyProps.forEach((t=>{e+=t.line-3}))})),e>=0?at.DOWN:at.UP}const Ae="L",Ne="R",Oe="B";class Re extends R{static get CATEGORY(){return x.Beam}getStemDirection(){return this.stem_direction}static getDefaultBeamGroups(t){t&&"c"!==t||(t="4/4");const e={"1/2":["1/2"],"2/2":["1/2"],"3/2":["1/2"],"4/2":["1/2"],"1/4":["1/4"],"2/4":["1/4"],"3/4":["1/4"],"4/4":["1/4"],"1/8":["1/8"],"2/8":["2/8"],"3/8":["3/8"],"4/8":["2/8"],"1/16":["1/16"],"2/16":["2/16"],"3/16":["3/16"],"4/16":["2/16"]}[t];if(void 0!==e)return e.map((t=>(new z).parse(t)));{const e=parseInt(t.split("/")[0],10),i=parseInt(t.split("/")[1],10);if(e%3==0)return[new z(3,i)];if(i>4)return[new z(2,i)];if(i<=4)return[new z(1,i)]}return[new z(1,4)]}static applyAndGetBeams(t,e,i){return Re.generateBeams(t.getTickables(),{groups:i,stem_direction:e})}static generateBeams(t,e={}){e.groups&&e.groups.length||(e.groups=[new z(2,8)]);const i=e.groups.map((t=>{if(!t.multiply)throw new g("InvalidBeamGroups","The beam groups must be an array of Vex.Flow.Fractions");return t.clone().multiply(V.RESOLUTION,1)})),b=t;let a=0,n=[],s=[];function l(){i.length-1>a?a+=1:a=0}!function(){let t=[],e=new z(0,1);b.forEach((b=>{if(t=[],b.shouldIgnoreTicks())return n.push(s),void(s=t);s.push(b);const o=i[a].clone(),r=(h=s,h.reduce(((t,e)=>e.getTicks().clone().add(t)),new z(0,1))).add(e);var h;const m=V.durationToNumber(b.getDuration())<8;if(m&&b.getTuplet()&&(o.numerator*=2),r.greaterThan(o)){if(!m){const e=s.pop();e&&t.push(e)}n.push(s);do{e=r.subtract(i[a]),l()}while(e.greaterThanEquals(i[a]));s=t}else r.equals(o)&&(n.push(s),e=new z(0,1),s=t,l())})),s.length>0&&n.push(s)}(),function(){const t=[];n.forEach((i=>{let b=[];i.forEach(((i,a,n)=>{const s=0===a||a===n.length-1,l=n[a-1],o=!e.beam_rests&&i.isRest(),r=e.beam_rests&&e.beam_middle_only&&i.isRest()&&s;let h=!1;if(e.maintain_stem_directions&&l&&!i.isRest()&&!l.isRest()){const t=l.getStemDirection();h=i.getStemDirection()!==t}const m=parseInt(i.getDuration(),10)<8;o||r||h||m?(b.length>0&&t.push(b),b=h?[i]:[]):b.push(i)})),b.length>0&&t.push(b)})),n=t}(),n.forEach((t=>{let i;if(e.maintain_stem_directions){const e=function(t){for(let e=0;e{t.setStemDirection(e)}))}(t,i)}));const o=n.filter((t=>{if(t.length>1){let e=!0;return t.forEach((t=>{t.getIntrinsicTicks()>=V.durationToTicks("4")&&(e=!1)})),e}return!1})),r=function(){const t=[];return n.forEach((e=>{let i;e.forEach((e=>{const b=e.getTuplet();b&&i!==b&&(i=b,t.push(i))}))})),t}(),h=[];return o.forEach((t=>{const i=new Re(t);e.show_stemlets&&(i.render_options.show_stemlets=!0),e.secondary_breaks&&(i.render_options.secondary_break_ticks=V.durationToTicks(e.secondary_breaks)),!0===e.flat_beams&&(i.render_options.flat_beams=!0,i.render_options.flat_beam_offset=e.flat_beam_offset),h.push(i)})),r.forEach((t=>{const e=t.notes[0].stem_direction===at.DOWN?Ee.BOTTOM:Ee.TOP;t.setTupletLocation(e);let i=!1;for(let e=0;e=V.durationToTicks("4"))throw new g("BadArguments","Beams can only be applied to notes shorter than a quarter note.");let i,b;this.stem_direction=t[0].getStemDirection();let a=this.stem_direction;if(e&&c(t[0]))a=Fe(t);else if(e&&_(t[0])){const e=t.reduce(((t,e)=>t+e.getStemDirection()),0);a=e>-1?at.UP:at.DOWN}for(i=0;it.getGlyphProps().beam_count)).reduce(((t,e)=>e>t?e:t))}breakSecondaryAt(t){return this.break_on_indices=t,this}setPartialBeamSideAt(t,e){return this.forcedPartialDirections[t]=e,this}unsetPartialBeamSideAt(t){return delete this.forcedPartialDirections[t],this}getSlopeY(t,e,i,b){return i+(t-e)*b}calculateSlope(){const{notes:t,stem_direction:e,render_options:{max_slope:i,min_slope:b,slope_iterations:a,slope_cost:n}}=this,s=t[0],l=function(t,e){const i=t.getStemExtents().topY,b=t.getStemX();return(e.getStemExtents().topY-i)/(e.getStemX()-b)}(s,t[t.length-1]),o=(i-b)/a;let r=Number.MAX_VALUE,h=0,m=0;for(let a=b;a<=i;a+=o){let i=0,b=0;for(let n=1;na)&&(o=a,s=Math.min(...b.getYs()),l=b.getBeamCount())}let r=n/t.length;const h=b+l*(1.5*i),m=s+h*-e;e===at.DOWN&&rm&&(r=s-h),a?(e===at.DOWN&&r>a||e===at.UP&&r=8&&(h=-1!==this.break_on_indices.indexOf(o),this.render_options.secondary_break_ticks&&l>=this.render_options.secondary_break_ticks&&(l=0,h=!0));const m=r.getIntrinsicTicks(){const i=e.getStem();if(i){const b=e.getStemX();i.setNoteHeadXBounds(b,b),i.setContext(t).draw()}}),this)}drawBeamLines(t){const e=["4","8","16","32","64"],i=this.notes[0];let b=this.getBeamYToDraw();const a=i.getStemX(),n=this.render_options.beam_width*this.stem_direction;for(let i=0;i0||!0===e;return!e||a>0||(this.pos=b),s?this.matchSuccess():this.matchFail(b),{success:s,results:i,numMatches:a}}expectZeroOrMore(t){return this.expectOneOrMore(t,!0)}expect(t){if(Ye("Evaluating rule function:",t),!t)throw new g("Invalid rule function");let e;const i=t.bind(this.grammar)();if(i.token)e=this.matchToken(i.token,!0===i.noSpace),e.success&&(this.pos+=e.incrementPos);else{if(!i.expect)throw Ye(i),new g("Bad grammar! No `token` or `expect` property "+i);e=i.oneOrMore?this.expectOneOrMore(i):i.zeroOrMore?this.expectZeroOrMore(i):this.expectOne(i)}const b=[];return e.matches=b,e.results&&e.results.forEach((t=>b.push(Ge(t)))),i.run&&e.success&&i.run({matches:b}),e}}function Xe(...t){Qe.DEBUG&&u("Vex.Flow.EasyScore",t)}He.DEBUG=!1;class je{constructor(t){this.builder=t}begin(){return this.LINE}LINE(){return{expect:[this.PIECE,this.PIECES,this.EOL]}}PIECE(){return{expect:[this.CHORDORNOTE,this.PARAMS],run:()=>this.builder.commitPiece()}}PIECES(){return{expect:[this.COMMA,this.PIECE],zeroOrMore:!0}}PARAMS(){return{expect:[this.DURATION,this.TYPE,this.DOTS,this.OPTS]}}CHORDORNOTE(){return{expect:[this.CHORD,this.SINGLENOTE],or:!0}}CHORD(){return{expect:[this.LPAREN,this.NOTES,this.RPAREN],run:t=>this.builder.addChord(t.matches[1])}}NOTES(){return{expect:[this.NOTE],oneOrMore:!0}}NOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE]}}SINGLENOTE(){return{expect:[this.NOTENAME,this.ACCIDENTAL,this.OCTAVE],run:t=>{const e=t;this.builder.addSingleNote(e.matches[0],e.matches[1],e.matches[2])}}}ACCIDENTAL(){return{expect:[this.MICROTONES,this.ACCIDENTALS],maybe:!0,or:!0}}DOTS(){return{expect:[this.DOT],zeroOrMore:!0,run:t=>this.builder.setNoteDots(t.matches)}}TYPE(){return{expect:[this.SLASH,this.MAYBESLASH,this.TYPES],maybe:!0,run:t=>this.builder.setNoteType(t.matches[2])}}DURATION(){return{expect:[this.SLASH,this.DURATIONS],maybe:!0,run:t=>this.builder.setNoteDuration(t.matches[1])}}OPTS(){return{expect:[this.LBRACKET,this.KEYVAL,this.KEYVALS,this.RBRACKET],maybe:!0}}KEYVALS(){return{expect:[this.COMMA,this.KEYVAL],zeroOrMore:!0}}KEYVAL(){return{expect:[this.KEY,this.EQUALS,this.VAL],run:t=>this.builder.addNoteOption(t.matches[0],t.matches[2].slice(1,-1))}}VAL(){return{expect:[this.SVAL,this.DVAL],or:!0}}KEY(){return{token:"[a-zA-Z][a-zA-Z0-9]*"}}DVAL(){return{token:'["][^"]*["]'}}SVAL(){return{token:"['][^']*[']"}}NOTENAME(){return{token:"[a-gA-G]"}}OCTAVE(){return{token:"[0-9]+"}}ACCIDENTALS(){return{token:"bb|b|##|#|n"}}MICROTONES(){return{token:"bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o"}}DURATIONS(){return{token:"[0-9whq]+"}}TYPES(){return{token:"[rRsSmMhHgG]"}}LPAREN(){return{token:"[(]"}}RPAREN(){return{token:"[)]"}}COMMA(){return{token:"[,]"}}DOT(){return{token:"[.]"}}SLASH(){return{token:"[/]"}}MAYBESLASH(){return{token:"[/]?"}}EQUALS(){return{token:"[=]"}}LBRACKET(){return{token:"\\["}}RBRACKET(){return{token:"\\]"}}EOL(){return{token:"$"}}}class Ve{constructor(t){this.chord=[],this.dots=0,this.options={},this.duration=t}}class Ke{constructor(t){this.commitHooks=[],this.factory=t,this.reset()}reset(t){this.options=Object.assign({stem:"auto",clef:"treble"},t),this.elements={notes:[],accidentals:[]},this.rollingDuration="8",this.resetPiece()}getFactory(){return this.factory}getElements(){return this.elements}addCommitHook(t){this.commitHooks.push(t)}resetPiece(){Xe("resetPiece"),this.piece=new Ve(this.rollingDuration)}setNoteDots(t){Xe("setNoteDots:",t),t&&(this.piece.dots=t.length)}setNoteDuration(t){Xe("setNoteDuration:",t),this.rollingDuration=this.piece.duration=t||this.rollingDuration}setNoteType(t){Xe("setNoteType:",t),t&&(this.piece.type=t)}addNoteOption(t,e){Xe("addNoteOption: key:",t,"value:",e),this.piece.options[t]=e}addNote(t,e,i){Xe("addNote:",t,e,i),this.piece.chord.push({key:t,accid:e,octave:i})}addSingleNote(t,e,i){Xe("addSingleNote:",t,e,i),this.addNote(t,e,i)}addChord(t){Xe("startChord"),"object"!=typeof t[0]?this.addSingleNote(t[0]):t.forEach((t=>{t&&this.addNote(...t)})),Xe("endChord")}commitPiece(){Xe("commitPiece");const{factory:t}=this;if(!t)return;const e=Object.assign(Object.assign({},this.options),this.piece.options),i=p(e.stem,"BadArguments","options.stem is not defined").toLowerCase(),b=p(e.clef,"BadArguments","options.clef is not defined").toLowerCase(),{chord:a,duration:n,dots:s,type:l}=this.piece,o=et.accidentals,r=a.map((t=>{var e;return t.key+(o.includes(null!==(e=t.accid)&&void 0!==e?e:"")?t.accid:"")+"/"+t.octave})),h="auto"===i,m="g"==(null==l?void 0:l.toLowerCase())?t.GhostNote({duration:n,dots:s}):t.StaveNote({keys:r,duration:n,dots:s,type:l,clef:b,auto_stem:h});h||m.setStemDirection("up"===i?at.UP:at.DOWN);const c=[];a.forEach(((e,i)=>{const b=e.accid;if("string"==typeof b){const e=t.Accidental({type:b});m.addModifier(e,i),c.push(e)}else c.push(void 0)}));for(let t=0;tt(e,m,this))),this.elements.notes.push(m),this.elements.accidentals.push(c),this.resetPiece()}}function $e(t,e){void 0!==t.id&&e.setAttribute("id",t.id)}const Je=/\s*,\s*/;function qe(t,e){void 0!==t.class&&t.class.split(Je).forEach((t=>e.addClass(t)))}class Qe{constructor(t={}){this.defaults={clef:"treble",time:"4/4",stem:"auto"},this.setOptions(t)}set(t){return this.defaults=Object.assign(Object.assign({},this.defaults),t),this}setOptions(t){var e,i;const b=t.factory,a=null!==(e=t.builder)&&void 0!==e?e:new Ke(b);return this.options=Object.assign(Object.assign({commitHooks:[$e,qe,ut.easyScoreHook,Rt.easyScoreHook],throwOnError:!1},t),{factory:b,builder:a}),this.factory=b,this.builder=a,this.grammar=new je(this.builder),this.parser=new He(this.grammar),null===(i=this.options.commitHooks)||void 0===i||i.forEach((t=>this.addCommitHook(t))),this}setContext(t){return this.factory.setContext(t),this}parse(t,e={}){this.builder.reset(e);const i=this.parser.parse(t);if(!i.success&&this.options.throwOnError)throw Xe(i),new g("Error parsing line: "+t);return i}beam(t,e){return this.factory.Beam({notes:t,options:e}),t}tuplet(t,e){return this.factory.Tuplet({notes:t,options:e}),t}notes(t,e={}){return e=Object.assign({clef:this.defaults.clef,stem:this.defaults.stem},e),this.parse(t,e),this.builder.getElements().notes}voice(t,e={}){return e=Object.assign({time:this.defaults.time},e),this.factory.Voice(e).addTickables(t)}addCommitHook(t){this.builder.addCommitHook(t)}}Qe.DEBUG=!1;const Ze="Ghost note must have valid initialization data to identify duration.";class ti extends Lt{static get CATEGORY(){return x.GhostNote}constructor(t){if(!t)throw new g("BadArguments",Ze);let e;if("string"==typeof t)e={duration:t};else{if("object"!=typeof t)throw new g("BadArguments",Ze);e=t}super(e),this.setWidth(0)}isRest(){return!0}setStave(t){return super.setStave(t),this}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){this.setRendered();for(let t=0;t=li.type.TEXT&&t<=li.type.MIXED&&(this.type=t),this}setCustomText(t,e){return this.custom_depress_text=t||"",this.custom_release_text=e||"",this}setLine(t){return this.line=t,this}drawBracketed(){const t=this.checkContext();let e,i,b=!1;this.notes.forEach(((a,n,s)=>{b=!b;const l=a.getAbsoluteX(),o=a.checkStave().getYForBottomText(this.line+3);if(l{e=!e;const b=i.checkStave(),a=i.getAbsoluteX(),n=b.getYForBottomText(this.line+3),s=V.currentMusicFont().lookupMetric(`pedalMarking.${e?"down":"up"}.point`);let l=0;e?this.custom_depress_text?(l=t.measureText(this.custom_depress_text).width,t.fillText(this.custom_depress_text,a-l/2,n)):si("pedal_depress",t,a,n,s):this.custom_release_text?(l=t.measureText(this.custom_release_text).width,t.fillText(this.custom_release_text,a-l/2,n)):si("pedal_release",t,a,n,s)}))}draw(){const t=this.checkContext();this.setRendered(),t.save(),t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color),t.setFont(this.textFont),function(...t){li.DEBUG&&u("Vex.Flow.PedalMarking",t)}("Rendering Pedal Marking"),this.type===li.type.BRACKET||this.type===li.type.MIXED?(t.setLineWidth(this.render_options.bracket_line_width),this.drawBracketed()):this.type===li.type.TEXT&&this.drawText(),t.restore()}}li.DEBUG=!1,li.TEXT_FONT={family:A.SERIF,size:12,weight:P.BOLD,style:k.ITALIC},li.GLYPHS={pedal_depress:{code:"keyboardPedalPed",x_shift:-10,y_shift:0},pedal_release:{code:"keyboardPedalUp",x_shift:-2,y_shift:3}},li.type={TEXT:1,BRACKET:2,MIXED:3},li.typeString={text:li.type.TEXT,bracket:li.type.BRACKET,mixed:li.type.MIXED};const oi={1:"repeat1Bar",2:"repeat2Bars",4:"repeat4Bars",slash:"repeatBarSlash"};class ri extends ei{static get CATEGORY(){return x.RepeatNote}constructor(t,e,i){super(new Z(oi[t]||"repeat1Bar",V.currentMusicFont().lookupMetric("repeatNote.point",40),{category:"repeatNote"}),Object.assign({duration:"q",align_center:"slash"!==t},e),i)}}function hi(t,e,i,b,a,n,s){t.beginPath(),t.moveTo(e,i),t.lineTo(b,a),t.lineTo(n,s),t.lineTo(e,i),t.closePath(),t.fill()}class mi extends R{static get CATEGORY(){return x.StaveLine}constructor(t){super(),this.setNotes(t),this.text="",this.resetFont(),this.render_options={padding_left:4,padding_right:3,line_width:1,line_dash:void 0,rounded_end:!0,color:void 0,draw_start_arrow:!1,draw_end_arrow:!1,arrowhead_length:10,arrowhead_angle:Math.PI/8,text_position_vertical:mi.TextVerticalPosition.TOP,text_justification:mi.TextJustification.CENTER}}setText(t){return this.text=t,this}setNotes(t){if(!t.first_note&&!t.last_note)throw new g("BadArguments","Notes needs to have either first_note or last_note set.");if(t.first_indices||(t.first_indices=[0]),t.last_indices||(t.last_indices=[0]),t.first_indices.length!==t.last_indices.length)throw new g("BadArguments","Connected notes must have same number of indices.");return this.notes=t,this.first_note=t.first_note,this.first_indices=t.first_indices,this.last_note=t.last_note,this.last_indices=t.last_indices,this}applyLineStyle(){const t=this.checkContext(),e=this.render_options;e.line_dash&&t.setLineDash(e.line_dash),e.line_width&&t.setLineWidth(e.line_width),e.rounded_end?t.setLineCap("round"):t.setLineCap("square")}applyFontStyle(){const t=this.checkContext();t.setFont(this.textFont);const e=this.render_options.color;e&&(t.setStrokeStyle(e),t.setFillStyle(e))}drawArrowLine(t,e,i){const b=this.render_options.draw_start_arrow&&this.render_options.draw_end_arrow,a=e.x,n=e.y,s=i.x,l=i.y,o=Math.sqrt((s-a)*(s-a)+(l-n)*(l-n)),r=(o-this.render_options.arrowhead_length/3)/o;let h,m,c,d;this.render_options.draw_end_arrow||b?(h=Math.round(a+(s-a)*r),m=Math.round(n+(l-n)*r)):(h=s,m=l),this.render_options.draw_start_arrow||b?(c=a+(s-a)*(1-r),d=n+(l-n)*(1-r)):(c=a,d=n),this.render_options.color&&(t.setStrokeStyle(this.render_options.color),t.setFillStyle(this.render_options.color)),t.beginPath(),t.moveTo(c,d),t.lineTo(h,m),t.stroke(),t.closePath();const _=Math.atan2(l-n,s-a),x=Math.abs(this.render_options.arrowhead_length/Math.cos(this.render_options.arrowhead_angle));let g,y,p,u,f,S;(this.render_options.draw_end_arrow||b)&&(g=_+Math.PI+this.render_options.arrowhead_angle,p=s+Math.cos(g)*x,u=l+Math.sin(g)*x,y=_+Math.PI-this.render_options.arrowhead_angle,f=s+Math.cos(y)*x,S=l+Math.sin(y)*x,hi(t,p,u,s,l,f,S)),(this.render_options.draw_start_arrow||b)&&(g=_+this.render_options.arrowhead_angle,p=a+Math.cos(g)*x,u=n+Math.sin(g)*x,y=_-this.render_options.arrowhead_angle,f=a+Math.cos(y)*x,S=n+Math.sin(y)*x,hi(t,p,u,a,n,f,S))}draw(){const t=this.checkContext();this.setRendered();const e=this.first_note,i=this.last_note,b=this.render_options;t.save(),this.applyLineStyle();let a={x:0,y:0},n={x:0,y:0};this.first_indices.forEach(((s,l)=>{const o=this.last_indices[l];a=e.getModifierStartXY(2,s),n=i.getModifierStartXY(1,o);const r=a.y>n.y;a.x+=e.getMetrics().modRightPx+b.padding_left,n.x-=i.getMetrics().modLeftPx+b.padding_right;const h=e.getGlyphProps().getWidth();e.getKeyProps()[s].displaced&&1===e.getStemDirection()&&(a.x+=h+b.padding_left);i.getKeyProps()[o].displaced&&-1===i.getStemDirection()&&(n.x-=h+b.padding_right),a.y+=r?-3:1,n.y+=r?2:0,this.drawArrowLine(t,a,n)})),t.restore();const s=t.measureText(this.text).width,l=b.text_justification;let o=0;if(l===mi.TextJustification.LEFT)o=a.x;else if(l===mi.TextJustification.CENTER){o=(n.x-a.x)/2+a.x-s/2}else l===mi.TextJustification.RIGHT&&(o=n.x-s);let r=0;const h=b.text_position_vertical;return h===mi.TextVerticalPosition.TOP?r=e.checkStave().getYForTopText():h===mi.TextVerticalPosition.BOTTOM&&(r=e.checkStave().getYForBottomText(V.TEXT_HEIGHT_OFFSET_HACK)),t.save(),this.applyFontStyle(),t.fillText(this.text,o,r),t.restore(),this}}mi.TEXT_FONT=Object.assign({},R.TEXT_FONT),mi.TextVerticalPosition={TOP:1,BOTTOM:2},mi.TextJustification=se;class ci extends R{static get CATEGORY(){return x.System}constructor(t={}){super(),this.setOptions(t),this.partStaves=[],this.partStaveInfos=[],this.partVoices=[]}setOptions(t={}){if(!t.factory)throw new g("NoFactory","System.setOptions(options) requires a factory.");this.factory=t.factory,this.options=Object.assign(Object.assign({factory:this.factory,x:10,y:10,width:500,spaceBetweenStaves:12,autoWidth:!1,noJustification:!1,debugFormatter:!1,formatIterations:0,noPadding:!1},t),{details:Object.assign({alpha:.5},t.details),formatOptions:Object.assign({},t.formatOptions)}),!1===this.options.noJustification&&void 0===t.width&&(this.options.autoWidth=!0)}getX(){return this.options.x}setX(t){this.options.x=t,this.partStaves.forEach((e=>{e.setX(t)}))}getY(){return this.options.y}setY(t){this.options.y=t,this.partStaves.forEach((e=>{e.setY(t)}))}getStaves(){return this.partStaves}getVoices(){return this.partVoices}setContext(t){return super.setContext(t),this.factory.setContext(t),this}addConnector(t="double"){return this.connector=this.factory.StaveConnector({top_stave:this.partStaves[0],bottom_stave:this.partStaves[this.partStaves.length-1],type:t}),this.connector}addStave(t){var e;const i=Object.assign({left_bar:!1},t.options),b=null!==(e=t.stave)&&void 0!==e?e:this.factory.Stave({x:this.options.x,y:this.options.y,width:this.options.width,options:i}),a=Object.assign(Object.assign({spaceAbove:0,spaceBelow:0,debugNoteMetrics:!1,noJustification:!1},t),{options:i}),n=this.getContext();return a.voices.forEach((t=>{t.setContext(n).setStave(b).getTickables().forEach((t=>t.setStave(b))),this.partVoices.push(t)})),this.partStaves.push(b),this.partStaveInfos.push(a),b}addVoices(t){const e=this.getContext();t.forEach((t=>{t.setContext(e),this.partVoices.push(t)}))}format(){const t=this.options.details;let e=0;const i=new ke(t);this.formatter=i;let b=this.options.y,a=0;const n=[];this.partStaves.forEach(((t,e)=>{b+=t.space(this.partStaveInfos[e].spaceAbove),t.setY(b),b+=t.space(this.partStaveInfos[e].spaceBelow),b+=t.space(this.options.spaceBetweenStaves),this.partStaveInfos[e].debugNoteMetrics&&(n.push({y:b,stave:t}),b+=15),a=Math.max(a,t.getNoteStartX())})),this.partVoices.forEach((t=>{t.getTickables().forEach((t=>{const e=t.getStave();e&&t.setStave(e)}))})),i.joinVoices(this.partVoices),this.partStaves.forEach((t=>t.setNoteStartX(a))),this.options.autoWidth&&this.partVoices.length>0?(e=i.preCalculateMinTotalWidth(this.partVoices),this.options.width=e+Be.rightPadding+(a-this.options.x),this.partStaves.forEach((t=>{t.setWidth(this.options.width)}))):e=this.options.noPadding?this.options.width-(a-this.options.x):this.options.width-(a-this.options.x)-Be.defaultPadding,this.partVoices.length>0&&i.format(this.partVoices,this.options.noJustification?0:e,this.options.formatOptions),i.postFormat();for(let e=0;e{this.partVoices.forEach((i=>{i.getTickables().forEach((i=>{i.getStave()===e.stave&&vt.plotMetrics(t,i,e.y)}))}))}))}}class di extends Lt{static get CATEGORY(){return x.TabNote}constructor(t,e=!1){super(t),this.glyphPropsArr=[],this.greatestString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>t>e?t:e)),this.leastString=()=>this.positions.map((t=>t.str)).reduce(((t,e)=>tthis.width}setStave(t){super.setStave(t);const e=t.getContext();if(this.setContext(e),e){this.width=0;for(let t=0;ti.width),this.width=Math.max(i.getWidth(),this.width)}this.glyphProps.getWidth=()=>this.width}const i=this.positions.map((({str:e})=>t.getYForLine(Number(e)-1)));return this.setYs(i),this.stem&&this.stem.setYBounds(this.getStemY(),this.getStemY()),this}getPositions(){return this.positions}getModifierStartXY(t,e){if(!this.preFormatted)throw new g("UnformattedNote","Can't call GetModifierStartXY on an unformatted note");if(0===this.ys.length)throw new g("NoYValues","No Y-Values calculated for this note.");let i=0;if(t===tt.Position.LEFT)i=-2;else if(t===tt.Position.RIGHT)i=this.width+2;else if(t===tt.Position.BELOW||t===tt.Position.ABOVE){i=this.glyphProps.getWidth()/2}return{x:this.getAbsoluteX()+i,y:this.ys[e]}}getLineForRest(){return Number(this.positions[0].str)}preFormat(){this.preFormatted||(this.modifierContext&&this.modifierContext.preFormat(),this.preFormatted=!0)}getStemX(){return this.getCenterGlyphX()}getStemY(){const t=this.checkStave().getNumLines()-.5,e=at.UP===this.stem_direction?-.5:t;return this.checkStave().getYForLine(e)}getStemExtents(){return this.checkStem().getExtents()}drawFlag(){var t;const{beam:e,glyphProps:i,render_options:{draw_stem:b}}=this,a=this.checkContext(),n=null==e&&b;if(i.flag&&n){const e=this.getStemX(),i=this.getStemDirection()===at.DOWN?this.getStemY()-this.checkStem().getHeight()-(this.glyphProps?this.glyphProps.stem_down_extension:0):this.getStemY()-this.checkStem().getHeight()+(this.glyphProps?this.glyphProps.stem_up_extension:0);null===(t=this.flag)||void 0===t||t.render(a,e,i)}}drawModifiers(){this.modifiers.forEach((t=>{l(t)&&!this.render_options.draw_dots||(t.setContext(this.getContext()),t.drawWithStyle())}))}drawStemThrough(){const t=this.getStemX(),e=this.getStemY(),i=this.checkContext(),b=this.render_options.draw_stem,a=this.render_options.draw_stem_through_stave;if(b&&a){const b=function(t,e,i,b){const a=1!==b,n=-1!==b,s=i.getSpacingBetweenLines(),l=i.getNumLines(),o=[];return e.forEach((e=>{const r=e.indexOf(l)>-1,h=e.indexOf(1)>-1;if(a&&h||n&&r)return;1===e.length&&e.push(e[0]);const m=[];e.forEach(((e,a,n)=>{const o=1===e,r=e===l;let h=i.getYForLine(e-1);0!==a||o?a!==n.length-1||r||(h+=s/2-1):h-=s/2-1,m.push(h),1===b&&o?m.push(t-2):-1===b&&r&&m.push(t+2)})),o.push(m.sort(((t,e)=>t-e)))})),o}(e,function(t,e){const i=[];let b=[];for(let a=1;a<=t;a++)e.indexOf(a)>-1?(i.push(b),b=[]):b.push(a);return b.length>0&&i.push(b),i}(this.checkStave().getNumLines(),this.positions.map((t=>Number(t.str)))),this.checkStave(),this.getStemDirection());i.save(),i.setLineWidth(at.WIDTH),b.forEach((e=>{0!==e.length&&(i.beginPath(),i.moveTo(t,e[0]),i.lineTo(t,e[e.length-1]),i.stroke(),i.closePath())})),i.restore()}}drawPositions(){var t;const e=this.checkContext(),i=this.getAbsoluteX(),b=this.ys;for(let a=0;a{const i=ui.GLYPHS[e];if(!i)throw new g("Invalid dynamics character: "+e);const b=p(this.render_options.glyph_font_size),a=new Z(i.code,b,{category:"textNote"});this.glyphs.push(a),t+=i.width})),this.setWidth(t),this.preFormatted=!0,this}draw(){this.setRendered();const t=this.getAbsoluteX(),e=this.checkStave().getYForLine(this.line+-3);pi("Rendering Dynamics: ",this.sequence);let i=t;this.glyphs.forEach(((t,b)=>{const a=this.sequence[b];t.render(this.checkContext(),i,e),i+=ui.GLYPHS[a].width}))}}ui.DEBUG=!1;class fi extends vt{static get CATEGORY(){return x.TimeSigNote}constructor(t,e){super({duration:"b"}),this.timeSig=new ve(t,e),this.setWidth(this.timeSig.getGlyph().getMetrics().width),this.ignore_ticks=!0}addToModifierContext(t){return this}preFormat(){return this.preFormatted=!0,this}draw(){const t=this.checkStave(),e=this.checkContext();this.setRendered();const i=this.timeSig.getGlyph();i.getContext()||i.setContext(e),i.setStave(t),i.setYShift(t.getYForLine(2)-t.getYForGlyphs()),i.renderToStave(this.getAbsoluteX())}}class Si extends R{static get CATEGORY(){return x.VibratoBracket}constructor(t){super(),t.start&&(this.start=t.start),t.stop&&(this.stop=t.stop),this.line=1,this.render_options={harsh:!1,wave_height:6,wave_width:4,wave_girth:2,vibrato_width:0}}setLine(t){return this.line=t,this}setHarsh(t){return this.render_options.harsh=t,this}draw(){const t=this.checkContext();this.setRendered();const e=this.start&&this.start.checkStave().getYForTopText(this.line)||this.stop&&this.stop.checkStave().getYForTopText(this.line)||0,i=this.start&&this.start.getAbsoluteX()||this.stop&&this.stop.checkStave().getTieStartX()||0,b=this.stop&&this.stop.getAbsoluteX()-this.stop.getWidth()-5||this.start&&this.start.checkStave().getTieEndX()-10||0;this.render_options.vibrato_width=b-i,function(...t){Si.DEBUG&&u("Vex.Flow.VibratoBracket",t)}("Rendering VibratoBracket: start_x:",i,"stop_x:",b,"y:",e),me.renderVibrato(t,i,e,this.render_options)}}function Ti(...t){vi.DEBUG&&u("Vex.Flow.Factory",t)}Si.DEBUG=!1;class vi{static newFromElementId(t,e=500,i=200){return new vi({renderer:{elementId:t,width:e,height:i}})}constructor(t={}){Ti("New factory: ",t),this.options={stave:{space:10},renderer:{elementId:"",width:500,height:200,background:"#FFF"},font:vi.TEXT_FONT},this.setOptions(t)}reset(){this.renderQ=[],this.systems=[],this.staves=[],this.voices=[],this.stave=void 0}setOptions(t){this.options=Object.assign(Object.assign({},this.options),t),this.initRenderer(),this.reset()}initRenderer(){const{elementId:t,width:e,height:i,background:b}=this.options.renderer;if(null==t)return;if(""==t)throw Ti(this),new g("renderer.elementId not set in FactoryOptions");let a=this.options.renderer.backend;if(void 0===a){a=qt(document.getElementById(t))?oe.Backends.CANVAS:oe.Backends.SVG}this.context=oe.buildContext(t,a,e,i,b)}getContext(){return this.context}setContext(t){return this.context=t,this}getStave(){return this.stave}getVoices(){return this.voices}Stave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1*e}},t),b=new Be(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}TabStave(t){const e=this.options.stave.space,i=Object.assign({x:0,y:0,width:this.options.renderer.width-1*e,options:{spacing_between_lines_px:1.3*e}},t),b=new _i(i.x,i.y,i.width,i.options);return this.staves.push(b),b.setContext(this.context),this.stave=b,b}StaveNote(t){const e=new It(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GlyphNote(t,e,i){const b=new ei(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}RepeatNote(t,e,i){const b=new ri(t,e,i);return this.stave&&b.setStave(this.stave),b.setContext(this.context),this.renderQ.push(b),b}GhostNote(t){const e=new ti(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TextNote(t){const e=new ue(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}BarNote(t={}){const e=new Mt(t.type);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}ClefNote(t){const e=Object.assign({type:"treble",options:{size:"default",annotation:void 0}},t),i=new We(e.type,e.options.size,e.options.annotation);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}TimeSigNote(t){const e=Object.assign({time:"4/4"},t),i=new fi(e.time);return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}KeySigNote(t){const e=new bi(t.key,t.cancelKey,t.alterKey);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}TabNote(t){const e=new di(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),this.renderQ.push(e),e}GraceNote(t){const e=new ii(t);return this.stave&&e.setStave(this.stave),e.setContext(this.context),e}GraceNoteGroup(t){const e=new jt(t.notes,t.slur);return e.setContext(this.context),e}Accidental(t){const e=new bt(t.type);return e.setContext(this.context),e}Annotation(t){const e=Object.assign({text:"p",hJustify:ht.CENTER,vJustify:mt.BOTTOM},t),i=new ct(e.text);return i.setJustification(e.hJustify),i.setVerticalJustification(e.vJustify),i.setFont(e.font),i.setContext(this.context),i}ChordSymbol(t){const e=Object.assign({vJustify:"top",hJustify:"center",kerning:!0,reportWidth:!0},t),i=new Nt;return i.setHorizontal(e.hJustify),i.setVertical(e.vJustify),i.setEnableKerning(e.kerning),i.setReportWidth(e.reportWidth),"string"==typeof e.fontFamily&&"number"==typeof e.fontSize?"string"==typeof e.fontWeight?i.setFont(e.fontFamily,e.fontSize,e.fontWeight):i.setFont(e.fontFamily,e.fontSize,""):"number"==typeof e.fontSize&&i.setFontSize(e.fontSize),i.setContext(this.context),i}Articulation(t){var e;const i=new ut(null!==(e=null==t?void 0:t.type)&&void 0!==e?e:"a.");return null!=(null==t?void 0:t.position)&&i.setPosition(t.position),null!=(null==t?void 0:t.betweenLines)&&i.setBetweenLines(t.betweenLines),i.setContext(this.context),i}Ornament(t,e){const i=Object.assign({type:t,position:0,accidental:""},e),b=new $t(t);return b.setPosition(i.position),i.upperAccidental&&b.setUpperAccidental(i.upperAccidental),i.lowerAccidental&&b.setLowerAccidental(i.lowerAccidental),void 0!==i.delayed&&b.setDelayed(i.delayed),b.setContext(this.context),b}TextDynamics(t){const e=Object.assign({text:"p",duration:"q",dots:0,line:0},t),i=new ui({text:e.text,line:e.line,duration:e.duration,dots:e.dots});return this.stave&&i.setStave(this.stave),i.setContext(this.context),this.renderQ.push(i),i}Fingering(t){const e=Object.assign({number:"0",position:"left"},t),i=new Rt(e.number);return i.setPosition(e.position),i.setContext(this.context),i}StringNumber(t,e=!0){const i=new re(t.number);return i.setPosition(t.position),i.setContext(this.context),i.setDrawCircle(e),i}TickContext(){return new Kt}ModifierContext(){return new de}MultiMeasureRest(t){const e=p(t.number_of_measures,"NoNumberOfMeasures"),i=new ni(e,t);return i.setContext(this.context),this.renderQ.push(i),i}Voice(t){const e=Object.assign({time:"4/4"},t),i=new Xt(e.time);return this.voices.push(i),i}StaveConnector(t){const e=new Ce(t.top_stave,t.bottom_stave);return e.setType(t.type).setContext(this.context),this.renderQ.push(e),e}Formatter(t){return new ke(t)}Tuplet(t){const e=Object.assign({notes:[],options:{}},t),i=new Me(e.notes,e.options).setContext(this.context);return this.renderQ.push(i),i}Beam(t){var e,i,b,a,n;const s=new Re(t.notes,null===(e=t.options)||void 0===e?void 0:e.autoStem).setContext(this.context);return s.breakSecondaryAt(null!==(b=null===(i=t.options)||void 0===i?void 0:i.secondaryBeamBreaks)&&void 0!==b?b:[]),(null===(a=t.options)||void 0===a?void 0:a.partialBeamDirections)&&Object.entries(null===(n=t.options)||void 0===n?void 0:n.partialBeamDirections).forEach((([t,e])=>{s.setPartialBeamSideAt(Number(t),e)})),this.renderQ.push(s),s}Curve(t){const e=new Ie(t.from,t.to,t.options).setContext(this.context);return this.renderQ.push(e),e}StaveTie(t){var e;const i=new Yt({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices},t.text);return(null===(e=t.options)||void 0===e?void 0:e.direction)&&i.setDirection(t.options.direction),i.setContext(this.context),this.renderQ.push(i),i}StaveLine(t){var e,i;const b=new mi({first_note:t.from,last_note:t.to,first_indices:t.first_indices,last_indices:t.last_indices});return(null===(e=t.options)||void 0===e?void 0:e.text)&&b.setText(t.options.text),(null===(i=t.options)||void 0===i?void 0:i.font)&&b.setFont(t.options.font),b.setContext(this.context),this.renderQ.push(b),b}VibratoBracket(t){const e=new Si({start:t.from,stop:t.to});return t.options.line&&e.setLine(t.options.line),t.options.harsh&&e.setHarsh(t.options.harsh),e.setContext(this.context),this.renderQ.push(e),e}TextBracket(t){const e=new yi({start:t.from,stop:t.to,text:t.text,superscript:t.options.superscript,position:t.options.position});return t.options.line&&e.setLine(t.options.line),t.options.font&&e.setFont(t.options.font),e.setContext(this.context),this.renderQ.push(e),e}System(t={}){t.factory=this;const e=new ci(t).setContext(this.context);return this.systems.push(e),e}EasyScore(t={}){return t.factory=this,new Qe(t)}PedalMarking(t){const e=Object.assign({notes:[],options:{style:"mixed"}},t),i=new li(e.notes);return i.setType(li.typeString[e.options.style]),i.setContext(this.context),this.renderQ.push(i),i}NoteSubGroup(t){const e=Object.assign({notes:[]},t),i=new Vt(e.notes);return i.setContext(this.context),i}draw(){const t=this.context;this.systems.forEach((e=>e.setContext(t).format())),this.staves.forEach((e=>e.setContext(t).draw())),this.voices.forEach((e=>e.setContext(t).draw())),this.renderQ.forEach((e=>{e.isRendered()||e.setContext(t).draw()})),this.systems.forEach((e=>e.setContext(t).draw())),this.reset()}}vi.DEBUG=!1,vi.TEXT_FONT=Object.assign({},R.TEXT_FONT);class wi extends di{static get CATEGORY(){return x.GraceTabNote}constructor(t){super(t,!1),this.render_options=Object.assign(Object.assign({},this.render_options),{y_shift:.3,scale:.6,font:`7.5pt ${A.SANS_SERIF}`}),this.updateWidth()}}class zi{constructor(t){this.music=new et,this.setKey(t)}setKey(t){return this.key=t,this.reset(),this}getKey(){return this.key}reset(){this.keyParts=this.music.getKeyParts(this.key),this.keyString=this.keyParts.root,this.keyParts.accidental&&(this.keyString+=this.keyParts.accidental);if(!et.scaleTypes[this.keyParts.type])throw new g("BadArguments",`Unsupported key type: ${this.key}`);this.scale=this.music.getScaleTones(this.music.getNoteValue(this.keyString),et.scaleTypes[this.keyParts.type]),this.scaleMap={},this.scaleMapByValue={},this.originalScaleMapByValue={};const t=et.root_indices[this.keyParts.root];for(let e=0;eb?Di.SLIDE_DOWN:Di.SLIDE_UP}this.direction=e,this.render_options.cp1=11,this.render_options.cp2=14,this.render_options.y_shift=.5,this.resetFont()}renderTie(t){if(0===t.first_ys.length||0===t.last_ys.length)throw new g("BadArguments","No Y-values to render");const e=this.checkContext(),i=t.first_x_px,b=t.first_ys,a=t.last_x_px,n=t.direction;if(n!==Di.SLIDE_UP&&n!==Di.SLIDE_DOWN)throw new g("BadSlide","Invalid slide direction");const s=this.notes.first_indices;for(let t=0;tthis.tuningValues.length)throw new g("BadArguments",`String number must be between 1 and ${this.tuningValues.length}:${t}`);return this.tuningValues[e-1]}getValueForFret(t,e){const i=this.getValueForString(e),b=Number(t);if(b<0)throw new g("BadArguments",`Fret number must be 0 or higher: ${t}`);return i+b}getNoteForFret(t,e){const i=this.getValueForFret(t,e),b=Math.floor(i/12),a=i%12;return`${V.integerToNote(a)}/${b}`}}var ki=function(t,e,i,b){return new(i||(i=Promise))((function(a,n){function s(t){try{o(b.next(t))}catch(t){n(t)}}function l(t){try{o(b.throw(t))}catch(t){n(t)}}function o(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,l)}o((b=b.apply(t,e||[])).next())}))};class Ei{static get BUILD(){return{VERSION:"4.2.0-beta.1",ID:"0882a0dadf7dc89b98f0b26593d26ed4d8e34341",DATE:"2023-01-10T00:21:01.976Z"}}static setMusicFont(...t){const e=t.map((t=>A.load(t)));return V.MUSIC_FONT_STACK=e,Z.MUSIC_FONT_STACK=e.slice(),Z.CURRENT_CACHE_KEY=t.join(","),e}static fetchMusicFont(t,e){return ki(this,void 0,void 0,(function*(){}))}static getMusicFont(){return V.MUSIC_FONT_STACK.map((t=>t.getName()))}static get RENDER_PRECISION_PLACES(){return V.RENDER_PRECISION_PLACES}static set RENDER_PRECISION_PLACES(t){V.RENDER_PRECISION_PLACES=t}static get SOFTMAX_FACTOR(){return V.SOFTMAX_FACTOR}static set SOFTMAX_FACTOR(t){V.SOFTMAX_FACTOR=t}static get NOTATION_FONT_SCALE(){return V.NOTATION_FONT_SCALE}static set NOTATION_FONT_SCALE(t){V.NOTATION_FONT_SCALE=t}static get TABLATURE_FONT_SCALE(){return V.TABLATURE_FONT_SCALE}static set TABLATURE_FONT_SCALE(t){V.TABLATURE_FONT_SCALE=t}static get RESOLUTION(){return V.RESOLUTION}static set RESOLUTION(t){V.RESOLUTION=t}static get SLASH_NOTEHEAD_WIDTH(){return V.SLASH_NOTEHEAD_WIDTH}static set SLASH_NOTEHEAD_WIDTH(t){V.SLASH_NOTEHEAD_WIDTH=t}static get STAVE_LINE_DISTANCE(){return V.STAVE_LINE_DISTANCE}static set STAVE_LINE_DISTANCE(t){V.STAVE_LINE_DISTANCE=t}static get STAVE_LINE_THICKNESS(){return V.STAVE_LINE_THICKNESS}static set STAVE_LINE_THICKNESS(t){V.STAVE_LINE_THICKNESS=t}static get STEM_HEIGHT(){return V.STEM_HEIGHT}static set STEM_HEIGHT(t){V.STEM_HEIGHT=t}static get STEM_WIDTH(){return V.STEM_WIDTH}static set STEM_WIDTH(t){V.STEM_WIDTH=t}static get TIME4_4(){return V.TIME4_4}static get accidentalMap(){return V.accidentalMap}static get unicode(){return V.unicode}static keySignature(t){return V.keySignature(t)}static hasKeySignature(t){return V.hasKeySignature(t)}static getKeySignatures(){return V.getKeySignatures()}static clefProperties(t){return V.clefProperties(t)}static keyProperties(t,e,i){return V.keyProperties(t,e,i)}static durationToTicks(t){return V.durationToTicks(t)}}Ei.Accidental=bt,Ei.Annotation=ct,Ei.Articulation=ut,Ei.Barline=Et,Ei.BarNote=Mt,Ei.Beam=Re,Ei.Bend=Ft,Ei.BoundingBox=D,Ei.BoundingBoxComputation=C,Ei.CanvasContext=Zt,Ei.ChordSymbol=Nt,Ei.Clef=_e,Ei.ClefNote=We,Ei.Crescendo=Le,Ei.Curve=Ie,Ei.Dot=Ot,Ei.EasyScore=Qe,Ei.Element=R,Ei.Factory=vi,Ei.Font=A,Ei.Formatter=ke,Ei.Fraction=z,Ei.FretHandFinger=Rt,Ei.GhostNote=ti,Ei.Glyph=Z,Ei.GlyphNote=ei,Ei.GraceNote=ii,Ei.GraceNoteGroup=jt,Ei.GraceTabNote=wi,Ei.KeyManager=zi,Ei.KeySignature=xe,Ei.KeySigNote=bi,Ei.Modifier=tt,Ei.ModifierContext=de,Ei.MultiMeasureRest=ni,Ei.Music=et,Ei.Note=vt,Ei.NoteHead=Wt,Ei.NoteSubGroup=Vt,Ei.Ornament=$t,Ei.Parenthesis=Jt,Ei.Parser=He,Ei.PedalMarking=li,Ei.Registry=O,Ei.RenderContext=ft,Ei.Renderer=oe,Ei.RepeatNote=ri,Ei.Repetition=ge,Ei.Stave=Be,Ei.StaveConnector=Ce,Ei.StaveHairpin=Bi,Ei.StaveLine=mi,Ei.StaveModifier=kt,Ei.StaveNote=It,Ei.StaveTempo=pe,Ei.StaveText=fe,Ei.StaveTie=Yt,Ei.Stem=at,Ei.StringNumber=re,Ei.Stroke=he,Ei.SVGContext=be,Ei.System=ci,Ei.TabNote=di,Ei.TabSlide=Di,Ei.TabStave=_i,Ei.TabTie=Gt,Ei.TextBracket=yi,Ei.TextDynamics=ui,Ei.TextFormatter=rt,Ei.TextNote=ue,Ei.TickContext=Kt,Ei.TimeSignature=ve,Ei.TimeSigNote=fi,Ei.Tremolo=Ci,Ei.Tuning=Pi,Ei.Tuplet=Me,Ei.Vibrato=me,Ei.VibratoBracket=Si,Ei.Voice=Xt,Ei.Volta=Se,Ei.AnnotationHorizontalJustify=ht,Ei.AnnotationVerticalJustify=mt,Ei.ChordSymbolHorizontalJustify=Bt,Ei.ChordSymbolVerticalJustify=Dt,Ei.SymbolTypes=Ct,Ei.SymbolModifiers=Pt,Ei.CurvePosition=Ue,Ei.FontWeight=P,Ei.FontStyle=k,Ei.ModifierPosition=J,Ei.RendererBackends=ae,Ei.RendererLineEndType=ne,Ei.BarlineType=zt,Ei.StaveModifierPosition=wt,Ei.VoltaType=le,Ei.TextBracketPosition=gi,Ei.TextJustification=se,Ei.VoiceMode=Ht;const Mi={glyphs:{bracketTop:{x_min:0,x_max:469,y_min:0,y_max:295,ha:295,o:"m 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z"},bracketBottom:{x_min:0,x_max:469,y_min:-295,y_max:0,ha:295,o:"m 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z"},barlineTick:{x_min:0,x_max:36,y_min:868,y_max:1120,ha:252,o:"m 52 1250 l 52 1613 l 0 1613 l 0 1250 z"},breathMarkTick:{x_min:0,x_max:500,y_min:0,y_max:502,ha:502,o:"m 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z"},segno:{x_min:4,x_max:550,y_min:-27,y_max:759,ha:786,o:"m 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z"},coda:{x_min:-4,x_max:955,y_min:-158,y_max:898,ha:1056,o:"m 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z"},gClef:{x_min:0,x_max:671,y_min:-658,y_max:1098,ha:1756,o:"m 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z"},cClef:{x_min:0,x_max:699,y_min:-506,y_max:506,ha:1012,o:"m 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z"},fClef:{x_min:-5,x_max:684,y_min:-635,y_max:262,ha:897,o:"m 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z"},unpitchedPercussionClef1:{x_min:0,x_max:382,y_min:-250,y_max:250,ha:500,o:"m 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z"},"6stringTabClef":{x_min:-3,x_max:408,y_min:-748,y_max:764,ha:1512,o:"m 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z"},timeSig0:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z"},timeSig1:{x_min:20,x_max:314,y_min:-250,y_max:251,ha:501,o:"m 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z"},timeSig2:{x_min:20,x_max:426,y_min:-257,y_max:254,ha:511,o:"m 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z"},timeSig3:{x_min:20,x_max:401,y_min:-251,y_max:249,ha:500,o:"m 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z"},timeSig4:{x_min:20,x_max:450,y_min:-250,y_max:251,ha:501,o:"m 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z"},timeSig5:{x_min:20,x_max:383,y_min:-251,y_max:246,ha:497,o:"m 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z"},timeSig6:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z"},timeSig7:{x_min:20,x_max:421,y_min:-250,y_max:249,ha:499,o:"m 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z"},timeSig8:{x_min:20,x_max:416,y_min:-259,y_max:259,ha:518,o:"m 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z"},timeSig9:{x_min:20,x_max:414,y_min:-249,y_max:251,ha:500,o:"m 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z"},timeSigCommon:{x_min:5,x_max:424,y_min:-249,y_max:251,ha:500,o:"m 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z"},timeSigCutCommon:{x_min:0,x_max:418,y_min:-359,y_max:361,ha:720,o:"m 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z"},timeSigPlus:{x_min:-1,x_max:499,y_min:-250,y_max:250,ha:500,o:"m 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z"},timeSigPlusSmall:{x_min:-1,x_max:255,y_min:-133,y_max:123,ha:256,o:"m 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z"},timeSigMinus:{x_min:0,x_max:448,y_min:-35,y_max:40,ha:75,o:"m 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z"},timeSigParensRight:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z"},timeSigParensRightSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z"},timeSigParensLeft:{x_min:0,x_max:184,y_min:-489,y_max:491,ha:980,o:"m 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z"},timeSigParensLeftSmall:{x_min:0,x_max:110,y_min:-251,y_max:249,ha:500,o:"m 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z"},noteheadDoubleWhole:{x_min:0,x_max:599,y_min:-155,y_max:155,ha:310,o:"m 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z"},noteheadWhole:{x_min:0,x_max:422,y_min:-125,y_max:125,ha:250,o:"m 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z"},noteheadHalf:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z"},noteheadBlack:{x_min:0,x_max:295,y_min:-125,y_max:125,ha:250,o:"m 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z"},noteheadXDoubleWhole:{x_min:0,x_max:546,y_min:-155,y_max:155,ha:310,o:"m 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z"},noteheadXWhole:{x_min:0,x_max:377,y_min:-125,y_max:125,ha:250,o:"m 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z"},noteheadXHalf:{x_min:0,x_max:334,y_min:-125,y_max:125,ha:250,o:"m 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z"},noteheadXBlack:{x_min:0,x_max:290,y_min:-125,y_max:125,ha:250,o:"m 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:422,y_min:-155,y_max:155,ha:310,o:"m 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z"},noteheadCircleXWhole:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z"},noteheadCircleXHalf:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z"},noteheadCircleX:{x_min:0,x_max:249,y_min:-125,y_max:125,ha:250,o:"m 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:603,y_min:-218,y_max:213,ha:431,o:"m 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z"},noteheadCircledWhole:{x_min:0,x_max:437,y_min:-225,y_max:211,ha:436,o:"m 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z"},noteheadCircledHalf:{x_min:-18,x_max:311,y_min:-162,y_max:167,ha:329,o:"m 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z"},noteheadCircledBlack:{x_min:-21,x_max:321,y_min:-171,y_max:167,ha:338,o:"m 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:416,y_min:-190,y_max:198,ha:388,o:"m 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z"},noteheadSquareWhite:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z"},noteheadSquareBlack:{x_min:0,x_max:313,y_min:-125,y_max:125,ha:250,o:"m 451 -180 l 451 180 l 0 180 l 0 -180 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z"},noteheadTriangleDownWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z"},noteheadTriangleDownHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z"},noteheadTriangleDownBlack:{x_min:0,x_max:292,y_min:-125,y_max:125,ha:250,o:"m 207 -180 l 420 180 l 0 180 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:483,y_min:-155,y_max:155,ha:310,o:"m 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z"},noteheadTriangleUpWhole:{x_min:0,x_max:319,y_min:-125,y_max:125,ha:250,o:"m 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z"},noteheadTriangleUpHalf:{x_min:0,x_max:285,y_min:-125,y_max:125,ha:250,o:"m 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z"},noteheadTriangleUpBlack:{x_min:0,x_max:293,y_min:-125,y_max:125,ha:250,o:"m 422 -180 l 207 180 l 0 -180 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:596,y_min:-179,y_max:168,ha:347,o:"m 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z"},noteheadSlashedWhole1:{x_min:-22,x_max:433,y_min:-157,y_max:148,ha:305,o:"m 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z"},noteheadSlashedHalf1:{x_min:-67,x_max:386,y_min:-142,y_max:160,ha:302,o:"m 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z"},noteheadSlashedBlack1:{x_min:-80,x_max:375,y_min:-165,y_max:167,ha:332,o:"m 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:596,y_min:-178,y_max:169,ha:347,o:"m 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z"},noteheadSlashedWhole2:{x_min:-18,x_max:436,y_min:-154,y_max:151,ha:305,o:"m 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z"},noteheadSlashedHalf2:{x_min:-73,x_max:380,y_min:-134,y_max:168,ha:302,o:"m 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z"},noteheadSlashedBlack2:{x_min:-79,x_max:376,y_min:-164,y_max:168,ha:332,o:"m 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:432,y_min:-155,y_max:155,ha:310,o:"m 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z"},noteheadDiamondWhole:{x_min:0,x_max:270,y_min:-125,y_max:125,ha:250,o:"m 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z"},noteheadDiamondHalf:{x_min:0,x_max:251,y_min:-125,y_max:125,ha:250,o:"m 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z"},noteheadDiamondBlack:{x_min:0,x_max:250,y_min:-125,y_max:125,ha:250,o:"m 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z"},noteheadParenthesis:{x_min:-73,x_max:368,y_min:-180,y_max:182,ha:362,o:"m 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z"},noteheadParenthesisRight:{x_min:-36,x_max:73,y_min:-181,y_max:181,ha:362,o:"m -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z"},noteheadParenthesisLeft:{x_min:0,x_max:109,y_min:-181,y_max:181,ha:362,o:"m 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z"},noteheadMoonBlack:{x_min:0,x_max:315,y_min:-125,y_max:125,ha:250,o:"m 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 -180 l 0 180 l 0 -180 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-125,y_max:125,ha:250,o:"m 488 180 l 0 -180 l 488 -180 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:278,y_min:-125,y_max:125,ha:250,o:"m 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z"},tremolo1:{x_min:-150,x_max:150,y_min:-93,y_max:94,ha:187,o:"m 216 -45 l 216 135 l -216 46 l -216 -134 z"},flag8thUp:{x_min:0,x_max:264,y_min:-810,y_max:9,ha:819,o:"m 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z"},flag8thDown:{x_min:0,x_max:306,y_min:-14,y_max:808,ha:822,o:"m 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z"},flag16thUp:{x_min:0,x_max:279,y_min:-813,y_max:2,ha:815,o:"m 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z"},flag16thDown:{x_min:0,x_max:291,y_min:-9,y_max:812,ha:821,o:"m 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z"},flag32ndUp:{x_min:0,x_max:261,y_min:-812,y_max:149,ha:961,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag32ndDown:{x_min:0,x_max:273,y_min:-172,y_max:812,ha:984,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z"},flag64thUp:{x_min:0,x_max:261,y_min:-812,y_max:347,ha:1159,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag64thDown:{x_min:0,x_max:273,y_min:-376,y_max:812,ha:1188,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z"},flag128thUp:{x_min:0,x_max:261,y_min:-812,y_max:533,ha:1345,o:"m 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z"},flag128thDown:{x_min:0,x_max:273,y_min:-580,y_max:812,ha:1392,o:"m 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z"},accidentalFlat:{x_min:0,x_max:226,y_min:-175,y_max:439,ha:614,o:"m 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z"},accidentalNatural:{x_min:0,x_max:168,y_min:-335,y_max:341,ha:676,o:"m 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z"},accidentalSharp:{x_min:0,x_max:249,y_min:-348,y_max:350,ha:698,o:"m 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z"},accidentalDoubleSharp:{x_min:0,x_max:247,y_min:-125,y_max:127,ha:252,o:"m 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z"},accidentalDoubleFlat:{x_min:0,x_max:411,y_min:-175,y_max:437,ha:612,o:"m 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z"},accidentalParensLeft:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z"},accidentalParensRight:{x_min:0,x_max:141,y_min:-248,y_max:247,ha:495,o:"m 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z"},accidentalQuarterToneFlatStein:{x_min:1,x_max:227,y_min:-175,y_max:439,ha:614,o:"m 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:1,x_max:466,y_min:-175,y_max:439,ha:614,o:"m 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:179,y_min:-353,y_max:307,ha:660,o:"m 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z"},accidentalThreeQuarterTonesSharpStein:{x_min:3,x_max:317,y_min:-347,y_max:369,ha:716,o:"m 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z"},accidentalBuyukMucennebFlat:{x_min:1,x_max:287,y_min:-174,y_max:438,ha:612,o:"m 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z"},accidentalBakiyeFlat:{x_min:-1,x_max:286,y_min:-175,y_max:439,ha:614,o:"m 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z"},accidentalKomaSharp:{x_min:0,x_max:229,y_min:-337,y_max:322,ha:659,o:"m 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z"},accidentalKucukMucennebSharp:{x_min:-1,x_max:339,y_min:-338,y_max:321,ha:659,o:"m 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z"},accidentalKoron:{x_min:0,x_max:300,y_min:-472,y_max:157,ha:629,o:"m 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z"},accidentalSori:{x_min:0,x_max:421,y_min:-318,y_max:328,ha:646,o:"m 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z"},articAccentAbove:{x_min:0,x_max:339,y_min:1,y_max:245,ha:244,o:"m 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z"},articAccentBelow:{x_min:0,x_max:339,y_min:-244,y_max:0,ha:244,o:"m 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z"},articTenutoAbove:{x_min:-1,x_max:338,y_min:0,y_max:48,ha:48,o:"m 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z"},articTenutoBelow:{x_min:-1,x_max:338,y_min:-48,y_max:0,ha:48,o:"m 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z"},articStaccatoAbove:{x_min:0,x_max:84,y_min:0,y_max:84,ha:84,o:"m 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z"},articStaccatoBelow:{x_min:0,x_max:84,y_min:-84,y_max:0,ha:84,o:"m 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z"},articStaccatissimoAbove:{x_min:1,x_max:100,y_min:-2,y_max:293,ha:295,o:"m 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z"},articStaccatissimoBelow:{x_min:1,x_max:100,y_min:-295,y_max:0,ha:295,o:"m 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z"},articMarcatoAbove:{x_min:-1,x_max:235,y_min:-1,y_max:253,ha:254,o:"m 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z"},articMarcatoBelow:{x_min:-1,x_max:235,y_min:-254,y_max:0,ha:254,o:"m 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z"},fermataAbove:{x_min:3,x_max:605,y_min:-3,y_max:329,ha:332,o:"m 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z"},fermataBelow:{x_min:3,x_max:605,y_min:-332,y_max:0,ha:332,o:"m 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z"},fermataLongAbove:{x_min:0,x_max:603,y_min:-1,y_max:333,ha:334,o:"m 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z"},fermataLongBelow:{x_min:0,x_max:603,y_min:-333,y_max:1,ha:334,o:"m 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:0,y_max:408,ha:408,o:"m 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z"},fermataVeryLongBelow:{x_min:0,x_max:715,y_min:-408,y_max:0,ha:408,o:"m 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z"},fermataVeryShortAbove:{x_min:0,x_max:726,y_min:0,y_max:449,ha:449,o:"m 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z"},fermataVeryShortBelow:{x_min:0,x_max:726,y_min:-449,y_max:0,ha:449,o:"m 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z"},fermataShortAbove:{x_min:0,x_max:604,y_min:0,y_max:341,ha:341,o:"m 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z"},fermataShortBelow:{x_min:0,x_max:604,y_min:-341,y_max:0,ha:341,o:"m 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z"},breathMarkComma:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},breathMarkUpbow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},caesura:{x_min:0,x_max:384,y_min:-1,y_max:532,ha:533,o:"m 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z"},caesuraCurved:{x_min:0,x_max:373,y_min:0,y_max:530,ha:530,o:"m 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z"},restMaxima:{x_min:0,x_max:381,y_min:-249,y_max:250,ha:499,o:"m 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:0,y_max:250,ha:250,o:"m 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z"},restWhole:{x_min:0,x_max:282,y_min:-135,y_max:9,ha:144,o:"m 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z"},restWholeLegerLine:{x_min:-117,x_max:399,y_min:-135,y_max:20,ha:155,o:"m -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z"},restHalf:{x_min:0,x_max:282,y_min:-2,y_max:142,ha:144,o:"m 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z"},restHalfLegerLine:{x_min:-117,x_max:399,y_min:-13,y_max:142,ha:155,o:"m 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z"},restQuarter:{x_min:1,x_max:270,y_min:-375,y_max:373,ha:748,o:"m 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z"},rest8th:{x_min:0,x_max:247,y_min:-251,y_max:174,ha:425,o:"m 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z"},rest16th:{x_min:0,x_max:320,y_min:-500,y_max:179,ha:679,o:"m 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z"},rest32nd:{x_min:0,x_max:363,y_min:-500,y_max:426,ha:926,o:"m 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z"},rest64th:{x_min:0,x_max:423,y_min:-753,y_max:430,ha:1183,o:"m 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z"},rest128th:{x_min:0,x_max:485,y_min:-750,y_max:689,ha:1439,o:"m 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z"},dynamicPiano:{x_min:-89,x_max:366,y_min:-142,y_max:274,ha:416,o:"m 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z"},dynamicMezzo:{x_min:-20,x_max:446,y_min:-10,y_max:274,ha:284,o:"m 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z"},dynamicForte:{x_min:-141,x_max:364,y_min:-152,y_max:444,ha:596,o:"m 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z"},dynamicRinforzando:{x_min:-20,x_max:277,y_min:0,y_max:274,ha:274,o:"m 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z"},dynamicSforzando:{x_min:0,x_max:229,y_min:-10,y_max:273,ha:283,o:"m 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z"},dynamicZ:{x_min:-30,x_max:244,y_min:-10,y_max:268,ha:278,o:"m 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z"},ornamentTrill:{x_min:0,x_max:521,y_min:-10,y_max:390,ha:400,o:"m 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z"},ornamentTurn:{x_min:0,x_max:460,y_min:0,y_max:218,ha:218,o:"m 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z"},ornamentTurnSlash:{x_min:0,x_max:460,y_min:-90,y_max:306,ha:396,o:"m 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z"},ornamentMordent:{x_min:1,x_max:729,y_min:-73,y_max:319,ha:392,o:"m 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z"},ornamentShortTrill:{x_min:0,x_max:725,y_min:0,y_max:245,ha:245,o:"m 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z"},ornamentTremblement:{x_min:1,x_max:985,y_min:0,y_max:244,ha:244,o:"m 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1119,y_min:0,y_max:481,ha:481,o:"m 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:2,x_max:1150,y_min:-367,y_max:245,ha:612,o:"m 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1048,y_min:-367,y_max:331,ha:698,o:"m 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:949,y_min:0,y_max:381,ha:381,o:"m 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1278,y_min:0,y_max:247,ha:247,o:"m 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1277,y_min:-62,y_max:333,ha:395,o:"m 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:859,y_min:-222,y_max:246,ha:468,o:"m 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z"},brassScoop:{x_min:1,x_max:320,y_min:-373,y_max:13,ha:386,o:"m 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z"},brassDoitMedium:{x_min:0,x_max:489,y_min:-40,y_max:346,ha:386,o:"m 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z"},brassFallLipShort:{x_min:1,x_max:293,y_min:-345,y_max:42,ha:387,o:"m 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z"},brassLiftMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z"},brassFallRoughMedium:{x_min:0,x_max:811,y_min:0,y_max:852,ha:852,o:"m 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z"},brassBend:{x_min:0,x_max:392,y_min:0,y_max:282,ha:282,o:"m 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z"},brassMuteClosed:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},brassMuteOpen:{x_min:0,x_max:304,y_min:0,y_max:304,ha:304,o:"m 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z"},brassFlip:{x_min:0,x_max:379,y_min:0,y_max:282,ha:282,o:"m 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z"},brassJazzTurn:{x_min:0,x_max:620,y_min:0,y_max:245,ha:245,o:"m 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z"},brassSmear:{x_min:1,x_max:306,y_min:0,y_max:170,ha:170,o:"m 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z"},stringsDownBow:{x_min:0,x_max:312,y_min:0,y_max:318,ha:318,o:"m 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z"},stringsUpBow:{x_min:1,x_max:249,y_min:1,y_max:495,ha:494,o:"m 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z"},stringsHarmonic:{x_min:0,x_max:200,y_min:0,y_max:200,ha:200,o:"m 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:200,y_min:0,y_max:300,ha:300,o:"m 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:272,y_min:0,y_max:272,ha:272,o:"m 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z"},keyboardPedalPed:{x_min:0,x_max:1019,y_min:-8,y_max:555,ha:563,o:"m 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z"},keyboardPedalUp:{x_min:0,x_max:450,y_min:0,y_max:450,ha:450,o:"m 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z"},pictChokeCymbal:{x_min:1,x_max:152,y_min:2,y_max:251,ha:249,o:"m 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z"},wiggleArpeggiatoUp:{x_min:-33,x_max:292,y_min:0,y_max:119,ha:119,o:"m 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z"},arrowheadBlackUp:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z"},arrowheadBlackDown:{x_min:0,x_max:228,y_min:0,y_max:299,ha:299,o:"m 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z"},arpeggiatoUp:{x_min:1,x_max:229,y_min:7,y_max:1511,ha:1504,o:"m 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z"},arpeggiatoDown:{x_min:1,x_max:229,y_min:-4,y_max:1500,ha:1504,o:"m 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z"},repeat1Bar:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z"},repeat2Bars:{x_min:0,x_max:762,y_min:-250,y_max:279,ha:529,o:"m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z"},repeat4Bars:{x_min:0,x_max:1232,y_min:-250,y_max:279,ha:529,o:"m 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z"},repeatBarSlash:{x_min:0,x_max:532,y_min:-250,y_max:279,ha:529,o:"m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z"},csymDiminished:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z"},csymHalfDiminished:{x_min:-16,x_max:488,y_min:-15,y_max:489,ha:504,o:"m 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z"},csymAugmented:{x_min:0,x_max:395,y_min:1,y_max:396,ha:395,o:"m 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z"},csymMajorSeventh:{x_min:0,x_max:558,y_min:1,y_max:477,ha:476,o:"m 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z"},csymMinor:{x_min:0,x_max:325,y_min:216,y_max:260,ha:44,o:"m 468 374 l 0 374 l 0 311 l 468 311 z"},csymParensLeftTall:{x_min:1,x_max:185,y_min:0,y_max:997,ha:997,o:"m 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z"},csymParensRightTall:{x_min:-20,x_max:164,y_min:0,y_max:997,ha:997,o:"m -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z"},csymBracketLeftTall:{x_min:0,x_max:155,y_min:0,y_max:1e3,ha:1e3,o:"m 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z"},csymBracketRightTall:{x_min:1,x_max:156,y_min:0,y_max:1e3,ha:1e3,o:"m 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:122,y_min:0,y_max:993,ha:993,o:"m 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z"},csymParensRightVeryTall:{x_min:-15,x_max:107,y_min:0,y_max:993,ha:993,o:"m -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:999,y_min:0,y_max:1e3,ha:1e3,o:"m 1439 1380 l 1377 1440 l 0 60 l 62 0 z"},accSagittal5v7KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z"},accSagittal5v7KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z"},accSagittal5CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z"},accSagittal5CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z"},accSagittal7CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z"},accSagittal7CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z"},accSagittal25SmallDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z"},accSagittal25SmallDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z"},accSagittal35MediumDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z"},accSagittal35MediumDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal11MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z"},accSagittal11MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z"},accSagittal11LargeDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal11LargeDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal35LargeDiesisDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp25SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z"},accSagittalFlat25SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z"},accSagittalSharp7CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z"},accSagittalFlat7CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp5CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat5CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z"},accSagittalSharp5v7kDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z"},accSagittalFlat5v7kUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z"},accSagittalSharp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z"},accSagittalFlat:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z"},accSagittalSharp5v7kUp:{x_min:0,x_max:312,y_min:-361,y_max:172,ha:533,o:"m 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z"},accSagittalFlat5v7kDown:{x_min:0,x_max:312,y_min:-172,y_max:361,ha:533,o:"m 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z"},accSagittalSharp5CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z"},accSagittalFlat5CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z"},accSagittalSharp7CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z"},accSagittalFlat7CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z"},accSagittalSharp25SUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z"},accSagittalFlat25SDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z"},accSagittalSharp35MUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z"},accSagittalFlat35MDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z"},accSagittalSharp11MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z"},accSagittalFlat11MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z"},accSagittalSharp11LUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11LDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp35LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat35LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp25SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z"},accSagittalDoubleFlat25SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z"},accSagittalDoubleSharp7CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z"},accSagittalDoubleFlat7CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z"},accSagittalDoubleSharp5CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z"},accSagittalDoubleFlat5CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z"},accSagittalDoubleSharp5v7kDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z"},accSagittalDoubleFlat5v7kUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z"},accSagittalDoubleSharp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z"},accSagittalDoubleFlat:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z"},accSagittal7v11KleismaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z"},accSagittal7v11KleismaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal55CommaUp:{x_min:0,x_max:219,y_min:-359,y_max:172,ha:531,o:"m 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z"},accSagittal55CommaDown:{x_min:0,x_max:219,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z"},accSagittal7v11CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z"},accSagittal7v11CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittal5v11SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z"},accSagittal5v11SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z"},accSagittalSharp5v11SDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat5v11SUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp7v11CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z"},accSagittalFlat7v11CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z"},accSagittalSharp55CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z"},accSagittalFlat55CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z"},accSagittalSharp17CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z"},accSagittalFlat17CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z"},accSagittalSharp7v11kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z"},accSagittalFlat7v11kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z"},accSagittalSharp7v11kUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z"},accSagittalFlat7v11kDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z"},accSagittalSharp17CUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17CDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp55CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z"},accSagittalFlat55CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z"},accSagittalSharp7v11CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z"},accSagittalFlat7v11CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z"},accSagittalSharp5v11SUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z"},accSagittalFlat5v11SDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalDoubleSharp5v11SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat5v11SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp7v11CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z"},accSagittalDoubleFlat7v11CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z"},accSagittalDoubleSharp55CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z"},accSagittalDoubleFlat55CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z"},accSagittalDoubleSharp17CDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z"},accSagittalDoubleFlat17CUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z"},accSagittalDoubleSharp7v11kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat7v11kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittal23CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z"},accSagittal23CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z"},accSagittal5v19CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z"},accSagittal5v19CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittal5v23SmallDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z"},accSagittal5v23SmallDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z"},accSagittalSharp5v23SDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z"},accSagittalFlat5v23SUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z"},accSagittalSharp5v19CDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z"},accSagittalFlat5v19CUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z"},accSagittalFlat23CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z"},accSagittalSharp23CUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z"},accSagittalFlat23CDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z"},accSagittalSharp5v19CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalFlat5v19CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z"},accSagittalSharp5v23SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalFlat5v23SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z"},accSagittalDoubleSharp5v23SDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z"},accSagittalDoubleFlat5v23SUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z"},accSagittalDoubleSharp5v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z"},accSagittalDoubleFlat5v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z"},accSagittalDoubleSharp23CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z"},accSagittalDoubleFlat23CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z"},accSagittal19SchismaUp:{x_min:0,x_max:125,y_min:-359,y_max:172,ha:531,o:"m 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z"},accSagittal19SchismaDown:{x_min:0,x_max:125,y_min:-172,y_max:359,ha:531,o:"m 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z"},accSagittal17KleismaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal17KleismaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal143CommaUp:{x_min:0,x_max:156,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z"},accSagittal143CommaDown:{x_min:0,x_max:156,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal11v49CommaUp:{x_min:0,x_max:188,y_min:-359,y_max:172,ha:531,o:"m 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z"},accSagittal11v49CommaDown:{x_min:0,x_max:188,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z"},accSagittal19CommaUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal19CommaDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal7v19CommaUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z"},accSagittal7v19CommaDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z"},accSagittal49SmallDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal49SmallDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal23SmallDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z"},accSagittal23SmallDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z"},accSagittal5v13MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z"},accSagittal5v13MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z"},accSagittal11v19MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z"},accSagittal11v19MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z"},accSagittal49MediumDiesisUp:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z"},accSagittal49MediumDiesisDown:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z"},accSagittal5v49MediumDiesisUp:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z"},accSagittal5v49MediumDiesisDown:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z"},accSagittal49LargeDiesisUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z"},accSagittal49LargeDiesisDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z"},accSagittal11v19LargeDiesisUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z"},accSagittal11v19LargeDiesisDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z"},accSagittal5v13LargeDiesisUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z"},accSagittal5v13LargeDiesisDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z"},accSagittalSharp23SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z"},accSagittalFlat23SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp49SDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z"},accSagittalFlat49SUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalSharp7v19CDown:{x_min:0,x_max:250,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z"},accSagittalFlat7v19CUp:{x_min:0,x_max:250,y_min:-172,y_max:359,ha:531,o:"m 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z"},accSagittalSharp19CDown:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z"},accSagittalFlat19CUp:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z"},accSagittalSharp11v49CDown:{x_min:0,x_max:344,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat11v49CUp:{x_min:0,x_max:344,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z"},accSagittalSharp143CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z"},accSagittalFlat143CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z"},accSagittalSharp17kDown:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z"},accSagittalFlat17kUp:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z"},accSagittalSharp19sDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z"},accSagittalFlat19sUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z"},accSagittalSharp19sUp:{x_min:0,x_max:281,y_min:-359,y_max:172,ha:531,o:"m 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z"},accSagittalFlat19sDown:{x_min:0,x_max:281,y_min:-172,y_max:359,ha:531,o:"m 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z"},accSagittalSharp17kUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat17kDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp143CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalFlat143CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp11v49CUp:{x_min:0,x_max:312,y_min:-359,y_max:172,ha:531,o:"m 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z"},accSagittalFlat11v49CDown:{x_min:0,x_max:312,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z"},accSagittalSharp19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp7v19CUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat7v19CDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalSharp49SUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat49SDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp23SUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalFlat23SDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z"},accSagittalSharp5v13MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z"},accSagittalFlat5v13MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z"},accSagittalSharp11v19MUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalFlat11v19MDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z"},accSagittalSharp49MUp:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z"},accSagittalFlat49MDown:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z"},accSagittalSharp5v49MUp:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z"},accSagittalFlat5v49MDown:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z"},accSagittalSharp49LUp:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z"},accSagittalFlat49LDown:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z"},accSagittalSharp11v19LUp:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z"},accSagittalFlat11v19LDown:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z"},accSagittalSharp5v13LUp:{x_min:0,x_max:500,y_min:-359,y_max:172,ha:531,o:"m 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z"},accSagittalFlat5v13LDown:{x_min:0,x_max:500,y_min:-172,y_max:359,ha:531,o:"m 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z"},accSagittalDoubleSharp23SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z"},accSagittalDoubleFlat23SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z"},accSagittalDoubleSharp49SDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z"},accSagittalDoubleFlat49SUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z"},accSagittalDoubleSharp7v19CDown:{x_min:0,x_max:375,y_min:-359,y_max:172,ha:531,o:"m 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z"},accSagittalDoubleFlat7v19CUp:{x_min:0,x_max:375,y_min:-172,y_max:359,ha:531,o:"m 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z"},accSagittalDoubleSharp19CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z"},accSagittalDoubleFlat19CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z"},accSagittalDoubleSharp11v49CDown:{x_min:0,x_max:406,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat11v49CUp:{x_min:0,x_max:406,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp143CDown:{x_min:0,x_max:469,y_min:-359,y_max:172,ha:531,o:"m 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z"},accSagittalDoubleFlat143CUp:{x_min:0,x_max:469,y_min:-172,y_max:359,ha:531,o:"m 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z"},accSagittalDoubleSharp17kDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z"},accSagittalDoubleFlat17kUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z"},accSagittalDoubleSharp19sDown:{x_min:0,x_max:438,y_min:-359,y_max:172,ha:531,o:"m 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z"},accSagittalDoubleFlat19sUp:{x_min:0,x_max:438,y_min:-172,y_max:359,ha:531,o:"m 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z"},accSagittalShaftUp:{x_min:0,x_max:31,y_min:-359,y_max:172,ha:531,o:"m 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z"},accSagittalShaftDown:{x_min:0,x_max:31,y_min:-172,y_max:359,ha:531,o:"m 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z"},accSagittalAcute:{x_min:0,x_max:125,y_min:-62,y_max:125,ha:187,o:"m 0 0 l 0 -89 l 180 89 l 180 180 z"},accSagittalGrave:{x_min:0,x_max:125,y_min:-125,y_max:62,ha:187,o:"m 180 -180 l 180 -89 l 0 89 l 0 0 z"},accSagittal1MinaUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal1MinaDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal2MinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal2MinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal1TinaUp:{x_min:0,x_max:93,y_min:16,y_max:107,ha:91,o:"m 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z"},accSagittal1TinaDown:{x_min:0,x_max:93,y_min:-107,y_max:-16,ha:91,o:"m 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z"},accSagittal2TinasUp:{x_min:0,x_max:94,y_min:16,y_max:107,ha:91,o:"m 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal2TinasDown:{x_min:0,x_max:94,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z"},accSagittal3TinasUp:{x_min:-7,x_max:124,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal3TinasDown:{x_min:-7,x_max:124,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal4TinasUp:{x_min:0,x_max:187,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal4TinasDown:{x_min:0,x_max:187,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal5TinasUp:{x_min:0,x_max:218,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal5TinasDown:{x_min:0,x_max:218,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal6TinasUp:{x_min:-7,x_max:218,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal6TinasDown:{x_min:-7,x_max:218,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittal7TinasUp:{x_min:0,x_max:281,y_min:16,y_max:107,ha:91,o:"m 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z"},accSagittal7TinasDown:{x_min:0,x_max:281,y_min:-107,y_max:-16,ha:91,o:"m 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z"},accSagittal8TinasUp:{x_min:0,x_max:312,y_min:16,y_max:107,ha:91,o:"m 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z"},accSagittal8TinasDown:{x_min:0,x_max:312,y_min:-107,y_max:-16,ha:91,o:"m 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z"},accSagittal9TinasUp:{x_min:-7,x_max:312,y_min:16,y_max:106,ha:90,o:"m -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z"},accSagittal9TinasDown:{x_min:-7,x_max:312,y_min:-106,y_max:-16,ha:90,o:"m -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z"},accSagittalFractionalTinaUp:{x_min:-3,x_max:35,y_min:73,y_max:111,ha:38,o:"m -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z"},accSagittalFractionalTinaDown:{x_min:-3,x_max:35,y_min:-111,y_max:-73,ha:38,o:"m -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:164,y_min:-194,y_max:421,ha:615,o:"m 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:414,y_min:-194,y_max:421,ha:615,o:"m 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z"},accidentalWilsonPlus:{x_min:0,x_max:281,y_min:-203,y_max:203,ha:406,o:"m 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z"},accidentalWilsonMinus:{x_min:0,x_max:281,y_min:-186,y_max:186,ha:372,o:"m 0 112 l 405 -268 l 405 -112 l 0 268 z"}},fontFamily:"Bravura",resolution:1e3,generatedOn:"2022-12-18T09:06:51.407Z"},Fi={name:"Bravura",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}};const Ai={resolution:1e3,fontFamily:"VexFlowCustom",glyphs:{noteheadSquareWhite:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 "},noteheadSquareBlack:{x_min:0,x_max:430.75,ha:386,o:"m 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 "},accidentalBuyukMucennebFlat:{x_min:-171.5,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalBakiyeFlat:{x_min:-176.9375,x_max:251.8125,ha:257,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 "},accidentalKucukMucennebSharp:{x_min:-1.359375,x_max:255.890625,ha:261,o:"m 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 "},accidentalKoron:{x_min:-20,x_max:320,ha:257,o:"m -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 "},accidentalSori:{x_min:-10.890625,x_max:299.4375,ha:294,o:"m 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 "},vexAccidentalMicrotonal1:{x_min:-171.5,x_max:483.1875,ha:493,o:"m -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 "},vexAccidentalMicrotonal2:{x_min:-1.359375,x_max:386.5625,ha:394,o:"m 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 "},vexAccidentalMicrotonal3:{x_min:0,x_max:430.75,ha:360,o:"m -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z "},vexAccidentalMicrotonal4:{x_min:0,x_max:430.75,ha:360,o:"m 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z "},vexNoteHeadRectBlack:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 "},vexNoteHeadRectWhite:{x_min:0,x_max:430.75,ha:360,o:"m 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100"},vexWiggleArpeggioUp:{x_min:58.53125,x_max:228.671875,ha:294,o:"m 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 "}}},Ni={name:"VexFlowCustom",smufl:!1,glyphs:{}};const Oi={glyphs:{bracketTop:{x_min:0,x_max:387,y_min:-87,y_max:139,ha:226,o:"m 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z"},bracketBottom:{x_min:0,x_max:387,y_min:-139,y_max:87,ha:226,o:"m 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z"},barlineTick:{x_min:-55,x_max:55,y_min:-131,y_max:131,ha:262,o:"m 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z"},breathMarkTick:{x_min:-142,x_max:256,y_min:0,y_max:403,ha:403,o:"m 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z"},segno:{x_min:-228,x_max:228,y_min:-329,y_max:329,ha:657,o:"m -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z"},coda:{x_min:-215,x_max:215,y_min:-264,y_max:264,ha:529,o:"m -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z"},gClef:{x_min:0,x_max:586,y_min:-594,y_max:1017,ha:1611,o:"m 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z"},cClef:{x_min:0,x_max:604,y_min:-477,y_max:477,ha:955,o:"m 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z"},fClef:{x_min:0,x_max:622,y_min:-512,y_max:238,ha:750,o:"m 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z"},unpitchedPercussionClef1:{x_min:160,x_max:481,y_min:-235,y_max:235,ha:470,o:"m 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z"},"6stringTabClef":{x_min:0,x_max:471,y_min:-691,y_max:707,ha:1398,o:"m 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z"},timeSig0:{x_min:0,x_max:357,y_min:0,y_max:457,ha:457,o:"m 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z"},timeSig1:{x_min:0,x_max:239,y_min:0,y_max:457,ha:457,o:"m 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z"},timeSig2:{x_min:0,x_max:317,y_min:0,y_max:457,ha:457,o:"m 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z"},timeSig3:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z"},timeSig4:{x_min:0,x_max:325,y_min:0,y_max:457,ha:457,o:"m 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z"},timeSig5:{x_min:0,x_max:284,y_min:0,y_max:457,ha:457,o:"m 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z"},timeSig6:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSig7:{x_min:0,x_max:306,y_min:0,y_max:457,ha:457,o:"m 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z"},timeSig8:{x_min:0,x_max:338,y_min:0,y_max:457,ha:457,o:"m 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z"},timeSig9:{x_min:0,x_max:328,y_min:0,y_max:457,ha:457,o:"m 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z"},timeSigCommon:{x_min:0,x_max:385,y_min:-219,y_max:219,ha:438,o:"m 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z"},timeSigCutCommon:{x_min:0,x_max:385,y_min:-371,y_max:371,ha:741,o:"m 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z"},timeSigPlus:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigPlusSmall:{x_min:0,x_max:221,y_min:125,y_max:346,ha:221,o:"m 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z"},timeSigMinus:{x_min:0,x_max:221,y_min:214,y_max:256,ha:43,o:"m 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z"},timeSigParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensRightSmall:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},timeSigParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},timeSigParensLeftSmall:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},noteheadDoubleWhole:{x_min:0,x_max:623,y_min:-164,y_max:164,ha:328,o:"m 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z"},noteheadWhole:{x_min:0,x_max:427,y_min:-127,y_max:127,ha:253,o:"m 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z"},noteheadHalf:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z"},noteheadBlack:{x_min:0,x_max:297,y_min:-126,y_max:126,ha:253,o:"m 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z"},noteheadXWhole:{x_min:0,x_max:414,y_min:-125,y_max:125,ha:249,o:"m 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z"},noteheadXHalf:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:250,o:"m 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z"},noteheadXBlack:{x_min:0,x_max:282,y_min:-125,y_max:125,ha:249,o:"m 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z"},noteheadCircleX:{x_min:0,x_max:336,y_min:-168,y_max:168,ha:335,o:"m 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z"},noteheadTriangleUpWhole:{x_min:0,x_max:435,y_min:-140,y_max:140,ha:280,o:"m 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z"},noteheadTriangleUpHalf:{x_min:0,x_max:303,y_min:-140,y_max:140,ha:280,o:"m 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z"},noteheadTriangleUpBlack:{x_min:0,x_max:302,y_min:-140,y_max:140,ha:279,o:"m 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z"},noteheadDiamondWhole:{x_min:0,x_max:435,y_min:-130,y_max:130,ha:260,o:"m 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z"},noteheadDiamondHalf:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z"},noteheadDiamondBlack:{x_min:0,x_max:303,y_min:-130,y_max:130,ha:260,o:"m 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z"},augmentationDot:{x_min:-59,x_max:59,y_min:-59,y_max:59,ha:118,o:"m -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z"},tremolo1:{x_min:-143,x_max:297,y_min:-550,y_max:-237,ha:313,o:"m 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z"},flag8thUp:{x_min:-16,x_max:220,y_min:-700,y_max:-4,ha:696,o:"m -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z"},flag8thDown:{x_min:-14,x_max:255,y_min:4,y_max:700,ha:697,o:"m 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z"},flag16thUp:{x_min:-16,x_max:220,y_min:-796,y_max:-4,ha:793,o:"m -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z"},flag16thDown:{x_min:-14,x_max:251,y_min:4,y_max:700,ha:697,o:"m 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z"},flag32ndUp:{x_min:-16,x_max:219,y_min:-1039,y_max:-4,ha:1035,o:"m -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z"},flag32ndDown:{x_min:-14,x_max:253,y_min:4,y_max:935,ha:931,o:"m 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z"},flag64thUp:{x_min:-16,x_max:219,y_min:-1159,y_max:-4,ha:1156,o:"m -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z"},flag64thDown:{x_min:-14,x_max:255,y_min:3,y_max:1053,ha:1049,o:"m 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z"},flag128thUp:{x_min:-16,x_max:217,y_min:-1398,y_max:-4,ha:1395,o:"m -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z"},flag128thDown:{x_min:-14,x_max:254,y_min:4,y_max:1288,ha:1284,o:"m 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z"},accidentalFlat:{x_min:-14,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalNatural:{x_min:0,x_max:166,y_min:-314,y_max:314,ha:627,o:"m 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z"},accidentalSharp:{x_min:0,x_max:225,y_min:-364,y_max:364,ha:729,o:"m 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z"},accidentalDoubleSharp:{x_min:0,x_max:255,y_min:-127,y_max:127,ha:255,o:"m 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z"},accidentalDoubleFlat:{x_min:-14,x_max:334,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z"},accidentalParensLeft:{x_min:-115,x_max:-18,y_min:-251,y_max:251,ha:502,o:"m -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z"},accidentalParensRight:{x_min:18,x_max:115,y_min:-251,y_max:251,ha:503,o:"m 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:188,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:419,y_min:-155,y_max:429,ha:584,o:"m 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:315,y_min:-368,y_max:368,ha:735,o:"m 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z"},accidentalBuyukMucennebFlat:{x_min:-117,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalBakiyeFlat:{x_min:-121,x_max:174,y_min:-155,y_max:429,ha:584,o:"m -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z"},accidentalKomaSharp:{x_min:0,x_max:134,y_min:-351,y_max:351,ha:702,o:"m 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:176,y_min:-351,y_max:351,ha:702,o:"m 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z"},articAccentAbove:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articAccentBelow:{x_min:-241,x_max:18,y_min:-107,y_max:107,ha:214,o:"m -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z"},articTenutoAbove:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articTenutoBelow:{x_min:-144,x_max:144,y_min:-14,y_max:14,ha:29,o:"m -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z"},articStaccatoAbove:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatoBelow:{x_min:-46,x_max:46,y_min:-46,y_max:46,ha:93,o:"m -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z"},articStaccatissimoAbove:{x_min:-50,x_max:50,y_min:0,y_max:173,ha:173,o:"m -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z"},articStaccatissimoBelow:{x_min:-50,x_max:50,y_min:-173,y_max:0,ha:173,o:"m -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z"},articMarcatoAbove:{x_min:-107,x_max:107,y_min:-240,y_max:18,ha:259,o:"m -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z"},articMarcatoBelow:{x_min:-107,x_max:107,y_min:-18,y_max:241,ha:259,o:"m -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z"},fermataAbove:{x_min:-305,x_max:305,y_min:0,y_max:332,ha:332,o:"m -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataBelow:{x_min:-305,x_max:305,y_min:-332,y_max:0,ha:332,o:"m -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:342,ha:342,o:"m -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataLongBelow:{x_min:-269,x_max:269,y_min:-342,y_max:0,ha:342,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryLongAbove:{x_min:-269,x_max:269,y_min:0,y_max:412,ha:412,o:"m -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataVeryLongBelow:{x_min:-269,x_max:269,y_min:-412,y_max:0,ha:412,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},fermataVeryShortAbove:{x_min:-330,x_max:330,y_min:0,y_max:536,ha:536,o:"m -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z"},fermataVeryShortBelow:{x_min:-330,x_max:330,y_min:-536,y_max:0,ha:536,o:"m 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z"},fermataShortAbove:{x_min:-269,x_max:269,y_min:0,y_max:441,ha:441,o:"m -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z"},fermataShortBelow:{x_min:-269,x_max:269,y_min:-441,y_max:0,ha:441,o:"m -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z"},breathMarkComma:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},breathMarkUpbow:{x_min:-118,x_max:118,y_min:0,y_max:385,ha:385,o:"m -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z"},caesura:{x_min:0,x_max:430,y_min:-190,y_max:284,ha:474,o:"m 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z"},caesuraCurved:{x_min:0,x_max:348,y_min:-195,y_max:292,ha:486,o:"m 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z"},restMaxima:{x_min:0,x_max:801,y_min:-235,y_max:235,ha:470,o:"m 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z"},restDoubleWhole:{x_min:0,x_max:267,y_min:0,y_max:235,ha:235,o:"m 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z"},restWhole:{x_min:0,x_max:310,y_min:-118,y_max:0,ha:118,o:"m 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z"},restWholeLegerLine:{x_min:0,x_max:509,y_min:-118,y_max:11,ha:128,o:"m 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z"},restHalf:{x_min:0,x_max:310,y_min:0,y_max:118,ha:118,o:"m 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z"},restHalfLegerLine:{x_min:0,x_max:509,y_min:-11,y_max:118,ha:128,o:"m 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z"},restQuarter:{x_min:0,x_max:208,y_min:-343,y_max:343,ha:686,o:"m 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z"},rest8th:{x_min:0,x_max:242,y_min:-185,y_max:206,ha:391,o:"m 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z"},rest16th:{x_min:0,x_max:312,y_min:-417,y_max:206,ha:623,o:"m 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z"},rest32nd:{x_min:0,x_max:381,y_min:-417,y_max:438,ha:854,o:"m 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z"},rest64th:{x_min:0,x_max:451,y_min:-648,y_max:438,ha:1086,o:"m 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z"},rest128th:{x_min:0,x_max:520,y_min:-648,y_max:669,ha:1317,o:"m 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z"},dynamicPiano:{x_min:-36,x_max:355,y_min:-168,y_max:261,ha:428,o:"m 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z"},dynamicMezzo:{x_min:32,x_max:463,y_min:-18,y_max:256,ha:274,o:"m 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z"},dynamicForte:{x_min:-81,x_max:413,y_min:-171,y_max:390,ha:561,o:"m 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z"},dynamicRinforzando:{x_min:55,x_max:336,y_min:0,y_max:258,ha:258,o:"m 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z"},dynamicSforzando:{x_min:49,x_max:262,y_min:-21,y_max:254,ha:274,o:"m 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z"},dynamicZ:{x_min:22,x_max:291,y_min:2,y_max:235,ha:233,o:"m 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z"},ornamentTrill:{x_min:-234,x_max:234,y_min:0,y_max:354,ha:354,o:"m -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z"},ornamentTurn:{x_min:-292,x_max:292,y_min:-134,y_max:134,ha:269,o:"m -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z"},ornamentTurnSlash:{x_min:-292,x_max:292,y_min:-189,y_max:189,ha:378,o:"m -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z"},ornamentMordent:{x_min:-278,x_max:278,y_min:-202,y_max:186,ha:388,o:"m -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z"},ornamentShortTrill:{x_min:-278,x_max:278,y_min:-119,y_max:119,ha:238,o:"m -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z"},ornamentTremblement:{x_min:-394,x_max:394,y_min:-119,y_max:119,ha:238,o:"m -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z"},ornamentPrecompAppoggTrill:{x_min:-394,x_max:394,y_min:-119,y_max:240,ha:359,o:"m -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:-407,x_max:407,y_min:-229,y_max:119,ha:348,o:"m -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z"},ornamentPrecompSlideTrillBach:{x_min:-407,x_max:407,y_min:-229,y_max:186,ha:415,o:"m 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:-407,x_max:407,y_min:-119,y_max:229,ha:348,o:"m 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:-413,x_max:413,y_min:-119,y_max:222,ha:341,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:-413,x_max:413,y_min:-202,y_max:222,ha:424,o:"m -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z"},ornamentPrecompTrillLowerSuffix:{x_min:-413,x_max:413,y_min:-222,y_max:119,ha:341,o:"m -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z"},stringsDownBow:{x_min:-158,x_max:158,y_min:0,y_max:331,ha:331,o:"m -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z"},stringsUpBow:{x_min:-103,x_max:103,y_min:0,y_max:260,ha:260,o:"m -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z"},stringsHarmonic:{x_min:-77,x_max:77,y_min:-77,y_max:77,ha:154,o:"m -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z"},pluckedSnapPizzicatoAbove:{x_min:-103,x_max:103,y_min:-103,y_max:192,ha:296,o:"m -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z"},pluckedSnapPizzicatoBelow:{x_min:-103,x_max:103,y_min:-192,y_max:103,ha:296,o:"m 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z"},pluckedLeftHandPizzicato:{x_min:-146,x_max:146,y_min:-148,y_max:148,ha:296,o:"m -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z"},keyboardPedalPed:{x_min:0,x_max:735,y_min:-1,y_max:470,ha:471,o:"m 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z"},keyboardPedalUp:{x_min:0,x_max:409,y_min:61,y_max:470,ha:409,o:"m 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z"},pictChokeCymbal:{x_min:0,x_max:158,y_min:-146,y_max:146,ha:292,o:"m 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z"},arrowheadBlackUp:{x_min:11,x_max:239,y_min:-6,y_max:269,ha:275,o:"m 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z"},arrowheadBlackDown:{x_min:11,x_max:239,y_min:6,y_max:281,ha:275,o:"m 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z"}},fontFamily:"GonvilleSmufl",resolution:1e3,generatedOn:"2022-12-24T06:31:40.861Z"},Ri={name:"Gonville",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:0,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:250},csymParensRightTall:{leftSideBearing:-40,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:50,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:40,advanceWidth:250,yOffset:-402},accidentalFlat:{leftSideBearing:-50,advanceWidth:208,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:20,treble:{line:-1.2,shiftX:11}},"8vb":{point:20,treble:{line:6.3,shiftX:10},bass:{line:4,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:18,treble:{line:-.4,shiftX:8}},"8vb":{point:18,treble:{line:5.8,shiftX:6},bass:{line:3.5,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:17,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:24,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-9,stemUpYOffset:24,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:3,yOffset:-4,stemUpYOffset:10,reportedWidth:28},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:9,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:40}},digits:{point:40,tupletPoint:28},tremolo:{default:{point:25,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:9,offsetXStemDown:-.5},grace:{point:15,spacing:4,offsetYStemUp:-7,offsetYStemDown:7,offsetXStemUp:6.5,offsetXStemDown:-.5}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:0}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadBlack:{offsetYBaseStemUp:-1.5,offsetYBaseStemDown:1.5},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{flag:{shiftX:-.08,flag8thDown:{shiftX:-.16},flag16thDown:{shiftX:-.16},flag32ndDown:{shiftX:-.16,shiftY:9},flag64thDown:{shiftX:-.16,shiftY:13},flag128thDown:{shiftX:-.16,shiftY:22},flag32ndUp:{shiftY:-9},flag64thUp:{shiftY:-13},flag128thUp:{shiftY:-22}},clef_default:{point:40,"6stringTabClef":{point:40,shiftY:-5.5}},clef_small:{point:32},clefNote_default:{point:40},clefNote_small:{point:32},textNote:{point:40,default:{},ornamentTrill:{shiftX:-5,shiftY:4}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.95}},ornament:{brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},tremolo:{default:{shiftY:-10},grace:{shiftY:-5}}}};const Wi={glyphs:{bracketTop:{x_min:0,x_max:491,y_min:0,y_max:279,ha:279,o:"m 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z"},bracketBottom:{x_min:0,x_max:491,y_min:-279,y_max:0,ha:279,o:"m 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z"},segno:{x_min:0,x_max:654,y_min:0,y_max:869,ha:869,o:"m 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z"},coda:{x_min:0,x_max:745,y_min:-113,y_max:735,ha:848,o:"m 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z"},gClef:{x_min:0,x_max:640,y_min:-666,y_max:1112,ha:1778,o:"m 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z"},cClef:{x_min:0,x_max:627,y_min:-480,y_max:482,ha:962,o:"m 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z"},fClef:{x_min:0,x_max:664,y_min:-617,y_max:251,ha:868,o:"m 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z"},unpitchedPercussionClef1:{x_min:0,x_max:352,y_min:-252,y_max:252,ha:504,o:"m 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z"},"6stringTabClef":{x_min:0,x_max:439,y_min:-743,y_max:746,ha:1489,o:"m 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z"},timeSig0:{x_min:15,x_max:389,y_min:-254,y_max:255,ha:509,o:"m 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z"},timeSig1:{x_min:15,x_max:336,y_min:-243,y_max:245,ha:488,o:"m 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z"},timeSig2:{x_min:15,x_max:377,y_min:-243,y_max:245,ha:488,o:"m 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z"},timeSig3:{x_min:15,x_max:364,y_min:-244,y_max:244,ha:488,o:"m 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z"},timeSig4:{x_min:14,x_max:442,y_min:-248,y_max:249,ha:497,o:"m 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z"},timeSig5:{x_min:15,x_max:362,y_min:-244,y_max:246,ha:490,o:"m 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z"},timeSig6:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z"},timeSig7:{x_min:15,x_max:366,y_min:-250,y_max:251,ha:501,o:"m 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z"},timeSig8:{x_min:15,x_max:393,y_min:-248,y_max:246,ha:494,o:"m 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z"},timeSig9:{x_min:15,x_max:387,y_min:-244,y_max:245,ha:489,o:"m 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z"},timeSigCommon:{x_min:0,x_max:463,y_min:-256,y_max:258,ha:514,o:"m 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z"},timeSigCutCommon:{x_min:0,x_max:463,y_min:-376,y_max:388,ha:764,o:"m 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z"},timeSigPlus:{x_min:0,x_max:408,y_min:-204,y_max:204,ha:408,o:"m 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z"},noteheadDoubleWhole:{x_min:0,x_max:538,y_min:-178,y_max:179,ha:357,o:"m 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z"},noteheadWhole:{x_min:0,x_max:373,y_min:-134,y_max:136,ha:270,o:"m 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z"},noteheadHalf:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z"},noteheadBlack:{x_min:0,x_max:325,y_min:-133,y_max:132,ha:265,o:"m 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z"},noteheadXBlack:{x_min:0,x_max:325,y_min:-132,y_max:132,ha:264,o:"m 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z"},noteheadCircleX:{x_min:0,x_max:325,y_min:-162,y_max:163,ha:325,o:"m 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:432,y_min:-179,y_max:177,ha:356,o:"m 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z"},noteheadSquareWhite:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadSquareBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 446 180 l 0 180 l 0 -180 l 446 -180 z"},noteheadTriangleUpBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 223 176 l 0 -196 l 446 -196 z"},noteheadSlashedDoubleWhole1:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z"},noteheadSlashedWhole1:{x_min:-75,x_max:448,y_min:-211,y_max:214,ha:425,o:"m 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z"},noteheadSlashedHalf1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z"},noteheadSlashedBlack1:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z"},noteheadSlashedDoubleWhole2:{x_min:-66,x_max:456,y_min:-213,y_max:212,ha:425,o:"m 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z"},noteheadSlashedWhole2:{x_min:-75,x_max:448,y_min:-212,y_max:214,ha:426,o:"m 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z"},noteheadSlashedHalf2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z"},noteheadSlashedBlack2:{x_min:-98,x_max:424,y_min:-213,y_max:212,ha:425,o:"m 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:373,y_min:-178,y_max:179,ha:357,o:"m 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z"},noteheadDiamondWhole:{x_min:0,x_max:373,y_min:-133,y_max:132,ha:265,o:"m 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z"},noteheadDiamondHalf:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z"},noteheadDiamondBlack:{x_min:0,x_max:335,y_min:-132,y_max:133,ha:265,o:"m 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z"},noteheadParenthesisRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},noteheadParenthesisLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},noteheadMoonBlack:{x_min:0,x_max:310,y_min:-125,y_max:125,ha:250,o:"m 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 0 176 l 0 -196 l 488 -196 z"},noteheadTriangleRightBlack:{x_min:0,x_max:339,y_min:-136,y_max:122,ha:258,o:"m 488 176 l 0 -196 l 488 -196 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:310,y_min:-136,y_max:122,ha:258,o:"m 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z"},augmentationDot:{x_min:0,x_max:100,y_min:-50,y_max:50,ha:100,o:"m 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z"},tremolo1:{x_min:0,x_max:290,y_min:-93,y_max:96,ha:189,o:"m 0 48 l 0 -134 l 418 -43 l 418 138 z"},flag8thUp:{x_min:0,x_max:289,y_min:-817,y_max:12,ha:829,o:"m 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z"},flag8thDown:{x_min:0,x_max:309,y_min:-12,y_max:817,ha:829,o:"m 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z"},flag16thUp:{x_min:0,x_max:279,y_min:-820,y_max:12,ha:832,o:"m 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z"},flag16thDown:{x_min:0,x_max:309,y_min:-26,y_max:803,ha:829,o:"m 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag32ndUp:{x_min:0,x_max:279,y_min:-821,y_max:186,ha:1007,o:"m 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z"},flag32ndDown:{x_min:0,x_max:309,y_min:-216,y_max:803,ha:1019,o:"m 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z"},flag64thUp:{x_min:0,x_max:279,y_min:-822,y_max:373,ha:1195,o:"m 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z"},flag64thDown:{x_min:0,x_max:309,y_min:-403,y_max:804,ha:1207,o:"m 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z"},flag128thUp:{x_min:0,x_max:279,y_min:-821,y_max:573,ha:1394,o:"m 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z"},flag128thDown:{x_min:0,x_max:309,y_min:-591,y_max:803,ha:1394,o:"m 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z"},accidentalFlat:{x_min:0,x_max:203,y_min:-176,y_max:453,ha:629,o:"m 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z"},accidentalNatural:{x_min:0,x_max:171,y_min:-323,y_max:325,ha:648,o:"m 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z"},accidentalSharp:{x_min:0,x_max:244,y_min:-333,y_max:334,ha:667,o:"m 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z"},accidentalDoubleSharp:{x_min:0,x_max:275,y_min:-137,y_max:138,ha:275,o:"m 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z"},accidentalDoubleFlat:{x_min:0,x_max:371,y_min:-176,y_max:453,ha:629,o:"m 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z"},accidentalParensLeft:{x_min:0,x_max:75,y_min:-212,y_max:209,ha:421,o:"m 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z"},accidentalParensRight:{x_min:0,x_max:75,y_min:-209,y_max:212,ha:421,o:"m 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:193,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-176,y_max:452,ha:628,o:"m 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:180,y_min:-316,y_max:320,ha:636,o:"m 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z"},accidentalThreeQuarterTonesSharpStein:{x_min:0,x_max:290,y_min:-328,y_max:339,ha:667,o:"m 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z"},accidentalBuyukMucennebFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalBakiyeFlat:{x_min:0,x_max:277,y_min:-176,y_max:454,ha:630,o:"m 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:348,y_min:-316,y_max:318,ha:634,o:"m 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z"},articAccentAbove:{x_min:0,x_max:361,y_min:0,y_max:235,ha:235,o:"m 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z"},articAccentBelow:{x_min:0,x_max:361,y_min:-235,y_max:0,ha:235,o:"m 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z"},articTenutoAbove:{x_min:0,x_max:316,y_min:0,y_max:46,ha:46,o:"m 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z"},articTenutoBelow:{x_min:0,x_max:316,y_min:-46,y_max:0,ha:46,o:"m 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z"},articStaccatoAbove:{x_min:0,x_max:78,y_min:0,y_max:78,ha:78,o:"m 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z"},articStaccatoBelow:{x_min:0,x_max:78,y_min:-78,y_max:0,ha:78,o:"m 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z"},articStaccatissimoAbove:{x_min:0,x_max:127,y_min:0,y_max:248,ha:248,o:"m 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z"},articStaccatissimoBelow:{x_min:0,x_max:127,y_min:-248,y_max:0,ha:248,o:"m 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z"},articMarcatoAbove:{x_min:1,x_max:296,y_min:0,y_max:253,ha:253,o:"m 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z"},articMarcatoBelow:{x_min:0,x_max:295,y_min:-253,y_max:0,ha:253,o:"m 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z"},fermataAbove:{x_min:0,x_max:622,y_min:0,y_max:368,ha:368,o:"m 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z"},fermataBelow:{x_min:0,x_max:622,y_min:-368,y_max:0,ha:368,o:"m 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z"},fermataLongAbove:{x_min:0,x_max:623,y_min:0,y_max:368,ha:368,o:"m 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z"},fermataLongBelow:{x_min:0,x_max:623,y_min:-368,y_max:0,ha:368,o:"m 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z"},fermataVeryLongAbove:{x_min:0,x_max:842,y_min:0,y_max:549,ha:549,o:"m 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z"},fermataVeryLongBelow:{x_min:0,x_max:842,y_min:-549,y_max:0,ha:549,o:"m 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z"},fermataShortAbove:{x_min:0,x_max:642,y_min:0,y_max:454,ha:454,o:"m 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z"},fermataShortBelow:{x_min:0,x_max:642,y_min:-454,y_max:0,ha:454,o:"m 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z"},breathMarkComma:{x_min:0,x_max:191,y_min:0,y_max:321,ha:321,o:"m 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z"},caesura:{x_min:0,x_max:380,y_min:0,y_max:490,ha:490,o:"m 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z"},caesuraCurved:{x_min:0,x_max:368,y_min:0,y_max:491,ha:491,o:"m 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z"},restMaxima:{x_min:0,x_max:450,y_min:-250,y_max:250,ha:500,o:"m 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z"},restDoubleWhole:{x_min:0,x_max:125,y_min:-11,y_max:262,ha:273,o:"m 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z"},restWhole:{x_min:0,x_max:325,y_min:-131,y_max:5,ha:136,o:"m 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z"},restWholeLegerLine:{x_min:-139,x_max:464,y_min:-122,y_max:14,ha:136,o:"m 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z"},restHalf:{x_min:0,x_max:325,y_min:-4,y_max:132,ha:136,o:"m 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z"},restHalfLegerLine:{x_min:-139,x_max:464,y_min:-14,y_max:122,ha:136,o:"m 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z"},restQuarter:{x_min:0,x_max:235,y_min:-331,y_max:401,ha:732,o:"m 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z"},rest8th:{x_min:0,x_max:276,y_min:-255,y_max:204,ha:459,o:"m 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z"},rest16th:{x_min:1,x_max:344,y_min:-507,y_max:204,ha:711,o:"m 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z"},rest32nd:{x_min:0,x_max:391,y_min:-507,y_max:460,ha:967,o:"m 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z"},rest64th:{x_min:0,x_max:423,y_min:-758,y_max:464,ha:1222,o:"m 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z"},rest128th:{x_min:-1,x_max:475,y_min:-759,y_max:717,ha:1476,o:"m 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z"},dynamicPiano:{x_min:-95,x_max:317,y_min:-163,y_max:263,ha:426,o:"m 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z"},dynamicMezzo:{x_min:-7,x_max:374,y_min:-2,y_max:251,ha:253,o:"m 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z"},dynamicForte:{x_min:-137,x_max:334,y_min:-193,y_max:421,ha:614,o:"m -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z"},dynamicRinforzando:{x_min:-12,x_max:230,y_min:0,y_max:254,ha:254,o:"m 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z"},dynamicSforzando:{x_min:0,x_max:208,y_min:-5,y_max:263,ha:268,o:"m 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z"},dynamicZ:{x_min:-42,x_max:239,y_min:-1,y_max:258,ha:259,o:"m 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z"},ornamentTrill:{x_min:-12,x_max:383,y_min:0,y_max:383,ha:383,o:"m 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z"},ornamentTurn:{x_min:0,x_max:456,y_min:0,y_max:232,ha:232,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentTurnSlash:{x_min:0,x_max:456,y_min:-80,y_max:313,ha:393,o:"m 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z"},ornamentMordent:{x_min:0,x_max:473,y_min:-77,y_max:316,ha:393,o:"m 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentShortTrill:{x_min:0,x_max:473,y_min:0,y_max:248,ha:248,o:"m 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z"},ornamentTremblement:{x_min:0,x_max:654,y_min:0,y_max:248,ha:248,o:"m 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:680,y_min:0,y_max:388,ha:388,o:"m 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:662,y_min:-158,y_max:248,ha:406,o:"m 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:662,y_min:-158,y_max:321,ha:479,o:"m 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:662,y_min:0,y_max:406,ha:406,o:"m 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:857,y_min:0,y_max:248,ha:248,o:"m 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:565,y_min:-171,y_max:249,ha:420,o:"m 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z"},brassMuteClosed:{x_min:0,x_max:312,y_min:0,y_max:312,ha:312,o:"m 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z"},brassMuteOpen:{x_min:0,x_max:280,y_min:0,y_max:280,ha:280,o:"m 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z"},stringsDownBow:{x_min:0,x_max:315,y_min:0,y_max:293,ha:293,o:"m 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z"},stringsUpBow:{x_min:0,x_max:262,y_min:0,y_max:343,ha:343,o:"m 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z"},stringsHarmonic:{x_min:0,x_max:181,y_min:0,y_max:181,ha:181,o:"m 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:269,y_min:0,y_max:389,ha:389,o:"m 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z"},keyboardPedalPed:{x_min:0,x_max:981,y_min:-10,y_max:545,ha:555,o:"m 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z"},keyboardPedalUp:{x_min:0,x_max:473,y_min:0,y_max:473,ha:473,o:"m 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:242,y_min:0,y_max:164,ha:164,o:"m 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z"},repeat1Bar:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z"},repeat2Bars:{x_min:0,x_max:735,y_min:-250,y_max:250,ha:500,o:"m 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z"},repeat4Bars:{x_min:0,x_max:1243,y_min:-250,y_max:250,ha:500,o:"m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z"},repeatBarSlash:{x_min:0,x_max:481,y_min:-250,y_max:250,ha:500,o:"m 693 360 l 511 360 l 0 -360 l 181 -360 z"},csymDiminished:{x_min:0,x_max:501,y_min:0,y_max:501,ha:501,o:"m 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z"},csymHalfDiminished:{x_min:-1,x_max:502,y_min:-1,y_max:502,ha:503,o:"m 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z"},csymAugmented:{x_min:1,x_max:321,y_min:90,y_max:410,ha:320,o:"m 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z"},csymMajorSeventh:{x_min:0,x_max:500,y_min:10,y_max:490,ha:480,o:"m 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:160,y_min:-176,y_max:452,ha:628,o:"m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:416,y_min:-176,y_max:452,ha:628,o:"m 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z"}},fontFamily:"Leland",resolution:1e3,generatedOn:"2022-12-19T23:52:37.756Z"},Li={name:"Leland",smufl:!0,stave:{padding:12,endPaddingMax:10,endPaddingMin:5,unalignedNotePadding:10},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-250,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["A","L"],spacing:100,superSubRatio:.66},glyphs:{csymDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:0,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:-20,advanceWidth:184,yOffset:250},csymParensRightTall:{leftSideBearing:0,advanceWidth:189,yOffset:250},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:50,advanceWidth:121,yOffset:350},csymParensRightVeryTall:{leftSideBearing:0,advanceWidth:111,yOffset:350},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:200,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:20,advanceWidth:250,yOffset:-302},accidentalFlat:{leftSideBearing:-20,advanceWidth:226,yOffset:-184}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:20},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:22},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:5},brassFallRoughMedium:{xOffset:16,yOffset:28,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:2,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:25,reportedWidth:5},brassMuteOpen:{xOffset:3,yOffset:-7,stemUpYOffset:25,reportedWidth:5},brassFlip:{xOffset:10,yOffset:0,stemUpYOffset:7,reportedWidth:10},brassJazzTurn:{xOffset:0,yOffset:0,stemUpYOffset:8,reportedWidth:31},brassSmear:{xOffset:10,yOffset:0,stemUpYOffset:8,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:34,tupletPoint:22,shiftY:-6},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:11,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:7,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemUp:-2.55,offsetYBaseStemDown:2.65},noteheadBlack:{offsetYBaseStemUp:-2,offsetYBaseStemDown:2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:15},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.75,staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-8,shiftY:8},ornamentTurn:{point:42},ornamentTurnSlash:{point:42},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{restQuarterStemUp:{point:35},restQuarterStemDown:{point:35}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.9},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.8},csymMajorSeventh:{scale:.9},accidentalSharp:{scale:.75},accidentalFlat:{scale:.9}}}};const Ui={glyphs:{bracketTop:{x_min:0,x_max:508,y_min:0,y_max:370,ha:370,o:"m 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z"},bracketBottom:{x_min:0,x_max:496,y_min:-393,y_max:0,ha:393,o:"m 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z"},barlineTick:{x_min:0,x_max:56,y_min:877,y_max:1122,ha:245,o:"m 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z"},breathMarkTick:{x_min:0,x_max:568,y_min:0,y_max:621,ha:621,o:"m 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z"},segno:{x_min:0,x_max:798,y_min:-65,y_max:806,ha:871,o:"m 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z"},coda:{x_min:0,x_max:1380,y_min:-196,y_max:1037,ha:1233,o:"m 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z"},gClef:{x_min:0,x_max:664,y_min:-559,y_max:1009,ha:1568,o:"m 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z"},cClef:{x_min:0,x_max:731,y_min:-543,y_max:543,ha:1086,o:"m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z"},fClef:{x_min:0,x_max:776,y_min:-496,y_max:216,ha:712,o:"m 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z"},unpitchedPercussionClef1:{x_min:0,x_max:379,y_min:-250,y_max:250,ha:500,o:"m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z"},"6stringTabClef":{x_min:0,x_max:438,y_min:-768,y_max:767,ha:1535,o:"m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z"},timeSig0:{x_min:20,x_max:513,y_min:-358,y_max:359,ha:717,o:"m 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z"},timeSig1:{x_min:20,x_max:283,y_min:-364,y_max:366,ha:730,o:"m 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z"},timeSig2:{x_min:20,x_max:660,y_min:-379,y_max:382,ha:761,o:"m 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z"},timeSig3:{x_min:20,x_max:540,y_min:-392,y_max:392,ha:784,o:"m 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z"},timeSig4:{x_min:20,x_max:633,y_min:-490,y_max:491,ha:981,o:"m 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z"},timeSig5:{x_min:20,x_max:583,y_min:-389,y_max:389,ha:778,o:"m 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z"},timeSig6:{x_min:20,x_max:565,y_min:-363,y_max:363,ha:726,o:"m 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z"},timeSig7:{x_min:20,x_max:592,y_min:-345,y_max:345,ha:690,o:"m 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z"},timeSig8:{x_min:20,x_max:504,y_min:-428,y_max:428,ha:856,o:"m 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z"},timeSig9:{x_min:20,x_max:494,y_min:-421,y_max:421,ha:842,o:"m 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z"},timeSigCommon:{x_min:20,x_max:585,y_min:-298,y_max:294,ha:592,o:"m 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z"},timeSigCutCommon:{x_min:20,x_max:695,y_min:-687,y_max:687,ha:1374,o:"m 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z"},timeSigPlus:{x_min:0,x_max:661,y_min:-358,y_max:358,ha:716,o:"m 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z"},timeSigPlusSmall:{x_min:0,x_max:418,y_min:-197,y_max:199,ha:396,o:"m 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z"},timeSigMinus:{x_min:0,x_max:662,y_min:-54,y_max:55,ha:109,o:"m 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z"},timeSigParensRight:{x_min:0,x_max:274,y_min:-723,y_max:725,ha:1448,o:"m 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z"},timeSigParensRightSmall:{x_min:0,x_max:154,y_min:-422,y_max:422,ha:844,o:"m 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z"},timeSigParensLeft:{x_min:1,x_max:400,y_min:-728,y_max:728,ha:1456,o:"m 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z"},timeSigParensLeftSmall:{x_min:0,x_max:173,y_min:-405,y_max:404,ha:809,o:"m 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z"},noteheadDoubleWhole:{x_min:0,x_max:614,y_min:-223,y_max:223,ha:446,o:"m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z"},noteheadWhole:{x_min:0,x_max:380,y_min:-186,y_max:165,ha:351,o:"m 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z"},noteheadHalf:{x_min:0,x_max:334,y_min:-174,y_max:175,ha:349,o:"m 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z"},noteheadBlack:{x_min:0,x_max:334,y_min:-164,y_max:164,ha:328,o:"m 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z"},noteheadXDoubleWhole:{x_min:0,x_max:730,y_min:-266,y_max:267,ha:533,o:"m 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z"},noteheadXWhole:{x_min:0,x_max:506,y_min:-143,y_max:144,ha:287,o:"m 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z"},noteheadXHalf:{x_min:0,x_max:421,y_min:-146,y_max:151,ha:297,o:"m 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z"},noteheadXBlack:{x_min:0,x_max:289,y_min:-156,y_max:157,ha:313,o:"m 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z"},noteheadCircleXDoubleWhole:{x_min:0,x_max:437,y_min:-220,y_max:219,ha:439,o:"m 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z"},noteheadCircleXWhole:{x_min:0,x_max:323,y_min:-190,y_max:184,ha:374,o:"m 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z"},noteheadCircleXHalf:{x_min:0,x_max:309,y_min:-179,y_max:179,ha:358,o:"m 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z"},noteheadCircleX:{x_min:0,x_max:344,y_min:-179,y_max:175,ha:354,o:"m 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z"},noteheadCircledDoubleWhole:{x_min:0,x_max:672,y_min:-291,y_max:291,ha:582,o:"m 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z"},noteheadCircledWhole:{x_min:-50,x_max:472,y_min:-231,y_max:232,ha:463,o:"m 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z"},noteheadCircledHalf:{x_min:-50,x_max:393,y_min:-175,y_max:175,ha:350,o:"m 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z"},noteheadCircledBlack:{x_min:-70,x_max:326,y_min:-168,y_max:192,ha:360,o:"m 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z"},noteheadDoubleWholeSquare:{x_min:0,x_max:474,y_min:-209,y_max:211,ha:420,o:"m 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z"},noteheadSquareWhite:{x_min:0,x_max:350,y_min:-131,y_max:131,ha:262,o:"m 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z"},noteheadSquareBlack:{x_min:0,x_max:342,y_min:-130,y_max:132,ha:262,o:"m 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z"},noteheadTriangleDownDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z"},noteheadTriangleDownWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z"},noteheadTriangleDownHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z"},noteheadTriangleDownBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z"},noteheadTriangleUpDoubleWhole:{x_min:0,x_max:510,y_min:-213,y_max:213,ha:426,o:"m 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z"},noteheadTriangleUpWhole:{x_min:0,x_max:366,y_min:-145,y_max:138,ha:283,o:"m 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z"},noteheadTriangleUpHalf:{x_min:0,x_max:341,y_min:-159,y_max:159,ha:318,o:"m 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z"},noteheadTriangleUpBlack:{x_min:0,x_max:346,y_min:-149,y_max:149,ha:298,o:"m 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z"},noteheadSlashedDoubleWhole1:{x_min:0,x_max:697,y_min:-290,y_max:290,ha:580,o:"m 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z"},noteheadSlashedWhole1:{x_min:-76,x_max:498,y_min:-168,y_max:168,ha:336,o:"m -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z"},noteheadSlashedHalf1:{x_min:-79,x_max:471,y_min:-184,y_max:184,ha:368,o:"m -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z"},noteheadSlashedBlack1:{x_min:-110,x_max:452,y_min:-190,y_max:190,ha:380,o:"m -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z"},noteheadSlashedDoubleWhole2:{x_min:0,x_max:697,y_min:-295,y_max:295,ha:590,o:"m 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z"},noteheadSlashedWhole2:{x_min:-83,x_max:510,y_min:-201,y_max:198,ha:399,o:"m 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z"},noteheadSlashedHalf2:{x_min:-73,x_max:454,y_min:-188,y_max:188,ha:376,o:"m 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z"},noteheadSlashedBlack2:{x_min:-84,x_max:405,y_min:-189,y_max:189,ha:378,o:"m 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z"},noteheadDiamondDoubleWhole:{x_min:0,x_max:429,y_min:-221,y_max:221,ha:442,o:"m 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z"},noteheadDiamondWhole:{x_min:0,x_max:271,y_min:-132,y_max:132,ha:264,o:"m 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z"},noteheadDiamondHalf:{x_min:0,x_max:295,y_min:-148,y_max:148,ha:296,o:"m 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z"},noteheadDiamondBlack:{x_min:0,x_max:310,y_min:-146,y_max:146,ha:292,o:"m 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z"},noteheadParenthesis:{x_min:-70,x_max:329,y_min:-196,y_max:201,ha:397,o:"m 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z"},noteheadParenthesisRight:{x_min:-30,x_max:82,y_min:-199,y_max:206,ha:405,o:"m -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z"},noteheadParenthesisLeft:{x_min:0,x_max:106,y_min:-197,y_max:197,ha:394,o:"m 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z"},noteheadMoonBlack:{x_min:0,x_max:328,y_min:-125,y_max:125,ha:250,o:"m 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z"},noteheadTriangleLeftBlack:{x_min:0,x_max:391,y_min:-142,y_max:142,ha:284,o:"m 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z"},noteheadTriangleRightBlack:{x_min:0,x_max:398,y_min:-139,y_max:140,ha:279,o:"m 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z"},noteheadTriangleRoundDownBlack:{x_min:0,x_max:334,y_min:-134,y_max:136,ha:270,o:"m 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z"},augmentationDot:{x_min:0,x_max:96,y_min:-57,y_max:57,ha:114,o:"m 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z"},tremolo1:{x_min:-158,x_max:156,y_min:-88,y_max:88,ha:176,o:"m -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z"},flag8thUp:{x_min:0,x_max:261,y_min:-819,y_max:0,ha:819,o:"m 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z"},flag8thDown:{x_min:0,x_max:261,y_min:0,y_max:819,ha:819,o:"m 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z"},flag16thUp:{x_min:0,x_max:327,y_min:-819,y_max:0,ha:819,o:"m 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z"},flag16thDown:{x_min:0,x_max:327,y_min:0,y_max:819,ha:819,o:"m 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z"},flag32ndUp:{x_min:0,x_max:268,y_min:-849,y_max:149,ha:999,o:"m 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z"},flag32ndDown:{x_min:-3,x_max:268,y_min:-169,y_max:829,ha:999,o:"m 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z"},flag64thUp:{x_min:-4,x_max:282,y_min:-824,y_max:347,ha:1171,o:"m 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z"},flag64thDown:{x_min:-5,x_max:281,y_min:-375,y_max:796,ha:1171,o:"m 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z"},flag128thUp:{x_min:0,x_max:252,y_min:-804,y_max:530,ha:1334,o:"m 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z"},flag128thDown:{x_min:-1,x_max:252,y_min:-580,y_max:754,ha:1334,o:"m 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z"},accidentalFlat:{x_min:1,x_max:209,y_min:-208,y_max:472,ha:680,o:"m 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z"},accidentalNatural:{x_min:0,x_max:214,y_min:-456,y_max:462,ha:918,o:"m 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z"},accidentalSharp:{x_min:-22,x_max:390,y_min:-384,y_max:383,ha:767,o:"m 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z"},accidentalDoubleSharp:{x_min:0,x_max:287,y_min:-159,y_max:159,ha:318,o:"m 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z"},accidentalDoubleFlat:{x_min:0,x_max:359,y_min:-220,y_max:446,ha:666,o:"m 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z"},accidentalParensLeft:{x_min:0,x_max:130,y_min:-270,y_max:268,ha:538,o:"m 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z"},accidentalParensRight:{x_min:0,x_max:139,y_min:-275,y_max:277,ha:552,o:"m 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z"},accidentalQuarterToneFlatStein:{x_min:0,x_max:208,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z"},accidentalThreeQuarterTonesFlatZimmermann:{x_min:0,x_max:422,y_min:-240,y_max:440,ha:680,o:"m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z"},accidentalQuarterToneSharpStein:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalThreeQuarterTonesSharpStein:{x_min:-23,x_max:388,y_min:-373,y_max:445,ha:818,o:"m 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z"},accidentalBuyukMucennebFlat:{x_min:2,x_max:287,y_min:-248,y_max:432,ha:680,o:"m 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z"},accidentalBakiyeFlat:{x_min:2,x_max:287,y_min:-236,y_max:444,ha:680,o:"m 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z"},accidentalKomaSharp:{x_min:0,x_max:300,y_min:-338,y_max:351,ha:689,o:"m 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z"},accidentalKucukMucennebSharp:{x_min:0,x_max:359,y_min:-420,y_max:343,ha:763,o:"m 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z"},accidentalKoron:{x_min:0,x_max:303,y_min:-462,y_max:180,ha:642,o:"m 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z"},accidentalSori:{x_min:0,x_max:434,y_min:-295,y_max:325,ha:620,o:"m 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z"},articAccentAbove:{x_min:0,x_max:425,y_min:0,y_max:326,ha:326,o:"m 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z"},articAccentBelow:{x_min:0,x_max:425,y_min:-326,y_max:0,ha:326,o:"m 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z"},articTenutoAbove:{x_min:0,x_max:471,y_min:0,y_max:56,ha:56,o:"m 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z"},articTenutoBelow:{x_min:0,x_max:471,y_min:-59,y_max:-3,ha:56,o:"m 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z"},articStaccatoAbove:{x_min:1,x_max:112,y_min:0,y_max:156,ha:156,o:"m 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z"},articStaccatoBelow:{x_min:1,x_max:112,y_min:-156,y_max:0,ha:156,o:"m 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z"},articStaccatissimoAbove:{x_min:0,x_max:139,y_min:0,y_max:411,ha:411,o:"m 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z"},articStaccatissimoBelow:{x_min:0,x_max:139,y_min:-411,y_max:0,ha:411,o:"m 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z"},articMarcatoAbove:{x_min:0,x_max:396,y_min:0,y_max:328,ha:328,o:"m 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z"},articMarcatoBelow:{x_min:0,x_max:396,y_min:-328,y_max:0,ha:328,o:"m 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z"},fermataAbove:{x_min:0,x_max:472,y_min:2,y_max:454,ha:452,o:"m 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z"},fermataBelow:{x_min:0,x_max:519,y_min:-430,y_max:-1,ha:429,o:"m 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z"},fermataLongAbove:{x_min:0,x_max:591,y_min:-6,y_max:337,ha:343,o:"m 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z"},fermataLongBelow:{x_min:0,x_max:602,y_min:-335,y_max:7,ha:342,o:"m 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z"},fermataVeryLongAbove:{x_min:0,x_max:715,y_min:-14,y_max:437,ha:451,o:"m 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z"},fermataVeryLongBelow:{x_min:0,x_max:686,y_min:-427,y_max:30,ha:457,o:"m 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z"},fermataVeryShortAbove:{x_min:0,x_max:711,y_min:-31,y_max:496,ha:527,o:"m 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z"},fermataVeryShortBelow:{x_min:0,x_max:697,y_min:-475,y_max:13,ha:488,o:"m 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z"},fermataShortAbove:{x_min:0,x_max:545,y_min:-18,y_max:348,ha:366,o:"m 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z"},fermataShortBelow:{x_min:0,x_max:565,y_min:-335,y_max:10,ha:345,o:"m 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z"},breathMarkComma:{x_min:0,x_max:148,y_min:0,y_max:275,ha:275,o:"m 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z"},breathMarkUpbow:{x_min:0,x_max:254,y_min:0,y_max:595,ha:595,o:"m 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z"},caesura:{x_min:0,x_max:566,y_min:0,y_max:562,ha:563,o:"m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z"},caesuraCurved:{x_min:0,x_max:386,y_min:-10,y_max:584,ha:594,o:"m 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z"},restMaxima:{x_min:0,x_max:366,y_min:-255,y_max:255,ha:510,o:"m 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z"},restDoubleWhole:{x_min:0,x_max:122,y_min:0,y_max:249,ha:249,o:"m 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z"},restWhole:{x_min:1,x_max:500,y_min:-120,y_max:14,ha:134,o:"m 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z"},restWholeLegerLine:{x_min:-197,x_max:685,y_min:-157,y_max:29,ha:186,o:"m 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z"},restHalf:{x_min:0,x_max:518,y_min:0,y_max:162,ha:162,o:"m 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z"},restHalfLegerLine:{x_min:-120,x_max:448,y_min:-20,y_max:143,ha:163,o:"m 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z"},restQuarter:{x_min:0,x_max:263,y_min:-415,y_max:415,ha:830,o:"m 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z"},rest8th:{x_min:0,x_max:289,y_min:-260,y_max:261,ha:521,o:"m 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z"},rest16th:{x_min:0,x_max:333,y_min:-328,y_max:244,ha:572,o:"m 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z"},rest32nd:{x_min:0,x_max:347,y_min:-498,y_max:483,ha:981,o:"m 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z"},rest64th:{x_min:0,x_max:428,y_min:-720,y_max:474,ha:1194,o:"m 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z"},rest128th:{x_min:1,x_max:491,y_min:-711,y_max:719,ha:1430,o:"m 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z"},dynamicPiano:{x_min:-49,x_max:327,y_min:-142,y_max:515,ha:657,o:"m -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z"},dynamicMezzo:{x_min:-18,x_max:559,y_min:-50,y_max:365,ha:415,o:"m 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z"},dynamicForte:{x_min:-144,x_max:311,y_min:-115,y_max:504,ha:619,o:"m -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z"},dynamicRinforzando:{x_min:-75,x_max:322,y_min:-90,y_max:325,ha:415,o:"m 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z"},dynamicSforzando:{x_min:0,x_max:296,y_min:0,y_max:379,ha:379,o:"m 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z"},dynamicZ:{x_min:-43,x_max:331,y_min:0,y_max:328,ha:328,o:"m -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z"},ornamentTrill:{x_min:1,x_max:551,y_min:-18,y_max:539,ha:557,o:"m 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z"},ornamentTurn:{x_min:0,x_max:574,y_min:0,y_max:312,ha:312,o:"m 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z"},ornamentTurnSlash:{x_min:0,x_max:574,y_min:-106,y_max:405,ha:511,o:"m 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z"},ornamentMordent:{x_min:0,x_max:700,y_min:0,y_max:497,ha:497,o:"m 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z"},ornamentShortTrill:{x_min:0,x_max:747,y_min:0,y_max:243,ha:243,o:"m 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z"},ornamentTremblement:{x_min:0,x_max:982,y_min:0,y_max:224,ha:224,o:"m 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z"},ornamentPrecompAppoggTrill:{x_min:0,x_max:1066,y_min:-50,y_max:533,ha:583,o:"m 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z"},ornamentPrecompSlideTrillDAnglebert:{x_min:0,x_max:1088,y_min:-380,y_max:252,ha:632,o:"m 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z"},ornamentPrecompSlideTrillBach:{x_min:0,x_max:1185,y_min:-380,y_max:465,ha:845,o:"m 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z"},ornamentPrecompTrillSuffixDandrieu:{x_min:0,x_max:1003,y_min:-20,y_max:521,ha:541,o:"m 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z"},ornamentPrecompDoubleCadenceUpperPrefix:{x_min:0,x_max:1246,y_min:-30,y_max:296,ha:326,o:"m 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z"},ornamentPrecompDoubleCadenceUpperPrefixTurn:{x_min:0,x_max:1226,y_min:-237,y_max:436,ha:673,o:"m 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z"},ornamentPrecompTrillLowerSuffix:{x_min:0,x_max:833,y_min:-309,y_max:319,ha:628,o:"m 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z"},brassScoop:{x_min:0,x_max:312,y_min:-390,y_max:28,ha:418,o:"m 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z"},brassDoitMedium:{x_min:0,x_max:476,y_min:-50,y_max:333,ha:383,o:"m 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z"},brassFallLipShort:{x_min:0,x_max:298,y_min:-344,y_max:65,ha:409,o:"m 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z"},brassLiftMedium:{x_min:0,x_max:807,y_min:0,y_max:838,ha:838,o:"m 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z"},brassFallRoughMedium:{x_min:0,x_max:791,y_min:0,y_max:819,ha:819,o:"m 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z"},brassBend:{x_min:0,x_max:381,y_min:0,y_max:367,ha:367,o:"m 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z"},brassMuteClosed:{x_min:0,x_max:274,y_min:0,y_max:260,ha:260,o:"m 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z"},brassMuteOpen:{x_min:1,x_max:313,y_min:0,y_max:309,ha:309,o:"m 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z"},brassFlip:{x_min:0,x_max:402,y_min:0,y_max:361,ha:361,o:"m 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z"},brassJazzTurn:{x_min:0,x_max:646,y_min:0,y_max:212,ha:212,o:"m 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z"},brassSmear:{x_min:0,x_max:334,y_min:0,y_max:151,ha:151,o:"m 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z"},stringsDownBow:{x_min:0,x_max:306,y_min:0,y_max:366,ha:366,o:"m 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z"},stringsUpBow:{x_min:0,x_max:219,y_min:0,y_max:489,ha:489,o:"m 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z"},stringsHarmonic:{x_min:0,x_max:191,y_min:0,y_max:202,ha:202,o:"m 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z"},pluckedSnapPizzicatoAbove:{x_min:0,x_max:201,y_min:0,y_max:325,ha:325,o:"m 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z"},pluckedSnapPizzicatoBelow:{x_min:0,x_max:211,y_min:0,y_max:307,ha:307,o:"m 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z"},pluckedLeftHandPizzicato:{x_min:0,x_max:271,y_min:0,y_max:284,ha:284,o:"m 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z"},keyboardPedalPed:{x_min:0,x_max:944,y_min:-13,y_max:550,ha:563,o:"m 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z"},keyboardPedalUp:{x_min:0,x_max:437,y_min:0,y_max:461,ha:461,o:"m 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z"},pictChokeCymbal:{x_min:1,x_max:147,y_min:0,y_max:242,ha:242,o:"m 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z"},wiggleArpeggiatoUp:{x_min:-22,x_max:300,y_min:0,y_max:176,ha:176,o:"m 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z"},arpeggiatoUp:{x_min:0,x_max:262,y_min:0,y_max:1459,ha:1459,o:"m 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z"},arpeggiatoDown:{x_min:0,x_max:218,y_min:0,y_max:1440,ha:1440,o:"m 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z"},repeat1Bar:{x_min:0,x_max:599,y_min:-250,y_max:175,ha:425,o:"m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z"},repeat2Bars:{x_min:0,x_max:775,y_min:-247,y_max:363,ha:610,o:"m 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z"},repeat4Bars:{x_min:0,x_max:1374,y_min:-304,y_max:304,ha:608,o:"m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z"},repeatBarSlash:{x_min:0,x_max:630,y_min:-225,y_max:265,ha:490,o:"m 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z"},csymDiminished:{x_min:0,x_max:506,y_min:0,y_max:500,ha:500,o:"m 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z"},csymHalfDiminished:{x_min:-32,x_max:496,y_min:-33,y_max:492,ha:525,o:"m -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z"},csymAugmented:{x_min:0,x_max:530,y_min:0,y_max:539,ha:539,o:"m 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z"},csymMajorSeventh:{x_min:0,x_max:593,y_min:0,y_max:569,ha:569,o:"m 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z"},csymMinor:{x_min:0,x_max:482,y_min:193,y_max:265,ha:72,o:"m 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z"},csymParensLeftTall:{x_min:0,x_max:185,y_min:0,y_max:1034,ha:1034,o:"m 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z"},csymParensRightTall:{x_min:-40,x_max:189,y_min:0,y_max:1058,ha:1058,o:"m 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z"},csymBracketLeftTall:{x_min:0,x_max:328,y_min:2,y_max:807,ha:805,o:"m 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z"},csymBracketRightTall:{x_min:1,x_max:306,y_min:0,y_max:829,ha:829,o:"m 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z"},csymParensLeftVeryTall:{x_min:0,x_max:116,y_min:0,y_max:934,ha:934,o:"m 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z"},csymParensRightVeryTall:{x_min:-20,x_max:111,y_min:0,y_max:1009,ha:1009,o:"m -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z"},csymDiagonalArrangementSlash:{x_min:0,x_max:990,y_min:-27,y_max:1028,ha:1054,o:"m 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z"},accidentalNarrowReversedFlat:{x_min:0,x_max:208,y_min:-231,y_max:449,ha:680,o:"m 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z"},accidentalNarrowReversedFlatAndFlat:{x_min:0,x_max:335,y_min:-231,y_max:449,ha:680,o:"m 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z"},accidentalWilsonPlus:{x_min:0,x_max:298,y_min:-218,y_max:218,ha:436,o:"m 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z"},accidentalWilsonMinus:{x_min:0,x_max:284,y_min:-163,y_max:163,ha:326,o:"m 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z"}},fontFamily:"Petaluma",resolution:1e3,generatedOn:"2022-12-18T09:07:50.817Z"},Ii={name:"Petaluma",smufl:!0,stave:{padding:15,endPaddingMax:15,endPaddingMin:7,unalignedNotePadding:12},accidental:{noteheadAccidentalPadding:1,leftPadding:2,accidentalSpacing:3},chordSymbol:{global:{superscriptOffset:-400,subscriptOffset:300,kerningOffset:-150,lowerKerningText:["D","F","P","T","V","Y"],upperKerningText:["L"],spacing:20,superSubRatio:.73},glyphs:{csymDiminished:{leftSideBearing:-95,advanceWidth:506,yOffset:0},csymHalfDiminished:{leftSideBearing:-32,advanceWidth:506,yOffset:0},csymAugmented:{leftSideBearing:-25,advanceWidth:530,yOffset:0},csymParensLeftTall:{leftSideBearing:0,advanceWidth:155,yOffset:150},csymParensRightTall:{leftSideBearing:40,advanceWidth:189,yOffset:150},csymBracketLeftTall:{leftSideBearing:0,advanceWidth:328,yOffset:0},csymBracketRightTall:{leftSideBearing:1,advanceWidth:600,yOffset:0},csymParensLeftVeryTall:{leftSideBearing:0,advanceWidth:210,yOffset:250},csymParensRightVeryTall:{leftSideBearing:-100,advanceWidth:111,yOffset:250},csymDiagonalArrangementSlash:{leftSideBearing:-1,advanceWidth:990,yOffset:0},csymMinor:{leftSideBearing:0,advanceWidth:482,yOffset:0},csymMajorSeventh:{leftSideBearing:100,yOffset:0,advanceWidth:600},accidentalSharp:{leftSideBearing:0,advanceWidth:425,yOffset:-422},accidentalFlat:{leftSideBearing:-10,advanceWidth:228,yOffset:-284}}},clef_default:{width:26,annotations:{"8va":{point:18,treble:{line:-1.4,shiftX:12}},"8vb":{point:18,treble:{line:6,shiftX:10},bass:{line:3.5,shiftX:1}}}},clef_small:{width:20,annotations:{"8va":{point:16,treble:{line:-.2,shiftX:8}},"8vb":{point:16,treble:{line:5.3,shiftX:6},bass:{line:3.1,shiftX:.5}}}},ornament:{brassScoop:{xOffset:-12,yOffset:0,stemUpYOffset:0,reportedWidth:15},brassDoitMedium:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassFallLipShort:{xOffset:16,yOffset:0,stemUpYOffset:0,reportedWidth:19},brassLiftMedium:{xOffset:16,yOffset:5,stemUpYOffset:0,reportedWidth:15},brassFallRoughMedium:{xOffset:16,yOffset:26,stemUpYOffset:0,reportedWidth:5},brassBend:{xOffset:3,yOffset:-8,stemUpYOffset:28,reportedWidth:5},brassMuteClosed:{xOffset:3,yOffset:-8,stemUpYOffset:26,reportedWidth:5},brassMuteOpen:{xOffset:4,yOffset:-8,stemUpYOffset:27,reportedWidth:5},brassFlip:{xOffset:10,yOffset:-4,stemUpYOffset:7,reportedWidth:5},brassJazzTurn:{xOffset:6,yOffset:-4,stemUpYOffset:5,reportedWidth:30},brassSmear:{xOffset:10,yOffset:-4,stemUpYOffset:5,reportedWidth:5}},parenthesis:{default:{point:39,width:7},gracenote:{point:23.4,width:3}},pedalMarking:{up:{point:40},down:{point:34}},digits:{shiftLine:-1,point:22,tupletPoint:16,shiftY:-2},articulation:{articStaccatissimoAbove:{padding:2},articStaccatissimoBelow:{padding:2}},tremolo:{default:{point:25,spacing:5,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:13,offsetXStemDown:1},grace:{point:18,spacing:4,offsetYStemUp:-5,offsetYStemDown:5,offsetXStemUp:8,offsetXStemDown:1}},staveRepetition:{symbolText:{offsetX:12,offsetY:25,spacing:5},coda:{offsetY:25},segno:{offsetY:10}},noteHead:{minPadding:2,displacedShiftX:-2},stem:{heightAdjustmentForFlag:-3,noteHead:{noteheadTriangleUpHalf:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpBlack:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadTriangleUpWhole:{offsetYBaseStemUp:5,offsetYBaseStemDown:4},noteheadXHalf:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXBlack:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadXWhole:{offsetYBaseStemUp:-4,offsetYBaseStemDown:4},noteheadHalf:{offsetYBaseStemDown:1.8,offsetYBaseStemUp:-1.8},noteheadBlack:{offsetYBaseStemDown:2,offsetYBaseStemUp:-2},noteheadSquareWhite:{offsetYBaseStemDown:-5,offsetYBaseStemUp:5}}},stringNumber:{verticalPadding:8,stemPadding:2,leftPadding:5,rightPadding:6},tuplet:{noteHeadOffset:20,stemOffset:10,bottomLine:4,topModifierOffset:20},glyphs:{coda:{point:20,shiftX:-7,shiftY:8},segno:{shiftX:-7},flag:{shiftX:-.77,flag16thUp:{shiftX:-.75},flag32ndUp:{shiftX:-.85},flag64thUp:{shiftX:-1.55},flag128thUp:{shiftX:-1.3},flag16thDown:{shiftX:-.75},flag32ndDown:{shiftX:-.76},flag64thDown:{shiftX:-1.5},flag128thDown:{shiftX:-1.2},staveTempo:{shiftX:-1}},clef_default:{point:32,gClef:{scale:1.1,shiftY:1},fClef:{shiftY:-.5},"6stringTabClef":{point:32,shiftY:-5.5}},clef_small:{point:26,gClef:{shiftY:1.5}},clefNote_default:{point:32},clefNote_small:{point:26},ornament:{ornamentTurn:{scale:1.2},ornamentTurnSlash:{scale:1.2},brassScoop:{scale:1},brassDoitMedium:{scale:1},brassFallLipShort:{scale:1},brassLiftMedium:{scale:1},brassFallRoughMedium:{scale:1},brassBend:{scale:1},brassMuteClosed:{scale:1},brassMuteOpen:{scale:1},brassFlip:{scale:1},brassJazzTurn:{scale:1},brassSmear:{scale:1}},stroke_straight:{arrowheadBlackDown:{shiftX:-4.5},arrowheadBlackUp:{shiftX:-.85}},stroke_wiggly:{arrowheadBlackDown:{shiftX:-1,shiftY:1},arrowheadBlackUp:{shiftX:-1,shiftY:1}},textNote:{point:34,breathMarkTick:{point:36,shiftY:9},breathMarkComma:{point:36},segno:{point:30,shiftX:-7,shiftY:8},coda:{point:20,shiftX:-7,shiftY:8},ornamentTrill:{shiftX:-10,shiftY:8},ornamentMordent:{shiftX:-8},ornamentShortTrill:{shiftX:-8}},noteHead:{noteheadBlackStemUp:{shiftX:.5},noteheadHalfStemUp:{shiftX:.725},noteheadWholeStemUp:{shiftX:1}},chordSymbol:{csymDiminished:{scale:.8},csymHalfDiminished:{scale:.8},csymAugmented:{scale:1},csymParensLeftTall:{scale:.8},csymParensRightTall:{scale:.8},csymBracketLeftTall:{scale:.8},csymBracketRightTall:{scale:.8},csymParensLeftVeryTall:{scale:.95},csymParensRightVeryTall:{scale:.9},csymDiagonalArrangementSlash:{scale:.6},csymMinor:{scale:.7},csymMajorSeventh:{scale:.8},accidentalSharp:{scale:.7},accidentalFlat:{scale:.8}}}};const Yi={spacing:50,glyphs:{" ":{x_min:0,x_max:250,y_min:0,y_max:500,ha:500,leftSideBearing:0,advanceWidth:250},0:{x_min:33,x_max:534,y_min:-13,y_max:751,ha:764,leftSideBearing:33,advanceWidth:570},1:{x_min:48,x_max:235,y_min:-17,y_max:734,ha:751,leftSideBearing:48,advanceWidth:286},2:{x_min:56,x_max:571,y_min:-19,y_max:741,ha:760,leftSideBearing:56,advanceWidth:626},3:{x_min:50,x_max:528,y_min:-7,y_max:731,ha:738,leftSideBearing:50,advanceWidth:589},4:{x_min:38,x_max:564,y_min:-13,y_max:743,ha:756,leftSideBearing:38,advanceWidth:614},5:{x_min:42,x_max:601,y_min:-34,y_max:743,ha:777,leftSideBearing:42,advanceWidth:648},6:{x_min:47,x_max:606,y_min:-16,y_max:743,ha:759,leftSideBearing:47,advanceWidth:667},7:{x_min:47,x_max:567,y_min:5,y_max:739,ha:734,leftSideBearing:0,advanceWidth:615},8:{x_min:40,x_max:541,y_min:-15,y_max:752,ha:767,leftSideBearing:40,advanceWidth:585},9:{x_min:40,x_max:537,y_min:-52,y_max:736,ha:788,leftSideBearing:40,advanceWidth:592},"!":{x_min:49,x_max:180,y_min:-7,y_max:761,ha:768,leftSideBearing:49,advanceWidth:230},'"':{x_min:39,x_max:304,y_min:596,y_max:804,ha:208,leftSideBearing:39,advanceWidth:353},"#":{x_min:33,x_max:599,y_min:-8,y_max:765,ha:773,leftSideBearing:33,advanceWidth:648},$:{x_min:53,x_max:495,y_min:-111,y_max:823,ha:934,leftSideBearing:53,advanceWidth:560},"%":{x_min:35,x_max:656,y_min:-128,y_max:808,ha:936,leftSideBearing:35,advanceWidth:711},"&":{x_min:53,x_max:441,y_min:-3,y_max:753,ha:756,leftSideBearing:53,advanceWidth:500},"'":{x_min:43,x_max:161,y_min:590,y_max:811,ha:221,leftSideBearing:43,advanceWidth:217},"(":{x_min:41,x_max:311,y_min:-36,y_max:845,ha:881,leftSideBearing:41,advanceWidth:308},")":{x_min:-8,x_max:257,y_min:-21,y_max:852,ha:873,leftSideBearing:-8,advanceWidth:280},"*":{x_min:59,x_max:539,y_min:175,y_max:589,ha:414,leftSideBearing:59,advanceWidth:601},"+":{x_min:33,x_max:361,y_min:180,y_max:587,ha:407,leftSideBearing:33,advanceWidth:400},",":{x_min:15,x_max:176,y_min:-129,y_max:92,ha:221,leftSideBearing:15,advanceWidth:205},"-":{x_min:40,x_max:380,y_min:317,y_max:452,ha:135,leftSideBearing:40,advanceWidth:422},".":{x_min:48,x_max:185,y_min:-56,y_max:84,ha:140,leftSideBearing:48,advanceWidth:227},"/":{x_min:-58,x_max:654,y_min:-122,y_max:844,ha:966,leftSideBearing:-58,advanceWidth:626},":":{x_min:65,x_max:225,y_min:97,y_max:536,ha:439,leftSideBearing:65,advanceWidth:302},";":{x_min:13,x_max:295,y_min:-139,y_max:536,ha:675,leftSideBearing:13,advanceWidth:334},"<":{x_min:28,x_max:438,y_min:-1,y_max:607,ha:608,leftSideBearing:28,advanceWidth:475},"=":{x_min:40,x_max:383,y_min:199.9598640852289,y_max:541,ha:341.0401359147711,leftSideBearing:40,advanceWidth:422},">":{x_min:35,x_max:421,y_min:28,y_max:632,ha:604,leftSideBearing:35,advanceWidth:466},"?":{x_min:45,x_max:548,y_min:-17,y_max:767,ha:784,leftSideBearing:45,advanceWidth:592},"@":{x_min:51,x_max:730,y_min:-78,y_max:753,ha:831,leftSideBearing:51,advanceWidth:781},A:{x_min:37,x_max:554,y_min:-4,y_max:746,ha:750,leftSideBearing:37,advanceWidth:617},B:{x_min:37,x_max:532,y_min:3,y_max:783,ha:780,leftSideBearing:37,advanceWidth:579},C:{x_min:37,x_max:583,y_min:-3,y_max:775,ha:778,leftSideBearing:37,advanceWidth:623},D:{x_min:50,x_max:530,y_min:-15,y_max:749,ha:764,leftSideBearing:50,advanceWidth:579},E:{x_min:45,x_max:531,y_min:-1,y_max:743,ha:744,leftSideBearing:45,advanceWidth:585},F:{x_min:45,x_max:459,y_min:23,y_max:727,ha:704,leftSideBearing:45,advanceWidth:510},G:{x_min:31,x_max:577,y_min:-8,y_max:733,ha:741,leftSideBearing:31,advanceWidth:611},H:{x_min:37,x_max:493,y_min:-22,y_max:758,ha:780,leftSideBearing:37,advanceWidth:535},I:{x_min:47,x_max:501,y_min:-3,y_max:731,ha:734,leftSideBearing:47,advanceWidth:541},J:{x_min:33,x_max:531,y_min:-23,y_max:725,ha:748,leftSideBearing:33,advanceWidth:573},K:{x_min:43,x_max:505,y_min:-10,y_max:740,ha:750,leftSideBearing:43,advanceWidth:560},L:{x_min:49,x_max:457,y_min:-2,y_max:746,ha:748,leftSideBearing:49,advanceWidth:510},M:{x_min:35,x_max:699,y_min:1,y_max:744,ha:743,leftSideBearing:35,advanceWidth:743},N:{x_min:34,x_max:533,y_min:-17,y_max:761,ha:778,leftSideBearing:34,advanceWidth:579},O:{x_min:41,x_max:608,y_min:-5,y_max:735,ha:740,leftSideBearing:41,advanceWidth:667},P:{x_min:53,x_max:451,y_min:-18,y_max:735,ha:753,leftSideBearing:53,advanceWidth:497},Q:{x_min:40,x_max:599,y_min:-67,y_max:744,ha:811,leftSideBearing:40,advanceWidth:648},R:{x_min:39,x_max:487,y_min:16,y_max:735,ha:719,leftSideBearing:39,advanceWidth:535},S:{x_min:35,x_max:552,y_min:-47,y_max:708,ha:755,leftSideBearing:35,advanceWidth:604},T:{x_min:26,x_max:656,y_min:-13,y_max:718,ha:731,leftSideBearing:26,advanceWidth:705},U:{x_min:41,x_max:518,y_min:-20,y_max:748,ha:768,leftSideBearing:41,advanceWidth:567},V:{x_min:47,x_max:509,y_min:-26,y_max:744,ha:770,leftSideBearing:47,advanceWidth:567},W:{x_min:44,x_max:789,y_min:-35,y_max:720,ha:755,leftSideBearing:44,advanceWidth:833},X:{x_min:63,x_max:635,y_min:-10,y_max:745,ha:755,leftSideBearing:63,advanceWidth:680},Y:{x_min:43,x_max:503,y_min:-21,y_max:734,ha:755,leftSideBearing:43,advanceWidth:541},Z:{x_min:42,x_max:584,y_min:-10,y_max:739,ha:749,leftSideBearing:42,advanceWidth:629},"[":{x_min:46,x_max:346,y_min:-150,y_max:884,ha:1034,leftSideBearing:46,advanceWidth:291},"\\":{x_min:20,x_max:616,y_min:-100,y_max:797,ha:897,leftSideBearing:20,advanceWidth:645},"]":{x_min:-76,x_max:226,y_min:-150,y_max:881,ha:1031,leftSideBearing:-76,advanceWidth:297},"^":{x_min:43,x_max:437,y_min:517,y_max:812,ha:295,leftSideBearing:43,advanceWidth:478},_:{x_min:29,x_max:563,y_min:-110,y_max:-1,ha:109,leftSideBearing:29,advanceWidth:598},"`":{x_min:54,x_max:321,y_min:540,y_max:747,ha:207,leftSideBearing:54,advanceWidth:368},a:{x_min:20,x_max:447,y_min:-17,y_max:495,ha:512,leftSideBearing:20,advanceWidth:494},b:{x_min:37,x_max:466,y_min:-27,y_max:770,ha:797,leftSideBearing:37,advanceWidth:510},c:{x_min:35,x_max:456,y_min:-9,y_max:507,ha:516,leftSideBearing:35,advanceWidth:460},d:{x_min:45,x_max:520,y_min:-15,y_max:764,ha:779,leftSideBearing:45,advanceWidth:560},e:{x_min:33,x_max:370,y_min:-5,y_max:501,ha:506,leftSideBearing:33,advanceWidth:397},f:{x_min:35,x_max:411,y_min:-13,y_max:695,ha:708,leftSideBearing:35,advanceWidth:453},g:{x_min:33,x_max:551,y_min:-257,y_max:505,ha:762,leftSideBearing:33,advanceWidth:611},h:{x_min:32,x_max:458,y_min:-29,y_max:743,ha:772,leftSideBearing:32,advanceWidth:491},i:{x_min:45,x_max:167,y_min:-13,y_max:631,ha:644,leftSideBearing:45,advanceWidth:220},j:{x_min:-127,x_max:261,y_min:-231,y_max:601,ha:832,leftSideBearing:-127,advanceWidth:308},k:{x_min:39,x_max:443,y_min:-3,y_max:700,ha:703,leftSideBearing:39,advanceWidth:497},l:{x_min:58,x_max:168,y_min:-8,y_max:686,ha:694,leftSideBearing:58,advanceWidth:227},m:{x_min:39,x_max:688,y_min:-14,y_max:501,ha:515,leftSideBearing:39,advanceWidth:718},n:{x_min:45,x_max:491,y_min:-32,y_max:512,ha:544,leftSideBearing:45,advanceWidth:541},o:{x_min:41,x_max:424,y_min:-12,y_max:493,ha:505,leftSideBearing:41,advanceWidth:447},p:{x_min:25,x_max:529,y_min:-260,y_max:500,ha:760,leftSideBearing:25,advanceWidth:573},q:{x_min:53,x_max:603,y_min:-235,y_max:514,ha:749,leftSideBearing:53,advanceWidth:623},r:{x_min:32,x_max:407,y_min:-7,y_max:492,ha:499,leftSideBearing:32,advanceWidth:460},s:{x_min:49,x_max:416,y_min:-12,y_max:519,ha:531,leftSideBearing:49,advanceWidth:460},t:{x_min:32,x_max:442,y_min:-5,y_max:684,ha:689,leftSideBearing:32,advanceWidth:469},u:{x_min:41,x_max:487,y_min:-5,y_max:507,ha:512,leftSideBearing:41,advanceWidth:510},v:{x_min:16,x_max:441,y_min:-20,y_max:542,ha:562,leftSideBearing:16,advanceWidth:456},w:{x_min:39,x_max:639,y_min:-22,y_max:505,ha:527,leftSideBearing:39,advanceWidth:661},x:{x_min:15,x_max:505,y_min:-39,y_max:539,ha:578,leftSideBearing:15,advanceWidth:541},y:{x_min:-98,x_max:501,y_min:-242,y_max:511,ha:753,leftSideBearing:-98,advanceWidth:548},z:{x_min:27,x_max:479,y_min:-3,y_max:494,ha:497,leftSideBearing:27,advanceWidth:494},"{":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"|":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"}":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308},"~":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:308}},fontFamily:"PetalumaScript",resolution:1e3,generatedOn:"2020-06-14T18:33:25.407Z"},Gi={spacing:50,glyphs:{" ":{x_min:0,x_max:509,y_min:0,y_max:2e3,ha:2e3,leftSideBearing:0,advanceWidth:509},0:{x_min:121,x_max:1048,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1168},1:{x_min:117,x_max:767,y_min:0,y_max:1456,ha:1456,leftSideBearing:117,advanceWidth:844},2:{x_min:75.8474576645637,x_max:1040,y_min:0,y_max:1477,ha:1477,leftSideBearing:75,advanceWidth:1131},3:{x_min:74.85365853658536,x_max:994,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1106},4:{x_min:63,x_max:1114,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1187},5:{x_min:96.8448275474953,x_max:982,y_min:-21,y_max:1456,ha:1477,leftSideBearing:96,advanceWidth:1081},6:{x_min:121,x_max:1067,y_min:-21,y_max:1477,ha:1498,leftSideBearing:121,advanceWidth:1144},7:{x_min:76,x_max:1060,y_min:0,y_max:1456,ha:1456,leftSideBearing:-30,advanceWidth:1128},8:{x_min:92,x_max:1039,y_min:-21,y_max:1477,ha:1498,leftSideBearing:92,advanceWidth:1131},9:{x_min:84,x_max:1026,y_min:-21,y_max:1477,ha:1498,leftSideBearing:84,advanceWidth:1154},"!":{x_min:143,x_max:340,y_min:0,y_max:1456,ha:1456,leftSideBearing:143,advanceWidth:483},'"':{x_min:166,x_max:634,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:770},"#":{x_min:63,x_max:1179,y_min:0,y_max:1456,ha:1456,leftSideBearing:63,advanceWidth:1246},$:{x_min:81.92156915727656,x_max:1012,y_min:-208,y_max:1693,ha:1901,leftSideBearing:81,advanceWidth:1110},"%":{x_min:77,x_max:1384,y_min:-21,y_max:1477,ha:1498,leftSideBearing:77,advanceWidth:1460},"&":{x_min:74,x_max:1242,y_min:-21,y_max:1477,ha:1498,leftSideBearing:74,advanceWidth:1289},"'":{x_min:166,x_max:324,y_min:1055,y_max:1560,ha:505,leftSideBearing:166,advanceWidth:460},"(":{x_min:114,x_max:650,y_min:-463,y_max:1636,ha:2099,leftSideBearing:114,advanceWidth:662},")":{x_min:11,x_max:547,y_min:-463,y_max:1636,ha:2099,leftSideBearing:11,advanceWidth:654},"*":{x_min:66,x_max:893,y_min:607,y_max:1456,ha:849,leftSideBearing:66,advanceWidth:958},"+":{x_min:73,x_max:1071,y_min:146,y_max:1206,ha:1060,leftSideBearing:73,advanceWidth:1145},",":{x_min:23,x_max:315,y_min:-311,y_max:221,ha:532,leftSideBearing:23,advanceWidth:404},"-":{x_min:154,x_max:643,y_min:538,y_max:692,ha:154,leftSideBearing:154,advanceWidth:797},".":{x_min:145,x_max:342,y_min:0,y_max:202,ha:202,leftSideBearing:145,advanceWidth:493},"/":{x_min:0,x_max:774,y_min:-125,y_max:1456,ha:1581,leftSideBearing:0,advanceWidth:824},":":{x_min:145,x_max:342,y_min:0,y_max:1082,ha:1082,leftSideBearing:145,advanceWidth:419},";":{x_min:53,x_max:345,y_min:-311,y_max:1082,ha:1393,leftSideBearing:53,advanceWidth:424},"<":{x_min:76,x_max:892,y_min:107,y_max:1013,ha:906,leftSideBearing:76,advanceWidth:1017},"=":{x_min:147,x_max:981,y_min:407,y_max:987,ha:580,leftSideBearing:147,advanceWidth:1127},">":{x_min:125,x_max:980,y_min:87,y_max:993,ha:906,leftSideBearing:125,advanceWidth:1060},"?":{x_min:65.92660602419838,x_max:890,y_min:0,y_max:1477,ha:1477,leftSideBearing:65,advanceWidth:953},"@":{x_min:84.3592218305664,x_max:1705.2346925277395,y_min:-453,y_max:1431,ha:1884,leftSideBearing:84,advanceWidth:1821},A:{x_min:70,x_max:1463,y_min:0,y_max:1456,ha:1456,leftSideBearing:70,advanceWidth:1533},B:{x_min:81,x_max:1253,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1322},C:{x_min:80,x_max:1174,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1290},D:{x_min:81,x_max:1291,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1356},E:{x_min:81,x_max:1190,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1306},F:{x_min:81,x_max:1176,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1256},G:{x_min:80,x_max:1226,y_min:-21,y_max:1477,ha:1498,leftSideBearing:80,advanceWidth:1346},H:{x_min:81,x_max:1497,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1578},I:{x_min:81,x_max:604,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:685},J:{x_min:60,x_max:1100,y_min:-21,y_max:1456,ha:1477,leftSideBearing:60,advanceWidth:1169},K:{x_min:81,x_max:1427,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1501},L:{x_min:81,x_max:1130,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1210},M:{x_min:94,x_max:1888,y_min:0,y_max:1456,ha:1456,leftSideBearing:94,advanceWidth:1982},N:{x_min:83,x_max:1509,y_min:0,y_max:1456,ha:1456,leftSideBearing:83,advanceWidth:1592},O:{x_min:70,x_max:1281,y_min:-21,y_max:1477,ha:1498,leftSideBearing:70,advanceWidth:1351},P:{x_min:81,x_max:1242,y_min:0,y_max:1456,ha:1456,leftSideBearing:81,advanceWidth:1297},Q:{x_min:70,x_max:1348,y_min:-245,y_max:1477,ha:1722,leftSideBearing:70,advanceWidth:1376},R:{x_min:81,x_max:1285,y_min:0,y_max:1455,ha:1455,leftSideBearing:81,advanceWidth:1385},S:{x_min:115,x_max:1116,y_min:-21,y_max:1477,ha:1498,leftSideBearing:115,advanceWidth:1206},T:{x_min:96,x_max:1306,y_min:0,y_max:1456,ha:1456,leftSideBearing:96,advanceWidth:1406},U:{x_min:70,x_max:1452,y_min:-21,y_max:1456,ha:1477,leftSideBearing:70,advanceWidth:1522},V:{x_min:65,x_max:1443,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1508},W:{x_min:72,x_max:2057,y_min:0,y_max:1456,ha:1456,leftSideBearing:72,advanceWidth:2129},X:{x_min:80,x_max:1449,y_min:0,y_max:1456,ha:1456,leftSideBearing:80,advanceWidth:1529},Y:{x_min:65,x_max:1396,y_min:0,y_max:1456,ha:1456,leftSideBearing:65,advanceWidth:1461},Z:{x_min:90,x_max:1107,y_min:0,y_max:1456,ha:1456,leftSideBearing:90,advanceWidth:1197},"[":{x_min:157,x_max:541,y_min:-312,y_max:1664,ha:1976,leftSideBearing:157,advanceWidth:573},"\\":{x_min:36,x_max:830,y_min:-125,y_max:1456,ha:1581,leftSideBearing:36,advanceWidth:841},"]":{x_min:23,x_max:408,y_min:-312,y_max:1664,ha:1976,leftSideBearing:23,advanceWidth:552},"^":{x_min:71,x_max:802,y_min:729,y_max:1456,ha:727,leftSideBearing:71,advanceWidth:864},_:{x_min:119,x_max:1041,y_min:-154,y_max:0,ha:154,leftSideBearing:119,advanceWidth:1168},"`":{x_min:40,x_max:456,y_min:1288,y_max:1560,ha:272,leftSideBearing:40,advanceWidth:496},a:{x_min:79,x_max:1053,y_min:-21,y_max:1102,ha:1123,leftSideBearing:79,advanceWidth:1132},b:{x_min:-16,x_max:1071,y_min:-21,y_max:1560,ha:1581,leftSideBearing:-16,advanceWidth:1145},c:{x_min:78,x_max:988,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1067},d:{x_min:78,x_max:1156,y_min:-21,y_max:1560,ha:1581,leftSideBearing:78,advanceWidth:1218},e:{x_min:74,x_max:980,y_min:-21,y_max:1102,ha:1123,leftSideBearing:74,advanceWidth:1059},f:{x_min:64,x_max:731,y_min:0,y_max:1581,ha:1581,leftSideBearing:64,advanceWidth:725},g:{x_min:78,x_max:1133,y_min:-437,y_max:1102,ha:1539,leftSideBearing:78,advanceWidth:1157},h:{x_min:49,x_max:1255,y_min:0,y_max:1560,ha:1560,leftSideBearing:49,advanceWidth:1315},i:{x_min:67,x_max:590,y_min:0,y_max:1560,ha:1560,leftSideBearing:67,advanceWidth:652},j:{x_min:-56,x_max:381,y_min:-437,y_max:1560,ha:1997,leftSideBearing:-56,advanceWidth:525},k:{x_min:64,x_max:1248,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:1287},l:{x_min:64,x_max:587,y_min:0,y_max:1560,ha:1560,leftSideBearing:64,advanceWidth:653},m:{x_min:74,x_max:1905,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1977},n:{x_min:74,x_max:1278,y_min:0,y_max:1102,ha:1102,leftSideBearing:74,advanceWidth:1343},o:{x_min:78,x_max:1046,y_min:-21,y_max:1102,ha:1123,leftSideBearing:78,advanceWidth:1124},p:{x_min:34,x_max:1119,y_min:-416,y_max:1102,ha:1518,leftSideBearing:34,advanceWidth:1197},q:{x_min:78,x_max:1135,y_min:-416,y_max:1102,ha:1518,leftSideBearing:78,advanceWidth:1139},r:{x_min:72,x_max:808,y_min:0,y_max:1102,ha:1102,leftSideBearing:72,advanceWidth:854},s:{x_min:104,x_max:933,y_min:-21,y_max:1102,ha:1123,leftSideBearing:104,advanceWidth:1022},t:{x_min:24,x_max:678,y_min:-17,y_max:1343,ha:1360,leftSideBearing:24,advanceWidth:730},u:{x_min:52,x_max:1181,y_min:-21,y_max:1082,ha:1103,leftSideBearing:52,advanceWidth:1245},v:{x_min:26,x_max:1176,y_min:0,y_max:1082,ha:1082,leftSideBearing:26,advanceWidth:1206},w:{x_min:52,x_max:1777,y_min:0,y_max:1082,ha:1082,leftSideBearing:52,advanceWidth:1823},x:{x_min:42,x_max:1163,y_min:0,y_max:1082,ha:1082,leftSideBearing:42,advanceWidth:1203},y:{x_min:24,x_max:1172,y_min:-437,y_max:1082,ha:1519,leftSideBearing:24,advanceWidth:1192},z:{x_min:88,x_max:960,y_min:0,y_max:1082,ha:1082,leftSideBearing:88,advanceWidth:1032},"{":{x_min:63,x_max:671,y_min:-364,y_max:1597,ha:1961,leftSideBearing:63,advanceWidth:701},"|":{x_min:150,x_max:307,y_min:-270,y_max:1456,ha:1726,leftSideBearing:150,advanceWidth:451},"}":{x_min:27,x_max:635,y_min:-364,y_max:1597,ha:1961,leftSideBearing:27,advanceWidth:701},"~":{x_min:121,x_max:1257,y_min:401,y_max:803,ha:402,leftSideBearing:121,advanceWidth:1386}},fontFamily:"Roboto Slab",resolution:2048,generatedOn:"2020-06-15T19:12:58.120Z"},Hi={glyphs:{0:{x_min:86,x_max:1038,y_min:-25,y_max:1472,ha:1497,leftSideBearing:86,advanceWidth:1139},1:{x_min:162,x_max:806,y_min:0,y_max:1472,ha:1472,leftSideBearing:162,advanceWidth:1139},2:{x_min:51,x_max:1036,y_min:0,y_max:1472,ha:1472,leftSideBearing:51,advanceWidth:1139},3:{x_min:77,x_max:1051,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},4:{x_min:38,x_max:1092,y_min:0,y_max:1472,ha:1472,leftSideBearing:38,advanceWidth:1139},5:{x_min:91,x_max:1077,y_min:-25,y_max:1446,ha:1471,leftSideBearing:91,advanceWidth:1139},6:{x_min:87,x_max:1066,y_min:-25,y_max:1472,ha:1497,leftSideBearing:87,advanceWidth:1139},7:{x_min:87,x_max:1048,y_min:0,y_max:1446,ha:1446,leftSideBearing:87,advanceWidth:1139},8:{x_min:83,x_max:1047,y_min:-26,y_max:1472,ha:1498,leftSideBearing:83,advanceWidth:1139},9:{x_min:65,x_max:1044,y_min:-26,y_max:1472,ha:1498,leftSideBearing:65,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:184,x_max:488,y_min:0,y_max:1466,ha:1466,leftSideBearing:184,advanceWidth:682},'"':{x_min:112,x_max:869,y_min:945,y_max:1466,ha:521,leftSideBearing:112,advanceWidth:971},"#":{x_min:18,x_max:1115,y_min:-25,y_max:1491,ha:1516,leftSideBearing:18,advanceWidth:1139},$:{x_min:70,x_max:1048,y_min:-205,y_max:1584,ha:1789,leftSideBearing:70,advanceWidth:1139},"%":{x_min:89,x_max:1725,y_min:-59,y_max:1491,ha:1550,leftSideBearing:89,advanceWidth:1821},"&":{x_min:90,x_max:1446,y_min:-38,y_max:1491,ha:1529,leftSideBearing:90,advanceWidth:1479},"'":{x_min:92,x_max:398,y_min:945,y_max:1466,ha:521,leftSideBearing:92,advanceWidth:487},"(":{x_min:107,x_max:616,y_min:-431,y_max:1491,ha:1922,leftSideBearing:107,advanceWidth:682},")":{x_min:67,x_max:576,y_min:-431,y_max:1491,ha:1922,leftSideBearing:67,advanceWidth:682},"*":{x_min:28,x_max:753,y_min:792,y_max:1491,ha:699,leftSideBearing:28,advanceWidth:797},"+":{x_min:85,x_max:1110,y_min:211,y_max:1236,ha:1025,leftSideBearing:85,advanceWidth:1196},",":{x_min:117,x_max:421,y_min:-327,y_max:281,ha:608,leftSideBearing:117,advanceWidth:569},"-":{x_min:115,x_max:667,y_min:391,y_max:672,ha:281,leftSideBearing:115,advanceWidth:682},".":{x_min:147,x_max:428,y_min:0,y_max:281,ha:281,leftSideBearing:147,advanceWidth:569},"/":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},":":{x_min:201,x_max:482,y_min:0,y_max:1062,ha:1062,leftSideBearing:201,advanceWidth:682},";":{x_min:170,x_max:474,y_min:-327,y_max:1062,ha:1389,leftSideBearing:170,advanceWidth:682},"<":{x_min:95,x_max:1100,y_min:167,y_max:1281,ha:1114,leftSideBearing:95,advanceWidth:1196},"=":{x_min:85,x_max:1110,y_min:372,y_max:1074,ha:702,leftSideBearing:85,advanceWidth:1196},">":{x_min:95,x_max:1101,y_min:166,y_max:1279,ha:1113,leftSideBearing:95,advanceWidth:1196},"?":{x_min:106,x_max:1158,y_min:0,y_max:1481,ha:1481,leftSideBearing:106,advanceWidth:1251},"@":{x_min:61,x_max:1990,y_min:-431,y_max:1492,ha:1923,leftSideBearing:61,advanceWidth:1997},A:{x_min:0,x_max:1471,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1479},B:{x_min:150,x_max:1378,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},C:{x_min:97,x_max:1374,y_min:-25,y_max:1491,ha:1516,leftSideBearing:97,advanceWidth:1479},D:{x_min:148,x_max:1377,y_min:0,y_max:1466,ha:1466,leftSideBearing:148,advanceWidth:1479},E:{x_min:149,x_max:1264,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},F:{x_min:151,x_max:1156,y_min:0,y_max:1466,ha:1466,leftSideBearing:151,advanceWidth:1251},G:{x_min:98,x_max:1469,y_min:-25,y_max:1491,ha:1516,leftSideBearing:98,advanceWidth:1593},H:{x_min:150,x_max:1322,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},I:{x_min:140,x_max:436,y_min:0,y_max:1466,ha:1466,leftSideBearing:140,advanceWidth:569},J:{x_min:35,x_max:973,y_min:-25,y_max:1466,ha:1491,leftSideBearing:35,advanceWidth:1139},K:{x_min:153,x_max:1475,y_min:0,y_max:1466,ha:1466,leftSideBearing:153,advanceWidth:1479},L:{x_min:157,x_max:1189,y_min:0,y_max:1454,ha:1454,leftSideBearing:157,advanceWidth:1251},M:{x_min:145,x_max:1561,y_min:0,y_max:1466,ha:1466,leftSideBearing:145,advanceWidth:1706},N:{x_min:152,x_max:1315,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1479},O:{x_min:89,x_max:1511,y_min:-25,y_max:1491,ha:1516,leftSideBearing:89,advanceWidth:1593},P:{x_min:149,x_max:1272,y_min:0,y_max:1466,ha:1466,leftSideBearing:149,advanceWidth:1366},Q:{x_min:89,x_max:1566,y_min:-147,y_max:1491,ha:1638,leftSideBearing:89,advanceWidth:1593},R:{x_min:150,x_max:1468,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1479},S:{x_min:74,x_max:1266,y_min:-26,y_max:1491,ha:1517,leftSideBearing:74,advanceWidth:1366},T:{x_min:44,x_max:1209,y_min:0,y_max:1466,ha:1466,leftSideBearing:44,advanceWidth:1251},U:{x_min:147,x_max:1316,y_min:-25,y_max:1466,ha:1491,leftSideBearing:147,advanceWidth:1479},V:{x_min:-1,x_max:1364,y_min:0,y_max:1466,ha:1466,leftSideBearing:-1,advanceWidth:1366},W:{x_min:7,x_max:1931,y_min:0,y_max:1466,ha:1466,leftSideBearing:7,advanceWidth:1933},X:{x_min:0,x_max:1363,y_min:0,y_max:1466,ha:1466,leftSideBearing:0,advanceWidth:1366},Y:{x_min:-3,x_max:1368,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},Z:{x_min:22,x_max:1213,y_min:0,y_max:1466,ha:1466,leftSideBearing:22,advanceWidth:1251},"[":{x_min:146,x_max:644,y_min:-413,y_max:1466,ha:1879,leftSideBearing:146,advanceWidth:682},"\\":{x_min:-3,x_max:571,y_min:-25,y_max:1491,ha:1516,leftSideBearing:-3,advanceWidth:569},"]":{x_min:38,x_max:536,y_min:-413,y_max:1466,ha:1879,leftSideBearing:38,advanceWidth:682},"^":{x_min:115,x_max:1080,y_min:692,y_max:1491,ha:799,leftSideBearing:115,advanceWidth:1196},_:{x_min:-19,x_max:1149,y_min:-405,y_max:-223,ha:182,leftSideBearing:-19,advanceWidth:1139},"`":{x_min:42,x_max:495,y_min:1192,y_max:1491,ha:299,leftSideBearing:42,advanceWidth:682},a:{x_min:73,x_max:1070,y_min:-24,y_max:1086,ha:1110,leftSideBearing:73,advanceWidth:1139},b:{x_min:135,x_max:1172,y_min:-24,y_max:1466,ha:1490,leftSideBearing:135,advanceWidth:1251},c:{x_min:85,x_max:1087,y_min:-24,y_max:1086,ha:1110,leftSideBearing:85,advanceWidth:1139},d:{x_min:84,x_max:1121,y_min:-24,y_max:1466,ha:1490,leftSideBearing:84,advanceWidth:1251},e:{x_min:65,x_max:1057.2517482517483,y_min:-24,y_max:1086,ha:1110,leftSideBearing:65,advanceWidth:1139},f:{x_min:24,x_max:742,y_min:0,y_max:1491,ha:1491,leftSideBearing:24,advanceWidth:682},g:{x_min:84,x_max:1120,y_min:-431,y_max:1086,ha:1517,leftSideBearing:84,advanceWidth:1251},h:{x_min:146,x_max:1113,y_min:0,y_max:1466,ha:1466,leftSideBearing:146,advanceWidth:1251},i:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},j:{x_min:-94,x_max:422,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:569},k:{x_min:137,x_max:1119,y_min:0,y_max:1466,ha:1466,leftSideBearing:137,advanceWidth:1139},l:{x_min:147,x_max:428,y_min:0,y_max:1466,ha:1466,leftSideBearing:147,advanceWidth:569},m:{x_min:126,x_max:1688,y_min:0,y_max:1086,ha:1086,leftSideBearing:126,advanceWidth:1821},n:{x_min:145,x_max:1113,y_min:0,y_max:1086,ha:1086,leftSideBearing:145,advanceWidth:1251},o:{x_min:82,x_max:1178,y_min:-24,y_max:1086,ha:1110,leftSideBearing:82,advanceWidth:1251},p:{x_min:139,x_max:1175,y_min:-404,y_max:1086,ha:1490,leftSideBearing:139,advanceWidth:1251},q:{x_min:91,x_max:1122,y_min:-404,y_max:1086,ha:1490,leftSideBearing:91,advanceWidth:1251},r:{x_min:135,x_max:823,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:797},s:{x_min:48,x_max:1040,y_min:-24,y_max:1086,ha:1110,leftSideBearing:48,advanceWidth:1139},t:{x_min:31,x_max:657,y_min:-24,y_max:1437,ha:1461,leftSideBearing:31,advanceWidth:682},u:{x_min:141,x_max:1107,y_min:-24,y_max:1062,ha:1086,leftSideBearing:141,advanceWidth:1251},v:{x_min:11,x_max:1114,y_min:0,y_max:1062,ha:1062,leftSideBearing:11,advanceWidth:1139},w:{x_min:9,x_max:1592,y_min:0,y_max:1062,ha:1062,leftSideBearing:9,advanceWidth:1593},x:{x_min:12,x_max:1120,y_min:0,y_max:1062,ha:1062,leftSideBearing:12,advanceWidth:1139},y:{x_min:14,x_max:1106,y_min:-431,y_max:1062,ha:1493,leftSideBearing:14,advanceWidth:1139},z:{x_min:34,x_max:982,y_min:0,y_max:1062,ha:1062,leftSideBearing:34,advanceWidth:1024},"{":{x_min:60,x_max:744,y_min:-431,y_max:1491,ha:1922,leftSideBearing:60,advanceWidth:797},"|":{x_min:176,x_max:399,y_min:-431,y_max:1491,ha:1922,leftSideBearing:176,advanceWidth:573},"}":{x_min:45,x_max:729,y_min:-431,y_max:1491,ha:1922,leftSideBearing:45,advanceWidth:797},"~":{x_min:67,x_max:1129,y_min:519,y_max:924,ha:405,leftSideBearing:67,advanceWidth:1196}},fontFamily:"Arial",resolution:2048,generatedOn:"2022-11-04T20:05:21.000Z"},Xi={smufl:!1,name:"SANS",spacing:50,Description:"Built-in sans-serif font",bold:!0,italic:!0,monospaced:!1,serifs:!1,glyphs:{0:{x_min:85,x_max:1041,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139},1:{x_min:223,x_max:763,y_min:0,y_max:1472,ha:1472,leftSideBearing:223,advanceWidth:1139},2:{x_min:61.840001123045234,x_max:1031,y_min:0,y_max:1472,ha:1472,leftSideBearing:61,advanceWidth:1139},3:{x_min:86,x_max:1046,y_min:-26,y_max:1472,ha:1498,leftSideBearing:86,advanceWidth:1139},4:{x_min:26,x_max:1040,y_min:0,y_max:1466,ha:1466,leftSideBearing:26,advanceWidth:1139},5:{x_min:85,x_max:1057,y_min:-25,y_max:1446,ha:1471,leftSideBearing:85,advanceWidth:1139},6:{x_min:77,x_max:1045,y_min:-25,y_max:1472,ha:1497,leftSideBearing:77,advanceWidth:1139},7:{x_min:97,x_max:1046,y_min:0,y_max:1447,ha:1447,leftSideBearing:97,advanceWidth:1139},8:{x_min:83,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:83,advanceWidth:1139},9:{x_min:85,x_max:1049,y_min:-25,y_max:1472,ha:1497,leftSideBearing:85,advanceWidth:1139}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:569},"!":{x_min:176,x_max:399,y_min:0,y_max:1466,ha:1466,leftSideBearing:176,advanceWidth:569},'"':{x_min:94,x_max:631,y_min:947,y_max:1466,ha:519,leftSideBearing:94,advanceWidth:727},"#":{x_min:21,x_max:1113,y_min:-25,y_max:1491,ha:1516,leftSideBearing:21,advanceWidth:1139},$:{x_min:73,x_max:1043,y_min:-211,y_max:1601,ha:1812,leftSideBearing:73,advanceWidth:1139},"%":{x_min:119,x_max:1695,y_min:-54,y_max:1491,ha:1545,leftSideBearing:119,advanceWidth:1821},"&":{x_min:88,x_max:1319,y_min:-34,y_max:1491,ha:1525,leftSideBearing:88,advanceWidth:1366},"'":{x_min:90,x_max:295,y_min:947,y_max:1466,ha:519,leftSideBearing:90,advanceWidth:391},"(":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},")":{x_min:124,x_max:608,y_min:-431,y_max:1491,ha:1922,leftSideBearing:124,advanceWidth:682},"*":{x_min:64,x_max:725,y_min:867,y_max:1491,ha:624,leftSideBearing:64,advanceWidth:797},"+":{x_min:114,x_max:1082,y_min:237,y_max:1206,ha:969,leftSideBearing:114,advanceWidth:1196},",":{x_min:170,x_max:387,y_min:-290,y_max:205,ha:495,leftSideBearing:170,advanceWidth:569},"-":{x_min:65,x_max:618,y_min:440,y_max:621,ha:181,leftSideBearing:65,advanceWidth:682},".":{x_min:186,x_max:391,y_min:0,y_max:205,ha:205,leftSideBearing:186,advanceWidth:569},"/":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},":":{x_min:185,x_max:390,y_min:0,y_max:1062,ha:1062,leftSideBearing:185,advanceWidth:569},";":{x_min:170,x_max:387,y_min:-290,y_max:1062,ha:1352,leftSideBearing:170,advanceWidth:569},"<":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"=":{x_min:114,x_max:1082,y_min:417,y_max:1030,ha:613,leftSideBearing:114,advanceWidth:1196},">":{x_min:112,x_max:1083,y_min:226,y_max:1219,ha:993,leftSideBearing:112,advanceWidth:1196},"?":{x_min:90,x_max:1036,y_min:0,y_max:1491,ha:1491,leftSideBearing:90,advanceWidth:1139},"@":{x_min:111,x_max:2005,y_min:-431,y_max:1493,ha:1924,leftSideBearing:111,advanceWidth:2079},A:{x_min:-3,x_max:1369,y_min:0,y_max:1466,ha:1466,leftSideBearing:-3,advanceWidth:1366},B:{x_min:150,x_max:1257,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},C:{x_min:102,x_max:1398,y_min:-25,y_max:1491,ha:1516,leftSideBearing:102,advanceWidth:1479},D:{x_min:158,x_max:1370,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1479},E:{x_min:162,x_max:1256,y_min:0,y_max:1466,ha:1466,leftSideBearing:162,advanceWidth:1366},F:{x_min:168,x_max:1157,y_min:0,y_max:1466,ha:1466,leftSideBearing:168,advanceWidth:1251},G:{x_min:109,x_max:1465,y_min:-25,y_max:1491,ha:1516,leftSideBearing:109,advanceWidth:1593},H:{x_min:164,x_max:1314,y_min:0,y_max:1466,ha:1466,leftSideBearing:164,advanceWidth:1479},I:{x_min:191,x_max:385,y_min:0,y_max:1466,ha:1466,leftSideBearing:191,advanceWidth:569},J:{x_min:58.84976474807333,x_max:865,y_min:-25,y_max:1466,ha:1491,leftSideBearing:58,advanceWidth:1024},K:{x_min:150,x_max:1362,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1366},L:{x_min:150,x_max:1066,y_min:0,y_max:1466,ha:1466,leftSideBearing:150,advanceWidth:1139},M:{x_min:152,x_max:1551,y_min:0,y_max:1466,ha:1466,leftSideBearing:152,advanceWidth:1706},N:{x_min:156,x_max:1311,y_min:0,y_max:1466,ha:1466,leftSideBearing:156,advanceWidth:1479},O:{x_min:99,x_max:1501,y_min:-25,y_max:1492,ha:1517,leftSideBearing:99,advanceWidth:1593},P:{x_min:158,x_max:1277,y_min:0,y_max:1466,ha:1466,leftSideBearing:158,advanceWidth:1366},Q:{x_min:88,x_max:1518,y_min:-114,y_max:1492,ha:1606,leftSideBearing:88,advanceWidth:1593},R:{x_min:161,x_max:1453,y_min:0,y_max:1466,ha:1466,leftSideBearing:161,advanceWidth:1479},S:{x_min:92,x_max:1259,y_min:-25,y_max:1491,ha:1516,leftSideBearing:92,advanceWidth:1366},T:{x_min:48,x_max:1210,y_min:0,y_max:1466,ha:1466,leftSideBearing:48,advanceWidth:1251},U:{x_min:161,x_max:1314,y_min:-25,y_max:1466,ha:1491,leftSideBearing:161,advanceWidth:1479},V:{x_min:9,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},W:{x_min:25,x_max:1910,y_min:0,y_max:1466,ha:1466,leftSideBearing:25,advanceWidth:1933},X:{x_min:9,x_max:1353,y_min:0,y_max:1466,ha:1466,leftSideBearing:9,advanceWidth:1366},Y:{x_min:6,x_max:1350,y_min:0,y_max:1466,ha:1466,leftSideBearing:6,advanceWidth:1366},Z:{x_min:41,x_max:1200,y_min:0,y_max:1466,ha:1466,leftSideBearing:41,advanceWidth:1251},"[":{x_min:139,x_max:536,y_min:-407,y_max:1466,ha:1873,leftSideBearing:139,advanceWidth:569},"\\":{x_min:0,x_max:569,y_min:-25,y_max:1491,ha:1516,leftSideBearing:0,advanceWidth:569},"]":{x_min:39,x_max:436,y_min:-407,y_max:1466,ha:1873,leftSideBearing:39,advanceWidth:569},"^":{x_min:54,x_max:907,y_min:690,y_max:1491,ha:801,leftSideBearing:54,advanceWidth:961},_:{x_min:-31,x_max:1162,y_min:-407,y_max:-277,ha:130,leftSideBearing:-31,advanceWidth:1139},"`":{x_min:89,x_max:465,y_min:1194,y_max:1474,ha:280,leftSideBearing:89,advanceWidth:682},a:{x_min:74,x_max:1052,y_min:-24,y_max:1086,ha:1110,leftSideBearing:74,advanceWidth:1139},b:{x_min:134,x_max:1055,y_min:-24,y_max:1466,ha:1490,leftSideBearing:134,advanceWidth:1139},c:{x_min:80,x_max:1005,y_min:-24,y_max:1086,ha:1110,leftSideBearing:80,advanceWidth:1024},d:{x_min:70,x_max:991,y_min:-24,y_max:1466,ha:1490,leftSideBearing:70,advanceWidth:1139},e:{x_min:75,x_max:1054,y_min:-24,y_max:1086,ha:1110,leftSideBearing:75,advanceWidth:1139},f:{x_min:19,x_max:640,y_min:0,y_max:1491,ha:1491,leftSideBearing:19,advanceWidth:569},g:{x_min:66,x_max:1002,y_min:-431,y_max:1086,ha:1517,leftSideBearing:66,advanceWidth:1139},h:{x_min:135,x_max:1e3,y_min:0,y_max:1466,ha:1466,leftSideBearing:135,advanceWidth:1139},i:{x_min:136,x_max:316,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:455},j:{x_min:-94,x_max:314,y_min:-431,y_max:1466,ha:1897,leftSideBearing:-94,advanceWidth:455},k:{x_min:136,x_max:1016,y_min:0,y_max:1466,ha:1466,leftSideBearing:136,advanceWidth:1024},l:{x_min:131,x_max:311,y_min:0,y_max:1466,ha:1466,leftSideBearing:131,advanceWidth:455},m:{x_min:135,x_max:1574,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1706},n:{x_min:135,x_max:998,y_min:0,y_max:1086,ha:1086,leftSideBearing:135,advanceWidth:1139},o:{x_min:68,x_max:1063,y_min:-24,y_max:1086,ha:1110,leftSideBearing:68,advanceWidth:1139},p:{x_min:135,x_max:1057,y_min:-407,y_max:1086,ha:1493,leftSideBearing:135,advanceWidth:1139},q:{x_min:72,x_max:992,y_min:-407,y_max:1086,ha:1493,leftSideBearing:72,advanceWidth:1139},r:{x_min:133,x_max:710,y_min:0,y_max:1086,ha:1086,leftSideBearing:133,advanceWidth:682},s:{x_min:63,x_max:945,y_min:-24,y_max:1086,ha:1110,leftSideBearing:63,advanceWidth:1024},t:{x_min:36,x_max:554,y_min:-14,y_max:1433,ha:1447,leftSideBearing:36,advanceWidth:569},u:{x_min:131,x_max:992,y_min:-24,y_max:1062,ha:1086,leftSideBearing:131,advanceWidth:1139},v:{x_min:26,x_max:1e3,y_min:0,y_max:1062,ha:1062,leftSideBearing:26,advanceWidth:1024},w:{x_min:6,x_max:1463,y_min:0,y_max:1062,ha:1062,leftSideBearing:6,advanceWidth:1479},x:{x_min:15,x_max:1009,y_min:0,y_max:1062,ha:1062,leftSideBearing:15,advanceWidth:1024},y:{x_min:33,x_max:1006,y_min:-431,y_max:1062,ha:1493,leftSideBearing:33,advanceWidth:1024},z:{x_min:40,x_max:980,y_min:0,y_max:1062,ha:1062,leftSideBearing:40,advanceWidth:1024},"{":{x_min:57,x_max:636,y_min:-431,y_max:1491,ha:1922,leftSideBearing:57,advanceWidth:684},"|":{x_min:188,x_max:345,y_min:-431,y_max:1491,ha:1922,leftSideBearing:188,advanceWidth:532},"}":{x_min:47,x_max:626,y_min:-431,y_max:1491,ha:1922,leftSideBearing:47,advanceWidth:684},"~":{x_min:87,x_max:1110,y_min:557,y_max:885,ha:328,leftSideBearing:87,advanceWidth:1196}},fontFamily:"sans-serif",resolution:2048,generatedOn:"2020-10-18T18:48:11.823Z"},ji={smufl:!1,name:"SERIF",spacing:50,Description:"Built-in serif font",bold:!0,italic:!0,monospaced:!1,serifs:!0,glyphs:{0:{x_min:49,x_max:975,y_min:-27,y_max:1383,ha:1410,leftSideBearing:49,advanceWidth:1024},1:{x_min:227,x_max:811,y_min:0,y_max:1383,ha:1383,leftSideBearing:227,advanceWidth:1024},2:{x_min:61,x_max:965,y_min:0,y_max:1383,ha:1383,leftSideBearing:61,advanceWidth:1024},3:{x_min:88,x_max:883,y_min:-27,y_max:1383,ha:1410,leftSideBearing:88,advanceWidth:1024},4:{x_min:25,x_max:967,y_min:0,y_max:1384,ha:1384,leftSideBearing:25,advanceWidth:1024},5:{x_min:66,x_max:898,y_min:-27,y_max:1409,ha:1436,leftSideBearing:66,advanceWidth:1024},6:{x_min:70,x_max:958,y_min:-27,y_max:1401,ha:1428,leftSideBearing:70,advanceWidth:1024},7:{x_min:41,x_max:920,y_min:-16,y_max:1356,ha:1372,leftSideBearing:41,advanceWidth:1024},8:{x_min:115,x_max:911,y_min:-27,y_max:1383,ha:1410,leftSideBearing:115,advanceWidth:1024},9:{x_min:61,x_max:940,y_min:-41,y_max:1383,ha:1424,leftSideBearing:61,advanceWidth:1024}," ":{x_min:0,x_max:0,y_min:0,y_max:0,ha:0,leftSideBearing:0,advanceWidth:512},"!":{x_min:266,x_max:488,y_min:-22,y_max:1383,ha:1405,leftSideBearing:266,advanceWidth:682},'"':{x_min:157.2000021972655,x_max:678.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:157,advanceWidth:836},"#":{x_min:10,x_max:1016,y_min:-1,y_max:1356,ha:1357,leftSideBearing:10,advanceWidth:1024},$:{x_min:90,x_max:936,y_min:-180,y_max:1492,ha:1672,leftSideBearing:90,advanceWidth:1024},"%":{x_min:125,x_max:1581,y_min:-30,y_max:1388,ha:1418,leftSideBearing:125,advanceWidth:1706},"&":{x_min:86,x_max:1536,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1593},"'":{x_min:97.20000219726548,x_max:273.2500021457677,y_min:881,y_max:1385,ha:504,leftSideBearing:97,advanceWidth:369},"(":{x_min:98,x_max:623,y_min:-363,y_max:1383,ha:1746,leftSideBearing:98,advanceWidth:682},")":{x_min:59,x_max:584,y_min:-363,y_max:1383,ha:1746,leftSideBearing:59,advanceWidth:682},"*":{x_min:137.96078522291893,x_max:886.039214777081,y_min:543,y_max:1383,ha:840,leftSideBearing:137,advanceWidth:1024},"+":{x_min:61,x_max:1093,y_min:2,y_max:1034,ha:1032,leftSideBearing:61,advanceWidth:1155},",":{x_min:115,x_max:399,y_min:-291,y_max:208,ha:499,leftSideBearing:115,advanceWidth:512},"-":{x_min:80,x_max:584,y_min:396,y_max:525,ha:129,leftSideBearing:80,advanceWidth:682},".":{x_min:143,x_max:371,y_min:-22,y_max:205,ha:227,leftSideBearing:143,advanceWidth:512},"/":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},":":{x_min:166,x_max:394,y_min:-22,y_max:943,ha:965,leftSideBearing:166,advanceWidth:569},";":{x_min:164,x_max:448,y_min:-290,y_max:943,ha:1233,leftSideBearing:164,advanceWidth:569},"<":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"=":{x_min:61,x_max:1093,y_min:246,y_max:791,ha:545,leftSideBearing:61,advanceWidth:1155},">":{x_min:57,x_max:1098,y_min:-15,y_max:1051,ha:1066,leftSideBearing:57,advanceWidth:1155},"?":{x_min:139,x_max:848,y_min:-15,y_max:1383,ha:1398,leftSideBearing:139,advanceWidth:909},"@":{x_min:238,x_max:1657,y_min:-29,y_max:1386,ha:1415,leftSideBearing:238,advanceWidth:1886},A:{x_min:31,x_max:1445,y_min:0,y_max:1380,ha:1380,leftSideBearing:31,advanceWidth:1479},B:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},C:{x_min:57,x_max:1296,y_min:-28,y_max:1383,ha:1411,leftSideBearing:57,advanceWidth:1366},D:{x_min:33,x_max:1403,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1479},E:{x_min:25,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},F:{x_min:25,x_max:1119,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1139},G:{x_min:66,x_max:1452,y_min:-28,y_max:1383,ha:1411,leftSideBearing:66,advanceWidth:1479},H:{x_min:39,x_max:1438,y_min:0,y_max:1356,ha:1356,leftSideBearing:39,advanceWidth:1479},I:{x_min:37,x_max:642,y_min:0,y_max:1356,ha:1356,leftSideBearing:37,advanceWidth:682},J:{x_min:20,x_max:758,y_min:-28,y_max:1356,ha:1384,leftSideBearing:20,advanceWidth:797},K:{x_min:70,x_max:1479,y_min:0,y_max:1356,ha:1356,leftSideBearing:70,advanceWidth:1479},L:{x_min:25,x_max:1224,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1251},M:{x_min:25,x_max:1768,y_min:0,y_max:1356,ha:1356,leftSideBearing:25,advanceWidth:1821},N:{x_min:25,x_max:1450,y_min:-22,y_max:1356,ha:1378,leftSideBearing:25,advanceWidth:1479},O:{x_min:70,x_max:1409,y_min:-28,y_max:1383,ha:1411,leftSideBearing:70,advanceWidth:1479},P:{x_min:33,x_max:1110,y_min:0,y_max:1356,ha:1356,leftSideBearing:33,advanceWidth:1139},Q:{x_min:70,x_max:1435,y_min:-364.28571588721996,y_max:1383,ha:1747.28571588722,leftSideBearing:70,advanceWidth:1479},R:{x_min:35,x_max:1347,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1366},S:{x_min:86,x_max:1006,y_min:-28,y_max:1383,ha:1411,leftSideBearing:86,advanceWidth:1139},T:{x_min:35,x_max:1214,y_min:0,y_max:1356,ha:1356,leftSideBearing:35,advanceWidth:1251},U:{x_min:29,x_max:1444,y_min:-28,y_max:1356,ha:1384,leftSideBearing:29,advanceWidth:1479},V:{x_min:33,x_max:1428,y_min:-22,y_max:1356,ha:1378,leftSideBearing:33,advanceWidth:1479},W:{x_min:10,x_max:1906,y_min:-22,y_max:1356,ha:1378,leftSideBearing:10,advanceWidth:1933},X:{x_min:20,x_max:1449,y_min:0,y_max:1356,ha:1356,leftSideBearing:20,advanceWidth:1479},Y:{x_min:45,x_max:1441,y_min:0,y_max:1356,ha:1356,leftSideBearing:45,advanceWidth:1479},Z:{x_min:18,x_max:1222,y_min:0,y_max:1356,ha:1356,leftSideBearing:18,advanceWidth:1251},"[":{x_min:180,x_max:612,y_min:-319,y_max:1355,ha:1674,leftSideBearing:180,advanceWidth:682},"\\":{x_min:-17,x_max:586,y_min:-27,y_max:1383,ha:1410,leftSideBearing:-17,advanceWidth:569},"]":{x_min:70,x_max:502,y_min:-319,y_max:1355,ha:1674,leftSideBearing:70,advanceWidth:682},"^":{x_min:49,x_max:914,y_min:608,y_max:1355,ha:747,leftSideBearing:49,advanceWidth:961},_:{x_min:0,x_max:1024,y_min:-255,y_max:-153,ha:102,leftSideBearing:0,advanceWidth:1024},"`":{x_min:39,x_max:499,y_min:1037,y_max:1392.509803639748,ha:355.50980363974804,leftSideBearing:39,advanceWidth:682},a:{x_min:76,x_max:905,y_min:-20,y_max:942,ha:962,leftSideBearing:76,advanceWidth:909},b:{x_min:6,x_max:958,y_min:-20,y_max:1399,ha:1419,leftSideBearing:6,advanceWidth:1024},c:{x_min:51,x_max:843,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},d:{x_min:55,x_max:1006,y_min:-20,y_max:1399,ha:1419,leftSideBearing:55,advanceWidth:1024},e:{x_min:51,x_max:868,y_min:-20,y_max:942,ha:962,leftSideBearing:51,advanceWidth:909},f:{x_min:41,x_max:783,y_min:0,y_max:1399,ha:1399,leftSideBearing:41,advanceWidth:682},g:{x_min:57,x_max:963,y_min:-446,y_max:942,ha:1388,leftSideBearing:57,advanceWidth:1024},h:{x_min:18,x_max:997,y_min:0,y_max:1399,ha:1399,leftSideBearing:18,advanceWidth:1024},i:{x_min:33,x_max:516,y_min:0,y_max:1399,ha:1399,leftSideBearing:33,advanceWidth:569},j:{x_min:-142,x_max:397,y_min:-446,y_max:1399,ha:1845,leftSideBearing:-142,advanceWidth:569},k:{x_min:14,x_max:1029,y_min:0,y_max:1399,ha:1399,leftSideBearing:14,advanceWidth:1024},l:{x_min:39,x_max:523,y_min:0,y_max:1399,ha:1399,leftSideBearing:39,advanceWidth:569},m:{x_min:33,x_max:1587,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1593},n:{x_min:33,x_max:993,y_min:0,y_max:944,ha:944,leftSideBearing:33,advanceWidth:1024},o:{x_min:59,x_max:963,y_min:-20,y_max:942,ha:962,leftSideBearing:59,advanceWidth:1024},p:{x_min:10,x_max:964,y_min:-443,y_max:944,ha:1387,leftSideBearing:10,advanceWidth:1024},q:{x_min:49,x_max:999,y_min:-443,y_max:942.0135137169275,ha:1385.0135137169275,leftSideBearing:49,advanceWidth:1024},r:{x_min:10,x_max:685,y_min:0,y_max:944,ha:944,leftSideBearing:10,advanceWidth:682},s:{x_min:104,x_max:713,y_min:-20,y_max:942.0263161804552,ha:962.0263161804552,leftSideBearing:104,advanceWidth:797},t:{x_min:27,x_max:572,y_min:-18,y_max:1186,ha:1204,leftSideBearing:27,advanceWidth:569},u:{x_min:18,x_max:981,y_min:-21,y_max:921,ha:942,leftSideBearing:18,advanceWidth:1024},v:{x_min:39,x_max:976,y_min:-28,y_max:921,ha:949,leftSideBearing:39,advanceWidth:1024},w:{x_min:43,x_max:1423,y_min:-28,y_max:921,ha:949,leftSideBearing:43,advanceWidth:1479},x:{x_min:35,x_max:989,y_min:0,y_max:921,ha:921,leftSideBearing:35,advanceWidth:1024},y:{x_min:29,x_max:976,y_min:-445,y_max:921,ha:1366,leftSideBearing:29,advanceWidth:1024},z:{x_min:55,x_max:855,y_min:0,y_max:921,ha:921,leftSideBearing:55,advanceWidth:909},"{":{x_min:205,x_max:717,y_min:-377,y_max:1397,ha:1774,leftSideBearing:205,advanceWidth:983},"|":{x_min:137,x_max:273,y_min:-512,y_max:1535,ha:2047,leftSideBearing:137,advanceWidth:410},"}":{x_min:266,x_max:778,y_min:-377,y_max:1397,ha:1774,leftSideBearing:266,advanceWidth:983},"~":{x_min:82,x_max:1028,y_min:380,y_max:666,ha:286,leftSideBearing:82,advanceWidth:1108}},fontFamily:"serif",resolution:2048,generatedOn:"2020-10-18T19:03:12.514Z"};class Vi{static sortAndUnique(t,e,i){if(t.length>1){const b=[];let a;t.sort(e);for(let e=0;e {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Use instead of `instanceof` as a more flexible type guard.\n * @param obj check if this object's CATEGORY matches the provided category.\n * @param category a string representing a category of VexFlow objects.\n * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`.\n * If `false`, we do not check the superclass or other ancestors.\n * @returns true if `obj` has a static `CATEGORY` property that matches `category`.\n */\nexport function isCategory(obj, category, checkAncestors = true) {\n // obj is undefined, a number, a primitive string, or null.\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n // `obj.constructor` is a reference to the constructor function that created the `obj` instance.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor\n let constructorFcn = obj.constructor;\n // Check if the object's static .CATEGORY matches the provided category.\n if (checkAncestors) {\n // Walk up the prototype chain to look for a matching obj.constructor.CATEGORY.\n while (obj !== null) {\n constructorFcn = obj.constructor;\n if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) {\n return true;\n }\n obj = Object.getPrototypeOf(obj);\n }\n return false;\n }\n else {\n // Do not walk up the prototype chain. Just check this particular object's static .CATEGORY string.\n return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category;\n }\n}\nexport const isAccidental = (obj) => isCategory(obj, Category.Accidental);\nexport const isAnnotation = (obj) => isCategory(obj, Category.Annotation);\nexport const isBarline = (obj) => isCategory(obj, Category.Barline);\nexport const isDot = (obj) => isCategory(obj, Category.Dot);\nexport const isGraceNote = (obj) => isCategory(obj, Category.GraceNote);\nexport const isGraceNoteGroup = (obj) => isCategory(obj, Category.GraceNoteGroup);\nexport const isNote = (obj) => isCategory(obj, Category.Note);\nexport const isRenderContext = (obj) => isCategory(obj, Category.RenderContext);\nexport const isStaveNote = (obj) => isCategory(obj, Category.StaveNote);\nexport const isStemmableNote = (obj) => isCategory(obj, Category.StemmableNote);\nexport const isTabNote = (obj) => isCategory(obj, Category.TabNote);\n// 'const' enums are erased by the TypeScript compiler. The string values are inlined at all the use sites.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#const-enums\nexport var Category;\n(function (Category) {\n Category[\"Accidental\"] = \"Accidental\";\n Category[\"Annotation\"] = \"Annotation\";\n Category[\"Articulation\"] = \"Articulation\";\n Category[\"Barline\"] = \"Barline\";\n Category[\"BarNote\"] = \"BarNote\";\n Category[\"Beam\"] = \"Beam\";\n Category[\"Bend\"] = \"Bend\";\n Category[\"ChordSymbol\"] = \"ChordSymbol\";\n Category[\"Clef\"] = \"Clef\";\n Category[\"ClefNote\"] = \"ClefNote\";\n Category[\"Crescendo\"] = \"Crescendo\";\n Category[\"Curve\"] = \"Curve\";\n Category[\"Dot\"] = \"Dot\";\n Category[\"Element\"] = \"Element\";\n Category[\"Fraction\"] = \"Fraction\";\n Category[\"FretHandFinger\"] = \"FretHandFinger\";\n Category[\"GhostNote\"] = \"GhostNote\";\n Category[\"Glyph\"] = \"Glyph\";\n Category[\"GlyphNote\"] = \"GlyphNote\";\n Category[\"GraceNote\"] = \"GraceNote\";\n Category[\"GraceNoteGroup\"] = \"GraceNoteGroup\";\n Category[\"GraceTabNote\"] = \"GraceTabNote\";\n Category[\"KeySignature\"] = \"KeySignature\";\n Category[\"KeySigNote\"] = \"KeySigNote\";\n Category[\"Modifier\"] = \"Modifier\";\n Category[\"MultiMeasureRest\"] = \"MultiMeasureRest\";\n Category[\"Note\"] = \"Note\";\n Category[\"NoteHead\"] = \"NoteHead\";\n Category[\"NoteSubGroup\"] = \"NoteSubGroup\";\n Category[\"Ornament\"] = \"Ornament\";\n Category[\"Parenthesis\"] = \"Parenthesis\";\n Category[\"PedalMarking\"] = \"PedalMarking\";\n Category[\"RenderContext\"] = \"RenderContext\";\n Category[\"RepeatNote\"] = \"RepeatNote\";\n Category[\"Repetition\"] = \"Repetition\";\n Category[\"Stave\"] = \"Stave\";\n Category[\"StaveConnector\"] = \"StaveConnector\";\n Category[\"StaveHairpin\"] = \"StaveHairpin\";\n Category[\"StaveLine\"] = \"StaveLine\";\n Category[\"StaveModifier\"] = \"StaveModifier\";\n Category[\"StaveNote\"] = \"StaveNote\";\n Category[\"StaveSection\"] = \"StaveSection\";\n Category[\"StaveTempo\"] = \"StaveTempo\";\n Category[\"StaveText\"] = \"StaveText\";\n Category[\"StaveTie\"] = \"StaveTie\";\n Category[\"Stem\"] = \"Stem\";\n Category[\"StemmableNote\"] = \"StemmableNote\";\n Category[\"StringNumber\"] = \"StringNumber\";\n Category[\"Stroke\"] = \"Stroke\";\n Category[\"System\"] = \"System\";\n Category[\"TabNote\"] = \"TabNote\";\n Category[\"TabSlide\"] = \"TabSlide\";\n Category[\"TabStave\"] = \"TabStave\";\n Category[\"TabTie\"] = \"TabTie\";\n Category[\"TextBracket\"] = \"TextBracket\";\n Category[\"TextDynamics\"] = \"TextDynamics\";\n Category[\"TextNote\"] = \"TextNote\";\n Category[\"Tickable\"] = \"Tickable\";\n Category[\"TimeSignature\"] = \"TimeSignature\";\n Category[\"TimeSigNote\"] = \"TimeSigNote\";\n Category[\"Tremolo\"] = \"Tremolo\";\n Category[\"Tuplet\"] = \"Tuplet\";\n Category[\"Vibrato\"] = \"Vibrato\";\n Category[\"VibratoBracket\"] = \"VibratoBracket\";\n Category[\"Voice\"] = \"Voice\";\n Category[\"Volta\"] = \"Volta\";\n})(Category || (Category = {}));\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// Note: Keep this module free of imports to reduce the chance of circular dependencies.\n/** `RuntimeError` will be thrown by VexFlow classes in case of error. */\nexport class RuntimeError extends Error {\n constructor(code, message = '') {\n super('[RuntimeError] ' + code + ': ' + message);\n this.code = code;\n }\n}\n/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */\n// eslint-disable-next-line\nexport function globalObject() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return Function('return this')();\n}\n/**\n * Check that `x` is of type `T` and not `undefined`.\n * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message.\n */\nexport function defined(x, code = 'undefined', message = '') {\n if (x === undefined) {\n throw new RuntimeError(code, message);\n }\n return x;\n}\n/** Default log function sends all arguments to console. */\n// eslint-disable-next-line\nexport function log(block, ...args) {\n if (!args)\n return;\n const line = Array.prototype.slice.call(args).join(' ');\n globalObject().console.log(block + ': ' + line);\n}\n/** Dump warning to console. */\n// eslint-disable-next-line\nexport function warn(...args) {\n const line = args.join(' ');\n const err = new Error();\n globalObject().console.log('Warning: ', line, err.stack);\n}\n/** Round number to nearest fractional value (`.5`, `.25`, etc.) */\nfunction roundN(x, n) {\n return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n;\n}\n/** Locate the mid point between stave lines. Returns a fractional line if a space. */\nexport function midLine(a, b) {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = roundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n}\n/**\n * Used by various classes (e.g., SVGContext) to provide a\n * unique prefix to element names (or other keys in shared namespaces).\n */\nexport function prefix(text) {\n return `vf-${text}`;\n}\n/**\n * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi).\n */\nexport function normalizeAngle(a) {\n a = a % (2 * Math.PI);\n if (a < 0) {\n a += 2 * Math.PI;\n }\n return a;\n}\n/**\n * Return the sum of an array of numbers.\n */\nexport function sumArray(arr) {\n return arr.reduce((a, b) => a + b, 0);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// Author: Joshua Koo / @zz85\n// Author: @incompleteopus\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/** Fraction represents a rational number. */\nexport class Fraction {\n static get CATEGORY() {\n return Category.Fraction;\n }\n /**\n * GCD: Greatest common divisor using the Euclidean algorithm.\n * Note: GCD(0, 0) => 0 and GCD(0, n) => n.\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) {\n throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n let t;\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n return a;\n }\n /** LCM: Lowest common multiple. */\n static LCM(a, b) {\n return (a * b) / Fraction.GCD(a, b);\n }\n /** Lowest common multiple for more than two numbers. */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n }\n else if (args.length === 1) {\n return args[0];\n }\n else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n }\n else {\n // args.shift() removes the first number.\n // LCM the first number with the rest of the numbers.\n return Fraction.LCM(args.shift(), Fraction.LCMM(args));\n }\n }\n /** Set the numerator and denominator. */\n constructor(numerator, denominator) {\n this.numerator = 1;\n this.denominator = 1;\n this.set(numerator, denominator);\n }\n /** Set the numerator and denominator. */\n set(numerator = 1, denominator = 1) {\n this.numerator = numerator;\n this.denominator = denominator;\n return this;\n }\n /** Return the value of the fraction. */\n value() {\n return this.numerator / this.denominator;\n }\n /** Simplify numerator and denominator using GCD. */\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n /** Add value of another fraction. */\n add(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Substract value of another fraction. */\n subtract(param1 = 0, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n /** Multiply by value of another fraction. */\n multiply(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n /** Divide by value of another Fraction. */\n divide(param1 = 1, param2 = 1) {\n const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2);\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n /** Simplify both sides and check if they are equal. */\n equals(compare) {\n const a = Fraction.__staticFractionA.copy(compare).simplify();\n const b = Fraction.__staticFractionB.copy(this).simplify();\n return a.numerator === b.numerator && a.denominator === b.denominator;\n }\n /** Greater than operator. */\n greaterThan(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator > 0;\n }\n /** Greater than or equals operator. */\n greaterThanEquals(compare) {\n const a = Fraction.__staticFractionB.copy(this);\n a.subtract(compare);\n return a.numerator >= 0;\n }\n /** Less than operator. */\n lessThan(compare) {\n return !this.greaterThanEquals(compare);\n }\n /** Less than or equals operator. */\n lessThanEquals(compare) {\n return !this.greaterThan(compare);\n }\n /** Return a new copy with current values. */\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n /** Copy value of another fraction. */\n copy(other) {\n if (typeof other === 'number') {\n return this.set(other, 1);\n }\n else {\n return this.set(other.numerator, other.denominator);\n }\n }\n /** Return the integer component (eg. 5/2 => 2). */\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n /** Return the remainder component (eg. 5/2 => 1). */\n remainder() {\n return this.numerator % this.denominator;\n }\n /** Calculate absolute value. */\n makeAbs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n /** Return a raw string representation (eg. \"5/2\"). */\n toString() {\n return `${this.numerator}/${this.denominator}`;\n }\n /** Return a simplified string respresentation. */\n toSimplifiedString() {\n return Fraction.__staticFractionTmp.copy(this).simplify().toString();\n }\n /** Return string representation in mixed form. */\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__staticFractionTmp.copy(this);\n if (q < 0) {\n f.makeAbs();\n }\n if (q !== 0) {\n s += q;\n if (f.numerator !== 0) {\n s += ` ${f.toSimplifiedString()}`;\n }\n }\n else if (f.numerator === 0) {\n s = '0';\n }\n else {\n s = f.toSimplifiedString();\n }\n return s;\n }\n /** Parse a fraction string. */\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = i[1] ? parseInt(i[1], 10) : 1;\n return this.set(n, d);\n }\n}\n// Cached objects for comparisons.\nFraction.__staticFractionA = new Fraction();\nFraction.__staticFractionB = new Fraction();\nFraction.__staticFractionTmp = new Fraction();\n/** Helper function to extract the numerator and denominator from another fraction. */\nfunction getNumeratorAndDenominator(n, d = 1) {\n if (typeof n === 'number') {\n // Both params are numbers, so we return them as [numerator, denominator].\n return [n, d];\n }\n else {\n // First param is a Fraction object. We ignore the second param.\n return [n.numerator, n.denominator];\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nexport class BoundingBox {\n /**\n * Create a new copy.\n */\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n /** Get x position. */\n getX() {\n return this.x;\n }\n /** Get y position. */\n getY() {\n return this.y;\n }\n /** Get width. */\n getW() {\n return this.w;\n }\n /** Get height. */\n getH() {\n return this.h;\n }\n /** Set x position. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Set y position. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Set width. */\n setW(w) {\n this.w = w;\n return this;\n }\n /** Set height. */\n setH(h) {\n this.h = h;\n return this;\n }\n /** Move to position. */\n move(x, y) {\n this.x += x;\n this.y += y;\n return this;\n }\n /** Clone. */\n clone() {\n return BoundingBox.copy(this);\n }\n /**\n * Merge my box with given box. Creates a bigger bounding box unless\n * the given box is contained in this one.\n */\n mergeWith(boundingBox) {\n const that = boundingBox;\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n/**\n * BoundingBoxComputation computes metrics for a bounding box by continuously\n * taking canvas path commands.\n *\n * Warning: This class is merely a crutch to get bounding box information without\n * explicit metadata. This is likely to get deprecated following SMuFL support.\n *\n * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License)\n */\nexport class BoundingBoxComputation {\n constructor() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n /** Get calculated X1. */\n getX1() {\n return this.x1;\n }\n /** Get calculated Y1. */\n getY1() {\n return this.y1;\n }\n /** Get calculated width. */\n width() {\n return this.x2 - this.x1;\n }\n /** Get calculated height. */\n height() {\n return this.y2 - this.y1;\n }\n /** Add point to BoundingBox. */\n addPoint(x, y) {\n if (isNaN(this.x1) || x < this.x1)\n this.x1 = x;\n if (isNaN(this.x2) || x > this.x2)\n this.x2 = x;\n if (isNaN(this.y1) || y < this.y1)\n this.y1 = y;\n if (isNaN(this.y2) || y > this.y2)\n this.y2 = y;\n }\n /** Add X to BoundingBox. */\n addX(x) {\n this.addPoint(x, this.y1);\n }\n /** Add Y to BoundingBox. */\n addY(y) {\n this.addPoint(this.x1, y);\n }\n /** Add quadratic curve to BoundingBox. */\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n this.addPoint(p0x, p0y);\n this.addPoint(p2x, p2y);\n const p01x = p1x - p0x;\n const p12x = p2x - p1x;\n let denom = p01x - p12x;\n if (denom != 0) {\n const t = p01x / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x);\n }\n }\n const p01y = p1y - p0y;\n const p12y = p2y - p1y;\n denom = p01y - p12y;\n if (denom != 0) {\n const t = p01y / denom;\n if (t > 0 && t < 1) {\n const it = 1 - t;\n this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y);\n }\n }\n }\n /** Add bezier curve to BoundingBox. */\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0)\n continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0)\n this.addX(f(t, i));\n if (i === 1)\n this.addY(f(t, i));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0)\n continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0)\n this.addX(f(t1, i));\n if (i === 1)\n this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0)\n this.addX(f(t2, i));\n if (i === 1)\n this.addY(f(t2, i));\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { defined } from './util';\nexport var FontWeight;\n(function (FontWeight) {\n FontWeight[\"NORMAL\"] = \"normal\";\n FontWeight[\"BOLD\"] = \"bold\";\n})(FontWeight || (FontWeight = {}));\nexport var FontStyle;\n(function (FontStyle) {\n FontStyle[\"NORMAL\"] = \"normal\";\n FontStyle[\"ITALIC\"] = \"italic\";\n})(FontStyle || (FontStyle = {}));\n// Internal element for parsing CSS font shorthand strings.\nlet fontParser;\nconst Fonts = {};\nexport class Font {\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of pixels that is equivalent to `fontSize`\n */\n static convertSizeToPixelValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize * Font.scaleToPxFrom.pt;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1;\n return value * conversionFactor;\n }\n }\n /**\n * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em')\n * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported\n * units (e.g., pt, em, %).\n * @returns the number of points that is equivalent to `fontSize`\n */\n static convertSizeToPointValue(fontSize = Font.SIZE) {\n var _a;\n if (typeof fontSize === 'number') {\n // Assume the numeric fontSize is specified in pt.\n return fontSize;\n }\n else {\n const value = parseFloat(fontSize);\n if (isNaN(value)) {\n return 0;\n }\n const unit = fontSize.replace(/[\\d.\\s]/g, '').toLowerCase(); // Extract the unit by removing all numbers, dots, spaces.\n const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt;\n return value * conversionFactor;\n }\n }\n /**\n * @param f\n * @param size\n * @param weight\n * @param style\n * @returns the `size` field will include the units (e.g., '12pt', '16px').\n */\n static validate(f, size, weight, style) {\n // If f is a string but all other arguments are undefined, we assume that\n // f is CSS font shorthand (e.g., 'italic bold 10pt Arial').\n if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) {\n return Font.fromCSSString(f);\n }\n let family;\n if (typeof f === 'object') {\n // f is a FontInfo object, so we extract its fields.\n family = f.family;\n size = f.size;\n weight = f.weight;\n style = f.style;\n }\n else {\n // f is a string representing the font family name or undefined.\n family = f;\n }\n family = family !== null && family !== void 0 ? family : Font.SANS_SERIF;\n size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt';\n weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL;\n style = style !== null && style !== void 0 ? style : FontStyle.NORMAL;\n if (weight === '') {\n weight = FontWeight.NORMAL;\n }\n if (style === '') {\n style = FontStyle.NORMAL;\n }\n // If size is a number, we assume the unit is `pt`.\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n // If weight is a number (e.g., 900), turn it into a string representation of that number.\n if (typeof weight === 'number') {\n weight = weight.toString();\n }\n // At this point, `family`, `size`, `weight`, and `style` are all strings.\n return { family, size, weight, style };\n }\n /**\n * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial').\n */\n static fromCSSString(cssFontShorthand) {\n // Let the browser parse this string for us.\n // First, create a span element.\n // Then, set its style.font and extract it back out.\n if (!fontParser) {\n fontParser = document.createElement('span');\n }\n fontParser.style.font = cssFontShorthand;\n const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style;\n return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle };\n }\n /**\n * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`.\n */\n static toCSSString(fontInfo) {\n var _a;\n if (!fontInfo) {\n return '';\n }\n let style;\n const st = fontInfo.style;\n if (st === FontStyle.NORMAL || st === '' || st === undefined) {\n style = ''; // no space! Omit the style section.\n }\n else {\n style = st.trim() + ' ';\n }\n let weight;\n const wt = fontInfo.weight;\n if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) {\n weight = ''; // no space! Omit the weight section.\n }\n else if (typeof wt === 'number') {\n weight = wt + ' ';\n }\n else {\n weight = wt.trim() + ' ';\n }\n let size;\n const sz = fontInfo.size;\n if (sz === undefined) {\n size = Font.SIZE + 'pt ';\n }\n else if (typeof sz === 'number') {\n size = sz + 'pt ';\n }\n else {\n // size is already a string.\n size = sz.trim() + ' ';\n }\n const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF;\n return `${style}${weight}${size}${family}`;\n }\n /**\n * @param fontSize a number representing a font size, or a string font size with units.\n * @param scaleFactor multiply the size by this factor.\n * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48).\n * If the fontSize argument was a number, the return value will be a number.\n * If the fontSize argument was a string, the return value will be a string.\n */\n static scaleSize(fontSize, scaleFactor) {\n if (typeof fontSize === 'number') {\n return (fontSize * scaleFactor);\n }\n else {\n const value = parseFloat(fontSize);\n const unit = fontSize.replace(/[\\d.\\s]/g, ''); // Remove all numbers, dots, spaces.\n return `${value * scaleFactor}${unit}`;\n }\n }\n /**\n * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec).\n * @returns true if the font weight indicates bold.\n */\n static isBold(weight) {\n if (!weight) {\n return false;\n }\n else if (typeof weight === 'number') {\n return weight >= 600;\n }\n else {\n // a string can be 'bold' or '700'\n const parsedWeight = parseInt(weight, 10);\n if (isNaN(parsedWeight)) {\n return weight.toLowerCase() === 'bold';\n }\n else {\n return parsedWeight >= 600;\n }\n }\n }\n /**\n * @param style\n * @returns true if the font style indicates 'italic'.\n */\n static isItalic(style) {\n if (!style) {\n return false;\n }\n else {\n return style.toLowerCase() === FontStyle.ITALIC;\n }\n }\n /**\n * @param fontName\n * @param woffURL The absolute or relative URL to the woff file.\n * @param includeWoff2 If true, we assume that a woff2 file is in\n * the same folder as the woff file, and will append a `2` to the url.\n */\n // Support distributions of the typescript compiler that do not yet include the FontFace API declarations.\n // eslint-disable-next-line\n // @ts-ignore\n static loadWebFont(fontName, woffURL, includeWoff2 = true) {\n return __awaiter(this, void 0, void 0, function* () {\n const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : '';\n const woff1URL = `url(${woffURL}) format('woff')`;\n const woffURLs = woff2URL + woff1URL;\n // eslint-disable-next-line\n // @ts-ignore\n const fontFace = new FontFace(fontName, woffURLs);\n yield fontFace.load();\n // eslint-disable-next-line\n // @ts-ignore\n document.fonts.add(fontFace);\n return fontFace;\n });\n }\n /**\n * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls:\n * `await Vex.Flow.Font.loadWebFonts();`\n * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts),\n * and a @font-face { font-family: ... } rule in your CSS.\n * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial,\n * depending on the current music engraving font.\n *\n * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts\n * for your app.\n */\n static loadWebFonts() {\n return __awaiter(this, void 0, void 0, function* () {\n const host = Font.WEB_FONT_HOST;\n const files = Font.WEB_FONT_FILES;\n for (const fontName in files) {\n const fontPath = files[fontName];\n Font.loadWebFont(fontName, host + fontPath);\n }\n });\n }\n /**\n * @param fontName\n * @param data optionally set the Font object's `.data` property.\n * This is usually done when setting up a font for the first time.\n * @param metrics optionally set the Font object's `.metrics` property.\n * This is usually done when setting up a font for the first time.\n * @returns a Font object with the given `fontName`.\n * Reuse an existing Font object if a matching one is found.\n */\n static load(fontName, data, metrics) {\n let font = Fonts[fontName];\n if (!font) {\n font = new Font(fontName);\n Fonts[fontName] = font;\n }\n if (data) {\n font.setData(data);\n }\n if (metrics) {\n font.setMetrics(metrics);\n }\n return font;\n }\n /**\n * Use `Font.load(fontName)` to get a Font object.\n * Do not call this constructor directly.\n */\n constructor(fontName) {\n this.name = fontName;\n }\n getName() {\n return this.name;\n }\n getData() {\n return defined(this.data, 'FontError', 'Missing font data');\n }\n getMetrics() {\n return defined(this.metrics, 'FontError', 'Missing metrics');\n }\n setData(data) {\n this.data = data;\n }\n setMetrics(metrics) {\n this.metrics = metrics;\n }\n hasData() {\n return this.data !== undefined;\n }\n getResolution() {\n return this.getData().resolution;\n }\n getGlyphs() {\n return this.getData().glyphs;\n }\n /**\n * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts).\n * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY).\n * @param defaultValue is returned if the lookup fails.\n * @returns the retrieved value (or `defaultValue` if the lookup fails).\n */\n // eslint-disable-next-line\n lookupMetric(key, defaultValue) {\n const keyParts = key.split('.');\n // Start with the top level font metrics object, and keep looking deeper into the object (via each part of the period-delimited key).\n let currObj = this.getMetrics();\n for (let i = 0; i < keyParts.length; i++) {\n const keyPart = keyParts[i];\n const value = currObj[keyPart];\n if (value === undefined) {\n // If the key lookup fails, we fall back to the defaultValue.\n return defaultValue;\n }\n // The most recent lookup succeeded, so we drill deeper into the object.\n currObj = value;\n }\n // After checking every part of the key (i.e., the loop completed), return the most recently retrieved value.\n return currObj;\n }\n /** For debugging. */\n toString() {\n return '[' + this.name + ' Font]';\n }\n}\n//////////////////////////////////////////////////////////////////////////////////////////////////\n// STATIC MEMBERS\n/** Default sans-serif font family. */\nFont.SANS_SERIF = 'Arial, sans-serif';\n/** Default serif font family. */\nFont.SERIF = 'Times New Roman, serif';\n/** Default font size in `pt`. */\nFont.SIZE = 10;\n// CSS Font Sizes: 36pt == 48px == 3em == 300% == 0.5in\n/** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */\nFont.scaleToPxFrom = {\n pt: 4 / 3,\n px: 1,\n em: 16,\n '%': 4 / 25,\n in: 96,\n mm: 96 / 25.4,\n cm: 96 / 2.54,\n};\n/**\n * Customize this field to specify a different CDN for delivering web fonts.\n * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/\n * Or you can use your own host.\n */\nFont.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/';\n/**\n * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when\n * `await Font.loadWebFonts()` is called. Customize this field to specify a different\n * set of fonts to load. See: `Font.loadWebFonts()`.\n */\nFont.WEB_FONT_FILES = {\n 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff',\n PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to register with a registry:\n//\n// 1) Explicitly call `registry.register(elem:Element, id?:string)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\nimport { RuntimeError } from './util';\n// Indexes are represented as maps of maps of maps. This allows\n// for both multi-labeling (e.g., an element can have multiple classes)\n// and efficient lookup.\nclass Index {\n constructor() {\n this.id = {};\n this.type = {};\n this.class = {};\n }\n}\nexport class Registry {\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n static disableDefaultRegistry() {\n Registry.defaultRegistry = undefined;\n }\n constructor() {\n this.index = new Index();\n }\n clear() {\n this.index = new Index();\n return this;\n }\n setIndexValue(name, value, id, elem) {\n const index = this.index;\n if (!index[name][value]) {\n index[name][value] = {};\n }\n index[name][value][id] = elem;\n }\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== undefined && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value && elem) {\n this.setIndexValue(name, value, elem.getAttribute('id'), elem);\n }\n }\n /**\n * Register element `elem` with this registry.\n * This adds the element to its index and watches it for attribute changes.\n * @param elem\n * @param id\n * @returns this\n */\n register(elem, id) {\n id = id || elem.getAttribute('id');\n if (!id) {\n throw new RuntimeError(\"Can't add element without `id` attribute to registry\");\n }\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n this.setIndexValue('id', id, id, elem);\n this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined });\n elem.onRegister(this);\n return this;\n }\n getElementById(id) {\n var _a, _b;\n return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; // return undefined if the id is not found.\n }\n getElementsByAttribute(attribute, value) {\n const index_attr = this.index[attribute];\n if (index_attr) {\n const index_attr_val = index_attr[value];\n if (index_attr_val) {\n const keys = Object.keys(index_attr_val);\n return keys.map((k) => index_attr_val[k]);\n }\n }\n return [];\n }\n getElementsByType(type) {\n return this.getElementsByAttribute('type', type);\n }\n getElementsByClass(className) {\n return this.getElementsByAttribute('class', className);\n }\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate(info) {\n const allowedNames = ['id', 'type', 'class'];\n if (allowedNames.includes(info.name)) {\n this.updateIndex(info);\n }\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Registry } from './registry';\nimport { Category } from './typeguard';\nimport { defined, prefix } from './util';\n/**\n * Element implements a generic base class for VexFlow, with implementations\n * of general functions and properties that can be inherited by all VexFlow elements.\n *\n * The Element is an abstract class that needs to be subclassed to work. It handles\n * style and text-font properties for the Element and any child elements, along with\n * working with the Registry to create unique ids, but does not have any tools for\n * formatting x or y positions or connections to a Stave.\n */\nexport class Element {\n static get CATEGORY() {\n return Category.Element;\n }\n static newID() {\n return `auto${Element.ID++}`;\n }\n constructor() {\n var _a;\n // all Element objects keep a list of children that they are responsible and which\n // inherit the style of their parents.\n this.children = [];\n this.attrs = {\n id: Element.newID(),\n type: this.getCategory(),\n class: '',\n };\n this.rendered = false;\n // If a default registry exist, then register with it right away.\n (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this);\n }\n /**\n * Adds a child Element to the Element, which lets it inherit the\n * same style as the parent when setGroupStyle() is called.\n *\n * Examples of children are noteheads and stems. Modifiers such\n * as Accidentals are generally not set as children.\n *\n * Note that StaveNote calls setGroupStyle() when setStyle() is called.\n */\n addChildElement(child) {\n this.children.push(child);\n return this;\n }\n getCategory() {\n return this.constructor.CATEGORY;\n }\n /**\n * Set the element style used to render.\n *\n * Example:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.draw();\n * ```\n * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave),\n * the style can be applied to all of them by means of the context:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.getContext().setFillStyle('red');\n * element.getContext().setStrokeStyle('red');\n * element.draw();\n * ```\n * or using drawWithStyle:\n * ```typescript\n * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' });\n * element.drawWithStyle();\n * ```\n */\n setStyle(style) {\n this.style = style;\n return this;\n }\n /** Set the element & associated children style used for rendering. */\n setGroupStyle(style) {\n this.style = style;\n this.children.forEach((child) => child.setGroupStyle(style));\n return this;\n }\n /** Get the element style used for rendering. */\n getStyle() {\n return this.style;\n }\n /** Apply the element style to `context`. */\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.save();\n if (style.shadowColor)\n context.setShadowColor(style.shadowColor);\n if (style.shadowBlur)\n context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle)\n context.setFillStyle(style.fillStyle);\n if (style.strokeStyle)\n context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth)\n context.setLineWidth(style.lineWidth);\n return this;\n }\n /** Restore the style of `context`. */\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style)\n return this;\n if (!context)\n return this;\n context.restore();\n return this;\n }\n /**\n * Draw the element and all its sub-elements (ie.: Modifiers in a Stave)\n * with the element's style (see `getStyle()` and `setStyle()`)\n */\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n /** Check if it has a class label (An element can have multiple class labels). */\n hasClass(className) {\n var _a;\n if (!this.attrs.class)\n return false;\n return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1;\n }\n /** Add a class label (An element can have multiple class labels). */\n addClass(className) {\n var _a;\n if (this.hasClass(className))\n return this;\n if (!this.attrs.class)\n this.attrs.class = `${className}`;\n else\n this.attrs.class = `${this.attrs.class} ${className}`;\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: className,\n oldValue: undefined,\n });\n return this;\n }\n /** Remove a class label (An element can have multiple class labels). */\n removeClass(className) {\n var _a, _b;\n if (!this.hasClass(className))\n return this;\n const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ');\n if (arr) {\n arr.splice(arr.indexOf(className));\n this.attrs.class = arr.join(' ');\n }\n (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({\n id: this.attrs.id,\n name: 'class',\n value: undefined,\n oldValue: className,\n });\n return this;\n }\n /** Call back from registry after the element is registered. */\n onRegister(registry) {\n this.registry = registry;\n return this;\n }\n /** Return the rendered status. */\n isRendered() {\n return this.rendered;\n }\n /** Set the rendered status. */\n setRendered(rendered = true) {\n this.rendered = rendered;\n return this;\n }\n /** Return the element attributes. */\n getAttributes() {\n return this.attrs;\n }\n /** Return an attribute, such as 'id', 'type' or 'class'. */\n // eslint-disable-next-line\n getAttribute(name) {\n return this.attrs[name];\n }\n /** Return associated SVGElement. */\n getSVGElement(suffix = '') {\n const id = prefix(this.attrs.id + suffix);\n const element = document.getElementById(id);\n if (element)\n return element;\n }\n /** Set an attribute such as 'id', 'class', or 'type'. */\n setAttribute(name, value) {\n var _a;\n const oldID = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n // Register with old id to support id changes.\n (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue });\n return this;\n }\n /** Get the boundingBox. */\n getBoundingBox() {\n return this.boundingBox;\n }\n /** Return the context, such as an SVGContext or CanvasContext object. */\n getContext() {\n return this.context;\n }\n /** Set the context to an SVGContext or CanvasContext object */\n setContext(context) {\n this.context = context;\n return this;\n }\n /** Validate and return the rendering context. */\n checkContext() {\n return defined(this.context, 'NoContext', 'No rendering context attached to instance.');\n }\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Font Handling\n /**\n * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied\n * to text (not glyphs).\n */\n set font(f) {\n this.setFont(f);\n }\n /** Returns the CSS compatible font string for the text font. */\n get font() {\n return Font.toCSSString(this.textFont);\n }\n /**\n * Set the element's text font family, size, weight, style\n * (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * This attribute does not determine the font used for musical Glyphs like treble clefs.\n *\n * @param font is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n * If no arguments are provided, then the font is set to the default font.\n * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property.\n */\n setFont(font, size, weight, style) {\n // Allow subclasses to override `TEXT_FONT`.\n const defaultTextFont = this.constructor.TEXT_FONT;\n const fontIsObject = typeof font === 'object';\n const fontIsString = typeof font === 'string';\n const fontIsUndefined = font === undefined;\n const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined;\n if (fontIsObject) {\n // `font` is case 1) a FontInfo object\n this.textFont = Object.assign(Object.assign({}, defaultTextFont), font);\n }\n else if (fontIsString && sizeWeightStyleAreUndefined) {\n // `font` is case 2) CSS font shorthand.\n this.textFont = Font.fromCSSString(font);\n }\n else if (fontIsUndefined && sizeWeightStyleAreUndefined) {\n // All arguments are undefined. Do not check for `arguments.length === 0`,\n // which fails on the edge case: `setFont(undefined)`.\n // TODO: See if we can remove this case entirely without introducing a visual diff.\n // The else case below seems like it should be equivalent to this case.\n this.textFont = Object.assign({}, defaultTextFont);\n }\n else {\n // `font` is case 3) a font family string (e.g., 'Times New Roman').\n // The other parameters represent the size, weight, and style.\n // It is okay for `font` to be undefined while one or more of the other arguments is provided.\n // Following CSS conventions, unspecified params are reset to the default.\n this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style);\n }\n return this;\n }\n /**\n * Get the css string describing this Element's text font. e.g.,\n * 'bold 10pt Arial'.\n */\n getFont() {\n if (!this.textFont) {\n this.resetFont();\n }\n return Font.toCSSString(this.textFont);\n }\n /**\n * Reset the text font to the style indicated by the static `TEXT_FONT` property.\n * Subclasses can call this to initialize `textFont` for the first time.\n */\n resetFont() {\n this.setFont();\n }\n /** Return a copy of the current FontInfo object. */\n get fontInfo() {\n if (!this.textFont) {\n this.resetFont();\n }\n // We can cast to Required here, because\n // we just called resetFont() above to ensure this.textFont is set.\n return Object.assign({}, this.textFont);\n }\n set fontInfo(fontInfo) {\n this.setFont(fontInfo);\n }\n /** Change the font size, while keeping everything else the same. */\n setFontSize(size) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style);\n return this;\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes.\n */\n getFontSize() {\n return this.fontSize;\n }\n /**\n * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property.\n * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt').\n */\n set fontSize(size) {\n this.setFontSize(size);\n }\n /**\n * @returns a CSS font-size string (e.g., '18pt', '12px', '1em').\n */\n get fontSize() {\n let size = this.fontInfo.size;\n if (typeof size === 'number') {\n size = `${size}pt`;\n }\n return size;\n }\n /**\n * @returns the font size in `pt`.\n */\n get fontSizeInPoints() {\n return Font.convertSizeToPointValue(this.fontSize);\n }\n /**\n * @returns the font size in `px`.\n */\n get fontSizeInPixels() {\n return Font.convertSizeToPixelValue(this.fontSize);\n }\n /**\n * @returns a CSS font-style string (e.g., 'italic').\n */\n get fontStyle() {\n return this.fontInfo.style;\n }\n set fontStyle(style) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style);\n }\n /**\n * @returns a CSS font-weight string (e.g., 'bold').\n * As in CSS, font-weight is always returned as a string, even if it was set as a number.\n */\n get fontWeight() {\n return this.fontInfo.weight + '';\n }\n set fontWeight(weight) {\n const fontInfo = this.fontInfo;\n this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style);\n }\n}\nElement.ID = 1000;\n/**\n * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)`\n * to customize the font for musical symbols placed on the score.\n */\nElement.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { RuntimeError } from './util';\nconst RESOLUTION = 16384;\n/**\n * Map duration numbers to 'ticks', the unit of duration used throughout VexFlow.\n * For example, a quarter note is 4, so it maps to RESOLUTION / 4 = 4096 ticks.\n */\nconst durations = {\n '1/2': RESOLUTION * 2,\n 1: RESOLUTION / 1,\n 2: RESOLUTION / 2,\n 4: RESOLUTION / 4,\n 8: RESOLUTION / 8,\n 16: RESOLUTION / 16,\n 32: RESOLUTION / 32,\n 64: RESOLUTION / 64,\n 128: RESOLUTION / 128,\n 256: RESOLUTION / 256,\n};\nconst durationAliases = {\n w: '1',\n h: '2',\n q: '4',\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n // TODO(0xfe): This needs to be cleaned up.\n b: '256',\n};\nconst keySignatures = {\n C: { num: 0 },\n Am: { num: 0 },\n F: { acc: 'b', num: 1 },\n Dm: { acc: 'b', num: 1 },\n Bb: { acc: 'b', num: 2 },\n Gm: { acc: 'b', num: 2 },\n Eb: { acc: 'b', num: 3 },\n Cm: { acc: 'b', num: 3 },\n Ab: { acc: 'b', num: 4 },\n Fm: { acc: 'b', num: 4 },\n Db: { acc: 'b', num: 5 },\n Bbm: { acc: 'b', num: 5 },\n Gb: { acc: 'b', num: 6 },\n Ebm: { acc: 'b', num: 6 },\n Cb: { acc: 'b', num: 7 },\n Abm: { acc: 'b', num: 7 },\n G: { acc: '#', num: 1 },\n Em: { acc: '#', num: 1 },\n D: { acc: '#', num: 2 },\n Bm: { acc: '#', num: 2 },\n A: { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n E: { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n B: { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\nconst clefs = {\n treble: { line_shift: 0 },\n bass: { line_shift: 6 },\n tenor: { line_shift: 4 },\n alto: { line_shift: 3 },\n soprano: { line_shift: 1 },\n percussion: { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n subbass: { line_shift: 7 },\n french: { line_shift: -1 },\n};\nconst notesInfo = {\n C: { index: 0, int_val: 0 },\n CN: { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n CB: { index: 0, int_val: 11, accidental: 'b' },\n CBB: { index: 0, int_val: 10, accidental: 'bb' },\n D: { index: 1, int_val: 2 },\n DN: { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n DB: { index: 1, int_val: 1, accidental: 'b' },\n DBB: { index: 1, int_val: 0, accidental: 'bb' },\n E: { index: 2, int_val: 4 },\n EN: { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n EB: { index: 2, int_val: 3, accidental: 'b' },\n EBB: { index: 2, int_val: 2, accidental: 'bb' },\n F: { index: 3, int_val: 5 },\n FN: { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n FB: { index: 3, int_val: 4, accidental: 'b' },\n FBB: { index: 3, int_val: 3, accidental: 'bb' },\n G: { index: 4, int_val: 7 },\n GN: { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n GB: { index: 4, int_val: 6, accidental: 'b' },\n GBB: { index: 4, int_val: 5, accidental: 'bb' },\n A: { index: 5, int_val: 9 },\n AN: { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n AB: { index: 5, int_val: 8, accidental: 'b' },\n ABB: { index: 5, int_val: 7, accidental: 'bb' },\n B: { index: 6, int_val: 11 },\n BN: { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n BB: { index: 6, int_val: 10, accidental: 'b' },\n BBB: { index: 6, int_val: 9, accidental: 'bb' },\n R: { index: 6, rest: true },\n X: {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\nconst validNoteTypes = {\n n: { name: 'note' },\n r: { name: 'rest' },\n h: { name: 'harmonic' },\n m: { name: 'muted' },\n s: { name: 'slash' },\n g: { name: 'ghost' },\n d: { name: 'diamond' },\n x: { name: 'x' },\n ci: { name: 'circled' },\n cx: { name: 'circle x' },\n sf: { name: 'slashed' },\n sb: { name: 'slashed backward' },\n sq: { name: 'square' },\n tu: { name: 'triangle up' },\n td: { name: 'triangle down' },\n};\nconst accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 },\n accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 },\n accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 },\n accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 },\n accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 },\n accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 },\n accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 },\n accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 },\n accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 },\n accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 },\n accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 },\n accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 },\n accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 },\n accidentalNarrowReversedFlatAndFlat: {\n code: 'accidentalNarrowReversedFlatAndFlat',\n parenRightPaddingAdjustment: -1,\n },\n accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 },\n accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 },\n};\n// Helps determine the layout of accidentals.\nconst accidentalColumns = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\nconst articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true },\n av: {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true,\n },\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true,\n },\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true,\n },\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false,\n },\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false },\n ao: {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false,\n },\n ah: { code: 'stringsHarmonic', between_lines: false },\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false },\n 'a@a': { code: 'fermataAbove', between_lines: false },\n 'a@u': { code: 'fermataBelow', between_lines: false },\n 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false },\n 'a@as': { code: 'fermataShortAbove', between_lines: false },\n 'a@us': { code: 'fermataShortBelow', between_lines: false },\n 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false },\n 'a@al': { code: 'fermataLongAbove', between_lines: false },\n 'a@ul': { code: 'fermataLongBelow', between_lines: false },\n 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false },\n 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false },\n 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false },\n 'a|': { code: 'stringsUpBow', between_lines: false },\n am: { code: 'stringsDownBow', between_lines: false },\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\nconst ornaments = {\n mordent: { code: 'ornamentShortTrill' },\n mordent_inverted: { code: 'ornamentMordent' },\n turn: { code: 'ornamentTurn' },\n turn_inverted: { code: 'ornamentTurnSlash' },\n tr: { code: 'ornamentTrill' },\n upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' },\n downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' },\n pralldown: { code: 'ornamentPrecompTrillLowerSuffix' },\n upmordent: { code: 'ornamentPrecompSlideTrillBach' },\n downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n lineprall: { code: 'ornamentPrecompAppoggTrill' },\n prallprall: { code: 'ornamentTremblement' },\n scoop: { code: 'brassScoop' },\n doit: { code: 'brassDoitMedium' },\n fall: { code: 'brassFallLipShort' },\n doitLong: { code: 'brassLiftMedium' },\n fallLong: { code: 'brassFallRoughMedium' },\n bend: { code: 'brassBend' },\n plungerClosed: { code: 'brassMuteClosed' },\n plungerOpen: { code: 'brassMuteOpen' },\n flip: { code: 'brassFlip' },\n jazzTurn: { code: 'brassJazzTurn' },\n smear: { code: 'brassSmear' },\n};\nexport class Tables {\n /**\n * @returns the `Font` object at the head of the music font stack.\n */\n static currentMusicFont() {\n if (Tables.MUSIC_FONT_STACK.length === 0) {\n throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).');\n }\n else {\n return Tables.MUSIC_FONT_STACK[0];\n }\n }\n static clefProperties(clef) {\n if (!clef || !(clef in clefs))\n throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef);\n return clefs[clef];\n }\n /**\n * @param keyOctaveGlyph a string in the format \"key/octave\" (e.g., \"c/5\") or \"key/octave/custom-note-head-code\" (e.g., \"g/5/t3\").\n * @param clef\n * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n * @returns properties for the specified note.\n */\n static keyProperties(keyOctaveGlyph, clef = 'treble', params) {\n let options = { octave_shift: 0, duration: '4' };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n const duration = Tables.sanitizeDuration(options.duration);\n const pieces = keyOctaveGlyph.split('/');\n if (pieces.length < 2) {\n throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`);\n }\n const key = pieces[0].toUpperCase();\n const value = notesInfo[key];\n if (!value)\n throw new RuntimeError('BadArguments', 'Invalid key name: ' + key);\n if (value.octave)\n pieces[1] = value.octave.toString();\n let octave = parseInt(pieces[1], 10);\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n const baseIndex = octave * 7 - 4 * 7;\n let line = (baseIndex + value.index) / 2;\n line += Tables.clefProperties(clef).line_shift;\n let stroke = 0;\n if (line <= 0 && (line * 2) % 2 === 0)\n stroke = 1; // stroke up\n if (line >= 6 && (line * 2) % 2 === 0)\n stroke = -1; // stroke down\n // Integer value for note arithmetic.\n const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined;\n // If the user specified a glyph, overwrite the glyph code.\n const code = value.code;\n const shift_right = value.shift_right;\n let customNoteHeadProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyphName = pieces[2].toUpperCase();\n customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {};\n }\n return Object.assign({ key,\n octave,\n line,\n int_value, accidental: value.accidental, code,\n stroke,\n shift_right, displaced: false }, customNoteHeadProps);\n }\n static integerToNote(integer) {\n if (typeof integer === 'undefined' || integer < 0 || integer > 11) {\n throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`);\n }\n const table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n };\n const noteValue = table[integer];\n if (!noteValue) {\n throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n return noteValue;\n }\n static tabToGlyphProps(fret, scale = 1.0) {\n let glyph = undefined;\n let width = 0;\n let shift_y = 0;\n if (fret.toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n if (glyphMetrics.width == undefined || glyphMetrics.height == undefined)\n throw new RuntimeError('InvalidMetrics', 'Width and height required');\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n }\n else {\n width = Tables.textWidth(fret);\n }\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n }\n // Used by annotation.ts and bend.ts. Clearly this implementation only works for the default font size.\n // TODO: The actual width depends on the font family, size, weight, style.\n static textWidth(text) {\n return 7 * text.toString().length;\n }\n static articulationCodes(artic) {\n return articulations[artic];\n }\n static accidentalCodes(acc) {\n return accidentals[acc];\n }\n static ornamentCodes(acc) {\n return ornaments[acc];\n }\n static keySignature(spec) {\n const keySpec = keySignatures[spec];\n if (!keySpec) {\n throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n if (!keySpec.acc) {\n return [];\n }\n const accidentalList = {\n b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n const notes = accidentalList[keySpec.acc];\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n return acc_list;\n }\n static getKeySignatures() {\n return keySignatures;\n }\n static hasKeySignature(spec) {\n return spec in keySignatures;\n }\n /**\n * Convert duration aliases to the number based duration.\n * If the input isn't an alias, simply return the input.\n * @param duration\n * @returns Example: 'q' -> '4', '8' -> '8'\n */\n static sanitizeDuration(duration) {\n const durationNumber = durationAliases[duration];\n if (durationNumber !== undefined) {\n duration = durationNumber;\n }\n if (durations[duration] === undefined) {\n throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n return duration;\n }\n /** Convert the `duration` to a fraction. */\n static durationToFraction(duration) {\n return new Fraction().parse(Tables.sanitizeDuration(duration));\n }\n /** Convert the `duration` to a number. */\n static durationToNumber(duration) {\n return Tables.durationToFraction(duration).value();\n }\n /* Convert the `duration` to total ticks. */\n static durationToTicks(duration) {\n duration = Tables.sanitizeDuration(duration);\n const ticks = durations[duration];\n if (ticks === undefined) {\n throw new RuntimeError('InvalidDuration');\n }\n return ticks;\n }\n static codeNoteHead(type, duration) {\n let code = '';\n switch (type) {\n /* Diamond */\n case 'D0':\n code = 'noteheadDiamondWhole';\n break;\n case 'D1':\n code = 'noteheadDiamondHalf';\n break;\n case 'D2':\n code = 'noteheadDiamondBlack';\n break;\n case 'D3':\n code = 'noteheadDiamondBlack';\n break;\n /* Triangle */\n case 'T0':\n code = 'noteheadTriangleUpWhole';\n break;\n case 'T1':\n code = 'noteheadTriangleUpHalf';\n break;\n case 'T2':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'T3':\n code = 'noteheadTriangleUpBlack';\n break;\n /* Cross */\n case 'X0':\n code = 'noteheadXWhole';\n break;\n case 'X1':\n code = 'noteheadXHalf';\n break;\n case 'X2':\n code = 'noteheadXBlack';\n break;\n case 'X3':\n code = 'noteheadCircleX';\n break;\n /* Square */\n case 'S1':\n code = 'noteheadSquareWhite';\n break;\n case 'S2':\n code = 'noteheadSquareBlack';\n break;\n /* Rectangle */\n case 'R1':\n code = 'vexNoteHeadRectWhite'; // no smufl code\n break;\n case 'R2':\n code = 'vexNoteHeadRectBlack'; // no smufl code\n break;\n case 'DO':\n code = 'noteheadTriangleUpBlack';\n break;\n case 'RE':\n code = 'noteheadMoonBlack';\n break;\n case 'MI':\n code = 'noteheadDiamondBlack';\n break;\n case 'FA':\n code = 'noteheadTriangleLeftBlack';\n break;\n case 'FAUP':\n code = 'noteheadTriangleRightBlack';\n break;\n case 'SO':\n code = 'noteheadBlack';\n break;\n case 'LA':\n code = 'noteheadSquareBlack';\n break;\n case 'TI':\n code = 'noteheadTriangleRoundDownBlack';\n break;\n case 'D':\n case 'H': // left for backwards compatibility\n switch (duration) {\n case '1/2':\n code = 'noteheadDiamondDoubleWhole';\n break;\n case '1':\n code = 'noteheadDiamondWhole';\n break;\n case '2':\n code = 'noteheadDiamondHalf';\n break;\n default:\n code = 'noteheadDiamondBlack';\n break;\n }\n break;\n case 'N':\n case 'G':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWhole';\n break;\n case '1':\n code = 'noteheadWhole';\n break;\n case '2':\n code = 'noteheadHalf';\n break;\n default:\n code = 'noteheadBlack';\n break;\n }\n break;\n case 'M': // left for backwards compatibility\n case 'X':\n switch (duration) {\n case '1/2':\n code = 'noteheadXDoubleWhole';\n break;\n case '1':\n code = 'noteheadXWhole';\n break;\n case '2':\n code = 'noteheadXHalf';\n break;\n default:\n code = 'noteheadXBlack';\n break;\n }\n break;\n case 'CX':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircleXDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircleXWhole';\n break;\n case '2':\n code = 'noteheadCircleXHalf';\n break;\n default:\n code = 'noteheadCircleX';\n break;\n }\n break;\n case 'CI':\n switch (duration) {\n case '1/2':\n code = 'noteheadCircledDoubleWhole';\n break;\n case '1':\n code = 'noteheadCircledWhole';\n break;\n case '2':\n code = 'noteheadCircledHalf';\n break;\n default:\n code = 'noteheadCircledBlack';\n break;\n }\n break;\n case 'SQ':\n switch (duration) {\n case '1/2':\n code = 'noteheadDoubleWholeSquare';\n break;\n case '1':\n code = 'noteheadSquareWhite';\n break;\n case '2':\n code = 'noteheadSquareWhite';\n break;\n default:\n code = 'noteheadSquareBlack';\n break;\n }\n break;\n case 'TU':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleUpDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleUpWhole';\n break;\n case '2':\n code = 'noteheadTriangleUpHalf';\n break;\n default:\n code = 'noteheadTriangleUpBlack';\n break;\n }\n break;\n case 'TD':\n switch (duration) {\n case '1/2':\n code = 'noteheadTriangleDownDoubleWhole';\n break;\n case '1':\n code = 'noteheadTriangleDownWhole';\n break;\n case '2':\n code = 'noteheadTriangleDownHalf';\n break;\n default:\n code = 'noteheadTriangleDownBlack';\n break;\n }\n break;\n case 'SF':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole1';\n break;\n case '1':\n code = 'noteheadSlashedWhole1';\n break;\n case '2':\n code = 'noteheadSlashedHalf1';\n break;\n default:\n code = 'noteheadSlashedBlack1';\n }\n break;\n case 'SB':\n switch (duration) {\n case '1/2':\n code = 'noteheadSlashedDoubleWhole2';\n break;\n case '1':\n code = 'noteheadSlashedWhole2';\n break;\n case '2':\n code = 'noteheadSlashedHalf2';\n break;\n default:\n code = 'noteheadSlashedBlack2';\n }\n break;\n }\n return code;\n }\n // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\n // The default type is a regular note ('n').\n static getGlyphProps(duration, type = 'n') {\n duration = Tables.sanitizeDuration(duration);\n // Lookup duration for default glyph head code\n let code = durationCodes[duration];\n if (code === undefined) {\n code = durationCodes['4'];\n }\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code[type];\n // Try and get it from the custom list of note heads\n const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration);\n if (codeNoteHead != '')\n glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead });\n const code_head = glyphTypeProperties.code_head;\n // The default implementation of getWidth() calls Glyph.getWidth(code_head, scale).\n // This can be overridden by an individual glyph type (see slash noteheads below: Tables.SLASH_NOTEHEAD_WIDTH).\n const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale);\n // Merge duration props for 'duration' with the note head properties.\n return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties);\n }\n}\nTables.SOFTMAX_FACTOR = 10;\nTables.STEM_WIDTH = 1.5;\nTables.STEM_HEIGHT = 35;\nTables.STAVE_LINE_THICKNESS = 1;\nTables.RENDER_PRECISION_PLACES = 3;\nTables.RESOLUTION = RESOLUTION;\n/**\n * Customize this by calling Flow.setMusicFont(...fontNames);\n */\nTables.MUSIC_FONT_STACK = [];\nTables.NOTATION_FONT_SCALE = 39;\nTables.TABLATURE_FONT_SCALE = 39;\nTables.SLASH_NOTEHEAD_WIDTH = 15;\nTables.STAVE_LINE_DISTANCE = 10;\n// HACK:\n// Since text origins are positioned at the baseline, we must\n// compensate for the ascender of the text. Of course, 1 staff space is\n// a very poor approximation.\n//\n// This will be deprecated in the future. This is a temporary solution until\n// we have more robust text metrics.\nTables.TEXT_HEIGHT_OFFSET_HACK = 1;\nTables.accidentalMap = accidentals;\nTables.accidentalColumnsTable = accidentalColumns;\nTables.unicode = {\n // ♯ accidental sharp\n sharp: String.fromCharCode(0x266f),\n // ♭ accidental flat\n flat: String.fromCharCode(0x266d),\n // ♮ accidental natural\n natural: String.fromCharCode(0x266e),\n // △ major seventh\n triangle: String.fromCharCode(0x25b3),\n // ø half-diminished\n 'o-with-slash': String.fromCharCode(0x00f8),\n // ° diminished\n degrees: String.fromCharCode(0x00b0),\n // ○ diminished\n circle: String.fromCharCode(0x25cb),\n};\n/* The list of valid note types. Used by note.ts during parseNoteStruct(). */\nTables.validTypes = validNoteTypes;\n// Default time signature.\nTables.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: RESOLUTION,\n};\n// 1/2, 1, 2, 4, 8, 16, 32, 64, 128\n// NOTE: There is no 256 here! However, there are other mentions of 256 in this file.\n// For example, in durations has a 256 key, and sanitizeDuration() can return 256.\n// The sanitizeDuration() bit may need to be removed by 0xfe.\nconst durationCodes = {\n '1/2': {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 1: {\n common: {\n code_head: '',\n stem: false,\n flag: false,\n stem_up_extension: -Tables.STEM_HEIGHT,\n stem_down_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_up_extension: -Tables.STEM_HEIGHT,\n tabnote_stem_down_extension: -Tables.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Whole rest\n code_head: 'restWhole',\n ledger_code_head: 'restWholeLegerLine',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n s: {\n // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 2: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Half rest\n code_head: 'restHalf',\n ledger_code_head: 'restHalfLegerLine',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n s: {\n // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 4: {\n common: {\n code_head: '',\n stem: true,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n s: {\n // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 8: {\n common: {\n code_head: '',\n stem: true,\n flag: true,\n beam_count: 1,\n stem_beam_extension: 0,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n s: {\n // Eighth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 16: {\n common: {\n code_head: '',\n beam_count: 2,\n stem_beam_extension: 0,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n s: {\n // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 32: {\n common: {\n code_head: '',\n beam_count: 3,\n stem_beam_extension: 7.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 9,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n s: {\n // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 64: {\n common: {\n code_head: '',\n beam_count: 4,\n stem_beam_extension: 15,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 13,\n tabnote_stem_down_extension: 13,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n s: {\n // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n 128: {\n common: {\n code_head: '',\n beam_count: 5,\n stem_beam_extension: 22.5,\n stem: true,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 22,\n tabnote_stem_down_extension: 22,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n r: {\n // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -2.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n s: {\n // Hundred-twenty-eight slash\n // Drawn with canvas primitives\n getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var OutlineCode;\n(function (OutlineCode) {\n OutlineCode[OutlineCode[\"MOVE\"] = 0] = \"MOVE\";\n OutlineCode[OutlineCode[\"LINE\"] = 1] = \"LINE\";\n OutlineCode[OutlineCode[\"QUADRATIC\"] = 2] = \"QUADRATIC\";\n OutlineCode[OutlineCode[\"BEZIER\"] = 3] = \"BEZIER\";\n})(OutlineCode || (OutlineCode = {}));\nclass GlyphCacheEntry {\n constructor(fontStack, code, category) {\n this.point = -1;\n this.metrics = Glyph.loadMetrics(fontStack, code, category);\n this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);\n if (category) {\n this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1);\n }\n }\n}\nclass GlyphCache {\n constructor() {\n this.cache = new Map();\n }\n lookup(code, category) {\n let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY);\n if (entries === undefined) {\n entries = {};\n this.cache.set(Glyph.CURRENT_CACHE_KEY, entries);\n }\n const key = category ? `${code}%${category}` : code;\n let entry = entries[key];\n if (entry === undefined) {\n entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category);\n entries[key] = entry;\n }\n return entry;\n }\n}\nclass GlyphOutline {\n constructor(outline, originX, originY, scale) {\n this.outline = outline;\n this.originX = originX;\n this.originY = originY;\n this.scale = scale;\n this.i = 0;\n this.precision = 1;\n // Automatically assign private properties: this.outline, this.originX, this.originY, and this.scale.\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n }\n done() {\n return this.i >= this.outline.length;\n }\n next() {\n return Math.round((this.outline[this.i++] * this.precision) / this.precision);\n }\n nextX() {\n return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n nextY() {\n return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision;\n }\n static parse(str) {\n const result = [];\n const parts = str.split(' ');\n let i = 0;\n while (i < parts.length) {\n switch (parts[i++]) {\n case 'm':\n result.push(OutlineCode.MOVE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'l':\n result.push(OutlineCode.LINE, parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'q':\n result.push(OutlineCode.QUADRATIC, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n case 'b':\n result.push(OutlineCode.BEZIER, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]));\n break;\n }\n }\n return result;\n }\n}\nexport class Glyph extends Element {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Glyph;\n }\n /**\n * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails,\n * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue.\n *\n * @param font\n * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc.\n * @param code\n * @param key\n * @param defaultValue\n */\n static lookupFontMetric(font, category, code, key, defaultValue) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined);\n if (value === undefined) {\n // The first lookup failed, so we omit .${code} and try again (with a defaultValue this time).\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n static lookupGlyph(fontStack, code) {\n defined(fontStack, 'BadFontStack', 'Font stack is misconfigured');\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph)\n return { glyph, font };\n }\n throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n static loadMetrics(fontStack, code, category) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n if (!glyph.o)\n throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`);\n let x_shift = 0;\n let y_shift = 0;\n let scale = 1;\n if (category && font) {\n x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0);\n y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0);\n scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1);\n }\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n if (!glyph.cached_outline) {\n glyph.cached_outline = GlyphOutline.parse(glyph.o);\n }\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline: glyph.cached_outline,\n font,\n width: x_max - x_min,\n height: ha,\n };\n }\n /**\n * Renders glyphs from the default font stack.\n *\n * @param ctx Canvas or SVG context\n * @param x_pos x coordinate\n * @param y_pos y coordinate\n * @param point the point size of the font\n * @param code the glyph code in font.getGlyphs()\n * @param options\n * @returns\n */\n static renderGlyph(ctx, x_pos, y_pos, point, code, options) {\n var _a;\n const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category);\n const metrics = data.metrics;\n if (data.point != -1) {\n point = data.point;\n }\n const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1;\n const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale;\n Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale);\n return metrics;\n }\n static renderOutline(ctx, outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n ctx.beginPath();\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n ctx.moveTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.LINE:\n ctx.lineTo(go.nextX(), go.nextY());\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y);\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n break;\n }\n }\n ctx.fill();\n }\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const go = new GlyphOutline(outline, x_pos, y_pos, scale);\n const bboxComp = new BoundingBoxComputation();\n // (penX, penY) hold the pen position: the start of each stroke.\n let penX = x_pos;\n let penY = y_pos;\n let x, y;\n while (!go.done()) {\n switch (go.next()) {\n case OutlineCode.MOVE:\n // Note that we don't add any points to the bounding box until a srroke is actually drawn.\n penX = go.nextX();\n penY = go.nextY();\n break;\n case OutlineCode.LINE:\n bboxComp.addPoint(penX, penY);\n penX = go.nextX();\n penY = go.nextY();\n bboxComp.addPoint(penX, penY);\n break;\n case OutlineCode.QUADRATIC:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n case OutlineCode.BEZIER:\n x = go.nextX();\n y = go.nextY();\n bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y);\n penX = x;\n penY = y;\n break;\n }\n }\n return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height());\n }\n static getWidth(code, point, category) {\n const data = Glyph.cache.lookup(code, category);\n if (data.point != -1) {\n point = data.point;\n }\n const scale = (point * 72) / (data.metrics.font.getResolution() * 100);\n return data.bbox.getW() * scale;\n }\n /**\n * @param code\n * @param point\n * @param options\n */\n constructor(code, point, options) {\n super();\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.bbox = new BoundingBox(0, 0, 0, 0);\n this.topGlyphs = [];\n this.botGlyphs = [];\n this.options = {};\n this.scale = 1;\n this.code = code;\n this.point = point;\n this.originShift = { x: 0, y: 0 };\n this.x_shift = 0;\n this.y_shift = 0;\n if (options) {\n this.setOptions(options);\n }\n else {\n this.reset();\n }\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n getCode() {\n return this.code;\n }\n // eslint-disable-next-line\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.reset();\n }\n setPoint(point) {\n this.point = point;\n return this;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n setXShift(x_shift) {\n this.x_shift = x_shift;\n return this;\n }\n getYshift() {\n return this.y_shift;\n }\n setYShift(y_shift) {\n this.y_shift = y_shift;\n return this;\n }\n reset() {\n const data = Glyph.cache.lookup(this.code, this.options.category);\n this.metrics = data.metrics;\n // Override point from metrics file\n if (data.point != -1) {\n this.point = data.point;\n }\n this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100);\n this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale);\n }\n checkMetrics() {\n return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n getMetrics() {\n const metrics = this.checkMetrics();\n const metricsScale = metrics.scale;\n return {\n x_min: metrics.x_min * this.scale * metricsScale,\n x_max: metrics.x_max * this.scale * metricsScale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n scale: this.scale * metricsScale,\n x_shift: metrics.x_shift,\n y_shift: metrics.y_shift,\n outline: metrics.outline,\n font: metrics.font,\n ha: metrics.ha,\n };\n }\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n render(ctx, x, y) {\n const metrics = this.checkMetrics();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle(ctx);\n const xPos = x + this.originShift.x + metrics.x_shift;\n const yPos = y + this.originShift.y + metrics.y_shift;\n Glyph.renderOutline(ctx, outline, scale, xPos, yPos);\n this.restoreStyle(ctx);\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n renderToStave(x) {\n const context = this.checkContext();\n const metrics = this.checkMetrics();\n const stave = this.checkStave();\n const outline = metrics.outline;\n const scale = this.scale * metrics.scale;\n this.setRendered();\n this.applyStyle();\n const xPos = x + this.x_shift + metrics.x_shift;\n const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift;\n Glyph.renderOutline(context, outline, scale, xPos, yPos);\n this.restoreStyle();\n }\n}\nGlyph.cache = new GlyphCache();\n// The current cache key for GlyphCache above.\n// Computed when Flow.setMusicFont(...) is called.\n// It is set to a comma separated list of font names.\nGlyph.CURRENT_CACHE_KEY = '';\n// Used by the GlyphCache above.\n// Set when Flow.setMusicFont(...) is called.\nGlyph.MUSIC_FONT_STACK = [];\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var ModifierPosition;\n(function (ModifierPosition) {\n ModifierPosition[ModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n ModifierPosition[ModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n ModifierPosition[ModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n ModifierPosition[ModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n ModifierPosition[ModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n})(ModifierPosition || (ModifierPosition = {}));\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) log('Vex.Flow.Modifier', args); }\n/**\n * `Modifier` is an abstract interface for notational elements that modify\n * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n *\n * For a `Modifier` instance to be positioned correctly, it must be part of\n * a `ModifierContext`. All modifiers in the same context are rendered relative to\n * one another.\n *\n * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n * `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n */\nexport class Modifier extends Element {\n /**\n * Modifiers category string. Every modifier has a different category.\n * The `ModifierContext` uses this to determine the type and order of the modifiers.\n */\n static get CATEGORY() {\n return Category.Modifier;\n }\n /** Modifiers can be positioned almost anywhere, relative to a note. */\n static get Position() {\n return ModifierPosition;\n }\n static get PositionString() {\n return {\n center: ModifierPosition.CENTER,\n above: ModifierPosition.ABOVE,\n below: ModifierPosition.BELOW,\n left: ModifierPosition.LEFT,\n right: ModifierPosition.RIGHT,\n };\n }\n constructor() {\n super();\n this.width = 0;\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n /** Called when position changes. */\n reset() {\n // DO NOTHING.\n }\n /** Get modifier widths. */\n getWidth() {\n return this.width;\n }\n /** Set modifier widths. */\n setWidth(width) {\n this.width = width;\n return this;\n }\n /** Get attached note (`StaveNote`, `TabNote`, etc.) */\n getNote() {\n return defined(this.note, 'NoNote', 'Modifier has no note.');\n }\n /**\n * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.).\n * Also verifies that the index is valid.\n */\n checkAttachedNote() {\n const category = this.getCategory();\n defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`);\n return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`);\n }\n /**\n * Set attached note.\n * @param note (`StaveNote`, `TabNote`, etc.)\n */\n setNote(note) {\n this.note = note;\n return this;\n }\n /** Get note index, which is a specific note in a chord. */\n getIndex() {\n return this.index;\n }\n /** Check and get note index, which is a specific note in a chord. */\n checkIndex() {\n return defined(this.index, 'NoIndex', 'Modifier has an invalid index.');\n }\n /** Set note index, which is a specific note in a chord. */\n setIndex(index) {\n this.index = index;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required');\n }\n /** Every modifier must be part of a `ModifierContext`. */\n setModifierContext(c) {\n this.modifierContext = c;\n return this;\n }\n /** Get position. */\n getPosition() {\n return this.position;\n }\n /**\n * Set position.\n * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW\n */\n setPosition(position) {\n this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;\n this.reset();\n return this;\n }\n /** Set the `text_line` for the modifier. */\n setTextLine(line) {\n this.text_line = line;\n return this;\n }\n /** Shift modifier down `y` pixels. Negative values shift up. */\n setYShift(y) {\n this.y_shift = y;\n return this;\n }\n /** Set spacing from next modifier. */\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n /** Get spacing from next modifier. */\n getSpacingFromNextModifier() {\n return this.spacingFromNextModifier;\n }\n /**\n * Shift modifier `x` pixels in the direction of the modifier. Negative values\n * shift reverse.\n */\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n }\n else {\n this.x_shift += x;\n }\n return this;\n }\n /** Get shift modifier `x` */\n getXShift() {\n return this.x_shift;\n }\n /** Render the modifier onto the canvas. */\n draw() {\n this.checkContext();\n throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.');\n }\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const stave = note.getStave();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n if (stave)\n subNote.setStave(stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { RuntimeError } from './util';\n/** Music implements some standard music theory routines. */\nexport class Music {\n /** Number of an canonical notes (12). */\n static get NUM_TONES() {\n return this.canonical_notes.length;\n }\n /** Names of root notes ('c', 'd',...) */\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n /** Values of the root notes.*/\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n /** Indices of the root notes.*/\n static get root_indices() {\n return {\n c: 0,\n d: 1,\n e: 2,\n f: 3,\n g: 4,\n a: 5,\n b: 6,\n };\n }\n /** Names of canonical notes ('c', 'c#', 'd',...). */\n static get canonical_notes() {\n return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];\n }\n /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */\n static get diatonic_intervals() {\n return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];\n }\n /** NoteAccidental associated to diatonic intervals. */\n static get diatonic_accidentals() {\n return {\n unison: { note: 0, accidental: 0 },\n m2: { note: 1, accidental: -1 },\n M2: { note: 1, accidental: 0 },\n m3: { note: 2, accidental: -1 },\n M3: { note: 2, accidental: 0 },\n p4: { note: 3, accidental: 0 },\n dim5: { note: 4, accidental: -1 },\n p5: { note: 4, accidental: 0 },\n m6: { note: 5, accidental: -1 },\n M6: { note: 5, accidental: 0 },\n b7: { note: 6, accidental: -1 },\n M7: { note: 6, accidental: 0 },\n octave: { note: 7, accidental: 0 },\n };\n }\n /** Semitones shift associated to intervals .*/\n static get intervals() {\n return {\n u: 0,\n unison: 0,\n m2: 1,\n b2: 1,\n min2: 1,\n S: 1,\n H: 1,\n 2: 2,\n M2: 2,\n maj2: 2,\n T: 2,\n W: 2,\n m3: 3,\n b3: 3,\n min3: 3,\n M3: 4,\n 3: 4,\n maj3: 4,\n 4: 5,\n p4: 5,\n '#4': 6,\n b5: 6,\n aug4: 6,\n dim5: 6,\n 5: 7,\n p5: 7,\n '#5': 8,\n b6: 8,\n aug5: 8,\n 6: 9,\n M6: 9,\n maj6: 9,\n b7: 10,\n m7: 10,\n min7: 10,\n dom7: 10,\n M7: 11,\n maj7: 11,\n 8: 12,\n octave: 12,\n };\n }\n /** Semitones shifts associated with scales. */\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n minor: [2, 1, 2, 2, 1, 2, 2],\n ionian: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n phyrgian: [1, 2, 2, 2, 1, 2, 2],\n lydian: [2, 2, 2, 1, 2, 2, 1],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n aeolian: [2, 1, 2, 2, 1, 2, 2],\n locrian: [1, 2, 2, 1, 2, 2, 2],\n };\n }\n /** Scales associated with m (minor) and M (major). */\n static get scaleTypes() {\n return {\n M: Music.scales.major,\n m: Music.scales.minor,\n };\n }\n /** Accidentals abbreviations. */\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n /** Note values. */\n static get noteValues() {\n return {\n c: { root_index: 0, int_val: 0 },\n cn: { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n cb: { root_index: 0, int_val: 11 },\n cbb: { root_index: 0, int_val: 10 },\n d: { root_index: 1, int_val: 2 },\n dn: { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n db: { root_index: 1, int_val: 1 },\n dbb: { root_index: 1, int_val: 0 },\n e: { root_index: 2, int_val: 4 },\n en: { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n eb: { root_index: 2, int_val: 3 },\n ebb: { root_index: 2, int_val: 2 },\n f: { root_index: 3, int_val: 5 },\n fn: { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n fb: { root_index: 3, int_val: 4 },\n fbb: { root_index: 3, int_val: 3 },\n g: { root_index: 4, int_val: 7 },\n gn: { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n gb: { root_index: 4, int_val: 6 },\n gbb: { root_index: 4, int_val: 5 },\n a: { root_index: 5, int_val: 9 },\n an: { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n ab: { root_index: 5, int_val: 8 },\n abb: { root_index: 5, int_val: 7 },\n b: { root_index: 6, int_val: 11 },\n bn: { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n bb: { root_index: 6, int_val: 10 },\n bbb: { root_index: 6, int_val: 9 },\n };\n }\n isValidNoteValue(note) {\n return note >= 0 && note < Music.canonical_notes.length;\n }\n isValidIntervalValue(interval) {\n return interval >= 0 && interval < Music.diatonic_intervals.length;\n }\n /** Return root and accidental associated to a note. */\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n if (noteString.length > 3) {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n const note = noteString.toLowerCase();\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n return {\n root,\n accidental,\n };\n }\n else {\n throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n /** Return root, accidental and type associated to a key. */\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString);\n }\n const key = keyString.toLowerCase();\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n if (match !== null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n // Unspecified type implies major\n if (!type)\n type = 'M';\n return {\n root,\n accidental,\n type,\n };\n }\n else {\n throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n /** Note value associated to a note name. */\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`);\n }\n return value.int_val;\n }\n /** Interval value associated to an interval name. */\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value === undefined) {\n throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n return value;\n }\n /** Canonical note name associated to a value. */\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`);\n }\n return Music.canonical_notes[noteValue];\n }\n /** Interval name associated to a value. */\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n return Music.diatonic_intervals[intervalValue];\n }\n /**\n * Given a note, interval, and interval direction, produce the relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;\n if (sum < 0)\n sum += Music.NUM_TONES;\n return sum;\n }\n /**\n * Given a root and note value, produce the relative note name.\n */\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0)\n multiplier = -1;\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier;\n if (Math.abs(reverse_interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n else {\n interval = reverse_interval;\n }\n }\n if (Math.abs(interval) > 2) {\n throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n }\n else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n return relativeNoteName;\n }\n /**\n * Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n let nextNote = key;\n for (let i = 0; i < intervals.length; i++) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key)\n tones.push(nextNote);\n }\n return tones;\n }\n /**\n * Return the interval of a note, given a diatonic scale.\n * e.g., given the scale C, and the note E, returns M3.\n */\n getIntervalBetween(note1, note2, direction = 1) {\n if (direction !== 1 && direction !== -1) {\n throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`);\n }\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n let difference = direction === 1 ? note2 - note1 : note1 - note2;\n if (difference < 0)\n difference += Music.NUM_TONES;\n return difference;\n }\n /**\n * Create a scale map that represents the pitch state for a\n * `keySignature`. For example, passing a `G` to `keySignature` would\n * return a scale map with every note naturalized except for `F` which\n * has an `F#` state.\n */\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n if (!keySigParts.type)\n throw new RuntimeError('BadArguments', 'Unsupported key type: undefined');\n const scaleName = Music.scaleTypes[keySigParts.type];\n let keySigString = keySigParts.root;\n if (keySigParts.accidental)\n keySigString += keySigParts.accidental;\n if (!scaleName)\n throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature);\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n if (noteName.length === 1) {\n noteName += 'n';\n }\n scaleMap[rootName] = noteName;\n }\n return scaleMap;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Music } from './music';\nimport { Tables } from './tables';\nimport { Category, isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Accidental.DEBUG)\n log('Vex.Flow.Accidental', args);\n}\n/**\n * An `Accidental` inherits from `Modifier`, and is formatted within a\n * `ModifierContext`. Accidentals are modifiers that can be attached to\n * notes. Support is included for both western and microtonal accidentals.\n *\n * See `tests/accidental_tests.ts` for usage examples.\n */\nexport class Accidental extends Modifier {\n /** Accidentals category string. */\n static get CATEGORY() {\n return Category.Accidental;\n }\n /** Arrange accidentals inside a ModifierContext. */\n static format(accidentals, state) {\n // If there are no accidentals, no need to format their positions.\n if (!accidentals || accidentals.length === 0)\n return;\n const musicFont = Tables.currentMusicFont();\n const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding');\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing');\n const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); // padding to the left of all accidentals\n const accList = [];\n let prevNote = undefined;\n let shiftL = 0;\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const index = acc.checkIndex();\n const props = note.getKeyProps()[index];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL);\n }\n prevNote = note;\n }\n if (stave) {\n const lineSpace = stave.getSpacingBetweenLines();\n const y = stave.getYForLine(props.line);\n const accLine = Math.round((y / lineSpace) * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n }\n else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = undefined;\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n // if this is the first line, or a new line, add a lineList\n if (previousLine === undefined || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n column: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n previousLine = acc.line;\n }\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Tables.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n let totalColumns = 0;\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n }\n else {\n noFurtherConflicts = true;\n }\n }\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line);\n return a - b;\n };\n const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2));\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n let groupMember;\n let column;\n // If the group contains seven members or more, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n else {\n // If the group contains fewer than seven members, use the layouts from\n // the Tables.accidentalColumnsTable (See: tables.ts).\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = totalColumns > column ? totalColumns : column;\n }\n }\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach((line) => {\n if (line.width > columnWidths[line.column])\n columnWidths[line.column] = line.width;\n });\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach((line) => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = columnXOffsets[line.column - 1] + lineWidth;\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift + additionalPadding;\n }\n /** Helper function to determine whether two lines of accidentals collide vertically */\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) {\n // then line 2 is on top\n clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0;\n if (line1.dblSharpLine)\n clearance -= 0.5;\n }\n else {\n // line 1 is on top\n clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0;\n if (line2.dblSharpLine)\n clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n /**\n * Use this method to automatically apply accidentals to a set of `voices`.\n * The accidentals will be remembered between all the voices provided.\n * Optionally, you can also provide an initial `keySignature`.\n */\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n // Sort the tickables in each voice by their tick position in the voice.\n voices.forEach((voice) => {\n const tickPosition = new Fraction(0, 1);\n const tickable = voice.getTickables();\n tickable.forEach((t) => {\n if (t.shouldIgnoreTicks())\n return;\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [t];\n }\n else {\n notesAtPosition.push(t);\n }\n tickPosition.add(t.getTicks());\n });\n });\n const music = new Music();\n // Default key signature is C major.\n if (!keySignature)\n keySignature = 'C';\n // Get the scale map, which represents the current state of each pitch.\n const scaleMapKey = music.createScaleMap(keySignature);\n const scaleMap = {};\n tickPositions.forEach((tickPos) => {\n const tickables = tickNoteMap[tickPos];\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n const processNote = (t) => {\n // Only StaveNote implements .addModifier(), which is used below.\n if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) {\n return;\n }\n // Go through each key and determine if an accidental should be applied.\n const staveNote = t;\n staveNote.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n const octave = keyString.split('/')[1];\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n // Determine if the current pitch has the same accidental\n // as the scale state\n if (!scaleMap[key.root + octave])\n scaleMap[key.root + octave] = scaleMapKey[key.root];\n const sameAccidental = scaleMap[key.root + octave] === pitch;\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(keyString) > -1;\n // Remove accidentals\n staveNote.getModifiers().forEach((modifier, index) => {\n if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) {\n staveNote.getModifiers().splice(index, 1);\n }\n });\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root + octave] = pitch;\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n // Attach the accidental to the StaveNote\n staveNote.addModifier(accidental, keyIndex);\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(keyString);\n }\n });\n // process grace notes\n staveNote.getModifiers().forEach((modifier) => {\n if (isGraceNoteGroup(modifier)) {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n tickables.forEach(processNote);\n });\n }\n /**\n * Create accidental.\n * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`.\n * For example: `#`, `##`, `b`, `n`, etc.\n */\n constructor(type) {\n super();\n L('New accidental: ', type);\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n this.accidental = Tables.accidentalCodes(this.type);\n defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`);\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.reset();\n }\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n if (this.cautionary) {\n this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n /** Get width in pixels. */\n getWidth() {\n if (this.cautionary) {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n const parenWidth = parenLeft.getMetrics().width +\n parenRight.getMetrics().width +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding;\n return this.glyph.getMetrics().width + parenWidth;\n }\n else {\n return this.glyph.getMetrics().width;\n }\n }\n /** Attach this accidental to `note`, which must be a `StaveNote`. */\n setNote(note) {\n defined(note, 'ArgumentError', `Bad note value: ${note}`);\n this.note = note;\n // Accidentals attached to grace notes are rendered smaller.\n if (isGraceNote(note)) {\n this.render_options.font_scale = 25;\n this.reset();\n }\n return this;\n }\n /** If called, draws parenthesis around accidental. */\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n /** Render accidental onto canvas. */\n draw() {\n const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n if (!cautionary) {\n glyph.render(ctx, accX, accY);\n }\n else {\n const parenLeft = defined(this.parenLeft);\n const parenRight = defined(this.parenRight);\n // Render the accidental in parentheses.\n parenRight.render(ctx, accX, accY);\n accX -= parenRight.getMetrics().width;\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(ctx, accX, accY);\n accX -= glyph.getMetrics().width;\n accX -= parenLeftPadding;\n parenLeft.render(ctx, accX, accY);\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */\nAccidental.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Stem.DEBUG)\n log('Vex.Flow.Stem', args);\n}\nexport class Stem extends Element {\n static get CATEGORY() {\n return Category.Stem;\n }\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n // Theme\n static get WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n constructor(options) {\n super();\n this.stem_up_y_offset = 0;\n this.stem_down_y_offset = 0;\n this.stem_up_y_base_offset = 0;\n this.stem_down_y_base_offset = 0;\n // Default notehead x bounds\n this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0;\n this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0;\n // Y bounds for top/bottom most notehead\n this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0;\n this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0;\n // Stem top extension\n this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0;\n // Direction of the stem\n this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0;\n // Flag to override all draw calls\n this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false;\n this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false;\n this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0;\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0;\n this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0;\n this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0;\n this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0;\n }\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) {\n this.stem_direction = direction;\n }\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) {\n this.stem_extension = ext;\n }\n getExtension() {\n return this.stem_extension;\n }\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset;\n const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); // parentheses just for grouping.\n return unsigned_height * this.stem_direction;\n }\n getBoundingBox() {\n throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.');\n }\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n adjustHeightForFlag() {\n this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3);\n }\n adjustHeightForBeam() {\n this.renderHeightAdjustment = -Stem.WIDTH / 2;\n }\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide)\n return;\n const ctx = this.checkContext();\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n }\n else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n const stemHeight = this.getHeight();\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0;\n // Draw the stem\n ctx.save();\n this.applyStyle();\n ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true });\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction);\n ctx.stroke();\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */\nStem.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextFormatter.DEBUG)\n log('Vex.Flow.TextFormatter', args);\n}\n/**\n * Text widths are stored in a cache, so we don't have to recompute widths\n * for the same font + string combination.\n *\n * The cache is first keyed by the font information. The key is of the form:\n * `${family}-${size}-${weight}-${style}`\n * The second level key is the specific text to be measured.\n *\n * The stored value is the measured width in `em` units.\n * textWidth == textWidthCache[cacheKey][textToMeasure]\n */\nconst textWidthCache = {};\nconst textHeightCache = {};\n/**\n * Applications may register additional fonts via `TextFormatter.registerInfo(info)`.\n * The metrics for those fonts will be made available to the application.\n */\nconst registry = {};\nexport class TextFormatter {\n /**\n * Return all registered font families.\n */\n static getFontFamilies() {\n const registeredFonts = [];\n for (const fontFamily in registry) {\n const formatterInfo = registry[fontFamily];\n registeredFonts.push(Object.assign({}, formatterInfo));\n }\n return registeredFonts;\n }\n /**\n * Call `TextFormatter.registerInfo(info)` to register font information before using this method.\n *\n * This method creates a formatter for the font that most closely matches the requested font.\n * We compare font family, bold, and italic attributes.\n * This method will return a fallback formatter if there are no matches.\n */\n static create(requestedFont = {}) {\n L('create: ', requestedFont);\n if (!requestedFont.family) {\n requestedFont.family = Font.SANS_SERIF;\n }\n // TODO: One potential (small) optimization is to cache the TextFormatter object\n // returned for each font info. We would probably want to clear the cache if\n // the registry is ever updated.\n const candidates = [];\n // The incoming font family is a string of comma-separated font family names.\n // (e.g., `PetalumaScript, Arial, sans-serif`).\n const requestedFamilies = requestedFont.family.split(/\\s*,\\s*/);\n for (const requestedFamily of requestedFamilies) {\n for (const fontFamily in registry) {\n // Support cases where the registry contains 'Roboto Slab Medium',\n // but the requestedFont.family is 'Roboto Slab'.\n if (fontFamily.startsWith(requestedFamily)) {\n candidates.push(registry[fontFamily]);\n }\n }\n if (candidates.length > 0) {\n break;\n }\n }\n let formatter;\n if (candidates.length === 0) {\n // No match, so return a fallback text formatter.\n formatter = new TextFormatter(Object.values(registry)[0]);\n }\n else if (candidates.length === 1) {\n formatter = new TextFormatter(candidates[0]);\n }\n else {\n const bold = Font.isBold(requestedFont.weight);\n const italic = Font.isItalic(requestedFont.style);\n const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic);\n if (perfectMatch) {\n formatter = new TextFormatter(perfectMatch);\n }\n else {\n const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold);\n if (partialMatch) {\n formatter = new TextFormatter(partialMatch);\n }\n else {\n formatter = new TextFormatter(candidates[0]);\n }\n }\n }\n const fontSize = requestedFont.size;\n if (typeof fontSize !== 'undefined') {\n const fontSizeInPt = Font.convertSizeToPointValue(fontSize);\n formatter.setFontSize(fontSizeInPt);\n }\n return formatter;\n }\n /**\n * @param fontFamily used as a key to the font registry.\n * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)`\n */\n static getInfo(fontFamily) {\n return registry[fontFamily];\n }\n /**\n * Apps may register their own fonts and metrics, and those metrics\n * will be available to the app for formatting.\n *\n * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory.\n * @param info\n * @param overwrite\n */\n static registerInfo(info, overwrite = false) {\n L('registerInfo: ', info, overwrite);\n const fontFamily = info.family;\n const currFontInfo = registry[fontFamily];\n if (currFontInfo === undefined || overwrite) {\n registry[fontFamily] = info;\n }\n }\n /**\n * Use `TextFormatter.create(...)` to build an instance from information previously\n * registered via `TextFormatter.registerInfo(info)`.\n */\n constructor(formatterInfo) {\n /** Font family. */\n this.family = '';\n /** Specified in `pt` units. */\n this.size = 14;\n /** Font metrics are extracted at 1000 upem (units per em). */\n this.resolution = 1000;\n /**\n * For text formatting, we do not require glyph outlines, but instead rely on glyph\n * bounding box metrics such as:\n * ```\n * {\n * x_min: 48,\n * x_max: 235,\n * y_min: -17,\n * y_max: 734,\n * ha: 751,\n * leftSideBearing: 48,\n * advanceWidth: 286,\n * }\n * ```\n */\n this.glyphs = {};\n this.serifs = false;\n this.monospaced = false;\n this.italic = false;\n this.bold = false;\n this.superscriptOffset = 0;\n this.subscriptOffset = 0;\n this.maxSizeGlyph = '@';\n // This is an internal key used to index the `textWidthCache`.\n this.cacheKey = '';\n this.updateParams(formatterInfo);\n }\n get localHeightCache() {\n var _a;\n if (textHeightCache[this.cacheKey] === undefined) {\n textHeightCache[this.cacheKey] = {};\n }\n return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {};\n }\n updateParams(params) {\n if (params.family)\n this.family = params.family;\n if (params.resolution)\n this.resolution = params.resolution;\n if (params.glyphs)\n this.glyphs = params.glyphs;\n if (params.serifs)\n this.serifs = params.serifs;\n if (params.monospaced)\n this.monospaced = params.monospaced;\n if (params.italic)\n this.italic = params.italic;\n if (params.bold)\n this.bold = params.bold;\n if (params.maxSizeGlyph)\n this.maxSizeGlyph = params.maxSizeGlyph;\n if (params.superscriptOffset)\n this.superscriptOffset = params.superscriptOffset;\n if (params.subscriptOffset)\n this.subscriptOffset = params.subscriptOffset;\n this.updateCacheKey();\n }\n /** Create a hash with the current font data, so we can cache computed widths. */\n updateCacheKey() {\n const family = this.family.replace(/\\s+/g, '_');\n const size = this.size;\n const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL;\n const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL;\n // Use the same key format as SVGContext.\n this.cacheKey = `${family}%${size}%${weight}%${style}`;\n }\n /**\n * The glyphs table is indexed by the character (e.g., 'C', '@').\n * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts.\n */\n getGlyphMetrics(character) {\n if (this.glyphs[character]) {\n return this.glyphs[character];\n }\n else {\n return this.glyphs[this.maxSizeGlyph];\n }\n }\n get maxHeight() {\n const metrics = this.getGlyphMetrics(this.maxSizeGlyph);\n return (metrics.ha / this.resolution) * this.fontSizeInPixels;\n }\n /**\n * Retrieve the character's advanceWidth as a fraction of an `em` unit.\n * For the space character ' ' as defined in the:\n * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25.\n * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485.\n */\n getWidthForCharacterInEm(c) {\n var _a;\n const metrics = this.getGlyphMetrics(c);\n if (!metrics) {\n // An arbitrary number, close to the `em` width of the '#' and '5' characters in PetalumaScript.\n return 0.65;\n }\n else {\n const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0;\n return advanceWidth / this.resolution;\n }\n }\n /**\n * Retrieve the character's y bounds (ymin, ymax) and height.\n */\n getYForCharacterInPx(c) {\n const metrics = this.getGlyphMetrics(c);\n const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n if (!metrics) {\n return rv;\n }\n else {\n if (typeof metrics.y_min === 'number') {\n rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels;\n }\n if (typeof metrics.y_max === 'number') {\n rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels;\n }\n rv.height = rv.yMax - rv.yMin;\n return rv;\n }\n }\n getYForStringInPx(str) {\n const entry = this.localHeightCache;\n const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight };\n const cache = entry[str];\n if (cache !== undefined) {\n return cache;\n }\n for (let i = 0; i < str.length; ++i) {\n const curY = this.getYForCharacterInPx(str[i]);\n extent.yMin = Math.min(extent.yMin, curY.yMin);\n extent.yMax = Math.max(extent.yMax, curY.yMax);\n extent.height = extent.yMax - extent.yMin;\n }\n entry[str] = extent;\n return extent;\n }\n /**\n * Retrieve the total width of `text` in `em` units.\n */\n getWidthForTextInEm(text) {\n const key = this.cacheKey;\n // Get the cache for this specific font family, size, weight, style combination.\n // The cache contains previously computed widths for different `text` strings.\n let cachedWidths = textWidthCache[key];\n if (cachedWidths === undefined) {\n cachedWidths = {};\n textWidthCache[key] = cachedWidths;\n }\n let width = cachedWidths[text];\n if (width === undefined) {\n width = 0;\n for (let i = 0; i < text.length; ++i) {\n width += this.getWidthForCharacterInEm(text[i]);\n }\n cachedWidths[text] = width;\n }\n return width;\n }\n /** The width of the text (in `em`) is scaled by the font size (in `px`). */\n getWidthForTextInPx(text) {\n return this.getWidthForTextInEm(text) * this.fontSizeInPixels;\n }\n /**\n * @param size in pt.\n */\n setFontSize(size) {\n this.size = size;\n // The width cache key depends on the current font size.\n this.updateCacheKey();\n return this;\n }\n /** `this.size` is specified in points. Convert to pixels. */\n get fontSizeInPixels() {\n return this.size * Font.scaleToPxFrom.pt;\n }\n getResolution() {\n return this.resolution;\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */\nTextFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote, isTabNote } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Annotation.DEBUG)\n log('Vex.Flow.Annotation', args);\n}\nexport var AnnotationHorizontalJustify;\n(function (AnnotationHorizontalJustify) {\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n AnnotationHorizontalJustify[AnnotationHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {}));\nexport var AnnotationVerticalJustify;\n(function (AnnotationVerticalJustify) {\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER\"] = 2] = \"CENTER\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"BOTTOM\"] = 3] = \"BOTTOM\";\n AnnotationVerticalJustify[AnnotationVerticalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {}));\n/**\n * Annotations are modifiers that can be attached to\n * notes.\n *\n * See `tests/annotation_tests.ts` for usage examples.\n */\nexport class Annotation extends Modifier {\n /** Annotations category string. */\n static get CATEGORY() {\n return Category.Annotation;\n }\n // Use the same padding for annotations as note head so the\n // words don't run into each other.\n static get minAnnotationPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange annotations within a `ModifierContext` */\n static format(annotations, state) {\n if (!annotations || annotations.length === 0)\n return false;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n const textFormatter = TextFormatter.create(annotation.textFont);\n // Text height is expressed in fractional stave spaces.\n const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE;\n let verticalSpaceNeeded = textLines;\n const note = annotation.checkAttachedNote();\n const glyphWidth = note.getGlyphProps().getWidth();\n // Get the text width from the font metrics.\n const textWidth = textFormatter.getWidthForTextInPx(annotation.text);\n if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding;\n }\n else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, textWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding;\n rightWidth = Math.max(rightWidth, textWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n const stave = note.getStave();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n let lines = 5;\n if (isTabNote(note)) {\n if (note.render_options.draw_stem) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n else {\n stemHeight = 0;\n }\n }\n else if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem && note.getNoteType() === 'n') {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n if (stave) {\n lines = stave.getNumLines();\n }\n if (annotation.verticalJustification === this.VerticalJustify.TOP) {\n let noteLine = note.getLineNumber(true);\n if (isTabNote(note)) {\n noteLine = lines - (note.leastString() - 0.5);\n }\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n const curTop = noteLine + state.top_text_line + 0.5;\n if (curTop < lines) {\n annotation.setTextLine(lines - noteLine);\n verticalSpaceNeeded += lines - noteLine;\n state.top_text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line += verticalSpaceNeeded;\n }\n }\n else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) {\n let noteLine = lines - note.getLineNumber();\n if (isTabNote(note)) {\n noteLine = note.greatestString() - 1;\n }\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n const curBottom = noteLine + state.text_line + 1;\n if (curBottom < lines) {\n annotation.setTextLine(lines - curBottom);\n verticalSpaceNeeded += lines - curBottom;\n state.text_line = verticalSpaceNeeded;\n }\n else {\n annotation.setTextLine(state.text_line);\n state.text_line += verticalSpaceNeeded;\n }\n }\n else {\n annotation.setTextLine(state.text_line);\n }\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n /**\n * Annotations inherit from `Modifier` and is positioned correctly when\n * in a `ModifierContext`.\n * Create a new `Annotation` with the string `text`.\n */\n constructor(text) {\n super();\n this.text = text;\n this.horizontalJustification = AnnotationHorizontalJustify.CENTER;\n // warning: the default in the constructor is TOP, but in the factory the default is BOTTOM.\n // this is to support legacy application that may expect this.\n this.verticalJustification = AnnotationVerticalJustify.TOP;\n this.resetFont();\n // The default width is calculated from the text.\n this.setWidth(Tables.textWidth(text));\n }\n /**\n * Set vertical position of text (above or below stave).\n * @param just value in `AnnotationVerticalJustify`.\n */\n setVerticalJustification(just) {\n this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;\n return this;\n }\n /**\n * Get horizontal justification.\n */\n getJustification() {\n return this.horizontalJustification;\n }\n /**\n * Set horizontal justification.\n * @param justification value in `Annotation.Justify`.\n */\n setJustification(just) {\n this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just;\n return this;\n }\n /** Render text beside the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n const textFormatter = TextFormatter.create(this.textFont);\n const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index);\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n // Apply style might not save context, if this.style is undefined, so we\n // still need to save context state just before this, since we will be\n // changing ctx parameters below.\n this.applyStyle();\n ctx.openGroup('annotation', this.getAttribute('id'));\n ctx.setFont(this.textFont);\n const text_width = textFormatter.getWidthForTextInPx(this.text);\n const text_height = textFormatter.getYForStringInPx(this.text).height;\n let x;\n let y;\n if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) {\n x = start.x - text_width;\n }\n else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) {\n x = start.x - text_width / 2;\n } /* CENTER_STEM */\n else {\n x = note.getStemX() - text_width / 2;\n }\n let stem_ext = {};\n let spacing = 0;\n const has_stem = note.hasStem();\n const stave = note.checkStave();\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = note.checkStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) {\n // Use the largest (lowest) Y value\n const ys = note.getYs();\n y = ys.reduce((a, b) => (a > b ? a : b));\n y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height;\n if (has_stem && stemDirection === Stem.DOWN) {\n y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line);\n }\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) {\n const yt = note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n }\n else if (this.verticalJustification === AnnotationVerticalJustify.TOP) {\n const topY = Math.min(...note.getYs());\n y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE;\n if (has_stem && stemDirection === Stem.UP) {\n // If the stem is above the stave already, go with default line width vs. actual\n // since the lines between don't really matter.\n spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing;\n y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1));\n }\n } /* CENTER_STEM */\n else {\n const extents = note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;\n }\n L('Rendering annotation: ', this.text, x, y);\n ctx.fillText(this.text, x, y);\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */\nAnnotation.DEBUG = false;\nAnnotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n/** Text annotations can be positioned and justified relative to the note. */\nAnnotation.HorizontalJustify = AnnotationHorizontalJustify;\nAnnotation.HorizontalJustifyString = {\n left: AnnotationHorizontalJustify.LEFT,\n right: AnnotationHorizontalJustify.RIGHT,\n center: AnnotationHorizontalJustify.CENTER,\n centerStem: AnnotationHorizontalJustify.CENTER_STEM,\n};\nAnnotation.VerticalJustify = AnnotationVerticalJustify;\nAnnotation.VerticalJustifyString = {\n above: AnnotationVerticalJustify.TOP,\n top: AnnotationVerticalJustify.TOP,\n below: AnnotationVerticalJustify.BOTTOM,\n bottom: AnnotationVerticalJustify.BOTTOM,\n center: AnnotationVerticalJustify.CENTER,\n centerStem: AnnotationVerticalJustify.CENTER_STEM,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Articulation.DEBUG)\n log('Vex.Flow.Articulation', args);\n}\nconst { ABOVE, BELOW } = Modifier.Position;\nfunction roundToNearestHalf(mathFn, value) {\n return mathFn(value / 0.5) * 0.5;\n}\n// This includes both staff and ledger lines\nfunction isWithinLines(line, position) {\n return position === ABOVE ? line <= 5 : line >= 1;\n}\nfunction getRoundingFunction(line, position) {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n }\n else {\n return Math.floor;\n }\n }\n else {\n return Math.round;\n }\n}\nfunction snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + HALF_STAFF_SPACE * -offsetDirection;\n }\n else {\n return snappedLine;\n }\n}\n// Helper function for checking if a Note object is either a StaveNote or a GraceNote.\nconst isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note);\nfunction getTopY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return stemBaseY;\n }\n }\n else {\n return Math.min(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n return note.checkStave().getYForTopText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\nfunction getBottomY(note, textLine) {\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n }\n else {\n return stemTipY;\n }\n }\n else {\n return Math.max(...note.getYs());\n }\n }\n else if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return note.checkStave().getYForBottomText(textLine);\n }\n else {\n return stemTipY;\n }\n }\n else {\n return note.checkStave().getYForBottomText(textLine);\n }\n }\n else {\n throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');\n }\n}\n/**\n * Get the initial offset of the articulation from the y value of the starting position.\n * This is required because the top/bottom text positions already have spacing applied to\n * provide a \"visually pleasant\" default position. However the y values provided from\n * the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n * normalizes this asymmetry.\n * @param note\n * @param position\n * @returns\n */\nfunction getInitialOffset(note, position) {\n const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN);\n if (isStaveOrGraceNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n }\n else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n }\n else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Articulations and Accents are modifiers that can be\n * attached to notes. The complete list of articulations is available in\n * `tables.ts` under `Vex.Flow.articulationCodes`.\n *\n * See `tests/articulation_tests.ts` for usage examples.\n */\nexport class Articulation extends Modifier {\n /** Articulations category string. */\n static get CATEGORY() {\n return Category.Articulation;\n }\n /**\n * FIXME:\n * Most of the complex formatting logic (ie: snapping to space) is\n * actually done in .render(). But that logic belongs in this method.\n *\n * Unfortunately, this isn't possible because, by this point, stem lengths\n * have not yet been finalized. Finalized stem lengths are required to determine the\n * initial position of any stem-side articulation.\n *\n * This indicates that all objects should have their stave set before being\n * formatted. It can't be an optional if you want accurate vertical positioning.\n * Consistently positioned articulations that play nice with other modifiers\n * won't be possible until we stop relying on render-time formatting.\n *\n * Ideally, when this function has completed, the vertical articulation positions\n * should be ready to render without further adjustment. But the current state\n * is far from this ideal.\n */\n static format(articulations, state) {\n if (!articulations || articulations.length === 0)\n return false;\n const margin = 0.5;\n let maxGlyphWidth = 0;\n const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin);\n articulations.forEach((articulation) => {\n const note = articulation.checkAttachedNote();\n maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth);\n let lines = 5;\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let stemHeight = 0;\n // Decide if we need to consider beam direction in placement.\n if (isStemmableNote(note)) {\n const stem = note.getStem();\n if (stem) {\n stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE;\n }\n }\n const stave = note.getStave();\n if (stave) {\n lines = stave.getNumLines();\n }\n if (articulation.getPosition() === ABOVE) {\n let noteLine = note.getLineNumber(true);\n if (stemDirection === Stem.UP) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.top_text_line, ABOVE);\n const curTop = noteLine + state.top_text_line + 0.5;\n // If articulation must be above stave, add lines between note and stave top\n if (!articulation.articulation.between_lines && curTop < lines) {\n increment += lines - curTop;\n }\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else if (articulation.getPosition() === BELOW) {\n let noteLine = Math.max(lines - note.getLineNumber(), 0);\n if (stemDirection === Stem.DOWN) {\n noteLine += stemHeight;\n }\n let increment = getIncrement(articulation, state.text_line, BELOW);\n const curBottom = noteLine + state.text_line + 0.5;\n // if articulation must be below stave, add lines from note to stave bottom\n if (!articulation.articulation.between_lines && curBottom < lines) {\n increment += lines - curBottom;\n }\n articulation.setTextLine(state.text_line);\n state.text_line += increment;\n }\n });\n const width = articulations\n .map((articulation) => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0));\n state.left_shift += overlap / 2;\n state.right_shift += overlap / 2;\n return true;\n }\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations)\n return;\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n accent: 'a>',\n };\n articulations\n .split(',')\n .map((articString) => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position)\n artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map((artic) => note.addModifier(artic, 0));\n }\n /**\n * Create a new articulation.\n * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code.\n *\n * Notes (by default):\n * - Glyph codes ending with 'Above' will be positioned ABOVE\n * - Glyph codes ending with 'Below' will be positioned BELOW\n */\n constructor(type) {\n super();\n this.type = type;\n this.position = ABOVE;\n this.render_options = {\n font_scale: 38,\n };\n this.reset();\n }\n reset() {\n this.articulation = Tables.articulationCodes(this.type);\n // Use type as glyph code, if not defined as articulation code\n if (!this.articulation) {\n this.articulation = { code: this.type, between_lines: false };\n if (this.type.endsWith('Above'))\n this.position = ABOVE;\n if (this.type.endsWith('Below'))\n this.position = BELOW;\n }\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale);\n defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`);\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /** Set if articulation should be rendered between lines. */\n setBetweenLines(betweenLines = true) {\n this.articulation.between_lines = betweenLines;\n return this;\n }\n /** Render articulation in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const index = this.checkIndex();\n const { position, glyph, text_line: textLine } = this;\n const canSitBetweenLines = this.articulation.between_lines;\n const stave = note.checkStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = isTabNote(note);\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n const initialOffset = getInitialOffset(note, position);\n const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;\n return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;\n },\n }[position]();\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + Number(noteLine);\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n if (isWithinLines(snappedLine, position))\n glyph.setOrigin(0.5, 0.5);\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection;\n }\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n glyph.render(ctx, x, y);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */\nArticulation.DEBUG = false;\nArticulation.INITIAL_OFFSET = -0.5;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2021.\n// MIT License\nimport { Category } from './typeguard';\nexport class RenderContext {\n static get CATEGORY() {\n return Category.RenderContext;\n }\n set font(f) {\n this.setFont(f);\n }\n get font() {\n return this.getFont();\n }\n /**\n * This is kept for backwards compatibility with 3.0.9.\n * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand.\n */\n setRawFont(f) {\n this.setFont(f);\n return this;\n }\n}\n/**\n * Draw a tiny dot marker on the specified context. A great debugging aid.\n * @param ctx context\n * @param x dot x coordinate\n * @param y dot y coordinate\n * @param color\n */\nexport function drawDot(ctx, x, y, color = '#F55') {\n ctx.save();\n ctx.setFillStyle(color);\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Tickable represents a element that sit on a score and\n * has a duration, i.e., Tickables occupy space in the musical rendering dimension.\n */\nexport class Tickable extends Element {\n static get CATEGORY() {\n return Category.Tickable;\n }\n constructor() {\n super();\n this._preFormatted = false;\n this._postFormatted = false;\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n this.modifiers = [];\n this.tupletStack = [];\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n // The number of formatting iterations undergone.\n iterations: 0,\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n /** Reset the Tickable, this function will be overloaded. */\n reset() {\n return this;\n }\n /** Return the ticks. */\n getTicks() {\n return this.ticks;\n }\n /** Check if it ignores the ticks. */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Ignore the ticks. */\n setIgnoreTicks(flag) {\n this.ignore_ticks = flag;\n return this;\n }\n /** Set width of note. Used by the formatter for positioning. */\n setWidth(width) {\n this.width = width;\n }\n /** Get width of note. Used by the formatter for positioning. */\n getWidth() {\n if (!this._preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n /** Displace note by `x` pixels. Used by the formatter. */\n setXShift(x) {\n this.x_shift = x;\n return this;\n }\n /** Get the `x` displaced pixels of the note. */\n getXShift() {\n return this.x_shift;\n }\n /** Get `x` position of this tick context. */\n getX() {\n const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`);\n return tickContext.getX() + this.x_shift;\n }\n /** Return the formatterMetrics. */\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n /** Return the center `x` shift. */\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n return 0;\n }\n /** Set the center `x` shift. */\n setCenterXShift(centerXShift) {\n this.center_x_shift = centerXShift;\n return this;\n }\n // Check if tickable is center aligned. */\n isCenterAligned() {\n return this.align_center;\n }\n // Set/unset center alignment. */\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n /**\n * Return the associated voice. Every tickable must be associated with a voice.\n * This allows formatters and preFormatter to associate them with the right modifierContexts.\n */\n getVoice() {\n return defined(this.voice, 'NoVoice', 'Tickable has no voice.');\n }\n /** Set the associated voice. */\n setVoice(voice) {\n this.voice = voice;\n }\n /** Get the tuplet. */\n getTuplet() {\n return this.tuplet;\n }\n /** Return a list of Tuplets. */\n getTupletStack() {\n return this.tupletStack;\n }\n /**\n * Reset the specific Tuplet (if this is not provided, all tuplets are reset).\n * Remove any prior tuplets from the tick calculation and\n * reset the intrinsic tick value.\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n /** Attach to new tuplet. */\n setTuplet(tuplet) {\n if (tuplet) {\n this.tupletStack.push(tuplet);\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n this.tuplet = tuplet;\n return this;\n }\n /**\n * Add self to the provided ModifierContext `mc`.\n * If this tickable has modifiers, set modifierContext.\n * @returns this\n */\n addToModifierContext(mc) {\n this.modifierContext = mc;\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addMember(this.modifiers[i]);\n }\n this.modifierContext.addMember(this);\n this._preFormatted = false;\n return this;\n }\n /**\n * Optional, if tickable has modifiers, associate a Modifier.\n * @param mod the modifier\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addModifier(modifier, index = 0) {\n this.modifiers.push(modifier);\n this._preFormatted = false;\n return this;\n }\n /** Get the list of associated modifiers. */\n getModifiers() {\n return this.modifiers;\n }\n /** Set the Tick Context. */\n setTickContext(tc) {\n this.tickContext = tc;\n this._preFormatted = false;\n }\n checkTickContext(message = 'Tickable has no tick context.') {\n return defined(this.tickContext, 'NoTickContext', message);\n }\n /** Preformat the Tickable. */\n preFormat() {\n if (this._preFormatted)\n return;\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n /** Set preformatted status. */\n set preFormatted(value) {\n this._preFormatted = value;\n }\n get preFormatted() {\n return this._preFormatted;\n }\n /** Postformat the Tickable. */\n postFormat() {\n if (this._postFormatted)\n return this;\n this._postFormatted = true;\n return this;\n }\n /** Set postformatted status. */\n set postFormatted(value) {\n this._postFormatted = value;\n }\n get postFormatted() {\n return this._postFormatted;\n }\n /** Return the intrinsic ticks. */\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n /** Set the intrinsic ticks. */\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Get the tick multiplier. */\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n /** Apply a tick multiplier. */\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n /** Set the duration. */\n setDuration(duration) {\n const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n return tickContext.getX();\n }\n /** Attach this note to a modifier context. */\n setModifierContext(mc) {\n this.modifierContext = mc;\n return this;\n }\n /** Get `ModifierContext`. */\n getModifierContext() {\n return this.modifierContext;\n }\n /** Check and get `ModifierContext`. */\n checkModifierContext() {\n return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.');\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { drawDot } from './rendercontext';\nimport { Tables } from './tables';\nimport { Tickable } from './tickable';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\n/**\n * Note implements an abstract interface for notes and chords that\n * are rendered on a stave. Notes have some common properties: All of them\n * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n *\n * Some notes have stems, heads, dots, etc. Most notational elements that\n * surround a note are called *modifiers*, and every note has an associated\n * array of them. All notes also have a rendering context and belong to a stave.\n */\nexport class Note extends Tickable {\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // STATIC MEMBERS\n static get CATEGORY() {\n return Category.Note;\n }\n /** Debug helper. Displays various note metrics for the given note. */\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n const y = yPos + 7;\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n static parseDuration(durationString) {\n if (!durationString) {\n return undefined;\n }\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) {\n return undefined;\n }\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n return { duration, dots, type };\n }\n static parseNoteStruct(noteStruct) {\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(noteStruct.duration);\n if (!durationProps) {\n return undefined;\n }\n // If specified type is invalid, return undefined.\n let type = noteStruct.type;\n if (type && !Tables.validTypes[type]) {\n return undefined;\n }\n // If no type specified, check duration or custom types\n const customTypes = [];\n if (!type) {\n type = durationProps.type || 'n';\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3 ? result[2] : type);\n });\n }\n }\n // Calculate the tick duration of the note\n let ticks = Tables.durationToTicks(durationProps.duration);\n if (!ticks) {\n return undefined;\n }\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof dots !== 'number') {\n return undefined;\n }\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1)\n return undefined;\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n /**\n * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n * positioning and layout.\n *\n * @param noteStruct To create a new note you need to provide a `noteStruct`.\n */\n constructor(noteStruct) {\n super();\n if (!noteStruct) {\n throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');\n }\n /** Parses `noteStruct` and get note properties. */\n const parsedNoteStruct = Note.parseNoteStruct(noteStruct);\n if (!parsedNoteStruct) {\n throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`);\n }\n // Set note properties from parameters.\n this.keys = noteStruct.keys || [];\n // per-pitch properties\n this.keyProps = [];\n this.duration = parsedNoteStruct.duration;\n this.noteType = parsedNoteStruct.type;\n this.customTypes = parsedNoteStruct.customTypes;\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n }\n else {\n // Default duration\n this.setIntrinsicTicks(parsedNoteStruct.ticks);\n }\n this.modifiers = [];\n // Get the glyph code for this note from the font.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t));\n // Note to play for audio players.\n this.playNote = undefined;\n // Positioning contexts used by the Formatter.\n this.ignore_ticks = false;\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n // The render surface.\n this.render_options = {\n annotation_spacing: 5,\n glyph_font_scale: 1,\n stroke_px: 1,\n scale: 1,\n font: '',\n y_shift: 0,\n };\n }\n /**\n * Get the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n getPlayNote() {\n return this.playNote;\n }\n /**\n * Set the play note, which is arbitrary data that can be used by an\n * audio player.\n */\n setPlayNote(note) {\n this.playNote = note;\n return this;\n }\n /**\n * @returns true if this note is a type of rest.\n *\n * Rests don't have pitches, but take up space in the score.\n * Subclasses should override this default implementation.\n */\n isRest() {\n return false;\n }\n /** Add stroke. */\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.preFormatted = false;\n return this;\n }\n /** Get the target stave. */\n getStave() {\n return this.stave;\n }\n /** Check and get the target stave. */\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /** Set the target stave. */\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.setContext(this.stave.getContext());\n return this;\n }\n /** Get spacing to the left of the notes. */\n getLeftDisplacedHeadPx() {\n return this.leftDisplacedHeadPx;\n }\n /** Get spacing to the right of the notes. */\n getRightDisplacedHeadPx() {\n return this.rightDisplacedHeadPx;\n }\n /** Set spacing to the left of the notes. */\n setLeftDisplacedHeadPx(x) {\n this.leftDisplacedHeadPx = x;\n return this;\n }\n /** Set spacing to the right of the notes. */\n setRightDisplacedHeadPx(x) {\n this.rightDisplacedHeadPx = x;\n return this;\n }\n /** True if this note has no duration (e.g., bar notes, spacers, etc.). */\n shouldIgnoreTicks() {\n return this.ignore_ticks;\n }\n /** Get the stave line number for the note. */\n // eslint-disable-next-line\n getLineNumber(isTopNote) {\n return 0;\n }\n /** Get the stave line number for rest. */\n getLineForRest() {\n return 0;\n }\n /**\n * @deprecated Use `getGlyphProps()` instead.\n */\n // eslint-disable-next-line\n getGlyph() {\n return this.glyphProps;\n }\n /** Get the glyph associated with this note. */\n getGlyphProps() {\n return this.glyphProps;\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyphProps.getWidth(this.render_options.glyph_font_scale);\n }\n /**\n * Set Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n setYs(ys) {\n this.ys = ys;\n return this;\n }\n /**\n * Get Y positions for this note. Each Y value is associated with\n * an individual pitch/key within the note/chord.\n */\n getYs() {\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.');\n }\n return this.ys;\n }\n /**\n * Get the Y position of the space above the stave onto which text can\n * be rendered.\n */\n getYForTopText(text_line) {\n return this.checkStave().getYForTopText(text_line);\n }\n /** Return the voice that this note belongs in. */\n getVoice() {\n if (!this.voice)\n throw new RuntimeError('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n /** Attach this note to `voice`. */\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n /** Get the `TickContext` for this note. */\n getTickContext() {\n return this.checkTickContext();\n }\n /** Set the `TickContext` for this note. */\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n /** Accessor to duration. */\n getDuration() {\n return this.duration;\n }\n /** Accessor to isDotted. */\n isDotted() {\n return this.getModifiersByType(Category.Dot).length > 0;\n }\n /** Accessor to hasStem. */\n hasStem() {\n return false;\n }\n /** Accessor to note type. */\n getNoteType() {\n return this.noteType;\n }\n /** Get the beam. */\n getBeam() {\n return this.beam;\n }\n /** Check and get the beam. */\n checkBeam() {\n return defined(this.beam, 'NoBeam', 'No beam attached to instance');\n }\n /** Check it has a beam. */\n hasBeam() {\n return this.beam != undefined;\n }\n /** Set the beam. */\n setBeam(beam) {\n this.beam = beam;\n return this;\n }\n /**\n * Attach a modifier to this note.\n * @param modifier the Modifier to add.\n * @param index of the key to modify.\n * @returns this\n */\n addModifier(modifier, index = 0) {\n const signature = 'Note.addModifier(modifier: Modifier, index: number=0)';\n // Backwards compatibility with 3.0.9.\n if (typeof index === 'string') {\n index = parseInt(index);\n // eslint-disable-next-line\n console.warn(signature + ' expected a number for `index`, but received a string.');\n }\n // Some versions of VexFlow had the two parameters reversed.\n // Check here and throw an error if the argument types are not correct.\n if (typeof modifier !== 'object' || typeof index !== 'number') {\n throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.');\n }\n modifier.setNote(this);\n modifier.setIndex(index);\n super.addModifier(modifier);\n return this;\n }\n /** Get all modifiers of a specific type in `this.modifiers`. */\n getModifiersByType(type) {\n return this.modifiers.filter((modifier) => modifier.getCategory() === type);\n }\n /** Get the coordinates for where modifiers begin. */\n // eslint-disable-next-line\n getModifierStartXY(position, index, options) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n getRightParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getRightDisplacedHeadPx() : 0;\n }\n getLeftParenthesisPx(index) {\n const props = this.getKeyProps()[index];\n return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift;\n }\n getFirstDotPx() {\n let px = this.getRightDisplacedHeadPx();\n if (this.checkModifierContext().getMembers('Parenthesis').length !== 0)\n px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width');\n return px;\n }\n /** Get the metrics for this note. */\n getMetrics() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width -\n modLeftPx - // subtract left modifiers\n modRightPx - // subtract right modifiers\n this.leftDisplacedHeadPx - // subtract left displaced head\n this.rightDisplacedHeadPx; // subtract right displaced head\n // NOTE: If you change this, remember to update MockTickable.getMetrics() in the tests/ directory.\n return {\n width,\n glyphWidth,\n notePx,\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n glyphPx: 0,\n };\n }\n /**\n * Get the absolute `X` position of this note's tick context. This\n * excludes x_shift, so you'll need to factor it in if you're\n * looking for the post-formatted x-position.\n */\n getAbsoluteX() {\n const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`);\n // Position note to left edge of tick context.\n let x = tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding');\n }\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n return x;\n }\n /** Get the direction of the stem. */\n getStemDirection() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the top and bottom `y` values of the stem. */\n getStemExtents() {\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n }\n /** Get the `x` coordinate to the right of the note. */\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += -this.width / 2 + this.width + 2;\n return tieStartX;\n }\n /** Get the `x` coordinate to the left of the note. */\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyphProps.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= this.width / 2 + 2;\n return tieEndX;\n }\n // Get the pitches in the note\n getKeys() {\n return this.keys;\n }\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport var StaveModifierPosition;\n(function (StaveModifierPosition) {\n StaveModifierPosition[StaveModifierPosition[\"CENTER\"] = 0] = \"CENTER\";\n StaveModifierPosition[StaveModifierPosition[\"LEFT\"] = 1] = \"LEFT\";\n StaveModifierPosition[StaveModifierPosition[\"RIGHT\"] = 2] = \"RIGHT\";\n StaveModifierPosition[StaveModifierPosition[\"ABOVE\"] = 3] = \"ABOVE\";\n StaveModifierPosition[StaveModifierPosition[\"BELOW\"] = 4] = \"BELOW\";\n StaveModifierPosition[StaveModifierPosition[\"BEGIN\"] = 5] = \"BEGIN\";\n StaveModifierPosition[StaveModifierPosition[\"END\"] = 6] = \"END\";\n})(StaveModifierPosition || (StaveModifierPosition = {}));\nexport class StaveModifier extends Element {\n static get CATEGORY() {\n return Category.StaveModifier;\n }\n static get Position() {\n return StaveModifierPosition;\n }\n constructor() {\n super();\n this.width = 0;\n this.x = 0;\n this.padding = 10;\n this.position = StaveModifierPosition.ABOVE;\n }\n getPosition() {\n return this.position;\n }\n setPosition(position) {\n this.position = position;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getWidth() {\n return this.width;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n return this;\n }\n /**\n * Runs setYShift() for the Glyph object so that it matches the position of line for\n * the Stave provided. A `customShift` can also be given (measured in the same units\n * as `setYShift` not in lines) and this will be added after all other positions are\n * calculated from the Stave.\n *\n * Note that this routine only sets the yShift; it does not actually \"place\" (meaning\n * draw) the Glyph on the Stave. Call .draw() afterwards to do that.\n */\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return index !== undefined && index < 2 ? 0 : this.padding;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n // eslint-disable-next-line\n draw(...args) {\n // DO NOTHING.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport var BarlineType;\n(function (BarlineType) {\n BarlineType[BarlineType[\"SINGLE\"] = 1] = \"SINGLE\";\n BarlineType[BarlineType[\"DOUBLE\"] = 2] = \"DOUBLE\";\n BarlineType[BarlineType[\"END\"] = 3] = \"END\";\n BarlineType[BarlineType[\"REPEAT_BEGIN\"] = 4] = \"REPEAT_BEGIN\";\n BarlineType[BarlineType[\"REPEAT_END\"] = 5] = \"REPEAT_END\";\n BarlineType[BarlineType[\"REPEAT_BOTH\"] = 6] = \"REPEAT_BOTH\";\n BarlineType[BarlineType[\"NONE\"] = 7] = \"NONE\";\n})(BarlineType || (BarlineType = {}));\nexport class Barline extends StaveModifier {\n static get CATEGORY() {\n return Category.Barline;\n }\n static get type() {\n return BarlineType;\n }\n static get typeString() {\n return {\n single: BarlineType.SINGLE,\n double: BarlineType.DOUBLE,\n end: BarlineType.END,\n repeatBegin: BarlineType.REPEAT_BEGIN,\n repeatEnd: BarlineType.REPEAT_END,\n repeatBoth: BarlineType.REPEAT_BOTH,\n none: BarlineType.NONE,\n };\n }\n constructor(type) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n const TYPE = BarlineType;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type);\n }\n getType() {\n return this.type;\n }\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n // Draw barlines\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('stavebarline', this.getAttribute('id'));\n switch (this.type) {\n case BarlineType.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case BarlineType.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case BarlineType.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case BarlineType.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n break;\n case BarlineType.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case BarlineType.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n drawVerticalBar(stave, x, double_bar) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n staveCtx.fillRect(x - 3, topY, 1, botY - topY);\n }\n staveCtx.fillRect(x, topY, 1, botY - topY);\n }\n drawVerticalEndBar(stave, x) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n staveCtx.fillRect(x - 5, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n }\n drawRepeatBar(stave, x, begin) {\n const staveCtx = stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n if (!begin) {\n x_shift = -5;\n }\n staveCtx.fillRect(x + x_shift, topY, 1, botY - topY);\n staveCtx.fillRect(x - 2, topY, 3, botY - topY);\n const dot_radius = 2;\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n }\n else {\n x_shift -= 4;\n }\n const dot_x = x + x_shift + dot_radius / 2;\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;\n let dot_y = topY + y_offset + dot_radius / 2;\n // draw the top repeat dot\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n staveCtx.beginPath();\n staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n staveCtx.fill();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author: Aaron (@AaronDavidNewman)\n//\n// This implements chord symbols above/below a chord.\n// Chord symbols are modifiers that can be attached to notes.\n// They can contain multiple 'blocks' which represent text or\n// glyphs with various positioning options.\n//\n// See `tests/chordsymbol_tests.ts` for usage examples.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category, isStemmableNote } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.ChordSymbol.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ChordSymbol.DEBUG)\n log('Vex.Flow.ChordSymbol', args);\n}\nexport var ChordSymbolHorizontalJustify;\n(function (ChordSymbolHorizontalJustify) {\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"LEFT\"] = 1] = \"LEFT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER\"] = 2] = \"CENTER\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"RIGHT\"] = 3] = \"RIGHT\";\n ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify[\"CENTER_STEM\"] = 4] = \"CENTER_STEM\";\n})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {}));\nexport var ChordSymbolVerticalJustify;\n(function (ChordSymbolVerticalJustify) {\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"TOP\"] = 1] = \"TOP\";\n ChordSymbolVerticalJustify[ChordSymbolVerticalJustify[\"BOTTOM\"] = 2] = \"BOTTOM\";\n})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {}));\nexport var SymbolTypes;\n(function (SymbolTypes) {\n SymbolTypes[SymbolTypes[\"GLYPH\"] = 1] = \"GLYPH\";\n SymbolTypes[SymbolTypes[\"TEXT\"] = 2] = \"TEXT\";\n SymbolTypes[SymbolTypes[\"LINE\"] = 3] = \"LINE\";\n})(SymbolTypes || (SymbolTypes = {}));\nexport var SymbolModifiers;\n(function (SymbolModifiers) {\n SymbolModifiers[SymbolModifiers[\"NONE\"] = 1] = \"NONE\";\n SymbolModifiers[SymbolModifiers[\"SUBSCRIPT\"] = 2] = \"SUBSCRIPT\";\n SymbolModifiers[SymbolModifiers[\"SUPERSCRIPT\"] = 3] = \"SUPERSCRIPT\";\n})(SymbolModifiers || (SymbolModifiers = {}));\n/**\n * ChordSymbol is a modifier that creates a chord symbol above/below a chord.\n * As a modifier, it is attached to an existing note.\n */\nexport class ChordSymbol extends Modifier {\n static get CATEGORY() {\n return Category.ChordSymbol;\n }\n static get superSubRatio() {\n return ChordSymbol.metrics.global.superSubRatio;\n }\n /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */\n static set NO_TEXT_FORMAT(val) {\n ChordSymbol.noFormat = val;\n }\n static get NO_TEXT_FORMAT() {\n return ChordSymbol.noFormat;\n }\n static getMetricForGlyph(glyphCode) {\n if (ChordSymbol.metrics.glyphs[glyphCode]) {\n return ChordSymbol.metrics.glyphs[glyphCode];\n }\n return undefined;\n }\n static get engravingFontResolution() {\n return Tables.currentMusicFont().getResolution();\n }\n static get spacingBetweenBlocks() {\n return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution;\n }\n static getWidthForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0.65; // probably should do something here.\n }\n return metric.advanceWidth / ChordSymbol.engravingFontResolution;\n }\n static getYShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return metric.yOffset / ChordSymbol.engravingFontResolution;\n }\n static getXShiftForGlyph(glyph) {\n const metric = ChordSymbol.getMetricForGlyph(glyph.code);\n if (!metric) {\n return 0;\n }\n return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution;\n }\n static get superscriptOffset() {\n return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get subscriptOffset() {\n return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution;\n }\n static get kerningOffset() {\n return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution;\n }\n static get metrics() {\n const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol;\n if (!chordSymbol)\n throw new RuntimeError('BadMetrics', `chordSymbol missing`);\n return chordSymbol;\n }\n static get lowerKerningText() {\n // For example, see: `bravura_metrics.ts`\n // BravuraMetrics.glyphs.chordSymbol.global.lowerKerningText, which returns an array of letters.\n // ['D', 'F', 'P', 'T', 'V', 'Y']\n return ChordSymbol.metrics.global.lowerKerningText;\n }\n static get upperKerningText() {\n return ChordSymbol.metrics.global.upperKerningText;\n }\n static isSuperscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT;\n }\n static isSubscript(block) {\n return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /**\n * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks.\n * Estimate how many lines above/below the staff we need.\n */\n static format(symbols, state) {\n var _a;\n if (!symbols || symbols.length === 0)\n return false;\n let width = 0;\n let nonSuperWidth = 0;\n let leftWidth = 0;\n let rightWidth = 0;\n let maxLeftGlyphWidth = 0;\n let maxRightGlyphWidth = 0;\n for (const symbol of symbols) {\n const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size);\n const fontAdj = Font.scaleSize(fontSize, 0.05);\n const glyphAdj = fontAdj * 2;\n const note = symbol.checkAttachedNote();\n let symbolWidth = 0;\n let lineSpaces = 1;\n let vAlign = false;\n for (let j = 0; j < symbol.symbolBlocks.length; ++j) {\n const block = symbol.symbolBlocks[j];\n const sup = ChordSymbol.isSuperscript(block);\n const sub = ChordSymbol.isSubscript(block);\n const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1;\n const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale;\n // If there are super/subscripts, they extend beyond the line so\n // assume they take up 2 lines\n if (sup || sub) {\n lineSpaces = 2;\n }\n // If there is a symbol-specific offset, add it but consider font\n // size since font and glyphs will be interspersed.\n const fontSize = symbol.textFormatter.fontSizeInPixels;\n const superSubFontSize = fontSize * superSubScale;\n if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) {\n block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize;\n block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize;\n block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize;\n block.glyph.scale = block.glyph.scale * adj;\n }\n else if (block.symbolType === SymbolTypes.TEXT) {\n block.width = block.width * superSubFontSize;\n block.yShift += symbol.getYOffsetForText(block.text) * adj;\n }\n if (block.symbolType === SymbolTypes.GLYPH &&\n block.glyph !== undefined &&\n block.glyph.code === ChordSymbol.glyphs.over.code) {\n lineSpaces = 2;\n }\n block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale;\n // If a subscript immediately follows a superscript block, try to\n // overlay them.\n if (sup && j > 0) {\n const prev = symbol.symbolBlocks[j - 1];\n if (!ChordSymbol.isSuperscript(prev)) {\n nonSuperWidth = width;\n }\n }\n if (sub && nonSuperWidth > 0) {\n vAlign = true;\n // slide the symbol over so it lines up with superscript\n block.xShift = block.xShift + (nonSuperWidth - width);\n width = nonSuperWidth;\n nonSuperWidth = 0;\n // If we have vertically lined up, turn kerning off.\n symbol.setEnableKerning(false);\n }\n if (!sup && !sub) {\n nonSuperWidth = 0;\n }\n block.vAlign = vAlign;\n width += block.width;\n symbolWidth = width;\n }\n // make kerning adjustments after computing super/subscripts\n symbol.updateKerningAdjustments();\n symbol.updateOverBarAdjustments();\n if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) {\n symbol.setTextLine(state.top_text_line);\n state.top_text_line += lineSpaces;\n }\n else {\n symbol.setTextLine(state.text_line + 1);\n state.text_line += lineSpaces + 1;\n }\n if (symbol.getReportWidth() && isStemmableNote(note)) {\n const glyphWidth = note.getGlyphProps().getWidth();\n if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) {\n maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth);\n leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding;\n }\n else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) {\n maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth);\n rightWidth = Math.max(rightWidth, symbolWidth);\n }\n else {\n leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding;\n rightWidth = Math.max(rightWidth, symbolWidth / 2);\n maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth);\n maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth);\n }\n }\n width = 0; // reset symbol width\n }\n const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0));\n const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0));\n state.left_shift += leftOverlap;\n state.right_shift += rightOverlap;\n return true;\n }\n constructor() {\n super();\n this.symbolBlocks = [];\n this.horizontal = ChordSymbolHorizontalJustify.LEFT;\n this.vertical = ChordSymbolVerticalJustify.TOP;\n this.useKerning = true;\n this.reportWidth = true;\n this.resetFont();\n }\n /**\n * Default text font.\n * Choose a font family that works well with the current music engraving font.\n * @override `Element.TEXT_FONT`.\n */\n static get TEXT_FONT() {\n let family = 'Roboto Slab, Times, serif';\n if (Tables.currentMusicFont().getName() === 'Petaluma') {\n // Fixes Issue #1180\n family = 'PetalumaScript, Arial, sans-serif';\n }\n return {\n family,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n };\n }\n /**\n * The offset is specified in `em`. Scale this value by the font size in pixels.\n */\n get superscriptOffset() {\n return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n get subscriptOffset() {\n return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels;\n }\n setReportWidth(value) {\n this.reportWidth = value;\n return this;\n }\n getReportWidth() {\n return this.reportWidth;\n }\n updateOverBarAdjustments() {\n const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash');\n if (barIndex < 0) {\n return;\n }\n const bar = this.symbolBlocks[barIndex];\n const xoff = bar.width / 4;\n const yoff = 0.25 * this.textFormatter.fontSizeInPixels;\n let symIndex = 0;\n for (symIndex === 0; symIndex < barIndex; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift + xoff;\n symbol.yShift = symbol.yShift - yoff;\n }\n for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) {\n const symbol = this.symbolBlocks[symIndex];\n symbol.xShift = symbol.xShift - xoff;\n symbol.yShift = symbol.yShift + yoff;\n }\n }\n updateKerningAdjustments() {\n let accum = 0;\n for (let j = 0; j < this.symbolBlocks.length; ++j) {\n const symbol = this.symbolBlocks[j];\n accum += this.getKerningAdjustment(j);\n symbol.xShift += accum;\n }\n }\n /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */\n getKerningAdjustment(j) {\n if (!this.useKerning) {\n return 0;\n }\n const currSymbol = this.symbolBlocks[j];\n const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined;\n let adjustment = 0;\n // Move things into the '/' over bar\n if (currSymbol.symbolType === SymbolTypes.GLYPH &&\n currSymbol.glyph !== undefined &&\n currSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += currSymbol.glyph.metrics.x_shift;\n }\n if (prevSymbol !== undefined &&\n prevSymbol.symbolType === SymbolTypes.GLYPH &&\n prevSymbol.glyph !== undefined &&\n prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) {\n adjustment += prevSymbol.glyph.metrics.x_shift;\n }\n // For superscripts that follow a letter without much top part, move it to the left slightly\n let preKernUpper = false;\n let preKernLower = false;\n if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) {\n preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]);\n }\n const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels;\n // TODO: adjust kern for font size.\n // Where should this constant live?\n if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) {\n adjustment += kerningOffsetPixels;\n }\n if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) {\n if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') {\n adjustment += kerningOffsetPixels / 2;\n }\n if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) {\n adjustment += kerningOffsetPixels / 2;\n }\n }\n return adjustment;\n }\n /**\n * ChordSymbol allows multiple blocks so we can mix glyphs and font text.\n * Each block can have its own vertical orientation.\n */\n // eslint-disable-next-line\n getSymbolBlock(params = {}) {\n var _a, _b, _c;\n const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT;\n const symbolBlock = {\n text: (_b = params.text) !== null && _b !== void 0 ? _b : '',\n symbolType,\n symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE,\n xShift: 0,\n yShift: 0,\n vAlign: false,\n width: 0,\n };\n // Note: symbol widths are resolution and font-independent.\n // We convert to pixel values when we know what the font is.\n if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') {\n const glyphArgs = ChordSymbol.glyphs[params.glyph];\n const glyphPoints = 20;\n symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' });\n // Beware: glyph.metrics is not the same as glyph.getMetrics() !\n // rv.glyph.point = rv.glyph.point * rv.glyph.metrics.scale;\n // rv.width = rv.glyph.getMetrics().width;\n // don't set yShift here, b/c we need to do it at formatting time after the font is set.\n }\n else if (symbolType === SymbolTypes.TEXT) {\n symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text);\n }\n else if (symbolType === SymbolTypes.LINE) {\n symbolBlock.width = params.width;\n }\n return symbolBlock;\n }\n /** Add a symbol to this chord, could be text, glyph or line. */\n // eslint-disable-next-line\n addSymbolBlock(parameters) {\n this.symbolBlocks.push(this.getSymbolBlock(parameters));\n return this;\n }\n // ### Convenience functions for creating different types of chord symbol parts.\n /** Add a text block. */\n // eslint-disable-next-line\n addText(text, parameters = {}) {\n const symbolType = SymbolTypes.TEXT;\n return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType }));\n }\n /** Add a text block with superscript modifier. */\n addTextSuperscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a text block with subscript modifier. */\n addTextSubscript(text) {\n const symbolType = SymbolTypes.TEXT;\n const symbolModifier = SymbolModifiers.SUBSCRIPT;\n return this.addSymbolBlock({ text, symbolType, symbolModifier });\n }\n /** Add a glyph block with superscript modifier. */\n addGlyphSuperscript(glyph) {\n const symbolType = SymbolTypes.GLYPH;\n const symbolModifier = SymbolModifiers.SUPERSCRIPT;\n return this.addSymbolBlock({ glyph, symbolType, symbolModifier });\n }\n /** Add a glyph block. */\n // eslint-disable-next-line\n addGlyph(glyph, params = {}) {\n const symbolType = SymbolTypes.GLYPH;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType }));\n }\n /**\n * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font.\n * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else.\n */\n // eslint-disable-next-line\n addGlyphOrText(text, params = {}) {\n let str = '';\n for (let i = 0; i < text.length; ++i) {\n const char = text[i];\n if (ChordSymbol.glyphs[char]) {\n if (str.length > 0) {\n this.addText(str, params);\n str = '';\n }\n this.addGlyph(char, params);\n }\n else {\n // Collect consecutive characters with no glyphs.\n str += char;\n }\n }\n if (str.length > 0) {\n this.addText(str, params);\n }\n return this;\n }\n /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */\n // eslint-disable-next-line\n addLine(width, params = {}) {\n const symbolType = SymbolTypes.LINE;\n return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width }));\n }\n /**\n * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`).\n *\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n *\n * @override See: Element.\n */\n setFont(f, size, weight, style) {\n super.setFont(f, size, weight, style);\n this.textFormatter = TextFormatter.create(this.textFont);\n return this;\n }\n setEnableKerning(val) {\n this.useKerning = val;\n return this;\n }\n /** Set vertical position of text (above or below stave). */\n setVertical(vj) {\n this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj;\n return this;\n }\n getVertical() {\n return this.vertical;\n }\n /** Set horizontal justification. */\n setHorizontal(hj) {\n this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj;\n return this;\n }\n getHorizontal() {\n return this.horizontal;\n }\n getWidth() {\n let width = 0;\n this.symbolBlocks.forEach((symbol) => {\n width += symbol.vAlign ? 0 : symbol.width;\n });\n return width;\n }\n getYOffsetForText(text) {\n var _a;\n let acc = 0;\n let i = 0;\n for (i = 0; i < text.length; ++i) {\n const metrics = this.textFormatter.getGlyphMetrics(text[i]);\n if (metrics) {\n const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0;\n acc = yMax < acc ? yMax : acc;\n }\n }\n const resolution = this.textFormatter.getResolution();\n return i > 0 ? -1 * (acc / resolution) : 0;\n }\n /** Render text and glyphs above/below the note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n // We're changing context parameters. Save current state.\n ctx.save();\n this.applyStyle();\n ctx.openGroup('chordsymbol', this.getAttribute('id'));\n const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index);\n ctx.setFont(this.textFont);\n let y;\n // The position of the text varies based on whether or not the note\n // has a stem.\n const hasStem = note.hasStem();\n const stave = note.checkStave();\n if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin is bottom-right.\n y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;\n y = Math.max(y, stem_base + spacing * (this.text_line + 2));\n }\n }\n else {\n // (this.vertical === VerticalJustify.TOP)\n const topY = Math.min(...note.getYs());\n y = Math.min(stave.getYForTopText(this.text_line), topY - 10);\n if (hasStem) {\n const stem_ext = note.checkStem().getExtents();\n const spacing = stave.getSpacingBetweenLines();\n y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);\n }\n }\n let x = start.x;\n if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) {\n x = start.x;\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) {\n x = start.x + this.getWidth();\n }\n else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) {\n x = start.x - this.getWidth() / 2;\n }\n else {\n // HorizontalJustify.CENTER_STEM\n x = note.getStemX() - this.getWidth() / 2;\n }\n L('Rendering ChordSymbol: ', this.textFormatter, x, y);\n this.symbolBlocks.forEach((symbol) => {\n const isSuper = ChordSymbol.isSuperscript(symbol);\n const isSub = ChordSymbol.isSubscript(symbol);\n let curY = y;\n L('shift was ', symbol.xShift, symbol.yShift);\n L('curY pre sub ', curY);\n if (isSuper) {\n curY += this.superscriptOffset;\n }\n if (isSub) {\n curY += this.subscriptOffset;\n }\n L('curY sup/sub ', curY);\n if (symbol.symbolType === SymbolTypes.TEXT) {\n if (isSuper || isSub) {\n ctx.save();\n if (this.textFont) {\n const { family, size, weight, style } = this.textFont;\n const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio);\n ctx.setFont(family, smallerFontSize, weight, style);\n }\n }\n // TODO???\n // We estimate the text width, fill it in with the empirical value so the formatting is even.\n // const textDim = ctx.measureText(symbol.text);\n // symbol.width = textDim.width;\n L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift);\n ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift);\n if (isSuper || isSub) {\n ctx.restore();\n }\n }\n else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) {\n curY += symbol.yShift;\n L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY);\n symbol.glyph.render(ctx, x + symbol.xShift, curY);\n }\n else if (symbol.symbolType === SymbolTypes.LINE) {\n L('Rendering Line : ', symbol.width, x, curY);\n ctx.beginPath();\n ctx.setLineWidth(1); // ?\n ctx.moveTo(x, y);\n ctx.lineTo(x + symbol.width, curY);\n ctx.stroke();\n }\n x += symbol.width;\n if (symbol.vAlign) {\n x += symbol.xShift;\n }\n });\n ctx.closeGroup();\n this.restoreStyle();\n ctx.restore();\n }\n}\nChordSymbol.DEBUG = false;\n// Chord symbols can be positioned and justified relative to the note.\nChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify;\nChordSymbol.HorizontalJustifyString = {\n left: ChordSymbolHorizontalJustify.LEFT,\n right: ChordSymbolHorizontalJustify.RIGHT,\n center: ChordSymbolHorizontalJustify.CENTER,\n centerStem: ChordSymbolHorizontalJustify.CENTER_STEM,\n};\nChordSymbol.VerticalJustify = ChordSymbolVerticalJustify;\nChordSymbol.VerticalJustifyString = {\n top: ChordSymbolVerticalJustify.TOP,\n above: ChordSymbolVerticalJustify.TOP,\n below: ChordSymbolVerticalJustify.BOTTOM,\n bottom: ChordSymbolVerticalJustify.BOTTOM,\n};\n// Glyph data\nChordSymbol.glyphs = {\n diminished: {\n code: 'csymDiminished',\n },\n dim: {\n code: 'csymDiminished',\n },\n halfDiminished: {\n code: 'csymHalfDiminished',\n },\n '+': {\n code: 'csymAugmented',\n },\n augmented: {\n code: 'csymAugmented',\n },\n majorSeventh: {\n code: 'csymMajorSeventh',\n },\n minor: {\n code: 'csymMinor',\n },\n '-': {\n code: 'csymMinor',\n },\n '(': {\n code: 'csymParensLeftTall',\n },\n leftParen: {\n code: 'csymParensLeftTall',\n },\n ')': {\n code: 'csymParensRightTall',\n },\n rightParen: {\n code: 'csymParensRightTall',\n },\n leftBracket: {\n code: 'csymBracketLeftTall',\n },\n rightBracket: {\n code: 'csymBracketRightTall',\n },\n leftParenTall: {\n code: 'csymParensLeftVeryTall',\n },\n rightParenTall: {\n code: 'csymParensRightVeryTall',\n },\n '/': {\n code: 'csymDiagonalArrangementSlash',\n },\n over: {\n code: 'csymDiagonalArrangementSlash',\n },\n '#': {\n code: 'accidentalSharp',\n },\n b: {\n code: 'accidentalFlat',\n },\n};\nChordSymbol.symbolTypes = SymbolTypes;\nChordSymbol.symbolModifiers = SymbolModifiers;\n/** Currently unused. */\nChordSymbol.noFormat = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Note } from './note';\nimport { Barline, BarlineType } from './stavebarline';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (BarNote.DEBUG)\n log('Vex.Flow.BarNote', args);\n}\n/**\n * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can\n * be added to a voice and rendered in the middle of a stave. Since it has no\n * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n *\n * See `tests/barnote_tests.ts` for usage examples.\n */\nexport class BarNote extends Note {\n static get CATEGORY() {\n return Category.BarNote;\n }\n constructor(type = BarlineType.SINGLE) {\n super({ duration: 'b' });\n this.metrics = {\n widths: {},\n };\n const TYPE = BarlineType;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n /** Get the type of bar note.*/\n getType() {\n return this.type;\n }\n /** Set the type of bar note. */\n setType(type) {\n this.type = typeof type === 'string' ? Barline.typeString[type] : type;\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n /** Overridden to ignore. */\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render note to stave. */\n draw() {\n const ctx = this.checkContext();\n L('Rendering bar line at: ', this.getAbsoluteX());\n this.applyStyle(ctx);\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.checkStave());\n this.restoreStyle(ctx);\n this.setRendered();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */\nBarNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { TextFormatter } from './textformatter';\nimport { Category, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\n/** Bend implements tablature bends. */\nexport class Bend extends Modifier {\n static get CATEGORY() {\n return Category.Bend;\n }\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0)\n return false;\n let last_width = 0;\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n const note = bend.checkAttachedNote();\n if (isTabNote(note)) {\n const stringPos = note.leastString() - 1;\n if (state.top_text_line < stringPos) {\n state.top_text_line = stringPos;\n }\n }\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(state.top_text_line);\n }\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n /**\n * Example of a phrase:\n * ```\n * [{\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"half\"\n * width: 8;\n * },\n * {\n * type: UP,\n * text: \"whole\"\n * width: 8;\n * },\n * {\n * type: DOWN,\n * text: \"1 1/2\"\n * width: 8;\n * }]\n * ```\n * @param text text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n * @param release if true, render a release. (DEPRECATED)\n * @param phrase if set, ignore \"text\" and \"release\", and use the more sophisticated phrase specified\n */\n constructor(text, release = false, phrase) {\n super();\n this.text = text;\n this.x_shift = 0;\n this.release = release;\n this.tap = '';\n this.resetFont();\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n if (phrase) {\n this.phrase = phrase;\n }\n else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release)\n this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n this.updateWidth();\n }\n /** Set horizontal shift in pixels. */\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n return this;\n }\n setTap(value) {\n this.tap = value;\n return this;\n }\n /** Get text provided in the constructor. */\n getText() {\n return this.text;\n }\n getTextHeight() {\n const textFormatter = TextFormatter.create(this.textFont);\n return textFormatter.maxHeight;\n }\n /** Recalculate width. */\n updateWidth() {\n const textFormatter = TextFormatter.create(this.textFont);\n const measureText = (text) => {\n return textFormatter.getWidthForTextInPx(text);\n };\n let totalWidth = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (bend.width !== undefined) {\n totalWidth += bend.width;\n }\n else {\n const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;\n bend.width = Math.max(additional_width, measureText(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n totalWidth += bend.width;\n }\n }\n this.setWidth(totalWidth + this.x_shift);\n return this;\n }\n /** Draw the bend on the rendering context. */\n draw() {\n var _a;\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n const stave = note.checkStave();\n const spacing = stave.getSpacingBetweenLines();\n const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b));\n // this.text_line is relative to top string in the group.\n const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3;\n const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1;\n const renderBend = (x, y, width, height) => {\n const cp_x = x + width;\n const cp_y = y;\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n };\n const renderRelease = (x, y, width, height) => {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(this.render_options.line_width);\n ctx.setStrokeStyle(this.render_options.line_style);\n ctx.setFillStyle(this.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(x + width, height, x + width, y);\n ctx.stroke();\n ctx.restore();\n };\n const renderArrowHead = (x, y, direction) => {\n const width = 4;\n const yBase = y + width * direction;\n ctx.beginPath();\n ctx.moveTo(x, y); // tip of the arrow\n ctx.lineTo(x - width, yBase);\n ctx.lineTo(x + width, yBase);\n ctx.closePath();\n ctx.fill();\n };\n const renderText = (x, text) => {\n ctx.save();\n ctx.setFont(this.textFont);\n const render_x = x - ctx.measureText(text).width / 2;\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n };\n let last_bend = undefined;\n let last_bend_draw_width = 0;\n let last_drawn_width = 0;\n if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) {\n const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index);\n renderText(tapStart.x, this.tap);\n }\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (!bend.draw_width)\n bend.draw_width = 0;\n if (i === 0)\n bend.draw_width += x_shift;\n last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height, +1);\n }\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n if (!last_bend) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend_draw_width = bend.draw_width;\n last_bend.x = start.x;\n start.x += last_drawn_width;\n }\n if (!last_bend || last_bend.x == undefined) {\n throw new RuntimeError('NoLastBendForBend', 'Internal error.');\n }\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1);\n }\n else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n/** Default text font. */\nBend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\nimport { Modifier } from './modifier';\nimport { Category, isGraceNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Dot extends Modifier {\n static get CATEGORY() {\n return Category.Dot;\n }\n /** Returns the dots associated to a Note. */\n static getDots(note) {\n return note.getModifiersByType(Dot.CATEGORY);\n }\n /** Add a dot on the specified keys to the notes. */\n static buildAndAttach(notes, options) {\n for (const note of notes) {\n if (options === null || options === void 0 ? void 0 : options.all) {\n for (let i = 0; i < note.keys.length; i++) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, i);\n }\n }\n else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index);\n }\n else {\n const dot = new Dot();\n dot.setDotShiftY(note.glyphProps.dot_shiftY);\n note.addModifier(dot, 0);\n }\n }\n }\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n if (!dots || dots.length === 0)\n return false;\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n let props;\n let shift;\n if (isStaveNote(note)) {\n const index = dot.checkIndex();\n props = note.getKeyProps()[index];\n // consider right displaced head with no previous modifier\n shift = note.getFirstDotPx();\n }\n else if (isTabNote(note)) {\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = right_shift;\n }\n else {\n // note object is not StaveNote or TabNote.\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n }\n else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n }\n else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = dot_shift > x_width ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n setNote(note) {\n this.note = note;\n if (isGraceNote(note)) {\n this.radius *= 0.5;\n this.setWidth(3);\n }\n return this;\n }\n setDotShiftY(y) {\n this.dot_shiftY = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stave = note.checkStave();\n const lineSpace = stave.getSpacingBetweenLines();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n // Set the starting y coordinate to the base of the stem for TabNotes.\n if (isTabNote(note)) {\n start.y = note.getStemExtents().baseY;\n }\n const x = start.x + this.x_shift + this.width - this.radius;\n const y = start.y + this.y_shift + this.dot_shiftY * lineSpace;\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() {\n return Category.FretHandFinger;\n }\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const textFormatter = TextFormatter.create(num.textFont);\n const textHeight = textFormatter.maxHeight;\n if (num.position === ModifierPosition.ABOVE) {\n state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (num.position === ModifierPosition.BELOW) {\n state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5;\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n return true;\n }\n static easyScoreHook({ fingerings } = {}, note, builder) {\n fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => {\n const split = fingeringString.trim().split('.');\n const params = { number: split[0] };\n if (split[1])\n params.position = split[1];\n return builder.getFactory().Fingering(params);\n }).map((fingering, index) => note.addModifier(fingering, index));\n }\n constructor(finger) {\n super();\n this.finger = finger;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.resetFont();\n }\n setFretHandFinger(finger) {\n this.finger = finger;\n return this;\n }\n getFretHandFinger() {\n return this.finger;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`);\n }\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\nFretHandFinger.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (NoteHead.DEBUG)\n log('Vex.Flow.NoteHead', args);\n}\n/**\n * Draw slashnote head manually. No glyph exists for this.\n * @param ctx the Canvas context\n * @param duration the duration of the note. ex: \"4\"\n * @param x the x coordinate to draw at\n * @param y the y coordinate to draw at\n * @param stem_direction the direction of the stem\n */\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Tables.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Tables.STEM_WIDTH);\n let fill = false;\n if (Tables.durationToNumber(duration) > 2) {\n fill = true;\n }\n if (!fill)\n x -= (Tables.STEM_WIDTH / 2) * stem_direction;\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n if (fill) {\n ctx.fill();\n }\n else {\n ctx.stroke();\n }\n if (Tables.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n ctx.restore();\n}\n/**\n * `NoteHeads` are typically not manipulated\n * directly, but used internally in `StaveNote`.\n *\n * See `tests/notehead_tests.ts` for usage examples.\n */\nexport class NoteHead extends Note {\n static get CATEGORY() {\n return Category.NoteHead;\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.custom_glyph = false;\n this.stem_up_x_offset = 0;\n this.stem_down_x_offset = 0;\n this.index = noteStruct.index;\n this.x = noteStruct.x || 0;\n this.y = noteStruct.y || 0;\n if (noteStruct.note_type)\n this.noteType = noteStruct.note_type;\n this.displaced = noteStruct.displaced || false;\n this.stem_direction = noteStruct.stem_direction || Stem.UP;\n this.line = noteStruct.line || 0;\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // Swap out the glyph with ledger lines\n if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) {\n this.glyphProps.code_head = this.glyphProps.ledger_code_head;\n }\n this.glyph_code = this.glyphProps.code_head;\n this.x_shift = noteStruct.x_shift || 0;\n if (noteStruct.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = noteStruct.custom_glyph_code;\n this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0;\n this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0;\n }\n this.setStyle(noteStruct.style);\n this.slashed = noteStruct.slashed || false;\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE });\n this.setWidth(this.custom_glyph &&\n !this.glyph_code.startsWith('noteheadSlashed') &&\n !this.glyph_code.startsWith('noteheadCircled')\n ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale)\n : this.glyphProps.getWidth(this.render_options.glyph_font_scale));\n }\n /** Get the width of the notehead. */\n getWidth() {\n return this.width;\n }\n /** Determine if the notehead is displaced. */\n isDisplaced() {\n return this.displaced === true;\n }\n /** Set the X coordinate. */\n setX(x) {\n this.x = x;\n return this;\n }\n /** Get the Y coordinate. */\n getY() {\n return this.y;\n }\n /** Set the Y coordinate. */\n setY(y) {\n this.y = y;\n return this;\n }\n /** Get the stave line the notehead is placed on. */\n getLine() {\n return this.line;\n }\n /** Set the stave line the notehead is placed on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Get the canvas `x` coordinate position of the notehead. */\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = Stem.WIDTH / 2;\n const musicFont = Tables.currentMusicFont();\n const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction;\n return (x +\n fontShift +\n (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0));\n }\n /** Get the `BoundingBox` for the `NoteHead`. */\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const spacing = this.checkStave().getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n /** Set notehead to a provided `stave`. */\n setStave(stave) {\n const line = this.getLine();\n this.stave = stave;\n if (this.stave) {\n this.setY(this.stave.getYForNote(line));\n this.setContext(this.stave.getContext());\n }\n return this;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n this.setWidth(width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the notehead. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x +=\n this.stem_direction === Stem.UP\n ? this.stem_up_x_offset +\n (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0)\n : this.stem_down_x_offset;\n }\n const y = this.y;\n L(\"Drawing note head '\", this.noteType, this.duration, \"' at\", head_x, y);\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.noteType === 's') {\n const staveSpace = this.checkStave().getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n }\n else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n category: `noteHead.${categorySuffix}`,\n });\n }\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */\nNoteHead.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StemmableNote extends Note {\n static get CATEGORY() {\n return Category.StemmableNote;\n }\n constructor(noteStruct) {\n super(noteStruct);\n }\n // Get and set the note's `Stem`\n getStem() {\n return this.stem;\n }\n checkStem() {\n if (!this.stem) {\n throw new RuntimeError('NoStem', 'No stem attached to instance');\n }\n return this.stem;\n }\n setStem(stem) {\n this.stem = stem;\n this.addChildElement(stem);\n return this;\n }\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n buildFlag(category = 'flag') {\n const { glyphProps } = this;\n if (this.hasFlag()) {\n const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem;\n if (flagCode)\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyphProps() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n }\n else {\n return this.customGlyphs[0];\n }\n }\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n // Get the number of beams for this duration\n getBeamCount() {\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n return glyphProps.beam_count;\n }\n else {\n return 0;\n }\n }\n // Get the minimum length of stem\n getStemMinimumLength() {\n const frac = Tables.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == undefined)\n length = 35;\n break;\n case '16':\n length = this.beam == undefined ? 35 : 25;\n break;\n case '32':\n length = this.beam == undefined ? 45 : 35;\n break;\n case '64':\n length = this.beam == undefined ? 50 : 40;\n break;\n case '128':\n length = this.beam == undefined ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n // Get/set the direction of the stem\n getStemDirection() {\n if (!this.stem_direction)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem_direction;\n }\n setStemDirection(direction) {\n if (!direction)\n direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`);\n }\n this.stem_direction = direction;\n // Reset and reformat everything. Flag has to be built before calling getStemExtension.\n this.reset();\n if (this.hasFlag()) {\n this.buildFlag();\n }\n this.beam = undefined;\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps();\n // Get the font-specific customizations for the note heads.\n const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, {\n offsetYBaseStemUp: 0,\n offsetYTopStemUp: 0,\n offsetYBaseStemDown: 0,\n offsetYTopStemDown: 0,\n });\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp,\n stem_down_y_offset: offsets.offsetYTopStemDown,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n if (this.preFormatted) {\n this.preFormat();\n }\n return this;\n }\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;\n }\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != undefined) {\n return this.stem_extension_override;\n }\n // Use stem_beam_extension with beams\n if (this.beam) {\n return glyphProps.stem_beam_extension;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension;\n }\n return 0;\n }\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stem_extension_override = height - Stem.HEIGHT;\n return this;\n }\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n if (!this.stem)\n throw new RuntimeError('NoStem', 'No stem attached to this note.');\n return this.stem.getExtents();\n }\n /** Gets the `y` value for the top modifiers at a specific `textLine`. */\n getYForTopText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n else {\n return stave.getYForTopText(textLine);\n }\n }\n /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */\n getYForBottomText(textLine) {\n const stave = this.checkStave();\n if (this.hasStem()) {\n const extents = this.getStemExtents();\n if (!extents)\n throw new RuntimeError('InvalidState', 'Stem does not have extents.');\n return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n else {\n return stave.getYForBottomText(textLine);\n }\n }\n hasFlag() {\n return Tables.getGlyphProps(this.duration).flag == true && !this.beam;\n }\n /** Post formats the note. */\n postFormat() {\n var _a;\n (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat();\n this.postFormatted = true;\n return this;\n }\n /** Renders the stem onto the canvas. */\n drawStem(stemOptions) {\n var _a;\n this.checkContext();\n this.setRendered();\n this.setStem(new Stem(stemOptions));\n (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.\n//\n// See `tests/stavenote_tests.ts` for usage examples.\nimport { BoundingBox } from './boundingbox';\nimport { Modifier } from './modifier';\nimport { NoteHead } from './notehead';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log, midLine, RuntimeError } from './util';\nfunction showDeprecationWarningForNoteHeads() {\n // eslint-disable-next-line\n console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.');\n}\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (StaveNote.DEBUG)\n log('Vex.Flow.StaveNote', args);\n}\nconst isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = dir;\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta);\n}\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - midLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() {\n return Category.StaveNote;\n }\n /**\n * @deprecated Use Stem.UP.\n */\n static get STEM_UP() {\n return Stem.UP;\n }\n /**\n * @deprecated Use Stem.DOWN.\n */\n static get STEM_DOWN() {\n return Stem.DOWN;\n }\n static get LEDGER_LINE_OFFSET() {\n return 3;\n }\n static get minNoteheadPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Format notes inside a ModifierContext. */\n static format(notes, state) {\n if (!notes || notes.length < 2)\n return false;\n const notesList = [];\n for (let i = 0; i < notes.length; i++) {\n // Formatting uses sortedKeyProps to calculate line and minL.\n const props = notes[i].sortedKeyProps;\n const line = props[0].keyProps.line;\n let minL = props[props.length - 1].keyProps.line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinimumLength() / 10;\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyphProps.line_above;\n minL = line - notes[i].glyphProps.line_below;\n }\n else {\n maxL =\n stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line;\n minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax;\n }\n notesList.push({\n line: props[0].keyProps.line,\n maxLine: maxL,\n minLine: minL,\n isrest: notes[i].isRest(),\n stemDirection: stemDirection,\n stemMax,\n stemMin,\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(),\n note: notes[i],\n });\n }\n let voices = 0;\n let noteU = undefined;\n let noteM = undefined;\n let noteL = undefined;\n const draw = [false, false, false];\n for (let i = 0; i < notesList.length; i++) {\n draw[i] = notesList[i].note.render_options.draw == false ? false : true;\n }\n if (draw[0] && draw[1] && draw[2]) {\n // Three visible notes\n voices = 3;\n noteU = notesList[0];\n noteM = notesList[1];\n noteL = notesList[2];\n }\n else if (draw[0] && draw[1]) {\n // Two visible notes, 0 & 1\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[1];\n }\n else if (draw[0] && draw[2]) {\n // Two visible notes, 0 & 2\n voices = 2;\n noteU = notesList[0];\n noteL = notesList[2];\n }\n else if (draw[1] && draw[2]) {\n // Two visible notes, 1 & 2\n voices = 2;\n noteU = notesList[1];\n noteL = notesList[2];\n }\n else {\n // No shift required for less than 2 visible notes\n return true;\n }\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) {\n noteL.note.render_options.draw = false;\n }\n else if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n }\n else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n }\n else {\n //Instead of shifting notes, remove the appropriate flag\n //If we are sharing a line, switch one notes stem direction.\n //If we are sharing a line and in the same voice, only then offset one note\n const lineDiff = Math.abs(noteU.line - noteL.line);\n if (noteU.note.hasStem() && noteL.note.hasStem()) {\n //If we have different dot values, must offset\n //Or If we have a white mixed with a black notehead, must offset\n let whiteNoteHeadCount = 0;\n let blackNoteHeadCount = 0;\n if (Tables.durationToNumber(noteU.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteU.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if (Tables.durationToNumber(noteL.note.duration) === 2) {\n whiteNoteHeadCount++;\n }\n else if (Tables.durationToNumber(noteL.note.duration) > 2) {\n blackNoteHeadCount++;\n }\n if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) ||\n noteU.note.getModifiersByType(Category.Dot).length !== noteL.note.getModifiersByType(Category.Dot).length) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (lineDiff < 1 && lineDiff > 0) {\n //if the notes are quite close but not on the same line, shift\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.voice !== noteL.note.voice) {\n //If we are not in the same voice\n if (noteU.stemDirection === noteL.stemDirection) {\n if (noteU.line != noteL.line) {\n xShift = voiceXShift + 2;\n noteU.note.setXShift(xShift);\n }\n else {\n //same line, swap stem direction for one note\n if (noteL.stemDirection === 1) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n }\n }\n } //Very close whole notes\n }\n else if (lineDiff < 1) {\n xShift = voiceXShift + 2;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift);\n }\n else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n else if (noteU.note.hasStem()) {\n noteU.stemDirection = -noteU.note.getStemDirection();\n noteU.note.setStemDirection(noteU.stemDirection);\n }\n else if (noteL.note.hasStem()) {\n noteL.stemDirection = -noteL.note.getStemDirection();\n noteL.note.setStemDirection(noteL.stemDirection);\n }\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n if (!noteM)\n throw new RuntimeError('InvalidState', 'noteM not defined.');\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n }\n else {\n xShift = voiceXShift + 2; // shift middle rest right\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n // format complete\n state.right_shift += xShift;\n return true;\n }\n }\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Hide upper voice rest\n noteU.note.render_options.draw = false;\n // Hide lower voice rest\n noteL.note.render_options.draw = false;\n // format complete\n state.right_shift += xShift;\n return true;\n }\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Hide middle voice rest\n noteM.note.render_options.draw = false;\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n // If middle voice intersects upper or lower voice\n if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) {\n // shift middle note right\n xShift = voiceXShift + 2;\n noteM.note.setXShift(xShift);\n if (noteL.note.hasBeam() === false) {\n noteL.stemDirection = -1;\n noteL.note.setStemDirection(-1);\n }\n if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) {\n noteU.stemDirection = 1;\n noteU.note.setStemDirection(1);\n }\n }\n state.right_shift += xShift;\n return true;\n }\n static postFormat(notes) {\n if (!notes)\n return false;\n notes.forEach((note) => note.postFormat());\n return true;\n }\n constructor(noteStruct) {\n var _a, _b, _c;\n super(noteStruct);\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // INSTANCE MEMBERS\n this.minLine = 0;\n this.maxLine = 0;\n // Sorted variant of keyProps used internally\n this.sortedKeyProps = [];\n this.ledgerLineStyle = {};\n this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble';\n this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0;\n // Pull note rendering properties.\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // for displaced ledger lines\n this.use_default_head_x = false;\n // Drawing\n this._noteHeads = [];\n this.modifiers = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, \n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET });\n this.calculateKeyProps();\n this.buildStem();\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n }\n else {\n this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP);\n }\n this.reset();\n this.buildFlag();\n }\n reset() {\n super.reset();\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle());\n this.buildNoteHeads();\n this._noteHeads.forEach((noteHead, index) => {\n const noteHeadStyle = noteHeadStyles[index];\n if (noteHeadStyle)\n noteHead.setStyle(noteHeadStyle);\n });\n const stave = this.stave;\n if (stave) {\n this._noteHeads.forEach((head) => head.setStave(stave));\n }\n this.calcNoteDisplacements();\n return this;\n }\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n // Update stem extension if a beam is assigned.\n if (this.stem) {\n this.stem.setExtension(this.getStemExtension());\n }\n return this;\n }\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest() }));\n return this;\n }\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this._noteHeads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n let lastLine = undefined;\n let lineDiff = undefined;\n let displaced = false;\n // Draw notes from bottom to top.\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n }\n else {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n for (let i = start; i !== end; i += step) {\n // Building noteheads rely on sortedKeNotes in order to calculate the displacements\n const noteProps = this.sortedKeyProps[i].keyProps;\n const line = noteProps.line;\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === undefined) {\n lastLine = line;\n }\n else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n }\n else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n this.addChildElement(notehead);\n this._noteHeads[this.sortedKeyProps[i].index] = notehead;\n }\n }\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n this.setStemDirection(this.calculateOptimalStemDirection());\n }\n calculateOptimalStemDirection() {\n // Figure out optimal stem direction based on given notes\n // minLine & maxLine rely on sortedKeyProps\n this.minLine = this.sortedKeyProps[0].keyProps.line;\n this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line;\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n return stemDirection;\n }\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyphProps.rest)\n this.glyphProps.position = key;\n const options = { octave_shift: this.octave_shift || 0, duration: this.duration };\n const props = Tables.keyProperties(key, this.clef, options);\n if (!props) {\n throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n }\n else {\n props.line = 3;\n }\n }\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine == undefined) {\n lastLine = line;\n }\n else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n lastLine = line;\n this.keyProps.push(props);\n }\n // Sort the notes from lowest line to highest line in sortedKeyProps\n // Warn no longer required as keyProps remains unsorted\n this.keyProps.forEach((keyProps, index) => {\n this.sortedKeyProps.push({ keyProps, index });\n });\n this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line);\n }\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2;\n const lineSpacing = halfLineSpacing * 2;\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Tables.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n }\n else {\n minY = y - this.glyphProps.line_above * lineSpacing;\n maxY = y + this.glyphProps.line_below * lineSpacing;\n }\n }\n else if (this.glyphProps.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.getStemDirection();\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n }\n else {\n minY = 0;\n maxY = 0;\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n }\n else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n // Gets the line number of the bottom note in the chord.\n // If `isTopNote` is `true` then get the top note's line number instead\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new RuntimeError('NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\");\n }\n let resultLine = this.keyProps[0].line;\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine)\n resultLine = thisLine;\n }\n else {\n if (thisLine < resultLine)\n resultLine = thisLine;\n }\n }\n return resultLine;\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return this.glyphProps.rest;\n }\n // Determine if the current note is a chord\n isChord() {\n return !this.isRest() && this.keys.length > 1;\n }\n // Determine if the `StaveNote` has a stem\n hasStem() {\n return this.glyphProps.stem;\n }\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n }\n else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0);\n }\n }\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);\n }\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n const ys = this._noteHeads.map((notehead) => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n this.setYs(ys);\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n return this;\n }\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext)\n tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = midLine(top, bot);\n }\n return restLine;\n }\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options = {}) {\n var _a, _b;\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n }\n else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n if (this.stem_direction === Stem.UP &&\n this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0;\n }\n }\n else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n return super.setGroupStyle(style);\n }\n setStemStyle(style) {\n const stem = this.getStem();\n if (stem)\n stem.setStyle(style);\n return this;\n }\n getStemStyle() {\n var _a;\n return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n setLedgerLineStyle(style) {\n this.ledgerLineStyle = style;\n }\n getLedgerLineStyle() {\n return this.ledgerLineStyle;\n }\n setFlagStyle(style) {\n var _a;\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style);\n }\n getFlagStyle() {\n var _a;\n return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle();\n }\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this._noteHeads[index].setStyle(style);\n return this;\n }\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accommodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0);\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n let noteHeadPadding = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n // If there are no modifiers on this note, make sure there is adequate padding\n // between the notes.\n if (this.modifierContext.getWidth() === 0) {\n noteHeadPadding = StaveNote.minNoteheadPadding;\n }\n }\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding;\n // For upward flagged notes, the width of the flag needs to be added\n if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n this.setWidth(width);\n this.preFormatted = true;\n }\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = +Infinity;\n let yBottom = -Infinity;\n let nonDisplacedX;\n let displacedX;\n let highestLine = this.checkStave().getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine;\n let lowestDisplacedLine;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n this._noteHeads.forEach((notehead) => {\n const line = notehead.getLine();\n const y = notehead.getY();\n yTop = Math.min(y, yTop);\n yBottom = Math.max(y, yBottom);\n if (displacedX === undefined && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n if (nonDisplacedX === undefined && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n highestLine = Math.max(line, highestLine);\n lowestLine = Math.min(line, lowestLine);\n if (notehead.isDisplaced()) {\n highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine);\n }\n else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n get noteHeads() {\n return this._noteHeads.slice();\n }\n /** @deprecated use StaveNote.noteHeads instead. */\n get note_heads() {\n showDeprecationWarningForNoteHeads();\n return this.noteHeads;\n }\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const stave = this.checkStave();\n const { glyphProps, render_options: { stroke_px }, } = this;\n const ctx = this.checkContext();\n const width = glyphProps.getWidth() + stroke_px * 2;\n const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2;\n if (this.isRest())\n return;\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds();\n // Early out if there are no ledger lines to draw.\n if (highest_line < 6 && lowest_line > 0)\n return;\n const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0);\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal)\n x = min_x - stroke_px;\n else if (normal)\n x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px;\n else\n x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px;\n const ledgerWidth = normal && displaced ? doubleWidth : width;\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle());\n this.applyStyle(ctx, style);\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line;\n const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line;\n const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line;\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n this.restoreStyle(ctx, style);\n }\n // Draw all key modifiers\n drawModifiers(noteheadParam) {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const index = modifier.checkIndex();\n const notehead = this._noteHeads[index];\n if (notehead == noteheadParam) {\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n }\n }\n shouldDrawFlag() {\n const hasStem = this.stem !== undefined;\n const hasFlag = this.glyphProps.flag == true;\n const hasNoBeam = this.beam === undefined;\n return hasStem && hasFlag && hasNoBeam;\n }\n // Draw the flag for the note\n drawFlag() {\n var _a, _b, _c, _d, _e;\n const ctx = this.checkContext();\n if (!ctx) {\n throw new RuntimeError('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (this.shouldDrawFlag()) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n // eslint-disable-next-line\n const noteStemHeight = this.stem.getHeight();\n const flagX = this.getStemX();\n // What's with the magic +/- 2\n // ANSWER: a corner of the note stem pokes out beyond the tip of the flag.\n // The extra +/- 2 pushes the flag glyph outward so it covers the stem entirely.\n // Alternatively, we could shorten the stem.\n const flagY = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n y_top -\n noteStemHeight +\n 2 -\n (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() -\n ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale())\n : // Up stems are above the note head and have flags on the right.\n y_bottom -\n noteStemHeight -\n 2 +\n (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() -\n ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale());\n // Draw the Flag\n (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY);\n }\n }\n // Draw the NoteHeads\n drawNoteHeads() {\n const ctx = this.checkContext();\n this._noteHeads.forEach((notehead) => {\n notehead.applyStyle(ctx);\n ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true });\n notehead.setContext(ctx).draw();\n this.drawModifiers(notehead);\n ctx.closeGroup();\n notehead.restoreStyle(ctx);\n });\n }\n drawStem(stemOptions) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n const ctx = this.checkContext();\n if (stemOptions) {\n this.setStem(new Stem(stemOptions));\n }\n // If we will render a flag, we shorten the stem so that the tip\n // does not poke through the flag.\n if (this.shouldDrawFlag() && this.stem) {\n this.stem.adjustHeightForFlag();\n }\n if (this.stem) {\n this.stem.setContext(ctx).draw();\n }\n }\n /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */\n getStaveNoteScale() {\n return 1.0;\n }\n /**\n * Override stemmablenote stem extension to adjust for distance from middle line.\n */\n getStemExtension() {\n const super_stem_extension = super.getStemExtension();\n if (!this.glyphProps.stem) {\n return super_stem_extension;\n }\n const stem_direction = this.getStemDirection();\n if (stem_direction !== this.calculateOptimalStemDirection()) {\n return super_stem_extension; // no adjustment for manually set stem direction.\n }\n let mid_line_distance;\n const MIDDLE_LINE = 3;\n if (stem_direction === Stem.UP) {\n // Note that the use of maxLine here instead of minLine might\n // seem counterintuitive, but in the case of (say) treble clef\n // chord(F2, E4) stem up, we do not want to extend the stem because\n // of F2, when a normal octave-length stem above E4 is fine.\n //\n // maxLine and minLine are set in calculateOptimalStemDirection() so\n // will be known.\n mid_line_distance = MIDDLE_LINE - this.maxLine;\n }\n else {\n mid_line_distance = this.minLine - MIDDLE_LINE;\n }\n // how many lines more than an octave is the relevant notehead?\n const lines_over_octave_from_mid_line = mid_line_distance - 3.5;\n if (lines_over_octave_from_mid_line <= 0) {\n return super_stem_extension;\n }\n const stave = this.getStave();\n let spacing_between_lines = 10;\n if (stave != undefined) {\n spacing_between_lines = stave.getSpacingBetweenLines();\n }\n return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines;\n }\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (this.render_options.draw === false)\n return;\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n const ctx = this.checkContext();\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n // Format note head x positions\n this._noteHeads.forEach((notehead) => notehead.setX(xBegin));\n if (this.stem) {\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n }\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n ctx.openGroup('stavenote', this.getAttribute('id'));\n this.drawLedgerLines();\n if (shouldRenderStem)\n this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n ctx.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\nStaveNote.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveTie extends Element {\n static get CATEGORY() {\n return Category.StaveTie;\n }\n /**\n * @param notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super();\n this.setNotes(notes);\n this.text = text;\n this.render_options = {\n cp1: 8,\n cp2: 12,\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n };\n this.resetFont();\n }\n setDirection(direction) {\n this.direction = direction;\n return this;\n }\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices) {\n notes.first_indices = [0];\n }\n if (!notes.last_indices) {\n notes.last_indices = [0];\n }\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.');\n }\n this.notes = notes;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.notes.first_note || !this.notes.last_note;\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2;\n cp2 = 8;\n }\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n // setNotes(...) verified that first_indices and last_indices are not undefined.\n // As a result, we use the ! non-null assertion operator here.\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n // eslint-disable-next-line\n const last_indices = this.notes.last_indices;\n this.applyStyle();\n ctx.openGroup('stavetie', this.getAttribute('id'));\n for (let i = 0; i < first_indices.length; ++i) {\n const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[last_indices[i]] + y_shift;\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.');\n }\n const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;\n const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction;\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n renderText(first_x_px, last_x_px) {\n var _a, _b, _c;\n if (!this.text)\n return;\n const ctx = this.checkContext();\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= ctx.measureText(this.text).width / 2;\n const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave();\n if (stave) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1);\n ctx.restore();\n }\n }\n /**\n * Returns the TieNotes structure of the first and last note this tie connects.\n */\n getNotes() {\n return this.notes;\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.notes.first_note;\n const last_note = this.notes.last_note;\n // Provide some default values so the compiler doesn't complain.\n let first_x_px = 0;\n let last_x_px = 0;\n let first_ys = [0];\n let last_ys = [0];\n let stem_direction = 0;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n }\n else if (last_note) {\n const stave = last_note.checkStave();\n first_x_px = stave.getTieStartX();\n first_ys = last_note.getYs();\n this.notes.first_indices = this.notes.last_indices;\n }\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n }\n else if (first_note) {\n const stave = first_note.checkStave();\n last_x_px = stave.getTieEndX();\n last_ys = first_note.getYs();\n this.notes.last_indices = this.notes.first_indices;\n }\n if (this.direction) {\n stem_direction = this.direction;\n }\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n/** Default text font. */\nStaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// / [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { StaveTie } from './stavetie';\nimport { Category } from './typeguard';\nexport class TabTie extends StaveTie {\n static get CATEGORY() {\n return Category.TabTie;\n }\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n /**\n * @param notes is a struct that has:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n * @param text\n */\n constructor(notes, text) {\n super(notes, text);\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n this.direction = -1; // Tab tie's are always face up.\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError, sumArray } from './util';\nexport var VoiceMode;\n(function (VoiceMode) {\n VoiceMode[VoiceMode[\"STRICT\"] = 1] = \"STRICT\";\n VoiceMode[VoiceMode[\"SOFT\"] = 2] = \"SOFT\";\n VoiceMode[VoiceMode[\"FULL\"] = 3] = \"FULL\";\n})(VoiceMode || (VoiceMode = {}));\n/**\n * `Voice` is mainly a container object to group `Tickables` for formatting.\n */\nexport class Voice extends Element {\n static get CATEGORY() {\n return Category.Voice;\n }\n /**\n * Modes allow the addition of ticks in three different ways:\n * - STRICT: This is the default. Ticks must fill the voice.\n * - SOFT: Ticks can be added without restrictions.\n * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length.\n */\n static get Mode() {\n return VoiceMode;\n }\n constructor(time) {\n super();\n this.resolutionMultiplier = 1;\n this.mode = VoiceMode.STRICT;\n this.preFormatted = false;\n this.ticksUsed = new Fraction(0, 1);\n this.largestTickWidth = 0;\n this.tickables = [];\n this.options = {\n softmaxFactor: Tables.SOFTMAX_FACTOR,\n };\n // Convert the `time` string into a VoiceTime object if necessary.\n let voiceTime;\n if (typeof time === 'string') {\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n voiceTime = {\n num_beats: parseInt(match[1]),\n beat_value: parseInt(match[2]),\n };\n }\n }\n else {\n voiceTime = time;\n }\n // Default time signature is 4/4.\n this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime);\n // Recalculate total ticks.\n this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n // until tickables are added, the smallestTickCount is the same as the stated totalTicks duration.\n this.smallestTickCount = this.totalTicks.clone();\n }\n /** Get the total ticks in the voice. */\n getTotalTicks() {\n return this.totalTicks;\n }\n /** Get the total ticks used in the voice by all the tickables. */\n getTicksUsed() {\n return this.ticksUsed;\n }\n /** Get the largest width of all the tickables. */\n getLargestTickWidth() {\n return this.largestTickWidth;\n }\n /** Get the tick count for the shortest tickable */\n getSmallestTickCount() {\n return this.smallestTickCount;\n }\n /** Get the tickables in the voice. */\n getTickables() {\n return this.tickables;\n }\n /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */\n getMode() {\n return this.mode;\n }\n /**\n * Set the voice mode.\n * @param mode value from `VoiceMode` or Voice.Mode\n */\n setMode(mode) {\n this.mode = mode;\n return this;\n }\n /** Get the resolution multiplier for the voice. */\n getResolutionMultiplier() {\n return this.resolutionMultiplier;\n }\n /** Get the actual tick resolution for the voice. */\n getActualResolution() {\n return this.resolutionMultiplier * this.time.resolution;\n }\n /** Set the voice's stave. */\n setStave(stave) {\n this.stave = stave;\n // Reset the bounding box so we can reformat.\n this.boundingBox = undefined;\n return this;\n }\n getStave() {\n return this.stave;\n }\n /** Get the bounding box for the voice. */\n getBoundingBox() {\n if (!this.boundingBox) {\n const stave = this.checkStave();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n if (!tickable.getStave())\n tickable.setStave(stave);\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n }\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n /** Set the voice mode to strict or soft. */\n setStrict(strict) {\n this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT;\n return this;\n }\n /** Determine if the voice is complete according to the voice mode. */\n isComplete() {\n if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n }\n else {\n return true;\n }\n }\n /**\n * We use softmax to layout the tickables proportional to the exponent of\n * their duration. The softmax factor is used to determine the 'linearness' of\n * the layout.\n *\n * The softmax of all the tickables in this voice should sum to 1.\n */\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n this.expTicksUsed = 0; // reset\n return this;\n }\n /**\n * Calculate the sum of the exponents of all the ticks in this voice to use\n * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables)\n *\n * Note that the \"exp\" of \"expTicksUsed\" stands for \"expontential\" ticks used,\n * not \"expected\" ticks used.\n */\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = sumArray(this.tickables.map(exp));\n return this.expTicksUsed;\n }\n /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.expTicksUsed = this.reCalculateExpTicksUsed();\n }\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n const sm = exp(tickValue) / this.expTicksUsed;\n return sm;\n }\n /** Add a tickable to the voice. */\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n this.expTicksUsed = 0; // reset\n if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)) {\n this.ticksUsed.subtract(ticks);\n throw new RuntimeError('BadArgument', 'Too many ticks.');\n }\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n this.resolutionMultiplier = this.ticksUsed.denominator;\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n /** Add an array of tickables to the voice. */\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n return this;\n }\n /** Preformat the voice by applying the voice's stave to each note. */\n preFormat() {\n if (this.preFormatted)\n return this;\n const stave = this.checkStave();\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(stave);\n }\n });\n this.preFormatted = true;\n return this;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n /**\n * Render the voice onto the canvas `context` and an optional `stave`.\n * If `stave` is omitted, it is expected that the notes have staves\n * already set.\n *\n * This method also calculates the voice's boundingBox while drawing\n * the notes. Note the similarities with this.getBoundingBox().\n */\n draw(context = this.checkContext(), stave) {\n stave = stave !== null && stave !== void 0 ? stave : this.stave;\n this.setRendered();\n let boundingBox = undefined;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n // Set the stave if provided.\n if (stave) {\n tickable.setStave(stave);\n }\n defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.');\n const bb = tickable.getBoundingBox();\n if (bb) {\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\nimport { Beam } from './beam';\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { Tables } from './tables';\nimport { TabTie } from './tabtie';\nimport { Category, isStaveNote } from './typeguard';\nimport { log } from './util';\nimport { Voice } from './voice';\n// To enable logging for this class. Set `GraceNoteGroup.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (GraceNoteGroup.DEBUG)\n log('Vex.Flow.GraceNoteGroup', args);\n}\n/** GraceNoteGroup is used to format and render grace notes. */\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() {\n return Category.GraceNoteGroup;\n }\n /** Arranges groups inside a `ModifierContext`. */\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n if (!gracenote_groups || gracenote_groups.length === 0)\n return false;\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = isStaveNote(note);\n const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab;\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding);\n }\n state.left_shift += group_shift;\n return true;\n }\n //** `GraceNoteGroup` inherits from `Modifier` and is placed inside a `ModifierContext`. */\n constructor(grace_notes, show_slur) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n this.show_slur = show_slur;\n this.slur = undefined;\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.render_options = {\n slur_y_shift: 0,\n };\n this.beams = [];\n this.voice.addTickables(this.grace_notes);\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return;\n if (!this.formatter) {\n this.formatter = new Formatter();\n }\n this.formatter.joinVoices([this.voice]).format([this.voice], 0, {});\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n this.beams.push(beam);\n }\n return this;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width + StaveNote.minNoteheadPadding;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n L('Drawing grace note group for:', note);\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n // Draw grace notes.\n this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw());\n // Draw beams.\n this.beams.forEach((beam) => beam.setContext(ctx).draw());\n if (this.show_slur) {\n // Create and draw slur.\n const is_stavenote = isStaveNote(note);\n const TieClass = is_stavenote ? StaveTie : TabTie;\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(ctx).draw();\n }\n }\n}\nGraceNoteGroup.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\nimport { Formatter } from './formatter';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { Voice } from './voice';\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() {\n return Category.NoteSubGroup;\n }\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0)\n return false;\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n state.left_shift += width;\n return true;\n }\n constructor(subNotes) {\n super();\n this.preFormatted = false;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach((subNote) => {\n subNote.setIgnoreTicks(false);\n });\n this.width = 0;\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Tables.RESOLUTION,\n }).setStrict(false);\n this.voice.addTickables(this.subNotes);\n }\n preFormat() {\n if (this.preFormatted)\n return;\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n setWidth(width) {\n this.width = width;\n return this;\n }\n getWidth() {\n return this.width;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\nimport { Fraction } from './fraction';\nimport { RuntimeError } from './util';\n/**\n * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc.\n */\nexport class TickContext {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n if (index + 1 < contexts.length)\n return contexts[index + 1];\n }\n constructor(options) {\n this.preFormatted = false;\n this.postFormatted = false;\n this.tickID = options && options.tickID ? options.tickID : 0;\n this.currentTick = new Fraction(0, 1);\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = undefined; // Biggest tickable\n this.minTicks = undefined; // this can remian null if all tickables have ignore_ticks\n this.minTickable = undefined;\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indexed by voice number\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n this.width = 0;\n this.formatterMetrics = {\n // The freedom of a tickcontext is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n };\n }\n getTickID() {\n return this.tickID;\n }\n getX() {\n return this.x;\n }\n setX(x) {\n this.x = x;\n this.xBase = x;\n this.xOffset = 0;\n return this;\n }\n getXBase() {\n return this.xBase;\n } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) {\n this.xBase = xBase;\n this.x = xBase + this.xOffset;\n }\n getXOffset() {\n return this.xOffset;\n }\n setXOffset(xOffset) {\n this.xOffset = xOffset;\n this.x = this.xBase + xOffset;\n }\n getWidth() {\n return this.width + this.padding * 2;\n }\n setPadding(padding) {\n this.padding = padding;\n return this;\n }\n getMaxTicks() {\n return this.maxTicks;\n }\n getMinTicks() {\n return this.minTicks;\n }\n getMaxTickable() {\n return this.maxTickable;\n }\n getMinTickable() {\n return this.minTickable;\n }\n getTickables() {\n return this.tickables;\n }\n /**\n * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex).\n * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63\n * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable.\n */\n getTickableForVoice(voiceIndex) {\n return this.tickablesByVoice[voiceIndex];\n }\n getTickablesByVoice() {\n return this.tickablesByVoice;\n }\n getCenterAlignedTickables() {\n return this.tickables.filter((tickable) => tickable.isCenterAligned());\n }\n /** Gets widths context, note and left/right modifiers for formatting. */\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this;\n return {\n width,\n glyphPx,\n notePx,\n leftDisplacedHeadPx,\n rightDisplacedHeadPx,\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx,\n };\n }\n getCurrentTick() {\n return this.currentTick;\n }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new RuntimeError('BadArgument', 'Invalid tickable added.');\n }\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex || 0] = tickable;\n this.preFormatted = false;\n return this;\n }\n preFormat() {\n if (this.preFormatted)\n return this;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0);\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n return this;\n }\n postFormat() {\n if (this.postFormatted)\n return this;\n this.postFormatted = true;\n return this;\n }\n getFormatterMetrics() {\n return this.formatterMetrics;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { Category, isTabNote } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Ornament.DEBUG)\n log('Vex.Flow.Ornament', args);\n}\n/**\n * Ornament implements ornaments as modifiers that can be\n * attached to notes. The complete list of ornaments is available in\n * `tables.ts` under `Vex.Flow.ornamentCodes`.\n *\n * See `tests/ornament_tests.ts` for usage examples.\n */\nexport class Ornament extends Modifier {\n /** Ornaments category string. */\n static get CATEGORY() {\n return Category.Ornament;\n }\n static get minPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('noteHead.minPadding');\n }\n /** Arrange ornaments inside `ModifierContext` */\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0)\n return false;\n let width = 0; // width is used by ornaments, which are always centered on the note head\n let right_shift = state.right_shift; // jazz ornaments calculate r/l shift separately\n let left_shift = state.left_shift;\n let yOffset = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) {\n ornament.x_shift += right_shift + 2;\n }\n if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) {\n ornament.x_shift -= left_shift + 2;\n }\n if (ornament.reportedWidth && ornament.x_shift < 0) {\n left_shift += ornament.reportedWidth;\n }\n else if (ornament.reportedWidth && ornament.x_shift >= 0) {\n right_shift += ornament.reportedWidth + Ornament.minPadding;\n }\n else {\n width = Math.max(ornament.getWidth(), width);\n }\n // articulations above/below the line can be stacked.\n if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) {\n // Unfortunately we don't know the stem direction. So we base it\n // on the line number, but also allow it to be overridden.\n const ornamentNote = defined(ornament.note, 'NoAttachedNote');\n if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) {\n state.top_text_line += increment;\n ornament.y_shift += yOffset;\n yOffset -= ornament.glyph.bbox.getH();\n }\n else {\n state.text_line += increment;\n ornament.y_shift += yOffset;\n yOffset += ornament.glyph.bbox.getH();\n }\n }\n else {\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n }\n else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n }\n // Note: 'legit' ornaments don't consider other modifiers when calculating their\n // X position, but jazz ornaments sometimes need to.\n state.left_shift = left_shift + width / 2;\n state.right_shift = right_shift + width / 2;\n return true;\n }\n /**\n * ornamentNoteTransition means the jazz ornament represents an effect from one note to another,\n * these are generally on the top of the staff.\n */\n static get ornamentNoteTransition() {\n return ['flip', 'jazzTurn', 'smear'];\n }\n /**\n * ornamentAttack indicates something that happens in the attach, placed before the note and\n * any accidentals\n */\n static get ornamentAttack() {\n return ['scoop'];\n }\n /**\n * The ornament is aligned based on the note head, but without regard to whether the\n * stem goes up or down.\n */\n static get ornamentAlignWithNoteHead() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop'];\n }\n /**\n * An ornament that happens on the release of the note, generally placed after the\n * note and overlapping the next beat/measure..\n */\n static get ornamentRelease() {\n return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip'];\n }\n /** ornamentArticulation goes above/below the note based on space availablity */\n static get ornamentArticulation() {\n return ['bend', 'plungerClosed', 'plungerOpen'];\n }\n /**\n * Legacy ornaments have hard-coded metrics. If additional ornament types are\n * added, get their metrics here.\n */\n getMetrics() {\n const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament;\n if (!ornamentMetrics)\n throw new RuntimeError('BadMetrics', `ornament missing`);\n return ornamentMetrics[this.ornament.code];\n }\n /**\n * Create a new ornament of type `type`, which is an entry in\n * `Vex.Flow.ornamentCodes` in `tables.ts`.\n */\n constructor(type) {\n super();\n this.type = type;\n this.delayed = false;\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n this.ornament = Tables.ornamentCodes(this.type);\n // new ornaments have their origin at the origin, and have more specific\n // metrics. Legacy ornaments do some\n // x scaling, and have hard-coded metrics\n const metrics = this.getMetrics();\n // some jazz ornaments are above or below depending on stem direction.\n this.adjustForStemDirection = false;\n // some jazz ornaments like falls are supposed to overlap with future bars\n // and so we report a different width than they actually take up.\n this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0;\n this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0;\n this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0;\n if (!this.ornament) {\n throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n this.x_shift = metrics ? metrics.xOffset : 0;\n this.y_shift = metrics ? metrics.yOffset : 0;\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, {\n category: `ornament.${this.ornament.code}`,\n });\n // Is this a jazz ornament that goes between this note and the next note.\n if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n this.delayed = true;\n }\n // Legacy ornaments need this. I don't know why, but horizontal spacing issues\n // happen if I don't set it.\n if (!metrics) {\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n }\n /** Set whether the ornament is to be delayed. */\n setDelayed(delayed) {\n this.delayed = delayed;\n return this;\n }\n /** Set the upper accidental for the ornament. */\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n /** Set the lower accidental for the ornament. */\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n /** Render ornament in position next to note. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDir = note.getStemDirection();\n const stave = note.checkStave();\n this.applyStyle();\n ctx.openGroup('ornament', this.getAttribute('id'));\n // Get stem extents\n const stemExtents = note.checkStem().getExtents();\n let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY;\n // TabNotes don't have stems attached to them. Tab stems are rendered outside the stave.\n if (isTabNote(note)) {\n if (note.hasStem()) {\n if (stemDir === Stem.DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n }\n else {\n // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n const isPlacedOnNoteheadSide = stemDir === Stem.DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && note.hasBeam()) {\n lineSpacing += 0.5;\n }\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n // Get initial coordinates for the modifier position\n const start = note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n // If the ornament is aligned with the note head, don't consider the stave y\n // but use the 'natural' modifier y\n let glyphY = this.ornamentAlignWithNoteHead\n ? start.y\n : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n const startX = glyphX - (stave.getX() - 10);\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n }\n else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - startX) * 0.5;\n }\n else {\n delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) {\n glyphY += this.stemUpYOffset;\n }\n if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) {\n glyphY = note.checkStave().getBoundingBox().getY() + 40;\n }\n this.glyph.render(ctx, glyphX + this.x_shift, glyphY);\n if (this.accidentalUpper) {\n glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */\nOrnament.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Rodrigo Vilar\n// MIT License\nimport { Glyph } from './glyph';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Parenthesis implements parenthesis modifiers for notes. */\nexport class Parenthesis extends Modifier {\n static get CATEGORY() {\n return Category.Parenthesis;\n }\n /** Add parentheses to the notes. */\n static buildAndAttach(notes) {\n for (const note of notes) {\n for (let i = 0; i < note.keys.length; i++) {\n note.addModifier(new Parenthesis(ModifierPosition.LEFT), i);\n note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i);\n }\n }\n }\n /** Arrange parentheses inside a ModifierContext. */\n static format(parentheses, state) {\n if (!parentheses || parentheses.length === 0)\n return false;\n let x_widthL = 0;\n let x_widthR = 0;\n for (let i = 0; i < parentheses.length; ++i) {\n const parenthesis = parentheses[i];\n const note = parenthesis.getNote();\n const pos = parenthesis.getPosition();\n const index = parenthesis.checkIndex();\n let shift = 0;\n if (pos === ModifierPosition.RIGHT) {\n shift = note.getRightParenthesisPx(index);\n x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width;\n }\n if (pos === ModifierPosition.LEFT) {\n shift = note.getLeftParenthesisPx(index);\n x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width;\n }\n parenthesis.setXShift(shift);\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n /**\n * Constructor\n *\n * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT\n */\n constructor(position) {\n super();\n this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n }\n /** Set the associated note. */\n setNote(note) {\n this.note = note;\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width'));\n if (isGraceNote(note)) {\n this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point');\n this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width'));\n }\n return this;\n }\n /** Render the parenthesis. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true });\n const x = start.x + this.x_shift;\n const y = start.y + this.y_shift;\n if (this.position == Modifier.Position.RIGHT) {\n Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', {\n category: `noteHead.standard.noteheadParenthesisRight`,\n });\n }\n else if (this.position == Modifier.Position.LEFT) {\n Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', {\n category: `noteHead.standard.noteheadParenthesisLeft`,\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Ron B. Yeh\n// MIT License\n//\n// Utilities for working with Web APIs.\n// See: https://developer.mozilla.org/en-US/docs/Web/API\nimport { globalObject } from './util';\n// eslint-disable-next-line\nexport function isHTMLCanvas(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLCanvasElement class,\n (typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) ||\n // OR it's pretending to be a element. Good enough!\n // Do not rely on .tagName, because node-canvas doesn't provide a tagName.\n (typeof element.getContext === 'function' && typeof element.toDataURL === 'function'));\n}\n// eslint-disable-next-line\nexport function isHTMLDiv(element) {\n if (!element)\n return false;\n const global = globalObject();\n return (\n // It's either an instance of the HTMLDivElement class.\n (typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) ||\n // OR it's pretending to be a
. See: svgcontext.ts.\n (typeof element.appendChild === 'function' && typeof element.style === 'object'));\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from './font';\nimport { RenderContext } from './rendercontext';\nimport { globalObject, warn } from './util';\nimport { isHTMLCanvas } from './web';\n/**\n * A rendering context for the Canvas backend. This class serves as a proxy for the\n * underlying CanvasRenderingContext2D object, part of the browser's API.\n */\nexport class CanvasContext extends RenderContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size.\n }\n /**\n * Ensure that width and height do not exceed the browser limit.\n * @returns array of [width, height] clamped to the browser limit.\n */\n static sanitizeCanvasDims(width, height) {\n const limit = this.CANVAS_BROWSER_SIZE_LIMIT;\n if (Math.max(width, height) > limit) {\n warn('Canvas dimensions exceed browser limit. Cropping to ' + limit);\n if (width > limit) {\n width = limit;\n }\n if (height > limit) {\n height = limit;\n }\n }\n return [width, height];\n }\n constructor(context) {\n super();\n /** Height of one line of text (in pixels). */\n this.textHeight = 0;\n this.context2D = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n }\n else {\n this.canvas = context.canvas;\n }\n }\n /**\n * Set all pixels to transparent black rgba(0,0,0,0).\n */\n clear() {\n this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n // eslint-disable-next-line\n openGroup(cls, id, attrs) {\n // Containers not implemented.\n }\n closeGroup() {\n // Containers not implemented.\n }\n // eslint-disable-next-line\n add(child) {\n // Containers not implemented.\n }\n setFillStyle(style) {\n this.context2D.fillStyle = style;\n return this;\n }\n /** CanvasContext ignores `setBackgroundFillStyle()`. */\n // eslint-disable-next-line\n setBackgroundFillStyle(style) {\n // DO NOTHING\n return this;\n }\n setStrokeStyle(style) {\n this.context2D.strokeStyle = style;\n return this;\n }\n setShadowColor(color) {\n this.context2D.shadowColor = color;\n return this;\n }\n setShadowBlur(blur) {\n // CanvasRenderingContext2D does not scale the shadow blur by the current\n // transform, so we have to do it manually. We assume uniform scaling\n // (though allow for rotation) because the blur can only be scaled\n // uniformly anyway.\n const t = this.context2D.getTransform();\n const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d);\n this.context2D.shadowBlur = scale * blur;\n return this;\n }\n setLineWidth(width) {\n this.context2D.lineWidth = width;\n return this;\n }\n setLineCap(capType) {\n this.context2D.lineCap = capType;\n return this;\n }\n setLineDash(dash) {\n this.context2D.setLineDash(dash);\n return this;\n }\n scale(x, y) {\n this.context2D.scale(x, y);\n return this;\n }\n resize(width, height) {\n const canvas = this.context2D.canvas;\n const devicePixelRatio = globalObject().devicePixelRatio || 1;\n // Scale the canvas size by the device pixel ratio clamping to the maximum supported size.\n [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio);\n // Divide back down by the pixel ratio and convert to integers.\n width = (width / devicePixelRatio) | 0;\n height = (height / devicePixelRatio) | 0;\n canvas.width = width * devicePixelRatio;\n canvas.height = height * devicePixelRatio;\n // The canvas could be an instance of either HTMLCanvasElement or an OffscreenCanvas.\n // Only HTMLCanvasElement has a style attribute.\n if (isHTMLCanvas(canvas)) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n return this.scale(devicePixelRatio, devicePixelRatio);\n }\n rect(x, y, width, height) {\n this.context2D.rect(x, y, width, height);\n return this;\n }\n fillRect(x, y, width, height) {\n this.context2D.fillRect(x, y, width, height);\n return this;\n }\n /**\n * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0).\n */\n clearRect(x, y, width, height) {\n this.context2D.clearRect(x, y, width, height);\n return this;\n }\n beginPath() {\n this.context2D.beginPath();\n return this;\n }\n moveTo(x, y) {\n this.context2D.moveTo(x, y);\n return this;\n }\n lineTo(x, y) {\n this.context2D.lineTo(x, y);\n return this;\n }\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\n this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n return this;\n }\n quadraticCurveTo(cpx, cpy, x, y) {\n this.context2D.quadraticCurveTo(cpx, cpy, x, y);\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise);\n return this;\n }\n fill() {\n this.context2D.fill();\n return this;\n }\n stroke() {\n this.context2D.stroke();\n return this;\n }\n closePath() {\n this.context2D.closePath();\n return this;\n }\n measureText(text) {\n const metrics = this.context2D.measureText(text);\n let y = 0;\n let height = 0;\n if (metrics.fontBoundingBoxAscent) {\n y = -metrics.fontBoundingBoxAscent;\n height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent;\n }\n else {\n y = -metrics.actualBoundingBoxAscent;\n height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent;\n }\n // Return x, y, width & height in the same manner as svg getBBox\n return {\n x: 0,\n y: y,\n width: metrics.width,\n height: height,\n };\n }\n fillText(text, x, y) {\n this.context2D.fillText(text, x, y);\n return this;\n }\n save() {\n this.context2D.save();\n return this;\n }\n restore() {\n this.context2D.restore();\n return this;\n }\n set fillStyle(style) {\n this.context2D.fillStyle = style;\n }\n get fillStyle() {\n return this.context2D.fillStyle;\n }\n set strokeStyle(style) {\n this.context2D.strokeStyle = style;\n }\n get strokeStyle() {\n return this.context2D.strokeStyle;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900).\n * @param style is a string (e.g., 'italic', 'normal').\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.context2D.font = Font.toCSSString(fontInfo);\n this.textHeight = Font.convertSizeToPixelValue(fontInfo.size);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.context2D.font;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// @author Gregory Ristow (2015)\nimport { Font, FontStyle, FontWeight } from './font';\nimport { RenderContext } from './rendercontext';\nimport { Tables } from './tables';\nimport { normalizeAngle, prefix, RuntimeError } from './util';\n/** For a particular element type (e.g., rect), we will not apply certain presentation attributes. */\nconst ATTRIBUTES_TO_IGNORE = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n rect: {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n },\n text: {\n width: true,\n height: true,\n },\n};\n/** Create the SVG in the SVG namespace. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst TWO_PI = 2 * Math.PI;\nclass MeasureTextCache {\n constructor() {\n // The cache is keyed first by the text string, then by the font attributes\n // joined together.\n this.cache = {};\n }\n lookup(text, svg, attributes) {\n let entries = this.cache[text];\n if (entries === undefined) {\n entries = {};\n this.cache[text] = entries;\n }\n const family = attributes['font-family'];\n const size = attributes['font-size'];\n const weight = attributes['font-weight'];\n const style = attributes['font-style'];\n const key = `${family}%${size}%${weight}%${style}`;\n let entry = entries[key];\n if (entry === undefined) {\n entry = this.measureImpl(text, svg, attributes);\n entries[key] = entry;\n }\n return entry;\n }\n measureImpl(text, svg, attributes) {\n let txt = this.txt;\n if (!txt) {\n // Create the SVG text element that will be used to measure text in the event\n // of a cache miss.\n txt = document.createElementNS(SVG_NS, 'text');\n this.txt = txt;\n }\n txt.textContent = text;\n if (attributes['font-family'])\n txt.setAttributeNS(null, 'font-family', attributes['font-family']);\n if (attributes['font-size'])\n txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`);\n if (attributes['font-style'])\n txt.setAttributeNS(null, 'font-style', attributes['font-style']);\n if (attributes['font-weight'])\n txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`);\n svg.appendChild(txt);\n const bbox = txt.getBBox();\n svg.removeChild(txt);\n return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };\n }\n}\n/**\n * SVG rendering context with an API similar to CanvasRenderingContext2D.\n */\nexport class SVGContext extends RenderContext {\n constructor(element) {\n super();\n this.width = 0;\n this.height = 0;\n this.precision = 1;\n this.backgroundFillStyle = 'white';\n /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */\n this.fontCSSString = '';\n this.element = element;\n this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES);\n // Create a SVG element and add it to the container element.\n const svg = this.create('svg');\n this.element.appendChild(svg);\n this.svg = svg;\n this.parent = this.svg;\n this.groups = [this.svg];\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n const defaultFontAttributes = {\n 'font-family': Font.SANS_SERIF,\n 'font-size': Font.SIZE + 'pt',\n 'font-weight': FontWeight.NORMAL,\n 'font-style': FontStyle.NORMAL,\n };\n this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes);\n this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes);\n this.groupAttributes = [];\n this.applyAttributes(svg, this.attributes);\n this.groupAttributes.push(Object.assign({}, this.attributes));\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n this.state_stack = [];\n }\n round(n) {\n return Math.round(n * this.precision) / this.precision;\n }\n create(svgElementType) {\n return document.createElementNS(SVG_NS, svgElementType);\n }\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls)\n group.setAttribute('class', prefix(cls));\n if (id)\n group.setAttribute('id', prefix(id));\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n this.applyAttributes(group, this.attributes);\n this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes));\n return group;\n }\n closeGroup() {\n this.groups.pop();\n this.groupAttributes.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n add(elem) {\n this.parent.appendChild(elem);\n }\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n /**\n * Used to set the fill color for `clearRect()`. This allows us to simulate\n * cutting a \"hole\" into the SVG drawing.\n */\n setBackgroundFillStyle(style) {\n this.backgroundFillStyle = style;\n return this;\n }\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n setShadowColor(color) {\n this.shadow_attributes.color = color;\n return this;\n }\n /**\n * @param blur A non-negative float specifying the level of shadow blur, where 0\n * represents no blur and larger numbers represent increasingly more blur.\n * @returns this\n */\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n /**\n * @param width\n * @returns this\n */\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n return this;\n }\n /**\n * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...]\n * @returns this\n *\n * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray)\n */\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n this.attributes['stroke-dasharray'] = lineDash.join(',');\n return this;\n }\n else {\n throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n /**\n * @param capType\n * @returns this\n */\n setLineCap(capType) {\n this.attributes['stroke-linecap'] = capType;\n return this;\n }\n // ### Sizing & Scaling Methods:\n // TODO (GCR): See note at scale() -- separate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width.toString();\n this.svg.style.width = width.toString();\n this.svg.style.height = height.toString();\n const attributes = {\n width,\n height,\n };\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scaleX, this.state.scaleY);\n return this;\n }\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x;\n this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y;\n const visibleWidth = this.width / this.state.scaleX;\n const visibleHeight = this.height / this.state.scaleY;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n return this;\n }\n /**\n * 1 arg: string in the \"x y w h\" format\n * 4 args: x:number, y:number, w:number, h:number\n */\n setViewBox(viewBox_or_minX, minY, width, height) {\n if (typeof viewBox_or_minX === 'string') {\n this.svg.setAttribute('viewBox', viewBox_or_minX);\n }\n else {\n const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n // ### Drawing helper methods:\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName];\n for (const attrName in attributes) {\n if (attrNamesToIgnore && attrNamesToIgnore[attrName]) {\n continue;\n }\n if (attributes[attrName] &&\n (this.groupAttributes.length == 0 ||\n attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName]))\n element.setAttributeNS(null, attrName, attributes[attrName]);\n }\n return element;\n }\n // ### Shape & Path Methods:\n clear() {\n // Clear the SVG by removing all inner children.\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n // Replace the viewbox attribute we just removed.\n this.scale(this.state.scaleX, this.state.scaleY);\n }\n // ## Rectangles:\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attributes by flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n const rectangle = this.create('rect');\n attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' };\n x = this.round(x);\n y = this.round(y);\n width = this.round(width);\n height = this.round(height);\n this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes));\n this.add(rectangle);\n return this;\n }\n fillRect(x, y, width, height) {\n const attributes = { fill: this.attributes.fill, stroke: 'none' };\n this.rect(x, y, width, height, attributes);\n return this;\n }\n clearRect(x, y, width, height) {\n // Currently this fills a rect with the backgroundFillStyle, rather\n // than \"cut a hole\" into the existing shapes.\n //\n // Since tabNote seems to be the only module that makes use of this\n // it may be worth creating a separate tabStave that would\n // draw lines around locations of tablature fingering.\n this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' });\n return this;\n }\n // ## Paths:\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n moveTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n lineTo(x, y) {\n x = this.round(x);\n y = this.round(y);\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n x2 = this.round(x2);\n y2 = this.round(y2);\n this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n quadraticCurveTo(x1, y1, x, y) {\n x = this.round(x);\n y = this.round(y);\n x1 = this.round(x1);\n y1 = this.round(y1);\n this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n arc(x, y, radius, startAngle, endAngle, counterclockwise) {\n let x0 = x + radius * Math.cos(startAngle);\n let y0 = y + radius * Math.sin(startAngle);\n x0 = this.round(x0);\n y0 = this.round(y0);\n // svg behavior different from canvas. Don't normalize angles if\n // we are drawing a circle because they both normalize to 0\n const tmpStartTest = normalizeAngle(startAngle);\n const tmpEndTest = normalizeAngle(endAngle);\n if ((!counterclockwise && endAngle - startAngle >= TWO_PI) ||\n (counterclockwise && startAngle - endAngle >= TWO_PI) ||\n tmpStartTest === tmpEndTest) {\n let x1 = x + radius * Math.cos(startAngle + Math.PI);\n let y1 = y + radius * Math.sin(startAngle + Math.PI);\n // There's no way to specify a completely circular arc in SVG so we have to\n // use two semi-circular arcs.\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `;\n this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`;\n this.pen.x = x0;\n this.pen.y = y0;\n }\n else {\n let x1 = x + radius * Math.cos(endAngle);\n let y1 = y + radius * Math.sin(endAngle);\n startAngle = tmpStartTest;\n endAngle = tmpEndTest;\n let large;\n if (Math.abs(endAngle - startAngle) < Math.PI) {\n large = counterclockwise;\n }\n else {\n large = !counterclockwise;\n }\n if (startAngle > endAngle) {\n large = !large;\n }\n const sweep = !counterclockwise;\n x1 = this.round(x1);\n y1 = this.round(y1);\n radius = this.round(radius);\n this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`;\n this.pen.x = x1;\n this.pen.y = y1;\n }\n return this;\n }\n closePath() {\n this.path += 'Z';\n return this;\n }\n getShadowStyle() {\n const sa = this.shadow_attributes;\n // A CSS drop-shadow filter blur looks different than a canvas shadowBlur\n // of the same radius, so we scale the drop-shadow radius here to make it\n // look close to the canvas shadow.\n return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`;\n }\n fill(attributes) {\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' });\n }\n attributes.d = this.path;\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n stroke() {\n const path = this.create('path');\n const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path });\n if (this.shadow_attributes.width > 0) {\n attributes.style = this.getShadowStyle();\n }\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n // ## Text Methods:\n measureText(text) {\n return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes);\n }\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return this;\n }\n x = this.round(x);\n y = this.round(y);\n const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x,\n y });\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n return this;\n }\n // TODO: State should be deep-copied.\n save() {\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n // TODO: State should be deep-restored.\n restore() {\n const savedState = this.state_stack.pop();\n if (savedState) {\n const state = savedState;\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n this.lineWidth = state.lineWidth;\n }\n return this;\n }\n set fillStyle(style) {\n this.setFillStyle(style);\n }\n get fillStyle() {\n return this.attributes.fill;\n }\n set strokeStyle(style) {\n this.setStrokeStyle(style);\n }\n get strokeStyle() {\n return this.attributes.stroke;\n }\n /**\n * @param f is 1) a `FontInfo` object or\n * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or\n * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided).\n * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt').\n * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted\n * into the font-weight attribute (e.g., font-weight=\"bold\")\n * @param style is a string (e.g., 'italic', 'normal') that is inserted into the\n * font-style attribute (e.g., font-style=\"italic\")\n */\n setFont(f, size, weight, style) {\n const fontInfo = Font.validate(f, size, weight, style);\n this.fontCSSString = Font.toCSSString(fontInfo);\n const fontAttributes = {\n 'font-family': fontInfo.family,\n 'font-size': fontInfo.size,\n 'font-weight': fontInfo.weight,\n 'font-style': fontInfo.style,\n };\n this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes);\n this.state = Object.assign(Object.assign({}, this.state), fontAttributes);\n return this;\n }\n /** Return a string of the form `'italic bold 15pt Arial'` */\n getFont() {\n return this.fontCSSString;\n }\n}\nSVGContext.measureTextCache = new MeasureTextCache();\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { CanvasContext } from './canvascontext';\nimport { SVGContext } from './svgcontext';\nimport { isRenderContext } from './typeguard';\nimport { RuntimeError } from './util';\nimport { isHTMLCanvas, isHTMLDiv } from './web';\nexport var RendererBackends;\n(function (RendererBackends) {\n RendererBackends[RendererBackends[\"CANVAS\"] = 1] = \"CANVAS\";\n RendererBackends[RendererBackends[\"SVG\"] = 2] = \"SVG\";\n})(RendererBackends || (RendererBackends = {}));\n// End of line types\nexport var RendererLineEndType;\n(function (RendererLineEndType) {\n RendererLineEndType[RendererLineEndType[\"NONE\"] = 1] = \"NONE\";\n RendererLineEndType[RendererLineEndType[\"UP\"] = 2] = \"UP\";\n RendererLineEndType[RendererLineEndType[\"DOWN\"] = 3] = \"DOWN\";\n})(RendererLineEndType || (RendererLineEndType = {}));\n/**\n * Support Canvas & SVG rendering contexts.\n */\nexport class Renderer {\n static buildContext(elementId, backend, width, height, background = '#FFF') {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + Math.cos(angle) * dashLength;\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + Math.sin(angle) * dashLength;\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n }\n else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n context.closePath();\n context.stroke();\n }\n constructor(arg0, arg1) {\n if (isRenderContext(arg0)) {\n // The user has provided what looks like a RenderContext, let's just use it.\n this.ctx = arg0;\n }\n else {\n if (arg1 === undefined) {\n // The backend must be specified if the render context isn't directly provided.\n throw new RuntimeError('InvalidArgument', 'Missing backend argument');\n }\n const backend = arg1;\n let element;\n if (typeof arg0 == 'string') {\n const maybeElement = document.getElementById(arg0);\n if (!maybeElement) {\n throw new RuntimeError('BadElementId', `Can't find element with ID \"${maybeElement}\"`);\n }\n element = maybeElement;\n }\n else {\n element = arg0;\n }\n // Verify backend and create context\n if (backend === Renderer.Backends.CANVAS) {\n if (!isHTMLCanvas(element)) {\n throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.');\n }\n const context = element.getContext('2d', { willReadFrequently: true });\n if (!context) {\n throw new RuntimeError('BadElement', \"Can't get canvas context\");\n }\n this.ctx = new CanvasContext(context);\n }\n else if (backend === Renderer.Backends.SVG) {\n if (!isHTMLDiv(element)) {\n throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.');\n }\n this.ctx = new SVGContext(element);\n }\n else {\n throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`);\n }\n }\n }\n resize(width, height) {\n this.ctx.resize(width, height);\n return this;\n }\n getContext() {\n return this.ctx;\n }\n}\nRenderer.Backends = RendererBackends;\nRenderer.LineEndType = RendererLineEndType;\n// Used by vexflow_test_helpers.ts\n// Should this be private?\n// Can we do this in a cleaner way?\nRenderer.lastContext = undefined;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var TextJustification;\n(function (TextJustification) {\n TextJustification[TextJustification[\"LEFT\"] = 1] = \"LEFT\";\n TextJustification[TextJustification[\"CENTER\"] = 2] = \"CENTER\";\n TextJustification[TextJustification[\"RIGHT\"] = 3] = \"RIGHT\";\n})(TextJustification || (TextJustification = {}));\n/**\n * `TextNote` is a notation element that is positioned in time. Generally\n * meant for objects that sit above/below the staff and inline with each other.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n * Examples of this would be such as dynamics, lyrics, chord changes, etc.\n */\nexport class TextNote extends Note {\n static get CATEGORY() {\n return Category.TextNote;\n }\n /** Glyph data. */\n static get GLYPHS() {\n return {\n segno: {\n code: 'segno',\n },\n tr: {\n code: 'ornamentTrill',\n },\n mordent: {\n code: 'ornamentMordent',\n },\n mordent_upper: {\n code: 'ornamentShortTrill',\n },\n mordent_lower: {\n code: 'ornamentMordent',\n },\n f: {\n code: 'dynamicForte',\n },\n p: {\n code: 'dynamicPiano',\n },\n m: {\n code: 'dynamicMezzo',\n },\n s: {\n code: 'dynamicSforzando',\n },\n z: {\n code: 'dynamicZ',\n },\n coda: {\n code: 'coda',\n },\n pedal_open: {\n code: 'keyboardPedalPed',\n },\n pedal_close: {\n code: 'keyboardPedalUp',\n },\n caesura_straight: {\n code: 'caesura',\n },\n caesura_curved: {\n code: 'caesuraCurved',\n },\n breath: {\n code: 'breathMarkComma',\n },\n tick: {\n code: 'breathMarkTick',\n },\n turn: {\n code: 'ornamentTurn',\n },\n turn_inverted: {\n code: 'ornamentTurnSlash',\n },\n };\n }\n constructor(noteStruct) {\n super(noteStruct);\n this.text = noteStruct.text || '';\n this.superscript = noteStruct.superscript;\n this.subscript = noteStruct.subscript;\n this.setFont(noteStruct.font);\n this.line = noteStruct.line || 0;\n this.smooth = noteStruct.smooth || false;\n this.ignore_ticks = noteStruct.ignore_ticks || false;\n this.justification = TextJustification.LEFT;\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `CanvasRenderingContext2D.measureText()`.\n if (noteStruct.glyph) {\n const struct = TextNote.GLYPHS[noteStruct.glyph];\n if (!struct)\n throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph);\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n else {\n this.glyph = undefined;\n }\n }\n /** Set the horizontal justification of the TextNote. */\n setJustification(just) {\n this.justification = just;\n return this;\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Return the Stave line on which the TextNote is placed. */\n getLine() {\n return this.line;\n }\n /** Return the unformatted text of this TextNote. */\n getText() {\n return this.text;\n }\n /** Pre-render formatting. */\n preFormat() {\n if (this.preFormatted)\n return;\n const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`);\n if (this.smooth) {\n this.setWidth(0);\n }\n else {\n if (this.glyph) {\n // Width already set.\n }\n else {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n this.setWidth(ctx.measureText(this.text).width);\n }\n }\n if (this.justification === TextJustification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2;\n this.preFormatted = true;\n }\n /**\n * Renders the TextNote.\n * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`.\n */\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n const tickContext = this.checkTickContext(`Can't draw without a TickContext.`);\n this.setRendered();\n // Reposition to center of note head\n let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2;\n // Align based on tick-context width.\n const width = this.getWidth();\n if (this.justification === TextJustification.CENTER) {\n x -= width / 2;\n }\n else if (this.justification === TextJustification.RIGHT) {\n x -= width;\n }\n let y;\n if (this.glyph) {\n y = stave.getYForLine(this.line + -3);\n this.glyph.render(ctx, x, y);\n }\n else {\n y = stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.textFont);\n ctx.fillText(this.text, x, y);\n const height = ctx.measureText(this.text).height;\n // We called this.setFont(...) in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // Scale the font size by 1/1.3.\n const smallerFontSize = Font.scaleSize(size, 0.769231);\n if (this.superscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2);\n }\n if (this.subscript) {\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1);\n }\n this.restoreStyle(ctx);\n }\n }\n}\nTextNote.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 12,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\nTextNote.Justification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { Category } from './typeguard';\nexport var VoltaType;\n(function (VoltaType) {\n VoltaType[VoltaType[\"NONE\"] = 1] = \"NONE\";\n VoltaType[VoltaType[\"BEGIN\"] = 2] = \"BEGIN\";\n VoltaType[VoltaType[\"MID\"] = 3] = \"MID\";\n VoltaType[VoltaType[\"END\"] = 4] = \"END\";\n VoltaType[VoltaType[\"BEGIN_END\"] = 5] = \"BEGIN_END\";\n})(VoltaType || (VoltaType = {}));\nexport class Volta extends StaveModifier {\n static get CATEGORY() {\n return Category.Volta;\n }\n static get type() {\n return VoltaType;\n }\n constructor(type, number, x, y_shift) {\n super();\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.resetFont();\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n let width = stave.getWidth() - x; // don't include x (offset) for width\n const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n const vert_height = 1.5 * stave.getSpacingBetweenLines();\n switch (this.volta) {\n case VoltaType.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case VoltaType.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case VoltaType.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\nVolta.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 9,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { Renderer } from './renderer';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isStaveNote, isStemmableNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StringNumber extends Modifier {\n static get CATEGORY() {\n return Category.StringNumber;\n }\n static get metrics() {\n var _a;\n return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : {\n verticalPadding: 0,\n stemPadding: 0,\n leftPadding: 0,\n rightPadding: 0,\n });\n }\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n if (!nums || nums.length === 0)\n return false;\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n const modLines = 0;\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n if (!isStaveNote(note)) {\n throw new RuntimeError('NoStaveNote');\n }\n const index = num.checkIndex();\n const props = note.getKeyProps()[index];\n const mc = note.getModifierContext();\n const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5;\n if (mc) {\n if (pos === ModifierPosition.ABOVE) {\n num.text_line = mc.getState().top_text_line;\n state.top_text_line += verticalSpaceNeeded;\n }\n else if (pos === ModifierPosition.BELOW) {\n num.text_line = mc.getState().text_line;\n state.text_line += verticalSpaceNeeded;\n }\n }\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n const glyphLine = modLines === 0 ? props.line : modLines;\n nums_list.push({\n pos,\n note,\n num,\n line: glyphLine,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const note = nums_list[i].note;\n const pos = nums_list[i].pos;\n const num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftR = nums_list[i].shiftR;\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftR = right_shift + shiftR;\n }\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = num_shift > x_widthL ? num_shift : x_widthL;\n }\n else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = num_shift > x_widthR ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n constructor(number) {\n super();\n this.string_number = number;\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.text_line = 0;\n this.stem_offset = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.drawCircle = true;\n this.setWidth(this.radius * 2 + 4);\n this.resetFont();\n }\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n setStringNumber(number) {\n this.string_number = number;\n return this;\n }\n setOffsetX(x) {\n this.x_offset = x;\n return this;\n }\n setOffsetY(y) {\n this.y_offset = y;\n return this;\n }\n setLastNote(note) {\n this.last_note = note;\n return this;\n }\n setDashed(dashed) {\n this.dashed = dashed;\n return this;\n }\n setDrawCircle(drawCircle) {\n this.drawCircle = drawCircle;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP;\n let dot_x = start.x + this.x_shift + this.x_offset;\n let stem_ext = {};\n if (note.hasStem()) {\n stem_ext = note.checkStem().getExtents();\n }\n let dot_y = start.y + this.y_shift + this.y_offset;\n switch (this.position) {\n case Modifier.Position.ABOVE:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a < b ? a : b));\n if (note.hasStem() && stemDirection == Stem.UP) {\n dot_y = stem_ext.topY + StringNumber.metrics.stemPadding;\n }\n dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.BELOW:\n {\n const ys = note.getYs();\n dot_y = ys.reduce((a, b) => (a > b ? a : b));\n if (note.hasStem() && stemDirection == Stem.DOWN) {\n dot_y = stem_ext.topY - StringNumber.metrics.stemPadding;\n }\n dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE;\n }\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding;\n break;\n case Modifier.Position.RIGHT:\n dot_x += this.radius / 2 + StringNumber.metrics.rightPadding;\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`);\n }\n ctx.save();\n if (this.drawCircle) {\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.setLineWidth(1.5);\n ctx.stroke();\n }\n ctx.setFont(this.textFont);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n const lastNote = this.last_note;\n if (isStemmableNote(lastNote)) {\n // Only StemmableNote objects have getStemX().\n const end = lastNote.getStemX() - note.getX() + 5;\n ctx.setStrokeStyle('#000000');\n ctx.setLineCap('round');\n ctx.setLineWidth(0.6);\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n }\n else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n ctx.restore();\n }\n}\nStringNumber.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Category, isNote, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nexport class Stroke extends Modifier {\n static get CATEGORY() {\n return Category.Stroke;\n }\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n if (!strokes || strokes.length === 0)\n return false;\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n const index = stroke.checkIndex();\n if (isStaveNote(note)) {\n // Only StaveNote objects have getKeyProps().\n const { line } = note.getKeyProps()[index];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n }\n else if (isTabNote(note)) {\n // Only TabNote objects have getPositions().\n const { str: string } = note.getPositions()[index];\n return { line: string, shift: 0, stroke };\n }\n else {\n throw new RuntimeError('Internal', 'Unexpected instance.');\n }\n });\n const strokeShift = left_shift;\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n state.left_shift += xShift;\n return true;\n }\n constructor(type, options) {\n super();\n this.options = Object.assign({ all_voices: true }, options);\n // multi voice - span stroke across all voices if true\n this.all_voices = this.options.all_voices;\n // multi voice - end note of stroke, set in draw()\n this.type = type;\n this.position = Modifier.Position.LEFT;\n this.render_options = {\n font_scale: 38,\n };\n this.resetFont();\n this.setXShift(0);\n this.setWidth(10);\n }\n getPosition() {\n return this.position;\n }\n addEndNote(note) {\n this.note_end = note;\n return this;\n }\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(this.position, this.index);\n let ys = note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = note.checkStave().getSpacingBetweenLines();\n const notes = this.checkModifierContext().getMembers(note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n const note = notes[i];\n if (isNote(note)) {\n // Only Note objects have getYs().\n // note is an instance of either StaveNote or TabNote.\n ys = note.getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Math.min(topY, ys[n]);\n botY = Math.max(botY, ys[n]);\n }\n }\n }\n }\n let arrow = '';\n let arrow_shift_x = 0;\n let arrow_y = 0;\n let text_shift_x = 0;\n let text_y = 0;\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - line_space / 2 + 10;\n botY += line_space / 2;\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + line_space / 2;\n topY -= line_space / 2;\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (isStaveNote(note)) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n }\n else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n }\n else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (isStaveNote(note)) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n }\n else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n ctx.fillRect(x + this.x_shift, topY, 1, botY - topY);\n }\n else {\n strokeLine = 'wiggly';\n if (isStaveNote(note)) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n }\n else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp');\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n // Draw the arrow head\n Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {\n category: `stroke_${strokeLine}.${arrow}`,\n });\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n ctx.save();\n ctx.setFont(this.textFont);\n ctx.fillText('R', x + text_shift_x, text_y);\n ctx.restore();\n }\n }\n}\nStroke.Type = {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3,\n ROLL_UP: 4,\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n};\nStroke.TEXT_FONT = {\n family: Font.SERIF,\n size: Font.SIZE,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Bend } from './bend';\nimport { Modifier } from './modifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n/** `Vibrato` implements diverse vibratos. */\nexport class Vibrato extends Modifier {\n static get CATEGORY() {\n return Category.Vibrato;\n }\n /** Arrange vibratos inside a `ModifierContext`. */\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0)\n return false;\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n // If there's a bend, drop the text line\n const bends = context.getMembers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE;\n text_line = text_line - (bendHeight + 1);\n }\n else {\n state.top_text_line += 1;\n }\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n state.right_shift += width;\n return true;\n }\n constructor() {\n super();\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n /** Set harsh vibrato. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Set vibrato width in pixels. */\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n /** Draw the vibrato on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n const vx = start.x + this.x_shift;\n const vy = note.getYForTopText(this.text_line) + 2;\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n /**\n * Static rendering method that can be called from\n * other classes (e.g. VibratoBracket).\n */\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n ctx.beginPath();\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - wave_height / 2);\n x += wave_width;\n ctx.lineTo(x + wave_width, y + wave_height / 2);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n }\n else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y);\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of members to notes (e.g. bends,\n// fingering positions etc.). The ModifierContext works with tickables\n// that are at the same tick to ensure that they and their modifiers\n// all have proper alignment. (Note that the ModifierContext also\n// runs the spacing of the tickable).\n//\n// see https://github.com/0xfe/vexflow/wiki/How-Formatting-Works\nimport { Accidental } from './accidental';\nimport { Annotation } from './annotation';\nimport { Articulation } from './articulation';\nimport { Bend } from './bend';\nimport { ChordSymbol } from './chordsymbol';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { StaveNote } from './stavenote';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\nimport { Vibrato } from './vibrato';\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (ModifierContext.DEBUG)\n log('Vex.Flow.ModifierContext', args);\n}\nexport class ModifierContext {\n constructor() {\n // Formatting data.\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n // Current members -- a mapping of Category (string) to a list of Tickables, Modifiers,\n // StaveNotes, TabNotes, etc.\n this.members = {};\n this.preFormatted = false;\n this.postFormatted = false;\n this.formatted = false;\n this.width = 0;\n this.spacing = 0;\n }\n addModifier(member) {\n L('addModifier is deprecated, use addMember instead.');\n return this.addMember(member);\n }\n /**\n * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote.\n * Here we add a new member to this.members, and create a new array if needed.\n * @param member\n * @returns this\n */\n addMember(member) {\n const category = member.getCategory();\n if (!this.members[category]) {\n this.members[category] = [];\n }\n this.members[category].push(member);\n member.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n /**\n * @deprecated\n */\n getModifiers(category) {\n L('getModifiers is deprecated, use getMembers instead.');\n return this.getMembers(category);\n }\n getMembers(category) {\n var _a;\n return (_a = this.members[category]) !== null && _a !== void 0 ? _a : [];\n }\n /**\n * Get the width of the entire\n */\n getWidth() {\n return this.width;\n }\n getLeftShift() {\n return this.state.left_shift;\n }\n getRightShift() {\n return this.state.right_shift;\n }\n getState() {\n return this.state;\n }\n getMetrics() {\n if (!this.formatted) {\n throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.');\n }\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n preFormat() {\n if (this.preFormatted)\n return;\n L('Preformatting ModifierContext');\n const state = this.state;\n const members = this.members;\n // The ordering below determines when different members are formatted and rendered.\n StaveNote.format(members[Category.StaveNote], state);\n Parenthesis.format(members[Category.Parenthesis], state);\n Dot.format(members[Category.Dot], state);\n FretHandFinger.format(members[Category.FretHandFinger], state);\n Accidental.format(members[Category.Accidental], state);\n Stroke.format(members[Category.Stroke], state);\n GraceNoteGroup.format(members[Category.GraceNoteGroup], state);\n NoteSubGroup.format(members[Category.NoteSubGroup], state);\n StringNumber.format(members[Category.StringNumber], state);\n Articulation.format(members[Category.Articulation], state);\n Ornament.format(members[Category.Ornament], state);\n Annotation.format(members[Category.Annotation], state);\n ChordSymbol.format(members[Category.ChordSymbol], state);\n Bend.format(members[Category.Bend], state);\n Vibrato.format(members[Category.Vibrato], state, this);\n // Update width of this member context\n this.width = state.left_shift + state.right_shift;\n this.preFormatted = true;\n }\n postFormat() {\n if (this.postFormatted)\n return;\n L('Postformatting ModifierContext');\n // If post-formatting is required for an element, add more lines below.\n StaveNote.postFormat(this.getMembers(Category.StaveNote));\n }\n}\nModifierContext.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n// MIT License\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, log } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Clef.DEBUG)\n log('Vex.Flow.Clef', args);\n}\n/**\n * Clef implements various types of clefs that can be rendered on a stave.\n *\n * See `tests/clef_tests.ts` for usage examples.\n */\nexport class Clef extends StaveModifier {\n static get CATEGORY() {\n return Category.Clef;\n }\n /**\n * Every clef name is associated with a glyph code from the font file\n * and a default stave line number.\n */\n static get types() {\n return {\n treble: {\n code: 'gClef',\n line: 3,\n point: 0,\n },\n bass: {\n code: 'fClef',\n line: 1,\n point: 0,\n },\n alto: {\n code: 'cClef',\n line: 2,\n point: 0,\n },\n tenor: {\n code: 'cClef',\n line: 1,\n point: 0,\n },\n percussion: {\n code: 'unpitchedPercussionClef1',\n line: 2,\n point: 0,\n },\n soprano: {\n code: 'cClef',\n line: 4,\n point: 0,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n point: 0,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n point: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n point: 0,\n },\n subbass: {\n code: 'fClef',\n line: 0,\n point: 0,\n },\n french: {\n code: 'gClef',\n line: 4,\n point: 0,\n },\n tab: {\n code: '6stringTabClef',\n line: 3,\n point: 0,\n },\n };\n }\n static get annotationSmufl() {\n return {\n '8va': 'timeSig8',\n '8vb': 'timeSig8',\n };\n }\n /** Create a new clef. */\n constructor(type, size, annotation) {\n super();\n /**\n * The attribute `clef` must be a key from\n * `Clef.types`\n */\n this.clef = Clef.types['treble'];\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`));\n L('Creating clef:', type);\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n }\n else {\n this.size = size;\n }\n const musicFont = Tables.currentMusicFont();\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = Clef.annotationSmufl[annotation];\n const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`);\n const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`);\n const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`);\n this.annotation = { code, point, line, x_shift };\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n }\n else {\n this.annotation = undefined;\n }\n return this;\n }\n /** Get clef width. */\n getWidth() {\n if (this.type === 'tab') {\n defined(this.stave, 'ClefError', \"Can't get width without stave.\");\n }\n return this.width;\n }\n /** Set associated stave. */\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n /** Render clef. */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('clef', this.getAttribute('id'));\n Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clef_${this.size}`,\n });\n if (this.annotation !== undefined && this.attachment !== undefined) {\n this.placeGlyphOnLine(this.attachment, stave, this.annotation.line);\n this.attachment.setStave(stave);\n this.attachment.setContext(ctx);\n this.attachment.renderToStave(this.x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n/** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */\nClef.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined } from './util';\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() {\n return Category.KeySignature;\n }\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.accList = [];\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifierPosition.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Tables.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.checkStave(), acc.line);\n this.glyphs.push(glyph);\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n return this;\n }\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Tables.keySignature(spec);\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type;\n // Determine how many naturals needed to add\n const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length;\n // Return if no naturals needed\n if (naturals < 1)\n return undefined;\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n return {\n accList: cancelled,\n type: cancel_accList[0].type,\n };\n }\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n return this;\n }\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#')\n customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else\n offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b')\n customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else\n offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#')\n customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else\n offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b')\n customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else\n offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n }\n else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n getPadding(index) {\n if (!this.formatted)\n this.format();\n return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding;\n }\n getWidth() {\n if (!this.formatted)\n this.format();\n return this.width;\n }\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n return this;\n }\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n format() {\n const stave = this.checkStave();\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Tables.keySignature(defined(this.keySpec));\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n if (this.accList.length > 0) {\n const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef();\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n this.formatted = true;\n }\n /**\n * Return the Glyph objects making up this KeySignature.\n */\n getGlyphs() {\n if (!this.formatted)\n this.format();\n return this.glyphs;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n if (!this.formatted)\n this.format();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('keysignature', this.getAttribute('id'));\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(stave);\n glyph.setContext(ctx);\n glyph.renderToStave(x);\n }\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n// Space between natural and following accidental depending\n// on vertical position\nKeySignature.accidentalSpacing = {\n '#': {\n above: 6,\n below: 4,\n },\n b: {\n above: 4,\n below: 7,\n },\n n: {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n bb: {\n above: 4,\n below: 7,\n },\n db: {\n above: 4,\n below: 7,\n },\n d: {\n above: 4,\n below: 7,\n },\n bbs: {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n bs: {\n above: 4,\n below: 10,\n },\n bss: {\n above: 4,\n below: 10,\n },\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nexport class Repetition extends StaveModifier {\n static get CATEGORY() {\n return Category.Repetition;\n }\n constructor(type, x, y_shift) {\n super();\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.resetFont();\n }\n setShiftX(x) {\n this.x_shift = x;\n return this;\n }\n setShiftY(y) {\n this.y_shift = y;\n return this;\n }\n draw(stave, x) {\n this.setRendered();\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.getWidth());\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n case Repetition.type.TO_CODA:\n this.drawSymbolText(stave, x, 'To', true);\n break;\n default:\n break;\n }\n return this;\n }\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' });\n return this;\n }\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift;\n Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' });\n return this;\n }\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n ctx.save();\n ctx.setFont(this.textFont);\n let text_x = 0;\n let symbol_x = 0;\n const modifierWidth = stave.getNoteStartX() - this.x;\n switch (this.symbol_type) {\n // To the left with symbol\n case Repetition.type.CODA_LEFT:\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.getVerticalBarWidth();\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n // To the right without symbol\n case Repetition.type.DC:\n case Repetition.type.DC_AL_FINE:\n case Repetition.type.DS:\n case Repetition.type.DS_AL_FINE:\n case Repetition.type.FINE:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width;\n break;\n // To the right with symbol\n default:\n text_x =\n this.x +\n x +\n this.x_shift +\n stave.getWidth() -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') -\n modifierWidth -\n ctx.measureText(text).width -\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n symbol_x =\n text_x +\n ctx.measureText(text).width +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX');\n break;\n }\n const y = stave.getYForTopText(stave.getNumLines()) +\n this.y_shift +\n Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY');\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n return this;\n }\n}\nRepetition.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\nRepetition.type = {\n NONE: 1,\n CODA_LEFT: 2,\n CODA_RIGHT: 3,\n SEGNO_LEFT: 4,\n SEGNO_RIGHT: 5,\n DC: 6,\n DC_AL_CODA: 7,\n DC_AL_FINE: 8,\n DS: 9,\n DS_AL_CODA: 10,\n DS_AL_FINE: 11,\n FINE: 12,\n TO_CODA: 13, // To Coda at end of stave\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier } from './stavemodifier';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveSection;\n }\n constructor(section, x, shift_y, drawRect = true) {\n super();\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.drawRect = drawRect;\n this.resetFont();\n }\n setStaveSection(section) {\n this.section = section;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const borderWidth = 2;\n const padding = 2;\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(borderWidth);\n ctx.setFont(this.textFont);\n const textFormatter = TextFormatter.create(this.textFont);\n const textWidth = textFormatter.getWidthForTextInPx(this.section);\n const textY = textFormatter.getYForStringInPx(this.section);\n const textHeight = textY.height;\n const headroom = -1 * textY.yMin;\n const width = textWidth + 2 * padding; // add left & right padding\n const height = textHeight + 2 * padding; // add top & bottom padding\n // Seems to be a good default y\n const y = stave.getYForTopText(1.5) + this.shift_y;\n const x = this.x + shift_x;\n if (this.drawRect) {\n ctx.beginPath();\n ctx.rect(x, y - height + headroom, width, height);\n ctx.stroke();\n }\n ctx.fillText(this.section, x + padding, y - padding);\n ctx.restore();\n return this;\n }\n}\nStaveSection.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TextFormatter } from './textformatter';\nimport { Category } from './typeguard';\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveTempo;\n }\n constructor(tempo, x, shift_y) {\n super();\n /** Font size for note. */\n this.render_options = { glyph_font_scale: 30 };\n this.tempo = tempo;\n this.position = StaveModifierPosition.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.resetFont();\n }\n setTempo(tempo) {\n this.tempo = tempo;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots || 0;\n const bpm = this.tempo.bpm;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n ctx.save();\n const textFormatter = TextFormatter.create(this.textFont);\n if (name) {\n ctx.setFont(this.textFont);\n ctx.fillText(name, x, y);\n x += textFormatter.getWidthForTextInPx(name);\n }\n if (duration && bpm) {\n // Override the weight and style.\n const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' });\n ctx.setFont(noteTextFont);\n const noteTextFormatter = TextFormatter.create(noteTextFont);\n if (name) {\n x += noteTextFormatter.getWidthForTextInPx('|');\n ctx.fillText('(', x, y);\n x += noteTextFormatter.getWidthForTextInPx('(');\n }\n const glyphProps = Tables.getGlyphProps(duration);\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head);\n x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale);\n // Draw stem and flags\n if (glyphProps.stem) {\n let stem_height = 30;\n if (glyphProps.beam_count)\n stem_height += 3 * (glyphProps.beam_count - 1);\n stem_height *= scale;\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n if (glyphProps.code && glyphProps.code_flag_upstem) {\n const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, {\n category: 'flag.staveTempo',\n });\n x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution;\n }\n }\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n ctx.restore();\n return this;\n }\n}\nStaveTempo.TEXT_FONT = {\n family: Font.SERIF,\n size: 14,\n weight: FontWeight.BOLD,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Font, FontStyle, FontWeight } from './font';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { TextJustification, TextNote } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveText extends StaveModifier {\n static get CATEGORY() {\n return Category.StaveText;\n }\n constructor(text, position, options = {}) {\n super();\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options);\n this.resetFont();\n }\n setStaveText(text) {\n this.text = text;\n return this;\n }\n setShiftX(x) {\n this.shift_x = x;\n return this;\n }\n setShiftY(y) {\n this.shift_y = y;\n return this;\n }\n setText(text) {\n this.text = text;\n return this;\n }\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n const text_width = ctx.measureText('' + this.text).width;\n let x;\n let y;\n switch (this.position) {\n case StaveModifierPosition.LEFT:\n case StaveModifierPosition.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === StaveModifierPosition.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n }\n else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case StaveModifierPosition.ABOVE:\n case StaveModifierPosition.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === TextJustification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n }\n else if (this.options.justification === TextJustification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n if (this.position === StaveModifierPosition.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n }\n else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\nStaveText.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Renders time signatures glyphs for staffs\n// This class is used by TimeSignature to render the associated glyphs\nimport { Glyph } from './glyph';\nimport { defined } from './util';\nexport class TimeSignatureGlyph extends Glyph {\n constructor(timeSignature, topDigits, botDigits, code, point, options) {\n var _a;\n super(code, point, options);\n this.timeSignature = timeSignature;\n this.topGlyphs = [];\n this.botGlyphs = [];\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n let timeSigType = topDigits[i];\n switch (topDigits[i]) {\n case '-':\n timeSigType = 'Minus';\n break;\n case '+':\n timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus';\n break;\n case '(':\n timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft';\n break;\n case ')':\n timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight';\n break;\n }\n const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.topGlyphs.push(topGlyph);\n topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0;\n }\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n let timeSigType = botDigits[i];\n switch (botDigits[i]) {\n case '+':\n timeSigType = 'PlusSmall';\n break;\n case '(':\n timeSigType = 'ParensLeftSmall';\n break;\n case ')':\n timeSigType = 'ParensRightSmall';\n break;\n }\n const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point);\n this.botGlyphs.push(botGlyph);\n botWidth += defined(botGlyph.getMetrics().width);\n }\n this.width = Math.max(topWidth, botWidth);\n this.xMin = this.getMetrics().x_min;\n this.topStartX = (this.width - topWidth) / 2.0;\n this.botStartX = (this.width - botWidth) / 2.0;\n this.reset();\n }\n getMetrics() {\n return {\n x_min: this.xMin,\n x_max: this.xMin + this.width,\n width: this.width,\n };\n }\n renderToStave(x) {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n let start_x = x + this.topStartX;\n let y = 0;\n if (this.botGlyphs.length > 0)\n y = stave.getYForLine(this.timeSignature.topLine);\n else\n y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n start_x = x + this.botStartX;\n y = stave.getYForLine(this.timeSignature.bottomLine);\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine());\n Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y);\n start_x += defined(glyph.getMetrics().width);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\nimport { Glyph } from './glyph';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignatureGlyph } from './timesigglyph';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nconst assertIsValidTimeSig = (timeSpec) => {\n const numbers = timeSpec.split('/');\n if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`);\n }\n numbers.forEach((number) => {\n // Characters consisting in number 0..9, '+', '-', '(' or ')'\n if (/^[0-9+\\-()]+$/.test(number) == false) {\n throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`);\n }\n });\n};\n/**\n * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from\n * a provided \"timeSpec\" such as \"4/4\", \"C|\" (cut time), or even something more advanced\n * such as \"3/4(6/8)\" or \"2/4+5/8\".\n */\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() {\n return Category.TimeSignature;\n }\n static get glyphs() {\n return {\n C: {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) {\n super();\n this.timeSpec = '4/4';\n this.line = 0;\n this.is_numeric = true;\n this.validate_args = validate_args;\n const padding = customPadding;\n // point must be defined before parsing spec.\n const musicFont = Tables.currentMusicFont();\n this.point = musicFont.lookupMetric('digits.point');\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifierPosition.BEGIN);\n this.setTimeSig(timeSpec);\n this.setPadding(padding);\n }\n /**\n * Return TimeSignatureInfo given a string, consisting of line (number),\n * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or\n * TimeSignatureGlyph object).\n */\n parseTimeSpec(timeSpec) {\n var _a, _b;\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n if (this.validate_args) {\n assertIsValidTimeSig(timeSpec);\n }\n const parts = timeSpec.split('/');\n return {\n line: 0,\n num: true,\n glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''),\n };\n }\n /**\n * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both\n * top and bottom digits along with plus signs etc.)\n */\n makeTimeSignatureGlyph(topDigits, botDigits) {\n // note that 'code' is ignored by TimeSignatureGlyph when rendering.\n return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point);\n }\n /**\n * Returns {line, num (=getIsNumeric), glyph} --\n * but these can also be accessed directly w/ getters and setters.\n */\n getInfo() {\n const { line, is_numeric, glyph } = this;\n return { line, num: is_numeric, glyph };\n }\n /**\n * Set a new time signature specification without changing customPadding, etc.\n *\n * The getter for this is `getTimeSpec` not `getTimeSig`.\n */\n setTimeSig(timeSpec) {\n this.timeSpec = timeSpec;\n const info = this.parseTimeSpec(timeSpec);\n this.setGlyph(info.glyph);\n this.is_numeric = info.num;\n this.line = info.line;\n return this;\n }\n /**\n * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature\n */\n getTimeSpec() {\n return this.timeSpec;\n }\n /**\n * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/\n * denominator time signatures such as 3/4 and 2 for cut/common.\n */\n getLine() {\n return this.line;\n }\n /**\n * Set the line number that the TimeSignature sits on. Half-values are acceptable\n * for spaces, etc. Can be altered, for instance, for signatures that sit above the\n * staff in large orchestral scores.\n */\n setLine(line) {\n this.line = line;\n }\n /**\n * Get the Glyph object used to create the time signature. Numeric time signatures\n * such as 3/8 have a composite Glyph stored as a single Glyph object.\n */\n getGlyph() {\n return this.glyph;\n }\n /**\n * Set the Glyph object used to draw the time signature, and update the width of the\n * TimeSignature to match. The Glyph must define width in its metrics.\n */\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(defined(this.glyph.getMetrics().width));\n }\n /**\n * Return a boolean on whether this TimeSignature is drawn with one or more numbers\n * (such as 4/4) or not (as in cut time).\n */\n getIsNumeric() {\n return this.is_numeric;\n }\n /**\n * Set whether this TimeSignature is drawn with one or more numbers.\n */\n setIsNumeric(isNumeric) {\n this.is_numeric = isNumeric;\n }\n /**\n * Draw the time signature on a Stave using its RenderContext. Both setStave\n * and setContext must already be run.\n */\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('timesignature', this.getAttribute('id'));\n this.glyph.setStave(stave);\n this.glyph.setContext(ctx);\n this.placeGlyphOnLine(this.glyph, stave, this.line);\n this.glyph.renderToStave(this.x);\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { KeySignature } from './keysignature';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { Volta } from './stavevolta';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { RuntimeError } from './util';\n// Used by Stave.format() to sort the modifiers at the beginning and end of a stave.\n// The keys (computed property names) match the CATEGORY property in the\n// Barline, Clef, KeySignature, TimeSignature classes.\nconst SORT_ORDER_BEG_MODIFIERS = {\n [Barline.CATEGORY]: 0,\n [Clef.CATEGORY]: 1,\n [KeySignature.CATEGORY]: 2,\n [TimeSignature.CATEGORY]: 3,\n};\nconst SORT_ORDER_END_MODIFIERS = {\n [TimeSignature.CATEGORY]: 0,\n [KeySignature.CATEGORY]: 1,\n [Barline.CATEGORY]: 2,\n [Clef.CATEGORY]: 3,\n};\nexport class Stave extends Element {\n static get CATEGORY() {\n return Category.Stave;\n }\n // This is the sum of the padding that normally goes on left + right of a stave during\n // drawing. Used to size staves correctly with content width.\n static get defaultPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax');\n }\n // Right padding, used by system if startX is already determined.\n static get rightPadding() {\n const musicFont = Tables.currentMusicFont();\n return musicFont.lookupMetric('stave.endPaddingMax');\n }\n constructor(x, y, width, options) {\n super();\n // Initialized by the constructor via this.resetLines().\n this.height = 0;\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.resetFont();\n this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options);\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 };\n this.resetLines();\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE));\n }\n /** Set default style for ledger lines. */\n setDefaultLedgerLineStyle(style) {\n this.defaultLedgerLineStyle = style;\n }\n /** Get default style for ledger lines. */\n getDefaultLedgerLineStyle() {\n return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle);\n }\n space(spacing) {\n return this.options.spacing_between_lines_px * spacing;\n }\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n setNoteStartX(x) {\n if (!this.formatted)\n this.format();\n this.start_x = x;\n return this;\n }\n getNoteStartX() {\n if (!this.formatted)\n this.format();\n return this.start_x;\n }\n getNoteEndX() {\n if (!this.formatted)\n this.format();\n return this.end_x;\n }\n getTieStartX() {\n return this.start_x;\n }\n getTieEndX() {\n return this.end_x;\n }\n getX() {\n return this.x;\n }\n getNumLines() {\n return this.options.num_lines;\n }\n setNumLines(n) {\n this.options.num_lines = n;\n this.resetLines();\n return this;\n }\n setY(y) {\n this.y = y;\n return this;\n }\n getY() {\n return this.y;\n }\n getTopLineTopY() {\n return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2;\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2;\n }\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n mod.setX(mod.getX() + shift);\n }\n return this;\n }\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n getWidth() {\n return this.width;\n }\n getStyle() {\n return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle());\n }\n /**\n * Set the measure number of this Stave.\n */\n setMeasure(measure) {\n this.measure = measure;\n return this;\n }\n /**\n * Return the measure number of this Stave.\n */\n getMeasure() {\n return this.measure;\n }\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new RuntimeError('InvalidIndex', 'Must be of number type');\n }\n if (!this.formatted)\n this.format();\n if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) {\n return 0;\n }\n // for right position modifiers zero shift seems correct, see 'Volta + Modifier Measure Test'\n if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) {\n return 0;\n }\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n return start_x;\n }\n /** Coda & Segno Symbol functions */\n setRepetitionType(type, yShift = 0) {\n this.modifiers.push(new Repetition(type, this.x, yShift));\n return this;\n }\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n // Section functions\n setSection(section, y, xOffset = 0, fontSize, drawRect = true) {\n const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect);\n if (fontSize)\n staveSection.setFontSize(fontSize);\n this.modifiers.push(staveSection);\n return this;\n }\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n // Text functions\n setText(text, position, options = {}) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n getHeight() {\n return this.height;\n }\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;\n return score_bottom;\n }\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n // This returns\n /** @returns the y for the *center* of a staff line */\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + line * spacing + headroom * spacing;\n return y;\n }\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return (y - this.y) / spacing - headroom;\n }\n getYForTopText(line = 0) {\n return this.getYForLine(-line - this.options.top_text_position);\n }\n getYForBottomText(line = 0) {\n return this.getYForLine(this.options.bottom_text_position + line);\n }\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return this.y + headroom * spacing + 5 * spacing - line * spacing;\n }\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifierPosition.END);\n return this;\n }\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== BarlineType.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n if (position === StaveModifierPosition.END) {\n this.endClef = clefSpec;\n }\n else {\n this.clef = clefSpec;\n }\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n }\n else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n return this;\n }\n getClef() {\n return this.clef;\n }\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifierPosition.END);\n return this;\n }\n getEndClef() {\n return this.endClef;\n }\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n }\n else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n return this;\n }\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END);\n return this;\n }\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n }\n else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n return this;\n }\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a key signature to the stave.\n *\n * Example:\n * `stave.addKeySignature('Db');`\n * @param keySpec new key specification `[A-G][b|#]?`\n * @param cancelKeySpec\n * @param position\n * @returns\n */\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifierPosition.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position);\n return this;\n }\n /**\n * Add a clef to the stave.\n *\n * Example:\n *\n * stave.addClef('treble')\n * @param clef clef (treble|bass|...) see {@link Clef.types}\n * @param size\n * @param annotation\n * @param position\n * @returns\n */\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifierPosition.BEGIN) {\n this.clef = clef;\n }\n else if (position === StaveModifierPosition.END) {\n this.endClef = clef;\n }\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifierPosition.END);\n return this;\n }\n /**\n * Add a time signature to the stave\n *\n * Example:\n *\n * `stave.addTimeSignature('4/4');`\n * @param timeSpec time signature specification `(C\\||C|\\d\\/\\d)`\n * @param customPadding\n * @param position\n * @returns\n */\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END);\n return this;\n }\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n /**\n * @param position\n * @param category\n * @returns array of StaveModifiers that match the provided position and category.\n */\n getModifiers(position, category) {\n const noPosition = position === undefined;\n const noCategory = category === undefined;\n if (noPosition && noCategory) {\n return this.modifiers;\n }\n else if (noPosition) {\n // A category was provided.\n return this.modifiers.filter((m) => category === m.getCategory());\n }\n else if (noCategory) {\n // A position was provided.\n return this.modifiers.filter((m) => position === m.getPosition());\n }\n else {\n // Both position and category were provided!\n return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory());\n }\n }\n /**\n * Use the modifier's `getCategory()` as a key for the `order` array.\n * The retrieved value is used to sort modifiers from left to right (0 to to 3).\n */\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN);\n const endModifiers = this.getModifiers(StaveModifierPosition.END);\n this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS);\n this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS);\n if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE));\n }\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(BarlineType.NONE));\n }\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n x += padding;\n modifier.setX(x);\n x += width;\n if (padding + width === 0)\n offset--;\n }\n this.start_x = x;\n x = this.x + this.width;\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n let lastBarlineIdx = 0;\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx;\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = -layoutMetrics.xMin || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n }\n else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n modifier.setX(x);\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n this.applyStyle();\n ctx.openGroup('stave', this.getAttribute('id'));\n if (!this.formatted)\n this.format();\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n if (this.options.line_config[line].visible) {\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + width, y);\n ctx.stroke();\n }\n }\n ctx.closeGroup();\n this.restoreStyle();\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n // Only draw modifier if it has a draw function\n if (typeof modifier.draw === 'function') {\n modifier.applyStyle(ctx);\n modifier.draw(this, this.getModifierXShift(i));\n modifier.restoreStyle(ctx);\n }\n }\n // Render measure numbers\n if (this.measure > 0) {\n ctx.save();\n ctx.setFont(this.textFont);\n const textWidth = ctx.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n ctx.fillText('' + this.measure, this.x - textWidth / 2, y);\n ctx.restore();\n }\n return this;\n }\n getVerticalBarWidth() {\n return this.options.vertical_bar_width;\n }\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws RuntimeError \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');\n }\n if (line_config.visible === undefined) {\n throw new RuntimeError('StaveConfigError', \"The line configuration object is missing the 'visible' property.\");\n }\n if (typeof line_config.visible !== 'boolean') {\n throw new RuntimeError('StaveConfigError', \"The line configuration objects 'visible' property must be true or false.\");\n }\n this.options.line_config[line_number] = line_config;\n return this;\n }\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws RuntimeError \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave');\n }\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow '{}' to be used if the caller just wants the default for a particular node.\n if (lines_configuration[line_config].visible == undefined) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]);\n }\n this.options.line_config = lines_configuration;\n return this;\n }\n static formatBegModifiers(staves) {\n const adjustCategoryStartX = (category) => {\n let minStartX = 0;\n // Calculate min start X for the category\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Consider only the first instance\n if (modifiers.length > 0 && modifiers[0].getX() > minStartX)\n minStartX = modifiers[0].getX();\n });\n let adjustX = 0;\n staves.forEach((stave) => {\n adjustX = 0;\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category);\n // Calculate adjustement required for the stave\n modifiers.forEach((modifier) => {\n if (minStartX - modifier.getX() > adjustX)\n adjustX = minStartX - modifier.getX();\n });\n const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n let bAdjust = false;\n // Apply adjustment to all the modifiers in and beyond the category\n allModifiers.forEach((modifier) => {\n if (modifier.getCategory() === category)\n bAdjust = true;\n if (bAdjust && adjustX > 0)\n modifier.setX(modifier.getX() + adjustX);\n });\n // Apply adjustment also to note start.\n stave.setNoteStartX(stave.getNoteStartX() + adjustX);\n });\n };\n // Make sure that staves are formatted\n staves.forEach((stave) => {\n if (!stave.formatted)\n stave.format();\n });\n // Align Clefs\n adjustCategoryStartX(Category.Clef);\n // Align key signatures\n adjustCategoryStartX(Category.KeySignature);\n // Align time signatures\n adjustCategoryStartX(Category.TimeSignature);\n let maxX = 0;\n // align note start\n staves.forEach((stave) => {\n if (stave.getNoteStartX() > maxX)\n maxX = stave.getNoteStartX();\n });\n staves.forEach((stave) => {\n stave.setNoteStartX(maxX);\n });\n maxX = 0;\n // align REPEAT_BEGIN\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n if (modifier.getX() > maxX)\n maxX = modifier.getX();\n });\n });\n staves.forEach((stave) => {\n const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, Category.Barline);\n modifiers.forEach((modifier) => {\n if (modifier.getType() == BarlineType.REPEAT_BEGIN)\n modifier.setX(maxX);\n });\n });\n }\n}\nStave.TEXT_FONT = {\n family: Font.SANS_SERIF,\n size: 8,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');\n }\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n/** StaveConnector implements the connector lines between staves of a system. */\nexport class StaveConnector extends Element {\n static get CATEGORY() {\n return Category.StaveConnector;\n }\n constructor(top_stave, bottom_stave) {\n super();\n this.thickness = Tables.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.resetFont();\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n /**\n * Set type.\n * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString}\n */\n setType(type) {\n const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type;\n // Be certain that the type is a valid type:\n if (Object.values(StaveConnector.type).includes(newType)) {\n this.type = newType;\n }\n return this;\n }\n /**\n * Get type.\n * @returns number {@link StaveConnector.type}\n */\n getType() {\n return this.type;\n }\n /** Set optional associated Text. */\n setText(text, options = {}) {\n this.texts.push({\n content: text,\n options: Object.assign({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw new RuntimeError('InvalidType', 'x_shift must be a Number');\n }\n this.x_shift = x_shift;\n return this;\n }\n getXShift() {\n return this.x_shift;\n }\n /** Render connector and associated text. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE;\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.getWidth();\n }\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= this.width + 2;\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - 0.9 * width;\n const cpy1 = y1 + 0.2 * attachment_height;\n const cpx2 = x1 + 1.1 * width;\n const cpy2 = y2 - 0.135 * attachment_height;\n const cpx3 = cpx2;\n const cpy3 = y2 + 0.135 * attachment_height;\n const cpx4 = cpx1;\n const cpy4 = y3 - 0.2 * attachment_height;\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + 0.4 * width;\n const cpy6 = y2 + 0.135 * attachment_height;\n const cpx7 = cpx6;\n const cpy7 = y2 - 0.135 * attachment_height;\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n }\n case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= this.width + 2;\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`);\n }\n if (this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n ctx.save();\n ctx.setLineWidth(2);\n ctx.setFont(this.textFont);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\nStaveConnector.TEXT_FONT = {\n family: Font.SERIF,\n size: 16,\n weight: FontWeight.NORMAL,\n style: FontStyle.NORMAL,\n};\n/**\n * SINGLE_LEFT and SINGLE are the same value for compatibility\n * with older versions of vexflow which didn't have right sided\n * stave connectors.\n */\nStaveConnector.type = {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n};\n/**\n * Connector type:\n * * \"singleRight\"\n * * \"singleLeft\"\n * * \"single\"\n * * \"double\"\n * * \"brace\"\n * * \"bracket\"\n * * \"boldDoubleLeft\"\n * * \"boldDoubleRight\"\n * * \"thinDouble\"\n * * \"none\"\n */\nStaveConnector.typeString = {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Beam } from './beam';\nimport { Font } from './font';\nimport { Fraction } from './fraction';\nimport { ModifierContext } from './modifiercontext';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { Tables } from './tables';\nimport { TickContext } from './tickcontext';\nimport { isNote, isStaveNote } from './typeguard';\nimport { defined, log, midLine, RuntimeError, sumArray } from './util';\nimport { Voice } from './voice';\n/**\n * Create `Alignment`s for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\nfunction createContexts(voices, makeContext, addToContext) {\n if (voices.length == 0)\n return {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = makeContext({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n // Maintain a list of unique integerTicks.\n tickList.push(integerTicks);\n }\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n ticksUsed.add(tickable.getTicks());\n });\n });\n return {\n map: tickToContextMap,\n array: contexts,\n list: tickList.sort((a, b) => a - b),\n resolutionMultiplier,\n };\n}\n// eslint-disable-next-line\nfunction L(...args) {\n if (Formatter.DEBUG)\n log('Vex.Flow.Formatter', args);\n}\n/**\n * Get the rest line number of the next non-rest note(s).\n * @param notes array of Notes\n * @param currRestLine\n * @param currNoteIndex current note index\n * @param compare if true, return the midpoint between the current rest line and the next rest line\n * @returns a line number, which determines the vertical position of a rest.\n */\nfunction getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = currRestLine;\n // Start with the next note and keep going until we find a valid non-rest note group.\n for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) {\n const note = notes[noteIndex];\n if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n // Locate the mid point between two lines.\n if (compare && currRestLine !== nextRestLine) {\n const top = Math.max(currRestLine, nextRestLine);\n const bot = Math.min(currRestLine, nextRestLine);\n nextRestLine = midLine(top, bot);\n }\n return nextRestLine;\n}\n/**\n * Format implements the formatting and layout algorithms that are used\n * to position notes in a voice. The algorithm can align multiple voices both\n * within a stave, and across multiple staves.\n *\n * To do this, the formatter breaks up voices into a grid of rational-valued\n * `ticks`, to which each note is assigned. Then, minimum widths are assigned\n * to each tick based on the widths of the notes and modifiers in that tick. This\n * establishes the smallest amount of space required for each tick.\n *\n * Finally, the formatter distributes the left over space proportionally to\n * all the ticks, setting the `x` values of the notes in each tick.\n *\n * See `tests/formatter_tests.ts` for usage examples. The helper functions included\n * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n */\nexport class Formatter {\n /**\n * Helper function to layout \"notes\" one after the other without\n * regard for proportions. Useful for tests and debugging.\n */\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((accumulator, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(accumulator + metrics.totalLeftPx);\n return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n /** Helper function to plot formatter debug info. */\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options);\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n ctx.save();\n ctx.setFont(Font.SANS_SERIF, 8);\n contextGaps.gaps.forEach((gap) => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12);\n });\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n /**\n * Helper function to format and draw a single voice. Returns a bounding\n * box for the notation.\n * @param ctx the rendering context\n * @param stave the stave to which to draw (`Stave` or `TabStave`)\n * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.)\n * @param params one of below:\n * * Setting `autobeam` only `(context, stave, notes, true)` or\n * `(ctx, stave, notes, {autobeam: true})`\n * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n * * Setting both a struct is needed `(context, stave, notes, {\n * autobeam: true, align_rests: true})`\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDraw(ctx, stave, notes, params) {\n let options = {\n auto_beam: false,\n align_rests: false,\n };\n if (typeof params === 'object') {\n options = Object.assign(Object.assign({}, options), params);\n }\n else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice]) // , { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n /**\n * Helper function to format and draw aligned tab and stave notes in two\n * separate staves.\n * @param ctx the rendering context\n * @param tabstave a `TabStave` instance on which to render `TabNote`s.\n * @param stave a `Stave` instance on which to render `Note`s.\n * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.)\n * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n * @param autobeam automatically generate beams.\n * @param params a configuration object:\n * * `autobeam` automatically generates beams for the notes.\n * * `align_rests` aligns rests with nearby notes.\n */\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n let opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n if (typeof params === 'object') {\n opts = Object.assign(Object.assign({}, opts), params);\n }\n else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes);\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes);\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice]) // , { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach((beam) => beam.setContext(ctx).draw());\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n /**\n * Automatically set the vertical position of rests based on previous/next note positions.\n * @param tickables an array of Tickables.\n * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes.\n * @param alignTuplets If `false`, ignores tuplets.\n */\n static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) {\n tickables.forEach((currTickable, index) => {\n if (isStaveNote(currTickable) && currTickable.isRest()) {\n if (currTickable.getTuplet() && !alignTuplets) {\n return;\n }\n // If activated rests not on default can be rendered as specified.\n const position = currTickable.getGlyphProps().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') {\n return;\n }\n if (alignAllNotes || currTickable.getBeam()) {\n // Align rests with previous/next notes.\n const props = currTickable.getKeyProps()[0];\n if (index === 0) {\n props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false);\n }\n else if (index > 0 && index < tickables.length) {\n // If previous tickable is a rest, use its line number.\n const prevTickable = tickables[index - 1];\n if (isStaveNote(prevTickable)) {\n if (prevTickable.isRest()) {\n props.line = prevTickable.getKeyProps()[0].line;\n }\n else {\n const restLine = prevTickable.getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true);\n }\n }\n }\n currTickable.setKeyLine(0, props.line);\n }\n }\n });\n }\n constructor(options) {\n this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options);\n this.justifyWidth = 0;\n this.totalCost = 0;\n this.totalShift = 0;\n this.durationStats = {};\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n // Arrays of tick and modifier contexts.\n this.tickContexts = {\n map: {},\n array: [],\n list: [],\n resolutionMultiplier: 0,\n };\n this.modifierContexts = [];\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n this.voices = [];\n this.lossHistory = [];\n }\n /**\n * Find all the rests in each of the `voices` and align them to neighboring notes.\n *\n * @param voices\n * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests.\n */\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format rests');\n }\n voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n /**\n * Estimate the width required to render 'voices'. This is done by:\n * 1. Sum the widths of all the tick contexts\n * 2. Estimate the padding.\n * The latter is done by calculating the padding 3 different ways, and taking the\n * greatest value:\n * 1. the padding required for unaligned notes in different voices\n * 2. the padding based on the stddev of the tickable widths\n * 3. the padding based on the stddev of the tickable durations.\n *\n * The last 2 quantities estimate a 'width entropy', where notes might need more\n * room than the proportional formatting gives them. A measure of all same duration\n * and width will need no extra padding, and all these quantities will be\n * zero in that case.\n *\n * Note: joinVoices has to be called before calling preCalculateMinTotalWidth.\n *\n * @param voices the voices that contain the notes\n * @returns the estimated width in pixels\n */\n preCalculateMinTotalWidth(voices) {\n const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding');\n // Calculate additional padding based on 3 methods:\n // 1) unaligned beats in voices, 2) variance of width, 3) variance of durations\n let unalignedCtxCount = 0;\n let wsum = 0;\n let dsum = 0;\n const widths = [];\n const durations = [];\n // Cache results.\n if (this.hasMinTotalWidth)\n return this.minTotalWidth;\n // Create tick contexts.\n if (!voices) {\n throw new RuntimeError('BadArgument', \"'voices' required to run preCalculateMinTotalWidth\");\n }\n this.createTickContexts(voices);\n // eslint-disable-next-line\n const { list: contextList, map: contextMap } = this.tickContexts;\n this.minTotalWidth = 0;\n // Go through each tick context and calculate total width,\n // and also accumulate values used in padding hints\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n context.preFormat();\n // If this TC doesn't have all the voices on it, it's unaligned.\n // so increment the unaligned padding accumulator\n if (context.getTickables().length < voices.length) {\n unalignedCtxCount += 1;\n }\n // Calculate the 'width entropy' over all the Tickables.\n context.getTickables().forEach((t) => {\n wsum += t.getMetrics().width;\n dsum += t.getTicks().value();\n widths.push(t.getMetrics().width);\n durations.push(t.getTicks().value());\n });\n const width = context.getWidth();\n this.minTotalWidth += width;\n });\n this.hasMinTotalWidth = true;\n // normalized (0-1) STDDEV of widths/durations gives us padding hints.\n const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length;\n const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2)));\n const wpads = Math.pow(wvar / widths.length, 0.5) / wavg;\n const davg = dsum / durations.length;\n const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2)));\n const dpads = Math.pow(dvar / durations.length, 0.5) / davg;\n // Find max of 3 methods pad the width with that\n const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding;\n const unalignedPad = unalignedPadding * unalignedCtxCount;\n return this.minTotalWidth + Math.max(unalignedPad, padmax);\n }\n /**\n * Get minimum width required to render all voices. Either `format` or\n * `preCalculateMinTotalWidth` must be called before this method.\n */\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new RuntimeError('NoMinTotalWidth', \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\");\n }\n return this.minTotalWidth;\n }\n /** Calculate the resolution multiplier for `voices`. */\n static getResolutionMultiplier(voices) {\n if (!voices || !voices.length) {\n throw new RuntimeError('BadArgument', 'No voices to format');\n }\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((accumulator, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.');\n }\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.');\n }\n return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier()));\n }, 1);\n return resolutionMultiplier;\n }\n /** Create a `ModifierContext` for each tick in `voices`. */\n createModifierContexts(voices) {\n if (voices.length == 0)\n return;\n const resolutionMultiplier = Formatter.getResolutionMultiplier(voices);\n // Initialize tick maps.\n const tickToContextMap = new Map();\n const contexts = [];\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice) => {\n // Use resolution multiplier as denominator so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n voice.getTickables().forEach((tickable) => {\n const integerTicks = ticksUsed.numerator;\n let staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n // If we have no tick context for this tick, create one.\n if (!staveTickToContextMap) {\n tickToContextMap.set(tickable.getStave(), {});\n staveTickToContextMap = tickToContextMap.get(tickable.getStave());\n }\n if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) {\n const newContext = new ModifierContext();\n contexts.push(newContext);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n staveTickToContextMap[integerTicks] = newContext;\n }\n // Add this tickable to the TickContext.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tickable.addToModifierContext(staveTickToContextMap[integerTicks]);\n ticksUsed.add(tickable.getTicks());\n });\n });\n this.modifierContexts.push({\n map: tickToContextMap,\n array: contexts,\n resolutionMultiplier,\n });\n }\n /**\n * Create a `TickContext` for each tick in `voices`. Also calculate the\n * total number of ticks in voices.\n */\n createTickContexts(voices) {\n const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex);\n const contexts = createContexts(voices, (tick) => new TickContext(tick), fn);\n this.tickContexts = contexts;\n const contextArray = this.tickContexts.array;\n contextArray.forEach((context) => {\n context.tContexts = contextArray;\n });\n return contexts;\n }\n /**\n * Get the AlignmentContexts of TickContexts that were created by createTickContexts.\n * Returns undefined if createTickContexts has not yet been run.\n */\n getTickContexts() {\n return this.tickContexts;\n }\n /**\n * This is the core formatter logic. Format voices and justify them\n * to `justifyWidth` pixels. `renderingContext` is required to justify elements\n * that can't retrieve widths without a canvas. This method sets the `x` positions\n * of all the tickables/notes in the formatter.\n */\n preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n if (!contexts) {\n throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts');\n }\n const { list: contextList, map: contextMap } = contexts;\n // Reset loss history for evaluator.\n this.lossHistory = [];\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voicesParam && stave) {\n voicesParam.forEach((voice) => voice.setStave(stave).preFormat());\n }\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n let totalTicks = 0;\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n const width = context.getWidth();\n this.minTotalWidth += width;\n const maxTicks = context.getMaxTicks().value();\n totalTicks += maxTicks;\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n // Use softmax based on all notes across all staves. (options.globalSoftmax)\n const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions;\n const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks));\n const expTicksUsed = sumArray(contextList.map(exp));\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n // No justification needed. End formatting.\n if (justifyWidth <= 0)\n return this.evaluate();\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n const distances = contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach((v) => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n matchingVoices.forEach((v) => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() -\n (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n // Don't shift further left than the notehead of the last context. Actually, stay at most 5% to the right\n // so that two different tick contexts don't align across staves.\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05));\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n if (globalSoftmax) {\n const t = totalTicks;\n expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth;\n }\n else if (typeof backTickable !== 'undefined') {\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n }\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n return distances;\n }\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const contextX = context.getX();\n const ideal = idealDistances[index];\n const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum);\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n }\n else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx));\n spaceAccum += -negativeShiftPx;\n }\n context.setX(contextX + spaceAccum);\n }\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach((tickable) => {\n tickable.setCenterXShift(centerX - context.getX());\n });\n });\n return lastContext.getX() - firstContext.getX();\n }\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n const musicFont = Tables.currentMusicFont();\n const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin');\n const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax');\n const leftPadding = musicFont.lookupMetric('stave.padding');\n let targetWidth = adjustedJustifyWidth;\n const distances = calculateIdealDistances(targetWidth);\n let actualWidth = shiftToIdealDistances(distances);\n // Just one context. Done formatting.\n if (contextList.length === 1)\n return 0;\n const calcMinDistance = (targetWidth, distances) => {\n let mdCalc = targetWidth / 2;\n if (distances.length > 1) {\n for (let di = 1; di < distances.length; ++di) {\n mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc);\n }\n }\n return mdCalc;\n };\n const minDistance = calcMinDistance(targetWidth, distances);\n // right justify to either the configured padding, or the min distance between notes, whichever is greatest.\n // This * 2 keeps the existing formatting unless there is 'a lot' of extra whitespace, which won't break\n // existing visual regression tests.\n const paddingMaxCalc = (curTargetWidth) => {\n let lastTickablePadding = 0;\n const lastTickable = lastContext && lastContext.getMaxTickable();\n if (lastTickable) {\n const voice = lastTickable.getVoice();\n // If the number of actual ticks in the measure <> configured ticks, right-justify\n // because the softmax won't yield the correct value\n if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) {\n return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding;\n }\n const tickWidth = lastTickable.getWidth();\n lastTickablePadding =\n voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding);\n }\n return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding;\n };\n let paddingMax = paddingMaxCalc(targetWidth);\n let paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n const maxX = adjustedJustifyWidth - paddingMin;\n let iterations = maxIterations;\n // Adjust justification width until the right margin is as close as possible to the calculated padding,\n // without going over\n while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) {\n targetWidth -= actualWidth - maxX;\n paddingMax = paddingMaxCalc(targetWidth);\n paddingMin = paddingMax - (configMaxPadding - configMinPadding);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n /** Calculate the total cost of this formatting decision. */\n evaluate() {\n const contexts = this.tickContexts;\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n contexts.list.forEach((tick, index) => {\n if (index === 0)\n return;\n const prevTick = contexts.list[index - 1];\n const prevContext = contexts.map[prevTick];\n const context = contexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - currMetrics.totalLeftPx;\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n this.durationStats = {};\n const durationStats = this.durationStats;\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n }\n else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx;\n let space = 0;\n if (i < notes.length - 1) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx;\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n }\n else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach((voice) => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n /**\n * Run a single iteration of rejustification. At a high level, this method calculates\n * the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n * attempt to reduce the cost. You can call this method multiple times until it finds\n * and oscillates around a global minimum.\n * @param options[alpha] the \"learning rate\" for the formatter. It determines how much of a shift\n * the formatter should make based on its cost function.\n */\n tune(options) {\n var _a;\n const contexts = this.tickContexts;\n if (!contexts) {\n return 0;\n }\n const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5;\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, shift, prev, next) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n if (prev)\n prev.getFormatterMetrics().freedom.right += shift;\n if (next)\n next.getFormatterMetrics().freedom.left -= shift;\n }\n let shift = 0;\n this.totalShift = 0;\n contexts.list.forEach((tick, index, list) => {\n const context = contexts.map[tick];\n const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined;\n const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined;\n move(context, shift, prevContext, nextContext);\n const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation));\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n }\n else {\n shift = 0;\n }\n }\n shift *= alpha;\n this.totalShift += shift;\n });\n return this.evaluate();\n }\n /**\n * This is the top-level call for all formatting logic completed\n * after `x` *and* `y` values have been computed for the notes\n * in the voices.\n */\n postFormat() {\n this.modifierContexts.forEach((modifierContexts) => {\n modifierContexts.array.forEach((mc) => mc.postFormat());\n });\n this.tickContexts.list.forEach((tick) => {\n this.tickContexts.map[tick].postFormat();\n });\n return this;\n }\n /**\n * Take all `voices` and create `ModifierContext`s out of them. This tells\n * the formatters that the voices belong on a single stave.\n */\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n /**\n * Align rests in voices, justify the contexts, and position the notes\n * so voices are aligned and ready to render onto the stave. This method\n * mutates the `x` positions of all tickables in `voices`.\n *\n * Voices are full justified to fit in `justifyWidth` pixels.\n *\n * Set `options.context` to the rendering context. Set `options.align_rests`\n * to true to enable rest alignment.\n */\n format(voices, justifyWidth, options) {\n const opts = Object.assign({ align_rests: false }, options);\n this.voices = voices;\n const softmaxFactor = this.formatterOptions.softmaxFactor;\n if (softmaxFactor) {\n this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor));\n }\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave)\n this.postFormat();\n return this;\n }\n // This method is just like `format` except that the `justifyWidth` is inferred from the `stave`.\n formatToStave(voices, stave, optionsParam) {\n const options = Object.assign({ context: stave.getContext() }, optionsParam);\n // eslint-disable-next-line\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, options);\n }\n getTickContext(tick) {\n var _a;\n return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick];\n }\n}\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nFormatter.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { defined, RuntimeError } from './util';\nexport var TupletLocation;\n(function (TupletLocation) {\n TupletLocation[TupletLocation[\"BOTTOM\"] = -1] = \"BOTTOM\";\n TupletLocation[TupletLocation[\"TOP\"] = 1] = \"TOP\";\n})(TupletLocation || (TupletLocation = {}));\nexport class Tuplet extends Element {\n static get CATEGORY() {\n return Category.Tuplet;\n }\n static get LOCATION_TOP() {\n return TupletLocation.TOP;\n }\n static get LOCATION_BOTTOM() {\n return TupletLocation.BOTTOM;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n static get metrics() {\n const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet;\n if (!tupletMetrics)\n throw new RuntimeError('BadMetrics', `tuplet missing`);\n return tupletMetrics;\n }\n constructor(notes, options = {}) {\n super();\n this.numerator_glyphs = [];\n this.denom_glyphs = [];\n if (!notes || !notes.length) {\n throw new RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n this.options = options;\n this.notes = notes;\n this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length;\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2;\n if (this.options.bracketed != undefined) {\n this.bracketed = this.options.bracketed;\n }\n else {\n this.bracketed = notes.some((note) => !note.hasBeam());\n }\n this.ratioed =\n this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1;\n this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP);\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n /**\n * Set the tuplet indicator to be displayed either on the top or bottom of the stave.\n */\n setTupletLocation(location) {\n if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n // eslint-disable-next-line\n console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`);\n location = Tuplet.LOCATION_TOP;\n }\n this.location = location;\n return this;\n }\n getNotes() {\n return this.notes;\n }\n getNoteCount() {\n return this.num_notes;\n }\n beatsOccupiedDeprecationWarning() {\n // eslint-disable-next-line\n console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.');\n }\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n getNotesOccupied() {\n return this.notes_occupied;\n }\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt((n / 10).toString(), 10);\n }\n }\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.getTupletStack().filter((tuplet) => tuplet.location === location).length;\n }\n this.notes.forEach((note) => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n return maxTupletCount - minTupletCount;\n }\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location;\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset;\n // check modifiers above note to see if they will collide with tuplet beam\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n let modLines = 0;\n const mc = note.getModifierContext();\n if (mc) {\n modLines = Math.max(modLines, mc.getState().top_text_line);\n }\n const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset;\n if (note.hasStem() || note.isRest()) {\n const top_y = note.getStemDirection() === Stem.UP\n ? note.getStemExtents().topY - Tuplet.metrics.stemOffset\n : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset;\n y_pos = Math.min(top_y, y_pos);\n if (modLines > 0) {\n y_pos = Math.min(modY, y_pos);\n }\n }\n }\n }\n else {\n let lineCheck = Tuplet.metrics.bottomLine; // tuplet default on line 4\n // check modifiers below note to see if they will collide with tuplet beam\n this.notes.forEach((nn) => {\n const mc = nn.getModifierContext();\n if (mc) {\n lineCheck = Math.max(lineCheck, mc.getState().text_line + 1);\n }\n });\n y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset;\n for (let i = 0; i < this.notes.length; ++i) {\n if (this.notes[i].hasStem() || this.notes[i].isRest()) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset\n : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n }\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n }\n else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width);\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n const notation_center_x = this.x_pos + this.width / 2;\n const notation_start_x = notation_center_x - width / 2;\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n ctx.fillRect(this.x_pos, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);\n ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10);\n }\n }\n // draw numerator glyphs\n const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0);\n let x_offset = 0;\n this.numerator_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n ctx.beginPath();\n ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach((glyph) => {\n glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY);\n x_offset += defined(glyph.getMetrics().width);\n });\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { TupletLocation } from './tuplet';\nimport { Category, isStaveNote, isTabNote } from './typeguard';\nimport { RuntimeError } from './util';\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach((note) => {\n if (note.keyProps) {\n note.keyProps.forEach((keyProp) => {\n lineSum += keyProp.line - 3;\n });\n }\n });\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\nfunction getStemSlope(firstNote, lastNote) {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n}\nexport const BEAM_LEFT = 'L';\nexport const BEAM_RIGHT = 'R';\nexport const BEAM_BOTH = 'B';\n/** `Beams` span over a set of `StemmableNotes`. */\nexport class Beam extends Element {\n static get CATEGORY() {\n return Category.Beam;\n }\n /** Get the direction of the beam */\n getStemDirection() {\n return this.stem_direction;\n }\n /**\n * Get the default beam groups for a provided time signature.\n * Attempt to guess if the time signature is not found in table.\n * Currently this is fairly naive.\n */\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n const groups = defaults[time_sig];\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n const tripleMeter = beatTotal % 3 === 0;\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n }\n else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n }\n else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n }\n else {\n return groups.map((group) => new Fraction().parse(group));\n }\n return [new Fraction(1, 4)];\n }\n /**\n * A helper function to automatically build basic beams for a voice. For more\n * complex auto-beaming use `Beam.generateBeams()`.\n * @param voice the voice to generate the beams for\n * @param stem_direction a stem direction to apply to the entire voice\n * @param groups an array of `Fraction` representing beat groupings for the beam\n */\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), { groups, stem_direction });\n }\n /**\n * A helper function to autimatically build beams for a voice with\n * configuration options.\n *\n * Example configuration object:\n *\n * ```\n * config = {\n * groups: [new Vex.Flow.Fraction(2, 8)],\n * stem_direction: -1,\n * beam_rests: true,\n * beam_middle_only: true,\n * show_stemlets: false\n * };\n * ```\n * @param notes an array of notes to create the beams for\n * @param config the configuration object\n * @param config.stem_direction set to apply the same direction to all notes\n * @param config.beam_rests set to `true` to include rests in the beams\n * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat\n * @param config.show_stemlets set to `true` to draw stemlets for rests\n * @param config.maintain_stem_directions set to `true` to not apply new stem directions\n * @param config.groups array of `Fractions` that represent the beat structure to beam the notes\n *\n */\n static generateBeams(notes, config = {}) {\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map((group) => {\n if (!group.multiply) {\n throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Tables.RESOLUTION, 1);\n });\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n }\n else {\n currentTickGroup = 0;\n }\n }\n function createGroups() {\n let nextGroup = [];\n // number of ticks in current group\n let currentGroupTotalTicks = new Fraction(0, 1);\n unprocessedNotes.forEach((unprocessedNote) => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks);\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8;\n if (unbeamable && unprocessedNote.getTuplet()) {\n ticksPerGroup.numerator *= 2;\n }\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n const note = currentGroup.pop();\n if (note)\n nextGroup.push(note);\n }\n noteGroups.push(currentGroup);\n // We have overflown, so we're going to next tick group. As we might have\n // overflown by more than 1 group, we need to go forward as many times as\n // needed, decreasing currentGroupTotalTicks by as many ticks as there are\n // in current groups as we go forward.\n do {\n currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]);\n nextTickGroup();\n } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup]));\n currentGroup = nextGroup;\n }\n else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroupTotalTicks = new Fraction(0, 1);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n // Adds any remainder notes beam\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n function getBeamGroups() {\n return noteGroups.filter((group) => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach((note) => {\n if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach((group) => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8;\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration;\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n }\n else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n noteGroups = sanitizedGroups;\n }\n function formatStems() {\n noteGroups.forEach((group) => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n }\n else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n }\n else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n return false;\n }\n function applyStemDirection(group, direction) {\n group.forEach((note) => {\n note.setStemDirection(direction);\n });\n }\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach((group) => {\n let tuplet;\n group.forEach((note) => {\n const noteTuplet = note.getTuplet();\n if (noteTuplet && tuplet !== noteTuplet) {\n tuplet = noteTuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach((group) => {\n const beam = new Beam(group);\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n // Reformat tuplets\n allTuplets.forEach((tuplet) => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? TupletLocation.BOTTOM : TupletLocation.TOP;\n tuplet.setTupletLocation(direction);\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (!note.hasBeam()) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n return beams;\n }\n constructor(notes, auto_stem = false) {\n super();\n this.slope = 0;\n this.y_shift = 0;\n /**\n * Overrides to default beam directions for secondary-level beams that do not\n * connect to any other note. See further explanation at\n * `setPartialBeamSideAt`\n */\n this.forcedPartialDirections = {};\n if (!notes || notes.length === 0) {\n throw new RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n if (notes.length === 1) {\n throw new RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n if (this.ticks >= Tables.durationToTicks('4')) {\n throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');\n }\n let i; // shared iterator\n let note;\n this.stem_direction = notes[0].getStemDirection();\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && isStaveNote(notes[0])) {\n stem_direction = calculateStemDirection(notes);\n }\n else if (auto_stem && isTabNote(notes[0])) {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0);\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n /** Get the notes in this beam. */\n getNotes() {\n return this.notes;\n }\n /** Get the max number of beams in the set of notes. */\n getBeamCount() {\n const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count);\n const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max));\n return maxBeamCount;\n }\n /** Set which note `indices` to break the secondary beam at. */\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n /**\n * Forces the direction of a partial beam (a secondary-level beam that exists\n * on one note only of the beam group). This is useful in rhythms such as 6/8\n * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the\n * first sixteenth note can help imply whether the rhythm is to be felt as\n * three groups of eighth notes (typical) or as two groups of three-sixteenths\n * (less common):\n * ```\n * ┌───┬──┬──┐ ┌──┬──┬──┐\n * │ ├─ │ ─┤ vs │ ─┤ │ ─┤\n * │ │ │ │ │ │ │ │\n * ```\n */\n setPartialBeamSideAt(noteIndex, side) {\n this.forcedPartialDirections[noteIndex] = side;\n return this;\n }\n /**\n * Restore the default direction of a partial beam (a secondary-level beam\n * that does not connect to any other notes).\n */\n unsetPartialBeamSideAt(noteIndex) {\n delete this.forcedPartialDirections[noteIndex];\n return this;\n }\n /** Return the y coordinate for linear function. */\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + (x - first_x_px) * slope;\n }\n /** Calculate the best possible slope for the provided notes. */\n calculateSlope() {\n const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this;\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n if (note.hasStem() || note.isRest()) {\n const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n }\n else {\n // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n }\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n /** Calculate a slope and y-shift for flat beams. */\n calculateFlatSlope() {\n const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this;\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;\n const newOffset = extremeY + extremeTest * -stem_direction;\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n }\n else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n /** Return the Beam y offset. */\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n /**\n * Create new stems for the notes in the beam, so that each stem\n * extends into the beams.\n */\n applyStemExtensions() {\n const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this;\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stem = note.getStem();\n if (stem) {\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = stem.getExtension();\n const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;\n // Determine necessary extension for cross-stave notes in the beam group\n let crossStemExtension = 0;\n if (note.getStemDirection() !== this.stem_direction) {\n const beamCount = note.getGlyphProps().beam_count;\n crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width;\n /* This will be required if the partial beams are moved to the note side.\n if (i > 0 && note.getGlyph().beam_count > 1) {\n const prevBeamCount = this.notes[i - 1].getGlyph().beam_count;\n const beamDiff = Math.abs(prevBeamCount - beamCount);\n if (beamDiff > 0) crossStemExtension -= beamDiff * (this.render_options.beam_width * 1.5);\n }\n */\n }\n stem.setExtension(preBeamExtension + beamExtension + crossStemExtension);\n stem.adjustHeightForBeam();\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;\n stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n }\n /** Return upper level beam direction. */\n lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n const forcedBeamDirection = this.forcedPartialDirections[noteIndex];\n if (forcedBeamDirection)\n return forcedBeamDirection;\n const lookup_duration = `${Tables.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Tables.durationToTicks(lookup_duration);\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n }\n else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n }\n else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex);\n }\n /** Get the x coordinates for the beam lines of specific `duration`. */\n getBeamLines(duration) {\n const tick_of_duration = Tables.durationToTicks(duration);\n let beam_started = false;\n const beam_lines = [];\n let current_beam = undefined;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n // See if we need to break secondary beams on this note.\n const ticks = note.getTicks().value();\n tick_tally += ticks;\n let should_break = false;\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n const stem_x = note.getStemX() - Stem.WIDTH / 2;\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === undefined) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n }\n else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: undefined };\n beam_started = true;\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i);\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n }\n else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n }\n else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n }\n else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n }\n else {\n // The current note does not get a beam.\n beam_started = false;\n }\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === undefined) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n /** Render the stems for each note. */\n drawStems(ctx) {\n this.notes.forEach((note) => {\n const stem = note.getStem();\n if (stem) {\n const stem_x = note.getStemX();\n stem.setNoteHeadXBounds(stem_x, stem_x);\n stem.setContext(ctx).draw();\n }\n }, this);\n }\n // Render the beam lines\n drawBeamLines(ctx) {\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n if (lastBeamX) {\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n ctx.beginPath();\n ctx.moveTo(startBeamX, startBeamY);\n ctx.lineTo(startBeamX, startBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n ctx.lineTo(lastBeamX + 1, lastBeamY);\n ctx.closePath();\n ctx.fill();\n }\n else {\n throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.');\n }\n }\n beamY += beamThickness * 1.5;\n }\n }\n /** Pre-format the beam. */\n preFormat() {\n return this;\n }\n /**\n * Post-format the beam. This can only be called after\n * the notes in the beam have both `x` and `y` values. ie: they've\n * been formatted and have staves.\n */\n postFormat() {\n if (this.postFormatted)\n return;\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (isTabNote(this.notes[0]) || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n }\n else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n this.postFormatted = true;\n }\n /** Render the beam to the canvas context */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n if (this.unbeamable)\n return;\n if (!this.postFormatted) {\n this.postFormat();\n }\n this.drawStems(ctx);\n this.applyStyle();\n ctx.openGroup('beam', this.getAttribute('id'));\n this.drawBeamLines(ctx);\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n// MIT License\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\n/** ClefNote implements clef annotations in measures. */\nexport class ClefNote extends Note {\n static get CATEGORY() {\n return Category.ClefNote;\n }\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.type = type;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.size = size === undefined ? 'default' : size;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n // Note properties\n this.ignore_ticks = true;\n }\n /** Set clef type, size and annotation. */\n setType(type, size, annotation) {\n this.type = type;\n this.size = size;\n const clef = new Clef(type, size, annotation);\n this.clef = clef.clef;\n this.annotation = clef.annotation;\n this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`));\n return this;\n }\n /** Get associated clef. */\n getClef() {\n return this.clef;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n /** Render clef note. */\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, {\n category: `clefNote_${this.size}`,\n });\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.annotation !== undefined) {\n const attachment = new Glyph(this.annotation.code, this.annotation.point);\n attachment.setContext(ctx);\n attachment.setStave(stave);\n attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs());\n attachment.setXShift(this.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\nimport { Category } from './typeguard';\nimport { log } from './util';\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Crescendo.DEBUG)\n log('Vex.Flow.Crescendo', args);\n}\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n ctx.beginPath();\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n }\n else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n ctx.stroke();\n ctx.closePath();\n}\nexport class Crescendo extends Note {\n /** Crescendo category string. */\n static get CATEGORY() {\n return Category.Crescendo;\n }\n // Initialize the crescendo's properties\n constructor(noteStruct) {\n super(noteStruct);\n this.options = {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n };\n // Whether the object is a decrescendo\n this.decrescendo = false;\n // The staff line to be placed on\n this.line = noteStruct.line || 0;\n // The height at the open end of the cresc/decresc\n this.height = 15;\n }\n // Set the line to center the element on\n setLine(line) {\n this.line = line;\n return this;\n }\n // Set the full height at the open end\n setHeight(height) {\n this.height = height;\n return this;\n }\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n // Preformat the note\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n // Render the Crescendo object onto the canvas\n draw() {\n const ctx = this.checkContext();\n const stave = this.checkStave();\n this.setRendered();\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth();\n const y = stave.getYForLine(this.line + -3) + 1;\n L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);\n renderHairpin(ctx, {\n begin_x: begin_x - this.options.extend_left,\n end_x: end_x + this.options.extend_right,\n y: y + this.options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\nCrescendo.DEBUG = false;\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport var CurvePosition;\n(function (CurvePosition) {\n CurvePosition[CurvePosition[\"NEAR_HEAD\"] = 1] = \"NEAR_HEAD\";\n CurvePosition[CurvePosition[\"NEAR_TOP\"] = 2] = \"NEAR_TOP\";\n})(CurvePosition || (CurvePosition = {}));\nexport class Curve extends Element {\n static get CATEGORY() {\n return Category.Curve;\n }\n static get Position() {\n return CurvePosition;\n }\n static get PositionString() {\n return {\n nearHead: CurvePosition.NEAR_HEAD,\n nearTop: CurvePosition.NEAR_TOP,\n };\n }\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [\n { x: 0, y: 10 },\n { x: 0, y: 10 },\n ] }, options);\n this.from = from;\n this.to = to;\n }\n setNotes(from, to) {\n if (!from && !to) {\n throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.');\n }\n this.from = from;\n this.to = to;\n return this;\n }\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return !this.from || !this.to;\n }\n renderCurve(params) {\n const ctx = this.checkContext();\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n const cps = this.render_options.cps;\n const { x: cp0x, y: cp0y } = cps[0];\n const { x: cp1x, y: cp1y } = cps[1];\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y);\n ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y);\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction = 0;\n let metric = 'baseY';\n let end_metric = 'baseY';\n function getPosition(position) {\n return typeof position === 'string' ? Curve.PositionString[position] : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n if (position === CurvePosition.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n if (position_end === CurvePosition.NEAR_HEAD) {\n end_metric = 'baseY';\n }\n else if (position_end === CurvePosition.NEAR_TOP) {\n end_metric = 'topY';\n }\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n }\n else {\n const stave = last_note.checkStave();\n first_x = stave.getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n }\n else {\n const stave = first_note.checkStave();\n last_x = stave.getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (Parser.DEBUG)\n log('Vex.Flow.Parser', args);\n}\nconst NO_ERROR_POS = -1;\n// Converts parser results into an easy to reference list that can be\n// used in triggers. This function returns:\n// - nested array in which the leaf elements are string or null\n// - string (including empty strings)\n// - null\nfunction flattenMatches(r) {\n if ('matchedString' in r)\n return r.matchedString; // string\n if ('results' in r)\n return flattenMatches(r.results);\n const results = r;\n if (results.length === 1)\n return flattenMatches(results[0]);\n if (results.length === 0)\n return null;\n return results.map(flattenMatches); // nested array\n}\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.ts or\n // the EasyScore grammar in easyscore.ts.\n constructor(grammar) {\n this.grammar = grammar;\n this.line = '';\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n }\n // Parse `line` using current grammar. Returns `{success: true}` if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = NO_ERROR_POS;\n const result = this.expect(this.grammar.begin());\n result.errorPos = this.errorPos;\n return result;\n }\n matchFail(returnPos) {\n if (this.errorPos === NO_ERROR_POS)\n this.errorPos = this.pos;\n this.pos = returnPos;\n }\n matchSuccess() {\n this.errorPos = NO_ERROR_POS;\n }\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n }\n else {\n return { success: false, pos: this.pos };\n }\n }\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n // TODO: expectOne(...) is never called with the `maybe` parameter.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let allMatches = true;\n let oneMatch = false;\n maybe = maybe === true || rule.maybe === true;\n // Execute all sub rules in sequence.\n if (rule.expect) {\n for (const next of rule.expect) {\n const localPos = this.pos;\n const result = this.expect(next);\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or)\n break;\n }\n else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n }\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || maybe === true;\n const numMatches = gotOne ? 1 : 0;\n if (maybe && !gotOne)\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n do {\n const result = this.expectOne(rule);\n if (result.success && result.results) {\n numMatches++;\n results.push(result.results);\n }\n else {\n more = false;\n }\n } while (more);\n const success = numMatches > 0 || maybe === true;\n if (maybe && !(numMatches > 0))\n this.pos = pos;\n if (success) {\n this.matchSuccess();\n }\n else {\n this.matchFail(pos);\n }\n return { success, results, numMatches };\n }\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n // Execute the rule produced by the provided `rules` function. This\n // offloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(ruleFunc) {\n L('Evaluating rule function:', ruleFunc);\n if (!ruleFunc) {\n throw new RuntimeError('Invalid rule function');\n }\n let result;\n // Get rule from Grammar class.\n // expect(...) handles both lexing & parsing:\n // - lexer rules produce tokens.\n // - parser rules produce expressions which may trigger code via the\n // { run: () => ... } trigger functions in easyscore.ts.\n // These functions build the VexFlow objects that are displayed on screen.\n const rule = ruleFunc.bind(this.grammar)();\n if (rule.token) {\n // A lexer rule has a `token` property.\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, rule.noSpace === true);\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n }\n else if (rule.expect) {\n // A parser rule has an `expect` property.\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n }\n else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n }\n else {\n result = this.expectOne(rule);\n }\n }\n else {\n L(rule);\n throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule);\n }\n // If there's a trigger attached to this rule, then run it.\n // Make the matches accessible through `state.matches` in the\n // `run: (state) => ...` trigger.\n const matches = [];\n result.matches = matches;\n if (result.results) {\n result.results.forEach((r) => matches.push(flattenMatches(r)));\n }\n if (rule.run && result.success) {\n rule.run({ matches });\n }\n return result;\n }\n}\nParser.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Articulation } from './articulation';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Music } from './music';\nimport { Parser } from './parser';\nimport { Stem } from './stem';\nimport { defined, log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (EasyScore.DEBUG)\n log('Vex.Flow.EasyScore', args);\n}\nexport class EasyScoreGrammar {\n constructor(builder) {\n this.builder = builder;\n }\n begin() {\n return this.LINE;\n }\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n // eslint-disable-next-line\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) => {\n // eslint-disable-next-line\n const s = state;\n this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]);\n },\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.MICROTONES, this.ACCIDENTALS],\n maybe: true,\n or: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDots(state.matches),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n // eslint-disable-next-line\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n // eslint-disable-next-line\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n KEY() {\n return { token: '[a-zA-Z][a-zA-Z0-9]*' };\n }\n DVAL() {\n return { token: '[\"][^\"]*[\"]' };\n }\n SVAL() {\n return { token: \"['][^']*[']\" };\n }\n NOTENAME() {\n return { token: '[a-gA-G]' };\n }\n OCTAVE() {\n return { token: '[0-9]+' };\n }\n ACCIDENTALS() {\n return { token: 'bb|b|##|#|n' };\n }\n MICROTONES() {\n return { token: 'bbs|bss|bs|db|d|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' };\n }\n DURATIONS() {\n return { token: '[0-9whq]+' };\n }\n TYPES() {\n return { token: '[rRsSmMhHgG]' };\n }\n LPAREN() {\n return { token: '[(]' };\n }\n RPAREN() {\n return { token: '[)]' };\n }\n COMMA() {\n return { token: '[,]' };\n }\n DOT() {\n return { token: '[.]' };\n }\n SLASH() {\n return { token: '[/]' };\n }\n MAYBESLASH() {\n return { token: '[/]?' };\n }\n EQUALS() {\n return { token: '[=]' };\n }\n LBRACKET() {\n return { token: '\\\\[' };\n }\n RBRACKET() {\n return { token: '\\\\]' };\n }\n EOL() {\n return { token: '$' };\n }\n}\nexport class Piece {\n constructor(duration) {\n this.chord = [];\n this.dots = 0;\n this.options = {};\n this.duration = duration;\n }\n}\nexport class Builder {\n constructor(factory) {\n this.commitHooks = [];\n this.factory = factory;\n this.reset();\n }\n reset(options) {\n this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options);\n this.elements = { notes: [], accidentals: [] };\n this.rollingDuration = '8';\n this.resetPiece();\n }\n getFactory() {\n return this.factory;\n }\n getElements() {\n return this.elements;\n }\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n resetPiece() {\n L('resetPiece');\n this.piece = new Piece(this.rollingDuration);\n }\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots)\n this.piece.dots = dots.length;\n }\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n setNoteType(type) {\n L('setNoteType:', type);\n if (type)\n this.piece.type = type;\n }\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({\n key: key,\n accid,\n octave,\n });\n }\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n // notes is an array with 3 entries\n addChord(notes) {\n L('startChord');\n if (typeof notes[0] !== 'object') {\n this.addSingleNote(notes[0]);\n }\n else {\n notes.forEach((n) => {\n if (n)\n this.addNote(...n); // n => [string, string | null, string]\n });\n }\n L('endChord');\n }\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n if (!factory)\n return;\n const options = Object.assign(Object.assign({}, this.options), this.piece.options);\n // reset() sets this.options.stem & this.options.clef but we check to make sure nothing has changed.\n // e.g., auto | up | down\n const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase();\n // e.g., treble | bass\n const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase();\n const { chord, duration, dots, type } = this.piece;\n // Create a string[] that will be assigned to the .keys property of the StaveNote.\n // Each string in the array represents a note pitch and is of the form: {NoteName}{Accidental}/{Octave}\n // Only standard accidentals are included in the .keys property. Microtonal accidentals are not included.\n const standardAccidentals = Music.accidentals;\n const keys = chord.map((notePiece) => {\n var _a;\n return notePiece.key +\n (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') +\n '/' +\n notePiece.octave;\n });\n const auto_stem = stem === 'auto'; // StaveNoteStruct expects the underscore & lowercase.\n // Build a GhostNote or StaveNote using the information we gathered.\n const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g'\n ? factory.GhostNote({ duration, dots })\n : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem });\n if (!auto_stem)\n note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN);\n // Attach accidentals.\n const accidentals = [];\n chord.forEach((notePiece, index) => {\n const accid = notePiece.accid;\n if (typeof accid === 'string') {\n const accidental = factory.Accidental({ type: accid });\n note.addModifier(accidental, index);\n accidentals.push(accidental);\n }\n else {\n accidentals.push(undefined);\n }\n });\n // Attach dots.\n for (let i = 0; i < dots; i++)\n Dot.buildAndAttach([note], { all: true });\n this.commitHooks.forEach((commitHook) => commitHook(options, note, this));\n this.elements.notes.push(note);\n this.elements.accidentals.push(accidentals);\n this.resetPiece();\n }\n}\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setId(options, note) {\n if (options.id === undefined)\n return;\n note.setAttribute('id', options.id);\n}\n// Used by setClass() below.\nconst commaSeparatedRegex = /\\s*,\\s*/;\n/**\n * Commit hook used by EasyScore.setOptions().\n */\nfunction setClass(options, note) {\n if (options.class === undefined)\n return;\n options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className));\n}\n/**\n * EasyScore implements a parser for a simple language to generate VexFlow objects.\n */\nexport class EasyScore {\n constructor(options = {}) {\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n this.setOptions(options);\n }\n /**\n * Set the score defaults.\n * clef must be set appropriately to avoid errors when adding Staves.\n * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types}\n * @param defaults.time default time signature ( 4/4 | 9/8 ...)\n * @param defaults.stem default stem arrangement (auto | up | down)\n * @returns this\n */\n set(defaults) {\n this.defaults = Object.assign(Object.assign({}, this.defaults), defaults);\n return this;\n }\n /**\n * @param options.factory is required.\n * @returns this\n */\n setOptions(options) {\n var _a, _b;\n // eslint-disable-next-line\n const factory = options.factory; // ! operator, because options.factory was set in Factory.EasyScore().\n const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory);\n this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory,\n builder });\n this.factory = factory;\n this.builder = builder;\n this.grammar = new EasyScoreGrammar(this.builder);\n this.parser = new Parser(this.grammar);\n (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook));\n return this;\n }\n setContext(context) {\n this.factory.setContext(context);\n return this;\n }\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n L(result);\n throw new RuntimeError('Error parsing line: ' + line);\n }\n return result;\n }\n beam(notes, options) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n tuplet(notes, options) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n notes(line, options = {}) {\n options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options);\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n voice(notes, options = {}) {\n options = Object.assign({ time: this.defaults.time }, options);\n return this.factory.Voice(options).addTickables(notes);\n }\n addCommitHook(commitHook) {\n this.builder.addCommitHook(commitHook);\n }\n}\nEasyScore.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\nimport { StemmableNote } from './stemmablenote';\nimport { Category, isAnnotation } from './typeguard';\nimport { RuntimeError } from './util';\nconst ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.';\nexport class GhostNote extends StemmableNote {\n static get CATEGORY() {\n return Category.GhostNote;\n }\n constructor(parameter) {\n if (!parameter) {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n let noteStruct;\n if (typeof parameter === 'string') {\n // Preserve backwards-compatibility\n noteStruct = { duration: parameter };\n }\n else if (typeof parameter === 'object') {\n noteStruct = parameter;\n }\n else {\n throw new RuntimeError('BadArguments', ERROR_MSG);\n }\n super(noteStruct);\n // Note properties\n this.setWidth(0);\n }\n /**\n * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score.\n */\n isRest() {\n return true;\n }\n setStave(stave) {\n super.setStave(stave);\n return this;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n // Draw Annotations\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n if (isAnnotation(modifier)) {\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n }\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Any glyph that is set to appear on a Stave and take up musical time and graphical space.\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class GlyphNote extends Note {\n static get CATEGORY() {\n return Category.GlyphNote;\n }\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = Object.assign({ ignoreTicks: false, line: 2 }, options);\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n this.setGlyph(glyph);\n }\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n preFormat() {\n if (!this.preFormatted && this.modifierContext) {\n this.modifierContext.preFormat();\n }\n this.preFormatted = true;\n return this;\n }\n drawModifiers() {\n const ctx = this.checkContext();\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n }\n }\n /** Get the glyph width. */\n getGlyphWidth() {\n return this.glyph.getMetrics().width;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = stave.checkContext();\n this.setRendered();\n this.applyStyle(ctx);\n ctx.openGroup('glyphNote', this.getAttribute('id'));\n // Context is set when setStave is called on Note\n const glyph = this.glyph;\n if (!glyph.getContext()) {\n glyph.setContext(ctx);\n }\n glyph.setStave(stave);\n glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs());\n const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();\n glyph.renderToStave(x);\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle(ctx);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class GraceNote extends StaveNote {\n static get CATEGORY() {\n return Category.GraceNote;\n }\n static get LEDGER_LINE_OFFSET() {\n return 2;\n }\n static get SCALE() {\n return 0.66;\n }\n constructor(noteStruct) {\n super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct));\n this.slash = noteStruct.slash || false;\n this.slur = true;\n this.buildNoteHeads();\n this.width = 3;\n }\n getStemExtension() {\n if (this.stem_extension_override) {\n return this.stem_extension_override;\n }\n const glyphProps = this.getGlyphProps();\n if (glyphProps) {\n let ret = super.getStemExtension();\n if (glyphProps.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT;\n }\n return ret;\n }\n return 0;\n }\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE;\n }\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n }\n else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Stem.DOWN\n ? noteHeadBounds.y_top - noteStemHeight\n : noteHeadBounds.y_bottom - noteStemHeight;\n const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension;\n let defaultOffsetY = Tables.STEM_HEIGHT;\n defaultOffsetY -= defaultOffsetY / 2.8;\n defaultOffsetY += defaultStemExtention;\n y += defaultOffsetY * staveNoteScale * stem_direction;\n const offsets = stem_direction === Stem.UP\n ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n }\n : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n x += offsets.x1 * offsetScale;\n y += offsets.y1 * offsetScale;\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + offsets.x2 * offsetScale,\n y2: y + offsets.y2 * offsetScale,\n };\n }\n // FIXME: avoid staff lines, ledger lines or others.\n const ctx = this.checkContext();\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n if (!beam)\n throw new RuntimeError('NoBeam', \"Can't calculate without a beam.\");\n const beam_slope = beam.slope;\n const isBeamEndNote = beam.notes[beam.notes.length - 1] === this;\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: stemY + slashStemOffset - protrusion_stem_dy,\n x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\nimport { KeySignature } from './keysignature';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nexport class KeySigNote extends Note {\n static get CATEGORY() {\n return Category.KeySigNote;\n }\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n this.keySignature.setStave(this.checkStave());\n this.setWidth(this.keySignature.getWidth());\n return this;\n }\n draw() {\n const ctx = this.checkStave().checkContext();\n this.setRendered();\n this.keySignature.setX(this.getAbsoluteX());\n this.keySignature.setContext(ctx);\n this.keySignature.draw();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests.\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifierPosition } from './stavemodifier';\nimport { Tables } from './tables';\nimport { TimeSignature } from './timesignature';\nimport { Category, isBarline } from './typeguard';\nimport { defined } from './util';\nlet semibreve_rest;\nfunction get_semibreve_rest() {\n if (!semibreve_rest) {\n const noteHead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibreve_rest = {\n glyph_font_scale: noteHead.render_options.glyph_font_scale,\n glyph_code: noteHead.glyph_code,\n width: noteHead.getWidth(),\n };\n }\n return semibreve_rest;\n}\nexport class MultiMeasureRest extends Element {\n static get CATEGORY() {\n return Category.MultiMeasureRest;\n }\n /**\n *\n * @param number_of_measures Number of measures.\n * @param options The options object.\n */\n constructor(number_of_measures, options) {\n super();\n this.xs = { left: NaN, right: NaN };\n this.hasPaddingLeft = false;\n this.hasPaddingRight = false;\n this.hasLineThickness = false;\n this.hasSymbolSpacing = false;\n this.number_of_measures = number_of_measures;\n // Keep track of whether these four options were provided.\n this.hasPaddingLeft = typeof options.padding_left === 'number';\n this.hasPaddingRight = typeof options.padding_right === 'number';\n this.hasLineThickness = typeof options.line_thickness === 'number';\n this.hasSymbolSpacing = typeof options.symbol_spacing === 'number';\n const musicFont = Tables.currentMusicFont();\n this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options);\n const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0);\n this.render_options.number_line += fontLineShift;\n }\n getXs() {\n return this.xs;\n }\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n getStave() {\n return this.stave;\n }\n checkStave() {\n return defined(this.stave, 'NoStave', 'No stave attached to instance.');\n }\n drawLine(stave, ctx, left, right, spacingBetweenLines) {\n const options = this.render_options;\n const y = stave.getYForLine(options.line);\n const padding = (right - left) * 0.1;\n left += padding;\n right -= padding;\n let lineThicknessHalf;\n if (this.hasLineThickness) {\n lineThicknessHalf = options.line_thickness * 0.5;\n }\n else {\n lineThicknessHalf = spacingBetweenLines * 0.25;\n }\n const serifThickness = options.serif_thickness;\n const top = y - spacingBetweenLines;\n const bot = y + spacingBetweenLines;\n const leftIndented = left + serifThickness;\n const rightIndented = right - serifThickness;\n const lineTop = y - lineThicknessHalf;\n const lineBottom = y + lineThicknessHalf;\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, top);\n ctx.lineTo(leftIndented, top);\n ctx.lineTo(leftIndented, lineTop);\n ctx.lineTo(rightIndented, lineTop);\n ctx.lineTo(rightIndented, top);\n ctx.lineTo(right, top);\n ctx.lineTo(right, bot);\n ctx.lineTo(rightIndented, bot);\n ctx.lineTo(rightIndented, lineBottom);\n ctx.lineTo(leftIndented, lineBottom);\n ctx.lineTo(leftIndented, bot);\n ctx.lineTo(left, bot);\n ctx.closePath();\n ctx.fill();\n }\n drawSymbols(stave, ctx, left, right, spacingBetweenLines) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n const options = this.render_options;\n // FIXME: TODO: invalidate semibreve_rest at the appropriate time\n // (e.g., if the system font settings are changed).\n semibreve_rest = undefined;\n const rest = get_semibreve_rest();\n const rest_scale = options.semibreve_rest_glyph_scale;\n const rest_width = rest.width * (rest_scale / rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: rest_width * 0.5,\n height: spacingBetweenLines,\n },\n 1: {\n width: rest_width,\n },\n };\n /* 10: normal spacingBetweenLines */\n const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10;\n const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;\n let x = left + (right - left) * 0.5 - width * 0.5;\n const line = options.line;\n const yTop = stave.getYForLine(line - 1);\n const yMiddle = stave.getYForLine(line);\n const yBottom = stave.getYForLine(line + 1);\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n ctx.restore();\n }\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const stave = this.checkStave();\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n // FIXME: getNoteStartX() returns x + 5(barline width)\n // getNoteEndX() returns x + width(no barline width)\n // See Stave constructor. How do we fix this?\n // Here, we subtract the barline width.\n const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN);\n if (begModifiers.length === 1 && isBarline(begModifiers[0])) {\n left -= begModifiers[0].getWidth();\n }\n const options = this.render_options;\n if (this.hasPaddingLeft) {\n left = stave.getX() + options.padding_left;\n }\n if (this.hasPaddingRight) {\n right = stave.getX() + stave.getWidth() - options.padding_right;\n }\n this.xs.left = left;\n this.xs.right = right;\n const spacingBetweenLines = options.spacing_between_lines_px;\n if (options.use_symbols) {\n this.drawSymbols(stave, ctx, left, right, spacingBetweenLines);\n }\n else {\n this.drawLine(stave, ctx, left, right, spacingBetweenLines);\n }\n if (options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(timeSpec, 0, false);\n timeSig.point = options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Glyph } from './glyph';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (PedalMarking.DEBUG)\n log('Vex.Flow.PedalMarking', args);\n}\n/**\n * Draws a pedal glyph with the provided `name` on a rendering `context`\n * at the coordinates `x` and `y. Takes into account the glyph data\n * coordinate shifts.\n */\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n/**\n * PedalMarking implements different types of pedal markings. These notation\n * elements indicate to the performer when to depress and release the a pedal.\n *\n * In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n * custom text for the release/depress pedal markings.\n */\nexport class PedalMarking extends Element {\n static get CATEGORY() {\n return Category.PedalMarking;\n }\n /**\n * Create a sustain pedal marking. Returns the defaults PedalMarking.\n * Which uses the traditional \"Ped\" and \"*\"\" markings.\n */\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n /** Create a sostenuto pedal marking */\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n /** Create an una corda pedal marking */\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setType(PedalMarking.type.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n constructor(notes) {\n super();\n this.notes = notes;\n this.type = PedalMarking.type.TEXT;\n this.line = 0;\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n this.resetFont();\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n /** Set pedal type. */\n setType(type) {\n type = typeof type === 'string' ? PedalMarking.typeString[type] : type;\n if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) {\n this.type = type;\n }\n return this;\n }\n /**\n * Set custom text for the `depress`/`release` pedal markings. No text is\n * set if the parameter is falsy.\n */\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n /** Set the staff line to render the markings on. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Draw the bracket based pedal markings. */\n drawBracketed() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.checkStave().getYForBottomText(this.line + 3);\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions');\n }\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n let x_shift = 0;\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n if (this.type === PedalMarking.type.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (this.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n x_shift = text_width / 2 + this.render_options.text_margin_right;\n }\n else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + this.render_options.text_margin_right;\n }\n }\n else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - this.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n }\n else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - this.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n /**\n * Draw the text based pedal markings. This defaults to the traditional\n * \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n */\n drawText() {\n const ctx = this.checkContext();\n let is_pedal_depressed = false;\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach((note) => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.checkStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(this.line + 3);\n const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n let text_width = 0;\n if (is_pedal_depressed) {\n if (this.custom_depress_text) {\n text_width = ctx.measureText(this.custom_depress_text).width;\n ctx.fillText(this.custom_depress_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n }\n else {\n if (this.custom_release_text) {\n text_width = ctx.measureText(this.custom_release_text).width;\n ctx.fillText(this.custom_release_text, x - text_width / 2, y);\n }\n else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n /** Render the pedal marking in position on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.textFont);\n L('Rendering Pedal Marking');\n if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n }\n else if (this.type === PedalMarking.type.TEXT) {\n this.drawText();\n }\n ctx.restore();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */\nPedalMarking.DEBUG = false;\nPedalMarking.TEXT_FONT = {\n family: Font.SERIF,\n size: 12,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n/** Glyph data */\nPedalMarking.GLYPHS = {\n pedal_depress: {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n pedal_release: {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n};\n/** Pedal type as number. */\nPedalMarking.type = {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n};\n/** Pedal type as string. */\nPedalMarking.typeString = {\n text: PedalMarking.type.TEXT,\n bracket: PedalMarking.type.BRACKET,\n mixed: PedalMarking.type.MIXED,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\n// Map `type` to SMuFL glyph code.\nconst CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n slash: 'repeatBarSlash',\n};\nexport class RepeatNote extends GlyphNote {\n static get CATEGORY() {\n return Category.RepeatNote;\n }\n constructor(type, noteStruct, options) {\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), {\n category: 'repeatNote',\n });\n super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options);\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Element } from './element';\nimport { Tables } from './tables';\nimport { TextJustification } from './textnote';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates.\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n ctx.fill();\n}\nexport class StaveLine extends Element {\n static get CATEGORY() {\n return Category.StaveLine;\n }\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setNotes(notes);\n this.text = '';\n this.resetFont();\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. (TODO/QUESTION: Is this supported in SVG?).\n line_dash: undefined,\n // Can draw rounded line end, instead of a square. (TODO/QUESTION: Is this supported in SVG?).\n rounded_end: true,\n // The color of the line and arrowheads\n color: undefined,\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n }\n // The the annotation for the `StaveLine`\n setText(text) {\n this.text = text;\n return this;\n }\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.');\n }\n if (!notes.first_indices)\n notes.first_indices = [0];\n if (!notes.last_indices)\n notes.last_indices = [0];\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n }\n else {\n ctx.setLineCap('square');\n }\n }\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n ctx.setFont(this.textFont);\n const render_options = this.render_options;\n const color = render_options.color;\n if (color) {\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n }\n }\n // Helper function to draw a line with arrow heads\n drawArrowLine(ctx, pt1, pt2) {\n const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow;\n const x1 = pt1.x;\n const y1 = pt1.y;\n const x2 = pt2.x;\n const y2 = pt2.y;\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - this.render_options.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n }\n else {\n end_x = x2;\n end_y = y2;\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n }\n else {\n start_x = x1;\n start_y = y1;\n }\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle));\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n if (this.render_options.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n if (this.render_options.draw_start_arrow || both_arrows) {\n angle1 = line_angle + this.render_options.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n angle2 = line_angle - this.render_options.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n }\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n ctx.save();\n this.applyLineStyle();\n // Cycle through each set of indices and draw lines\n let start_position = { x: 0, y: 0 };\n let end_position = { x: 0, y: 0 };\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyphProps().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n this.drawArrowLine(ctx, start_position, end_position);\n });\n ctx.restore();\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n }\n else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = end_position.x - start_position.x;\n const center_x = delta_x / 2 + start_position.x;\n x = center_x - text_width / 2;\n }\n else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n // Determine the y value to start the text\n let y = 0;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.checkStave().getYForTopText();\n }\n else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK);\n }\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n return this;\n }\n}\n/** Default text font. */\nStaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n// Text Positioning\nStaveLine.TextVerticalPosition = {\n TOP: 1,\n BOTTOM: 2,\n};\nStaveLine.TextJustification = TextJustification;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { BoundingBox } from './boundingbox';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\n/**\n * System implements a musical system, which is a collection of staves,\n * each which can have one or more voices. All voices across all staves in\n * the system are formatted together.\n */\nexport class System extends Element {\n static get CATEGORY() {\n return Category.System;\n }\n constructor(params = {}) {\n super();\n this.setOptions(params);\n this.partStaves = [];\n this.partStaveInfos = [];\n this.partVoices = [];\n }\n /** Set formatting options. */\n setOptions(options = {}) {\n if (!options.factory) {\n throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.');\n }\n this.factory = options.factory;\n this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) });\n if (this.options.noJustification === false && typeof options.width === 'undefined') {\n this.options.autoWidth = true;\n }\n }\n /** Get origin X. */\n getX() {\n return this.options.x;\n }\n /** Set origin X. */\n setX(x) {\n this.options.x = x;\n this.partStaves.forEach((s) => {\n s.setX(x);\n });\n }\n /** Get origin y. */\n getY() {\n return this.options.y;\n }\n /** Set origin y. */\n setY(y) {\n this.options.y = y;\n this.partStaves.forEach((s) => {\n s.setY(y);\n });\n }\n /** Get associated staves. */\n getStaves() {\n return this.partStaves;\n }\n /** Get associated voices. */\n getVoices() {\n return this.partVoices;\n }\n /** Set associated context. */\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n /**\n * Add connector between staves.\n * @param type see {@link StaveConnector.typeString}\n */\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.partStaves[0],\n bottom_stave: this.partStaves[this.partStaves.length - 1],\n type,\n });\n return this.connector;\n }\n /**\n * Add a stave to the system.\n *\n * Example (one voice):\n *\n * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});`\n *\n * Example (two voices):\n *\n * `system.addStave({voices: [`\n * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),`\n * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))`\n * `]});`\n */\n addStave(params) {\n var _a;\n const staveOptions = Object.assign({ left_bar: false }, params.options);\n const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions });\n const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions });\n const ctx = this.getContext();\n p.voices.forEach((voice) => {\n voice\n .setContext(ctx)\n .setStave(stave)\n .getTickables()\n .forEach((tickable) => tickable.setStave(stave));\n this.partVoices.push(voice);\n });\n this.partStaves.push(stave);\n this.partStaveInfos.push(p);\n return stave;\n }\n /**\n * Add voices to the system with stave already assigned.\n */\n addVoices(voices) {\n const ctx = this.getContext();\n voices.forEach((voice) => {\n voice.setContext(ctx);\n this.partVoices.push(voice);\n });\n }\n /** Format the system. */\n format() {\n const options_details = this.options.details;\n let justifyWidth = 0;\n const formatter = new Formatter(options_details);\n this.formatter = formatter;\n let y = this.options.y;\n let startX = 0;\n const debugNoteMetricsYs = [];\n this.partStaves.forEach((part, index) => {\n y = y + part.space(this.partStaveInfos[index].spaceAbove);\n part.setY(y);\n y = y + part.space(this.partStaveInfos[index].spaceBelow);\n y = y + part.space(this.options.spaceBetweenStaves);\n if (this.partStaveInfos[index].debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, stave: part });\n y += 15;\n }\n startX = Math.max(startX, part.getNoteStartX());\n });\n // Re-assign Stave to update y position\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n const stave = tickable.getStave();\n if (stave)\n tickable.setStave(stave);\n });\n });\n // Join the voices\n formatter.joinVoices(this.partVoices);\n // Update the start position of all staves.\n this.partStaves.forEach((part) => part.setNoteStartX(startX));\n if (this.options.autoWidth && this.partVoices.length > 0) {\n justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices);\n this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x);\n this.partStaves.forEach((part) => {\n part.setWidth(this.options.width);\n });\n }\n else {\n justifyWidth = this.options.noPadding\n ? this.options.width - (startX - this.options.x)\n : this.options.width - (startX - this.options.x) - Stave.defaultPadding;\n }\n if (this.partVoices.length > 0) {\n formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions);\n }\n formatter.postFormat();\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune(options_details);\n }\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y);\n Stave.formatBegModifiers(this.partStaves);\n }\n /** Render the system. */\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) {\n throw new RuntimeError('NoFormatter', 'format() must be called before draw()');\n }\n this.setRendered();\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n this.debugNoteMetricsYs.forEach((d) => {\n this.partVoices.forEach((voice) => {\n voice.getTickables().forEach((tickable) => {\n if (tickable.getStave() === d.stave)\n Note.plotMetrics(ctx, tickable, d.y);\n });\n });\n });\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { Glyph } from './glyph';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Tables } from './tables';\nimport { Category, isDot } from './typeguard';\nimport { defined, RuntimeError } from './util';\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n if (!is_used) {\n group.push(string);\n }\n else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0)\n stem_through.push(group);\n return stem_through;\n}\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n const stem_lines = [];\n unused_strings.forEach((strings) => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n if ((up_stem && containsFirstString) || (down_stem && containsLastString)) {\n return;\n }\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n }\n else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n // Store the y value\n line_ys.push(y);\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n }\n else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n return stem_lines;\n}\nexport class TabNote extends StemmableNote {\n static get CATEGORY() {\n return Category.TabNote;\n }\n // Initialize the TabNote with a `noteStruct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(noteStruct, draw_stem = false) {\n super(noteStruct);\n this.glyphPropsArr = [];\n // Return the number of the greatest string, which is the string lowest on the display\n this.greatestString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b));\n };\n // Return the number of the least string, which is the string highest on the display\n this.leastString = () => {\n return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b));\n };\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = noteStruct.positions || [];\n // Render Options\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // font size for note heads and rests\n glyph_font_scale: Tables.TABLATURE_FONT_SCALE, \n // Flag to draw a stem\n draw_stem, \n // Flag to draw dot modifiers\n draw_dots: draw_stem, \n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false, \n // vertical shift from stave line\n y_shift: 0, \n // normal glyph scale\n scale: 1.0, \n // default tablature font\n font: `${Font.SIZE}pt ${Font.SANS_SERIF}` });\n this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType);\n defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`);\n this.buildStem();\n if (noteStruct.stem_direction) {\n this.setStemDirection(noteStruct.stem_direction);\n }\n else {\n this.setStemDirection(Stem.UP);\n }\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n reset() {\n super.reset();\n if (this.stave)\n this.setStave(this.stave);\n return this;\n }\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n // Determine if the note has a stem\n hasStem() {\n if (this.render_options.draw_stem)\n return true;\n return false;\n }\n // Get the default stem extension for the note\n getStemExtension() {\n const glyphProps = this.getGlyphProps();\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n if (glyphProps) {\n return this.getStemDirection() === Stem.UP\n ? glyphProps.tabnote_stem_up_extension\n : glyphProps.tabnote_stem_down_extension;\n }\n return 0;\n }\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphPropsArr = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost)\n fret = '(' + fret + ')';\n const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale);\n this.glyphPropsArr.push(glyphProps);\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyphProps.getWidth = () => this.width;\n }\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n const ctx = stave.getContext();\n this.setContext(ctx);\n // Calculate the fret number width based on font used\n if (ctx) {\n this.width = 0;\n for (let i = 0; i < this.glyphPropsArr.length; ++i) {\n const glyphProps = this.glyphPropsArr[i];\n const text = '' + glyphProps.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setFont(this.render_options.font);\n glyphProps.width = ctx.measureText(text).width;\n ctx.restore();\n glyphProps.getWidth = () => glyphProps.width;\n }\n this.width = Math.max(glyphProps.getWidth(), this.width);\n }\n this.glyphProps.getWidth = () => this.width;\n }\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1));\n this.setYs(ys);\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n return this;\n }\n // Get the fret positions for the note\n getPositions() {\n return this.positions;\n }\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new RuntimeError('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.');\n }\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n }\n else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyphProps.getWidth();\n x = note_glyph_width / 2;\n }\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n // Get the default line for rest\n getLineForRest() {\n return Number(this.positions[0].str);\n }\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted)\n return;\n if (this.modifierContext)\n this.modifierContext.preFormat();\n // width is already set during init()\n this.preFormatted = true;\n }\n // Get the x position for the stem\n getStemX() {\n return this.getCenterGlyphX();\n }\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.checkStave().getNumLines();\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n return this.checkStave().getYForLine(stemStartLine);\n }\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.checkStem().getExtents();\n }\n // Draw the fal onto the context\n drawFlag() {\n var _a;\n const { beam, glyphProps, render_options: { draw_stem }, } = this;\n const context = this.checkContext();\n const shouldDrawFlag = beam == undefined && draw_stem;\n // Now it's the flag's turn.\n if (glyphProps.flag && shouldDrawFlag) {\n const flag_x = this.getStemX();\n const flag_y = this.getStemDirection() === Stem.DOWN\n ? // Down stems are below the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0)\n : // Up stems are above the note head and have flags on the right.\n this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0);\n // Draw the Flag\n //this.flag?.setOptions({ category: 'flag.tabStem' });\n (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y);\n //Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n // Render the modifiers onto the context.\n drawModifiers() {\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled.\n if (isDot(modifier) && !this.render_options.draw_dots) {\n return;\n }\n modifier.setContext(this.getContext());\n modifier.drawWithStyle();\n });\n }\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stemX = this.getStemX();\n const stemY = this.getStemY();\n const ctx = this.checkContext();\n const drawStem = this.render_options.draw_stem;\n const stemThrough = this.render_options.draw_stem_through_stave;\n if (drawStem && stemThrough) {\n const numLines = this.checkStave().getNumLines();\n const stringsUsed = this.positions.map((position) => Number(position.str));\n const unusedStrings = getUnusedStringGroups(numLines, stringsUsed);\n const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection());\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stemLines.forEach((bounds) => {\n if (bounds.length === 0)\n return;\n ctx.beginPath();\n ctx.moveTo(stemX, bounds[0]);\n ctx.lineTo(stemX, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n // Render the fret positions onto the context\n drawPositions() {\n var _a;\n const ctx = this.checkContext();\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyphProps = this.glyphPropsArr[i];\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyphProps.getWidth();\n const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2;\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6);\n if (glyphProps.code) {\n Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code);\n }\n else {\n ctx.save();\n ctx.setFont(this.render_options.font);\n const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : '';\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n // The main rendering function for the entire note.\n draw() {\n const ctx = this.checkContext();\n if (this.ys.length === 0) {\n throw new RuntimeError('NoYValues', \"Can't draw note without Y values.\");\n }\n this.setRendered();\n const render_stem = this.beam == undefined && this.render_options.draw_stem;\n this.applyStyle();\n ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true });\n this.drawPositions();\n this.drawStemThrough();\n if (this.stem && render_stem) {\n const stem_x = this.getStemX();\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n this.stem.setContext(ctx).draw();\n }\n this.drawFlag();\n this.drawModifiers();\n ctx.closeGroup();\n this.restoreStyle();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\nimport { Stave } from './stave';\nimport { Category } from './typeguard';\nexport class TabStave extends Stave {\n static get CATEGORY() {\n return Category.TabStave;\n }\n constructor(x, y, width, options) {\n const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options);\n super(x, y, width, tab_options);\n }\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// This file implements `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\nimport { Element } from './element';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Renderer } from './renderer';\nimport { Tables } from './tables';\nimport { Category } from './typeguard';\nimport { log, RuntimeError } from './util';\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextBracket.DEBUG)\n log('Vex.Flow.TextBracket', args);\n}\nexport var TextBracketPosition;\n(function (TextBracketPosition) {\n TextBracketPosition[TextBracketPosition[\"TOP\"] = 1] = \"TOP\";\n TextBracketPosition[TextBracketPosition[\"BOTTOM\"] = -1] = \"BOTTOM\";\n})(TextBracketPosition || (TextBracketPosition = {}));\nexport class TextBracket extends Element {\n static get CATEGORY() {\n return Category.TextBracket;\n }\n static get Position() {\n return TextBracketPosition;\n }\n static get PositionString() {\n return {\n top: TextBracketPosition.TOP,\n bottom: TextBracketPosition.BOTTOM,\n };\n }\n /**\n * @deprecated Use `TextBracket.Position` instead.\n */\n static get Positions() {\n L('Positions is deprecated, use TextBracketPosition instead.');\n return TextBracketPosition;\n }\n /**\n * @deprecated Use `TextBracket.PositionString` instead.\n */\n static get PositionsString() {\n L('PositionsString is deprecated, use PositionString instead.');\n return TextBracket.PositionString;\n }\n constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) {\n super();\n this.start = start;\n this.stop = stop;\n this.text = text;\n this.superscript = superscript;\n this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position;\n this.line = 1;\n this.resetFont();\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n /**\n * Apply the text backet styling to the provided context.\n * @param ctx\n * @returns this\n */\n applyStyle(ctx) {\n ctx.setFont(this.font);\n const options = this.render_options;\n ctx.setStrokeStyle(options.color);\n ctx.setFillStyle(options.color);\n ctx.setLineWidth(options.line_width);\n return this;\n }\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash)\n this.render_options.dash = dash;\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) {\n this.line = line;\n return this;\n }\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n let y = 0;\n switch (this.position) {\n case TextBracketPosition.TOP:\n y = this.start.checkStave().getYForTopText(this.line);\n break;\n case TextBracketPosition.BOTTOM:\n y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`);\n }\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n const bracket_height = this.render_options.bracket_height * this.position;\n ctx.save();\n this.applyStyle(ctx);\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n // Get the width and height for the octave number\n const main_measure = ctx.measureText(this.text);\n const main_width = main_measure.width;\n const main_height = main_measure.height;\n // Calculate the y position for the super script\n const super_y = start.y - main_height / 2.5;\n // We called this.resetFont() in the constructor, so we know this.textFont is available.\n // eslint-disable-next-line\n const { family, size, weight, style } = this.textFont;\n // To draw the superscript, we scale the font size by 1/1.4.\n const smallerFontSize = Font.scaleSize(size, 0.714286);\n ctx.setFont(family, smallerFontSize, weight, style);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n // Determine width and height of the superscript\n const super_measure = ctx.measureText(this.superscript);\n const super_width = super_measure.width;\n const super_height = super_measure.height;\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyphProps().getWidth();\n // Adjust x and y coordinates based on position\n if (this.position === TextBracketPosition.TOP) {\n start_x += main_width + super_width + 5;\n line_y -= super_height / 2.7;\n }\n else if (this.position === TextBracketPosition.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n if (!this.render_options.underline_superscript) {\n start_x += super_width;\n }\n }\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash);\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash);\n }\n }\n else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n ctx.restore();\n }\n}\nTextBracket.DEBUG = false;\nTextBracket.TEXT_FONT = {\n family: Font.SERIF,\n size: 15,\n weight: FontWeight.NORMAL,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Glyph } from './glyph';\nimport { Note } from './note';\nimport { Category } from './typeguard';\nimport { defined, log, RuntimeError } from './util';\n// eslint-disable-next-line\nfunction L(...args) {\n if (TextDynamics.DEBUG)\n log('Vex.Flow.TextDynamics', args);\n}\n/**\n * `TextDynamics` renders traditional\n * text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n *\n * You can render any dynamics string that contains a combination of\n * the following letters: P, M, F, Z, R, S\n */\nexport class TextDynamics extends Note {\n static get CATEGORY() {\n return Category.TextDynamics;\n }\n /** The glyph data for each dynamics letter. */\n static get GLYPHS() {\n return {\n f: {\n code: 'dynamicForte',\n width: 12,\n },\n p: {\n code: 'dynamicPiano',\n width: 14,\n },\n m: {\n code: 'dynamicMezzo',\n width: 17,\n },\n s: {\n code: 'dynamicSforzando',\n width: 10,\n },\n z: {\n code: 'dynamicZ',\n width: 12,\n },\n r: {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n /**\n * Create the dynamics marking.\n *\n * A `TextDynamics` object inherits from `Note` so that it can be formatted\n * within a `Voice`.\n *\n * @param noteStruct an object that contains a `duration` property and a\n * `sequence` of letters that represents the letters to render.\n */\n constructor(noteStruct) {\n super(noteStruct);\n this.sequence = (noteStruct.text || '').toLowerCase();\n this.line = noteStruct.line || 0;\n this.glyphs = [];\n this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 });\n L('New Dynamics Text: ', this.sequence);\n }\n /** Set the Stave line on which the note should be placed. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Preformat the dynamics text. */\n preFormat() {\n let total_width = 0;\n // length of this.glyphs must be <=\n // length of this.sequence, so if we're formatted before\n // create new glyphs.\n this.glyphs = [];\n // Iterate through each letter\n this.sequence.split('').forEach((letter) => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data)\n throw new RuntimeError('Invalid dynamics character: ' + letter);\n const size = defined(this.render_options.glyph_font_size);\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n // Add the glyph\n this.glyphs.push(glyph);\n total_width += glyph_data.width;\n });\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n /** Draw the dynamics text on the rendering context. */\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.checkStave().getYForLine(this.line + -3);\n L('Rendering Dynamics: ', this.sequence);\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.checkContext(), letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */\nTextDynamics.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\nimport { Category } from './typeguard';\nexport class TimeSigNote extends Note {\n static get CATEGORY() {\n return Category.TimeSigNote;\n }\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.timeSig = new TimeSignature(timeSpec, customPadding);\n this.setWidth(this.timeSig.getGlyph().getMetrics().width);\n // Note properties\n this.ignore_ticks = true;\n }\n /* Overridden to ignore */\n // eslint-disable-next-line\n addToModifierContext(mc) {\n // DO NOTHING.\n return this;\n }\n preFormat() {\n this.preFormatted = true;\n return this;\n }\n draw() {\n const stave = this.checkStave();\n const ctx = this.checkContext();\n this.setRendered();\n const tsGlyph = this.timeSig.getGlyph();\n if (!tsGlyph.getContext()) {\n tsGlyph.setContext(ctx);\n }\n tsGlyph.setStave(stave);\n tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs());\n tsGlyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n// MIT License\nimport { Element } from './element';\nimport { Category } from './typeguard';\nimport { log } from './util';\nimport { Vibrato } from './vibrato';\n// eslint-disable-next-line\nfunction L(...args) {\n if (VibratoBracket.DEBUG)\n log('Vex.Flow.VibratoBracket', args);\n}\n/** `VibratoBracket` renders vibrato effect between two notes. */\nexport class VibratoBracket extends Element {\n static get CATEGORY() {\n return Category.VibratoBracket;\n }\n /**\n * Either the stop or start note must be set, or both of them.\n * An undefined value for the start or stop note indicates that the vibrato\n * is drawn from the beginning or until the end of the stave accordingly.\n */\n constructor(bracket_data) {\n super();\n if (bracket_data.start)\n this.start = bracket_data.start;\n if (bracket_data.stop)\n this.stop = bracket_data.stop;\n this.line = 1;\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n vibrato_width: 0,\n };\n }\n /** Set line position of the vibrato bracket. */\n setLine(line) {\n this.line = line;\n return this;\n }\n /** Set harsh vibrato bracket. */\n setHarsh(harsh) {\n this.render_options.harsh = harsh;\n return this;\n }\n /** Draw the vibrato bracket on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n const y = (this.start && this.start.checkStave().getYForTopText(this.line)) ||\n (this.stop && this.stop.checkStave().getYForTopText(this.line)) ||\n 0;\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0;\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) ||\n (this.start && this.start.checkStave().getTieEndX() - 10) ||\n 0;\n this.render_options.vibrato_width = stop_x - start_x;\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */\nVibratoBracket.DEBUG = false;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// MIT License\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { ChordSymbol } from './chordsymbol';\nimport { ClefNote } from './clefnote';\nimport { Curve } from './curve';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { KeySigNote } from './keysignote';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { Renderer } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { StaveConnector } from './staveconnector';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { StaveTie } from './stavetie';\nimport { StringNumber } from './stringnumber';\nimport { System } from './system';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextBracket } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSigNote } from './timesignote';\nimport { Tuplet } from './tuplet';\nimport { defined, log, RuntimeError } from './util';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice } from './voice';\nimport { isHTMLCanvas } from './web';\n// eslint-disable-next-line\nfunction L(...args) {\n if (Factory.DEBUG)\n log('Vex.Flow.Factory', args);\n}\n/**\n * Factory implements a high level API around VexFlow.\n */\nexport class Factory {\n /**\n * Static simplified function to access constructor without providing FactoryOptions\n *\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );`\n */\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n /**\n * Example:\n *\n * Create an SVG renderer and attach it to the DIV element named \"boo\" to render using 1200 and 600\n *\n * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});`\n */\n constructor(options = {}) {\n L('New factory: ', options);\n this.options = {\n stave: {\n space: 10,\n },\n renderer: {\n elementId: '',\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: Factory.TEXT_FONT,\n };\n this.setOptions(options);\n }\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = undefined; // current stave\n }\n setOptions(options) {\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.initRenderer();\n this.reset();\n }\n initRenderer() {\n const { elementId, width, height, background } = this.options.renderer;\n if (elementId == null) {\n return;\n }\n if (elementId == '') {\n L(this);\n throw new RuntimeError('renderer.elementId not set in FactoryOptions');\n }\n let backend = this.options.renderer.backend;\n if (backend === undefined) {\n const elem = document.getElementById(elementId);\n // We use a custom type check here, because node-canvas mimics canvas,\n // but is not an instance of window.HTMLCanvasElement.\n // In fact, `window` might be undefined here.\n // See: https://www.npmjs.com/package/canvas\n if (isHTMLCanvas(elem)) {\n backend = Renderer.Backends.CANVAS;\n }\n else {\n backend = Renderer.Backends.SVG;\n }\n }\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n getContext() {\n return this.context;\n }\n setContext(context) {\n this.context = context;\n return this;\n }\n getStave() {\n return this.stave;\n }\n getVoices() {\n return this.voices;\n }\n /** Return pixels from current stave spacing. */\n Stave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params);\n const stave = new Stave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n TabStave(params) {\n const staveSpace = this.options.stave.space;\n const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params);\n const stave = new TabStave(p.x, p.y, p.width, p.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave)\n ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n TextNote(noteStruct) {\n const textNote = new TextNote(noteStruct);\n if (this.stave)\n textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n BarNote(params = {}) {\n const barNote = new BarNote(params.type);\n if (this.stave)\n barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n ClefNote(params) {\n const p = Object.assign({ type: 'treble', options: {\n size: 'default',\n annotation: undefined,\n } }, params);\n const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation);\n if (this.stave)\n clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n TimeSigNote(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const timeSigNote = new TimeSigNote(p.time);\n if (this.stave)\n timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave)\n keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave)\n note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n Accidental(params) {\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n Annotation(params) {\n const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params);\n const annotation = new Annotation(p.text);\n annotation.setJustification(p.hJustify);\n annotation.setVerticalJustification(p.vJustify);\n annotation.setFont(p.font);\n annotation.setContext(this.context);\n return annotation;\n }\n ChordSymbol(params) {\n const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params);\n const chordSymbol = new ChordSymbol();\n chordSymbol.setHorizontal(p.hJustify);\n chordSymbol.setVertical(p.vJustify);\n chordSymbol.setEnableKerning(p.kerning);\n chordSymbol.setReportWidth(p.reportWidth);\n // There is a default font based on the engraving font. Only set then\n // font if it is specific, else use the default\n if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') {\n if (typeof p.fontWeight === 'string')\n chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight);\n else\n chordSymbol.setFont(p.fontFamily, p.fontSize, '');\n }\n else if (typeof p.fontSize === 'number') {\n chordSymbol.setFontSize(p.fontSize);\n }\n chordSymbol.setContext(this.context);\n return chordSymbol;\n }\n Articulation(params) {\n var _a;\n const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.');\n if ((params === null || params === void 0 ? void 0 : params.position) != undefined)\n articulation.setPosition(params.position);\n if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined)\n articulation.setBetweenLines(params.betweenLines);\n articulation.setContext(this.context);\n return articulation;\n }\n Ornament(type, params) {\n const options = Object.assign({ type, position: 0, accidental: '' }, params);\n const ornament = new Ornament(type);\n ornament.setPosition(options.position);\n if (options.upperAccidental) {\n ornament.setUpperAccidental(options.upperAccidental);\n }\n if (options.lowerAccidental) {\n ornament.setLowerAccidental(options.lowerAccidental);\n }\n if (typeof options.delayed !== 'undefined') {\n ornament.setDelayed(options.delayed);\n }\n ornament.setContext(this.context);\n return ornament;\n }\n TextDynamics(params) {\n const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params);\n const text = new TextDynamics({\n text: p.text,\n line: p.line,\n duration: p.duration,\n dots: p.dots,\n });\n if (this.stave)\n text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n Fingering(params) {\n const p = Object.assign({ number: '0', position: 'left' }, params);\n const fingering = new FretHandFinger(p.number);\n fingering.setPosition(p.position);\n fingering.setContext(this.context);\n return fingering;\n }\n StringNumber(params, drawCircle = true) {\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n stringNumber.setDrawCircle(drawCircle);\n return stringNumber;\n }\n TickContext() {\n return new TickContext();\n }\n ModifierContext() {\n return new ModifierContext();\n }\n MultiMeasureRest(params) {\n const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures');\n const multiMeasureRest = new MultiMeasureRest(numMeasures, params);\n multiMeasureRest.setContext(this.context);\n this.renderQ.push(multiMeasureRest);\n return multiMeasureRest;\n }\n Voice(params) {\n const p = Object.assign({ time: '4/4' }, params);\n const voice = new Voice(p.time);\n this.voices.push(voice);\n return voice;\n }\n StaveConnector(params) {\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n Formatter(options) {\n return new Formatter(options);\n }\n Tuplet(params) {\n const p = Object.assign({ notes: [], options: {} }, params);\n const tuplet = new Tuplet(p.notes, p.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n Beam(params) {\n var _a, _b, _c, _d, _e;\n const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context);\n beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []);\n if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) {\n Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => {\n beam.setPartialBeamSideAt(Number(noteIndex), direction);\n });\n }\n this.renderQ.push(beam);\n return beam;\n }\n Curve(params) {\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n StaveTie(params) {\n var _a;\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction)\n tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n StaveLine(params) {\n var _a, _b;\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text)\n line.setText(params.options.text);\n if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font)\n line.setFont(params.options.font);\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n VibratoBracket(params) {\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n if (params.options.line)\n vibratoBracket.setLine(params.options.line);\n if (params.options.harsh)\n vibratoBracket.setHarsh(params.options.harsh);\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n return vibratoBracket;\n }\n TextBracket(params) {\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n if (params.options.line)\n textBracket.setLine(params.options.line);\n if (params.options.font)\n textBracket.setFont(params.options.font);\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n /**\n * Creates EasyScore. Normally the first step after constructing a Factory. For example:\n * ```\n * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});\n * const score: EasyScore = vf.EasyScore();\n * ```\n * @param options.factory optional instance of Factory\n * @param options.builder instance of Builder\n * @param options.commitHooks function to call after a note element is created\n * @param options.throwOnError throw error in case of parsing error\n */\n EasyScore(options = {}) {\n options.factory = this;\n return new EasyScore(options);\n }\n PedalMarking(params) {\n const p = Object.assign({ notes: [], options: {\n style: 'mixed',\n } }, params);\n const pedal = new PedalMarking(p.notes);\n pedal.setType(PedalMarking.typeString[p.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n NoteSubGroup(params) {\n const p = Object.assign({ notes: [] }, params);\n const group = new NoteSubGroup(p.notes);\n group.setContext(this.context);\n return group;\n }\n /** Render the score. */\n draw() {\n const ctx = this.context;\n this.systems.forEach((s) => s.setContext(ctx).format());\n this.staves.forEach((s) => s.setContext(ctx).draw());\n this.voices.forEach((v) => v.setContext(ctx).draw());\n this.renderQ.forEach((e) => {\n if (!e.isRendered())\n e.setContext(ctx).draw();\n });\n this.systems.forEach((s) => s.setContext(ctx).draw());\n this.reset();\n }\n}\n/** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */\nFactory.DEBUG = false;\n/** Default text font. */\nFactory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT);\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.ts` for usage examples.\nimport { Font } from './font';\nimport { TabNote } from './tabnote';\nimport { Category } from './typeguard';\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() {\n return Category.GraceTabNote;\n }\n constructor(noteStruct) {\n super(noteStruct, false);\n this.render_options = Object.assign(Object.assign({}, this.render_options), { \n // vertical shift from stave line\n y_shift: 0.3, \n // grace glyph scale\n scale: 0.6, \n // grace tablature font\n font: `7.5pt ${Font.SANS_SERIF}` });\n this.updateWidth();\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\nimport { Music } from './music';\nimport { RuntimeError } from './util';\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n getKey() {\n return this.key;\n }\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental)\n this.keyString += this.keyParts.accidental;\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`);\n }\n this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]);\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n const noteLocation = Music.root_indices[this.keyParts.root];\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n return this;\n }\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n if (scaleNote === note) {\n return {\n note: scaleNote,\n accidental: parts.accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n note: valueNote,\n accidental: this.music.getNoteParts(valueNote).accidental,\n change: false,\n };\n }\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n note: originalValueNote,\n accidental: this.music.getNoteParts(originalValueNote).accidental,\n change: true,\n };\n }\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n note: modparts.root,\n accidental: undefined,\n change: true,\n };\n }\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n return {\n note,\n accidental: parts.accidental,\n change: true,\n };\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Author: Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either crescendo or decrescendo.\nimport { Element } from './element';\nimport { Modifier } from './modifier';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class StaveHairpin extends Element {\n static get CATEGORY() {\n return Category.StaveHairpin;\n }\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, // vertical offset\n * left_shift_ticks: 0, // left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n var _a, _b;\n const ppt = formatter.pixelsPerTick;\n if (ppt == null) {\n throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');\n }\n const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0);\n const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0);\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n /**\n * Create a new hairpin from the specified notes.\n *\n * @param {!Object} notes The notes to tie up.\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n super();\n this.setNotes(notes);\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n this.render_options = {\n height: 10,\n y_shift: 0,\n left_shift_px: 0,\n right_shift_px: 0,\n right_shift_ticks: 0,\n left_shift_ticks: 0,\n };\n }\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n setRenderOptions(options) {\n if (options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null) {\n this.render_options = options;\n }\n return this;\n }\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');\n }\n this.notes = notes;\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n ctx.beginPath();\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n ctx.stroke();\n ctx.closePath();\n }\n draw() {\n this.checkContext();\n this.setRendered();\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n if (!firstNote || !lastNote)\n throw new RuntimeError('NoNote', 'Notes required to draw');\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(),\n last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(),\n staff_height: firstNote.checkStave().getHeight(),\n });\n }\n}\nStaveHairpin.type = {\n CRESC: 1,\n DECRESC: 2,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\nimport { Font, FontStyle, FontWeight } from './font';\nimport { TabTie } from './tabtie';\nimport { Category } from './typeguard';\nimport { RuntimeError } from './util';\nexport class TabSlide extends TabTie {\n static get CATEGORY() {\n return Category.TabSlide;\n }\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n /**\n * @param notes is a struct of the form:\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n * @param notes.first_note the starting note of the slide\n * @param notes.last_note the ending note of the slide\n * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed.\n * @param notes.last_indices currently unused. we assume it's the same as first_indices.\n *\n * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN\n */\n constructor(notes, direction) {\n super(notes, 'sl.');\n // Determine the direction automatically if it is not provided.\n if (!direction) {\n let first_fret = notes.first_note.getPositions()[0].fret;\n if (typeof first_fret === 'string') {\n first_fret = parseInt(first_fret, 10);\n }\n let last_fret = notes.last_note.getPositions()[0].fret;\n if (typeof last_fret === 'string') {\n last_fret = parseInt(last_fret, 10);\n }\n // If either of the frets are 'X', parseInt() above will return NaN.\n // Choose TabSlide.SLIDE_UP by default.\n if (isNaN(first_fret) || isNaN(last_fret)) {\n direction = TabSlide.SLIDE_UP;\n }\n else {\n direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;\n }\n }\n this.direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n this.resetFont();\n }\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new RuntimeError('BadArguments', 'No Y-values to render');\n }\n const ctx = this.checkContext();\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n const direction = params.direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new RuntimeError('BadSlide', 'Invalid slide direction');\n }\n // eslint-disable-next-line\n const first_indices = this.notes.first_indices;\n for (let i = 0; i < first_indices.length; ++i) {\n const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift;\n if (isNaN(slide_y)) {\n throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.');\n }\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + 3 * direction);\n ctx.lineTo(last_x_px, slide_y - 3 * direction);\n ctx.closePath();\n ctx.stroke();\n }\n this.setRendered();\n }\n}\nTabSlide.TEXT_FONT = {\n family: Font.SERIF,\n size: 10,\n weight: FontWeight.BOLD,\n style: FontStyle.ITALIC,\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n// MIT License\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { Tables } from './tables';\nimport { Category, isGraceNote } from './typeguard';\n/** Tremolo implements tremolo notation. */\nexport class Tremolo extends Modifier {\n static get CATEGORY() {\n return Category.Tremolo;\n }\n /**\n * @param num number of bars\n */\n constructor(num) {\n super();\n this.num = num;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n // big strokes scales initialised to 1 (no scale)\n this.y_spacing_scale = 1;\n this.extra_stroke_scale = 1;\n }\n /** Draw the tremolo on the rendering context. */\n draw() {\n const ctx = this.checkContext();\n const note = this.checkAttachedNote();\n this.setRendered();\n const stemDirection = note.getStemDirection();\n const start = note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const gn = isGraceNote(note);\n const scale = gn ? GraceNote.SCALE : 1;\n const category = `tremolo.${gn ? 'grace' : 'default'}`;\n const musicFont = Tables.currentMusicFont();\n let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n // add y_spacing_scale for big strokes (#1258)\n y_spacing *= this.y_spacing_scale;\n const height = this.num * y_spacing;\n let y = note.getStemExtents().baseY - height;\n if (stemDirection < 0) {\n y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n }\n else {\n y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n const fontScale = musicFont.lookupMetric(`${category}.point`);\n x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale });\n y += y_spacing;\n }\n }\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Tables } from './tables';\nimport { RuntimeError } from './util';\n/** `Tuning` implements varies types of tunings for tablature. */\nexport class Tuning {\n static get names() {\n return {\n standard: 'E/5,B/4,G/4,D/4,A/3,E/3',\n dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3',\n dropd: 'E/5,B/4,G/4,D/4,A/3,D/3',\n eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n standardBanjo: 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n /**\n * Constructor.\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n this.tuningValues = [];\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n /** Return the note number associated to the note string. */\n noteToInteger(noteString) {\n var _a;\n return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1;\n }\n /**\n * Set tuning identified by tuning name (eg. 'dagdad')\n * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings\n */\n setTuning(tuningString) {\n if (Tuning.names[tuningString]) {\n tuningString = Tuning.names[tuningString];\n }\n this.tuningValues = [];\n const keys = tuningString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`);\n }\n for (let i = 0; i < keys.length; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n /** Return the note number associated with a tablature string. */\n getValueForString(stringNum) {\n const s = Number(stringNum);\n if (s < 1 || s > this.tuningValues.length) {\n throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`);\n }\n return this.tuningValues[s - 1];\n }\n /** Return the note number associated with a tablature string and fret. */\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = Number(fretNum);\n if (f < 0) {\n throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`);\n }\n return stringValue + f;\n }\n /** Return the note string associated with tablature string and fret. */\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n return `${Tables.integerToNote(value)}/${octave}`;\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Accidental } from './accidental';\nimport { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation';\nimport { Articulation } from './articulation';\nimport { BarNote } from './barnote';\nimport { Beam } from './beam';\nimport { Bend } from './bend';\nimport { BoundingBox } from './boundingbox';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { CanvasContext } from './canvascontext';\nimport { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol';\nimport { Clef } from './clef';\nimport { ClefNote } from './clefnote';\nimport { Crescendo } from './crescendo';\nimport { Curve, CurvePosition } from './curve';\nimport { Dot } from './dot';\nimport { EasyScore } from './easyscore';\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Font, FontStyle, FontWeight } from './font';\nimport { Formatter } from './formatter';\nimport { Fraction } from './fraction';\nimport { FretHandFinger } from './frethandfinger';\nimport { GhostNote } from './ghostnote';\nimport { Glyph } from './glyph';\nimport { GlyphNote } from './glyphnote';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { GraceTabNote } from './gracetabnote';\nimport { KeyManager } from './keymanager';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { Modifier, ModifierPosition } from './modifier';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Music } from './music';\nimport { Note } from './note';\nimport { NoteHead } from './notehead';\nimport { NoteSubGroup } from './notesubgroup';\nimport { Ornament } from './ornament';\nimport { Parenthesis } from './parenthesis';\nimport { Parser } from './parser';\nimport { PedalMarking } from './pedalmarking';\nimport { Registry } from './registry';\nimport { RenderContext } from './rendercontext';\nimport { Renderer, RendererBackends, RendererLineEndType } from './renderer';\nimport { RepeatNote } from './repeatnote';\nimport { Stave } from './stave';\nimport { Barline, BarlineType } from './stavebarline';\nimport { StaveConnector } from './staveconnector';\nimport { StaveHairpin } from './stavehairpin';\nimport { StaveLine } from './staveline';\nimport { StaveModifier, StaveModifierPosition } from './stavemodifier';\nimport { StaveNote } from './stavenote';\nimport { Repetition } from './staverepetition';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { StaveTie } from './stavetie';\nimport { Volta, VoltaType } from './stavevolta';\nimport { Stem } from './stem';\nimport { StringNumber } from './stringnumber';\nimport { Stroke } from './strokes';\nimport { SVGContext } from './svgcontext';\nimport { System } from './system';\nimport { Tables } from './tables';\nimport { TabNote } from './tabnote';\nimport { TabSlide } from './tabslide';\nimport { TabStave } from './tabstave';\nimport { TabTie } from './tabtie';\nimport { TextBracket, TextBracketPosition } from './textbracket';\nimport { TextDynamics } from './textdynamics';\nimport { TextFormatter } from './textformatter';\nimport { TextJustification, TextNote } from './textnote';\nimport { TickContext } from './tickcontext';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Tremolo } from './tremolo';\nimport { Tuning } from './tuning';\nimport { Tuplet } from './tuplet';\nimport { DATE, ID, VERSION } from './version';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Voice, VoiceMode } from './voice';\nexport class Flow {\n static get BUILD() {\n return {\n /** version number. */\n VERSION: VERSION,\n /** git commit ID that this library was built from. */\n ID: ID,\n /** The date when this library was compiled. */\n DATE: DATE,\n };\n }\n /**\n * Examples:\n * ```\n * Vex.Flow.setMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Bravura', 'Gonville');\n * ```\n *\n * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom).\n * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of:\n * 'Bravura', 'Gonville', 'Custom'.\n *\n * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`,\n * which includes a single music font. Calling this method is unnecessary.\n *\n * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts.\n * In this case, the default music font stack is empty.\n * Example:\n * ```\n * await Vex.Flow.fetchMusicFont('Petaluma');\n * Vex.Flow.setMusicFont('Petaluma');\n * ... (do VexFlow stuff) ...\n * ```\n * See `demos/fonts/` for more examples.\n *\n * @returns an array of Font objects corresponding to the provided `fontNames`.\n */\n static setMusicFont(...fontNames) {\n // Convert the array of font names into an array of Font objects.\n const fonts = fontNames.map((fontName) => Font.load(fontName));\n Tables.MUSIC_FONT_STACK = fonts;\n Glyph.MUSIC_FONT_STACK = fonts.slice();\n Glyph.CURRENT_CACHE_KEY = fontNames.join(',');\n return fonts;\n }\n /**\n * Used with vexflow-core which supports dynamic font loading.\n */\n // eslint-disable-next-line\n static fetchMusicFont(fontName, fontModuleOrPath) {\n return __awaiter(this, void 0, void 0, function* () {\n // The default implementation does nothing.\n // See vexflow-core.ts for the implementation that vexflow-core.js uses.\n });\n }\n static getMusicFont() {\n const fonts = Tables.MUSIC_FONT_STACK;\n return fonts.map((font) => font.getName());\n }\n static get RENDER_PRECISION_PLACES() {\n return Tables.RENDER_PRECISION_PLACES;\n }\n static set RENDER_PRECISION_PLACES(precision) {\n Tables.RENDER_PRECISION_PLACES = precision;\n }\n static get SOFTMAX_FACTOR() {\n return Tables.SOFTMAX_FACTOR;\n }\n static set SOFTMAX_FACTOR(factor) {\n Tables.SOFTMAX_FACTOR = factor;\n }\n static get NOTATION_FONT_SCALE() {\n return Tables.NOTATION_FONT_SCALE;\n }\n static set NOTATION_FONT_SCALE(value) {\n Tables.NOTATION_FONT_SCALE = value;\n }\n static get TABLATURE_FONT_SCALE() {\n return Tables.TABLATURE_FONT_SCALE;\n }\n static set TABLATURE_FONT_SCALE(value) {\n Tables.TABLATURE_FONT_SCALE = value;\n }\n static get RESOLUTION() {\n return Tables.RESOLUTION;\n }\n static set RESOLUTION(value) {\n Tables.RESOLUTION = value;\n }\n static get SLASH_NOTEHEAD_WIDTH() {\n return Tables.SLASH_NOTEHEAD_WIDTH;\n }\n static set SLASH_NOTEHEAD_WIDTH(value) {\n Tables.SLASH_NOTEHEAD_WIDTH = value;\n }\n static get STAVE_LINE_DISTANCE() {\n return Tables.STAVE_LINE_DISTANCE;\n }\n static set STAVE_LINE_DISTANCE(value) {\n Tables.STAVE_LINE_DISTANCE = value;\n }\n static get STAVE_LINE_THICKNESS() {\n return Tables.STAVE_LINE_THICKNESS;\n }\n static set STAVE_LINE_THICKNESS(value) {\n Tables.STAVE_LINE_THICKNESS = value;\n }\n static get STEM_HEIGHT() {\n return Tables.STEM_HEIGHT;\n }\n static set STEM_HEIGHT(value) {\n Tables.STEM_HEIGHT = value;\n }\n static get STEM_WIDTH() {\n return Tables.STEM_WIDTH;\n }\n static set STEM_WIDTH(value) {\n Tables.STEM_WIDTH = value;\n }\n static get TIME4_4() {\n return Tables.TIME4_4;\n }\n static get accidentalMap() {\n return Tables.accidentalMap;\n }\n static get unicode() {\n return Tables.unicode;\n }\n static keySignature(spec) {\n return Tables.keySignature(spec);\n }\n static hasKeySignature(spec) {\n return Tables.hasKeySignature(spec);\n }\n static getKeySignatures() {\n return Tables.getKeySignatures();\n }\n static clefProperties(clef) {\n return Tables.clefProperties(clef);\n }\n // eslint-disable-next-line\n static keyProperties(key, clef, params) {\n return Tables.keyProperties(key, clef, params);\n }\n static durationToTicks(duration) {\n return Tables.durationToTicks(duration);\n }\n}\nFlow.Accidental = Accidental;\nFlow.Annotation = Annotation;\nFlow.Articulation = Articulation;\nFlow.Barline = Barline;\nFlow.BarNote = BarNote;\nFlow.Beam = Beam;\nFlow.Bend = Bend;\nFlow.BoundingBox = BoundingBox;\nFlow.BoundingBoxComputation = BoundingBoxComputation;\nFlow.CanvasContext = CanvasContext;\nFlow.ChordSymbol = ChordSymbol;\nFlow.Clef = Clef;\nFlow.ClefNote = ClefNote;\nFlow.Crescendo = Crescendo;\nFlow.Curve = Curve;\nFlow.Dot = Dot;\nFlow.EasyScore = EasyScore;\nFlow.Element = Element;\nFlow.Factory = Factory;\nFlow.Font = Font;\nFlow.Formatter = Formatter;\nFlow.Fraction = Fraction;\nFlow.FretHandFinger = FretHandFinger;\nFlow.GhostNote = GhostNote;\nFlow.Glyph = Glyph;\nFlow.GlyphNote = GlyphNote;\nFlow.GraceNote = GraceNote;\nFlow.GraceNoteGroup = GraceNoteGroup;\nFlow.GraceTabNote = GraceTabNote;\nFlow.KeyManager = KeyManager;\nFlow.KeySignature = KeySignature;\nFlow.KeySigNote = KeySigNote;\nFlow.Modifier = Modifier;\nFlow.ModifierContext = ModifierContext;\nFlow.MultiMeasureRest = MultiMeasureRest;\nFlow.Music = Music;\nFlow.Note = Note;\nFlow.NoteHead = NoteHead;\nFlow.NoteSubGroup = NoteSubGroup;\nFlow.Ornament = Ornament;\nFlow.Parenthesis = Parenthesis;\nFlow.Parser = Parser;\nFlow.PedalMarking = PedalMarking;\nFlow.Registry = Registry;\nFlow.RenderContext = RenderContext;\nFlow.Renderer = Renderer;\nFlow.RepeatNote = RepeatNote;\nFlow.Repetition = Repetition;\nFlow.Stave = Stave;\nFlow.StaveConnector = StaveConnector;\nFlow.StaveHairpin = StaveHairpin;\nFlow.StaveLine = StaveLine;\nFlow.StaveModifier = StaveModifier;\nFlow.StaveNote = StaveNote;\nFlow.StaveTempo = StaveTempo;\nFlow.StaveText = StaveText;\nFlow.StaveTie = StaveTie;\nFlow.Stem = Stem;\nFlow.StringNumber = StringNumber;\nFlow.Stroke = Stroke;\nFlow.SVGContext = SVGContext;\nFlow.System = System;\nFlow.TabNote = TabNote;\nFlow.TabSlide = TabSlide;\nFlow.TabStave = TabStave;\nFlow.TabTie = TabTie;\nFlow.TextBracket = TextBracket;\nFlow.TextDynamics = TextDynamics;\nFlow.TextFormatter = TextFormatter;\nFlow.TextNote = TextNote;\nFlow.TickContext = TickContext;\nFlow.TimeSignature = TimeSignature;\nFlow.TimeSigNote = TimeSigNote;\nFlow.Tremolo = Tremolo;\nFlow.Tuning = Tuning;\nFlow.Tuplet = Tuplet;\nFlow.Vibrato = Vibrato;\nFlow.VibratoBracket = VibratoBracket;\nFlow.Voice = Voice;\nFlow.Volta = Volta;\n// Exported Enums.\n// Sorted by the module / file they are exported from.\nFlow.AnnotationHorizontalJustify = AnnotationHorizontalJustify;\nFlow.AnnotationVerticalJustify = AnnotationVerticalJustify;\nFlow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify;\nFlow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify;\nFlow.SymbolTypes = SymbolTypes;\nFlow.SymbolModifiers = SymbolModifiers;\nFlow.CurvePosition = CurvePosition;\nFlow.FontWeight = FontWeight;\nFlow.FontStyle = FontStyle;\nFlow.ModifierPosition = ModifierPosition;\nFlow.RendererBackends = RendererBackends;\nFlow.RendererLineEndType = RendererLineEndType;\nFlow.BarlineType = BarlineType;\nFlow.StaveModifierPosition = StaveModifierPosition;\nFlow.VoltaType = VoltaType;\nFlow.TextBracketPosition = TextBracketPosition;\nFlow.TextJustification = TextJustification;\nFlow.VoiceMode = VoiceMode;\n","export const VERSION = '4.2.0-beta.1';\nexport const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341';\nexport const DATE = '2023-01-10T00:21:01.976Z';\n","export const BravuraFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 469,\n y_min: 0,\n y_max: 295,\n ha: 295,\n o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 469,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 36,\n y_min: 868,\n y_max: 1120,\n ha: 252,\n o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 500,\n y_min: 0,\n y_max: 502,\n ha: 502,\n o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z',\n },\n segno: {\n x_min: 4,\n x_max: 550,\n y_min: -27,\n y_max: 759,\n ha: 786,\n o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z',\n },\n coda: {\n x_min: -4,\n x_max: 955,\n y_min: -158,\n y_max: 898,\n ha: 1056,\n o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z',\n },\n gClef: {\n x_min: 0,\n x_max: 671,\n y_min: -658,\n y_max: 1098,\n ha: 1756,\n o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z',\n },\n cClef: {\n x_min: 0,\n x_max: 699,\n y_min: -506,\n y_max: 506,\n ha: 1012,\n o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z',\n },\n fClef: {\n x_min: -5,\n x_max: 684,\n y_min: -635,\n y_max: 262,\n ha: 897,\n o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 382,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z',\n },\n '6stringTabClef': {\n x_min: -3,\n x_max: 408,\n y_min: -748,\n y_max: 764,\n ha: 1512,\n o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 314,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 426,\n y_min: -257,\n y_max: 254,\n ha: 511,\n o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 401,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 450,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 383,\n y_min: -251,\n y_max: 246,\n ha: 497,\n o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 421,\n y_min: -250,\n y_max: 249,\n ha: 499,\n o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 416,\n y_min: -259,\n y_max: 259,\n ha: 518,\n o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 414,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z',\n },\n timeSigCommon: {\n x_min: 5,\n x_max: 424,\n y_min: -249,\n y_max: 251,\n ha: 500,\n o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 418,\n y_min: -359,\n y_max: 361,\n ha: 720,\n o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z',\n },\n timeSigPlus: {\n x_min: -1,\n x_max: 499,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z',\n },\n timeSigPlusSmall: {\n x_min: -1,\n x_max: 255,\n y_min: -133,\n y_max: 123,\n ha: 256,\n o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 448,\n y_min: -35,\n y_max: 40,\n ha: 75,\n o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z',\n },\n timeSigParensLeft: {\n x_min: 0,\n x_max: 184,\n y_min: -489,\n y_max: 491,\n ha: 980,\n o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 110,\n y_min: -251,\n y_max: 249,\n ha: 500,\n o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 599,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 295,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 546,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 377,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 290,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 422,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 249,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 603,\n y_min: -218,\n y_max: 213,\n ha: 431,\n o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z',\n },\n noteheadCircledWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -225,\n y_max: 211,\n ha: 436,\n o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z',\n },\n noteheadCircledHalf: {\n x_min: -18,\n x_max: 311,\n y_min: -162,\n y_max: 167,\n ha: 329,\n o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z',\n },\n noteheadCircledBlack: {\n x_min: -21,\n x_max: 321,\n y_min: -171,\n y_max: 167,\n ha: 338,\n o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 416,\n y_min: -190,\n y_max: 198,\n ha: 388,\n o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 313,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 292,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 207 -180 l 420 180 l 0 180 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 483,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 319,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 285,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 293,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 422 -180 l 207 180 l 0 -180 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 596,\n y_min: -179,\n y_max: 168,\n ha: 347,\n o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z',\n },\n noteheadSlashedWhole1: {\n x_min: -22,\n x_max: 433,\n y_min: -157,\n y_max: 148,\n ha: 305,\n o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z',\n },\n noteheadSlashedHalf1: {\n x_min: -67,\n x_max: 386,\n y_min: -142,\n y_max: 160,\n ha: 302,\n o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z',\n },\n noteheadSlashedBlack1: {\n x_min: -80,\n x_max: 375,\n y_min: -165,\n y_max: 167,\n ha: 332,\n o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 596,\n y_min: -178,\n y_max: 169,\n ha: 347,\n o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z',\n },\n noteheadSlashedWhole2: {\n x_min: -18,\n x_max: 436,\n y_min: -154,\n y_max: 151,\n ha: 305,\n o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 380,\n y_min: -134,\n y_max: 168,\n ha: 302,\n o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z',\n },\n noteheadSlashedBlack2: {\n x_min: -79,\n x_max: 376,\n y_min: -164,\n y_max: 168,\n ha: 332,\n o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 432,\n y_min: -155,\n y_max: 155,\n ha: 310,\n o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 270,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 251,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 250,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z',\n },\n noteheadParenthesis: {\n x_min: -73,\n x_max: 368,\n y_min: -180,\n y_max: 182,\n ha: 362,\n o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z',\n },\n noteheadParenthesisRight: {\n x_min: -36,\n x_max: 73,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 109,\n y_min: -181,\n y_max: 181,\n ha: 362,\n o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 315,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 -180 l 0 180 l 0 -180 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 488 180 l 0 -180 l 488 -180 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 278,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z',\n },\n tremolo1: {\n x_min: -150,\n x_max: 150,\n y_min: -93,\n y_max: 94,\n ha: 187,\n o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 264,\n y_min: -810,\n y_max: 9,\n ha: 819,\n o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 306,\n y_min: -14,\n y_max: 808,\n ha: 822,\n o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -813,\n y_max: 2,\n ha: 815,\n o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 291,\n y_min: -9,\n y_max: 812,\n ha: 821,\n o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 149,\n ha: 961,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 273,\n y_min: -172,\n y_max: 812,\n ha: 984,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 347,\n ha: 1159,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -376,\n y_max: 812,\n ha: 1188,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -812,\n y_max: 533,\n ha: 1345,\n o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 273,\n y_min: -580,\n y_max: 812,\n ha: 1392,\n o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 226,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 168,\n y_min: -335,\n y_max: 341,\n ha: 676,\n o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 249,\n y_min: -348,\n y_max: 350,\n ha: 698,\n o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 247,\n y_min: -125,\n y_max: 127,\n ha: 252,\n o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 411,\n y_min: -175,\n y_max: 437,\n ha: 612,\n o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 141,\n y_min: -248,\n y_max: 247,\n ha: 495,\n o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 1,\n x_max: 227,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 1,\n x_max: 466,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 179,\n y_min: -353,\n y_max: 307,\n ha: 660,\n o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 3,\n x_max: 317,\n y_min: -347,\n y_max: 369,\n ha: 716,\n o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 1,\n x_max: 287,\n y_min: -174,\n y_max: 438,\n ha: 612,\n o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z',\n },\n accidentalBakiyeFlat: {\n x_min: -1,\n x_max: 286,\n y_min: -175,\n y_max: 439,\n ha: 614,\n o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 229,\n y_min: -337,\n y_max: 322,\n ha: 659,\n o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1,\n x_max: 339,\n y_min: -338,\n y_max: 321,\n ha: 659,\n o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 300,\n y_min: -472,\n y_max: 157,\n ha: 629,\n o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 421,\n y_min: -318,\n y_max: 328,\n ha: 646,\n o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 339,\n y_min: 1,\n y_max: 245,\n ha: 244,\n o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 339,\n y_min: -244,\n y_max: 0,\n ha: 244,\n o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z',\n },\n articTenutoAbove: {\n x_min: -1,\n x_max: 338,\n y_min: 0,\n y_max: 48,\n ha: 48,\n o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z',\n },\n articTenutoBelow: {\n x_min: -1,\n x_max: 338,\n y_min: -48,\n y_max: 0,\n ha: 48,\n o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 84,\n y_min: 0,\n y_max: 84,\n ha: 84,\n o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 84,\n y_min: -84,\n y_max: 0,\n ha: 84,\n o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z',\n },\n articStaccatissimoAbove: {\n x_min: 1,\n x_max: 100,\n y_min: -2,\n y_max: 293,\n ha: 295,\n o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z',\n },\n articStaccatissimoBelow: {\n x_min: 1,\n x_max: 100,\n y_min: -295,\n y_max: 0,\n ha: 295,\n o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z',\n },\n articMarcatoAbove: {\n x_min: -1,\n x_max: 235,\n y_min: -1,\n y_max: 253,\n ha: 254,\n o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z',\n },\n articMarcatoBelow: {\n x_min: -1,\n x_max: 235,\n y_min: -254,\n y_max: 0,\n ha: 254,\n o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z',\n },\n fermataAbove: {\n x_min: 3,\n x_max: 605,\n y_min: -3,\n y_max: 329,\n ha: 332,\n o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z',\n },\n fermataBelow: {\n x_min: 3,\n x_max: 605,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 603,\n y_min: -1,\n y_max: 333,\n ha: 334,\n o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 603,\n y_min: -333,\n y_max: 1,\n ha: 334,\n o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: 0,\n y_max: 408,\n ha: 408,\n o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 715,\n y_min: -408,\n y_max: 0,\n ha: 408,\n o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 726,\n y_min: 0,\n y_max: 449,\n ha: 449,\n o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 726,\n y_min: -449,\n y_max: 0,\n ha: 449,\n o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 604,\n y_min: 0,\n y_max: 341,\n ha: 341,\n o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 604,\n y_min: -341,\n y_max: 0,\n ha: 341,\n o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z',\n },\n breathMarkComma: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n breathMarkUpbow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n caesura: {\n x_min: 0,\n x_max: 384,\n y_min: -1,\n y_max: 532,\n ha: 533,\n o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 373,\n y_min: 0,\n y_max: 530,\n ha: 530,\n o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 381,\n y_min: -249,\n y_max: 250,\n ha: 499,\n o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: 0,\n y_max: 250,\n ha: 250,\n o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 282,\n y_min: -135,\n y_max: 9,\n ha: 144,\n o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z',\n },\n restWholeLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -135,\n y_max: 20,\n ha: 155,\n o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -2,\n y_max: 142,\n ha: 144,\n o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z',\n },\n restHalfLegerLine: {\n x_min: -117,\n x_max: 399,\n y_min: -13,\n y_max: 142,\n ha: 155,\n o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z',\n },\n restQuarter: {\n x_min: 1,\n x_max: 270,\n y_min: -375,\n y_max: 373,\n ha: 748,\n o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 247,\n y_min: -251,\n y_max: 174,\n ha: 425,\n o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 320,\n y_min: -500,\n y_max: 179,\n ha: 679,\n o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 363,\n y_min: -500,\n y_max: 426,\n ha: 926,\n o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -753,\n y_max: 430,\n ha: 1183,\n o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 485,\n y_min: -750,\n y_max: 689,\n ha: 1439,\n o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z',\n },\n dynamicPiano: {\n x_min: -89,\n x_max: 366,\n y_min: -142,\n y_max: 274,\n ha: 416,\n o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z',\n },\n dynamicMezzo: {\n x_min: -20,\n x_max: 446,\n y_min: -10,\n y_max: 274,\n ha: 284,\n o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z',\n },\n dynamicForte: {\n x_min: -141,\n x_max: 364,\n y_min: -152,\n y_max: 444,\n ha: 596,\n o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z',\n },\n dynamicRinforzando: {\n x_min: -20,\n x_max: 277,\n y_min: 0,\n y_max: 274,\n ha: 274,\n o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 229,\n y_min: -10,\n y_max: 273,\n ha: 283,\n o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z',\n },\n dynamicZ: {\n x_min: -30,\n x_max: 244,\n y_min: -10,\n y_max: 268,\n ha: 278,\n o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z',\n },\n ornamentTrill: {\n x_min: 0,\n x_max: 521,\n y_min: -10,\n y_max: 390,\n ha: 400,\n o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 460,\n y_min: 0,\n y_max: 218,\n ha: 218,\n o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 460,\n y_min: -90,\n y_max: 306,\n ha: 396,\n o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z',\n },\n ornamentMordent: {\n x_min: 1,\n x_max: 729,\n y_min: -73,\n y_max: 319,\n ha: 392,\n o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 725,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z',\n },\n ornamentTremblement: {\n x_min: 1,\n x_max: 985,\n y_min: 0,\n y_max: 244,\n ha: 244,\n o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1119,\n y_min: 0,\n y_max: 481,\n ha: 481,\n o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 2,\n x_max: 1150,\n y_min: -367,\n y_max: 245,\n ha: 612,\n o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1048,\n y_min: -367,\n y_max: 331,\n ha: 698,\n o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 949,\n y_min: 0,\n y_max: 381,\n ha: 381,\n o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1278,\n y_min: 0,\n y_max: 247,\n ha: 247,\n o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1277,\n y_min: -62,\n y_max: 333,\n ha: 395,\n o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 859,\n y_min: -222,\n y_max: 246,\n ha: 468,\n o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z',\n },\n brassScoop: {\n x_min: 1,\n x_max: 320,\n y_min: -373,\n y_max: 13,\n ha: 386,\n o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 489,\n y_min: -40,\n y_max: 346,\n ha: 386,\n o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z',\n },\n brassFallLipShort: {\n x_min: 1,\n x_max: 293,\n y_min: -345,\n y_max: 42,\n ha: 387,\n o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 811,\n y_min: 0,\n y_max: 852,\n ha: 852,\n o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 392,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 304,\n y_min: 0,\n y_max: 304,\n ha: 304,\n o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 379,\n y_min: 0,\n y_max: 282,\n ha: 282,\n o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 620,\n y_min: 0,\n y_max: 245,\n ha: 245,\n o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z',\n },\n brassSmear: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 170,\n ha: 170,\n o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 318,\n ha: 318,\n o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z',\n },\n stringsUpBow: {\n x_min: 1,\n x_max: 249,\n y_min: 1,\n y_max: 495,\n ha: 494,\n o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 200,\n ha: 200,\n o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 200,\n y_min: 0,\n y_max: 300,\n ha: 300,\n o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 272,\n y_min: 0,\n y_max: 272,\n ha: 272,\n o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 1019,\n y_min: -8,\n y_max: 555,\n ha: 563,\n o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 450,\n y_min: 0,\n y_max: 450,\n ha: 450,\n o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 152,\n y_min: 2,\n y_max: 251,\n ha: 249,\n o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -33,\n x_max: 292,\n y_min: 0,\n y_max: 119,\n ha: 119,\n o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z',\n },\n arrowheadBlackUp: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z',\n },\n arrowheadBlackDown: {\n x_min: 0,\n x_max: 228,\n y_min: 0,\n y_max: 299,\n ha: 299,\n o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z',\n },\n arpeggiatoUp: {\n x_min: 1,\n x_max: 229,\n y_min: 7,\n y_max: 1511,\n ha: 1504,\n o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z',\n },\n arpeggiatoDown: {\n x_min: 1,\n x_max: 229,\n y_min: -4,\n y_max: 1500,\n ha: 1504,\n o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 762,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1232,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 532,\n y_min: -250,\n y_max: 279,\n ha: 529,\n o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z',\n },\n csymHalfDiminished: {\n x_min: -16,\n x_max: 488,\n y_min: -15,\n y_max: 489,\n ha: 504,\n o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 395,\n y_min: 1,\n y_max: 396,\n ha: 395,\n o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 558,\n y_min: 1,\n y_max: 477,\n ha: 476,\n o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 325,\n y_min: 216,\n y_max: 260,\n ha: 44,\n o: 'm 468 374 l 0 374 l 0 311 l 468 311 z',\n },\n csymParensLeftTall: {\n x_min: 1,\n x_max: 185,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z',\n },\n csymParensRightTall: {\n x_min: -20,\n x_max: 164,\n y_min: 0,\n y_max: 997,\n ha: 997,\n o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 155,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 156,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z',\n },\n csymParensRightVeryTall: {\n x_min: -15,\n x_max: 107,\n y_min: 0,\n y_max: 993,\n ha: 993,\n o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 999,\n y_min: 0,\n y_max: 1000,\n ha: 1000,\n o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z',\n },\n accSagittal5v7KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z',\n },\n accSagittal5v7KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z',\n },\n accSagittal5CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z',\n },\n accSagittal5CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z',\n },\n accSagittal7CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z',\n },\n accSagittal7CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal25SmallDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z',\n },\n accSagittal25SmallDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z',\n },\n accSagittal35MediumDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z',\n },\n accSagittal35MediumDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal11MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z',\n },\n accSagittal11MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z',\n },\n accSagittal11LargeDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal11LargeDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal35LargeDiesisDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp25SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z',\n },\n accSagittalFlat25SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z',\n },\n accSagittalSharp7CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z',\n },\n accSagittalFlat7CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp5CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z',\n },\n accSagittalSharp5v7kDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z',\n },\n accSagittalFlat5v7kUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z',\n },\n accSagittalSharp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z',\n },\n accSagittalSharp5v7kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -361,\n y_max: 172,\n ha: 533,\n o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z',\n },\n accSagittalFlat5v7kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 361,\n ha: 533,\n o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z',\n },\n accSagittalSharp5CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z',\n },\n accSagittalFlat5CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z',\n },\n accSagittalSharp7CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z',\n },\n accSagittalFlat7CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z',\n },\n accSagittalSharp25SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z',\n },\n accSagittalFlat25SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z',\n },\n accSagittalSharp35MUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z',\n },\n accSagittalFlat35MDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z',\n },\n accSagittalSharp11MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z',\n },\n accSagittalFlat11MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z',\n },\n accSagittalSharp11LUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11LDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp35LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat35LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp25SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z',\n },\n accSagittalDoubleFlat25SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z',\n },\n accSagittalDoubleSharp7CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z',\n },\n accSagittalDoubleFlat7CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z',\n },\n accSagittalDoubleSharp5CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z',\n },\n accSagittalDoubleFlat5CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z',\n },\n accSagittalDoubleSharp5v7kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z',\n },\n accSagittalDoubleFlat5v7kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z',\n },\n accSagittalDoubleSharp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z',\n },\n accSagittalDoubleFlat: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z',\n },\n accSagittal7v11KleismaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z',\n },\n accSagittal7v11KleismaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal55CommaUp: {\n x_min: 0,\n x_max: 219,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z',\n },\n accSagittal55CommaDown: {\n x_min: 0,\n x_max: 219,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z',\n },\n accSagittal7v11CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z',\n },\n accSagittal7v11CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittal5v11SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z',\n },\n accSagittal5v11SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat5v11SUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z',\n },\n accSagittalFlat7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z',\n },\n accSagittalSharp55CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z',\n },\n accSagittalFlat55CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z',\n },\n accSagittalSharp17CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z',\n },\n accSagittalFlat17CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z',\n },\n accSagittalSharp7v11kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z',\n },\n accSagittalFlat7v11kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z',\n },\n accSagittalSharp7v11kUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z',\n },\n accSagittalFlat7v11kDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z',\n },\n accSagittalSharp17CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp55CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z',\n },\n accSagittalFlat55CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z',\n },\n accSagittalSharp7v11CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z',\n },\n accSagittalFlat7v11CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z',\n },\n accSagittalSharp5v11SUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z',\n },\n accSagittalFlat5v11SDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalDoubleSharp5v11SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat5v11SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp7v11CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z',\n },\n accSagittalDoubleFlat7v11CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z',\n },\n accSagittalDoubleSharp55CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z',\n },\n accSagittalDoubleFlat55CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z',\n },\n accSagittalDoubleSharp17CDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z',\n },\n accSagittalDoubleFlat17CUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z',\n },\n accSagittalDoubleSharp7v11kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat7v11kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittal23CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z',\n },\n accSagittal23CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z',\n },\n accSagittal5v19CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z',\n },\n accSagittal5v19CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittal5v23SmallDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z',\n },\n accSagittal5v23SmallDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z',\n },\n accSagittalSharp5v23SDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z',\n },\n accSagittalFlat5v23SUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z',\n },\n accSagittalFlat5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z',\n },\n accSagittalFlat23CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z',\n },\n accSagittalSharp23CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z',\n },\n accSagittalFlat23CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v19CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalFlat5v19CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z',\n },\n accSagittalSharp5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalFlat5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z',\n },\n accSagittalDoubleSharp5v23SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z',\n },\n accSagittalDoubleFlat5v23SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z',\n },\n accSagittalDoubleSharp5v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z',\n },\n accSagittalDoubleFlat5v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z',\n },\n accSagittalDoubleSharp23CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z',\n },\n accSagittalDoubleFlat23CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z',\n },\n accSagittal19SchismaUp: {\n x_min: 0,\n x_max: 125,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z',\n },\n accSagittal19SchismaDown: {\n x_min: 0,\n x_max: 125,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z',\n },\n accSagittal17KleismaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal17KleismaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal143CommaUp: {\n x_min: 0,\n x_max: 156,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z',\n },\n accSagittal143CommaDown: {\n x_min: 0,\n x_max: 156,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal11v49CommaUp: {\n x_min: 0,\n x_max: 188,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z',\n },\n accSagittal11v49CommaDown: {\n x_min: 0,\n x_max: 188,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z',\n },\n accSagittal19CommaUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal19CommaDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal7v19CommaUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z',\n },\n accSagittal7v19CommaDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z',\n },\n accSagittal49SmallDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal49SmallDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal23SmallDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z',\n },\n accSagittal23SmallDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z',\n },\n accSagittal5v13MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z',\n },\n accSagittal5v13MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z',\n },\n accSagittal11v19MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z',\n },\n accSagittal11v19MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z',\n },\n accSagittal49MediumDiesisUp: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z',\n },\n accSagittal49MediumDiesisDown: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z',\n },\n accSagittal5v49MediumDiesisUp: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z',\n },\n accSagittal5v49MediumDiesisDown: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z',\n },\n accSagittal49LargeDiesisUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z',\n },\n accSagittal49LargeDiesisDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z',\n },\n accSagittal11v19LargeDiesisUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z',\n },\n accSagittal11v19LargeDiesisDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z',\n },\n accSagittal5v13LargeDiesisUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z',\n },\n accSagittal5v13LargeDiesisDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z',\n },\n accSagittalSharp23SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z',\n },\n accSagittalFlat23SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp49SDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z',\n },\n accSagittalFlat49SUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalSharp7v19CDown: {\n x_min: 0,\n x_max: 250,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z',\n },\n accSagittalFlat7v19CUp: {\n x_min: 0,\n x_max: 250,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z',\n },\n accSagittalSharp19CDown: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z',\n },\n accSagittalFlat19CUp: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z',\n },\n accSagittalSharp11v49CDown: {\n x_min: 0,\n x_max: 344,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat11v49CUp: {\n x_min: 0,\n x_max: 344,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z',\n },\n accSagittalSharp143CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z',\n },\n accSagittalFlat143CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z',\n },\n accSagittalSharp17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z',\n },\n accSagittalFlat17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z',\n },\n accSagittalSharp19sDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z',\n },\n accSagittalFlat19sUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z',\n },\n accSagittalSharp19sUp: {\n x_min: 0,\n x_max: 281,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z',\n },\n accSagittalFlat19sDown: {\n x_min: 0,\n x_max: 281,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z',\n },\n accSagittalSharp17kUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat17kDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp143CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalFlat143CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp11v49CUp: {\n x_min: 0,\n x_max: 312,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z',\n },\n accSagittalFlat11v49CDown: {\n x_min: 0,\n x_max: 312,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z',\n },\n accSagittalSharp19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalSharp49SUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat49SDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp23SUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalFlat23SDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalSharp5v13MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z',\n },\n accSagittalFlat5v13MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z',\n },\n accSagittalSharp11v19MUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalFlat11v19MDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z',\n },\n accSagittalSharp49MUp: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z',\n },\n accSagittalFlat49MDown: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z',\n },\n accSagittalSharp5v49MUp: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z',\n },\n accSagittalFlat5v49MDown: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z',\n },\n accSagittalSharp49LUp: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z',\n },\n accSagittalFlat49LDown: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z',\n },\n accSagittalSharp11v19LUp: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z',\n },\n accSagittalFlat11v19LDown: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z',\n },\n accSagittalSharp5v13LUp: {\n x_min: 0,\n x_max: 500,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z',\n },\n accSagittalFlat5v13LDown: {\n x_min: 0,\n x_max: 500,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z',\n },\n accSagittalDoubleSharp23SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z',\n },\n accSagittalDoubleFlat23SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z',\n },\n accSagittalDoubleSharp49SDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z',\n },\n accSagittalDoubleFlat49SUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z',\n },\n accSagittalDoubleSharp7v19CDown: {\n x_min: 0,\n x_max: 375,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z',\n },\n accSagittalDoubleFlat7v19CUp: {\n x_min: 0,\n x_max: 375,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z',\n },\n accSagittalDoubleSharp19CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z',\n },\n accSagittalDoubleFlat19CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z',\n },\n accSagittalDoubleSharp11v49CDown: {\n x_min: 0,\n x_max: 406,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat11v49CUp: {\n x_min: 0,\n x_max: 406,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp143CDown: {\n x_min: 0,\n x_max: 469,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z',\n },\n accSagittalDoubleFlat143CUp: {\n x_min: 0,\n x_max: 469,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z',\n },\n accSagittalDoubleSharp17kDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z',\n },\n accSagittalDoubleFlat17kUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z',\n },\n accSagittalDoubleSharp19sDown: {\n x_min: 0,\n x_max: 438,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z',\n },\n accSagittalDoubleFlat19sUp: {\n x_min: 0,\n x_max: 438,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z',\n },\n accSagittalShaftUp: {\n x_min: 0,\n x_max: 31,\n y_min: -359,\n y_max: 172,\n ha: 531,\n o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z',\n },\n accSagittalShaftDown: {\n x_min: 0,\n x_max: 31,\n y_min: -172,\n y_max: 359,\n ha: 531,\n o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z',\n },\n accSagittalAcute: {\n x_min: 0,\n x_max: 125,\n y_min: -62,\n y_max: 125,\n ha: 187,\n o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z',\n },\n accSagittalGrave: {\n x_min: 0,\n x_max: 125,\n y_min: -125,\n y_max: 62,\n ha: 187,\n o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z',\n },\n accSagittal1MinaUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal1MinaDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal2MinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal2MinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal1TinaUp: {\n x_min: 0,\n x_max: 93,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z',\n },\n accSagittal1TinaDown: {\n x_min: 0,\n x_max: 93,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z',\n },\n accSagittal2TinasUp: {\n x_min: 0,\n x_max: 94,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal2TinasDown: {\n x_min: 0,\n x_max: 94,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z',\n },\n accSagittal3TinasUp: {\n x_min: -7,\n x_max: 124,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal3TinasDown: {\n x_min: -7,\n x_max: 124,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal4TinasUp: {\n x_min: 0,\n x_max: 187,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal4TinasDown: {\n x_min: 0,\n x_max: 187,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal5TinasUp: {\n x_min: 0,\n x_max: 218,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal5TinasDown: {\n x_min: 0,\n x_max: 218,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal6TinasUp: {\n x_min: -7,\n x_max: 218,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal6TinasDown: {\n x_min: -7,\n x_max: 218,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittal7TinasUp: {\n x_min: 0,\n x_max: 281,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z',\n },\n accSagittal7TinasDown: {\n x_min: 0,\n x_max: 281,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z',\n },\n accSagittal8TinasUp: {\n x_min: 0,\n x_max: 312,\n y_min: 16,\n y_max: 107,\n ha: 91,\n o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z',\n },\n accSagittal8TinasDown: {\n x_min: 0,\n x_max: 312,\n y_min: -107,\n y_max: -16,\n ha: 91,\n o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z',\n },\n accSagittal9TinasUp: {\n x_min: -7,\n x_max: 312,\n y_min: 16,\n y_max: 106,\n ha: 90,\n o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z',\n },\n accSagittal9TinasDown: {\n x_min: -7,\n x_max: 312,\n y_min: -106,\n y_max: -16,\n ha: 90,\n o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z',\n },\n accSagittalFractionalTinaUp: {\n x_min: -3,\n x_max: 35,\n y_min: 73,\n y_max: 111,\n ha: 38,\n o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z',\n },\n accSagittalFractionalTinaDown: {\n x_min: -3,\n x_max: 35,\n y_min: -111,\n y_max: -73,\n ha: 38,\n o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 164,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 414,\n y_min: -194,\n y_max: 421,\n ha: 615,\n o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 281,\n y_min: -203,\n y_max: 203,\n ha: 406,\n o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 281,\n y_min: -186,\n y_max: 186,\n ha: 372,\n o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z',\n },\n },\n fontFamily: 'Bravura',\n resolution: 1000,\n generatedOn: '2022-12-18T09:06:51.407Z',\n};\n","/**\n * The Bravura font was created by Daniel Spreadbury @ Steinberg.\n * https://github.com/steinbergmedia/bravura/\n */\nexport const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature object\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const CustomFont = {\n resolution: 1000,\n fontFamily: 'VexFlowCustom',\n glyphs: {\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 386,\n o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -171.5,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalBakiyeFlat: {\n x_min: -176.9375,\n x_max: 251.8125,\n ha: 257,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ',\n },\n accidentalKucukMucennebSharp: {\n x_min: -1.359375,\n x_max: 255.890625,\n ha: 261,\n o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ',\n },\n accidentalKoron: {\n x_min: -20,\n x_max: 320,\n ha: 257,\n o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ',\n },\n accidentalSori: {\n x_min: -10.890625,\n x_max: 299.4375,\n ha: 294,\n o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ',\n },\n vexAccidentalMicrotonal1: {\n x_min: -171.5,\n x_max: 483.1875,\n ha: 493,\n o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ',\n },\n vexAccidentalMicrotonal2: {\n x_min: -1.359375,\n x_max: 386.5625,\n ha: 394,\n o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ',\n },\n vexAccidentalMicrotonal3: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ',\n },\n vexAccidentalMicrotonal4: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ',\n },\n vexNoteHeadRectBlack: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ',\n },\n vexNoteHeadRectWhite: {\n x_min: 0,\n x_max: 430.75,\n ha: 360,\n o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100',\n },\n vexWiggleArpeggioUp: {\n x_min: 58.53125,\n x_max: 228.671875,\n ha: 294,\n o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ',\n },\n },\n};\n","export const CustomMetrics = {\n name: 'VexFlowCustom',\n smufl: false,\n glyphs: {},\n};\n","export const GonvilleSmuflFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 387,\n y_min: -87,\n y_max: 139,\n ha: 226,\n o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 387,\n y_min: -139,\n y_max: 87,\n ha: 226,\n o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z',\n },\n barlineTick: {\n x_min: -55,\n x_max: 55,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z',\n },\n breathMarkTick: {\n x_min: -142,\n x_max: 256,\n y_min: 0,\n y_max: 403,\n ha: 403,\n o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z',\n },\n segno: {\n x_min: -228,\n x_max: 228,\n y_min: -329,\n y_max: 329,\n ha: 657,\n o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z',\n },\n coda: {\n x_min: -215,\n x_max: 215,\n y_min: -264,\n y_max: 264,\n ha: 529,\n o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z',\n },\n gClef: {\n x_min: 0,\n x_max: 586,\n y_min: -594,\n y_max: 1017,\n ha: 1611,\n o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z',\n },\n cClef: {\n x_min: 0,\n x_max: 604,\n y_min: -477,\n y_max: 477,\n ha: 955,\n o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z',\n },\n fClef: {\n x_min: 0,\n x_max: 622,\n y_min: -512,\n y_max: 238,\n ha: 750,\n o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z',\n },\n unpitchedPercussionClef1: {\n x_min: 160,\n x_max: 481,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 471,\n y_min: -691,\n y_max: 707,\n ha: 1398,\n o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z',\n },\n timeSig0: {\n x_min: 0,\n x_max: 357,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z',\n },\n timeSig1: {\n x_min: 0,\n x_max: 239,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z',\n },\n timeSig2: {\n x_min: 0,\n x_max: 317,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z',\n },\n timeSig3: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z',\n },\n timeSig4: {\n x_min: 0,\n x_max: 325,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z',\n },\n timeSig5: {\n x_min: 0,\n x_max: 284,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z',\n },\n timeSig6: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSig7: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z',\n },\n timeSig8: {\n x_min: 0,\n x_max: 338,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z',\n },\n timeSig9: {\n x_min: 0,\n x_max: 328,\n y_min: 0,\n y_max: 457,\n ha: 457,\n o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -219,\n y_max: 219,\n ha: 438,\n o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 385,\n y_min: -371,\n y_max: 371,\n ha: 741,\n o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 221,\n y_min: 125,\n y_max: 346,\n ha: 221,\n o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 221,\n y_min: 214,\n y_max: 256,\n ha: 43,\n o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z',\n },\n timeSigParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensRightSmall: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n timeSigParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n timeSigParensLeftSmall: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 623,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 427,\n y_min: -127,\n y_max: 127,\n ha: 253,\n o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 297,\n y_min: -126,\n y_max: 126,\n ha: 253,\n o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 414,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 282,\n y_min: -125,\n y_max: 125,\n ha: 249,\n o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 336,\n y_min: -168,\n y_max: 168,\n ha: 335,\n o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -140,\n y_max: 140,\n ha: 280,\n o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 302,\n y_min: -140,\n y_max: 140,\n ha: 279,\n o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 435,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 303,\n y_min: -130,\n y_max: 130,\n ha: 260,\n o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z',\n },\n augmentationDot: {\n x_min: -59,\n x_max: 59,\n y_min: -59,\n y_max: 59,\n ha: 118,\n o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z',\n },\n tremolo1: {\n x_min: -143,\n x_max: 297,\n y_min: -550,\n y_max: -237,\n ha: 313,\n o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z',\n },\n flag8thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -700,\n y_max: -4,\n ha: 696,\n o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z',\n },\n flag8thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z',\n },\n flag16thUp: {\n x_min: -16,\n x_max: 220,\n y_min: -796,\n y_max: -4,\n ha: 793,\n o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z',\n },\n flag16thDown: {\n x_min: -14,\n x_max: 251,\n y_min: 4,\n y_max: 700,\n ha: 697,\n o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z',\n },\n flag32ndUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1039,\n y_max: -4,\n ha: 1035,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z',\n },\n flag32ndDown: {\n x_min: -14,\n x_max: 253,\n y_min: 4,\n y_max: 935,\n ha: 931,\n o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z',\n },\n flag64thUp: {\n x_min: -16,\n x_max: 219,\n y_min: -1159,\n y_max: -4,\n ha: 1156,\n o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z',\n },\n flag64thDown: {\n x_min: -14,\n x_max: 255,\n y_min: 3,\n y_max: 1053,\n ha: 1049,\n o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z',\n },\n flag128thUp: {\n x_min: -16,\n x_max: 217,\n y_min: -1398,\n y_max: -4,\n ha: 1395,\n o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z',\n },\n flag128thDown: {\n x_min: -14,\n x_max: 254,\n y_min: 4,\n y_max: 1288,\n ha: 1284,\n o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z',\n },\n accidentalFlat: {\n x_min: -14,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 166,\n y_min: -314,\n y_max: 314,\n ha: 627,\n o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 225,\n y_min: -364,\n y_max: 364,\n ha: 729,\n o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 255,\n y_min: -127,\n y_max: 127,\n ha: 255,\n o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z',\n },\n accidentalDoubleFlat: {\n x_min: -14,\n x_max: 334,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z',\n },\n accidentalParensLeft: {\n x_min: -115,\n x_max: -18,\n y_min: -251,\n y_max: 251,\n ha: 502,\n o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z',\n },\n accidentalParensRight: {\n x_min: 18,\n x_max: 115,\n y_min: -251,\n y_max: 251,\n ha: 503,\n o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 188,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 419,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 315,\n y_min: -368,\n y_max: 368,\n ha: 735,\n o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: -117,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalBakiyeFlat: {\n x_min: -121,\n x_max: 174,\n y_min: -155,\n y_max: 429,\n ha: 584,\n o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 134,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 176,\n y_min: -351,\n y_max: 351,\n ha: 702,\n o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z',\n },\n articAccentAbove: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articAccentBelow: {\n x_min: -241,\n x_max: 18,\n y_min: -107,\n y_max: 107,\n ha: 214,\n o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z',\n },\n articTenutoAbove: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articTenutoBelow: {\n x_min: -144,\n x_max: 144,\n y_min: -14,\n y_max: 14,\n ha: 29,\n o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z',\n },\n articStaccatoAbove: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatoBelow: {\n x_min: -46,\n x_max: 46,\n y_min: -46,\n y_max: 46,\n ha: 93,\n o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z',\n },\n articStaccatissimoAbove: {\n x_min: -50,\n x_max: 50,\n y_min: 0,\n y_max: 173,\n ha: 173,\n o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z',\n },\n articStaccatissimoBelow: {\n x_min: -50,\n x_max: 50,\n y_min: -173,\n y_max: 0,\n ha: 173,\n o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z',\n },\n articMarcatoAbove: {\n x_min: -107,\n x_max: 107,\n y_min: -240,\n y_max: 18,\n ha: 259,\n o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z',\n },\n articMarcatoBelow: {\n x_min: -107,\n x_max: 107,\n y_min: -18,\n y_max: 241,\n ha: 259,\n o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z',\n },\n fermataAbove: {\n x_min: -305,\n x_max: 305,\n y_min: 0,\n y_max: 332,\n ha: 332,\n o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataBelow: {\n x_min: -305,\n x_max: 305,\n y_min: -332,\n y_max: 0,\n ha: 332,\n o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 342,\n ha: 342,\n o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -342,\n y_max: 0,\n ha: 342,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryLongAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 412,\n ha: 412,\n o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataVeryLongBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -412,\n y_max: 0,\n ha: 412,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n fermataVeryShortAbove: {\n x_min: -330,\n x_max: 330,\n y_min: 0,\n y_max: 536,\n ha: 536,\n o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z',\n },\n fermataVeryShortBelow: {\n x_min: -330,\n x_max: 330,\n y_min: -536,\n y_max: 0,\n ha: 536,\n o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z',\n },\n fermataShortAbove: {\n x_min: -269,\n x_max: 269,\n y_min: 0,\n y_max: 441,\n ha: 441,\n o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z',\n },\n fermataShortBelow: {\n x_min: -269,\n x_max: 269,\n y_min: -441,\n y_max: 0,\n ha: 441,\n o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n breathMarkUpbow: {\n x_min: -118,\n x_max: 118,\n y_min: 0,\n y_max: 385,\n ha: 385,\n o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z',\n },\n caesura: {\n x_min: 0,\n x_max: 430,\n y_min: -190,\n y_max: 284,\n ha: 474,\n o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 348,\n y_min: -195,\n y_max: 292,\n ha: 486,\n o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 801,\n y_min: -235,\n y_max: 235,\n ha: 470,\n o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 267,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 310,\n y_min: -118,\n y_max: 0,\n ha: 118,\n o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z',\n },\n restWholeLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -118,\n y_max: 11,\n ha: 128,\n o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 310,\n y_min: 0,\n y_max: 118,\n ha: 118,\n o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z',\n },\n restHalfLegerLine: {\n x_min: 0,\n x_max: 509,\n y_min: -11,\n y_max: 118,\n ha: 128,\n o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 208,\n y_min: -343,\n y_max: 343,\n ha: 686,\n o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 242,\n y_min: -185,\n y_max: 206,\n ha: 391,\n o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 312,\n y_min: -417,\n y_max: 206,\n ha: 623,\n o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 381,\n y_min: -417,\n y_max: 438,\n ha: 854,\n o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 451,\n y_min: -648,\n y_max: 438,\n ha: 1086,\n o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z',\n },\n rest128th: {\n x_min: 0,\n x_max: 520,\n y_min: -648,\n y_max: 669,\n ha: 1317,\n o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z',\n },\n dynamicPiano: {\n x_min: -36,\n x_max: 355,\n y_min: -168,\n y_max: 261,\n ha: 428,\n o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z',\n },\n dynamicMezzo: {\n x_min: 32,\n x_max: 463,\n y_min: -18,\n y_max: 256,\n ha: 274,\n o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z',\n },\n dynamicForte: {\n x_min: -81,\n x_max: 413,\n y_min: -171,\n y_max: 390,\n ha: 561,\n o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z',\n },\n dynamicRinforzando: {\n x_min: 55,\n x_max: 336,\n y_min: 0,\n y_max: 258,\n ha: 258,\n o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z',\n },\n dynamicSforzando: {\n x_min: 49,\n x_max: 262,\n y_min: -21,\n y_max: 254,\n ha: 274,\n o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z',\n },\n dynamicZ: {\n x_min: 22,\n x_max: 291,\n y_min: 2,\n y_max: 235,\n ha: 233,\n o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z',\n },\n ornamentTrill: {\n x_min: -234,\n x_max: 234,\n y_min: 0,\n y_max: 354,\n ha: 354,\n o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z',\n },\n ornamentTurn: {\n x_min: -292,\n x_max: 292,\n y_min: -134,\n y_max: 134,\n ha: 269,\n o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z',\n },\n ornamentTurnSlash: {\n x_min: -292,\n x_max: 292,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z',\n },\n ornamentMordent: {\n x_min: -278,\n x_max: 278,\n y_min: -202,\n y_max: 186,\n ha: 388,\n o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z',\n },\n ornamentShortTrill: {\n x_min: -278,\n x_max: 278,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z',\n },\n ornamentTremblement: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 119,\n ha: 238,\n o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: -394,\n x_max: 394,\n y_min: -119,\n y_max: 240,\n ha: 359,\n o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 119,\n ha: 348,\n o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: -407,\n x_max: 407,\n y_min: -229,\n y_max: 186,\n ha: 415,\n o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: -407,\n x_max: 407,\n y_min: -119,\n y_max: 229,\n ha: 348,\n o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: -413,\n x_max: 413,\n y_min: -119,\n y_max: 222,\n ha: 341,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: -413,\n x_max: 413,\n y_min: -202,\n y_max: 222,\n ha: 424,\n o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: -413,\n x_max: 413,\n y_min: -222,\n y_max: 119,\n ha: 341,\n o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z',\n },\n stringsDownBow: {\n x_min: -158,\n x_max: 158,\n y_min: 0,\n y_max: 331,\n ha: 331,\n o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z',\n },\n stringsUpBow: {\n x_min: -103,\n x_max: 103,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z',\n },\n stringsHarmonic: {\n x_min: -77,\n x_max: 77,\n y_min: -77,\n y_max: 77,\n ha: 154,\n o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: -103,\n x_max: 103,\n y_min: -103,\n y_max: 192,\n ha: 296,\n o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: -103,\n x_max: 103,\n y_min: -192,\n y_max: 103,\n ha: 296,\n o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: -146,\n x_max: 146,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 735,\n y_min: -1,\n y_max: 470,\n ha: 471,\n o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 409,\n y_min: 61,\n y_max: 470,\n ha: 409,\n o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z',\n },\n pictChokeCymbal: {\n x_min: 0,\n x_max: 158,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z',\n },\n arrowheadBlackUp: {\n x_min: 11,\n x_max: 239,\n y_min: -6,\n y_max: 269,\n ha: 275,\n o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z',\n },\n arrowheadBlackDown: {\n x_min: 11,\n x_max: 239,\n y_min: 6,\n y_max: 281,\n ha: 275,\n o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z',\n },\n },\n fontFamily: 'GonvilleSmufl',\n resolution: 1000,\n generatedOn: '2022-12-24T06:31:40.861Z',\n};\n","/**\n * The Gonville font was created by Simon Tatham.\n * https://www.chiark.greenend.org.uk/~sgtatham/gonville/\n */\nexport const GonvilleMetrics = {\n name: 'Gonville',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: 0,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: -40,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 40,\n advanceWidth: 250,\n yOffset: -402,\n },\n accidentalFlat: {\n leftSideBearing: -50,\n advanceWidth: 208,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n '8vb': {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 17,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -9,\n stemUpYOffset: 24,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 3,\n yOffset: -4,\n stemUpYOffset: 10,\n reportedWidth: 28,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 9,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 40,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n // articulation: {\n // },\n tremolo: {\n default: {\n point: 25,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 9,\n offsetXStemDown: -0.5,\n },\n grace: {\n point: 15,\n spacing: 4,\n offsetYStemUp: -7,\n offsetYStemDown: 7,\n offsetXStemUp: 6.5,\n offsetXStemDown: -0.5,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 0,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -1.5,\n offsetYBaseStemDown: 1.5,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n glyphs: {\n flag: {\n shiftX: -0.08,\n flag8thDown: {\n shiftX: -0.16,\n },\n flag16thDown: {\n shiftX: -0.16,\n },\n flag32ndDown: {\n shiftX: -0.16,\n shiftY: 9,\n },\n flag64thDown: {\n shiftX: -0.16,\n shiftY: 13,\n },\n flag128thDown: {\n shiftX: -0.16,\n shiftY: 22,\n },\n flag32ndUp: {\n shiftY: -9,\n },\n flag64thUp: {\n shiftY: -13,\n },\n flag128thUp: {\n shiftY: -22,\n },\n },\n clef_default: {\n point: 40,\n '6stringTabClef': {\n point: 40,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 32,\n },\n clefNote_default: {\n point: 40,\n },\n clefNote_small: {\n point: 32,\n },\n textNote: {\n point: 40,\n default: {},\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.95,\n },\n },\n ornament: {\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n tremolo: {\n default: {\n shiftY: -10,\n },\n grace: {\n shiftY: -5,\n },\n },\n },\n};\n","export const LelandFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 491,\n y_min: 0,\n y_max: 279,\n ha: 279,\n o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 491,\n y_min: -279,\n y_max: 0,\n ha: 279,\n o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z',\n },\n segno: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 869,\n ha: 869,\n o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z',\n },\n coda: {\n x_min: 0,\n x_max: 745,\n y_min: -113,\n y_max: 735,\n ha: 848,\n o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z',\n },\n gClef: {\n x_min: 0,\n x_max: 640,\n y_min: -666,\n y_max: 1112,\n ha: 1778,\n o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z',\n },\n cClef: {\n x_min: 0,\n x_max: 627,\n y_min: -480,\n y_max: 482,\n ha: 962,\n o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z',\n },\n fClef: {\n x_min: 0,\n x_max: 664,\n y_min: -617,\n y_max: 251,\n ha: 868,\n o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 352,\n y_min: -252,\n y_max: 252,\n ha: 504,\n o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 439,\n y_min: -743,\n y_max: 746,\n ha: 1489,\n o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z',\n },\n timeSig0: {\n x_min: 15,\n x_max: 389,\n y_min: -254,\n y_max: 255,\n ha: 509,\n o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z',\n },\n timeSig1: {\n x_min: 15,\n x_max: 336,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z',\n },\n timeSig2: {\n x_min: 15,\n x_max: 377,\n y_min: -243,\n y_max: 245,\n ha: 488,\n o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z',\n },\n timeSig3: {\n x_min: 15,\n x_max: 364,\n y_min: -244,\n y_max: 244,\n ha: 488,\n o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z',\n },\n timeSig4: {\n x_min: 14,\n x_max: 442,\n y_min: -248,\n y_max: 249,\n ha: 497,\n o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z',\n },\n timeSig5: {\n x_min: 15,\n x_max: 362,\n y_min: -244,\n y_max: 246,\n ha: 490,\n o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z',\n },\n timeSig6: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z',\n },\n timeSig7: {\n x_min: 15,\n x_max: 366,\n y_min: -250,\n y_max: 251,\n ha: 501,\n o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z',\n },\n timeSig8: {\n x_min: 15,\n x_max: 393,\n y_min: -248,\n y_max: 246,\n ha: 494,\n o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z',\n },\n timeSig9: {\n x_min: 15,\n x_max: 387,\n y_min: -244,\n y_max: 245,\n ha: 489,\n o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z',\n },\n timeSigCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -256,\n y_max: 258,\n ha: 514,\n o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z',\n },\n timeSigCutCommon: {\n x_min: 0,\n x_max: 463,\n y_min: -376,\n y_max: 388,\n ha: 764,\n o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 408,\n y_min: -204,\n y_max: 204,\n ha: 408,\n o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 538,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 325,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 325,\n y_min: -162,\n y_max: 163,\n ha: 325,\n o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 432,\n y_min: -179,\n y_max: 177,\n ha: 356,\n o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 223 176 l 0 -196 l 446 -196 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z',\n },\n noteheadSlashedWhole1: {\n x_min: -75,\n x_max: 448,\n y_min: -211,\n y_max: 214,\n ha: 425,\n o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z',\n },\n noteheadSlashedHalf1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z',\n },\n noteheadSlashedBlack1: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: -66,\n x_max: 456,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z',\n },\n noteheadSlashedWhole2: {\n x_min: -75,\n x_max: 448,\n y_min: -212,\n y_max: 214,\n ha: 426,\n o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z',\n },\n noteheadSlashedHalf2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z',\n },\n noteheadSlashedBlack2: {\n x_min: -98,\n x_max: 424,\n y_min: -213,\n y_max: 212,\n ha: 425,\n o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -178,\n y_max: 179,\n ha: 357,\n o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 373,\n y_min: -133,\n y_max: 132,\n ha: 265,\n o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 335,\n y_min: -132,\n y_max: 133,\n ha: 265,\n o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z',\n },\n noteheadParenthesisRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 0 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 339,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 488 176 l 0 -196 l 488 -196 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -136,\n y_max: 122,\n ha: 258,\n o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 100,\n y_min: -50,\n y_max: 50,\n ha: 100,\n o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z',\n },\n tremolo1: {\n x_min: 0,\n x_max: 290,\n y_min: -93,\n y_max: 96,\n ha: 189,\n o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 289,\n y_min: -817,\n y_max: 12,\n ha: 829,\n o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -12,\n y_max: 817,\n ha: 829,\n o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -820,\n y_max: 12,\n ha: 832,\n o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -26,\n y_max: 803,\n ha: 829,\n o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 186,\n ha: 1007,\n o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z',\n },\n flag32ndDown: {\n x_min: 0,\n x_max: 309,\n y_min: -216,\n y_max: 803,\n ha: 1019,\n o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z',\n },\n flag64thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -822,\n y_max: 373,\n ha: 1195,\n o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z',\n },\n flag64thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -403,\n y_max: 804,\n ha: 1207,\n o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 279,\n y_min: -821,\n y_max: 573,\n ha: 1394,\n o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z',\n },\n flag128thDown: {\n x_min: 0,\n x_max: 309,\n y_min: -591,\n y_max: 803,\n ha: 1394,\n o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z',\n },\n accidentalFlat: {\n x_min: 0,\n x_max: 203,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 171,\n y_min: -323,\n y_max: 325,\n ha: 648,\n o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z',\n },\n accidentalSharp: {\n x_min: 0,\n x_max: 244,\n y_min: -333,\n y_max: 334,\n ha: 667,\n o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 275,\n y_min: -137,\n y_max: 138,\n ha: 275,\n o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 371,\n y_min: -176,\n y_max: 453,\n ha: 629,\n o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 75,\n y_min: -212,\n y_max: 209,\n ha: 421,\n o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 75,\n y_min: -209,\n y_max: 212,\n ha: 421,\n o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 193,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 180,\n y_min: -316,\n y_max: 320,\n ha: 636,\n o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: 0,\n x_max: 290,\n y_min: -328,\n y_max: 339,\n ha: 667,\n o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalBakiyeFlat: {\n x_min: 0,\n x_max: 277,\n y_min: -176,\n y_max: 454,\n ha: 630,\n o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 348,\n y_min: -316,\n y_max: 318,\n ha: 634,\n o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 361,\n y_min: 0,\n y_max: 235,\n ha: 235,\n o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 361,\n y_min: -235,\n y_max: 0,\n ha: 235,\n o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 316,\n y_min: 0,\n y_max: 46,\n ha: 46,\n o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 316,\n y_min: -46,\n y_max: 0,\n ha: 46,\n o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z',\n },\n articStaccatoAbove: {\n x_min: 0,\n x_max: 78,\n y_min: 0,\n y_max: 78,\n ha: 78,\n o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z',\n },\n articStaccatoBelow: {\n x_min: 0,\n x_max: 78,\n y_min: -78,\n y_max: 0,\n ha: 78,\n o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 127,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 127,\n y_min: -248,\n y_max: 0,\n ha: 248,\n o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z',\n },\n articMarcatoAbove: {\n x_min: 1,\n x_max: 296,\n y_min: 0,\n y_max: 253,\n ha: 253,\n o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 295,\n y_min: -253,\n y_max: 0,\n ha: 253,\n o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 622,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 622,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 623,\n y_min: 0,\n y_max: 368,\n ha: 368,\n o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 623,\n y_min: -368,\n y_max: 0,\n ha: 368,\n o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 842,\n y_min: 0,\n y_max: 549,\n ha: 549,\n o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 842,\n y_min: -549,\n y_max: 0,\n ha: 549,\n o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 642,\n y_min: 0,\n y_max: 454,\n ha: 454,\n o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 642,\n y_min: -454,\n y_max: 0,\n ha: 454,\n o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 321,\n ha: 321,\n o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z',\n },\n caesura: {\n x_min: 0,\n x_max: 380,\n y_min: 0,\n y_max: 490,\n ha: 490,\n o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 368,\n y_min: 0,\n y_max: 491,\n ha: 491,\n o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 450,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 125,\n y_min: -11,\n y_max: 262,\n ha: 273,\n o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z',\n },\n restWhole: {\n x_min: 0,\n x_max: 325,\n y_min: -131,\n y_max: 5,\n ha: 136,\n o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z',\n },\n restWholeLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -122,\n y_max: 14,\n ha: 136,\n o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 325,\n y_min: -4,\n y_max: 132,\n ha: 136,\n o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z',\n },\n restHalfLegerLine: {\n x_min: -139,\n x_max: 464,\n y_min: -14,\n y_max: 122,\n ha: 136,\n o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 235,\n y_min: -331,\n y_max: 401,\n ha: 732,\n o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 276,\n y_min: -255,\n y_max: 204,\n ha: 459,\n o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z',\n },\n rest16th: {\n x_min: 1,\n x_max: 344,\n y_min: -507,\n y_max: 204,\n ha: 711,\n o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 391,\n y_min: -507,\n y_max: 460,\n ha: 967,\n o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 423,\n y_min: -758,\n y_max: 464,\n ha: 1222,\n o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z',\n },\n rest128th: {\n x_min: -1,\n x_max: 475,\n y_min: -759,\n y_max: 717,\n ha: 1476,\n o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z',\n },\n dynamicPiano: {\n x_min: -95,\n x_max: 317,\n y_min: -163,\n y_max: 263,\n ha: 426,\n o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z',\n },\n dynamicMezzo: {\n x_min: -7,\n x_max: 374,\n y_min: -2,\n y_max: 251,\n ha: 253,\n o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z',\n },\n dynamicForte: {\n x_min: -137,\n x_max: 334,\n y_min: -193,\n y_max: 421,\n ha: 614,\n o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z',\n },\n dynamicRinforzando: {\n x_min: -12,\n x_max: 230,\n y_min: 0,\n y_max: 254,\n ha: 254,\n o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 208,\n y_min: -5,\n y_max: 263,\n ha: 268,\n o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z',\n },\n dynamicZ: {\n x_min: -42,\n x_max: 239,\n y_min: -1,\n y_max: 258,\n ha: 259,\n o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z',\n },\n ornamentTrill: {\n x_min: -12,\n x_max: 383,\n y_min: 0,\n y_max: 383,\n ha: 383,\n o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 456,\n y_min: 0,\n y_max: 232,\n ha: 232,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 456,\n y_min: -80,\n y_max: 313,\n ha: 393,\n o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 473,\n y_min: -77,\n y_max: 316,\n ha: 393,\n o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 654,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 680,\n y_min: 0,\n y_max: 388,\n ha: 388,\n o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 248,\n ha: 406,\n o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 662,\n y_min: -158,\n y_max: 321,\n ha: 479,\n o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 662,\n y_min: 0,\n y_max: 406,\n ha: 406,\n o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 857,\n y_min: 0,\n y_max: 248,\n ha: 248,\n o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 565,\n y_min: -171,\n y_max: 249,\n ha: 420,\n o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 312,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z',\n },\n brassMuteOpen: {\n x_min: 0,\n x_max: 280,\n y_min: 0,\n y_max: 280,\n ha: 280,\n o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 315,\n y_min: 0,\n y_max: 293,\n ha: 293,\n o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 343,\n ha: 343,\n o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 181,\n y_min: 0,\n y_max: 181,\n ha: 181,\n o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 269,\n y_min: 0,\n y_max: 389,\n ha: 389,\n o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 981,\n y_min: -10,\n y_max: 545,\n ha: 555,\n o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 473,\n y_min: 0,\n y_max: 473,\n ha: 473,\n o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 242,\n y_min: 0,\n y_max: 164,\n ha: 164,\n o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 735,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1243,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 481,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 501,\n y_min: 0,\n y_max: 501,\n ha: 501,\n o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z',\n },\n csymHalfDiminished: {\n x_min: -1,\n x_max: 502,\n y_min: -1,\n y_max: 502,\n ha: 503,\n o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z',\n },\n csymAugmented: {\n x_min: 1,\n x_max: 321,\n y_min: 90,\n y_max: 410,\n ha: 320,\n o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 500,\n y_min: 10,\n y_max: 490,\n ha: 480,\n o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 160,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 416,\n y_min: -176,\n y_max: 452,\n ha: 628,\n o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z',\n },\n },\n fontFamily: 'Leland',\n resolution: 1000,\n generatedOn: '2022-12-19T23:52:37.756Z',\n};\n","export const LelandMetrics = {\n name: 'Leland',\n smufl: true,\n stave: {\n padding: 12,\n endPaddingMax: 10,\n endPaddingMin: 5,\n unalignedNotePadding: 10,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -250,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['A', 'L'],\n spacing: 100,\n superSubRatio: 0.66,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: 0,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: -20,\n advanceWidth: 184,\n yOffset: 250,\n },\n csymParensRightTall: {\n leftSideBearing: 0,\n advanceWidth: 189,\n yOffset: 250,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 50,\n advanceWidth: 121,\n yOffset: 350,\n },\n csymParensRightVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 111,\n yOffset: 350,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 200,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 20,\n advanceWidth: 250,\n yOffset: -302,\n },\n accidentalFlat: {\n leftSideBearing: -20,\n advanceWidth: 226,\n yOffset: -184,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 20,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 22,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 28,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 2,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 3,\n yOffset: -7,\n stemUpYOffset: 25,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 7,\n reportedWidth: 10,\n },\n brassJazzTurn: {\n xOffset: 0,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 31,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: 0,\n stemUpYOffset: 8,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by TimeSignature objects\n shiftLine: -1,\n point: 34,\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemUp: -2.55,\n offsetYBaseStemDown: 2.65,\n },\n noteheadBlack: {\n offsetYBaseStemUp: -2,\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 15,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.9,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.8,\n },\n csymMajorSeventh: {\n scale: 0.9,\n },\n accidentalSharp: {\n scale: 0.75,\n },\n accidentalFlat: {\n scale: 0.9,\n },\n },\n },\n};\n","export const PetalumaFont = {\n glyphs: {\n bracketTop: {\n x_min: 0,\n x_max: 508,\n y_min: 0,\n y_max: 370,\n ha: 370,\n o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z',\n },\n bracketBottom: {\n x_min: 0,\n x_max: 496,\n y_min: -393,\n y_max: 0,\n ha: 393,\n o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z',\n },\n barlineTick: {\n x_min: 0,\n x_max: 56,\n y_min: 877,\n y_max: 1122,\n ha: 245,\n o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z',\n },\n breathMarkTick: {\n x_min: 0,\n x_max: 568,\n y_min: 0,\n y_max: 621,\n ha: 621,\n o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z',\n },\n segno: {\n x_min: 0,\n x_max: 798,\n y_min: -65,\n y_max: 806,\n ha: 871,\n o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z',\n },\n coda: {\n x_min: 0,\n x_max: 1380,\n y_min: -196,\n y_max: 1037,\n ha: 1233,\n o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z',\n },\n gClef: {\n x_min: 0,\n x_max: 664,\n y_min: -559,\n y_max: 1009,\n ha: 1568,\n o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z',\n },\n cClef: {\n x_min: 0,\n x_max: 731,\n y_min: -543,\n y_max: 543,\n ha: 1086,\n o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z',\n },\n fClef: {\n x_min: 0,\n x_max: 776,\n y_min: -496,\n y_max: 216,\n ha: 712,\n o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z',\n },\n unpitchedPercussionClef1: {\n x_min: 0,\n x_max: 379,\n y_min: -250,\n y_max: 250,\n ha: 500,\n o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z',\n },\n '6stringTabClef': {\n x_min: 0,\n x_max: 438,\n y_min: -768,\n y_max: 767,\n ha: 1535,\n o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z',\n },\n timeSig0: {\n x_min: 20,\n x_max: 513,\n y_min: -358,\n y_max: 359,\n ha: 717,\n o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z',\n },\n timeSig1: {\n x_min: 20,\n x_max: 283,\n y_min: -364,\n y_max: 366,\n ha: 730,\n o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z',\n },\n timeSig2: {\n x_min: 20,\n x_max: 660,\n y_min: -379,\n y_max: 382,\n ha: 761,\n o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z',\n },\n timeSig3: {\n x_min: 20,\n x_max: 540,\n y_min: -392,\n y_max: 392,\n ha: 784,\n o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z',\n },\n timeSig4: {\n x_min: 20,\n x_max: 633,\n y_min: -490,\n y_max: 491,\n ha: 981,\n o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z',\n },\n timeSig5: {\n x_min: 20,\n x_max: 583,\n y_min: -389,\n y_max: 389,\n ha: 778,\n o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z',\n },\n timeSig6: {\n x_min: 20,\n x_max: 565,\n y_min: -363,\n y_max: 363,\n ha: 726,\n o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z',\n },\n timeSig7: {\n x_min: 20,\n x_max: 592,\n y_min: -345,\n y_max: 345,\n ha: 690,\n o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z',\n },\n timeSig8: {\n x_min: 20,\n x_max: 504,\n y_min: -428,\n y_max: 428,\n ha: 856,\n o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z',\n },\n timeSig9: {\n x_min: 20,\n x_max: 494,\n y_min: -421,\n y_max: 421,\n ha: 842,\n o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z',\n },\n timeSigCommon: {\n x_min: 20,\n x_max: 585,\n y_min: -298,\n y_max: 294,\n ha: 592,\n o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z',\n },\n timeSigCutCommon: {\n x_min: 20,\n x_max: 695,\n y_min: -687,\n y_max: 687,\n ha: 1374,\n o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z',\n },\n timeSigPlus: {\n x_min: 0,\n x_max: 661,\n y_min: -358,\n y_max: 358,\n ha: 716,\n o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z',\n },\n timeSigPlusSmall: {\n x_min: 0,\n x_max: 418,\n y_min: -197,\n y_max: 199,\n ha: 396,\n o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z',\n },\n timeSigMinus: {\n x_min: 0,\n x_max: 662,\n y_min: -54,\n y_max: 55,\n ha: 109,\n o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z',\n },\n timeSigParensRight: {\n x_min: 0,\n x_max: 274,\n y_min: -723,\n y_max: 725,\n ha: 1448,\n o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z',\n },\n timeSigParensRightSmall: {\n x_min: 0,\n x_max: 154,\n y_min: -422,\n y_max: 422,\n ha: 844,\n o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z',\n },\n timeSigParensLeft: {\n x_min: 1,\n x_max: 400,\n y_min: -728,\n y_max: 728,\n ha: 1456,\n o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z',\n },\n timeSigParensLeftSmall: {\n x_min: 0,\n x_max: 173,\n y_min: -405,\n y_max: 404,\n ha: 809,\n o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z',\n },\n noteheadDoubleWhole: {\n x_min: 0,\n x_max: 614,\n y_min: -223,\n y_max: 223,\n ha: 446,\n o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z',\n },\n noteheadWhole: {\n x_min: 0,\n x_max: 380,\n y_min: -186,\n y_max: 165,\n ha: 351,\n o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z',\n },\n noteheadHalf: {\n x_min: 0,\n x_max: 334,\n y_min: -174,\n y_max: 175,\n ha: 349,\n o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z',\n },\n noteheadBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -164,\n y_max: 164,\n ha: 328,\n o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z',\n },\n noteheadXDoubleWhole: {\n x_min: 0,\n x_max: 730,\n y_min: -266,\n y_max: 267,\n ha: 533,\n o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z',\n },\n noteheadXWhole: {\n x_min: 0,\n x_max: 506,\n y_min: -143,\n y_max: 144,\n ha: 287,\n o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z',\n },\n noteheadXHalf: {\n x_min: 0,\n x_max: 421,\n y_min: -146,\n y_max: 151,\n ha: 297,\n o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z',\n },\n noteheadXBlack: {\n x_min: 0,\n x_max: 289,\n y_min: -156,\n y_max: 157,\n ha: 313,\n o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z',\n },\n noteheadCircleXDoubleWhole: {\n x_min: 0,\n x_max: 437,\n y_min: -220,\n y_max: 219,\n ha: 439,\n o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z',\n },\n noteheadCircleXWhole: {\n x_min: 0,\n x_max: 323,\n y_min: -190,\n y_max: 184,\n ha: 374,\n o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z',\n },\n noteheadCircleXHalf: {\n x_min: 0,\n x_max: 309,\n y_min: -179,\n y_max: 179,\n ha: 358,\n o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z',\n },\n noteheadCircleX: {\n x_min: 0,\n x_max: 344,\n y_min: -179,\n y_max: 175,\n ha: 354,\n o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z',\n },\n noteheadCircledDoubleWhole: {\n x_min: 0,\n x_max: 672,\n y_min: -291,\n y_max: 291,\n ha: 582,\n o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z',\n },\n noteheadCircledWhole: {\n x_min: -50,\n x_max: 472,\n y_min: -231,\n y_max: 232,\n ha: 463,\n o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z',\n },\n noteheadCircledHalf: {\n x_min: -50,\n x_max: 393,\n y_min: -175,\n y_max: 175,\n ha: 350,\n o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z',\n },\n noteheadCircledBlack: {\n x_min: -70,\n x_max: 326,\n y_min: -168,\n y_max: 192,\n ha: 360,\n o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z',\n },\n noteheadDoubleWholeSquare: {\n x_min: 0,\n x_max: 474,\n y_min: -209,\n y_max: 211,\n ha: 420,\n o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z',\n },\n noteheadSquareWhite: {\n x_min: 0,\n x_max: 350,\n y_min: -131,\n y_max: 131,\n ha: 262,\n o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z',\n },\n noteheadSquareBlack: {\n x_min: 0,\n x_max: 342,\n y_min: -130,\n y_max: 132,\n ha: 262,\n o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z',\n },\n noteheadTriangleDownDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z',\n },\n noteheadTriangleDownWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z',\n },\n noteheadTriangleDownHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z',\n },\n noteheadTriangleDownBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z',\n },\n noteheadTriangleUpDoubleWhole: {\n x_min: 0,\n x_max: 510,\n y_min: -213,\n y_max: 213,\n ha: 426,\n o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z',\n },\n noteheadTriangleUpWhole: {\n x_min: 0,\n x_max: 366,\n y_min: -145,\n y_max: 138,\n ha: 283,\n o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z',\n },\n noteheadTriangleUpHalf: {\n x_min: 0,\n x_max: 341,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z',\n },\n noteheadTriangleUpBlack: {\n x_min: 0,\n x_max: 346,\n y_min: -149,\n y_max: 149,\n ha: 298,\n o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z',\n },\n noteheadSlashedDoubleWhole1: {\n x_min: 0,\n x_max: 697,\n y_min: -290,\n y_max: 290,\n ha: 580,\n o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z',\n },\n noteheadSlashedWhole1: {\n x_min: -76,\n x_max: 498,\n y_min: -168,\n y_max: 168,\n ha: 336,\n o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z',\n },\n noteheadSlashedHalf1: {\n x_min: -79,\n x_max: 471,\n y_min: -184,\n y_max: 184,\n ha: 368,\n o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z',\n },\n noteheadSlashedBlack1: {\n x_min: -110,\n x_max: 452,\n y_min: -190,\n y_max: 190,\n ha: 380,\n o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z',\n },\n noteheadSlashedDoubleWhole2: {\n x_min: 0,\n x_max: 697,\n y_min: -295,\n y_max: 295,\n ha: 590,\n o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z',\n },\n noteheadSlashedWhole2: {\n x_min: -83,\n x_max: 510,\n y_min: -201,\n y_max: 198,\n ha: 399,\n o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z',\n },\n noteheadSlashedHalf2: {\n x_min: -73,\n x_max: 454,\n y_min: -188,\n y_max: 188,\n ha: 376,\n o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z',\n },\n noteheadSlashedBlack2: {\n x_min: -84,\n x_max: 405,\n y_min: -189,\n y_max: 189,\n ha: 378,\n o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z',\n },\n noteheadDiamondDoubleWhole: {\n x_min: 0,\n x_max: 429,\n y_min: -221,\n y_max: 221,\n ha: 442,\n o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z',\n },\n noteheadDiamondWhole: {\n x_min: 0,\n x_max: 271,\n y_min: -132,\n y_max: 132,\n ha: 264,\n o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z',\n },\n noteheadDiamondHalf: {\n x_min: 0,\n x_max: 295,\n y_min: -148,\n y_max: 148,\n ha: 296,\n o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z',\n },\n noteheadDiamondBlack: {\n x_min: 0,\n x_max: 310,\n y_min: -146,\n y_max: 146,\n ha: 292,\n o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z',\n },\n noteheadParenthesis: {\n x_min: -70,\n x_max: 329,\n y_min: -196,\n y_max: 201,\n ha: 397,\n o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z',\n },\n noteheadParenthesisRight: {\n x_min: -30,\n x_max: 82,\n y_min: -199,\n y_max: 206,\n ha: 405,\n o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z',\n },\n noteheadParenthesisLeft: {\n x_min: 0,\n x_max: 106,\n y_min: -197,\n y_max: 197,\n ha: 394,\n o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z',\n },\n noteheadMoonBlack: {\n x_min: 0,\n x_max: 328,\n y_min: -125,\n y_max: 125,\n ha: 250,\n o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z',\n },\n noteheadTriangleLeftBlack: {\n x_min: 0,\n x_max: 391,\n y_min: -142,\n y_max: 142,\n ha: 284,\n o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z',\n },\n noteheadTriangleRightBlack: {\n x_min: 0,\n x_max: 398,\n y_min: -139,\n y_max: 140,\n ha: 279,\n o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z',\n },\n noteheadTriangleRoundDownBlack: {\n x_min: 0,\n x_max: 334,\n y_min: -134,\n y_max: 136,\n ha: 270,\n o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z',\n },\n augmentationDot: {\n x_min: 0,\n x_max: 96,\n y_min: -57,\n y_max: 57,\n ha: 114,\n o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z',\n },\n tremolo1: {\n x_min: -158,\n x_max: 156,\n y_min: -88,\n y_max: 88,\n ha: 176,\n o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z',\n },\n flag8thUp: {\n x_min: 0,\n x_max: 261,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z',\n },\n flag8thDown: {\n x_min: 0,\n x_max: 261,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z',\n },\n flag16thUp: {\n x_min: 0,\n x_max: 327,\n y_min: -819,\n y_max: 0,\n ha: 819,\n o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z',\n },\n flag16thDown: {\n x_min: 0,\n x_max: 327,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z',\n },\n flag32ndUp: {\n x_min: 0,\n x_max: 268,\n y_min: -849,\n y_max: 149,\n ha: 999,\n o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z',\n },\n flag32ndDown: {\n x_min: -3,\n x_max: 268,\n y_min: -169,\n y_max: 829,\n ha: 999,\n o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z',\n },\n flag64thUp: {\n x_min: -4,\n x_max: 282,\n y_min: -824,\n y_max: 347,\n ha: 1171,\n o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z',\n },\n flag64thDown: {\n x_min: -5,\n x_max: 281,\n y_min: -375,\n y_max: 796,\n ha: 1171,\n o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z',\n },\n flag128thUp: {\n x_min: 0,\n x_max: 252,\n y_min: -804,\n y_max: 530,\n ha: 1334,\n o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z',\n },\n flag128thDown: {\n x_min: -1,\n x_max: 252,\n y_min: -580,\n y_max: 754,\n ha: 1334,\n o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z',\n },\n accidentalFlat: {\n x_min: 1,\n x_max: 209,\n y_min: -208,\n y_max: 472,\n ha: 680,\n o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z',\n },\n accidentalNatural: {\n x_min: 0,\n x_max: 214,\n y_min: -456,\n y_max: 462,\n ha: 918,\n o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z',\n },\n accidentalSharp: {\n x_min: -22,\n x_max: 390,\n y_min: -384,\n y_max: 383,\n ha: 767,\n o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z',\n },\n accidentalDoubleSharp: {\n x_min: 0,\n x_max: 287,\n y_min: -159,\n y_max: 159,\n ha: 318,\n o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z',\n },\n accidentalDoubleFlat: {\n x_min: 0,\n x_max: 359,\n y_min: -220,\n y_max: 446,\n ha: 666,\n o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z',\n },\n accidentalParensLeft: {\n x_min: 0,\n x_max: 130,\n y_min: -270,\n y_max: 268,\n ha: 538,\n o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z',\n },\n accidentalParensRight: {\n x_min: 0,\n x_max: 139,\n y_min: -275,\n y_max: 277,\n ha: 552,\n o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z',\n },\n accidentalQuarterToneFlatStein: {\n x_min: 0,\n x_max: 208,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z',\n },\n accidentalThreeQuarterTonesFlatZimmermann: {\n x_min: 0,\n x_max: 422,\n y_min: -240,\n y_max: 440,\n ha: 680,\n o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z',\n },\n accidentalQuarterToneSharpStein: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalThreeQuarterTonesSharpStein: {\n x_min: -23,\n x_max: 388,\n y_min: -373,\n y_max: 445,\n ha: 818,\n o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z',\n },\n accidentalBuyukMucennebFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -248,\n y_max: 432,\n ha: 680,\n o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z',\n },\n accidentalBakiyeFlat: {\n x_min: 2,\n x_max: 287,\n y_min: -236,\n y_max: 444,\n ha: 680,\n o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z',\n },\n accidentalKomaSharp: {\n x_min: 0,\n x_max: 300,\n y_min: -338,\n y_max: 351,\n ha: 689,\n o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z',\n },\n accidentalKucukMucennebSharp: {\n x_min: 0,\n x_max: 359,\n y_min: -420,\n y_max: 343,\n ha: 763,\n o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z',\n },\n accidentalKoron: {\n x_min: 0,\n x_max: 303,\n y_min: -462,\n y_max: 180,\n ha: 642,\n o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z',\n },\n accidentalSori: {\n x_min: 0,\n x_max: 434,\n y_min: -295,\n y_max: 325,\n ha: 620,\n o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z',\n },\n articAccentAbove: {\n x_min: 0,\n x_max: 425,\n y_min: 0,\n y_max: 326,\n ha: 326,\n o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z',\n },\n articAccentBelow: {\n x_min: 0,\n x_max: 425,\n y_min: -326,\n y_max: 0,\n ha: 326,\n o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z',\n },\n articTenutoAbove: {\n x_min: 0,\n x_max: 471,\n y_min: 0,\n y_max: 56,\n ha: 56,\n o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z',\n },\n articTenutoBelow: {\n x_min: 0,\n x_max: 471,\n y_min: -59,\n y_max: -3,\n ha: 56,\n o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z',\n },\n articStaccatoAbove: {\n x_min: 1,\n x_max: 112,\n y_min: 0,\n y_max: 156,\n ha: 156,\n o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z',\n },\n articStaccatoBelow: {\n x_min: 1,\n x_max: 112,\n y_min: -156,\n y_max: 0,\n ha: 156,\n o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z',\n },\n articStaccatissimoAbove: {\n x_min: 0,\n x_max: 139,\n y_min: 0,\n y_max: 411,\n ha: 411,\n o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z',\n },\n articStaccatissimoBelow: {\n x_min: 0,\n x_max: 139,\n y_min: -411,\n y_max: 0,\n ha: 411,\n o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z',\n },\n articMarcatoAbove: {\n x_min: 0,\n x_max: 396,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z',\n },\n articMarcatoBelow: {\n x_min: 0,\n x_max: 396,\n y_min: -328,\n y_max: 0,\n ha: 328,\n o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z',\n },\n fermataAbove: {\n x_min: 0,\n x_max: 472,\n y_min: 2,\n y_max: 454,\n ha: 452,\n o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z',\n },\n fermataBelow: {\n x_min: 0,\n x_max: 519,\n y_min: -430,\n y_max: -1,\n ha: 429,\n o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z',\n },\n fermataLongAbove: {\n x_min: 0,\n x_max: 591,\n y_min: -6,\n y_max: 337,\n ha: 343,\n o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z',\n },\n fermataLongBelow: {\n x_min: 0,\n x_max: 602,\n y_min: -335,\n y_max: 7,\n ha: 342,\n o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z',\n },\n fermataVeryLongAbove: {\n x_min: 0,\n x_max: 715,\n y_min: -14,\n y_max: 437,\n ha: 451,\n o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z',\n },\n fermataVeryLongBelow: {\n x_min: 0,\n x_max: 686,\n y_min: -427,\n y_max: 30,\n ha: 457,\n o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z',\n },\n fermataVeryShortAbove: {\n x_min: 0,\n x_max: 711,\n y_min: -31,\n y_max: 496,\n ha: 527,\n o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z',\n },\n fermataVeryShortBelow: {\n x_min: 0,\n x_max: 697,\n y_min: -475,\n y_max: 13,\n ha: 488,\n o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z',\n },\n fermataShortAbove: {\n x_min: 0,\n x_max: 545,\n y_min: -18,\n y_max: 348,\n ha: 366,\n o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z',\n },\n fermataShortBelow: {\n x_min: 0,\n x_max: 565,\n y_min: -335,\n y_max: 10,\n ha: 345,\n o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z',\n },\n breathMarkComma: {\n x_min: 0,\n x_max: 148,\n y_min: 0,\n y_max: 275,\n ha: 275,\n o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z',\n },\n breathMarkUpbow: {\n x_min: 0,\n x_max: 254,\n y_min: 0,\n y_max: 595,\n ha: 595,\n o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z',\n },\n caesura: {\n x_min: 0,\n x_max: 566,\n y_min: 0,\n y_max: 562,\n ha: 563,\n o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z',\n },\n caesuraCurved: {\n x_min: 0,\n x_max: 386,\n y_min: -10,\n y_max: 584,\n ha: 594,\n o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z',\n },\n restMaxima: {\n x_min: 0,\n x_max: 366,\n y_min: -255,\n y_max: 255,\n ha: 510,\n o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z',\n },\n restDoubleWhole: {\n x_min: 0,\n x_max: 122,\n y_min: 0,\n y_max: 249,\n ha: 249,\n o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z',\n },\n restWhole: {\n x_min: 1,\n x_max: 500,\n y_min: -120,\n y_max: 14,\n ha: 134,\n o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z',\n },\n restWholeLegerLine: {\n x_min: -197,\n x_max: 685,\n y_min: -157,\n y_max: 29,\n ha: 186,\n o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z',\n },\n restHalf: {\n x_min: 0,\n x_max: 518,\n y_min: 0,\n y_max: 162,\n ha: 162,\n o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z',\n },\n restHalfLegerLine: {\n x_min: -120,\n x_max: 448,\n y_min: -20,\n y_max: 143,\n ha: 163,\n o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z',\n },\n restQuarter: {\n x_min: 0,\n x_max: 263,\n y_min: -415,\n y_max: 415,\n ha: 830,\n o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z',\n },\n rest8th: {\n x_min: 0,\n x_max: 289,\n y_min: -260,\n y_max: 261,\n ha: 521,\n o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z',\n },\n rest16th: {\n x_min: 0,\n x_max: 333,\n y_min: -328,\n y_max: 244,\n ha: 572,\n o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z',\n },\n rest32nd: {\n x_min: 0,\n x_max: 347,\n y_min: -498,\n y_max: 483,\n ha: 981,\n o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z',\n },\n rest64th: {\n x_min: 0,\n x_max: 428,\n y_min: -720,\n y_max: 474,\n ha: 1194,\n o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z',\n },\n rest128th: {\n x_min: 1,\n x_max: 491,\n y_min: -711,\n y_max: 719,\n ha: 1430,\n o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z',\n },\n dynamicPiano: {\n x_min: -49,\n x_max: 327,\n y_min: -142,\n y_max: 515,\n ha: 657,\n o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z',\n },\n dynamicMezzo: {\n x_min: -18,\n x_max: 559,\n y_min: -50,\n y_max: 365,\n ha: 415,\n o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z',\n },\n dynamicForte: {\n x_min: -144,\n x_max: 311,\n y_min: -115,\n y_max: 504,\n ha: 619,\n o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z',\n },\n dynamicRinforzando: {\n x_min: -75,\n x_max: 322,\n y_min: -90,\n y_max: 325,\n ha: 415,\n o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z',\n },\n dynamicSforzando: {\n x_min: 0,\n x_max: 296,\n y_min: 0,\n y_max: 379,\n ha: 379,\n o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z',\n },\n dynamicZ: {\n x_min: -43,\n x_max: 331,\n y_min: 0,\n y_max: 328,\n ha: 328,\n o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z',\n },\n ornamentTrill: {\n x_min: 1,\n x_max: 551,\n y_min: -18,\n y_max: 539,\n ha: 557,\n o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z',\n },\n ornamentTurn: {\n x_min: 0,\n x_max: 574,\n y_min: 0,\n y_max: 312,\n ha: 312,\n o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z',\n },\n ornamentTurnSlash: {\n x_min: 0,\n x_max: 574,\n y_min: -106,\n y_max: 405,\n ha: 511,\n o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z',\n },\n ornamentMordent: {\n x_min: 0,\n x_max: 700,\n y_min: 0,\n y_max: 497,\n ha: 497,\n o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z',\n },\n ornamentShortTrill: {\n x_min: 0,\n x_max: 747,\n y_min: 0,\n y_max: 243,\n ha: 243,\n o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z',\n },\n ornamentTremblement: {\n x_min: 0,\n x_max: 982,\n y_min: 0,\n y_max: 224,\n ha: 224,\n o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z',\n },\n ornamentPrecompAppoggTrill: {\n x_min: 0,\n x_max: 1066,\n y_min: -50,\n y_max: 533,\n ha: 583,\n o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z',\n },\n ornamentPrecompSlideTrillDAnglebert: {\n x_min: 0,\n x_max: 1088,\n y_min: -380,\n y_max: 252,\n ha: 632,\n o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z',\n },\n ornamentPrecompSlideTrillBach: {\n x_min: 0,\n x_max: 1185,\n y_min: -380,\n y_max: 465,\n ha: 845,\n o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z',\n },\n ornamentPrecompTrillSuffixDandrieu: {\n x_min: 0,\n x_max: 1003,\n y_min: -20,\n y_max: 521,\n ha: 541,\n o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefix: {\n x_min: 0,\n x_max: 1246,\n y_min: -30,\n y_max: 296,\n ha: 326,\n o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z',\n },\n ornamentPrecompDoubleCadenceUpperPrefixTurn: {\n x_min: 0,\n x_max: 1226,\n y_min: -237,\n y_max: 436,\n ha: 673,\n o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z',\n },\n ornamentPrecompTrillLowerSuffix: {\n x_min: 0,\n x_max: 833,\n y_min: -309,\n y_max: 319,\n ha: 628,\n o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z',\n },\n brassScoop: {\n x_min: 0,\n x_max: 312,\n y_min: -390,\n y_max: 28,\n ha: 418,\n o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z',\n },\n brassDoitMedium: {\n x_min: 0,\n x_max: 476,\n y_min: -50,\n y_max: 333,\n ha: 383,\n o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z',\n },\n brassFallLipShort: {\n x_min: 0,\n x_max: 298,\n y_min: -344,\n y_max: 65,\n ha: 409,\n o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z',\n },\n brassLiftMedium: {\n x_min: 0,\n x_max: 807,\n y_min: 0,\n y_max: 838,\n ha: 838,\n o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z',\n },\n brassFallRoughMedium: {\n x_min: 0,\n x_max: 791,\n y_min: 0,\n y_max: 819,\n ha: 819,\n o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z',\n },\n brassBend: {\n x_min: 0,\n x_max: 381,\n y_min: 0,\n y_max: 367,\n ha: 367,\n o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z',\n },\n brassMuteClosed: {\n x_min: 0,\n x_max: 274,\n y_min: 0,\n y_max: 260,\n ha: 260,\n o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z',\n },\n brassMuteOpen: {\n x_min: 1,\n x_max: 313,\n y_min: 0,\n y_max: 309,\n ha: 309,\n o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z',\n },\n brassFlip: {\n x_min: 0,\n x_max: 402,\n y_min: 0,\n y_max: 361,\n ha: 361,\n o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z',\n },\n brassJazzTurn: {\n x_min: 0,\n x_max: 646,\n y_min: 0,\n y_max: 212,\n ha: 212,\n o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z',\n },\n brassSmear: {\n x_min: 0,\n x_max: 334,\n y_min: 0,\n y_max: 151,\n ha: 151,\n o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z',\n },\n stringsDownBow: {\n x_min: 0,\n x_max: 306,\n y_min: 0,\n y_max: 366,\n ha: 366,\n o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z',\n },\n stringsUpBow: {\n x_min: 0,\n x_max: 219,\n y_min: 0,\n y_max: 489,\n ha: 489,\n o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z',\n },\n stringsHarmonic: {\n x_min: 0,\n x_max: 191,\n y_min: 0,\n y_max: 202,\n ha: 202,\n o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z',\n },\n pluckedSnapPizzicatoAbove: {\n x_min: 0,\n x_max: 201,\n y_min: 0,\n y_max: 325,\n ha: 325,\n o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z',\n },\n pluckedSnapPizzicatoBelow: {\n x_min: 0,\n x_max: 211,\n y_min: 0,\n y_max: 307,\n ha: 307,\n o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z',\n },\n pluckedLeftHandPizzicato: {\n x_min: 0,\n x_max: 271,\n y_min: 0,\n y_max: 284,\n ha: 284,\n o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z',\n },\n keyboardPedalPed: {\n x_min: 0,\n x_max: 944,\n y_min: -13,\n y_max: 550,\n ha: 563,\n o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z',\n },\n keyboardPedalUp: {\n x_min: 0,\n x_max: 437,\n y_min: 0,\n y_max: 461,\n ha: 461,\n o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z',\n },\n pictChokeCymbal: {\n x_min: 1,\n x_max: 147,\n y_min: 0,\n y_max: 242,\n ha: 242,\n o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z',\n },\n wiggleArpeggiatoUp: {\n x_min: -22,\n x_max: 300,\n y_min: 0,\n y_max: 176,\n ha: 176,\n o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z',\n },\n arpeggiatoUp: {\n x_min: 0,\n x_max: 262,\n y_min: 0,\n y_max: 1459,\n ha: 1459,\n o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z',\n },\n arpeggiatoDown: {\n x_min: 0,\n x_max: 218,\n y_min: 0,\n y_max: 1440,\n ha: 1440,\n o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z',\n },\n repeat1Bar: {\n x_min: 0,\n x_max: 599,\n y_min: -250,\n y_max: 175,\n ha: 425,\n o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z',\n },\n repeat2Bars: {\n x_min: 0,\n x_max: 775,\n y_min: -247,\n y_max: 363,\n ha: 610,\n o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z',\n },\n repeat4Bars: {\n x_min: 0,\n x_max: 1374,\n y_min: -304,\n y_max: 304,\n ha: 608,\n o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z',\n },\n repeatBarSlash: {\n x_min: 0,\n x_max: 630,\n y_min: -225,\n y_max: 265,\n ha: 490,\n o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z',\n },\n csymDiminished: {\n x_min: 0,\n x_max: 506,\n y_min: 0,\n y_max: 500,\n ha: 500,\n o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z',\n },\n csymHalfDiminished: {\n x_min: -32,\n x_max: 496,\n y_min: -33,\n y_max: 492,\n ha: 525,\n o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z',\n },\n csymAugmented: {\n x_min: 0,\n x_max: 530,\n y_min: 0,\n y_max: 539,\n ha: 539,\n o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z',\n },\n csymMajorSeventh: {\n x_min: 0,\n x_max: 593,\n y_min: 0,\n y_max: 569,\n ha: 569,\n o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z',\n },\n csymMinor: {\n x_min: 0,\n x_max: 482,\n y_min: 193,\n y_max: 265,\n ha: 72,\n o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z',\n },\n csymParensLeftTall: {\n x_min: 0,\n x_max: 185,\n y_min: 0,\n y_max: 1034,\n ha: 1034,\n o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z',\n },\n csymParensRightTall: {\n x_min: -40,\n x_max: 189,\n y_min: 0,\n y_max: 1058,\n ha: 1058,\n o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z',\n },\n csymBracketLeftTall: {\n x_min: 0,\n x_max: 328,\n y_min: 2,\n y_max: 807,\n ha: 805,\n o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z',\n },\n csymBracketRightTall: {\n x_min: 1,\n x_max: 306,\n y_min: 0,\n y_max: 829,\n ha: 829,\n o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z',\n },\n csymParensLeftVeryTall: {\n x_min: 0,\n x_max: 116,\n y_min: 0,\n y_max: 934,\n ha: 934,\n o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z',\n },\n csymParensRightVeryTall: {\n x_min: -20,\n x_max: 111,\n y_min: 0,\n y_max: 1009,\n ha: 1009,\n o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z',\n },\n csymDiagonalArrangementSlash: {\n x_min: 0,\n x_max: 990,\n y_min: -27,\n y_max: 1028,\n ha: 1054,\n o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z',\n },\n accidentalNarrowReversedFlat: {\n x_min: 0,\n x_max: 208,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z',\n },\n accidentalNarrowReversedFlatAndFlat: {\n x_min: 0,\n x_max: 335,\n y_min: -231,\n y_max: 449,\n ha: 680,\n o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z',\n },\n accidentalWilsonPlus: {\n x_min: 0,\n x_max: 298,\n y_min: -218,\n y_max: 218,\n ha: 436,\n o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z',\n },\n accidentalWilsonMinus: {\n x_min: 0,\n x_max: 284,\n y_min: -163,\n y_max: 163,\n ha: 326,\n o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z',\n },\n },\n fontFamily: 'Petaluma',\n resolution: 1000,\n generatedOn: '2022-12-18T09:07:50.817Z',\n};\n","/**\n * The Petaluma font was created by Steinberg Media.\n * https://github.com/steinbergmedia/petaluma\n */\nexport const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n stave: {\n padding: 15,\n endPaddingMax: 15,\n endPaddingMin: 7,\n unalignedNotePadding: 12,\n },\n accidental: {\n noteheadAccidentalPadding: 1,\n leftPadding: 2,\n accidentalSpacing: 3,\n },\n chordSymbol: {\n global: {\n superscriptOffset: -400,\n subscriptOffset: 300,\n kerningOffset: -150,\n lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'],\n upperKerningText: ['L'],\n spacing: 20,\n superSubRatio: 0.73,\n },\n glyphs: {\n csymDiminished: {\n leftSideBearing: -95,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymHalfDiminished: {\n leftSideBearing: -32,\n advanceWidth: 506,\n yOffset: 0,\n },\n csymAugmented: {\n leftSideBearing: -25,\n advanceWidth: 530,\n yOffset: 0,\n },\n csymParensLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 155,\n yOffset: 150,\n },\n csymParensRightTall: {\n leftSideBearing: 40,\n advanceWidth: 189,\n yOffset: 150,\n },\n csymBracketLeftTall: {\n leftSideBearing: 0,\n advanceWidth: 328,\n yOffset: 0,\n },\n csymBracketRightTall: {\n leftSideBearing: 1,\n advanceWidth: 600,\n yOffset: 0,\n },\n csymParensLeftVeryTall: {\n leftSideBearing: 0,\n advanceWidth: 210,\n yOffset: 250,\n },\n csymParensRightVeryTall: {\n leftSideBearing: -100,\n advanceWidth: 111,\n yOffset: 250,\n },\n csymDiagonalArrangementSlash: {\n leftSideBearing: -1,\n advanceWidth: 990,\n yOffset: 0,\n },\n csymMinor: {\n leftSideBearing: 0,\n advanceWidth: 482,\n yOffset: 0,\n },\n csymMajorSeventh: {\n leftSideBearing: 100,\n yOffset: 0,\n advanceWidth: 600,\n },\n accidentalSharp: {\n leftSideBearing: 0,\n advanceWidth: 425,\n yOffset: -422,\n },\n accidentalFlat: {\n leftSideBearing: -10,\n advanceWidth: 228,\n yOffset: -284,\n },\n },\n },\n clef_default: {\n width: 26,\n annotations: {\n '8va': {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n '8vb': {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n },\n },\n },\n },\n clef_small: {\n width: 20,\n annotations: {\n '8va': {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n },\n '8vb': {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n },\n },\n },\n },\n ornament: {\n brassScoop: {\n xOffset: -12,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassDoitMedium: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassFallLipShort: {\n xOffset: 16,\n yOffset: 0,\n stemUpYOffset: 0,\n reportedWidth: 19,\n },\n brassLiftMedium: {\n xOffset: 16,\n yOffset: 5,\n stemUpYOffset: 0,\n reportedWidth: 15,\n },\n brassFallRoughMedium: {\n xOffset: 16,\n yOffset: 26,\n stemUpYOffset: 0,\n reportedWidth: 5,\n },\n brassBend: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 28,\n reportedWidth: 5,\n },\n brassMuteClosed: {\n xOffset: 3,\n yOffset: -8,\n stemUpYOffset: 26,\n reportedWidth: 5,\n },\n brassMuteOpen: {\n xOffset: 4,\n yOffset: -8,\n stemUpYOffset: 27,\n reportedWidth: 5,\n },\n brassFlip: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 7,\n reportedWidth: 5,\n },\n brassJazzTurn: {\n xOffset: 6,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 30,\n },\n brassSmear: {\n xOffset: 10,\n yOffset: -4,\n stemUpYOffset: 5,\n reportedWidth: 5,\n },\n },\n parenthesis: {\n default: {\n point: 39,\n width: 7,\n },\n gracenote: {\n point: (39 * 3) / 5,\n width: 3,\n },\n },\n pedalMarking: {\n up: {\n point: 40,\n },\n down: {\n point: 34,\n },\n },\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n },\n },\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 13,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 8,\n offsetXStemDown: 1,\n },\n },\n staveRepetition: {\n symbolText: {\n offsetX: 12,\n offsetY: 25,\n spacing: 5,\n },\n coda: {\n offsetY: 25,\n },\n segno: {\n offsetY: 10,\n },\n },\n noteHead: {\n minPadding: 2,\n displacedShiftX: -2,\n },\n stem: {\n heightAdjustmentForFlag: -3,\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadHalf: {\n offsetYBaseStemDown: 1.8,\n offsetYBaseStemUp: -1.8,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n },\n },\n },\n stringNumber: {\n verticalPadding: 8,\n stemPadding: 2,\n leftPadding: 5,\n rightPadding: 6,\n },\n tuplet: {\n noteHeadOffset: 20,\n stemOffset: 10,\n bottomLine: 4,\n topModifierOffset: 20,\n },\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.77,\n flag16thUp: {\n shiftX: -0.75,\n },\n flag32ndUp: {\n shiftX: -0.85,\n },\n flag64thUp: {\n shiftX: -1.55,\n },\n flag128thUp: {\n shiftX: -1.3,\n },\n flag16thDown: {\n shiftX: -0.75,\n },\n flag32ndDown: {\n shiftX: -0.76,\n },\n flag64thDown: {\n shiftX: -1.5,\n },\n flag128thDown: {\n shiftX: -1.2,\n },\n staveTempo: {\n shiftX: -1,\n },\n },\n clef_default: {\n point: 32,\n gClef: {\n scale: 1.1,\n shiftY: 1,\n },\n fClef: {\n shiftY: -0.5,\n },\n '6stringTabClef': {\n point: 32,\n shiftY: -5.5,\n },\n },\n clef_small: {\n point: 26,\n gClef: {\n shiftY: 1.5,\n },\n },\n clefNote_default: {\n point: 32,\n },\n clefNote_small: {\n point: 26,\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n brassScoop: {\n scale: 1.0,\n },\n brassDoitMedium: {\n scale: 1.0,\n },\n brassFallLipShort: {\n scale: 1.0,\n },\n brassLiftMedium: {\n scale: 1.0,\n },\n brassFallRoughMedium: {\n scale: 1.0,\n },\n brassBend: {\n scale: 1.0,\n },\n brassMuteClosed: {\n scale: 1.0,\n },\n brassMuteOpen: {\n scale: 1.0,\n },\n brassFlip: {\n scale: 1.0,\n },\n brassJazzTurn: {\n scale: 1.0,\n },\n brassSmear: {\n scale: 1.0,\n },\n },\n stroke_straight: {\n arrowheadBlackDown: {\n shiftX: -4.5,\n },\n arrowheadBlackUp: {\n shiftX: -0.85,\n },\n },\n stroke_wiggly: {\n arrowheadBlackDown: {\n shiftX: -1,\n shiftY: 1,\n },\n arrowheadBlackUp: {\n shiftX: -1,\n shiftY: 1,\n },\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n },\n },\n noteHead: {\n noteheadBlackStemUp: {\n shiftX: 0.5,\n },\n noteheadHalfStemUp: {\n shiftX: 0.725,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n },\n },\n chordSymbol: {\n csymDiminished: {\n scale: 0.8,\n },\n csymHalfDiminished: {\n scale: 0.8,\n },\n csymAugmented: {\n scale: 1,\n },\n csymParensLeftTall: {\n scale: 0.8,\n },\n csymParensRightTall: {\n scale: 0.8,\n },\n csymBracketLeftTall: {\n scale: 0.8,\n },\n csymBracketRightTall: {\n scale: 0.8,\n },\n csymParensLeftVeryTall: {\n scale: 0.95,\n },\n csymParensRightVeryTall: {\n scale: 0.9,\n },\n csymDiagonalArrangementSlash: {\n scale: 0.6,\n },\n csymMinor: {\n scale: 0.7,\n },\n csymMajorSeventh: {\n scale: 0.8,\n },\n accidentalSharp: {\n scale: 0.7,\n },\n accidentalFlat: {\n scale: 0.8,\n },\n },\n },\n};\n","export const PetalumaScriptFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 250,\n y_min: 0,\n y_max: 500,\n ha: 500,\n leftSideBearing: 0,\n advanceWidth: 250,\n },\n '0': {\n x_min: 33,\n x_max: 534,\n y_min: -13,\n y_max: 751,\n ha: 764,\n leftSideBearing: 33,\n advanceWidth: 570,\n },\n '1': {\n x_min: 48,\n x_max: 235,\n y_min: -17,\n y_max: 734,\n ha: 751,\n leftSideBearing: 48,\n advanceWidth: 286,\n },\n '2': {\n x_min: 56,\n x_max: 571,\n y_min: -19,\n y_max: 741,\n ha: 760,\n leftSideBearing: 56,\n advanceWidth: 626,\n },\n '3': {\n x_min: 50,\n x_max: 528,\n y_min: -7,\n y_max: 731,\n ha: 738,\n leftSideBearing: 50,\n advanceWidth: 589,\n },\n '4': {\n x_min: 38,\n x_max: 564,\n y_min: -13,\n y_max: 743,\n ha: 756,\n leftSideBearing: 38,\n advanceWidth: 614,\n },\n '5': {\n x_min: 42,\n x_max: 601,\n y_min: -34,\n y_max: 743,\n ha: 777,\n leftSideBearing: 42,\n advanceWidth: 648,\n },\n '6': {\n x_min: 47,\n x_max: 606,\n y_min: -16,\n y_max: 743,\n ha: 759,\n leftSideBearing: 47,\n advanceWidth: 667,\n },\n '7': {\n x_min: 47,\n x_max: 567,\n y_min: 5,\n y_max: 739,\n ha: 734,\n leftSideBearing: 0,\n advanceWidth: 615,\n },\n '8': {\n x_min: 40,\n x_max: 541,\n y_min: -15,\n y_max: 752,\n ha: 767,\n leftSideBearing: 40,\n advanceWidth: 585,\n },\n '9': {\n x_min: 40,\n x_max: 537,\n y_min: -52,\n y_max: 736,\n ha: 788,\n leftSideBearing: 40,\n advanceWidth: 592,\n },\n '!': {\n x_min: 49,\n x_max: 180,\n y_min: -7,\n y_max: 761,\n ha: 768,\n leftSideBearing: 49,\n advanceWidth: 230,\n },\n '\"': {\n x_min: 39,\n x_max: 304,\n y_min: 596,\n y_max: 804,\n ha: 208,\n leftSideBearing: 39,\n advanceWidth: 353,\n },\n '#': {\n x_min: 33,\n x_max: 599,\n y_min: -8,\n y_max: 765,\n ha: 773,\n leftSideBearing: 33,\n advanceWidth: 648,\n },\n $: {\n x_min: 53,\n x_max: 495,\n y_min: -111,\n y_max: 823,\n ha: 934,\n leftSideBearing: 53,\n advanceWidth: 560,\n },\n '%': {\n x_min: 35,\n x_max: 656,\n y_min: -128,\n y_max: 808,\n ha: 936,\n leftSideBearing: 35,\n advanceWidth: 711,\n },\n '&': {\n x_min: 53,\n x_max: 441,\n y_min: -3,\n y_max: 753,\n ha: 756,\n leftSideBearing: 53,\n advanceWidth: 500,\n },\n \"'\": {\n x_min: 43,\n x_max: 161,\n y_min: 590,\n y_max: 811,\n ha: 221,\n leftSideBearing: 43,\n advanceWidth: 217,\n },\n '(': {\n x_min: 41,\n x_max: 311,\n y_min: -36,\n y_max: 845,\n ha: 881,\n leftSideBearing: 41,\n advanceWidth: 308,\n },\n ')': {\n x_min: -8,\n x_max: 257,\n y_min: -21,\n y_max: 852,\n ha: 873,\n leftSideBearing: -8,\n advanceWidth: 280,\n },\n '*': {\n x_min: 59,\n x_max: 539,\n y_min: 175,\n y_max: 589,\n ha: 414,\n leftSideBearing: 59,\n advanceWidth: 601,\n },\n '+': {\n x_min: 33,\n x_max: 361,\n y_min: 180,\n y_max: 587,\n ha: 407,\n leftSideBearing: 33,\n advanceWidth: 400,\n },\n ',': {\n x_min: 15,\n x_max: 176,\n y_min: -129,\n y_max: 92,\n ha: 221,\n leftSideBearing: 15,\n advanceWidth: 205,\n },\n '-': {\n x_min: 40,\n x_max: 380,\n y_min: 317,\n y_max: 452,\n ha: 135,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '.': {\n x_min: 48,\n x_max: 185,\n y_min: -56,\n y_max: 84,\n ha: 140,\n leftSideBearing: 48,\n advanceWidth: 227,\n },\n '/': {\n x_min: -58,\n x_max: 654,\n y_min: -122,\n y_max: 844,\n ha: 966,\n leftSideBearing: -58,\n advanceWidth: 626,\n },\n ':': {\n x_min: 65,\n x_max: 225,\n y_min: 97,\n y_max: 536,\n ha: 439,\n leftSideBearing: 65,\n advanceWidth: 302,\n },\n ';': {\n x_min: 13,\n x_max: 295,\n y_min: -139,\n y_max: 536,\n ha: 675,\n leftSideBearing: 13,\n advanceWidth: 334,\n },\n '<': {\n x_min: 28,\n x_max: 438,\n y_min: -1,\n y_max: 607,\n ha: 608,\n leftSideBearing: 28,\n advanceWidth: 475,\n },\n '=': {\n x_min: 40,\n x_max: 383,\n y_min: 199.9598640852289,\n y_max: 541,\n ha: 341.0401359147711,\n leftSideBearing: 40,\n advanceWidth: 422,\n },\n '>': {\n x_min: 35,\n x_max: 421,\n y_min: 28,\n y_max: 632,\n ha: 604,\n leftSideBearing: 35,\n advanceWidth: 466,\n },\n '?': {\n x_min: 45,\n x_max: 548,\n y_min: -17,\n y_max: 767,\n ha: 784,\n leftSideBearing: 45,\n advanceWidth: 592,\n },\n '@': {\n x_min: 51,\n x_max: 730,\n y_min: -78,\n y_max: 753,\n ha: 831,\n leftSideBearing: 51,\n advanceWidth: 781,\n },\n A: {\n x_min: 37,\n x_max: 554,\n y_min: -4,\n y_max: 746,\n ha: 750,\n leftSideBearing: 37,\n advanceWidth: 617,\n },\n B: {\n x_min: 37,\n x_max: 532,\n y_min: 3,\n y_max: 783,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 579,\n },\n C: {\n x_min: 37,\n x_max: 583,\n y_min: -3,\n y_max: 775,\n ha: 778,\n leftSideBearing: 37,\n advanceWidth: 623,\n },\n D: {\n x_min: 50,\n x_max: 530,\n y_min: -15,\n y_max: 749,\n ha: 764,\n leftSideBearing: 50,\n advanceWidth: 579,\n },\n E: {\n x_min: 45,\n x_max: 531,\n y_min: -1,\n y_max: 743,\n ha: 744,\n leftSideBearing: 45,\n advanceWidth: 585,\n },\n F: {\n x_min: 45,\n x_max: 459,\n y_min: 23,\n y_max: 727,\n ha: 704,\n leftSideBearing: 45,\n advanceWidth: 510,\n },\n G: {\n x_min: 31,\n x_max: 577,\n y_min: -8,\n y_max: 733,\n ha: 741,\n leftSideBearing: 31,\n advanceWidth: 611,\n },\n H: {\n x_min: 37,\n x_max: 493,\n y_min: -22,\n y_max: 758,\n ha: 780,\n leftSideBearing: 37,\n advanceWidth: 535,\n },\n I: {\n x_min: 47,\n x_max: 501,\n y_min: -3,\n y_max: 731,\n ha: 734,\n leftSideBearing: 47,\n advanceWidth: 541,\n },\n J: {\n x_min: 33,\n x_max: 531,\n y_min: -23,\n y_max: 725,\n ha: 748,\n leftSideBearing: 33,\n advanceWidth: 573,\n },\n K: {\n x_min: 43,\n x_max: 505,\n y_min: -10,\n y_max: 740,\n ha: 750,\n leftSideBearing: 43,\n advanceWidth: 560,\n },\n L: {\n x_min: 49,\n x_max: 457,\n y_min: -2,\n y_max: 746,\n ha: 748,\n leftSideBearing: 49,\n advanceWidth: 510,\n },\n M: {\n x_min: 35,\n x_max: 699,\n y_min: 1,\n y_max: 744,\n ha: 743,\n leftSideBearing: 35,\n advanceWidth: 743,\n },\n N: {\n x_min: 34,\n x_max: 533,\n y_min: -17,\n y_max: 761,\n ha: 778,\n leftSideBearing: 34,\n advanceWidth: 579,\n },\n O: {\n x_min: 41,\n x_max: 608,\n y_min: -5,\n y_max: 735,\n ha: 740,\n leftSideBearing: 41,\n advanceWidth: 667,\n },\n P: {\n x_min: 53,\n x_max: 451,\n y_min: -18,\n y_max: 735,\n ha: 753,\n leftSideBearing: 53,\n advanceWidth: 497,\n },\n Q: {\n x_min: 40,\n x_max: 599,\n y_min: -67,\n y_max: 744,\n ha: 811,\n leftSideBearing: 40,\n advanceWidth: 648,\n },\n R: {\n x_min: 39,\n x_max: 487,\n y_min: 16,\n y_max: 735,\n ha: 719,\n leftSideBearing: 39,\n advanceWidth: 535,\n },\n S: {\n x_min: 35,\n x_max: 552,\n y_min: -47,\n y_max: 708,\n ha: 755,\n leftSideBearing: 35,\n advanceWidth: 604,\n },\n T: {\n x_min: 26,\n x_max: 656,\n y_min: -13,\n y_max: 718,\n ha: 731,\n leftSideBearing: 26,\n advanceWidth: 705,\n },\n U: {\n x_min: 41,\n x_max: 518,\n y_min: -20,\n y_max: 748,\n ha: 768,\n leftSideBearing: 41,\n advanceWidth: 567,\n },\n V: {\n x_min: 47,\n x_max: 509,\n y_min: -26,\n y_max: 744,\n ha: 770,\n leftSideBearing: 47,\n advanceWidth: 567,\n },\n W: {\n x_min: 44,\n x_max: 789,\n y_min: -35,\n y_max: 720,\n ha: 755,\n leftSideBearing: 44,\n advanceWidth: 833,\n },\n X: {\n x_min: 63,\n x_max: 635,\n y_min: -10,\n y_max: 745,\n ha: 755,\n leftSideBearing: 63,\n advanceWidth: 680,\n },\n Y: {\n x_min: 43,\n x_max: 503,\n y_min: -21,\n y_max: 734,\n ha: 755,\n leftSideBearing: 43,\n advanceWidth: 541,\n },\n Z: {\n x_min: 42,\n x_max: 584,\n y_min: -10,\n y_max: 739,\n ha: 749,\n leftSideBearing: 42,\n advanceWidth: 629,\n },\n '[': {\n x_min: 46,\n x_max: 346,\n y_min: -150,\n y_max: 884,\n ha: 1034,\n leftSideBearing: 46,\n advanceWidth: 291,\n },\n '\\\\': {\n x_min: 20,\n x_max: 616,\n y_min: -100,\n y_max: 797,\n ha: 897,\n leftSideBearing: 20,\n advanceWidth: 645,\n },\n ']': {\n x_min: -76,\n x_max: 226,\n y_min: -150,\n y_max: 881,\n ha: 1031,\n leftSideBearing: -76,\n advanceWidth: 297,\n },\n '^': {\n x_min: 43,\n x_max: 437,\n y_min: 517,\n y_max: 812,\n ha: 295,\n leftSideBearing: 43,\n advanceWidth: 478,\n },\n _: {\n x_min: 29,\n x_max: 563,\n y_min: -110,\n y_max: -1,\n ha: 109,\n leftSideBearing: 29,\n advanceWidth: 598,\n },\n '`': {\n x_min: 54,\n x_max: 321,\n y_min: 540,\n y_max: 747,\n ha: 207,\n leftSideBearing: 54,\n advanceWidth: 368,\n },\n a: {\n x_min: 20,\n x_max: 447,\n y_min: -17,\n y_max: 495,\n ha: 512,\n leftSideBearing: 20,\n advanceWidth: 494,\n },\n b: {\n x_min: 37,\n x_max: 466,\n y_min: -27,\n y_max: 770,\n ha: 797,\n leftSideBearing: 37,\n advanceWidth: 510,\n },\n c: {\n x_min: 35,\n x_max: 456,\n y_min: -9,\n y_max: 507,\n ha: 516,\n leftSideBearing: 35,\n advanceWidth: 460,\n },\n d: {\n x_min: 45,\n x_max: 520,\n y_min: -15,\n y_max: 764,\n ha: 779,\n leftSideBearing: 45,\n advanceWidth: 560,\n },\n e: {\n x_min: 33,\n x_max: 370,\n y_min: -5,\n y_max: 501,\n ha: 506,\n leftSideBearing: 33,\n advanceWidth: 397,\n },\n f: {\n x_min: 35,\n x_max: 411,\n y_min: -13,\n y_max: 695,\n ha: 708,\n leftSideBearing: 35,\n advanceWidth: 453,\n },\n g: {\n x_min: 33,\n x_max: 551,\n y_min: -257,\n y_max: 505,\n ha: 762,\n leftSideBearing: 33,\n advanceWidth: 611,\n },\n h: {\n x_min: 32,\n x_max: 458,\n y_min: -29,\n y_max: 743,\n ha: 772,\n leftSideBearing: 32,\n advanceWidth: 491,\n },\n i: {\n x_min: 45,\n x_max: 167,\n y_min: -13,\n y_max: 631,\n ha: 644,\n leftSideBearing: 45,\n advanceWidth: 220,\n },\n j: {\n x_min: -127,\n x_max: 261,\n y_min: -231,\n y_max: 601,\n ha: 832,\n leftSideBearing: -127,\n advanceWidth: 308,\n },\n k: {\n x_min: 39,\n x_max: 443,\n y_min: -3,\n y_max: 700,\n ha: 703,\n leftSideBearing: 39,\n advanceWidth: 497,\n },\n l: {\n x_min: 58,\n x_max: 168,\n y_min: -8,\n y_max: 686,\n ha: 694,\n leftSideBearing: 58,\n advanceWidth: 227,\n },\n m: {\n x_min: 39,\n x_max: 688,\n y_min: -14,\n y_max: 501,\n ha: 515,\n leftSideBearing: 39,\n advanceWidth: 718,\n },\n n: {\n x_min: 45,\n x_max: 491,\n y_min: -32,\n y_max: 512,\n ha: 544,\n leftSideBearing: 45,\n advanceWidth: 541,\n },\n o: {\n x_min: 41,\n x_max: 424,\n y_min: -12,\n y_max: 493,\n ha: 505,\n leftSideBearing: 41,\n advanceWidth: 447,\n },\n p: {\n x_min: 25,\n x_max: 529,\n y_min: -260,\n y_max: 500,\n ha: 760,\n leftSideBearing: 25,\n advanceWidth: 573,\n },\n q: {\n x_min: 53,\n x_max: 603,\n y_min: -235,\n y_max: 514,\n ha: 749,\n leftSideBearing: 53,\n advanceWidth: 623,\n },\n r: {\n x_min: 32,\n x_max: 407,\n y_min: -7,\n y_max: 492,\n ha: 499,\n leftSideBearing: 32,\n advanceWidth: 460,\n },\n s: {\n x_min: 49,\n x_max: 416,\n y_min: -12,\n y_max: 519,\n ha: 531,\n leftSideBearing: 49,\n advanceWidth: 460,\n },\n t: {\n x_min: 32,\n x_max: 442,\n y_min: -5,\n y_max: 684,\n ha: 689,\n leftSideBearing: 32,\n advanceWidth: 469,\n },\n u: {\n x_min: 41,\n x_max: 487,\n y_min: -5,\n y_max: 507,\n ha: 512,\n leftSideBearing: 41,\n advanceWidth: 510,\n },\n v: {\n x_min: 16,\n x_max: 441,\n y_min: -20,\n y_max: 542,\n ha: 562,\n leftSideBearing: 16,\n advanceWidth: 456,\n },\n w: {\n x_min: 39,\n x_max: 639,\n y_min: -22,\n y_max: 505,\n ha: 527,\n leftSideBearing: 39,\n advanceWidth: 661,\n },\n x: {\n x_min: 15,\n x_max: 505,\n y_min: -39,\n y_max: 539,\n ha: 578,\n leftSideBearing: 15,\n advanceWidth: 541,\n },\n y: {\n x_min: -98,\n x_max: 501,\n y_min: -242,\n y_max: 511,\n ha: 753,\n leftSideBearing: -98,\n advanceWidth: 548,\n },\n z: {\n x_min: 27,\n x_max: 479,\n y_min: -3,\n y_max: 494,\n ha: 497,\n leftSideBearing: 27,\n advanceWidth: 494,\n },\n '{': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '|': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '}': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n '~': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 308,\n },\n },\n fontFamily: 'PetalumaScript',\n resolution: 1000,\n generatedOn: '2020-06-14T18:33:25.407Z',\n};\n","export const RobotoSlabFont = {\n spacing: 50,\n glyphs: {\n ' ': {\n x_min: 0,\n x_max: 509,\n y_min: 0,\n y_max: 2000,\n ha: 2000,\n leftSideBearing: 0,\n advanceWidth: 509,\n },\n '0': {\n x_min: 121,\n x_max: 1048,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1168,\n },\n '1': {\n x_min: 117,\n x_max: 767,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 117,\n advanceWidth: 844,\n },\n '2': {\n x_min: 75.8474576645637,\n x_max: 1040,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 75,\n advanceWidth: 1131,\n },\n '3': {\n x_min: 74.85365853658536,\n x_max: 994,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1106,\n },\n '4': {\n x_min: 63,\n x_max: 1114,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1187,\n },\n '5': {\n x_min: 96.8448275474953,\n x_max: 982,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 96,\n advanceWidth: 1081,\n },\n '6': {\n x_min: 121,\n x_max: 1067,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 121,\n advanceWidth: 1144,\n },\n '7': {\n x_min: 76,\n x_max: 1060,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: -30,\n advanceWidth: 1128,\n },\n '8': {\n x_min: 92,\n x_max: 1039,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 92,\n advanceWidth: 1131,\n },\n '9': {\n x_min: 84,\n x_max: 1026,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 84,\n advanceWidth: 1154,\n },\n '!': {\n x_min: 143,\n x_max: 340,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 143,\n advanceWidth: 483,\n },\n '\"': {\n x_min: 166,\n x_max: 634,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 770,\n },\n '#': {\n x_min: 63,\n x_max: 1179,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 63,\n advanceWidth: 1246,\n },\n $: {\n x_min: 81.92156915727656,\n x_max: 1012,\n y_min: -208,\n y_max: 1693,\n ha: 1901,\n leftSideBearing: 81,\n advanceWidth: 1110,\n },\n '%': {\n x_min: 77,\n x_max: 1384,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 77,\n advanceWidth: 1460,\n },\n '&': {\n x_min: 74,\n x_max: 1242,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 74,\n advanceWidth: 1289,\n },\n \"'\": {\n x_min: 166,\n x_max: 324,\n y_min: 1055,\n y_max: 1560,\n ha: 505,\n leftSideBearing: 166,\n advanceWidth: 460,\n },\n '(': {\n x_min: 114,\n x_max: 650,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 114,\n advanceWidth: 662,\n },\n ')': {\n x_min: 11,\n x_max: 547,\n y_min: -463,\n y_max: 1636,\n ha: 2099,\n leftSideBearing: 11,\n advanceWidth: 654,\n },\n '*': {\n x_min: 66,\n x_max: 893,\n y_min: 607,\n y_max: 1456,\n ha: 849,\n leftSideBearing: 66,\n advanceWidth: 958,\n },\n '+': {\n x_min: 73,\n x_max: 1071,\n y_min: 146,\n y_max: 1206,\n ha: 1060,\n leftSideBearing: 73,\n advanceWidth: 1145,\n },\n ',': {\n x_min: 23,\n x_max: 315,\n y_min: -311,\n y_max: 221,\n ha: 532,\n leftSideBearing: 23,\n advanceWidth: 404,\n },\n '-': {\n x_min: 154,\n x_max: 643,\n y_min: 538,\n y_max: 692,\n ha: 154,\n leftSideBearing: 154,\n advanceWidth: 797,\n },\n '.': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 202,\n ha: 202,\n leftSideBearing: 145,\n advanceWidth: 493,\n },\n '/': {\n x_min: 0,\n x_max: 774,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 0,\n advanceWidth: 824,\n },\n ':': {\n x_min: 145,\n x_max: 342,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 145,\n advanceWidth: 419,\n },\n ';': {\n x_min: 53,\n x_max: 345,\n y_min: -311,\n y_max: 1082,\n ha: 1393,\n leftSideBearing: 53,\n advanceWidth: 424,\n },\n '<': {\n x_min: 76,\n x_max: 892,\n y_min: 107,\n y_max: 1013,\n ha: 906,\n leftSideBearing: 76,\n advanceWidth: 1017,\n },\n '=': {\n x_min: 147,\n x_max: 981,\n y_min: 407,\n y_max: 987,\n ha: 580,\n leftSideBearing: 147,\n advanceWidth: 1127,\n },\n '>': {\n x_min: 125,\n x_max: 980,\n y_min: 87,\n y_max: 993,\n ha: 906,\n leftSideBearing: 125,\n advanceWidth: 1060,\n },\n '?': {\n x_min: 65.92660602419838,\n x_max: 890,\n y_min: 0,\n y_max: 1477,\n ha: 1477,\n leftSideBearing: 65,\n advanceWidth: 953,\n },\n '@': {\n x_min: 84.3592218305664,\n x_max: 1705.2346925277395,\n y_min: -453,\n y_max: 1431,\n ha: 1884,\n leftSideBearing: 84,\n advanceWidth: 1821,\n },\n A: {\n x_min: 70,\n x_max: 1463,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 70,\n advanceWidth: 1533,\n },\n B: {\n x_min: 81,\n x_max: 1253,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1322,\n },\n C: {\n x_min: 80,\n x_max: 1174,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1290,\n },\n D: {\n x_min: 81,\n x_max: 1291,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1356,\n },\n E: {\n x_min: 81,\n x_max: 1190,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1306,\n },\n F: {\n x_min: 81,\n x_max: 1176,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1256,\n },\n G: {\n x_min: 80,\n x_max: 1226,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 80,\n advanceWidth: 1346,\n },\n H: {\n x_min: 81,\n x_max: 1497,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1578,\n },\n I: {\n x_min: 81,\n x_max: 604,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 685,\n },\n J: {\n x_min: 60,\n x_max: 1100,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 60,\n advanceWidth: 1169,\n },\n K: {\n x_min: 81,\n x_max: 1427,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1501,\n },\n L: {\n x_min: 81,\n x_max: 1130,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1210,\n },\n M: {\n x_min: 94,\n x_max: 1888,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 94,\n advanceWidth: 1982,\n },\n N: {\n x_min: 83,\n x_max: 1509,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 83,\n advanceWidth: 1592,\n },\n O: {\n x_min: 70,\n x_max: 1281,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 70,\n advanceWidth: 1351,\n },\n P: {\n x_min: 81,\n x_max: 1242,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 81,\n advanceWidth: 1297,\n },\n Q: {\n x_min: 70,\n x_max: 1348,\n y_min: -245,\n y_max: 1477,\n ha: 1722,\n leftSideBearing: 70,\n advanceWidth: 1376,\n },\n R: {\n x_min: 81,\n x_max: 1285,\n y_min: 0,\n y_max: 1455,\n ha: 1455,\n leftSideBearing: 81,\n advanceWidth: 1385,\n },\n S: {\n x_min: 115,\n x_max: 1116,\n y_min: -21,\n y_max: 1477,\n ha: 1498,\n leftSideBearing: 115,\n advanceWidth: 1206,\n },\n T: {\n x_min: 96,\n x_max: 1306,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 96,\n advanceWidth: 1406,\n },\n U: {\n x_min: 70,\n x_max: 1452,\n y_min: -21,\n y_max: 1456,\n ha: 1477,\n leftSideBearing: 70,\n advanceWidth: 1522,\n },\n V: {\n x_min: 65,\n x_max: 1443,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1508,\n },\n W: {\n x_min: 72,\n x_max: 2057,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 72,\n advanceWidth: 2129,\n },\n X: {\n x_min: 80,\n x_max: 1449,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 80,\n advanceWidth: 1529,\n },\n Y: {\n x_min: 65,\n x_max: 1396,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 65,\n advanceWidth: 1461,\n },\n Z: {\n x_min: 90,\n x_max: 1107,\n y_min: 0,\n y_max: 1456,\n ha: 1456,\n leftSideBearing: 90,\n advanceWidth: 1197,\n },\n '[': {\n x_min: 157,\n x_max: 541,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 157,\n advanceWidth: 573,\n },\n '\\\\': {\n x_min: 36,\n x_max: 830,\n y_min: -125,\n y_max: 1456,\n ha: 1581,\n leftSideBearing: 36,\n advanceWidth: 841,\n },\n ']': {\n x_min: 23,\n x_max: 408,\n y_min: -312,\n y_max: 1664,\n ha: 1976,\n leftSideBearing: 23,\n advanceWidth: 552,\n },\n '^': {\n x_min: 71,\n x_max: 802,\n y_min: 729,\n y_max: 1456,\n ha: 727,\n leftSideBearing: 71,\n advanceWidth: 864,\n },\n _: {\n x_min: 119,\n x_max: 1041,\n y_min: -154,\n y_max: 0,\n ha: 154,\n leftSideBearing: 119,\n advanceWidth: 1168,\n },\n '`': {\n x_min: 40,\n x_max: 456,\n y_min: 1288,\n y_max: 1560,\n ha: 272,\n leftSideBearing: 40,\n advanceWidth: 496,\n },\n a: {\n x_min: 79,\n x_max: 1053,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 79,\n advanceWidth: 1132,\n },\n b: {\n x_min: -16,\n x_max: 1071,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: -16,\n advanceWidth: 1145,\n },\n c: {\n x_min: 78,\n x_max: 988,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1067,\n },\n d: {\n x_min: 78,\n x_max: 1156,\n y_min: -21,\n y_max: 1560,\n ha: 1581,\n leftSideBearing: 78,\n advanceWidth: 1218,\n },\n e: {\n x_min: 74,\n x_max: 980,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 74,\n advanceWidth: 1059,\n },\n f: {\n x_min: 64,\n x_max: 731,\n y_min: 0,\n y_max: 1581,\n ha: 1581,\n leftSideBearing: 64,\n advanceWidth: 725,\n },\n g: {\n x_min: 78,\n x_max: 1133,\n y_min: -437,\n y_max: 1102,\n ha: 1539,\n leftSideBearing: 78,\n advanceWidth: 1157,\n },\n h: {\n x_min: 49,\n x_max: 1255,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 49,\n advanceWidth: 1315,\n },\n i: {\n x_min: 67,\n x_max: 590,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 67,\n advanceWidth: 652,\n },\n j: {\n x_min: -56,\n x_max: 381,\n y_min: -437,\n y_max: 1560,\n ha: 1997,\n leftSideBearing: -56,\n advanceWidth: 525,\n },\n k: {\n x_min: 64,\n x_max: 1248,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 1287,\n },\n l: {\n x_min: 64,\n x_max: 587,\n y_min: 0,\n y_max: 1560,\n ha: 1560,\n leftSideBearing: 64,\n advanceWidth: 653,\n },\n m: {\n x_min: 74,\n x_max: 1905,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1977,\n },\n n: {\n x_min: 74,\n x_max: 1278,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 74,\n advanceWidth: 1343,\n },\n o: {\n x_min: 78,\n x_max: 1046,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 78,\n advanceWidth: 1124,\n },\n p: {\n x_min: 34,\n x_max: 1119,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 34,\n advanceWidth: 1197,\n },\n q: {\n x_min: 78,\n x_max: 1135,\n y_min: -416,\n y_max: 1102,\n ha: 1518,\n leftSideBearing: 78,\n advanceWidth: 1139,\n },\n r: {\n x_min: 72,\n x_max: 808,\n y_min: 0,\n y_max: 1102,\n ha: 1102,\n leftSideBearing: 72,\n advanceWidth: 854,\n },\n s: {\n x_min: 104,\n x_max: 933,\n y_min: -21,\n y_max: 1102,\n ha: 1123,\n leftSideBearing: 104,\n advanceWidth: 1022,\n },\n t: {\n x_min: 24,\n x_max: 678,\n y_min: -17,\n y_max: 1343,\n ha: 1360,\n leftSideBearing: 24,\n advanceWidth: 730,\n },\n u: {\n x_min: 52,\n x_max: 1181,\n y_min: -21,\n y_max: 1082,\n ha: 1103,\n leftSideBearing: 52,\n advanceWidth: 1245,\n },\n v: {\n x_min: 26,\n x_max: 1176,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 26,\n advanceWidth: 1206,\n },\n w: {\n x_min: 52,\n x_max: 1777,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 52,\n advanceWidth: 1823,\n },\n x: {\n x_min: 42,\n x_max: 1163,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 42,\n advanceWidth: 1203,\n },\n y: {\n x_min: 24,\n x_max: 1172,\n y_min: -437,\n y_max: 1082,\n ha: 1519,\n leftSideBearing: 24,\n advanceWidth: 1192,\n },\n z: {\n x_min: 88,\n x_max: 960,\n y_min: 0,\n y_max: 1082,\n ha: 1082,\n leftSideBearing: 88,\n advanceWidth: 1032,\n },\n '{': {\n x_min: 63,\n x_max: 671,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 63,\n advanceWidth: 701,\n },\n '|': {\n x_min: 150,\n x_max: 307,\n y_min: -270,\n y_max: 1456,\n ha: 1726,\n leftSideBearing: 150,\n advanceWidth: 451,\n },\n '}': {\n x_min: 27,\n x_max: 635,\n y_min: -364,\n y_max: 1597,\n ha: 1961,\n leftSideBearing: 27,\n advanceWidth: 701,\n },\n '~': {\n x_min: 121,\n x_max: 1257,\n y_min: 401,\n y_max: 803,\n ha: 402,\n leftSideBearing: 121,\n advanceWidth: 1386,\n },\n },\n fontFamily: 'Roboto Slab',\n resolution: 2048,\n generatedOn: '2020-06-15T19:12:58.120Z',\n};\n","export const SansFontBold = {\n glyphs: {\n '0': {\n x_min: 86,\n x_max: 1038,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 162,\n x_max: 806,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 162,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 51,\n x_max: 1036,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 51,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 77,\n x_max: 1051,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 38,\n x_max: 1092,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 38,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 91,\n x_max: 1077,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 91,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 87,\n x_max: 1066,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 87,\n x_max: 1048,\n y_min: 0,\n y_max: 1446,\n ha: 1446,\n leftSideBearing: 87,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1047,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 65,\n x_max: 1044,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 184,\n x_max: 488,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 184,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 112,\n x_max: 869,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 112,\n advanceWidth: 971,\n },\n '#': {\n x_min: 18,\n x_max: 1115,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 18,\n advanceWidth: 1139,\n },\n $: {\n x_min: 70,\n x_max: 1048,\n y_min: -205,\n y_max: 1584,\n ha: 1789,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 89,\n x_max: 1725,\n y_min: -59,\n y_max: 1491,\n ha: 1550,\n leftSideBearing: 89,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 90,\n x_max: 1446,\n y_min: -38,\n y_max: 1491,\n ha: 1529,\n leftSideBearing: 90,\n advanceWidth: 1479,\n },\n \"'\": {\n x_min: 92,\n x_max: 398,\n y_min: 945,\n y_max: 1466,\n ha: 521,\n leftSideBearing: 92,\n advanceWidth: 487,\n },\n '(': {\n x_min: 107,\n x_max: 616,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 107,\n advanceWidth: 682,\n },\n ')': {\n x_min: 67,\n x_max: 576,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 67,\n advanceWidth: 682,\n },\n '*': {\n x_min: 28,\n x_max: 753,\n y_min: 792,\n y_max: 1491,\n ha: 699,\n leftSideBearing: 28,\n advanceWidth: 797,\n },\n '+': {\n x_min: 85,\n x_max: 1110,\n y_min: 211,\n y_max: 1236,\n ha: 1025,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 117,\n x_max: 421,\n y_min: -327,\n y_max: 281,\n ha: 608,\n leftSideBearing: 117,\n advanceWidth: 569,\n },\n '-': {\n x_min: 115,\n x_max: 667,\n y_min: 391,\n y_max: 672,\n ha: 281,\n leftSideBearing: 115,\n advanceWidth: 682,\n },\n '.': {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 281,\n ha: 281,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n '/': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ':': {\n x_min: 201,\n x_max: 482,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 201,\n advanceWidth: 682,\n },\n ';': {\n x_min: 170,\n x_max: 474,\n y_min: -327,\n y_max: 1062,\n ha: 1389,\n leftSideBearing: 170,\n advanceWidth: 682,\n },\n '<': {\n x_min: 95,\n x_max: 1100,\n y_min: 167,\n y_max: 1281,\n ha: 1114,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 85,\n x_max: 1110,\n y_min: 372,\n y_max: 1074,\n ha: 702,\n leftSideBearing: 85,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 95,\n x_max: 1101,\n y_min: 166,\n y_max: 1279,\n ha: 1113,\n leftSideBearing: 95,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 106,\n x_max: 1158,\n y_min: 0,\n y_max: 1481,\n ha: 1481,\n leftSideBearing: 106,\n advanceWidth: 1251,\n },\n '@': {\n x_min: 61,\n x_max: 1990,\n y_min: -431,\n y_max: 1492,\n ha: 1923,\n leftSideBearing: 61,\n advanceWidth: 1997,\n },\n A: {\n x_min: 0,\n x_max: 1471,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1479,\n },\n B: {\n x_min: 150,\n x_max: 1378,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n C: {\n x_min: 97,\n x_max: 1374,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 97,\n advanceWidth: 1479,\n },\n D: {\n x_min: 148,\n x_max: 1377,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 148,\n advanceWidth: 1479,\n },\n E: {\n x_min: 149,\n x_max: 1264,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n F: {\n x_min: 151,\n x_max: 1156,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 151,\n advanceWidth: 1251,\n },\n G: {\n x_min: 98,\n x_max: 1469,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 98,\n advanceWidth: 1593,\n },\n H: {\n x_min: 150,\n x_max: 1322,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n I: {\n x_min: 140,\n x_max: 436,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 140,\n advanceWidth: 569,\n },\n J: {\n x_min: 35,\n x_max: 973,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 35,\n advanceWidth: 1139,\n },\n K: {\n x_min: 153,\n x_max: 1475,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 153,\n advanceWidth: 1479,\n },\n L: {\n x_min: 157,\n x_max: 1189,\n y_min: 0,\n y_max: 1454,\n ha: 1454,\n leftSideBearing: 157,\n advanceWidth: 1251,\n },\n M: {\n x_min: 145,\n x_max: 1561,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 145,\n advanceWidth: 1706,\n },\n N: {\n x_min: 152,\n x_max: 1315,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1479,\n },\n O: {\n x_min: 89,\n x_max: 1511,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n P: {\n x_min: 149,\n x_max: 1272,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 149,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 89,\n x_max: 1566,\n y_min: -147,\n y_max: 1491,\n ha: 1638,\n leftSideBearing: 89,\n advanceWidth: 1593,\n },\n R: {\n x_min: 150,\n x_max: 1468,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1479,\n },\n S: {\n x_min: 74,\n x_max: 1266,\n y_min: -26,\n y_max: 1491,\n ha: 1517,\n leftSideBearing: 74,\n advanceWidth: 1366,\n },\n T: {\n x_min: 44,\n x_max: 1209,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 44,\n advanceWidth: 1251,\n },\n U: {\n x_min: 147,\n x_max: 1316,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 147,\n advanceWidth: 1479,\n },\n V: {\n x_min: -1,\n x_max: 1364,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -1,\n advanceWidth: 1366,\n },\n W: {\n x_min: 7,\n x_max: 1931,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 7,\n advanceWidth: 1933,\n },\n X: {\n x_min: 0,\n x_max: 1363,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 0,\n advanceWidth: 1366,\n },\n Y: {\n x_min: -3,\n x_max: 1368,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 22,\n x_max: 1213,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 22,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 146,\n x_max: 644,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 146,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -3,\n x_max: 571,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: -3,\n advanceWidth: 569,\n },\n ']': {\n x_min: 38,\n x_max: 536,\n y_min: -413,\n y_max: 1466,\n ha: 1879,\n leftSideBearing: 38,\n advanceWidth: 682,\n },\n '^': {\n x_min: 115,\n x_max: 1080,\n y_min: 692,\n y_max: 1491,\n ha: 799,\n leftSideBearing: 115,\n advanceWidth: 1196,\n },\n _: {\n x_min: -19,\n x_max: 1149,\n y_min: -405,\n y_max: -223,\n ha: 182,\n leftSideBearing: -19,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 42,\n x_max: 495,\n y_min: 1192,\n y_max: 1491,\n ha: 299,\n leftSideBearing: 42,\n advanceWidth: 682,\n },\n a: {\n x_min: 73,\n x_max: 1070,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n b: {\n x_min: 135,\n x_max: 1172,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 135,\n advanceWidth: 1251,\n },\n c: {\n x_min: 85,\n x_max: 1087,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n d: {\n x_min: 84,\n x_max: 1121,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n e: {\n x_min: 65,\n x_max: 1057.2517482517483,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 65,\n advanceWidth: 1139,\n },\n f: {\n x_min: 24,\n x_max: 742,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 24,\n advanceWidth: 682,\n },\n g: {\n x_min: 84,\n x_max: 1120,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 84,\n advanceWidth: 1251,\n },\n h: {\n x_min: 146,\n x_max: 1113,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 146,\n advanceWidth: 1251,\n },\n i: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n j: {\n x_min: -94,\n x_max: 422,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 569,\n },\n k: {\n x_min: 137,\n x_max: 1119,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 137,\n advanceWidth: 1139,\n },\n l: {\n x_min: 147,\n x_max: 428,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 147,\n advanceWidth: 569,\n },\n m: {\n x_min: 126,\n x_max: 1688,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 126,\n advanceWidth: 1821,\n },\n n: {\n x_min: 145,\n x_max: 1113,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 145,\n advanceWidth: 1251,\n },\n o: {\n x_min: 82,\n x_max: 1178,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 82,\n advanceWidth: 1251,\n },\n p: {\n x_min: 139,\n x_max: 1175,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 139,\n advanceWidth: 1251,\n },\n q: {\n x_min: 91,\n x_max: 1122,\n y_min: -404,\n y_max: 1086,\n ha: 1490,\n leftSideBearing: 91,\n advanceWidth: 1251,\n },\n r: {\n x_min: 135,\n x_max: 823,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 797,\n },\n s: {\n x_min: 48,\n x_max: 1040,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 48,\n advanceWidth: 1139,\n },\n t: {\n x_min: 31,\n x_max: 657,\n y_min: -24,\n y_max: 1437,\n ha: 1461,\n leftSideBearing: 31,\n advanceWidth: 682,\n },\n u: {\n x_min: 141,\n x_max: 1107,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 141,\n advanceWidth: 1251,\n },\n v: {\n x_min: 11,\n x_max: 1114,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 11,\n advanceWidth: 1139,\n },\n w: {\n x_min: 9,\n x_max: 1592,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 9,\n advanceWidth: 1593,\n },\n x: {\n x_min: 12,\n x_max: 1120,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 12,\n advanceWidth: 1139,\n },\n y: {\n x_min: 14,\n x_max: 1106,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 14,\n advanceWidth: 1139,\n },\n z: {\n x_min: 34,\n x_max: 982,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 34,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 60,\n x_max: 744,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 60,\n advanceWidth: 797,\n },\n '|': {\n x_min: 176,\n x_max: 399,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 176,\n advanceWidth: 573,\n },\n '}': {\n x_min: 45,\n x_max: 729,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 45,\n advanceWidth: 797,\n },\n '~': {\n x_min: 67,\n x_max: 1129,\n y_min: 519,\n y_max: 924,\n ha: 405,\n leftSideBearing: 67,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'Arial',\n resolution: 2048,\n generatedOn: '2022-11-04T20:05:21.000Z',\n};\n","export const SansFont = {\n smufl: false,\n name: 'SANS',\n spacing: 50,\n Description: 'Built-in sans-serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: false,\n glyphs: {\n '0': {\n x_min: 85,\n x_max: 1041,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '1': {\n x_min: 223,\n x_max: 763,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 223,\n advanceWidth: 1139,\n },\n '2': {\n x_min: 61.840001123045234,\n x_max: 1031,\n y_min: 0,\n y_max: 1472,\n ha: 1472,\n leftSideBearing: 61,\n advanceWidth: 1139,\n },\n '3': {\n x_min: 86,\n x_max: 1046,\n y_min: -26,\n y_max: 1472,\n ha: 1498,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n '4': {\n x_min: 26,\n x_max: 1040,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 26,\n advanceWidth: 1139,\n },\n '5': {\n x_min: 85,\n x_max: 1057,\n y_min: -25,\n y_max: 1446,\n ha: 1471,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n '6': {\n x_min: 77,\n x_max: 1045,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 77,\n advanceWidth: 1139,\n },\n '7': {\n x_min: 97,\n x_max: 1046,\n y_min: 0,\n y_max: 1447,\n ha: 1447,\n leftSideBearing: 97,\n advanceWidth: 1139,\n },\n '8': {\n x_min: 83,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 83,\n advanceWidth: 1139,\n },\n '9': {\n x_min: 85,\n x_max: 1049,\n y_min: -25,\n y_max: 1472,\n ha: 1497,\n leftSideBearing: 85,\n advanceWidth: 1139,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n '!': {\n x_min: 176,\n x_max: 399,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 176,\n advanceWidth: 569,\n },\n '\"': {\n x_min: 94,\n x_max: 631,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 94,\n advanceWidth: 727,\n },\n '#': {\n x_min: 21,\n x_max: 1113,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 21,\n advanceWidth: 1139,\n },\n $: {\n x_min: 73,\n x_max: 1043,\n y_min: -211,\n y_max: 1601,\n ha: 1812,\n leftSideBearing: 73,\n advanceWidth: 1139,\n },\n '%': {\n x_min: 119,\n x_max: 1695,\n y_min: -54,\n y_max: 1491,\n ha: 1545,\n leftSideBearing: 119,\n advanceWidth: 1821,\n },\n '&': {\n x_min: 88,\n x_max: 1319,\n y_min: -34,\n y_max: 1491,\n ha: 1525,\n leftSideBearing: 88,\n advanceWidth: 1366,\n },\n \"'\": {\n x_min: 90,\n x_max: 295,\n y_min: 947,\n y_max: 1466,\n ha: 519,\n leftSideBearing: 90,\n advanceWidth: 391,\n },\n '(': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n ')': {\n x_min: 124,\n x_max: 608,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 124,\n advanceWidth: 682,\n },\n '*': {\n x_min: 64,\n x_max: 725,\n y_min: 867,\n y_max: 1491,\n ha: 624,\n leftSideBearing: 64,\n advanceWidth: 797,\n },\n '+': {\n x_min: 114,\n x_max: 1082,\n y_min: 237,\n y_max: 1206,\n ha: 969,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n ',': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 205,\n ha: 495,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '-': {\n x_min: 65,\n x_max: 618,\n y_min: 440,\n y_max: 621,\n ha: 181,\n leftSideBearing: 65,\n advanceWidth: 682,\n },\n '.': {\n x_min: 186,\n x_max: 391,\n y_min: 0,\n y_max: 205,\n ha: 205,\n leftSideBearing: 186,\n advanceWidth: 569,\n },\n '/': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ':': {\n x_min: 185,\n x_max: 390,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 185,\n advanceWidth: 569,\n },\n ';': {\n x_min: 170,\n x_max: 387,\n y_min: -290,\n y_max: 1062,\n ha: 1352,\n leftSideBearing: 170,\n advanceWidth: 569,\n },\n '<': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '=': {\n x_min: 114,\n x_max: 1082,\n y_min: 417,\n y_max: 1030,\n ha: 613,\n leftSideBearing: 114,\n advanceWidth: 1196,\n },\n '>': {\n x_min: 112,\n x_max: 1083,\n y_min: 226,\n y_max: 1219,\n ha: 993,\n leftSideBearing: 112,\n advanceWidth: 1196,\n },\n '?': {\n x_min: 90,\n x_max: 1036,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 90,\n advanceWidth: 1139,\n },\n '@': {\n x_min: 111,\n x_max: 2005,\n y_min: -431,\n y_max: 1493,\n ha: 1924,\n leftSideBearing: 111,\n advanceWidth: 2079,\n },\n A: {\n x_min: -3,\n x_max: 1369,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: -3,\n advanceWidth: 1366,\n },\n B: {\n x_min: 150,\n x_max: 1257,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n C: {\n x_min: 102,\n x_max: 1398,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 102,\n advanceWidth: 1479,\n },\n D: {\n x_min: 158,\n x_max: 1370,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1479,\n },\n E: {\n x_min: 162,\n x_max: 1256,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 162,\n advanceWidth: 1366,\n },\n F: {\n x_min: 168,\n x_max: 1157,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 168,\n advanceWidth: 1251,\n },\n G: {\n x_min: 109,\n x_max: 1465,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 109,\n advanceWidth: 1593,\n },\n H: {\n x_min: 164,\n x_max: 1314,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 164,\n advanceWidth: 1479,\n },\n I: {\n x_min: 191,\n x_max: 385,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 191,\n advanceWidth: 569,\n },\n J: {\n x_min: 58.84976474807333,\n x_max: 865,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 58,\n advanceWidth: 1024,\n },\n K: {\n x_min: 150,\n x_max: 1362,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1366,\n },\n L: {\n x_min: 150,\n x_max: 1066,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 150,\n advanceWidth: 1139,\n },\n M: {\n x_min: 152,\n x_max: 1551,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 152,\n advanceWidth: 1706,\n },\n N: {\n x_min: 156,\n x_max: 1311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 156,\n advanceWidth: 1479,\n },\n O: {\n x_min: 99,\n x_max: 1501,\n y_min: -25,\n y_max: 1492,\n ha: 1517,\n leftSideBearing: 99,\n advanceWidth: 1593,\n },\n P: {\n x_min: 158,\n x_max: 1277,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 158,\n advanceWidth: 1366,\n },\n Q: {\n x_min: 88,\n x_max: 1518,\n y_min: -114,\n y_max: 1492,\n ha: 1606,\n leftSideBearing: 88,\n advanceWidth: 1593,\n },\n R: {\n x_min: 161,\n x_max: 1453,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n S: {\n x_min: 92,\n x_max: 1259,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 92,\n advanceWidth: 1366,\n },\n T: {\n x_min: 48,\n x_max: 1210,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 48,\n advanceWidth: 1251,\n },\n U: {\n x_min: 161,\n x_max: 1314,\n y_min: -25,\n y_max: 1466,\n ha: 1491,\n leftSideBearing: 161,\n advanceWidth: 1479,\n },\n V: {\n x_min: 9,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n W: {\n x_min: 25,\n x_max: 1910,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 25,\n advanceWidth: 1933,\n },\n X: {\n x_min: 9,\n x_max: 1353,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 9,\n advanceWidth: 1366,\n },\n Y: {\n x_min: 6,\n x_max: 1350,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 6,\n advanceWidth: 1366,\n },\n Z: {\n x_min: 41,\n x_max: 1200,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 41,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 139,\n x_max: 536,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 139,\n advanceWidth: 569,\n },\n '\\\\': {\n x_min: 0,\n x_max: 569,\n y_min: -25,\n y_max: 1491,\n ha: 1516,\n leftSideBearing: 0,\n advanceWidth: 569,\n },\n ']': {\n x_min: 39,\n x_max: 436,\n y_min: -407,\n y_max: 1466,\n ha: 1873,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n '^': {\n x_min: 54,\n x_max: 907,\n y_min: 690,\n y_max: 1491,\n ha: 801,\n leftSideBearing: 54,\n advanceWidth: 961,\n },\n _: {\n x_min: -31,\n x_max: 1162,\n y_min: -407,\n y_max: -277,\n ha: 130,\n leftSideBearing: -31,\n advanceWidth: 1139,\n },\n '`': {\n x_min: 89,\n x_max: 465,\n y_min: 1194,\n y_max: 1474,\n ha: 280,\n leftSideBearing: 89,\n advanceWidth: 682,\n },\n a: {\n x_min: 74,\n x_max: 1052,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 74,\n advanceWidth: 1139,\n },\n b: {\n x_min: 134,\n x_max: 1055,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 134,\n advanceWidth: 1139,\n },\n c: {\n x_min: 80,\n x_max: 1005,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 80,\n advanceWidth: 1024,\n },\n d: {\n x_min: 70,\n x_max: 991,\n y_min: -24,\n y_max: 1466,\n ha: 1490,\n leftSideBearing: 70,\n advanceWidth: 1139,\n },\n e: {\n x_min: 75,\n x_max: 1054,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 75,\n advanceWidth: 1139,\n },\n f: {\n x_min: 19,\n x_max: 640,\n y_min: 0,\n y_max: 1491,\n ha: 1491,\n leftSideBearing: 19,\n advanceWidth: 569,\n },\n g: {\n x_min: 66,\n x_max: 1002,\n y_min: -431,\n y_max: 1086,\n ha: 1517,\n leftSideBearing: 66,\n advanceWidth: 1139,\n },\n h: {\n x_min: 135,\n x_max: 1000,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n i: {\n x_min: 136,\n x_max: 316,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 455,\n },\n j: {\n x_min: -94,\n x_max: 314,\n y_min: -431,\n y_max: 1466,\n ha: 1897,\n leftSideBearing: -94,\n advanceWidth: 455,\n },\n k: {\n x_min: 136,\n x_max: 1016,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 136,\n advanceWidth: 1024,\n },\n l: {\n x_min: 131,\n x_max: 311,\n y_min: 0,\n y_max: 1466,\n ha: 1466,\n leftSideBearing: 131,\n advanceWidth: 455,\n },\n m: {\n x_min: 135,\n x_max: 1574,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1706,\n },\n n: {\n x_min: 135,\n x_max: 998,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n o: {\n x_min: 68,\n x_max: 1063,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 68,\n advanceWidth: 1139,\n },\n p: {\n x_min: 135,\n x_max: 1057,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 135,\n advanceWidth: 1139,\n },\n q: {\n x_min: 72,\n x_max: 992,\n y_min: -407,\n y_max: 1086,\n ha: 1493,\n leftSideBearing: 72,\n advanceWidth: 1139,\n },\n r: {\n x_min: 133,\n x_max: 710,\n y_min: 0,\n y_max: 1086,\n ha: 1086,\n leftSideBearing: 133,\n advanceWidth: 682,\n },\n s: {\n x_min: 63,\n x_max: 945,\n y_min: -24,\n y_max: 1086,\n ha: 1110,\n leftSideBearing: 63,\n advanceWidth: 1024,\n },\n t: {\n x_min: 36,\n x_max: 554,\n y_min: -14,\n y_max: 1433,\n ha: 1447,\n leftSideBearing: 36,\n advanceWidth: 569,\n },\n u: {\n x_min: 131,\n x_max: 992,\n y_min: -24,\n y_max: 1062,\n ha: 1086,\n leftSideBearing: 131,\n advanceWidth: 1139,\n },\n v: {\n x_min: 26,\n x_max: 1000,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 26,\n advanceWidth: 1024,\n },\n w: {\n x_min: 6,\n x_max: 1463,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 6,\n advanceWidth: 1479,\n },\n x: {\n x_min: 15,\n x_max: 1009,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 15,\n advanceWidth: 1024,\n },\n y: {\n x_min: 33,\n x_max: 1006,\n y_min: -431,\n y_max: 1062,\n ha: 1493,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n z: {\n x_min: 40,\n x_max: 980,\n y_min: 0,\n y_max: 1062,\n ha: 1062,\n leftSideBearing: 40,\n advanceWidth: 1024,\n },\n '{': {\n x_min: 57,\n x_max: 636,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 57,\n advanceWidth: 684,\n },\n '|': {\n x_min: 188,\n x_max: 345,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 188,\n advanceWidth: 532,\n },\n '}': {\n x_min: 47,\n x_max: 626,\n y_min: -431,\n y_max: 1491,\n ha: 1922,\n leftSideBearing: 47,\n advanceWidth: 684,\n },\n '~': {\n x_min: 87,\n x_max: 1110,\n y_min: 557,\n y_max: 885,\n ha: 328,\n leftSideBearing: 87,\n advanceWidth: 1196,\n },\n },\n fontFamily: 'sans-serif',\n resolution: 2048,\n generatedOn: '2020-10-18T18:48:11.823Z',\n};\n","export const SerifFont = {\n smufl: false,\n name: 'SERIF',\n spacing: 50,\n Description: 'Built-in serif font',\n bold: true,\n italic: true,\n monospaced: false,\n serifs: true,\n glyphs: {\n '0': {\n x_min: 49,\n x_max: 975,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n '1': {\n x_min: 227,\n x_max: 811,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 227,\n advanceWidth: 1024,\n },\n '2': {\n x_min: 61,\n x_max: 965,\n y_min: 0,\n y_max: 1383,\n ha: 1383,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n '3': {\n x_min: 88,\n x_max: 883,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 88,\n advanceWidth: 1024,\n },\n '4': {\n x_min: 25,\n x_max: 967,\n y_min: 0,\n y_max: 1384,\n ha: 1384,\n leftSideBearing: 25,\n advanceWidth: 1024,\n },\n '5': {\n x_min: 66,\n x_max: 898,\n y_min: -27,\n y_max: 1409,\n ha: 1436,\n leftSideBearing: 66,\n advanceWidth: 1024,\n },\n '6': {\n x_min: 70,\n x_max: 958,\n y_min: -27,\n y_max: 1401,\n ha: 1428,\n leftSideBearing: 70,\n advanceWidth: 1024,\n },\n '7': {\n x_min: 41,\n x_max: 920,\n y_min: -16,\n y_max: 1356,\n ha: 1372,\n leftSideBearing: 41,\n advanceWidth: 1024,\n },\n '8': {\n x_min: 115,\n x_max: 911,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: 115,\n advanceWidth: 1024,\n },\n '9': {\n x_min: 61,\n x_max: 940,\n y_min: -41,\n y_max: 1383,\n ha: 1424,\n leftSideBearing: 61,\n advanceWidth: 1024,\n },\n ' ': {\n x_min: 0,\n x_max: 0,\n y_min: 0,\n y_max: 0,\n ha: 0,\n leftSideBearing: 0,\n advanceWidth: 512,\n },\n '!': {\n x_min: 266,\n x_max: 488,\n y_min: -22,\n y_max: 1383,\n ha: 1405,\n leftSideBearing: 266,\n advanceWidth: 682,\n },\n '\"': {\n x_min: 157.2000021972655,\n x_max: 678.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 157,\n advanceWidth: 836,\n },\n '#': {\n x_min: 10,\n x_max: 1016,\n y_min: -1,\n y_max: 1356,\n ha: 1357,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n $: {\n x_min: 90,\n x_max: 936,\n y_min: -180,\n y_max: 1492,\n ha: 1672,\n leftSideBearing: 90,\n advanceWidth: 1024,\n },\n '%': {\n x_min: 125,\n x_max: 1581,\n y_min: -30,\n y_max: 1388,\n ha: 1418,\n leftSideBearing: 125,\n advanceWidth: 1706,\n },\n '&': {\n x_min: 86,\n x_max: 1536,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1593,\n },\n \"'\": {\n x_min: 97.20000219726548,\n x_max: 273.2500021457677,\n y_min: 881,\n y_max: 1385,\n ha: 504,\n leftSideBearing: 97,\n advanceWidth: 369,\n },\n '(': {\n x_min: 98,\n x_max: 623,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 98,\n advanceWidth: 682,\n },\n ')': {\n x_min: 59,\n x_max: 584,\n y_min: -363,\n y_max: 1383,\n ha: 1746,\n leftSideBearing: 59,\n advanceWidth: 682,\n },\n '*': {\n x_min: 137.96078522291893,\n x_max: 886.039214777081,\n y_min: 543,\n y_max: 1383,\n ha: 840,\n leftSideBearing: 137,\n advanceWidth: 1024,\n },\n '+': {\n x_min: 61,\n x_max: 1093,\n y_min: 2,\n y_max: 1034,\n ha: 1032,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n ',': {\n x_min: 115,\n x_max: 399,\n y_min: -291,\n y_max: 208,\n ha: 499,\n leftSideBearing: 115,\n advanceWidth: 512,\n },\n '-': {\n x_min: 80,\n x_max: 584,\n y_min: 396,\n y_max: 525,\n ha: 129,\n leftSideBearing: 80,\n advanceWidth: 682,\n },\n '.': {\n x_min: 143,\n x_max: 371,\n y_min: -22,\n y_max: 205,\n ha: 227,\n leftSideBearing: 143,\n advanceWidth: 512,\n },\n '/': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ':': {\n x_min: 166,\n x_max: 394,\n y_min: -22,\n y_max: 943,\n ha: 965,\n leftSideBearing: 166,\n advanceWidth: 569,\n },\n ';': {\n x_min: 164,\n x_max: 448,\n y_min: -290,\n y_max: 943,\n ha: 1233,\n leftSideBearing: 164,\n advanceWidth: 569,\n },\n '<': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '=': {\n x_min: 61,\n x_max: 1093,\n y_min: 246,\n y_max: 791,\n ha: 545,\n leftSideBearing: 61,\n advanceWidth: 1155,\n },\n '>': {\n x_min: 57,\n x_max: 1098,\n y_min: -15,\n y_max: 1051,\n ha: 1066,\n leftSideBearing: 57,\n advanceWidth: 1155,\n },\n '?': {\n x_min: 139,\n x_max: 848,\n y_min: -15,\n y_max: 1383,\n ha: 1398,\n leftSideBearing: 139,\n advanceWidth: 909,\n },\n '@': {\n x_min: 238,\n x_max: 1657,\n y_min: -29,\n y_max: 1386,\n ha: 1415,\n leftSideBearing: 238,\n advanceWidth: 1886,\n },\n A: {\n x_min: 31,\n x_max: 1445,\n y_min: 0,\n y_max: 1380,\n ha: 1380,\n leftSideBearing: 31,\n advanceWidth: 1479,\n },\n B: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n C: {\n x_min: 57,\n x_max: 1296,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 57,\n advanceWidth: 1366,\n },\n D: {\n x_min: 33,\n x_max: 1403,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n E: {\n x_min: 25,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n F: {\n x_min: 25,\n x_max: 1119,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1139,\n },\n G: {\n x_min: 66,\n x_max: 1452,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 66,\n advanceWidth: 1479,\n },\n H: {\n x_min: 39,\n x_max: 1438,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 39,\n advanceWidth: 1479,\n },\n I: {\n x_min: 37,\n x_max: 642,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 37,\n advanceWidth: 682,\n },\n J: {\n x_min: 20,\n x_max: 758,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 20,\n advanceWidth: 797,\n },\n K: {\n x_min: 70,\n x_max: 1479,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n L: {\n x_min: 25,\n x_max: 1224,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1251,\n },\n M: {\n x_min: 25,\n x_max: 1768,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 25,\n advanceWidth: 1821,\n },\n N: {\n x_min: 25,\n x_max: 1450,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 25,\n advanceWidth: 1479,\n },\n O: {\n x_min: 70,\n x_max: 1409,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n P: {\n x_min: 33,\n x_max: 1110,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 33,\n advanceWidth: 1139,\n },\n Q: {\n x_min: 70,\n x_max: 1435,\n y_min: -364.28571588721996,\n y_max: 1383,\n ha: 1747.28571588722,\n leftSideBearing: 70,\n advanceWidth: 1479,\n },\n R: {\n x_min: 35,\n x_max: 1347,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1366,\n },\n S: {\n x_min: 86,\n x_max: 1006,\n y_min: -28,\n y_max: 1383,\n ha: 1411,\n leftSideBearing: 86,\n advanceWidth: 1139,\n },\n T: {\n x_min: 35,\n x_max: 1214,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 35,\n advanceWidth: 1251,\n },\n U: {\n x_min: 29,\n x_max: 1444,\n y_min: -28,\n y_max: 1356,\n ha: 1384,\n leftSideBearing: 29,\n advanceWidth: 1479,\n },\n V: {\n x_min: 33,\n x_max: 1428,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 33,\n advanceWidth: 1479,\n },\n W: {\n x_min: 10,\n x_max: 1906,\n y_min: -22,\n y_max: 1356,\n ha: 1378,\n leftSideBearing: 10,\n advanceWidth: 1933,\n },\n X: {\n x_min: 20,\n x_max: 1449,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 20,\n advanceWidth: 1479,\n },\n Y: {\n x_min: 45,\n x_max: 1441,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 45,\n advanceWidth: 1479,\n },\n Z: {\n x_min: 18,\n x_max: 1222,\n y_min: 0,\n y_max: 1356,\n ha: 1356,\n leftSideBearing: 18,\n advanceWidth: 1251,\n },\n '[': {\n x_min: 180,\n x_max: 612,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 180,\n advanceWidth: 682,\n },\n '\\\\': {\n x_min: -17,\n x_max: 586,\n y_min: -27,\n y_max: 1383,\n ha: 1410,\n leftSideBearing: -17,\n advanceWidth: 569,\n },\n ']': {\n x_min: 70,\n x_max: 502,\n y_min: -319,\n y_max: 1355,\n ha: 1674,\n leftSideBearing: 70,\n advanceWidth: 682,\n },\n '^': {\n x_min: 49,\n x_max: 914,\n y_min: 608,\n y_max: 1355,\n ha: 747,\n leftSideBearing: 49,\n advanceWidth: 961,\n },\n _: {\n x_min: 0,\n x_max: 1024,\n y_min: -255,\n y_max: -153,\n ha: 102,\n leftSideBearing: 0,\n advanceWidth: 1024,\n },\n '`': {\n x_min: 39,\n x_max: 499,\n y_min: 1037,\n y_max: 1392.509803639748,\n ha: 355.50980363974804,\n leftSideBearing: 39,\n advanceWidth: 682,\n },\n a: {\n x_min: 76,\n x_max: 905,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 76,\n advanceWidth: 909,\n },\n b: {\n x_min: 6,\n x_max: 958,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 6,\n advanceWidth: 1024,\n },\n c: {\n x_min: 51,\n x_max: 843,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n d: {\n x_min: 55,\n x_max: 1006,\n y_min: -20,\n y_max: 1399,\n ha: 1419,\n leftSideBearing: 55,\n advanceWidth: 1024,\n },\n e: {\n x_min: 51,\n x_max: 868,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 51,\n advanceWidth: 909,\n },\n f: {\n x_min: 41,\n x_max: 783,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 41,\n advanceWidth: 682,\n },\n g: {\n x_min: 57,\n x_max: 963,\n y_min: -446,\n y_max: 942,\n ha: 1388,\n leftSideBearing: 57,\n advanceWidth: 1024,\n },\n h: {\n x_min: 18,\n x_max: 997,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n i: {\n x_min: 33,\n x_max: 516,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 33,\n advanceWidth: 569,\n },\n j: {\n x_min: -142,\n x_max: 397,\n y_min: -446,\n y_max: 1399,\n ha: 1845,\n leftSideBearing: -142,\n advanceWidth: 569,\n },\n k: {\n x_min: 14,\n x_max: 1029,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 14,\n advanceWidth: 1024,\n },\n l: {\n x_min: 39,\n x_max: 523,\n y_min: 0,\n y_max: 1399,\n ha: 1399,\n leftSideBearing: 39,\n advanceWidth: 569,\n },\n m: {\n x_min: 33,\n x_max: 1587,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1593,\n },\n n: {\n x_min: 33,\n x_max: 993,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 33,\n advanceWidth: 1024,\n },\n o: {\n x_min: 59,\n x_max: 963,\n y_min: -20,\n y_max: 942,\n ha: 962,\n leftSideBearing: 59,\n advanceWidth: 1024,\n },\n p: {\n x_min: 10,\n x_max: 964,\n y_min: -443,\n y_max: 944,\n ha: 1387,\n leftSideBearing: 10,\n advanceWidth: 1024,\n },\n q: {\n x_min: 49,\n x_max: 999,\n y_min: -443,\n y_max: 942.0135137169275,\n ha: 1385.0135137169275,\n leftSideBearing: 49,\n advanceWidth: 1024,\n },\n r: {\n x_min: 10,\n x_max: 685,\n y_min: 0,\n y_max: 944,\n ha: 944,\n leftSideBearing: 10,\n advanceWidth: 682,\n },\n s: {\n x_min: 104,\n x_max: 713,\n y_min: -20,\n y_max: 942.0263161804552,\n ha: 962.0263161804552,\n leftSideBearing: 104,\n advanceWidth: 797,\n },\n t: {\n x_min: 27,\n x_max: 572,\n y_min: -18,\n y_max: 1186,\n ha: 1204,\n leftSideBearing: 27,\n advanceWidth: 569,\n },\n u: {\n x_min: 18,\n x_max: 981,\n y_min: -21,\n y_max: 921,\n ha: 942,\n leftSideBearing: 18,\n advanceWidth: 1024,\n },\n v: {\n x_min: 39,\n x_max: 976,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 39,\n advanceWidth: 1024,\n },\n w: {\n x_min: 43,\n x_max: 1423,\n y_min: -28,\n y_max: 921,\n ha: 949,\n leftSideBearing: 43,\n advanceWidth: 1479,\n },\n x: {\n x_min: 35,\n x_max: 989,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 35,\n advanceWidth: 1024,\n },\n y: {\n x_min: 29,\n x_max: 976,\n y_min: -445,\n y_max: 921,\n ha: 1366,\n leftSideBearing: 29,\n advanceWidth: 1024,\n },\n z: {\n x_min: 55,\n x_max: 855,\n y_min: 0,\n y_max: 921,\n ha: 921,\n leftSideBearing: 55,\n advanceWidth: 909,\n },\n '{': {\n x_min: 205,\n x_max: 717,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 205,\n advanceWidth: 983,\n },\n '|': {\n x_min: 137,\n x_max: 273,\n y_min: -512,\n y_max: 1535,\n ha: 2047,\n leftSideBearing: 137,\n advanceWidth: 410,\n },\n '}': {\n x_min: 266,\n x_max: 778,\n y_min: -377,\n y_max: 1397,\n ha: 1774,\n leftSideBearing: 266,\n advanceWidth: 983,\n },\n '~': {\n x_min: 82,\n x_max: 1028,\n y_min: 380,\n y_max: 666,\n ha: 286,\n leftSideBearing: 82,\n advanceWidth: 1108,\n },\n },\n fontFamily: 'serif',\n resolution: 2048,\n generatedOn: '2020-10-18T19:03:12.514Z',\n};\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Utility methods used by the rest of the VexFlow codebase.\nimport { Flow } from './flow';\nimport { log, RuntimeError } from './util';\nexport class Vex {\n // Users of `Vex.forEach(a, fn)` should use `Array.prototype.forEach()` instead.\n // static forEach(arr: T[], callbackFn: (value: T, index: number, array: T[]) => void) {\n // arr.forEach(callbackFn);\n // }\n /**\n * Take `arr` and return a new list consisting of the sorted, unique,\n * contents of arr. Does not modify `arr`.\n */\n // eslint-disable-next-line\n static sortAndUnique(arr, cmp, eq) {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n return newArr;\n }\n else {\n return arr;\n }\n }\n /** Check if array `arr` contains `obj`. */\n // eslint-disable-next-line\n static contains(arr, obj) {\n let i = arr.length;\n while (i--) {\n if (arr[i] === obj) {\n return true;\n }\n }\n return false;\n }\n // Get the 2D Canvas context from DOM element `canvas_sel`.\n static getCanvasContext(canvasSelector) {\n if (!canvasSelector) {\n throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector);\n }\n const canvas = document.getElementById(canvasSelector);\n if (!(canvas && canvas.getContext)) {\n throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');\n }\n return canvas.getContext('2d');\n }\n /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */\n // eslint-disable-next-line\n static benchmark(s, f) {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n log(s, elapsed + 'ms');\n }\n // Get stack trace.\n static stackTrace() {\n const err = new Error();\n return err.stack;\n }\n}\nVex.Flow = Flow;\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n// If you are adding a new music engraving font, search for instances of ADD_MUSIC_FONT throughout the code base.\n// To compile your new font into vexflow.js, take a look at src/fonts/load_all.ts\n// You can export a font module which can be dynamically loaded by vexflow-core.js (see: Gruntfile.js).\n// ADD_MUSIC_FONT\n// To add a new music engraving font XXX, make a copy of this file and name it load_xxx.ts.\n// Then you will need to generate xxx_glyphs.ts and xxx_metrics.ts.\n// xxx_glyphs.ts is created by tools/fonts/fontgen_smufl.js\n// xxx_metrics.ts is created by hand. You could copy bravura_metrics.ts and modify/remove/add entries where necessary.\nimport { Font } from '../font';\nimport { BravuraFont } from './bravura_glyphs';\nimport { BravuraMetrics } from './bravura_metrics';\nexport function loadBravura() {\n Font.load('Bravura', BravuraFont, BravuraMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { GonvilleSmuflFont } from './gonville_glyphs';\nimport { GonvilleMetrics } from './gonville_metrics';\nexport function loadGonville() {\n Font.load('Gonville', GonvilleSmuflFont, GonvilleMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { PetalumaFont } from './petaluma_glyphs';\nimport { PetalumaMetrics } from './petaluma_metrics';\nexport function loadPetaluma() {\n Font.load('Petaluma', PetalumaFont, PetalumaMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { CustomFont } from './custom_glyphs';\nimport { CustomMetrics } from './custom_metrics';\nexport function loadCustom() {\n Font.load('Custom', CustomFont, CustomMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { LelandFont } from './leland_glyphs';\nimport { LelandMetrics } from './leland_metrics';\nexport function loadLeland() {\n Font.load('Leland', LelandFont, LelandMetrics);\n}\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\n//\n// vexflow.ts is the entry point for the build output file vexflow.js.\n// It statically bundles all the music engraving fonts, and sets the music font stack to:\n// Flow.setMusicFont('Bravura', 'Gonville', 'Custom');\n// The webpack config inside Gruntfile.js sets the mode to 'production' to produce a minified build.\nimport { Flow } from '../src/flow';\nimport { loadAllMusicFonts } from '../src/fonts/load_all';\nimport { loadTextFonts } from '../src/fonts/textfonts';\nloadAllMusicFonts();\nFlow.setMusicFont('Bravura', 'Gonville', 'Custom');\nloadTextFonts();\n// Re-export all exports from index.ts.\nexport * from '../src/index';\n// Also collect all exports into a default export for CJS projects.\nexport * as default from '../src/index';\n","// [VexFlow](https://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// MIT License\nimport { Font } from '../font';\nimport { TextFormatter } from '../textformatter';\nimport { PetalumaScriptFont } from './petalumascript_glyphs';\nimport { RobotoSlabFont } from './robotoslab_glyphs';\nimport { SansFontBold } from './sans_bold_text_metrics';\nimport { SansFont } from './sans_text_metrics';\nimport { SerifFont } from './serif_text_metrics';\nexport function loadTextFonts() {\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFontBold;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: true,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Sans-serif fallback font, very close to Arial\n {\n const fontData = SansFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Usually @ is the tallest and widest character, although not the\n // highest since it starts below the baseline.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Generic SANS font',\n });\n }\n // Serif fallback font, very close to Times\n {\n const fontData = SerifFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = '@';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Generic SERIF font',\n });\n }\n // Roboto Slab\n {\n const fontData = RobotoSlabFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // Previously we used 'H', but it isn't actually the tallest or the widest.\n // Interestingly, the lowercase 'b' is the tallest glyph.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: true,\n description: 'Text font to pair with the Bravura / Gonville music fonts.',\n });\n }\n // PetalumaScript\n {\n const fontData = PetalumaScriptFont;\n const { fontFamily, resolution, glyphs } = fontData;\n Font.load(fontFamily, fontData);\n // M is wider, but H is taller. :-)\n // Lowercase b is also taller in this font.\n const maxSizeGlyph = 'b';\n TextFormatter.registerInfo({\n family: fontFamily,\n resolution,\n glyphs,\n maxSizeGlyph,\n monospaced: false,\n bold: false,\n italic: false,\n superscriptOffset: 0.66,\n subscriptOffset: 0.66,\n serifs: false,\n description: 'Text font to pair with the Petaluma music font.',\n });\n }\n}\n"],"names":["root","factory","exports","module","define","amd","window","globalThis","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","Function","e","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","isCategory","category","checkAncestors","constructorFcn","constructor","CATEGORY","getPrototypeOf","isAccidental","Category","Accidental","isAnnotation","Annotation","isBarline","Barline","isDot","Dot","isGraceNote","GraceNote","isGraceNoteGroup","GraceNoteGroup","isNote","Note","isRenderContext","RenderContext","isStaveNote","StaveNote","isStemmableNote","StemmableNote","isTabNote","TabNote","RuntimeError","Error","code","message","super","globalObject","self","defined","x","undefined","log","block","args","line","Array","slice","join","console","warn","err","stack","midLine","a","b","mid_line","n","parseInt","prefix","text","normalizeAngle","Math","PI","sumArray","arr","reduce","Fraction","static","Number","isNaN","t","GCD","length","LCM","shift","LCMM","numerator","denominator","set","simplify","u","d","gcd","add","param1","param2","otherNumerator","otherDenominator","getNumeratorAndDenominator","lcm","subtract","multiply","divide","equals","compare","__staticFractionA","copy","__staticFractionB","greaterThan","greaterThanEquals","lessThan","lessThanEquals","clone","other","quotient","floor","remainder","makeAbs","abs","toString","toSimplifiedString","__staticFractionTmp","toMixedString","s","q","f","parse","str","i","split","BoundingBox","that","y","w","h","getX","getY","getW","getH","setX","setY","setW","setH","move","mergeWith","boundingBox","new_x","new_y","new_w","max","new_h","BoundingBoxComputation","x1","NaN","y1","x2","y2","getX1","getY1","width","height","addPoint","addX","addY","addQuadraticCurve","p0x","p0y","p1x","p1y","p2x","p2y","p01x","denom","it","p01y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","c","b2ac","t1","sqrt","t2","FontWeight","FontStyle","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","rejected","result","done","then","apply","fontParser","Fonts","Font","fontSize","SIZE","_a","scaleToPxFrom","pt","parseFloat","unit","replace","toLowerCase","size","weight","style","fromCSSString","family","SANS_SERIF","NORMAL","cssFontShorthand","document","createElement","font","fontFamily","fontWeight","fontStyle","fontInfo","st","trim","wt","sz","scaleFactor","parsedWeight","ITALIC","fontName","woffURL","includeWoff2","fontFace","FontFace","load","fonts","host","WEB_FONT_HOST","files","WEB_FONT_FILES","fontPath","loadWebFont","data","metrics","setData","setMetrics","name","getName","getData","getMetrics","hasData","getResolution","resolution","getGlyphs","glyphs","lookupMetric","defaultValue","keyParts","currObj","SERIF","px","em","in","mm","cm","PetalumaScript","Index","id","type","class","Registry","defaultRegistry","registry","index","clear","setIndexValue","elem","updateIndex","oldValue","getElementById","getAttribute","register","setAttribute","onRegister","_b","getElementsByAttribute","attribute","index_attr","index_attr_val","keys","map","k","getElementsByType","getElementsByClass","className","onUpdate","info","includes","Element","ID","children","attrs","newID","getCategory","rendered","getDefaultRegistry","addChildElement","child","push","setStyle","setGroupStyle","forEach","getStyle","applyStyle","context","save","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","setFillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","restoreStyle","restore","drawWithStyle","checkContext","draw","hasClass","indexOf","addClass","removeClass","splice","isRendered","setRendered","getAttributes","getSVGElement","suffix","element","oldID","getBoundingBox","getContext","setContext","setFont","toCSSString","textFont","defaultTextFont","TEXT_FONT","fontIsObject","fontIsString","fontIsUndefined","sizeWeightStyleAreUndefined","assign","validate","getFont","resetFont","setFontSize","getFontSize","fontSizeInPoints","convertSizeToPointValue","fontSizeInPixels","convertSizeToPixelValue","RESOLUTION","durations","durationAliases","keySignatures","C","num","Am","F","acc","Dm","Bb","Gm","Eb","Cm","Ab","Fm","Db","Bbm","Gb","Ebm","Cb","Abm","G","Em","D","Bm","A","E","B","clefs","treble","line_shift","bass","tenor","alto","soprano","percussion","subbass","french","notesInfo","int_val","CN","accidental","CB","CBB","DN","DB","DBB","EN","EB","EBB","FN","FB","FBB","GN","GB","GBB","AN","AB","ABB","BN","BB","BBB","R","rest","X","octave","shift_right","accidentals","parenRightPaddingAdjustment","bb","db","bs","bss","bbs","ashs","afhf","accSagittal5v7KleismaUp","accSagittal5v7KleismaDown","accSagittal5CommaUp","accSagittal5CommaDown","accSagittal7CommaUp","accSagittal7CommaDown","accSagittal25SmallDiesisUp","accSagittal25SmallDiesisDown","accSagittal35MediumDiesisUp","accSagittal35MediumDiesisDown","accSagittal11MediumDiesisUp","accSagittal11MediumDiesisDown","accSagittal11LargeDiesisUp","accSagittal11LargeDiesisDown","accSagittal35LargeDiesisUp","accSagittal35LargeDiesisDown","accSagittalSharp25SDown","accSagittalFlat25SUp","accSagittalSharp7CDown","accSagittalFlat7CUp","accSagittalSharp5CDown","accSagittalFlat5CUp","accSagittalSharp5v7kDown","accSagittalFlat5v7kUp","accSagittalSharp","accSagittalFlat","accSagittalSharp5v7kUp","accSagittalFlat5v7kDown","accSagittalSharp5CUp","accSagittalFlat5CDown","accSagittalSharp7CUp","accSagittalFlat7CDown","accSagittalSharp25SUp","accSagittalFlat25SDown","accSagittalSharp35MUp","accSagittalFlat35MDown","accSagittalSharp11MUp","accSagittalFlat11MDown","accSagittalSharp11LUp","accSagittalFlat11LDown","accSagittalSharp35LUp","accSagittalFlat35LDown","accSagittalDoubleSharp25SDown","accSagittalDoubleFlat25SUp","accSagittalDoubleSharp7CDown","accSagittalDoubleFlat7CUp","accSagittalDoubleSharp5CDown","accSagittalDoubleFlat5CUp","accSagittalDoubleSharp5v7kDown","accSagittalDoubleFlat5v7kUp","accSagittalDoubleSharp","accSagittalDoubleFlat","accSagittal7v11KleismaUp","accSagittal7v11KleismaDown","accSagittal17CommaUp","accSagittal17CommaDown","accSagittal55CommaUp","accSagittal55CommaDown","accSagittal7v11CommaUp","accSagittal7v11CommaDown","accSagittal5v11SmallDiesisUp","accSagittal5v11SmallDiesisDown","accSagittalSharp5v11SDown","accSagittalFlat5v11SUp","accSagittalSharp7v11CDown","accSagittalFlat7v11CUp","accSagittalSharp55CDown","accSagittalFlat55CUp","accSagittalSharp17CDown","accSagittalFlat17CUp","accSagittalSharp7v11kDown","accSagittalFlat7v11kUp","accSagittalSharp7v11kUp","accSagittalFlat7v11kDown","accSagittalSharp17CUp","accSagittalFlat17CDown","accSagittalSharp55CUp","accSagittalFlat55CDown","accSagittalSharp7v11CUp","accSagittalFlat7v11CDown","accSagittalSharp5v11SUp","accSagittalFlat5v11SDown","accSagittalDoubleSharp5v11SDown","accSagittalDoubleFlat5v11SUp","accSagittalDoubleSharp7v11CDown","accSagittalDoubleFlat7v11CUp","accSagittalDoubleSharp55CDown","accSagittalDoubleFlat55CUp","accSagittalDoubleSharp17CDown","accSagittalDoubleFlat17CUp","accSagittalDoubleSharp7v11kDown","accSagittalDoubleFlat7v11kUp","accSagittal23CommaUp","accSagittal23CommaDown","accSagittal5v19CommaUp","accSagittal5v19CommaDown","accSagittal5v23SmallDiesisUp","accSagittal5v23SmallDiesisDown","accSagittalSharp5v23SDown","accSagittalFlat5v23SUp","accSagittalSharp5v19CDown","accSagittalFlat5v19CUp","accSagittalSharp23CDown","accSagittalFlat23CUp","accSagittalSharp23CUp","accSagittalFlat23CDown","accSagittalSharp5v19CUp","accSagittalFlat5v19CDown","accSagittalSharp5v23SUp","accSagittalFlat5v23SDown","accSagittalDoubleSharp5v23SDown","accSagittalDoubleFlat5v23SUp","accSagittalDoubleSharp5v19CDown","accSagittalDoubleFlat5v19CUp","accSagittalDoubleSharp23CDown","accSagittalDoubleFlat23CUp","accSagittal19SchismaUp","accSagittal19SchismaDown","accSagittal17KleismaUp","accSagittal17KleismaDown","accSagittal143CommaUp","accSagittal143CommaDown","accSagittal11v49CommaUp","accSagittal11v49CommaDown","accSagittal19CommaUp","accSagittal19CommaDown","accSagittal7v19CommaUp","accSagittal7v19CommaDown","accSagittal49SmallDiesisUp","accSagittal49SmallDiesisDown","accSagittal23SmallDiesisUp","accSagittal23SmallDiesisDown","accSagittal5v13MediumDiesisUp","accSagittal5v13MediumDiesisDown","accSagittal11v19MediumDiesisUp","accSagittal11v19MediumDiesisDown","accSagittal49MediumDiesisUp","accSagittal49MediumDiesisDown","accSagittal5v49MediumDiesisUp","accSagittal5v49MediumDiesisDown","accSagittal49LargeDiesisUp","accSagittal49LargeDiesisDown","accSagittal11v19LargeDiesisUp","accSagittal11v19LargeDiesisDown","accSagittal5v13LargeDiesisUp","accSagittal5v13LargeDiesisDown","accSagittalSharp23SDown","accSagittalFlat23SUp","accSagittalSharp49SDown","accSagittalFlat49SUp","accSagittalSharp7v19CDown","accSagittalFlat7v19CUp","accSagittalSharp19CDown","accSagittalFlat19CUp","accSagittalSharp11v49CDown","accSagittalFlat11v49CUp","accSagittalSharp143CDown","accSagittalFlat143CUp","accSagittalSharp17kDown","accSagittalFlat17kUp","accSagittalSharp19sDown","accSagittalFlat19sUp","accSagittalSharp19sUp","accSagittalFlat19sDown","accSagittalSharp17kUp","accSagittalFlat17kDown","accSagittalSharp143CUp","accSagittalFlat143CDown","accSagittalSharp11v49CUp","accSagittalFlat11v49CDown","accSagittalSharp19CUp","accSagittalFlat19CDown","accSagittalSharp7v19CUp","accSagittalFlat7v19CDown","accSagittalSharp49SUp","accSagittalFlat49SDown","accSagittalSharp23SUp","accSagittalFlat23SDown","accSagittalSharp5v13MUp","accSagittalFlat5v13MDown","accSagittalSharp11v19MUp","accSagittalFlat11v19MDown","accSagittalSharp49MUp","accSagittalFlat49MDown","accSagittalSharp5v49MUp","accSagittalFlat5v49MDown","accSagittalSharp49LUp","accSagittalFlat49LDown","accSagittalSharp11v19LUp","accSagittalFlat11v19LDown","accSagittalSharp5v13LUp","accSagittalFlat5v13LDown","accSagittalDoubleSharp23SDown","accSagittalDoubleFlat23SUp","accSagittalDoubleSharp49SDown","accSagittalDoubleFlat49SUp","accSagittalDoubleSharp7v19CDown","accSagittalDoubleFlat7v19CUp","accSagittalDoubleSharp19CDown","accSagittalDoubleFlat19CUp","accSagittalDoubleSharp11v49CDown","accSagittalDoubleFlat11v49CUp","accSagittalDoubleSharp143CDown","accSagittalDoubleFlat143CUp","accSagittalDoubleSharp17kDown","accSagittalDoubleFlat17kUp","accSagittalDoubleSharp19sDown","accSagittalDoubleFlat19sUp","accSagittalShaftUp","accSagittalShaftDown","accSagittalAcute","accSagittalGrave","accSagittal1MinaUp","accSagittal1MinaDown","accSagittal2MinasUp","accSagittal2MinasDown","accSagittal1TinaUp","accSagittal1TinaDown","accSagittal2TinasUp","accSagittal2TinasDown","accSagittal3TinasUp","accSagittal3TinasDown","accSagittal4TinasUp","accSagittal4TinasDown","accSagittal5TinasUp","accSagittal5TinasDown","accSagittal6TinasUp","accSagittal6TinasDown","accSagittal7TinasUp","accSagittal7TinasDown","accSagittal8TinasUp","accSagittal8TinasDown","accSagittal9TinasUp","accSagittal9TinasDown","accSagittalFractionalTinaUp","accSagittalFractionalTinaDown","accidentalNarrowReversedFlat","accidentalNarrowReversedFlatAndFlat","accidentalWilsonPlus","accidentalWilsonMinus","articulations","between_lines","av","aboveCode","belowCode","ao","ah","am","ornaments","mordent","mordent_inverted","turn","turn_inverted","tr","upprall","downprall","prallup","pralldown","upmordent","downmordent","lineprall","prallprall","scoop","doit","fall","doitLong","fallLong","bend","plungerClosed","plungerOpen","flip","jazzTurn","smear","Tables","MUSIC_FONT_STACK","clef","keyOctaveGlyph","params","options","octave_shift","duration","sanitizeDuration","pieces","toUpperCase","clefProperties","stroke","int_value","customNoteHeadProps","glyphName","codeNoteHead","displaced","integer","noteValue","fret","scale","glyph","shift_y","glyphMetrics","Glyph","TABLATURE_FONT_SCALE","textWidth","getWidth","artic","spec","keySpec","notes","acc_list","durationNumber","durationToFraction","ticks","durationCodes","glyphTypeProperties","code_head","common","NOTATION_FONT_SCALE","SOFTMAX_FACTOR","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RENDER_PRECISION_PLACES","SLASH_NOTEHEAD_WIDTH","STAVE_LINE_DISTANCE","TEXT_HEIGHT_OFFSET_HACK","accidentalMap","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","unicode","sharp","String","fromCharCode","flat","natural","triangle","degrees","circle","validTypes","m","ci","cx","sf","sb","sq","tu","td","TIME4_4","num_beats","beat_value","stem","flag","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","ledger_code_head","beam_count","stem_beam_extension","code_flag_upstem","code_flag_downstem","OutlineCode","ModifierPosition","GlyphCacheEntry","fontStack","point","loadMetrics","bbox","getOutlineBoundingBox","outline","x_shift","y_shift","lookupFontMetric","GlyphOutline","originX","originY","precision","round","nextX","nextY","parts","MOVE","LINE","QUADRATIC","BEZIER","lookupGlyph","x_min","x_max","ha","cached_outline","ctx","x_pos","y_pos","cache","lookup","customScale","renderOutline","go","beginPath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","fill","bboxComp","penX","penY","topGlyphs","botGlyphs","originShift","setOptions","reset","getCode","setPoint","setStave","stave","getXShift","setXShift","getYshift","setYShift","checkMetrics","metricsScale","setOriginX","xShift","setOriginY","yShift","setOrigin","render","xPos","yPos","checkStave","renderToStave","getYForGlyphs","Map","entries","CURRENT_CACHE_KEY","entry","Modifier","Position","PositionString","center","CENTER","above","ABOVE","below","BELOW","left","LEFT","right","RIGHT","text_line","spacingFromNextModifier","setWidth","getNote","note","checkAttachedNote","setNote","getIndex","checkIndex","setIndex","getModifierContext","modifierContext","checkModifierContext","setModifierContext","getPosition","setPosition","setTextLine","setSpacingFromNextModifier","getSpacingFromNextModifier","alignSubNotesWithNote","subNotes","tickContext","getTickContext","getStave","subNoteXOffset","modLeftPx","modRightPx","subNote","subTickContext","setXOffset","Music","NUM_TONES","canonical_notes","roots","root_values","root_indices","diatonic_intervals","diatonic_accidentals","unison","m2","M2","m3","M3","p4","dim5","p5","m6","M6","b7","M7","intervals","b2","min2","S","H","maj2","T","W","b3","min3","maj3","b5","aug4","b6","aug5","maj6","m7","min7","dom7","maj7","scales","major","minor","ionian","dorian","phyrgian","lydian","mixolydian","aeolian","locrian","scaleTypes","M","noteValues","root_index","cn","cb","cbb","dn","dbb","en","eb","ebb","fn","fb","fbb","gn","gb","gbb","an","ab","abb","bn","bbb","isValidNoteValue","isValidIntervalValue","interval","getNoteParts","noteString","match","exec","getKeyParts","keyString","getNoteValue","getIntervalValue","intervalString","getCanonicalNoteName","getCanonicalIntervalName","intervalValue","getRelativeNoteValue","direction","sum","getRelativeNoteName","rootValue","multiplier","reverse_interval","relativeNoteName","getScaleTones","tones","nextNote","getIntervalBetween","note1","note2","difference","createScaleMap","keySignature","keySigParts","scaleName","keySigString","noteLocation","scaleMap","rootName","noteName","L","DEBUG","state","musicFont","currentMusicFont","noteheadAccidentalPadding","leftShift","left_shift","accidentalSpacing","additionalPadding","accList","prevNote","shiftL","props","getKeyProps","getLeftDisplacedHeadPx","lineSpace","getSpacingBetweenLines","getYForLine","accLine","sort","lineList","previousLine","accShift","flatLine","dblSharpLine","numAcc","column","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","line1","line2","groupLength","groupMember","endCase","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","clearance","clearanceRequired","collision","voices","tickPositions","tickNoteMap","voice","tickPosition","getTickables","shouldIgnoreTicks","notesAtPosition","getTicks","music","scaleMapKey","tickPos","tickables","modifiedPitches","processNote","isRest","staveNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","getModifiers","modifier","addModifier","getGraceNotes","render_options","font_scale","parenLeftPadding","parenRightPadding","accidentalCodes","cautionary","fontScale","parenLeft","parenRight","parenWidth","setAsCautionary","start","getModifierStartXY","accX","accY","Stem","UP","DOWN","WIDTH","HEIGHT","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","setNoteHeadXBounds","setDirection","setExtension","ext","getExtension","setYBounds","getHeight","y_offset","getExtents","isStemUp","ys","stemHeight","innerMostNoteheadY","min","outerMostNoteheadY","topY","baseY","setVisibility","isVisible","setStemlet","adjustHeightForFlag","adjustHeightForBeam","stem_x","stem_y","y_base_offset","stemletYOffset","openGroup","pointerBBox","closeGroup","TextFormatter","textWidthCache","textHeightCache","registeredFonts","formatterInfo","requestedFont","candidates","requestedFamilies","requestedFamily","startsWith","formatter","values","bold","isBold","italic","isItalic","perfectMatch","find","partialMatch","fontSizeInPt","overwrite","serifs","monospaced","superscriptOffset","subscriptOffset","maxSizeGlyph","cacheKey","updateParams","localHeightCache","updateCacheKey","BOLD","getGlyphMetrics","character","maxHeight","getWidthForCharacterInEm","advanceWidth","getYForCharacterInPx","rv","yMin","yMax","y_min","y_max","getYForStringInPx","extent","curY","getWidthForTextInEm","cachedWidths","getWidthForTextInPx","AnnotationHorizontalJustify","AnnotationVerticalJustify","minAnnotationPadding","annotations","leftWidth","rightWidth","maxLeftGlyphWidth","maxRightGlyphWidth","annotation","textFormatter","create","verticalSpaceNeeded","glyphWidth","getGlyphProps","horizontalJustification","stemDirection","hasStem","getStemDirection","lines","draw_stem","getStem","getNoteType","getNumLines","verticalJustification","VerticalJustify","TOP","noteLine","getLineNumber","leastString","top_text_line","BOTTOM","greatestString","curBottom","rightOverlap","right_shift","leftOverlap","setVerticalJustification","just","VerticalJustifyString","getJustification","setJustification","HorizontalJustifyString","text_width","text_height","getStemX","stem_ext","spacing","has_stem","checkStem","getYs","yt","getYForTopText","getYForBottomText","getTopLineTopY","extents","getStemExtents","fillText","HorizontalJustify","centerStem","CENTER_STEM","top","bottom","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveOrGraceNote","Articulation","maxGlyphWidth","getIncrement","articulation","increment","curTop","maxWidth","articWidth","overlap","builder","articNameToCode","staccato","tenuto","accent","articString","getFactory","articulationCodes","endsWith","setBetweenLines","betweenLines","textLine","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","padding","stemTipY","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","articLine","snappedLine","snapLineToStaff","setRawFont","drawDot","color","arc","closePath","Tickable","_preFormatted","_postFormatted","intrinsicTicks","tickMultiplier","modifiers","tupletStack","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","iterations","space","used","mean","deviation","setIgnoreTicks","checkTickContext","getFormatterMetrics","getCenterXShift","isCenterAligned","setCenterXShift","centerXShift","setCenterAlignment","getVoice","setVoice","getTuplet","tuplet","getTupletStack","resetTuplet","noteCount","notesOccupied","getNoteCount","getNotesOccupied","applyTickMultiplier","pop","setTuplet","addToModifierContext","mc","addMember","setTickContext","tc","preFormat","preFormatted","postFormat","postFormatted","getIntrinsicTicks","setIntrinsicTicks","getTickMultiplier","setDuration","getAbsoluteX","xStart","leftDisplacedHeadPx","xPre1","xAbs","xPost1","notePx","xPost2","rightDisplacedHeadPx","xEnd","xFreedomRight","xWidth","yy","spaceDeviation","durationString","dots","noteStruct","durationProps","parseDuration","customTypes","durationToTicks","currentTicks","parsedNoteStruct","parseNoteStruct","JSON","stringify","keyProps","noteType","duration_override","glyphProps","customGlyphs","playNote","annotation_spacing","glyph_font_scale","stroke_px","getPlayNote","setPlayNote","addStroke","setYs","getRightDisplacedHeadPx","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","isTopNote","getLineForRest","getGlyph","getGlyphWidth","getDuration","isDotted","getModifiersByType","getBeam","beam","checkBeam","hasBeam","setBeam","signature","filter","getRightParenthesisPx","getLeftParenthesisPx","getFirstDotPx","getMembers","getState","glyphPx","getNoteStartX","getTieRightX","tieStartX","getTieLeftX","tieEndX","getKeys","StaveModifierPosition","BarlineType","ChordSymbolHorizontalJustify","ChordSymbolVerticalJustify","SymbolTypes","SymbolModifiers","StaveModifier","placeGlyphOnLine","customShift","getPadding","setPadding","setLayoutMetrics","layoutMetrics","getLayoutMetrics","typeString","single","SINGLE","double","DOUBLE","end","END","repeatBegin","REPEAT_BEGIN","repeatEnd","REPEAT_END","repeatBoth","REPEAT_BOTH","none","NONE","thickness","TYPE","widths","paddings","layoutMetricsMap","xMin","xMax","paddingLeft","paddingRight","BEGIN","setType","getType","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","staveCtx","botY","getBottomLineBottomY","fillRect","begin","dot_x","dot_radius","dot_y","BarNote","barline","Bend","bends","last_width","stringPos","release","phrase","tap","line_width","line_style","bend_width","release_width","updateWidth","setTap","getText","getTextHeight","totalWidth","additional_width","draw_width","lowestY","bend_height","annotation_y","renderBend","cp_x","cp_y","renderRelease","renderArrowHead","yBase","renderText","render_x","measureText","last_bend","last_bend_draw_width","last_drawn_width","ChordSymbol","superSubRatio","global","NO_TEXT_FORMAT","val","noFormat","glyphCode","engravingFontResolution","spacingBetweenBlocks","metric","getMetricForGlyph","yOffset","leftSideBearing","kerningOffset","chordSymbol","lowerKerningText","upperKerningText","symbolModifier","SUPERSCRIPT","SUBSCRIPT","minPadding","symbols","nonSuperWidth","symbol","fontAdj","scaleSize","glyphAdj","symbolWidth","lineSpaces","vAlign","j","symbolBlocks","sup","isSuperscript","sub","isSubscript","superSubScale","adj","symbolType","GLYPH","superSubFontSize","getWidthForGlyph","getYShiftForGlyph","getXShiftForGlyph","TEXT","getYOffsetForText","over","prev","setEnableKerning","updateKerningAdjustments","updateOverBarAdjustments","getVertical","getReportWidth","getHorizontal","horizontal","vertical","useKerning","reportWidth","setReportWidth","barIndex","findIndex","xoff","yoff","symIndex","accum","getKerningAdjustment","currSymbol","prevSymbol","adjustment","preKernUpper","preKernLower","some","xx","kerningOffsetPixels","getSymbolBlock","_c","symbolBlock","glyphArgs","glyphPoints","addSymbolBlock","parameters","addText","addTextSuperscript","addTextSubscript","addGlyphSuperscript","addGlyph","addGlyphOrText","char","addLine","setVertical","vj","setHorizontal","hj","stem_base","isSuper","isSub","smallerFontSize","diminished","dim","halfDiminished","augmented","majorSeventh","leftParen","rightParen","leftBracket","rightBracket","leftParenTall","rightParenTall","symbolTypes","symbolModifiers","all","dot","setDotShiftY","dot_list","max_shift_map","note_id","dot_shift","x_width","last_line","last_note","prev_dotted_space","half_shiftY","radius","forceFlagRight","FretHandFinger","nums","nums_list","prev_note","shiftLeft","shiftRight","pos","textHeight","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","lastLine","lastNote","num_shift","numWidth","fingerings","fingeringString","number","Fingering","fingering","finger","x_offset","setFretHandFinger","getFretHandFinger","setOffsetX","setOffsetY","NoteHead","custom_glyph","stem_up_x_offset","stem_down_x_offset","note_type","glyph_code","custom_glyph_code","slashed","isDisplaced","getLine","setLine","displacementStemAdjustment","fontShift","displacedFontShift","half_spacing","min_y","getYForNote","head_x","categorySuffix","staveSpace","durationToNumber","breve_lines","drawSlashNoteHead","renderGlyph","setStem","buildStem","buildFlag","hasFlag","flagCode","getBaseCustomNoteHeadGlyphProps","getStemLength","getStemExtension","getBeamCount","getStemMinimumLength","setStemDirection","offsets","offsetYBaseStemUp","offsetYTopStemUp","offsetYBaseStemDown","offsetYTopStemDown","getCenterGlyphX","stem_extension_override","setStemLength","drawStem","stemOptions","shiftRestVertical","dir","delta","maxLine","minLine","setKeyLine","getKeyLine","STEM_UP","STEM_DOWN","LEDGER_LINE_OFFSET","minNoteheadPadding","notesList","sortedKeyProps","minL","stemMax","stemMin","maxL","isrest","voice_shift","getVoiceShiftWidth","is_displaced","noteU","noteM","noteL","voiceXShift","lineSpacing","lineDiff","whiteNoteHeadCount","blackNoteHeadCount","centerRest","ledgerLineStyle","use_default_head_x","_noteHeads","calculateKeyProps","auto_stem","autoStem","noteHeadStyles","noteHead","buildNoteHeads","noteHeadStyle","head","calcNoteDisplacements","noteProps","notehead","calculateOptimalStemDirection","keyProperties","minY","maxY","halfLineSpacing","frac","resultLine","thisLine","isChord","getNoteHeadBounds","setNoteDisplaced","getRightShift","restLine","isInnerNoteIndex","setStemStyle","getStemStyle","setLedgerLineStyle","getLedgerLineStyle","setFlagStyle","getFlagStyle","setKeyStyle","noteHeadPadding","shouldDrawFlag","nonDisplacedX","displacedX","highestDisplacedLine","lowestDisplacedLine","yTop","Infinity","yBottom","highestLine","lowestLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","getNoteHeadEndX","noteHeads","note_heads","drawLedgerLines","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getDefaultLedgerLineStyle","drawModifiers","noteheadParam","noteheadStyle","hasNoBeam","drawFlag","_d","_e","noteStemHeight","flagX","flagY","getStaveNoteScale","drawNoteHeads","super_stem_extension","mid_line_distance","lines_over_octave_from_mid_line","spacing_between_lines","xBegin","shouldRenderStem","stemX","StaveTie","setNotes","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","first_note","first_indices","last_indices","isPartial","renderTie","first_ys","last_ys","last_x_px","first_x_px","first_y_px","last_y_px","top_cp_y","bottom_cp_y","center_x","getNotes","getTieStartX","getTieEndX","TabTie","VoiceMode","Voice","Mode","time","voiceTime","resolutionMultiplier","mode","STRICT","ticksUsed","largestTickWidth","softmaxFactor","totalTicks","smallestTickCount","getTotalTicks","getTicksUsed","getLargestTickWidth","getSmallestTickCount","getMode","setMode","getResolutionMultiplier","getActualResolution","tickable","setStrict","strict","SOFT","isComplete","FULL","setSoftmaxFactor","factor","expTicksUsed","reCalculateExpTicksUsed","softmax","tickValue","v","exp","addTickable","addTickables","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","grace_notes","show_slur","slur","slur_y_shift","beams","Formatter","joinVoices","format","getMinTotalWidth","beamNotes","Beam","beam_width","partial_beam_length","graceNote","TieClass","NoteSubGroup","groups","group","TickContext","tContext","contexts","tContexts","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","totalLeftPx","totalRightPx","getTickID","getXBase","setXBase","getXOffset","getMaxTicks","getMinTicks","getMaxTickable","getMinTickable","getTickableForVoice","voiceIndex","getTickablesByVoice","getCenterAlignedTickables","getCurrentTick","setCurrentTick","tick","Ornament","ornament","ornamentRelease","ornamentAttack","reportedWidth","ornamentArticulation","ornamentNoteTransition","ornamentAlignWithNoteHead","ornamentMetrics","delayed","accidentalLowerPadding","accidentalUpperPadding","ornamentCodes","adjustForStemDirection","stemUpYOffset","setDelayed","setUpperAccidental","accid","accidentalUpper","setLowerAccidental","accidentalLower","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","startX","nextContext","getNextContext","Parenthesis","parentheses","x_widthL","x_widthR","parenthesis","isHTMLCanvas","HTMLCanvasElement","toDataURL","isHTMLDiv","HTMLDivElement","appendChild","CanvasContext","CANVAS_BROWSER_SIZE_LIMIT","limit","context2D","canvas","clearRect","cls","setBackgroundFillStyle","blur","getTransform","setLineCap","capType","lineCap","setLineDash","dash","resize","devicePixelRatio","sanitizeCanvasDims","rect","cp1x","cp1y","cp2x","cp2y","cpx","cpy","startAngle","endAngle","counterclockwise","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ATTRIBUTES_TO_IGNORE","path","SVG_NS","TWO_PI","SVGContext","backgroundFillStyle","fontCSSString","svg","parent","pen","defaultFontAttributes","scaleX","scaleY","attributes","groupAttributes","applyAttributes","shadow_attributes","state_stack","svgElementType","createElementNS","lineDash","visibleWidth","visibleHeight","setViewBox","viewBox_or_minX","viewBoxString","attrNamesToIgnore","nodeName","attrName","setAttributeNS","lastChild","removeChild","rectangle","x0","cos","y0","sin","tmpStartTest","tmpEndTest","large","sweep","getShadowStyle","sa","measureTextCache","txt","textContent","savedState","fontAttributes","RendererBackends","RendererLineEndType","TextJustification","VoltaType","measureImpl","getBBox","Renderer","elementId","backend","background","renderer","lastContext","buildContext","Backends","CANVAS","SVG","fromX","fromY","toX","toY","dashPattern","dx","dy","angle","atan2","idx","dashLength","nx","ny","arg0","arg1","maybeElement","willReadFrequently","LineEndType","StringNumber","stringNumber","verticalPadding","stemPadding","leftPadding","rightPadding","shift_left","glyphLine","num_shiftR","num_width","string_number","stem_offset","dashed","leg","drawCircle","setLineEndType","setStringNumber","setLastNote","setDashed","setDrawCircle","len","pattern","drawDashedLine","Stroke","strokes","strokeList","string","getPositions","strokeShift","all_voices","addEndNote","note_end","line_space","arrow","arrow_shift_x","arrow_y","text_y","Type","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","RASQUEDO_DOWN","ROLL_UP","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","strokeLine","Vibrato","vibratos","vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","setHarsh","vx","vy","renderVibrato","opts","num_waves","ModifierContext","members","formatted","member","getLeftShift","Clef","types","tab","annotationSmufl","attachment","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","convertToGlyph","nextAcc","accGlyphData","extraWidth","xPosition","cancelKey","convertToCancelAccList","cancel_accList","different_types","naturals","cancelled","concat","addToStave","convertAccLines","customLines","offset","alterKey","convertToAlterAccList","firstAccidentalType","cancelAccList","getEndClef","getClef","Repetition","symbol_type","setShiftX","setShiftY","CODA_RIGHT","drawCodaFixed","CODA_LEFT","drawSymbolText","SEGNO_LEFT","drawSignoFixed","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","TO_CODA","draw_coda","text_x","symbol_x","modifierWidth","getVerticalBarWidth","StaveSection","section","drawRect","shift_x","setStaveSection","textY","headroom","StaveTempo","tempo","setTempo","bpm","noteTextFont","noteTextFormatter","stem_height","flagMetrics","TextNote","GLYPHS","segno","mordent_upper","mordent_lower","p","z","coda","pedal_open","pedal_close","caesura_straight","caesura_curved","breath","superscript","subscript","smooth","justification","struct","Justification","StaveText","setStaveText","setText","getBottomLineY","Volta","volta","top_y","vert_height","BEGIN_END","TimeSignatureGlyph","timeSignature","topDigits","botDigits","topWidth","timeSigType","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","topLine","bottomLine","TimeSignature","timeSpec","customPadding","validate_args","is_numeric","fontLineShift","setTimeSig","parseTimeSpec","numbers","test","assertIsValidTimeSig","makeTimeSignatureGlyph","getInfo","setGlyph","getTimeSpec","getIsNumeric","setIsNumeric","isNumeric","SORT_ORDER_BEG_MODIFIERS","SORT_ORDER_END_MODIFIERS","Stave","defaultPadding","end_x","measure","endClef","vertical_bar_width","num_lines","fill_style","left_bar","right_bar","spacing_between_lines_px","space_above_staff_ln","space_below_staff_ln","top_text_position","bottom_text_position","line_config","bounds","defaultLedgerLineStyle","resetLines","addEndModifier","setDefaultLedgerLineStyle","visible","setNoteStartX","getNoteEndX","setNumLines","mod","setMeasure","getMeasure","getModifierXShift","begBarline","setRepetitionType","setVoltaType","number_t","setSection","staveSection","getLineForY","setBegBarType","setEndBarType","setClef","clefSpec","addClef","setEndClef","setKeySignature","addKeySignature","setEndKeySignature","setTimeSignature","timeSignatures","addTimeSignature","setEndTimeSignature","addEndClef","addEndTimeSignature","addTrebleGlyph","noPosition","noCategory","sortByCategory","items","order","temp","endBarline","begModifiers","endModifiers","lastBarlineIdx","getConfigForLines","setConfigForLine","line_number","setConfigForLines","lines_configuration","staves","adjustCategoryStartX","minStartX","adjustX","allModifiers","bAdjust","maxX","drawBoldDoubleLine","topX","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","texts","newType","content","SINGLE_RIGHT","THIN_DOUBLE","attachment_height","SINGLE_LEFT","BRACE","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","BRACKET","getRestLineForNextNoteGroup","currRestLine","currNoteIndex","nextRestLine","noteIndex","singleRight","singleLeft","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","paddingBetween","accumulator","stavePadding","contextGaps","gaps","gap","totalCost","toFixed","total","auto_beam","align_rests","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","currTickable","prevTickable","formatterOptions","globalSoftmax","maxIterations","justifyWidth","durationStats","minTotalWidth","hasMinTotalWidth","tickContexts","array","list","modifierContexts","lossHistory","alignRests","AlignRestsToNotes","preCalculateMinTotalWidth","unalignedPadding","unalignedCtxCount","wsum","dsum","createTickContexts","contextList","contextMap","wavg","wvar","ll","wpads","davg","dvar","dpads","padmax","unalignedPad","createModifierContexts","tickToContextMap","integerTicks","staveTickToContextMap","newContext","makeContext","addToContext","tickList","createContexts","contextArray","getTickContexts","renderingContext","voicesParam","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","expectedDistance","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","fromTickable","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","contextX","ideal","errorPx","negativeShiftPx","configMinPadding","configMaxPadding","targetWidth","distances","actualWidth","minDistance","mdCalc","di","calcMinDistance","paddingMaxCalc","curTargetWidth","lastTickablePadding","lastTickable","tickWidth","paddingMax","paddingMin","prevTick","prevMetrics","currMetrics","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","tune","alpha","current","cost","optionsParam","TupletLocation","Tuplet","LOCATION_TOP","LOCATION_BOTTOM","NESTING_OFFSET","tupletMetrics","numerator_glyphs","denom_glyphs","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","ratioed","setTupletLocation","location","resolveGlyphs","attach","detach","setBracketed","setRatioed","getBeatsOccupied","setBeatsOccupied","beats","setNotesOccupied","unshift","getNestedTupletCount","maxTupletCount","countTuplets","minTupletCount","tupletCount","getYPosition","nested_tuplet_y_offset","topModifierOffset","modLines","modY","noteHeadOffset","stemOffset","lineCheck","nn","bottom_y","addGlyphWidth","notation_start_x","shiftY","colon_x","colon_radius","calculateStemDirection","lineSum","keyProp","BEAM_LEFT","BEAM_RIGHT","BEAM_BOTH","time_sig","beatTotal","beatValue","generateBeams","config","tickGroups","unprocessedNotes","currentTickGroup","noteGroups","currentGroup","nextTickGroup","nextGroup","currentGroupTotalTicks","unprocessedNote","ticksPerGroup","vf_notes","memo","unbeamable","createGroups","sanitizedGroups","tempGroup","isFirstOrLast","breaksOnEachRest","beam_rests","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","sanitizeGroups","findFirstNote","applyStemDirection","beamedNoteGroups","beamable","allTuplets","uniqueTuplets","noteTuplet","getTuplets","show_stemlets","secondary_breaks","secondary_break_ticks","flat_beams","flat_beam_offset","slope","forcedPartialDirections","stem_weight","break_on_indices","max_slope","min_slope","slope_iterations","slope_cost","stemlet_extension","min_flat_beam_offset","beamCount","breakSecondaryAt","indices","setPartialBeamSideAt","side","unsetPartialBeamSideAt","getSlopeY","calculateSlope","firstNote","initialSlope","firstStemTipY","firstStemX","getStemSlope","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","diff","idealSlope","calculateFlatSlope","extremeY","extremeBeamCount","currentExtreme","extremeTest","newOffset","getBeamYToDraw","beamY","applyStemExtensions","beamedStemTipY","preBeamExtension","beamExtension","crossStemExtension","totalBeamWidth","lookupBeamDirection","prev_tick","next_tick","forcedBeamDirection","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","getBeamLines","tick_of_duration","beam_started","beam_lines","current_beam","previous_should_break","tick_tally","should_break","next_note","beam_alone","beam_direction","last_beam","drawStems","drawBeamLines","valid_beam_durations","beamThickness","beamLines","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","ClefNote","abs_x","Crescendo","extend_left","extend_right","decrescendo","setHeight","setDecrescendo","decresc","tick_context","next_context","begin_x","half_height","reverse","renderHairpin","CurvePosition","Curve","nearHead","NEAR_HEAD","nearTop","NEAR_TOP","from","to","position_end","invert","cps","renderCurve","first_x","first_y","last_x","last_y","cp0x","cp0y","cp_spacing","end_metric","Parser","flattenMatches","matchedString","results","grammar","errorPos","expect","matchFail","returnPos","matchSuccess","matchToken","token","noSpace","regexp","RegExp","success","incrementPos","expectOne","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","numMatches","expectOneOrMore","more","expectZeroOrMore","ruleFunc","bind","oneOrMore","zeroOrMore","matches","run","EasyScore","EasyScoreGrammar","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","MICROTONES","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Piece","chord","Builder","commitHooks","elements","rollingDuration","resetPiece","getElements","addCommitHook","commitHook","piece","addNote","standardAccidentals","notePiece","GhostNote","buildAndAttach","setId","commaSeparatedRegex","setClass","defaults","easyScoreHook","throwOnError","parser","ERROR_MSG","parameter","GlyphNote","ignoreTicks","SCALE","slash","ret","staveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","KeySigNote","semibreve_rest","MultiMeasureRest","number_of_measures","xs","hasPaddingLeft","hasPaddingRight","hasLineThickness","hasSymbolSpacing","padding_left","padding_right","line_thickness","symbol_spacing","use_symbols","show_number","number_line","number_glyph_point","serif_thickness","semibreve_rest_glyph_scale","getXs","drawLine","spacingBetweenLines","lineThicknessHalf","serifThickness","bot","leftIndented","rightIndented","lineTop","lineBottom","drawSymbols","n4","n2","n1","get_semibreve_rest","rest_scale","rest_width","yMiddle","timeSig","drawPedalGlyph","glyph_data","PedalMarking","pedal","MIXED","setCustomText","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","depress","drawBracketed","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawText","pedal_depress","pedal_release","mixed","CODES","RepeatNote","drawArrowHead","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","applyLineStyle","applyFontStyle","drawArrowLine","pt1","pt2","both_arrows","distance","ratio","end_y","start_y","line_angle","angle1","angle2","top_x","bottom_x","start_position","end_position","first_index","last_index","upwards_slope","notehead_width","vertical_position","System","partStaves","partStaveInfos","partVoices","spaceBetweenStaves","autoWidth","noJustification","debugFormatter","formatIterations","noPadding","details","formatOptions","getStaves","getVoices","addConnector","connector","addStave","staveOptions","spaceAbove","spaceBelow","debugNoteMetrics","addVoices","options_details","debugNoteMetricsYs","part","lastY","formatBegModifiers","plotDebugging","plotMetrics","glyphPropsArr","positions","ghost","draw_dots","draw_stem_through_stave","setGhost","tabToGlyphProps","getStemY","stemDownLine","stemStartLine","flag_x","flag_y","drawStemThrough","stemThrough","stemLines","unused_strings","up_stem","down_stem","line_spacing","total_lines","stem_lines","strings","containsLastString","containsFirstString","line_ys","isTopBound","isBottomBound","getPartialStemLines","strings_used","stem_through","getUnusedStringGroups","drawPositions","tab_x","render_stem","TabStave","addTabGlyph","TextBracket","TextBracketPosition","Positions","PositionsString","stop","show_bracket","underline_superscript","main_measure","main_width","main_height","super_y","super_measure","super_width","super_height","line_y","TextDynamics","sequence","glyph_font_size","total_width","letter","letter_x","current_letter","TimeSigNote","tsGlyph","VibratoBracket","bracket_data","stop_x","Factory","renderQ","systems","initRenderer","ghostNote","textNote","barNote","clefNote","timeSigNote","keySigNote","hJustify","vJustify","kerning","upperAccidental","lowerAccidental","numMeasures","multiMeasureRest","secondaryBeamBreaks","partialBeamDirections","curve","tie","vibratoBracket","textBracket","system","GraceTabNote","KeyManager","setKey","getKey","scaleMapByValue","originalScaleMapByValue","getAccidental","selectNote","scaleNote","modparts","change","valueNote","originalValueNote","StaveHairpin","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","left_shift_px","right_shift_px","setRenderOptions","hairpin","dis","staff_height","l_shift","r_shift","CRESC","DECRESC","TabSlide","SLIDE_UP","SLIDE_DOWN","first_fret","last_fret","slide_y","Tremolo","y_spacing_scale","extra_stroke_scale","y_spacing","Tuning","names","standard","dagdad","dropd","standardBanjo","tuningString","tuningValues","setTuning","noteToInteger","getValueForString","stringNum","getValueForFret","fretNum","stringValue","getNoteForFret","integerToNote","Flow","BUILD","VERSION","DATE","fontNames","fontModuleOrPath","hasKeySignature","getKeySignatures","BravuraFont","bracketTop","bracketBottom","barlineTick","breathMarkTick","gClef","cClef","fClef","unpitchedPercussionClef1","timeSig0","timeSig1","timeSig2","timeSig3","timeSig4","timeSig5","timeSig6","timeSig7","timeSig8","timeSig9","timeSigCommon","timeSigCutCommon","timeSigPlus","timeSigPlusSmall","timeSigMinus","timeSigParensRight","timeSigParensRightSmall","timeSigParensLeft","timeSigParensLeftSmall","noteheadDoubleWhole","noteheadWhole","noteheadHalf","noteheadBlack","noteheadXDoubleWhole","noteheadXWhole","noteheadXHalf","noteheadXBlack","noteheadCircleXDoubleWhole","noteheadCircleXWhole","noteheadCircleXHalf","noteheadCircleX","noteheadCircledDoubleWhole","noteheadCircledWhole","noteheadCircledHalf","noteheadCircledBlack","noteheadDoubleWholeSquare","noteheadSquareWhite","noteheadSquareBlack","noteheadTriangleDownDoubleWhole","noteheadTriangleDownWhole","noteheadTriangleDownHalf","noteheadTriangleDownBlack","noteheadTriangleUpDoubleWhole","noteheadTriangleUpWhole","noteheadTriangleUpHalf","noteheadTriangleUpBlack","noteheadSlashedDoubleWhole1","noteheadSlashedWhole1","noteheadSlashedHalf1","noteheadSlashedBlack1","noteheadSlashedDoubleWhole2","noteheadSlashedWhole2","noteheadSlashedHalf2","noteheadSlashedBlack2","noteheadDiamondDoubleWhole","noteheadDiamondWhole","noteheadDiamondHalf","noteheadDiamondBlack","noteheadParenthesis","noteheadParenthesisRight","noteheadParenthesisLeft","noteheadMoonBlack","noteheadTriangleLeftBlack","noteheadTriangleRightBlack","noteheadTriangleRoundDownBlack","augmentationDot","tremolo1","flag8thUp","flag8thDown","flag16thUp","flag16thDown","flag32ndUp","flag32ndDown","flag64thUp","flag64thDown","flag128thUp","flag128thDown","accidentalFlat","accidentalNatural","accidentalSharp","accidentalDoubleSharp","accidentalDoubleFlat","accidentalParensLeft","accidentalParensRight","accidentalQuarterToneFlatStein","accidentalThreeQuarterTonesFlatZimmermann","accidentalQuarterToneSharpStein","accidentalThreeQuarterTonesSharpStein","accidentalBuyukMucennebFlat","accidentalBakiyeFlat","accidentalKomaSharp","accidentalKucukMucennebSharp","accidentalKoron","accidentalSori","articAccentAbove","articAccentBelow","articTenutoAbove","articTenutoBelow","articStaccatoAbove","articStaccatoBelow","articStaccatissimoAbove","articStaccatissimoBelow","articMarcatoAbove","articMarcatoBelow","fermataAbove","fermataBelow","fermataLongAbove","fermataLongBelow","fermataVeryLongAbove","fermataVeryLongBelow","fermataVeryShortAbove","fermataVeryShortBelow","fermataShortAbove","fermataShortBelow","breathMarkComma","breathMarkUpbow","caesura","caesuraCurved","restMaxima","restDoubleWhole","restWhole","restWholeLegerLine","restHalf","restHalfLegerLine","restQuarter","rest8th","rest16th","rest32nd","rest64th","rest128th","dynamicPiano","dynamicMezzo","dynamicForte","dynamicRinforzando","dynamicSforzando","dynamicZ","ornamentTrill","ornamentTurn","ornamentTurnSlash","ornamentMordent","ornamentShortTrill","ornamentTremblement","ornamentPrecompAppoggTrill","ornamentPrecompSlideTrillDAnglebert","ornamentPrecompSlideTrillBach","ornamentPrecompTrillSuffixDandrieu","ornamentPrecompDoubleCadenceUpperPrefix","ornamentPrecompDoubleCadenceUpperPrefixTurn","ornamentPrecompTrillLowerSuffix","brassScoop","brassDoitMedium","brassFallLipShort","brassLiftMedium","brassFallRoughMedium","brassBend","brassMuteClosed","brassMuteOpen","brassFlip","brassJazzTurn","brassSmear","stringsDownBow","stringsUpBow","stringsHarmonic","pluckedSnapPizzicatoAbove","pluckedSnapPizzicatoBelow","pluckedLeftHandPizzicato","keyboardPedalPed","keyboardPedalUp","pictChokeCymbal","wiggleArpeggiatoUp","arrowheadBlackUp","arrowheadBlackDown","arpeggiatoUp","arpeggiatoDown","repeat1Bar","repeat2Bars","repeat4Bars","repeatBarSlash","csymDiminished","csymHalfDiminished","csymAugmented","csymMajorSeventh","csymMinor","csymParensLeftTall","csymParensRightTall","csymBracketLeftTall","csymBracketRightTall","csymParensLeftVeryTall","csymParensRightVeryTall","csymDiagonalArrangementSlash","generatedOn","BravuraMetrics","smufl","endPaddingMax","endPaddingMin","unalignedNotePadding","clef_default","shiftX","clef_small","default","gracenote","pedalMarking","up","down","digits","shiftLine","tupletPoint","tremolo","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","staveRepetition","symbolText","offsetX","offsetY","heightAdjustmentForFlag","staveTempo","clefNote_default","clefNote_small","stroke_straight","stroke_wiggly","restQuarterStemUp","restQuarterStemDown","CustomFont","vexAccidentalMicrotonal1","vexAccidentalMicrotonal2","vexAccidentalMicrotonal3","vexAccidentalMicrotonal4","vexNoteHeadRectBlack","vexNoteHeadRectWhite","vexWiggleArpeggioUp","CustomMetrics","GonvilleSmuflFont","GonvilleMetrics","LelandFont","LelandMetrics","PetalumaFont","PetalumaMetrics","displacedShiftX","noteheadBlackStemUp","noteheadHalfStemUp","noteheadWholeStemUp","PetalumaScriptFont","$","I","J","K","N","O","Q","U","V","Y","Z","_","l","RobotoSlabFont","SansFontBold","SansFont","Description","SerifFont","Vex","cmp","eq","newArr","last","canvasSelector","start_time","Date","getTime","setMusicFont","fontData","registerInfo","description","loadTextFonts"],"sourceRoot":""} \ No newline at end of file diff --git a/build/esm/entry/vexflow-bravura.js b/build/esm/entry/vexflow-bravura.js deleted file mode 100644 index d11dbcf0a4..0000000000 --- a/build/esm/entry/vexflow-bravura.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadBravura } from '../src/fonts/load_bravura.js'; -import { loadCustom } from '../src/fonts/load_custom.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadBravura(); -loadCustom(); -Flow.setMusicFont('Bravura', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-core.js b/build/esm/entry/vexflow-core.js deleted file mode 100644 index 61664497c8..0000000000 --- a/build/esm/entry/vexflow-core.js +++ /dev/null @@ -1,54 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { Flow } from '../src/flow.js'; -import { Font } from '../src/font.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -import { globalObject, RuntimeError } from '../src/util.js'; -const fontModules = { - Bravura: './vexflow-font-bravura.js', - Gonville: './vexflow-font-gonville.js', - Petaluma: './vexflow-font-petaluma.js', - Leland: './vexflow-font-leland.js', - Custom: './vexflow-font-custom.js', -}; -Flow.fetchMusicFont = (fontName, fontModuleOrPath) => __awaiter(void 0, void 0, void 0, function* () { - const font = Font.load(fontName); - if (font.hasData()) { - return; - } - if (!fontModuleOrPath) { - if (fontName in fontModules) { - fontModuleOrPath = fontModules[fontName]; - } - else { - throw new RuntimeError('UnknownFont', `Music font ${fontName} does not exist.`); - } - } - let fontModule; - if (typeof fontModuleOrPath === 'string') { - const module = yield import(fontModuleOrPath); - const g = globalObject(); - const VexFlowFont = g['VexFlowFont']; - if (typeof VexFlowFont !== 'undefined' && typeof VexFlowFont[fontName] !== 'undefined') { - fontModule = VexFlowFont[fontName]; - } - else { - fontModule = module.Font; - } - } - else { - fontModule = fontModuleOrPath; - } - font.setData(fontModule.data); - font.setMetrics(fontModule.metrics); -}); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-debug-with-tests.js b/build/esm/entry/vexflow-debug-with-tests.js deleted file mode 100644 index cb08380693..0000000000 --- a/build/esm/entry/vexflow-debug-with-tests.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as VexSrc from '../src/index.js'; -import * as VexTests from '../tests/index.js'; -import { Flow } from '../src/flow.js'; -import { loadAllMusicFonts } from '../src/fonts/load_all.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadAllMusicFonts(); -Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * from '../tests/index.js'; -export default Object.assign(Object.assign({}, VexSrc), VexTests); diff --git a/build/esm/entry/vexflow-debug.js b/build/esm/entry/vexflow-debug.js deleted file mode 100644 index c1af57c988..0000000000 --- a/build/esm/entry/vexflow-debug.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadAllMusicFonts } from '../src/fonts/load_all.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadAllMusicFonts(); -Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-font-bravura.js b/build/esm/entry/vexflow-font-bravura.js deleted file mode 100644 index 8f8364c432..0000000000 --- a/build/esm/entry/vexflow-font-bravura.js +++ /dev/null @@ -1,7 +0,0 @@ -import { BravuraFont } from '../src/fonts/bravura_glyphs.js'; -import { BravuraMetrics } from '../src/fonts/bravura_metrics.js'; -export const Font = { - data: BravuraFont, - metrics: BravuraMetrics, -}; -export default Font; diff --git a/build/esm/entry/vexflow-font-custom.js b/build/esm/entry/vexflow-font-custom.js deleted file mode 100644 index 1d6e7e9668..0000000000 --- a/build/esm/entry/vexflow-font-custom.js +++ /dev/null @@ -1,7 +0,0 @@ -import { CustomFont } from '../src/fonts/custom_glyphs.js'; -import { CustomMetrics } from '../src/fonts/custom_metrics.js'; -export const Font = { - data: CustomFont, - metrics: CustomMetrics, -}; -export default Font; diff --git a/build/esm/entry/vexflow-font-gonville.js b/build/esm/entry/vexflow-font-gonville.js deleted file mode 100644 index ba13002e59..0000000000 --- a/build/esm/entry/vexflow-font-gonville.js +++ /dev/null @@ -1,7 +0,0 @@ -import { GonvilleSmuflFont } from '../src/fonts/gonville_glyphs.js'; -import { GonvilleMetrics } from '../src/fonts/gonville_metrics.js'; -export const Font = { - data: GonvilleSmuflFont, - metrics: GonvilleMetrics, -}; -export default Font; diff --git a/build/esm/entry/vexflow-font-leland.js b/build/esm/entry/vexflow-font-leland.js deleted file mode 100644 index 5ebd85ac88..0000000000 --- a/build/esm/entry/vexflow-font-leland.js +++ /dev/null @@ -1,7 +0,0 @@ -import { LelandFont } from '../src/fonts/leland_glyphs.js'; -import { LelandMetrics } from '../src/fonts/leland_metrics.js'; -export const Font = { - data: LelandFont, - metrics: LelandMetrics, -}; -export default Font; diff --git a/build/esm/entry/vexflow-font-petaluma.js b/build/esm/entry/vexflow-font-petaluma.js deleted file mode 100644 index 6c1cdd9dad..0000000000 --- a/build/esm/entry/vexflow-font-petaluma.js +++ /dev/null @@ -1,7 +0,0 @@ -import { PetalumaFont } from '../src/fonts/petaluma_glyphs.js'; -import { PetalumaMetrics } from '../src/fonts/petaluma_metrics.js'; -export const Font = { - data: PetalumaFont, - metrics: PetalumaMetrics, -}; -export default Font; diff --git a/build/esm/entry/vexflow-gonville.js b/build/esm/entry/vexflow-gonville.js deleted file mode 100644 index 4d7948edf6..0000000000 --- a/build/esm/entry/vexflow-gonville.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadCustom } from '../src/fonts/load_custom.js'; -import { loadGonville } from '../src/fonts/load_gonville.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadGonville(); -loadCustom(); -Flow.setMusicFont('Gonville', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-leland.js b/build/esm/entry/vexflow-leland.js deleted file mode 100644 index 3ab21d2ad8..0000000000 --- a/build/esm/entry/vexflow-leland.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadCustom } from '../src/fonts/load_custom.js'; -import { loadLeland } from '../src/fonts/load_leland.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadLeland(); -loadCustom(); -Flow.setMusicFont('Leland', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow-petaluma.js b/build/esm/entry/vexflow-petaluma.js deleted file mode 100644 index 10532eb61e..0000000000 --- a/build/esm/entry/vexflow-petaluma.js +++ /dev/null @@ -1,10 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadCustom } from '../src/fonts/load_custom.js'; -import { loadPetaluma } from '../src/fonts/load_petaluma.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadPetaluma(); -loadCustom(); -Flow.setMusicFont('Petaluma', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/entry/vexflow.js b/build/esm/entry/vexflow.js deleted file mode 100644 index c1af57c988..0000000000 --- a/build/esm/entry/vexflow.js +++ /dev/null @@ -1,8 +0,0 @@ -import { Flow } from '../src/flow.js'; -import { loadAllMusicFonts } from '../src/fonts/load_all.js'; -import { loadTextFonts } from '../src/fonts/textfonts.js'; -loadAllMusicFonts(); -Flow.setMusicFont('Bravura', 'Gonville', 'Custom'); -loadTextFonts(); -export * from '../src/index.js'; -export * as default from '../src/index.js'; diff --git a/build/esm/package.json b/build/esm/package.json deleted file mode 100644 index 3dbc1ca591..0000000000 --- a/build/esm/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "type": "module" -} diff --git a/build/esm/src/accidental.js b/build/esm/src/accidental.js deleted file mode 100644 index e4340d433e..0000000000 --- a/build/esm/src/accidental.js +++ /dev/null @@ -1,348 +0,0 @@ -import { Fraction } from './fraction.js'; -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { Music } from './music.js'; -import { Tables } from './tables.js'; -import { isAccidental, isGraceNote, isGraceNoteGroup, isStaveNote } from './typeguard.js'; -import { defined, log } from './util.js'; -function L(...args) { - if (Accidental.DEBUG) - log('Vex.Flow.Accidental', args); -} -export class Accidental extends Modifier { - static get CATEGORY() { - return "Accidental"; - } - static format(accidentals, state) { - if (!accidentals || accidentals.length === 0) - return; - const musicFont = Tables.currentMusicFont(); - const noteheadAccidentalPadding = musicFont.lookupMetric('accidental.noteheadAccidentalPadding'); - const leftShift = state.left_shift + noteheadAccidentalPadding; - const accidentalSpacing = musicFont.lookupMetric('accidental.accidentalSpacing'); - const additionalPadding = musicFont.lookupMetric('accidental.leftPadding'); - const accList = []; - let prevNote = undefined; - let shiftL = 0; - for (let i = 0; i < accidentals.length; ++i) { - const acc = accidentals[i]; - const note = acc.getNote(); - const stave = note.getStave(); - const index = acc.checkIndex(); - const props = note.getKeyProps()[index]; - if (note !== prevNote) { - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx() - note.getXShift(), shiftL); - } - prevNote = note; - } - if (stave) { - const lineSpace = stave.getSpacingBetweenLines(); - const y = stave.getYForLine(props.line); - const accLine = Math.round((y / lineSpace) * 2) / 2; - accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace }); - } - else { - accList.push({ line: props.line, shift: shiftL, acc }); - } - } - accList.sort((a, b) => b.line - a.line); - const lineList = []; - let accShift = 0; - let previousLine = undefined; - for (let i = 0; i < accList.length; i++) { - const acc = accList[i]; - if (previousLine === undefined || previousLine !== acc.line) { - lineList.push({ - line: acc.line, - flatLine: true, - dblSharpLine: true, - numAcc: 0, - width: 0, - column: 0, - }); - } - if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') { - lineList[lineList.length - 1].flatLine = false; - } - if (acc.acc.type !== '##') { - lineList[lineList.length - 1].dblSharpLine = false; - } - lineList[lineList.length - 1].numAcc++; - lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing; - accShift = acc.shift > accShift ? acc.shift : accShift; - previousLine = acc.line; - } - let totalColumns = 0; - for (let i = 0; i < lineList.length; i++) { - let noFurtherConflicts = false; - const groupStart = i; - let groupEnd = i; - while (groupEnd + 1 < lineList.length && !noFurtherConflicts) { - if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) { - groupEnd++; - } - else { - noFurtherConflicts = true; - } - } - const getGroupLine = (index) => lineList[groupStart + index]; - const getGroupLines = (indexes) => indexes.map(getGroupLine); - const lineDifference = (indexA, indexB) => { - const [a, b] = getGroupLines([indexA, indexB]).map((item) => item.line); - return a - b; - }; - const notColliding = (...indexPairs) => indexPairs.map(getGroupLines).every(([line1, line2]) => !this.checkCollision(line1, line2)); - const groupLength = groupEnd - groupStart + 1; - let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b'; - switch (groupLength) { - case 3: - if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) { - endCase = 'second_on_bottom'; - } - break; - case 4: - if (notColliding([0, 2], [1, 3])) { - endCase = 'spaced_out_tetrachord'; - } - break; - case 5: - if (endCase === 'b' && notColliding([1, 3])) { - endCase = 'spaced_out_pentachord'; - if (notColliding([0, 2], [2, 4])) { - endCase = 'very_spaced_out_pentachord'; - } - } - break; - case 6: - if (notColliding([0, 3], [1, 4], [2, 5])) { - endCase = 'spaced_out_hexachord'; - } - if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) { - endCase = 'very_spaced_out_hexachord'; - } - break; - default: - break; - } - let groupMember; - let column; - if (groupLength >= 7) { - let patternLength = 2; - let collisionDetected = true; - while (collisionDetected === true) { - collisionDetected = false; - for (let line = 0; line + patternLength < lineList.length; line++) { - if (this.checkCollision(lineList[line], lineList[line + patternLength])) { - collisionDetected = true; - patternLength++; - break; - } - } - } - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = ((groupMember - i) % patternLength) + 1; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - else { - for (groupMember = i; groupMember <= groupEnd; groupMember++) { - column = Tables.accidentalColumnsTable[groupLength][endCase][groupMember - i]; - lineList[groupMember].column = column; - totalColumns = totalColumns > column ? totalColumns : column; - } - } - i = groupEnd; - } - const columnWidths = []; - const columnXOffsets = []; - for (let i = 0; i <= totalColumns; i++) { - columnWidths[i] = 0; - columnXOffsets[i] = 0; - } - columnWidths[0] = accShift + leftShift; - columnXOffsets[0] = accShift + leftShift; - lineList.forEach((line) => { - if (line.width > columnWidths[line.column]) - columnWidths[line.column] = line.width; - }); - for (let i = 1; i < columnWidths.length; i++) { - columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1]; - } - const totalShift = columnXOffsets[columnXOffsets.length - 1]; - let accCount = 0; - lineList.forEach((line) => { - let lineWidth = 0; - const lastAccOnLine = accCount + line.numAcc; - for (accCount; accCount < lastAccOnLine; accCount++) { - const xShift = columnXOffsets[line.column - 1] + lineWidth; - accList[accCount].acc.setXShift(xShift); - lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing; - L('Line, accCount, shift: ', line.line, accCount, xShift); - } - }); - state.left_shift += totalShift + additionalPadding; - } - static checkCollision(line1, line2) { - let clearance = line2.line - line1.line; - let clearanceRequired = 3; - if (clearance > 0) { - clearanceRequired = line2.flatLine || line2.dblSharpLine ? 2.5 : 3.0; - if (line1.dblSharpLine) - clearance -= 0.5; - } - else { - clearanceRequired = line1.flatLine || line1.dblSharpLine ? 2.5 : 3.0; - if (line2.dblSharpLine) - clearance -= 0.5; - } - const collision = Math.abs(clearance) < clearanceRequired; - L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision); - return collision; - } - static applyAccidentals(voices, keySignature) { - const tickPositions = []; - const tickNoteMap = {}; - voices.forEach((voice) => { - const tickPosition = new Fraction(0, 1); - const tickable = voice.getTickables(); - tickable.forEach((t) => { - if (t.shouldIgnoreTicks()) - return; - const notesAtPosition = tickNoteMap[tickPosition.value()]; - if (!notesAtPosition) { - tickPositions.push(tickPosition.value()); - tickNoteMap[tickPosition.value()] = [t]; - } - else { - notesAtPosition.push(t); - } - tickPosition.add(t.getTicks()); - }); - }); - const music = new Music(); - if (!keySignature) - keySignature = 'C'; - const scaleMapKey = music.createScaleMap(keySignature); - const scaleMap = {}; - tickPositions.forEach((tickPos) => { - const tickables = tickNoteMap[tickPos]; - const modifiedPitches = []; - const processNote = (t) => { - if (!isStaveNote(t) || t.isRest() || t.shouldIgnoreTicks()) { - return; - } - const staveNote = t; - staveNote.keys.forEach((keyString, keyIndex) => { - const key = music.getNoteParts(keyString.split('/')[0]); - const octave = keyString.split('/')[1]; - const accidentalString = key.accidental || 'n'; - const pitch = key.root + accidentalString; - if (!scaleMap[key.root + octave]) - scaleMap[key.root + octave] = scaleMapKey[key.root]; - const sameAccidental = scaleMap[key.root + octave] === pitch; - const previouslyModified = modifiedPitches.indexOf(keyString) > -1; - staveNote.getModifiers().forEach((modifier, index) => { - if (isAccidental(modifier) && modifier.type == accidentalString && modifier.getIndex() == keyIndex) { - staveNote.getModifiers().splice(index, 1); - } - }); - if (!sameAccidental || (sameAccidental && previouslyModified)) { - scaleMap[key.root + octave] = pitch; - const accidental = new Accidental(accidentalString); - staveNote.addModifier(accidental, keyIndex); - modifiedPitches.push(keyString); - } - }); - staveNote.getModifiers().forEach((modifier) => { - if (isGraceNoteGroup(modifier)) { - modifier.getGraceNotes().forEach(processNote); - } - }); - }; - tickables.forEach(processNote); - }); - } - constructor(type) { - super(); - L('New accidental: ', type); - this.type = type; - this.position = Modifier.Position.LEFT; - this.render_options = { - font_scale: 38, - parenLeftPadding: 2, - parenRightPadding: 2, - }; - this.accidental = Tables.accidentalCodes(this.type); - defined(this.accidental, 'ArgumentError', `Unknown accidental type: ${type}`); - this.cautionary = false; - this.reset(); - } - reset() { - const fontScale = this.render_options.font_scale; - this.glyph = new Glyph(this.accidental.code, fontScale); - this.glyph.setOriginX(1.0); - if (this.cautionary) { - this.parenLeft = new Glyph(Tables.accidentalCodes('{').code, fontScale); - this.parenRight = new Glyph(Tables.accidentalCodes('}').code, fontScale); - this.parenLeft.setOriginX(1.0); - this.parenRight.setOriginX(1.0); - } - } - getWidth() { - if (this.cautionary) { - const parenLeft = defined(this.parenLeft); - const parenRight = defined(this.parenRight); - const parenWidth = parenLeft.getMetrics().width + - parenRight.getMetrics().width + - this.render_options.parenLeftPadding + - this.render_options.parenRightPadding; - return this.glyph.getMetrics().width + parenWidth; - } - else { - return this.glyph.getMetrics().width; - } - } - setNote(note) { - defined(note, 'ArgumentError', `Bad note value: ${note}`); - this.note = note; - if (isGraceNote(note)) { - this.render_options.font_scale = 25; - this.reset(); - } - return this; - } - setAsCautionary() { - this.cautionary = true; - this.render_options.font_scale = 28; - this.reset(); - return this; - } - draw() { - const { type, position, index, cautionary, x_shift, y_shift, glyph, render_options: { parenLeftPadding, parenRightPadding }, } = this; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(position, index); - let accX = start.x + x_shift; - const accY = start.y + y_shift; - L('Rendering: ', type, accX, accY); - if (!cautionary) { - glyph.render(ctx, accX, accY); - } - else { - const parenLeft = defined(this.parenLeft); - const parenRight = defined(this.parenRight); - parenRight.render(ctx, accX, accY); - accX -= parenRight.getMetrics().width; - accX -= parenRightPadding; - accX -= this.accidental.parenRightPaddingAdjustment; - glyph.render(ctx, accX, accY); - accX -= glyph.getMetrics().width; - accX -= parenLeftPadding; - parenLeft.render(ctx, accX, accY); - } - } -} -Accidental.DEBUG = false; diff --git a/build/esm/src/annotation.js b/build/esm/src/annotation.js deleted file mode 100644 index 7ccade9818..0000000000 --- a/build/esm/src/annotation.js +++ /dev/null @@ -1,238 +0,0 @@ -import { Element } from './element.js'; -import { Modifier, ModifierPosition } from './modifier.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { TextFormatter } from './textformatter.js'; -import { isStemmableNote, isTabNote } from './typeguard.js'; -import { log } from './util.js'; -function L(...args) { - if (Annotation.DEBUG) - log('Vex.Flow.Annotation', args); -} -export var AnnotationHorizontalJustify; -(function (AnnotationHorizontalJustify) { - AnnotationHorizontalJustify[AnnotationHorizontalJustify["LEFT"] = 1] = "LEFT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER"] = 2] = "CENTER"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - AnnotationHorizontalJustify[AnnotationHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationHorizontalJustify || (AnnotationHorizontalJustify = {})); -export var AnnotationVerticalJustify; -(function (AnnotationVerticalJustify) { - AnnotationVerticalJustify[AnnotationVerticalJustify["TOP"] = 1] = "TOP"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER"] = 2] = "CENTER"; - AnnotationVerticalJustify[AnnotationVerticalJustify["BOTTOM"] = 3] = "BOTTOM"; - AnnotationVerticalJustify[AnnotationVerticalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(AnnotationVerticalJustify || (AnnotationVerticalJustify = {})); -export class Annotation extends Modifier { - static get CATEGORY() { - return "Annotation"; - } - static get minAnnotationPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - static format(annotations, state) { - if (!annotations || annotations.length === 0) - return false; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (let i = 0; i < annotations.length; ++i) { - const annotation = annotations[i]; - const textFormatter = TextFormatter.create(annotation.textFont); - const textLines = (2 + textFormatter.getYForStringInPx(annotation.text).height) / Tables.STAVE_LINE_DISTANCE; - let verticalSpaceNeeded = textLines; - const note = annotation.checkAttachedNote(); - const glyphWidth = note.getGlyphProps().getWidth(); - const textWidth = textFormatter.getWidthForTextInPx(annotation.text); - if (annotation.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, textWidth) + Annotation.minAnnotationPadding; - } - else if (annotation.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, textWidth); - } - else { - leftWidth = Math.max(leftWidth, textWidth / 2) + Annotation.minAnnotationPadding; - rightWidth = Math.max(rightWidth, textWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - const stave = note.getStave(); - const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; - let stemHeight = 0; - let lines = 5; - if (isTabNote(note)) { - if (note.render_options.draw_stem) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; - } - } - else { - stemHeight = 0; - } - } - else if (isStemmableNote(note)) { - const stem = note.getStem(); - if (stem && note.getNoteType() === 'n') { - stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; - } - } - if (stave) { - lines = stave.getNumLines(); - } - if (annotation.verticalJustification === this.VerticalJustify.TOP) { - let noteLine = note.getLineNumber(true); - if (isTabNote(note)) { - noteLine = lines - (note.leastString() - 0.5); - } - if (stemDirection === Stem.UP) { - noteLine += stemHeight; - } - const curTop = noteLine + state.top_text_line + 0.5; - if (curTop < lines) { - annotation.setTextLine(lines - noteLine); - verticalSpaceNeeded += lines - noteLine; - state.top_text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.top_text_line); - state.top_text_line += verticalSpaceNeeded; - } - } - else if (annotation.verticalJustification === this.VerticalJustify.BOTTOM) { - let noteLine = lines - note.getLineNumber(); - if (isTabNote(note)) { - noteLine = note.greatestString() - 1; - } - if (stemDirection === Stem.DOWN) { - noteLine += stemHeight; - } - const curBottom = noteLine + state.text_line + 1; - if (curBottom < lines) { - annotation.setTextLine(lines - curBottom); - verticalSpaceNeeded += lines - curBottom; - state.text_line = verticalSpaceNeeded; - } - else { - annotation.setTextLine(state.text_line); - state.text_line += verticalSpaceNeeded; - } - } - else { - annotation.setTextLine(state.text_line); - } - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - constructor(text) { - super(); - this.text = text; - this.horizontalJustification = AnnotationHorizontalJustify.CENTER; - this.verticalJustification = AnnotationVerticalJustify.TOP; - this.resetFont(); - this.setWidth(Tables.textWidth(text)); - } - setVerticalJustification(just) { - this.verticalJustification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just; - return this; - } - getJustification() { - return this.horizontalJustification; - } - setJustification(just) { - this.horizontalJustification = typeof just === 'string' ? Annotation.HorizontalJustifyString[just] : just; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; - const textFormatter = TextFormatter.create(this.textFont); - const start = note.getModifierStartXY(ModifierPosition.ABOVE, this.index); - this.setRendered(); - ctx.save(); - this.applyStyle(); - ctx.openGroup('annotation', this.getAttribute('id')); - ctx.setFont(this.textFont); - const text_width = textFormatter.getWidthForTextInPx(this.text); - const text_height = textFormatter.getYForStringInPx(this.text).height; - let x; - let y; - if (this.horizontalJustification === AnnotationHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.RIGHT) { - x = start.x - text_width; - } - else if (this.horizontalJustification === AnnotationHorizontalJustify.CENTER) { - x = start.x - text_width / 2; - } - else { - x = note.getStemX() - text_width / 2; - } - let stem_ext = {}; - let spacing = 0; - const has_stem = note.hasStem(); - const stave = note.checkStave(); - if (has_stem) { - stem_ext = note.checkStem().getExtents(); - spacing = stave.getSpacingBetweenLines(); - } - if (this.verticalJustification === AnnotationVerticalJustify.BOTTOM) { - const ys = note.getYs(); - y = ys.reduce((a, b) => (a > b ? a : b)); - y += (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE + text_height; - if (has_stem && stemDirection === Stem.DOWN) { - y = Math.max(y, stem_ext.topY + text_height + spacing * this.text_line); - } - } - else if (this.verticalJustification === AnnotationVerticalJustify.CENTER) { - const yt = note.getYForTopText(this.text_line) - 1; - const yb = stave.getYForBottomText(this.text_line); - y = yt + (yb - yt) / 2 + text_height / 2; - } - else if (this.verticalJustification === AnnotationVerticalJustify.TOP) { - const topY = Math.min(...note.getYs()); - y = topY - (this.text_line + 1) * Tables.STAVE_LINE_DISTANCE; - if (has_stem && stemDirection === Stem.UP) { - spacing = stem_ext.topY < stave.getTopLineTopY() ? Tables.STAVE_LINE_DISTANCE : spacing; - y = Math.min(y, stem_ext.topY - spacing * (this.text_line + 1)); - } - } - else { - const extents = note.getStemExtents(); - y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2; - } - L('Rendering annotation: ', this.text, x, y); - ctx.fillText(this.text, x, y); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -Annotation.DEBUG = false; -Annotation.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); -Annotation.HorizontalJustify = AnnotationHorizontalJustify; -Annotation.HorizontalJustifyString = { - left: AnnotationHorizontalJustify.LEFT, - right: AnnotationHorizontalJustify.RIGHT, - center: AnnotationHorizontalJustify.CENTER, - centerStem: AnnotationHorizontalJustify.CENTER_STEM, -}; -Annotation.VerticalJustify = AnnotationVerticalJustify; -Annotation.VerticalJustifyString = { - above: AnnotationVerticalJustify.TOP, - top: AnnotationVerticalJustify.TOP, - below: AnnotationVerticalJustify.BOTTOM, - bottom: AnnotationVerticalJustify.BOTTOM, - center: AnnotationVerticalJustify.CENTER, - centerStem: AnnotationVerticalJustify.CENTER_STEM, -}; diff --git a/build/esm/src/articulation.js b/build/esm/src/articulation.js deleted file mode 100644 index 99a359b425..0000000000 --- a/build/esm/src/articulation.js +++ /dev/null @@ -1,278 +0,0 @@ -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { isGraceNote, isStaveNote, isStemmableNote, isTabNote } from './typeguard.js'; -import { defined, log, RuntimeError } from './util.js'; -function L(...args) { - if (Articulation.DEBUG) - log('Vex.Flow.Articulation', args); -} -const { ABOVE, BELOW } = Modifier.Position; -function roundToNearestHalf(mathFn, value) { - return mathFn(value / 0.5) * 0.5; -} -function isWithinLines(line, position) { - return position === ABOVE ? line <= 5 : line >= 1; -} -function getRoundingFunction(line, position) { - if (isWithinLines(line, position)) { - if (position === ABOVE) { - return Math.ceil; - } - else { - return Math.floor; - } - } - else { - return Math.round; - } -} -function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) { - const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line); - const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position); - const onStaffLine = snappedLine % 1 === 0; - if (canSnapToStaffSpace && onStaffLine) { - const HALF_STAFF_SPACE = 0.5; - return snappedLine + HALF_STAFF_SPACE * -offsetDirection; - } - else { - return snappedLine; - } -} -const isStaveOrGraceNote = (note) => isStaveNote(note) || isGraceNote(note); -function getTopY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === Stem.UP) { - return stemTipY; - } - else { - return stemBaseY; - } - } - else { - return Math.min(...note.getYs()); - } - } - else if (isTabNote(note)) { - if (note.hasStem()) { - if (stemDirection === Stem.UP) { - return stemTipY; - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - return note.checkStave().getYForTopText(textLine); - } - } - else { - throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -function getBottomY(note, textLine) { - const stemDirection = note.getStemDirection(); - const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents(); - if (isStaveOrGraceNote(note)) { - if (note.hasStem()) { - if (stemDirection === Stem.UP) { - return stemBaseY; - } - else { - return stemTipY; - } - } - else { - return Math.max(...note.getYs()); - } - } - else if (isTabNote(note)) { - if (note.hasStem()) { - if (stemDirection === Stem.UP) { - return note.checkStave().getYForBottomText(textLine); - } - else { - return stemTipY; - } - } - else { - return note.checkStave().getYForBottomText(textLine); - } - } - else { - throw new RuntimeError('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'); - } -} -function getInitialOffset(note, position) { - const isOnStemTip = (position === ABOVE && note.getStemDirection() === Stem.UP) || - (position === BELOW && note.getStemDirection() === Stem.DOWN); - if (isStaveOrGraceNote(note)) { - if (note.hasStem() && isOnStemTip) { - return 0.5; - } - else { - return 1; - } - } - else { - if (note.hasStem() && isOnStemTip) { - return 1; - } - else { - return 0; - } - } -} -export class Articulation extends Modifier { - static get CATEGORY() { - return "Articulation"; - } - static format(articulations, state) { - if (!articulations || articulations.length === 0) - return false; - const margin = 0.5; - let maxGlyphWidth = 0; - const getIncrement = (articulation, line, position) => roundToNearestHalf(getRoundingFunction(line, position), defined(articulation.glyph.getMetrics().height) / 10 + margin); - articulations.forEach((articulation) => { - const note = articulation.checkAttachedNote(); - maxGlyphWidth = Math.max(note.getGlyphProps().getWidth(), maxGlyphWidth); - let lines = 5; - const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; - let stemHeight = 0; - if (isStemmableNote(note)) { - const stem = note.getStem(); - if (stem) { - stemHeight = Math.abs(stem.getHeight()) / Tables.STAVE_LINE_DISTANCE; - } - } - const stave = note.getStave(); - if (stave) { - lines = stave.getNumLines(); - } - if (articulation.getPosition() === ABOVE) { - let noteLine = note.getLineNumber(true); - if (stemDirection === Stem.UP) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.top_text_line, ABOVE); - const curTop = noteLine + state.top_text_line + 0.5; - if (!articulation.articulation.between_lines && curTop < lines) { - increment += lines - curTop; - } - articulation.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else if (articulation.getPosition() === BELOW) { - let noteLine = Math.max(lines - note.getLineNumber(), 0); - if (stemDirection === Stem.DOWN) { - noteLine += stemHeight; - } - let increment = getIncrement(articulation, state.text_line, BELOW); - const curBottom = noteLine + state.text_line + 0.5; - if (!articulation.articulation.between_lines && curBottom < lines) { - increment += lines - curBottom; - } - articulation.setTextLine(state.text_line); - state.text_line += increment; - } - }); - const width = articulations - .map((articulation) => articulation.getWidth()) - .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth)); - const overlap = Math.min(Math.max(width - maxGlyphWidth, 0), Math.max(width - (state.left_shift + state.right_shift), 0)); - state.left_shift += overlap / 2; - state.right_shift += overlap / 2; - return true; - } - static easyScoreHook({ articulations }, note, builder) { - if (!articulations) - return; - const articNameToCode = { - staccato: 'a.', - tenuto: 'a-', - accent: 'a>', - }; - articulations - .split(',') - .map((articString) => articString.trim().split('.')) - .map(([name, position]) => { - const artic = { type: articNameToCode[name] }; - if (position) - artic.position = Modifier.PositionString[position]; - return builder.getFactory().Articulation(artic); - }) - .map((artic) => note.addModifier(artic, 0)); - } - constructor(type) { - super(); - this.type = type; - this.position = ABOVE; - this.render_options = { - font_scale: 38, - }; - this.reset(); - } - reset() { - this.articulation = Tables.articulationCodes(this.type); - if (!this.articulation) { - this.articulation = { code: this.type, between_lines: false }; - if (this.type.endsWith('Above')) - this.position = ABOVE; - if (this.type.endsWith('Below')) - this.position = BELOW; - } - const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code; - this.glyph = new Glyph(code !== null && code !== void 0 ? code : '', this.render_options.font_scale); - defined(this.glyph, 'ArgumentError', `Articulation not found: ${this.type}`); - this.setWidth(defined(this.glyph.getMetrics().width)); - } - setBetweenLines(betweenLines = true) { - this.articulation.between_lines = betweenLines; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const index = this.checkIndex(); - const { position, glyph, text_line: textLine } = this; - const canSitBetweenLines = this.articulation.between_lines; - const stave = note.checkStave(); - const staffSpace = stave.getSpacingBetweenLines(); - const isTab = isTabNote(note); - const { x } = note.getModifierStartXY(position, index); - const shouldSitOutsideStaff = !canSitBetweenLines || isTab; - const initialOffset = getInitialOffset(note, position); - const padding = Tables.currentMusicFont().lookupMetric(`articulation.${glyph.getCode()}.padding`, 0); - let y = { - [ABOVE]: () => { - glyph.setOrigin(0.5, 1); - const y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y; - }, - [BELOW]: () => { - glyph.setOrigin(0.5, 0); - const y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace; - return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y; - }, - }[position](); - if (!isTab) { - const offsetDirection = position === ABOVE ? -1 : +1; - const noteLine = note.getKeyProps()[index].line; - const distanceFromNote = (note.getYs()[index] - y) / staffSpace; - const articLine = distanceFromNote + Number(noteLine); - const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection); - if (isWithinLines(snappedLine, position)) - glyph.setOrigin(0.5, 0.5); - y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + padding * offsetDirection; - } - L(`Rendering articulation at (x: ${x}, y: ${y})`); - glyph.render(ctx, x, y); - } -} -Articulation.DEBUG = false; -Articulation.INITIAL_OFFSET = -0.5; diff --git a/build/esm/src/barnote.js b/build/esm/src/barnote.js deleted file mode 100644 index a19fde4766..0000000000 --- a/build/esm/src/barnote.js +++ /dev/null @@ -1,56 +0,0 @@ -import { Note } from './note.js'; -import { Barline, BarlineType } from './stavebarline.js'; -import { log } from './util.js'; -function L(...args) { - if (BarNote.DEBUG) - log('Vex.Flow.BarNote', args); -} -export class BarNote extends Note { - static get CATEGORY() { - return "BarNote"; - } - constructor(type = BarlineType.SINGLE) { - super({ duration: 'b' }); - this.metrics = { - widths: {}, - }; - const TYPE = BarlineType; - this.metrics.widths = { - [TYPE.SINGLE]: 8, - [TYPE.DOUBLE]: 12, - [TYPE.END]: 15, - [TYPE.REPEAT_BEGIN]: 14, - [TYPE.REPEAT_END]: 14, - [TYPE.REPEAT_BOTH]: 18, - [TYPE.NONE]: 0, - }; - this.ignore_ticks = true; - this.setType(type); - } - getType() { - return this.type; - } - setType(type) { - this.type = typeof type === 'string' ? Barline.typeString[type] : type; - this.setWidth(this.metrics.widths[this.type]); - return this; - } - addToModifierContext(mc) { - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const ctx = this.checkContext(); - L('Rendering bar line at: ', this.getAbsoluteX()); - this.applyStyle(ctx); - const barline = new Barline(this.type); - barline.setX(this.getAbsoluteX()); - barline.draw(this.checkStave()); - this.restoreStyle(ctx); - this.setRendered(); - } -} -BarNote.DEBUG = false; diff --git a/build/esm/src/beam.js b/build/esm/src/beam.js deleted file mode 100644 index 4e955a3cf0..0000000000 --- a/build/esm/src/beam.js +++ /dev/null @@ -1,642 +0,0 @@ -import { Element } from './element.js'; -import { Fraction } from './fraction.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { isStaveNote, isTabNote } from './typeguard.js'; -import { RuntimeError } from './util.js'; -function calculateStemDirection(notes) { - let lineSum = 0; - notes.forEach((note) => { - if (note.keyProps) { - note.keyProps.forEach((keyProp) => { - lineSum += keyProp.line - 3; - }); - } - }); - if (lineSum >= 0) { - return Stem.DOWN; - } - return Stem.UP; -} -function getStemSlope(firstNote, lastNote) { - const firstStemTipY = firstNote.getStemExtents().topY; - const firstStemX = firstNote.getStemX(); - const lastStemTipY = lastNote.getStemExtents().topY; - const lastStemX = lastNote.getStemX(); - return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX); -} -export const BEAM_LEFT = 'L'; -export const BEAM_RIGHT = 'R'; -export const BEAM_BOTH = 'B'; -export class Beam extends Element { - static get CATEGORY() { - return "Beam"; - } - getStemDirection() { - return this.stem_direction; - } - static getDefaultBeamGroups(time_sig) { - if (!time_sig || time_sig === 'c') { - time_sig = '4/4'; - } - const defaults = { - '1/2': ['1/2'], - '2/2': ['1/2'], - '3/2': ['1/2'], - '4/2': ['1/2'], - '1/4': ['1/4'], - '2/4': ['1/4'], - '3/4': ['1/4'], - '4/4': ['1/4'], - '1/8': ['1/8'], - '2/8': ['2/8'], - '3/8': ['3/8'], - '4/8': ['2/8'], - '1/16': ['1/16'], - '2/16': ['2/16'], - '3/16': ['3/16'], - '4/16': ['2/16'], - }; - const groups = defaults[time_sig]; - if (groups === undefined) { - const beatTotal = parseInt(time_sig.split('/')[0], 10); - const beatValue = parseInt(time_sig.split('/')[1], 10); - const tripleMeter = beatTotal % 3 === 0; - if (tripleMeter) { - return [new Fraction(3, beatValue)]; - } - else if (beatValue > 4) { - return [new Fraction(2, beatValue)]; - } - else if (beatValue <= 4) { - return [new Fraction(1, beatValue)]; - } - } - else { - return groups.map((group) => new Fraction().parse(group)); - } - return [new Fraction(1, 4)]; - } - static applyAndGetBeams(voice, stem_direction, groups) { - return Beam.generateBeams(voice.getTickables(), { groups, stem_direction }); - } - static generateBeams(notes, config = {}) { - if (!config.groups || !config.groups.length) { - config.groups = [new Fraction(2, 8)]; - } - const tickGroups = config.groups.map((group) => { - if (!group.multiply) { - throw new RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions'); - } - return group.clone().multiply(Tables.RESOLUTION, 1); - }); - const unprocessedNotes = notes; - let currentTickGroup = 0; - let noteGroups = []; - let currentGroup = []; - function getTotalTicks(vf_notes) { - return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1)); - } - function nextTickGroup() { - if (tickGroups.length - 1 > currentTickGroup) { - currentTickGroup += 1; - } - else { - currentTickGroup = 0; - } - } - function createGroups() { - let nextGroup = []; - let currentGroupTotalTicks = new Fraction(0, 1); - unprocessedNotes.forEach((unprocessedNote) => { - nextGroup = []; - if (unprocessedNote.shouldIgnoreTicks()) { - noteGroups.push(currentGroup); - currentGroup = nextGroup; - return; - } - currentGroup.push(unprocessedNote); - const ticksPerGroup = tickGroups[currentTickGroup].clone(); - const totalTicks = getTotalTicks(currentGroup).add(currentGroupTotalTicks); - const unbeamable = Tables.durationToNumber(unprocessedNote.getDuration()) < 8; - if (unbeamable && unprocessedNote.getTuplet()) { - ticksPerGroup.numerator *= 2; - } - if (totalTicks.greaterThan(ticksPerGroup)) { - if (!unbeamable) { - const note = currentGroup.pop(); - if (note) - nextGroup.push(note); - } - noteGroups.push(currentGroup); - do { - currentGroupTotalTicks = totalTicks.subtract(tickGroups[currentTickGroup]); - nextTickGroup(); - } while (currentGroupTotalTicks.greaterThanEquals(tickGroups[currentTickGroup])); - currentGroup = nextGroup; - } - else if (totalTicks.equals(ticksPerGroup)) { - noteGroups.push(currentGroup); - currentGroupTotalTicks = new Fraction(0, 1); - currentGroup = nextGroup; - nextTickGroup(); - } - }); - if (currentGroup.length > 0) { - noteGroups.push(currentGroup); - } - } - function getBeamGroups() { - return noteGroups.filter((group) => { - if (group.length > 1) { - let beamable = true; - group.forEach((note) => { - if (note.getIntrinsicTicks() >= Tables.durationToTicks('4')) { - beamable = false; - } - }); - return beamable; - } - return false; - }); - } - function sanitizeGroups() { - const sanitizedGroups = []; - noteGroups.forEach((group) => { - let tempGroup = []; - group.forEach((note, index, group) => { - const isFirstOrLast = index === 0 || index === group.length - 1; - const prevNote = group[index - 1]; - const breaksOnEachRest = !config.beam_rests && note.isRest(); - const breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast; - let breakOnStemChange = false; - if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) { - const prevDirection = prevNote.getStemDirection(); - const currentDirection = note.getStemDirection(); - breakOnStemChange = currentDirection !== prevDirection; - } - const isUnbeamableDuration = parseInt(note.getDuration(), 10) < 8; - const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest || breakOnStemChange || isUnbeamableDuration; - if (shouldBreak) { - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - tempGroup = breakOnStemChange ? [note] : []; - } - else { - tempGroup.push(note); - } - }); - if (tempGroup.length > 0) { - sanitizedGroups.push(tempGroup); - } - }); - noteGroups = sanitizedGroups; - } - function formatStems() { - noteGroups.forEach((group) => { - let stemDirection; - if (config.maintain_stem_directions) { - const note = findFirstNote(group); - stemDirection = note ? note.getStemDirection() : Stem.UP; - } - else { - if (config.stem_direction) { - stemDirection = config.stem_direction; - } - else { - stemDirection = calculateStemDirection(group); - } - } - applyStemDirection(group, stemDirection); - }); - } - function findFirstNote(group) { - for (let i = 0; i < group.length; i++) { - const note = group[i]; - if (!note.isRest()) { - return note; - } - } - return false; - } - function applyStemDirection(group, direction) { - group.forEach((note) => { - note.setStemDirection(direction); - }); - } - function getTuplets() { - const uniqueTuplets = []; - noteGroups.forEach((group) => { - let tuplet; - group.forEach((note) => { - const noteTuplet = note.getTuplet(); - if (noteTuplet && tuplet !== noteTuplet) { - tuplet = noteTuplet; - uniqueTuplets.push(tuplet); - } - }); - }); - return uniqueTuplets; - } - createGroups(); - sanitizeGroups(); - formatStems(); - const beamedNoteGroups = getBeamGroups(); - const allTuplets = getTuplets(); - const beams = []; - beamedNoteGroups.forEach((group) => { - const beam = new Beam(group); - if (config.show_stemlets) { - beam.render_options.show_stemlets = true; - } - if (config.secondary_breaks) { - beam.render_options.secondary_break_ticks = Tables.durationToTicks(config.secondary_breaks); - } - if (config.flat_beams === true) { - beam.render_options.flat_beams = true; - beam.render_options.flat_beam_offset = config.flat_beam_offset; - } - beams.push(beam); - }); - allTuplets.forEach((tuplet) => { - const direction = tuplet.notes[0].stem_direction === Stem.DOWN ? -1 : 1; - tuplet.setTupletLocation(direction); - let bracketed = false; - for (let i = 0; i < tuplet.notes.length; i++) { - const note = tuplet.notes[i]; - if (!note.hasBeam()) { - bracketed = true; - break; - } - } - tuplet.setBracketed(bracketed); - }); - return beams; - } - constructor(notes, auto_stem = false) { - super(); - this.slope = 0; - this.y_shift = 0; - this.forcedPartialDirections = {}; - if (!notes || notes.length === 0) { - throw new RuntimeError('BadArguments', 'No notes provided for beam.'); - } - if (notes.length === 1) { - throw new RuntimeError('BadArguments', 'Too few notes for beam.'); - } - this.ticks = notes[0].getIntrinsicTicks(); - if (this.ticks >= Tables.durationToTicks('4')) { - throw new RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.'); - } - let i; - let note; - this.stem_direction = notes[0].getStemDirection(); - let stem_direction = this.stem_direction; - if (auto_stem && isStaveNote(notes[0])) { - stem_direction = calculateStemDirection(notes); - } - else if (auto_stem && isTabNote(notes[0])) { - const stem_weight = notes.reduce((memo, note) => memo + note.getStemDirection(), 0); - stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN; - } - for (i = 0; i < notes.length; ++i) { - note = notes[i]; - if (auto_stem) { - note.setStemDirection(stem_direction); - this.stem_direction = stem_direction; - } - note.setBeam(this); - } - this.postFormatted = false; - this.notes = notes; - this.beam_count = this.getBeamCount(); - this.break_on_indices = []; - this.render_options = { - beam_width: 5, - max_slope: 0.25, - min_slope: -0.25, - slope_iterations: 20, - slope_cost: 100, - show_stemlets: false, - stemlet_extension: 7, - partial_beam_length: 10, - flat_beams: false, - min_flat_beam_offset: 15, - }; - } - getNotes() { - return this.notes; - } - getBeamCount() { - const beamCounts = this.notes.map((note) => note.getGlyphProps().beam_count); - const maxBeamCount = beamCounts.reduce((max, beamCount) => (beamCount > max ? beamCount : max)); - return maxBeamCount; - } - breakSecondaryAt(indices) { - this.break_on_indices = indices; - return this; - } - setPartialBeamSideAt(noteIndex, side) { - this.forcedPartialDirections[noteIndex] = side; - return this; - } - unsetPartialBeamSideAt(noteIndex) { - delete this.forcedPartialDirections[noteIndex]; - return this; - } - getSlopeY(x, first_x_px, first_y_px, slope) { - return first_y_px + (x - first_x_px) * slope; - } - calculateSlope() { - const { notes, stem_direction: stemDirection, render_options: { max_slope, min_slope, slope_iterations, slope_cost }, } = this; - const firstNote = notes[0]; - const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]); - const increment = (max_slope - min_slope) / slope_iterations; - let minCost = Number.MAX_VALUE; - let bestSlope = 0; - let yShift = 0; - for (let slope = min_slope; slope <= max_slope; slope += increment) { - let totalStemExtension = 0; - let yShiftTemp = 0; - for (let i = 1; i < notes.length; ++i) { - const note = notes[i]; - if (note.hasStem() || note.isRest()) { - const adjustedStemTipY = this.getSlopeY(note.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp; - const stemTipY = note.getStemExtents().topY; - if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) { - const diff = Math.abs(stemTipY - adjustedStemTipY); - yShiftTemp += diff * -stemDirection; - totalStemExtension += diff * i; - } - else { - totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection; - } - } - } - const idealSlope = initialSlope / 2; - const distanceFromIdeal = Math.abs(idealSlope - slope); - const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension); - if (cost < minCost) { - minCost = cost; - bestSlope = slope; - yShift = yShiftTemp; - } - } - this.slope = bestSlope; - this.y_shift = yShift; - } - calculateFlatSlope() { - const { notes, stem_direction, render_options: { beam_width, min_flat_beam_offset, flat_beam_offset }, } = this; - let total = 0; - let extremeY = 0; - let extremeBeamCount = 0; - let currentExtreme = 0; - for (let i = 0; i < notes.length; i++) { - const note = notes[i]; - const stemTipY = note.getStemExtents().topY; - total += stemTipY; - if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) { - currentExtreme = stemTipY; - extremeY = Math.max(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - else if (stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)) { - currentExtreme = stemTipY; - extremeY = Math.min(...note.getYs()); - extremeBeamCount = note.getBeamCount(); - } - } - let offset = total / notes.length; - const beamWidth = beam_width * 1.5; - const extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth; - const newOffset = extremeY + extremeTest * -stem_direction; - if (stem_direction === Stem.DOWN && offset < newOffset) { - offset = extremeY + extremeTest; - } - else if (stem_direction === Stem.UP && offset > newOffset) { - offset = extremeY - extremeTest; - } - if (!flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - else if (stem_direction === Stem.UP && offset < flat_beam_offset) { - this.render_options.flat_beam_offset = offset; - } - this.slope = 0; - this.y_shift = 0; - } - getBeamYToDraw() { - const firstNote = this.notes[0]; - const firstStemTipY = firstNote.getStemExtents().topY; - let beamY = firstStemTipY; - if (this.render_options.flat_beams && this.render_options.flat_beam_offset) { - beamY = this.render_options.flat_beam_offset; - } - return beamY; - } - applyStemExtensions() { - const { notes, slope, y_shift, beam_count, render_options: { show_stemlets, stemlet_extension, beam_width }, } = this; - const firstNote = notes[0]; - const firstStemTipY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const stem = note.getStem(); - if (stem) { - const stemX = note.getStemX(); - const { topY: stemTipY } = note.getStemExtents(); - const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift; - const preBeamExtension = stem.getExtension(); - const beamExtension = note.getStemDirection() === Stem.UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY; - let crossStemExtension = 0; - if (note.getStemDirection() !== this.stem_direction) { - const beamCount = note.getGlyphProps().beam_count; - crossStemExtension = (1 + (beamCount - 1) * 1.5) * this.render_options.beam_width; - } - stem.setExtension(preBeamExtension + beamExtension + crossStemExtension); - stem.adjustHeightForBeam(); - if (note.isRest() && show_stemlets) { - const beamWidth = beam_width; - const totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth; - stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension); - } - } - } - } - lookupBeamDirection(duration, prev_tick, tick, next_tick, noteIndex) { - if (duration === '4') { - return BEAM_LEFT; - } - const forcedBeamDirection = this.forcedPartialDirections[noteIndex]; - if (forcedBeamDirection) - return forcedBeamDirection; - const lookup_duration = `${Tables.durationToNumber(duration) / 2}`; - const prev_note_gets_beam = prev_tick < Tables.durationToTicks(lookup_duration); - const next_note_gets_beam = next_tick < Tables.durationToTicks(lookup_duration); - const note_gets_beam = tick < Tables.durationToTicks(lookup_duration); - if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_BOTH; - } - else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) { - return BEAM_LEFT; - } - else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) { - return BEAM_RIGHT; - } - return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick, noteIndex); - } - getBeamLines(duration) { - const tick_of_duration = Tables.durationToTicks(duration); - let beam_started = false; - const beam_lines = []; - let current_beam = undefined; - const partial_beam_length = this.render_options.partial_beam_length; - let previous_should_break = false; - let tick_tally = 0; - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - const ticks = note.getTicks().value(); - tick_tally += ticks; - let should_break = false; - if (parseInt(duration, 10) >= 8) { - should_break = this.break_on_indices.indexOf(i) !== -1; - if (this.render_options.secondary_break_ticks && tick_tally >= this.render_options.secondary_break_ticks) { - tick_tally = 0; - should_break = true; - } - } - const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration; - const stem_x = note.getStemX() - Stem.WIDTH / 2; - const prev_note = this.notes[i - 1]; - const next_note = this.notes[i + 1]; - const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration; - const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration; - const beam_alone = prev_note && next_note && note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam; - if (note_gets_beam) { - if (beam_started) { - current_beam = beam_lines[beam_lines.length - 1]; - current_beam.end = stem_x; - if (should_break) { - beam_started = false; - if (next_note && !next_note_gets_beam && current_beam.end === undefined) { - current_beam.end = current_beam.start - partial_beam_length; - } - } - } - else { - current_beam = { start: stem_x, end: undefined }; - beam_started = true; - if (beam_alone) { - const prev_tick = prev_note.getIntrinsicTicks(); - const next_tick = next_note.getIntrinsicTicks(); - const tick = note.getIntrinsicTicks(); - const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick, i); - if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) { - current_beam.end = current_beam.start - partial_beam_length; - } - else { - current_beam.end = current_beam.start + partial_beam_length; - } - } - else if (!next_note_gets_beam) { - if ((previous_should_break || i === 0) && next_note) { - current_beam.end = current_beam.start + partial_beam_length; - } - else { - current_beam.end = current_beam.start - partial_beam_length; - } - } - else if (should_break) { - current_beam.end = current_beam.start - partial_beam_length; - beam_started = false; - } - beam_lines.push(current_beam); - } - } - else { - beam_started = false; - } - previous_should_break = should_break; - } - const last_beam = beam_lines[beam_lines.length - 1]; - if (last_beam && last_beam.end === undefined) { - last_beam.end = last_beam.start - partial_beam_length; - } - return beam_lines; - } - drawStems(ctx) { - this.notes.forEach((note) => { - const stem = note.getStem(); - if (stem) { - const stem_x = note.getStemX(); - stem.setNoteHeadXBounds(stem_x, stem_x); - stem.setContext(ctx).draw(); - } - }, this); - } - drawBeamLines(ctx) { - const valid_beam_durations = ['4', '8', '16', '32', '64']; - const firstNote = this.notes[0]; - let beamY = this.getBeamYToDraw(); - const firstStemX = firstNote.getStemX(); - const beamThickness = this.render_options.beam_width * this.stem_direction; - for (let i = 0; i < valid_beam_durations.length; ++i) { - const duration = valid_beam_durations[i]; - const beamLines = this.getBeamLines(duration); - for (let j = 0; j < beamLines.length; ++j) { - const beam_line = beamLines[j]; - const startBeamX = beam_line.start; - const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope); - const lastBeamX = beam_line.end; - if (lastBeamX) { - const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope); - ctx.beginPath(); - ctx.moveTo(startBeamX, startBeamY); - ctx.lineTo(startBeamX, startBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY + beamThickness); - ctx.lineTo(lastBeamX + 1, lastBeamY); - ctx.closePath(); - ctx.fill(); - } - else { - throw new RuntimeError('NoLastBeamX', 'lastBeamX undefined.'); - } - } - beamY += beamThickness * 1.5; - } - } - preFormat() { - return this; - } - postFormat() { - if (this.postFormatted) - return; - if (isTabNote(this.notes[0]) || this.render_options.flat_beams) { - this.calculateFlatSlope(); - } - else { - this.calculateSlope(); - } - this.applyStemExtensions(); - this.postFormatted = true; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - if (this.unbeamable) - return; - if (!this.postFormatted) { - this.postFormat(); - } - this.drawStems(ctx); - this.applyStyle(); - ctx.openGroup('beam', this.getAttribute('id')); - this.drawBeamLines(ctx); - ctx.closeGroup(); - this.restoreStyle(); - } -} diff --git a/build/esm/src/bend.js b/build/esm/src/bend.js deleted file mode 100644 index ca96a0d406..0000000000 --- a/build/esm/src/bend.js +++ /dev/null @@ -1,202 +0,0 @@ -import { Element } from './element.js'; -import { Modifier } from './modifier.js'; -import { TextFormatter } from './textformatter.js'; -import { isTabNote } from './typeguard.js'; -import { RuntimeError } from './util.js'; -export class Bend extends Modifier { - static get CATEGORY() { - return "Bend"; - } - static get UP() { - return 0; - } - static get DOWN() { - return 1; - } - static format(bends, state) { - if (!bends || bends.length === 0) - return false; - let last_width = 0; - for (let i = 0; i < bends.length; ++i) { - const bend = bends[i]; - const note = bend.checkAttachedNote(); - if (isTabNote(note)) { - const stringPos = note.leastString() - 1; - if (state.top_text_line < stringPos) { - state.top_text_line = stringPos; - } - } - bend.setXShift(last_width); - last_width = bend.getWidth(); - bend.setTextLine(state.top_text_line); - } - state.right_shift += last_width; - state.top_text_line += 1; - return true; - } - constructor(text, release = false, phrase) { - super(); - this.text = text; - this.x_shift = 0; - this.release = release; - this.tap = ''; - this.resetFont(); - this.render_options = { - line_width: 1.5, - line_style: '#777777', - bend_width: 8, - release_width: 8, - }; - if (phrase) { - this.phrase = phrase; - } - else { - this.phrase = [{ type: Bend.UP, text: this.text }]; - if (this.release) - this.phrase.push({ type: Bend.DOWN, text: '' }); - } - this.updateWidth(); - } - setXShift(value) { - this.x_shift = value; - this.updateWidth(); - return this; - } - setTap(value) { - this.tap = value; - return this; - } - getText() { - return this.text; - } - getTextHeight() { - const textFormatter = TextFormatter.create(this.textFont); - return textFormatter.maxHeight; - } - updateWidth() { - const textFormatter = TextFormatter.create(this.textFont); - const measureText = (text) => { - return textFormatter.getWidthForTextInPx(text); - }; - let totalWidth = 0; - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (bend.width !== undefined) { - totalWidth += bend.width; - } - else { - const additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width; - bend.width = Math.max(additional_width, measureText(bend.text)) + 3; - bend.draw_width = bend.width / 2; - totalWidth += bend.width; - } - } - this.setWidth(totalWidth + this.x_shift); - return this; - } - draw() { - var _a; - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); - start.x += 3; - start.y += 0.5; - const x_shift = this.x_shift; - const stave = note.checkStave(); - const spacing = stave.getSpacingBetweenLines(); - const lowestY = note.getYs().reduce((a, b) => (a < b ? a : b)); - const bend_height = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) + 3; - const annotation_y = start.y - ((this.text_line + 1) * spacing + start.y - lowestY) - 1; - const renderBend = (x, y, width, height) => { - const cp_x = x + width; - const cp_y = y; - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, y); - ctx.quadraticCurveTo(cp_x, cp_y, x + width, height); - ctx.stroke(); - ctx.restore(); - }; - const renderRelease = (x, y, width, height) => { - ctx.save(); - ctx.beginPath(); - ctx.setLineWidth(this.render_options.line_width); - ctx.setStrokeStyle(this.render_options.line_style); - ctx.setFillStyle(this.render_options.line_style); - ctx.moveTo(x, height); - ctx.quadraticCurveTo(x + width, height, x + width, y); - ctx.stroke(); - ctx.restore(); - }; - const renderArrowHead = (x, y, direction) => { - const width = 4; - const yBase = y + width * direction; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x - width, yBase); - ctx.lineTo(x + width, yBase); - ctx.closePath(); - ctx.fill(); - }; - const renderText = (x, text) => { - ctx.save(); - ctx.setFont(this.textFont); - const render_x = x - ctx.measureText(text).width / 2; - ctx.fillText(text, render_x, annotation_y); - ctx.restore(); - }; - let last_bend = undefined; - let last_bend_draw_width = 0; - let last_drawn_width = 0; - if ((_a = this.tap) === null || _a === void 0 ? void 0 : _a.length) { - const tapStart = note.getModifierStartXY(Modifier.Position.CENTER, this.index); - renderText(tapStart.x, this.tap); - } - for (let i = 0; i < this.phrase.length; ++i) { - const bend = this.phrase[i]; - if (!bend.draw_width) - bend.draw_width = 0; - if (i === 0) - bend.draw_width += x_shift; - last_drawn_width = bend.draw_width + last_bend_draw_width - (i === 1 ? x_shift : 0); - if (bend.type === Bend.UP) { - if (last_bend && last_bend.type === Bend.UP) { - renderArrowHead(start.x, bend_height, +1); - } - renderBend(start.x, start.y, last_drawn_width, bend_height); - } - if (bend.type === Bend.DOWN) { - if (last_bend && last_bend.type === Bend.UP) { - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (last_bend && last_bend.type === Bend.DOWN) { - renderArrowHead(start.x, start.y, -1); - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - if (!last_bend) { - last_drawn_width = bend.draw_width; - renderRelease(start.x, start.y, last_drawn_width, bend_height); - } - } - renderText(start.x + last_drawn_width, bend.text); - last_bend = bend; - last_bend_draw_width = bend.draw_width; - last_bend.x = start.x; - start.x += last_drawn_width; - } - if (!last_bend || last_bend.x == undefined) { - throw new RuntimeError('NoLastBendForBend', 'Internal error.'); - } - if (last_bend.type === Bend.UP) { - renderArrowHead(last_bend.x + last_drawn_width, bend_height, +1); - } - else if (last_bend.type === Bend.DOWN) { - renderArrowHead(last_bend.x + last_drawn_width, start.y, -1); - } - } -} -Bend.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); diff --git a/build/esm/src/boundingbox.js b/build/esm/src/boundingbox.js deleted file mode 100644 index 1d1adbcea0..0000000000 --- a/build/esm/src/boundingbox.js +++ /dev/null @@ -1,59 +0,0 @@ -export class BoundingBox { - static copy(that) { - return new BoundingBox(that.x, that.y, that.w, that.h); - } - constructor(x, y, w, h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - getX() { - return this.x; - } - getY() { - return this.y; - } - getW() { - return this.w; - } - getH() { - return this.h; - } - setX(x) { - this.x = x; - return this; - } - setY(y) { - this.y = y; - return this; - } - setW(w) { - this.w = w; - return this; - } - setH(h) { - this.h = h; - return this; - } - move(x, y) { - this.x += x; - this.y += y; - return this; - } - clone() { - return BoundingBox.copy(this); - } - mergeWith(boundingBox) { - const that = boundingBox; - const new_x = this.x < that.x ? this.x : that.x; - const new_y = this.y < that.y ? this.y : that.y; - const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x; - const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y; - this.x = new_x; - this.y = new_y; - this.w = new_w; - this.h = new_h; - return this; - } -} diff --git a/build/esm/src/boundingboxcomputation.js b/build/esm/src/boundingboxcomputation.js deleted file mode 100644 index ee8588e456..0000000000 --- a/build/esm/src/boundingboxcomputation.js +++ /dev/null @@ -1,107 +0,0 @@ -export class BoundingBoxComputation { - constructor() { - this.x1 = Number.NaN; - this.y1 = Number.NaN; - this.x2 = Number.NaN; - this.y2 = Number.NaN; - } - getX1() { - return this.x1; - } - getY1() { - return this.y1; - } - width() { - return this.x2 - this.x1; - } - height() { - return this.y2 - this.y1; - } - addPoint(x, y) { - if (isNaN(this.x1) || x < this.x1) - this.x1 = x; - if (isNaN(this.x2) || x > this.x2) - this.x2 = x; - if (isNaN(this.y1) || y < this.y1) - this.y1 = y; - if (isNaN(this.y2) || y > this.y2) - this.y2 = y; - } - addX(x) { - this.addPoint(x, this.y1); - } - addY(y) { - this.addPoint(this.x1, y); - } - addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) { - this.addPoint(p0x, p0y); - this.addPoint(p2x, p2y); - const p01x = p1x - p0x; - const p12x = p2x - p1x; - let denom = p01x - p12x; - if (denom != 0) { - const t = p01x / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addX(it * it * p0x + 2 * it * t * p1x + t * t * p2x); - } - } - const p01y = p1y - p0y; - const p12y = p2y - p1y; - denom = p01y - p12y; - if (denom != 0) { - const t = p01y / denom; - if (t > 0 && t < 1) { - const it = 1 - t; - this.addY(it * it * p0y + 2 * it * t * p1y + t * t * p2y); - } - } - } - addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) { - const p0 = [p0x, p0y]; - const p1 = [p1x, p1y]; - const p2 = [p2x, p2y]; - const p3 = [p3x, p3y]; - let i; - this.addPoint(p0[0], p0[1]); - this.addPoint(p3[0], p3[1]); - const f = (t, i) => Math.pow(1 - t, 3) * p0[i] + - 3 * Math.pow(1 - t, 2) * t * p1[i] + - 3 * (1 - t) * Math.pow(t, 2) * p2[i] + - Math.pow(t, 3) * p3[i]; - for (i = 0; i <= 1; i++) { - const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - const c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) - continue; - const t = -c / b; - if (0 < t && t < 1) { - if (i === 0) - this.addX(f(t, i)); - if (i === 1) - this.addY(f(t, i)); - } - continue; - } - const b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) - continue; - const t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) - this.addX(f(t1, i)); - if (i === 1) - this.addY(f(t1, i)); - } - const t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) - this.addX(f(t2, i)); - if (i === 1) - this.addY(f(t2, i)); - } - } - } -} diff --git a/build/esm/src/canvascontext.js b/build/esm/src/canvascontext.js deleted file mode 100644 index 6f537e1d8f..0000000000 --- a/build/esm/src/canvascontext.js +++ /dev/null @@ -1,202 +0,0 @@ -import { Font } from './font.js'; -import { RenderContext } from './rendercontext.js'; -import { globalObject, warn } from './util.js'; -import { isHTMLCanvas } from './web.js'; -export class CanvasContext extends RenderContext { - static get WIDTH() { - return 600; - } - static get HEIGHT() { - return 400; - } - static get CANVAS_BROWSER_SIZE_LIMIT() { - return 32767; - } - static sanitizeCanvasDims(width, height) { - const limit = this.CANVAS_BROWSER_SIZE_LIMIT; - if (Math.max(width, height) > limit) { - warn('Canvas dimensions exceed browser limit. Cropping to ' + limit); - if (width > limit) { - width = limit; - } - if (height > limit) { - height = limit; - } - } - return [width, height]; - } - constructor(context) { - super(); - this.textHeight = 0; - this.context2D = context; - if (!context.canvas) { - this.canvas = { - width: CanvasContext.WIDTH, - height: CanvasContext.HEIGHT, - }; - } - else { - this.canvas = context.canvas; - } - } - clear() { - this.context2D.clearRect(0, 0, this.canvas.width, this.canvas.height); - } - openGroup(cls, id, attrs) { - } - closeGroup() { - } - add(child) { - } - setFillStyle(style) { - this.context2D.fillStyle = style; - return this; - } - setBackgroundFillStyle(style) { - return this; - } - setStrokeStyle(style) { - this.context2D.strokeStyle = style; - return this; - } - setShadowColor(color) { - this.context2D.shadowColor = color; - return this; - } - setShadowBlur(blur) { - const t = this.context2D.getTransform(); - const scale = Math.sqrt(t.a * t.a + t.b * t.b + t.c * t.c + t.d * t.d); - this.context2D.shadowBlur = scale * blur; - return this; - } - setLineWidth(width) { - this.context2D.lineWidth = width; - return this; - } - setLineCap(capType) { - this.context2D.lineCap = capType; - return this; - } - setLineDash(dash) { - this.context2D.setLineDash(dash); - return this; - } - scale(x, y) { - this.context2D.scale(x, y); - return this; - } - resize(width, height) { - const canvas = this.context2D.canvas; - const devicePixelRatio = globalObject().devicePixelRatio || 1; - [width, height] = CanvasContext.sanitizeCanvasDims(width * devicePixelRatio, height * devicePixelRatio); - width = (width / devicePixelRatio) | 0; - height = (height / devicePixelRatio) | 0; - canvas.width = width * devicePixelRatio; - canvas.height = height * devicePixelRatio; - if (isHTMLCanvas(canvas)) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - return this.scale(devicePixelRatio, devicePixelRatio); - } - rect(x, y, width, height) { - this.context2D.rect(x, y, width, height); - return this; - } - fillRect(x, y, width, height) { - this.context2D.fillRect(x, y, width, height); - return this; - } - clearRect(x, y, width, height) { - this.context2D.clearRect(x, y, width, height); - return this; - } - beginPath() { - this.context2D.beginPath(); - return this; - } - moveTo(x, y) { - this.context2D.moveTo(x, y); - return this; - } - lineTo(x, y) { - this.context2D.lineTo(x, y); - return this; - } - bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) { - this.context2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - return this; - } - quadraticCurveTo(cpx, cpy, x, y) { - this.context2D.quadraticCurveTo(cpx, cpy, x, y); - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - this.context2D.arc(x, y, radius, startAngle, endAngle, counterclockwise); - return this; - } - fill() { - this.context2D.fill(); - return this; - } - stroke() { - this.context2D.stroke(); - return this; - } - closePath() { - this.context2D.closePath(); - return this; - } - measureText(text) { - const metrics = this.context2D.measureText(text); - let y = 0; - let height = 0; - if (metrics.fontBoundingBoxAscent) { - y = -metrics.fontBoundingBoxAscent; - height = metrics.fontBoundingBoxDescent + metrics.fontBoundingBoxAscent; - } - else { - y = -metrics.actualBoundingBoxAscent; - height = metrics.actualBoundingBoxDescent + metrics.actualBoundingBoxAscent; - } - return { - x: 0, - y: y, - width: metrics.width, - height: height, - }; - } - fillText(text, x, y) { - this.context2D.fillText(text, x, y); - return this; - } - save() { - this.context2D.save(); - return this; - } - restore() { - this.context2D.restore(); - return this; - } - set fillStyle(style) { - this.context2D.fillStyle = style; - } - get fillStyle() { - return this.context2D.fillStyle; - } - set strokeStyle(style) { - this.context2D.strokeStyle = style; - } - get strokeStyle() { - return this.context2D.strokeStyle; - } - setFont(f, size, weight, style) { - const fontInfo = Font.validate(f, size, weight, style); - this.context2D.font = Font.toCSSString(fontInfo); - this.textHeight = Font.convertSizeToPixelValue(fontInfo.size); - return this; - } - getFont() { - return this.context2D.font; - } -} diff --git a/build/esm/src/chordsymbol.js b/build/esm/src/chordsymbol.js deleted file mode 100644 index 3a44449bf1..0000000000 --- a/build/esm/src/chordsymbol.js +++ /dev/null @@ -1,607 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { Tables } from './tables.js'; -import { TextFormatter } from './textformatter.js'; -import { isStemmableNote } from './typeguard.js'; -import { log, RuntimeError } from './util.js'; -function L(...args) { - if (ChordSymbol.DEBUG) - log('Vex.Flow.ChordSymbol', args); -} -export var ChordSymbolHorizontalJustify; -(function (ChordSymbolHorizontalJustify) { - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["LEFT"] = 1] = "LEFT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER"] = 2] = "CENTER"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["RIGHT"] = 3] = "RIGHT"; - ChordSymbolHorizontalJustify[ChordSymbolHorizontalJustify["CENTER_STEM"] = 4] = "CENTER_STEM"; -})(ChordSymbolHorizontalJustify || (ChordSymbolHorizontalJustify = {})); -export var ChordSymbolVerticalJustify; -(function (ChordSymbolVerticalJustify) { - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["TOP"] = 1] = "TOP"; - ChordSymbolVerticalJustify[ChordSymbolVerticalJustify["BOTTOM"] = 2] = "BOTTOM"; -})(ChordSymbolVerticalJustify || (ChordSymbolVerticalJustify = {})); -export var SymbolTypes; -(function (SymbolTypes) { - SymbolTypes[SymbolTypes["GLYPH"] = 1] = "GLYPH"; - SymbolTypes[SymbolTypes["TEXT"] = 2] = "TEXT"; - SymbolTypes[SymbolTypes["LINE"] = 3] = "LINE"; -})(SymbolTypes || (SymbolTypes = {})); -export var SymbolModifiers; -(function (SymbolModifiers) { - SymbolModifiers[SymbolModifiers["NONE"] = 1] = "NONE"; - SymbolModifiers[SymbolModifiers["SUBSCRIPT"] = 2] = "SUBSCRIPT"; - SymbolModifiers[SymbolModifiers["SUPERSCRIPT"] = 3] = "SUPERSCRIPT"; -})(SymbolModifiers || (SymbolModifiers = {})); -export class ChordSymbol extends Modifier { - static get CATEGORY() { - return "ChordSymbol"; - } - static get superSubRatio() { - return ChordSymbol.metrics.global.superSubRatio; - } - static set NO_TEXT_FORMAT(val) { - ChordSymbol.noFormat = val; - } - static get NO_TEXT_FORMAT() { - return ChordSymbol.noFormat; - } - static getMetricForGlyph(glyphCode) { - if (ChordSymbol.metrics.glyphs[glyphCode]) { - return ChordSymbol.metrics.glyphs[glyphCode]; - } - return undefined; - } - static get engravingFontResolution() { - return Tables.currentMusicFont().getResolution(); - } - static get spacingBetweenBlocks() { - return ChordSymbol.metrics.global.spacing / ChordSymbol.engravingFontResolution; - } - static getWidthForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0.65; - } - return metric.advanceWidth / ChordSymbol.engravingFontResolution; - } - static getYShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return metric.yOffset / ChordSymbol.engravingFontResolution; - } - static getXShiftForGlyph(glyph) { - const metric = ChordSymbol.getMetricForGlyph(glyph.code); - if (!metric) { - return 0; - } - return (-1 * metric.leftSideBearing) / ChordSymbol.engravingFontResolution; - } - static get superscriptOffset() { - return ChordSymbol.metrics.global.superscriptOffset / ChordSymbol.engravingFontResolution; - } - static get subscriptOffset() { - return ChordSymbol.metrics.global.subscriptOffset / ChordSymbol.engravingFontResolution; - } - static get kerningOffset() { - return ChordSymbol.metrics.global.kerningOffset / ChordSymbol.engravingFontResolution; - } - static get metrics() { - const chordSymbol = Tables.currentMusicFont().getMetrics().chordSymbol; - if (!chordSymbol) - throw new RuntimeError('BadMetrics', `chordSymbol missing`); - return chordSymbol; - } - static get lowerKerningText() { - return ChordSymbol.metrics.global.lowerKerningText; - } - static get upperKerningText() { - return ChordSymbol.metrics.global.upperKerningText; - } - static isSuperscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUPERSCRIPT; - } - static isSubscript(block) { - return block.symbolModifier !== undefined && block.symbolModifier === SymbolModifiers.SUBSCRIPT; - } - static get minPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - static format(symbols, state) { - var _a; - if (!symbols || symbols.length === 0) - return false; - let width = 0; - let nonSuperWidth = 0; - let leftWidth = 0; - let rightWidth = 0; - let maxLeftGlyphWidth = 0; - let maxRightGlyphWidth = 0; - for (const symbol of symbols) { - const fontSize = Font.convertSizeToPointValue((_a = symbol.textFont) === null || _a === void 0 ? void 0 : _a.size); - const fontAdj = Font.scaleSize(fontSize, 0.05); - const glyphAdj = fontAdj * 2; - const note = symbol.checkAttachedNote(); - let symbolWidth = 0; - let lineSpaces = 1; - let vAlign = false; - for (let j = 0; j < symbol.symbolBlocks.length; ++j) { - const block = symbol.symbolBlocks[j]; - const sup = ChordSymbol.isSuperscript(block); - const sub = ChordSymbol.isSubscript(block); - const superSubScale = sup || sub ? ChordSymbol.superSubRatio : 1; - const adj = block.symbolType === SymbolTypes.GLYPH ? glyphAdj * superSubScale : fontAdj * superSubScale; - if (sup || sub) { - lineSpaces = 2; - } - const fontSize = symbol.textFormatter.fontSizeInPixels; - const superSubFontSize = fontSize * superSubScale; - if (block.symbolType === SymbolTypes.GLYPH && block.glyph !== undefined) { - block.width = ChordSymbol.getWidthForGlyph(block.glyph) * superSubFontSize; - block.yShift += ChordSymbol.getYShiftForGlyph(block.glyph) * superSubFontSize; - block.xShift += ChordSymbol.getXShiftForGlyph(block.glyph) * superSubFontSize; - block.glyph.scale = block.glyph.scale * adj; - } - else if (block.symbolType === SymbolTypes.TEXT) { - block.width = block.width * superSubFontSize; - block.yShift += symbol.getYOffsetForText(block.text) * adj; - } - if (block.symbolType === SymbolTypes.GLYPH && - block.glyph !== undefined && - block.glyph.code === ChordSymbol.glyphs.over.code) { - lineSpaces = 2; - } - block.width += ChordSymbol.spacingBetweenBlocks * fontSize * superSubScale; - if (sup && j > 0) { - const prev = symbol.symbolBlocks[j - 1]; - if (!ChordSymbol.isSuperscript(prev)) { - nonSuperWidth = width; - } - } - if (sub && nonSuperWidth > 0) { - vAlign = true; - block.xShift = block.xShift + (nonSuperWidth - width); - width = nonSuperWidth; - nonSuperWidth = 0; - symbol.setEnableKerning(false); - } - if (!sup && !sub) { - nonSuperWidth = 0; - } - block.vAlign = vAlign; - width += block.width; - symbolWidth = width; - } - symbol.updateKerningAdjustments(); - symbol.updateOverBarAdjustments(); - if (symbol.getVertical() === ChordSymbolVerticalJustify.TOP) { - symbol.setTextLine(state.top_text_line); - state.top_text_line += lineSpaces; - } - else { - symbol.setTextLine(state.text_line + 1); - state.text_line += lineSpaces + 1; - } - if (symbol.getReportWidth() && isStemmableNote(note)) { - const glyphWidth = note.getGlyphProps().getWidth(); - if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.LEFT) { - maxLeftGlyphWidth = Math.max(glyphWidth, maxLeftGlyphWidth); - leftWidth = Math.max(leftWidth, symbolWidth) + ChordSymbol.minPadding; - } - else if (symbol.getHorizontal() === ChordSymbolHorizontalJustify.RIGHT) { - maxRightGlyphWidth = Math.max(glyphWidth, maxRightGlyphWidth); - rightWidth = Math.max(rightWidth, symbolWidth); - } - else { - leftWidth = Math.max(leftWidth, symbolWidth / 2) + ChordSymbol.minPadding; - rightWidth = Math.max(rightWidth, symbolWidth / 2); - maxLeftGlyphWidth = Math.max(glyphWidth / 2, maxLeftGlyphWidth); - maxRightGlyphWidth = Math.max(glyphWidth / 2, maxRightGlyphWidth); - } - } - width = 0; - } - const rightOverlap = Math.min(Math.max(rightWidth - maxRightGlyphWidth, 0), Math.max(rightWidth - state.right_shift, 0)); - const leftOverlap = Math.min(Math.max(leftWidth - maxLeftGlyphWidth, 0), Math.max(leftWidth - state.left_shift, 0)); - state.left_shift += leftOverlap; - state.right_shift += rightOverlap; - return true; - } - constructor() { - super(); - this.symbolBlocks = []; - this.horizontal = ChordSymbolHorizontalJustify.LEFT; - this.vertical = ChordSymbolVerticalJustify.TOP; - this.useKerning = true; - this.reportWidth = true; - this.resetFont(); - } - static get TEXT_FONT() { - let family = 'Roboto Slab, Times, serif'; - if (Tables.currentMusicFont().getName() === 'Petaluma') { - family = 'PetalumaScript, Arial, sans-serif'; - } - return { - family, - size: 12, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }; - } - get superscriptOffset() { - return ChordSymbol.superscriptOffset * this.textFormatter.fontSizeInPixels; - } - get subscriptOffset() { - return ChordSymbol.subscriptOffset * this.textFormatter.fontSizeInPixels; - } - setReportWidth(value) { - this.reportWidth = value; - return this; - } - getReportWidth() { - return this.reportWidth; - } - updateOverBarAdjustments() { - const barIndex = this.symbolBlocks.findIndex(({ symbolType, glyph }) => symbolType === SymbolTypes.GLYPH && glyph !== undefined && glyph.code === 'csymDiagonalArrangementSlash'); - if (barIndex < 0) { - return; - } - const bar = this.symbolBlocks[barIndex]; - const xoff = bar.width / 4; - const yoff = 0.25 * this.textFormatter.fontSizeInPixels; - let symIndex = 0; - for (symIndex === 0; symIndex < barIndex; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift + xoff; - symbol.yShift = symbol.yShift - yoff; - } - for (symIndex = barIndex + 1; symIndex < this.symbolBlocks.length; ++symIndex) { - const symbol = this.symbolBlocks[symIndex]; - symbol.xShift = symbol.xShift - xoff; - symbol.yShift = symbol.yShift + yoff; - } - } - updateKerningAdjustments() { - let accum = 0; - for (let j = 0; j < this.symbolBlocks.length; ++j) { - const symbol = this.symbolBlocks[j]; - accum += this.getKerningAdjustment(j); - symbol.xShift += accum; - } - } - getKerningAdjustment(j) { - if (!this.useKerning) { - return 0; - } - const currSymbol = this.symbolBlocks[j]; - const prevSymbol = j > 0 ? this.symbolBlocks[j - 1] : undefined; - let adjustment = 0; - if (currSymbol.symbolType === SymbolTypes.GLYPH && - currSymbol.glyph !== undefined && - currSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += currSymbol.glyph.metrics.x_shift; - } - if (prevSymbol !== undefined && - prevSymbol.symbolType === SymbolTypes.GLYPH && - prevSymbol.glyph !== undefined && - prevSymbol.glyph.code === ChordSymbol.glyphs.over.code) { - adjustment += prevSymbol.glyph.metrics.x_shift; - } - let preKernUpper = false; - let preKernLower = false; - if (prevSymbol !== undefined && prevSymbol.symbolType === SymbolTypes.TEXT) { - preKernUpper = ChordSymbol.upperKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - preKernLower = ChordSymbol.lowerKerningText.some((xx) => xx === prevSymbol.text[prevSymbol.text.length - 1]); - } - const kerningOffsetPixels = ChordSymbol.kerningOffset * this.textFormatter.fontSizeInPixels; - if (preKernUpper && currSymbol.symbolModifier === SymbolModifiers.SUPERSCRIPT) { - adjustment += kerningOffsetPixels; - } - if (preKernLower && currSymbol.symbolType === SymbolTypes.TEXT) { - if (currSymbol.text[0] >= 'a' && currSymbol.text[0] <= 'z') { - adjustment += kerningOffsetPixels / 2; - } - if (ChordSymbol.upperKerningText.some((xx) => xx === (prevSymbol === null || prevSymbol === void 0 ? void 0 : prevSymbol.text[prevSymbol.text.length - 1]))) { - adjustment += kerningOffsetPixels / 2; - } - } - return adjustment; - } - getSymbolBlock(params = {}) { - var _a, _b, _c; - const symbolType = (_a = params.symbolType) !== null && _a !== void 0 ? _a : SymbolTypes.TEXT; - const symbolBlock = { - text: (_b = params.text) !== null && _b !== void 0 ? _b : '', - symbolType, - symbolModifier: (_c = params.symbolModifier) !== null && _c !== void 0 ? _c : SymbolModifiers.NONE, - xShift: 0, - yShift: 0, - vAlign: false, - width: 0, - }; - if (symbolType === SymbolTypes.GLYPH && typeof params.glyph === 'string') { - const glyphArgs = ChordSymbol.glyphs[params.glyph]; - const glyphPoints = 20; - symbolBlock.glyph = new Glyph(glyphArgs.code, glyphPoints, { category: 'chordSymbol' }); - } - else if (symbolType === SymbolTypes.TEXT) { - symbolBlock.width = this.textFormatter.getWidthForTextInEm(symbolBlock.text); - } - else if (symbolType === SymbolTypes.LINE) { - symbolBlock.width = params.width; - } - return symbolBlock; - } - addSymbolBlock(parameters) { - this.symbolBlocks.push(this.getSymbolBlock(parameters)); - return this; - } - addText(text, parameters = {}) { - const symbolType = SymbolTypes.TEXT; - return this.addSymbolBlock(Object.assign(Object.assign({}, parameters), { text, symbolType })); - } - addTextSuperscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - addTextSubscript(text) { - const symbolType = SymbolTypes.TEXT; - const symbolModifier = SymbolModifiers.SUBSCRIPT; - return this.addSymbolBlock({ text, symbolType, symbolModifier }); - } - addGlyphSuperscript(glyph) { - const symbolType = SymbolTypes.GLYPH; - const symbolModifier = SymbolModifiers.SUPERSCRIPT; - return this.addSymbolBlock({ glyph, symbolType, symbolModifier }); - } - addGlyph(glyph, params = {}) { - const symbolType = SymbolTypes.GLYPH; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { glyph, symbolType })); - } - addGlyphOrText(text, params = {}) { - let str = ''; - for (let i = 0; i < text.length; ++i) { - const char = text[i]; - if (ChordSymbol.glyphs[char]) { - if (str.length > 0) { - this.addText(str, params); - str = ''; - } - this.addGlyph(char, params); - } - else { - str += char; - } - } - if (str.length > 0) { - this.addText(str, params); - } - return this; - } - addLine(width, params = {}) { - const symbolType = SymbolTypes.LINE; - return this.addSymbolBlock(Object.assign(Object.assign({}, params), { symbolType, width })); - } - setFont(f, size, weight, style) { - super.setFont(f, size, weight, style); - this.textFormatter = TextFormatter.create(this.textFont); - return this; - } - setEnableKerning(val) { - this.useKerning = val; - return this; - } - setVertical(vj) { - this.vertical = typeof vj === 'string' ? ChordSymbol.VerticalJustifyString[vj] : vj; - return this; - } - getVertical() { - return this.vertical; - } - setHorizontal(hj) { - this.horizontal = typeof hj === 'string' ? ChordSymbol.HorizontalJustifyString[hj] : hj; - return this; - } - getHorizontal() { - return this.horizontal; - } - getWidth() { - let width = 0; - this.symbolBlocks.forEach((symbol) => { - width += symbol.vAlign ? 0 : symbol.width; - }); - return width; - } - getYOffsetForText(text) { - var _a; - let acc = 0; - let i = 0; - for (i = 0; i < text.length; ++i) { - const metrics = this.textFormatter.getGlyphMetrics(text[i]); - if (metrics) { - const yMax = (_a = metrics.y_max) !== null && _a !== void 0 ? _a : 0; - acc = yMax < acc ? yMax : acc; - } - } - const resolution = this.textFormatter.getResolution(); - return i > 0 ? -1 * (acc / resolution) : 0; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - ctx.save(); - this.applyStyle(); - ctx.openGroup('chordsymbol', this.getAttribute('id')); - const start = note.getModifierStartXY(Modifier.Position.ABOVE, this.index); - ctx.setFont(this.textFont); - let y; - const hasStem = note.hasStem(); - const stave = note.checkStave(); - if (this.vertical === ChordSymbolVerticalJustify.BOTTOM) { - y = stave.getYForBottomText(this.text_line + Tables.TEXT_HEIGHT_OFFSET_HACK); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - const stem_base = note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY; - y = Math.max(y, stem_base + spacing * (this.text_line + 2)); - } - } - else { - const topY = Math.min(...note.getYs()); - y = Math.min(stave.getYForTopText(this.text_line), topY - 10); - if (hasStem) { - const stem_ext = note.checkStem().getExtents(); - const spacing = stave.getSpacingBetweenLines(); - y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line); - } - } - let x = start.x; - if (this.horizontal === ChordSymbolHorizontalJustify.LEFT) { - x = start.x; - } - else if (this.horizontal === ChordSymbolHorizontalJustify.RIGHT) { - x = start.x + this.getWidth(); - } - else if (this.horizontal === ChordSymbolHorizontalJustify.CENTER) { - x = start.x - this.getWidth() / 2; - } - else { - x = note.getStemX() - this.getWidth() / 2; - } - L('Rendering ChordSymbol: ', this.textFormatter, x, y); - this.symbolBlocks.forEach((symbol) => { - const isSuper = ChordSymbol.isSuperscript(symbol); - const isSub = ChordSymbol.isSubscript(symbol); - let curY = y; - L('shift was ', symbol.xShift, symbol.yShift); - L('curY pre sub ', curY); - if (isSuper) { - curY += this.superscriptOffset; - } - if (isSub) { - curY += this.subscriptOffset; - } - L('curY sup/sub ', curY); - if (symbol.symbolType === SymbolTypes.TEXT) { - if (isSuper || isSub) { - ctx.save(); - if (this.textFont) { - const { family, size, weight, style } = this.textFont; - const smallerFontSize = Font.scaleSize(size, ChordSymbol.superSubRatio); - ctx.setFont(family, smallerFontSize, weight, style); - } - } - L('Rendering Text: ', symbol.text, x + symbol.xShift, curY + symbol.yShift); - ctx.fillText(symbol.text, x + symbol.xShift, curY + symbol.yShift); - if (isSuper || isSub) { - ctx.restore(); - } - } - else if (symbol.symbolType === SymbolTypes.GLYPH && symbol.glyph) { - curY += symbol.yShift; - L('Rendering Glyph: ', symbol.glyph.code, x + symbol.xShift, curY); - symbol.glyph.render(ctx, x + symbol.xShift, curY); - } - else if (symbol.symbolType === SymbolTypes.LINE) { - L('Rendering Line : ', symbol.width, x, curY); - ctx.beginPath(); - ctx.setLineWidth(1); - ctx.moveTo(x, y); - ctx.lineTo(x + symbol.width, curY); - ctx.stroke(); - } - x += symbol.width; - if (symbol.vAlign) { - x += symbol.xShift; - } - }); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -ChordSymbol.DEBUG = false; -ChordSymbol.HorizontalJustify = ChordSymbolHorizontalJustify; -ChordSymbol.HorizontalJustifyString = { - left: ChordSymbolHorizontalJustify.LEFT, - right: ChordSymbolHorizontalJustify.RIGHT, - center: ChordSymbolHorizontalJustify.CENTER, - centerStem: ChordSymbolHorizontalJustify.CENTER_STEM, -}; -ChordSymbol.VerticalJustify = ChordSymbolVerticalJustify; -ChordSymbol.VerticalJustifyString = { - top: ChordSymbolVerticalJustify.TOP, - above: ChordSymbolVerticalJustify.TOP, - below: ChordSymbolVerticalJustify.BOTTOM, - bottom: ChordSymbolVerticalJustify.BOTTOM, -}; -ChordSymbol.glyphs = { - diminished: { - code: 'csymDiminished', - }, - dim: { - code: 'csymDiminished', - }, - halfDiminished: { - code: 'csymHalfDiminished', - }, - '+': { - code: 'csymAugmented', - }, - augmented: { - code: 'csymAugmented', - }, - majorSeventh: { - code: 'csymMajorSeventh', - }, - minor: { - code: 'csymMinor', - }, - '-': { - code: 'csymMinor', - }, - '(': { - code: 'csymParensLeftTall', - }, - leftParen: { - code: 'csymParensLeftTall', - }, - ')': { - code: 'csymParensRightTall', - }, - rightParen: { - code: 'csymParensRightTall', - }, - leftBracket: { - code: 'csymBracketLeftTall', - }, - rightBracket: { - code: 'csymBracketRightTall', - }, - leftParenTall: { - code: 'csymParensLeftVeryTall', - }, - rightParenTall: { - code: 'csymParensRightVeryTall', - }, - '/': { - code: 'csymDiagonalArrangementSlash', - }, - over: { - code: 'csymDiagonalArrangementSlash', - }, - '#': { - code: 'accidentalSharp', - }, - b: { - code: 'accidentalFlat', - }, -}; -ChordSymbol.symbolTypes = SymbolTypes; -ChordSymbol.symbolModifiers = SymbolModifiers; -ChordSymbol.noFormat = false; diff --git a/build/esm/src/clef.js b/build/esm/src/clef.js deleted file mode 100644 index c12d475a89..0000000000 --- a/build/esm/src/clef.js +++ /dev/null @@ -1,145 +0,0 @@ -import { Glyph } from './glyph.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -import { defined, log } from './util.js'; -function L(...args) { - if (Clef.DEBUG) - log('Vex.Flow.Clef', args); -} -export class Clef extends StaveModifier { - static get CATEGORY() { - return "Clef"; - } - static get types() { - return { - treble: { - code: 'gClef', - line: 3, - point: 0, - }, - bass: { - code: 'fClef', - line: 1, - point: 0, - }, - alto: { - code: 'cClef', - line: 2, - point: 0, - }, - tenor: { - code: 'cClef', - line: 1, - point: 0, - }, - percussion: { - code: 'unpitchedPercussionClef1', - line: 2, - point: 0, - }, - soprano: { - code: 'cClef', - line: 4, - point: 0, - }, - 'mezzo-soprano': { - code: 'cClef', - line: 3, - point: 0, - }, - 'baritone-c': { - code: 'cClef', - line: 0, - point: 0, - }, - 'baritone-f': { - code: 'fClef', - line: 2, - point: 0, - }, - subbass: { - code: 'fClef', - line: 0, - point: 0, - }, - french: { - code: 'gClef', - line: 4, - point: 0, - }, - tab: { - code: '6stringTabClef', - line: 3, - point: 0, - }, - }; - } - static get annotationSmufl() { - return { - '8va': 'timeSig8', - '8vb': 'timeSig8', - }; - } - constructor(type, size, annotation) { - super(); - this.clef = Clef.types['treble']; - this.setPosition(StaveModifierPosition.BEGIN); - this.setType(type, size, annotation); - this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clef_${this.size}`)); - L('Creating clef:', type); - } - setType(type, size, annotation) { - this.type = type; - this.clef = Clef.types[type]; - if (size === undefined) { - this.size = 'default'; - } - else { - this.size = size; - } - const musicFont = Tables.currentMusicFont(); - if (annotation !== undefined) { - const code = Clef.annotationSmufl[annotation]; - const point = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.point`); - const line = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.line`); - const x_shift = musicFont.lookupMetric(`clef_${this.size}.annotations.${annotation}.${this.type}.shiftX`); - this.annotation = { code, point, line, x_shift }; - this.attachment = new Glyph(this.annotation.code, this.annotation.point); - this.attachment.metrics.x_max = 0; - this.attachment.setXShift(this.annotation.x_shift); - } - else { - this.annotation = undefined; - } - return this; - } - getWidth() { - if (this.type === 'tab') { - defined(this.stave, 'ClefError', "Can't get width without stave."); - } - return this.width; - } - setStave(stave) { - this.stave = stave; - return this; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('clef', this.getAttribute('id')); - Glyph.renderGlyph(ctx, this.x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clef_${this.size}`, - }); - if (this.annotation !== undefined && this.attachment !== undefined) { - this.placeGlyphOnLine(this.attachment, stave, this.annotation.line); - this.attachment.setStave(stave); - this.attachment.setContext(ctx); - this.attachment.renderToStave(this.x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -Clef.DEBUG = false; diff --git a/build/esm/src/clefnote.js b/build/esm/src/clefnote.js deleted file mode 100644 index 5b9d80c59e..0000000000 --- a/build/esm/src/clefnote.js +++ /dev/null @@ -1,51 +0,0 @@ -import { Clef } from './clef.js'; -import { Glyph } from './glyph.js'; -import { Note } from './note.js'; -export class ClefNote extends Note { - static get CATEGORY() { - return "ClefNote"; - } - constructor(type, size, annotation) { - super({ duration: 'b' }); - this.type = type; - const clef = new Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.size = size === undefined ? 'default' : size; - this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - this.ignore_ticks = true; - } - setType(type, size, annotation) { - this.type = type; - this.size = size; - const clef = new Clef(type, size, annotation); - this.clef = clef.clef; - this.annotation = clef.annotation; - this.setWidth(Glyph.getWidth(this.clef.code, this.clef.point, `clefNote_${this.size}`)); - return this; - } - getClef() { - return this.clef; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const abs_x = this.getAbsoluteX(); - Glyph.renderGlyph(ctx, abs_x, stave.getYForLine(this.clef.line), this.clef.point, this.clef.code, { - category: `clefNote_${this.size}`, - }); - if (this.annotation !== undefined) { - const attachment = new Glyph(this.annotation.code, this.annotation.point); - attachment.setContext(ctx); - attachment.setStave(stave); - attachment.setYShift(stave.getYForLine(this.annotation.line) - stave.getYForGlyphs()); - attachment.setXShift(this.annotation.x_shift); - attachment.renderToStave(abs_x); - } - } -} diff --git a/build/esm/src/crescendo.js b/build/esm/src/crescendo.js deleted file mode 100644 index 8397e4cdea..0000000000 --- a/build/esm/src/crescendo.js +++ /dev/null @@ -1,77 +0,0 @@ -import { Note } from './note.js'; -import { TickContext } from './tickcontext.js'; -import { log } from './util.js'; -function L(...args) { - if (Crescendo.DEBUG) - log('Vex.Flow.Crescendo', args); -} -function renderHairpin(ctx, params) { - const begin_x = params.begin_x; - const end_x = params.end_x; - const y = params.y; - const half_height = params.height / 2; - ctx.beginPath(); - if (params.reverse) { - ctx.moveTo(begin_x, y - half_height); - ctx.lineTo(end_x, y); - ctx.lineTo(begin_x, y + half_height); - } - else { - ctx.moveTo(end_x, y - half_height); - ctx.lineTo(begin_x, y); - ctx.lineTo(end_x, y + half_height); - } - ctx.stroke(); - ctx.closePath(); -} -export class Crescendo extends Note { - static get CATEGORY() { - return "Crescendo"; - } - constructor(noteStruct) { - super(noteStruct); - this.options = { - extend_left: 0, - extend_right: 0, - y_shift: 0, - }; - this.decrescendo = false; - this.line = noteStruct.line || 0; - this.height = 15; - } - setLine(line) { - this.line = line; - return this; - } - setHeight(height) { - this.height = height; - return this; - } - setDecrescendo(decresc) { - this.decrescendo = decresc; - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - this.setRendered(); - const tick_context = this.getTickContext(); - const next_context = TickContext.getNextContext(tick_context); - const begin_x = this.getAbsoluteX(); - const end_x = next_context ? next_context.getX() : stave.getX() + stave.getWidth(); - const y = stave.getYForLine(this.line + -3) + 1; - L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x); - renderHairpin(ctx, { - begin_x: begin_x - this.options.extend_left, - end_x: end_x + this.options.extend_right, - y: y + this.options.y_shift, - height: this.height, - reverse: this.decrescendo, - }); - } -} -Crescendo.DEBUG = false; diff --git a/build/esm/src/curve.js b/build/esm/src/curve.js deleted file mode 100644 index 199b170757..0000000000 --- a/build/esm/src/curve.js +++ /dev/null @@ -1,118 +0,0 @@ -import { Element } from './element.js'; -import { RuntimeError } from './util.js'; -export var CurvePosition; -(function (CurvePosition) { - CurvePosition[CurvePosition["NEAR_HEAD"] = 1] = "NEAR_HEAD"; - CurvePosition[CurvePosition["NEAR_TOP"] = 2] = "NEAR_TOP"; -})(CurvePosition || (CurvePosition = {})); -export class Curve extends Element { - static get CATEGORY() { - return "Curve"; - } - static get Position() { - return CurvePosition; - } - static get PositionString() { - return { - nearHead: CurvePosition.NEAR_HEAD, - nearTop: CurvePosition.NEAR_TOP, - }; - } - constructor(from, to, options) { - super(); - this.render_options = Object.assign({ thickness: 2, x_shift: 0, y_shift: 10, position: CurvePosition.NEAR_HEAD, position_end: CurvePosition.NEAR_HEAD, invert: false, cps: [ - { x: 0, y: 10 }, - { x: 0, y: 10 }, - ] }, options); - this.from = from; - this.to = to; - } - setNotes(from, to) { - if (!from && !to) { - throw new RuntimeError('BadArguments', 'Curve needs to have either `from` or `to` set.'); - } - this.from = from; - this.to = to; - return this; - } - isPartial() { - return !this.from || !this.to; - } - renderCurve(params) { - const ctx = this.checkContext(); - const x_shift = this.render_options.x_shift; - const y_shift = this.render_options.y_shift * params.direction; - const first_x = params.first_x + x_shift; - const first_y = params.first_y + y_shift; - const last_x = params.last_x - x_shift; - const last_y = params.last_y + y_shift; - const thickness = this.render_options.thickness; - const cps = this.render_options.cps; - const { x: cp0x, y: cp0y } = cps[0]; - const { x: cp1x, y: cp1y } = cps[1]; - const cp_spacing = (last_x - first_x) / (cps.length + 2); - ctx.beginPath(); - ctx.moveTo(first_x, first_y); - ctx.bezierCurveTo(first_x + cp_spacing + cp0x, first_y + cp0y * params.direction, last_x - cp_spacing + cp1x, last_y + cp1y * params.direction, last_x, last_y); - ctx.bezierCurveTo(last_x - cp_spacing + cp1x, last_y + (cp1y + thickness) * params.direction, first_x + cp_spacing + cp0x, first_y + (cp0y + thickness) * params.direction, first_x, first_y); - ctx.stroke(); - ctx.closePath(); - ctx.fill(); - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.from; - const last_note = this.to; - let first_x; - let last_x; - let first_y; - let last_y; - let stem_direction = 0; - let metric = 'baseY'; - let end_metric = 'baseY'; - function getPosition(position) { - return typeof position === 'string' ? Curve.PositionString[position] : position; - } - const position = getPosition(this.render_options.position); - const position_end = getPosition(this.render_options.position_end); - if (position === CurvePosition.NEAR_TOP) { - metric = 'topY'; - end_metric = 'topY'; - } - if (position_end === CurvePosition.NEAR_HEAD) { - end_metric = 'baseY'; - } - else if (position_end === CurvePosition.NEAR_TOP) { - end_metric = 'topY'; - } - if (first_note) { - first_x = first_note.getTieRightX(); - stem_direction = first_note.getStemDirection(); - first_y = first_note.getStemExtents()[metric]; - } - else { - const stave = last_note.checkStave(); - first_x = stave.getTieStartX(); - first_y = last_note.getStemExtents()[metric]; - } - if (last_note) { - last_x = last_note.getTieLeftX(); - stem_direction = last_note.getStemDirection(); - last_y = last_note.getStemExtents()[end_metric]; - } - else { - const stave = first_note.checkStave(); - last_x = stave.getTieEndX(); - last_y = first_note.getStemExtents()[end_metric]; - } - this.renderCurve({ - first_x, - last_x, - first_y, - last_y, - direction: stem_direction * (this.render_options.invert === true ? -1 : 1), - }); - return true; - } -} diff --git a/build/esm/src/dot.js b/build/esm/src/dot.js deleted file mode 100644 index 454e3d08e0..0000000000 --- a/build/esm/src/dot.js +++ /dev/null @@ -1,137 +0,0 @@ -import { Modifier } from './modifier.js'; -import { isGraceNote, isStaveNote, isTabNote } from './typeguard.js'; -import { RuntimeError } from './util.js'; -export class Dot extends Modifier { - static get CATEGORY() { - return "Dot"; - } - static getDots(note) { - return note.getModifiersByType(Dot.CATEGORY); - } - static buildAndAttach(notes, options) { - for (const note of notes) { - if (options === null || options === void 0 ? void 0 : options.all) { - for (let i = 0; i < note.keys.length; i++) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, i); - } - } - else if ((options === null || options === void 0 ? void 0 : options.index) != undefined) { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, options === null || options === void 0 ? void 0 : options.index); - } - else { - const dot = new Dot(); - dot.setDotShiftY(note.glyphProps.dot_shiftY); - note.addModifier(dot, 0); - } - } - } - static format(dots, state) { - const right_shift = state.right_shift; - const dot_spacing = 1; - if (!dots || dots.length === 0) - return false; - const dot_list = []; - const max_shift_map = {}; - for (let i = 0; i < dots.length; ++i) { - const dot = dots[i]; - const note = dot.getNote(); - let props; - let shift; - if (isStaveNote(note)) { - const index = dot.checkIndex(); - props = note.getKeyProps()[index]; - shift = note.getFirstDotPx(); - } - else if (isTabNote(note)) { - props = { line: 0.5 }; - shift = right_shift; - } - else { - throw new RuntimeError('Internal', 'Unexpected instance.'); - } - const note_id = note.getAttribute('id'); - dot_list.push({ line: props.line, note, note_id, dot }); - max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift); - } - dot_list.sort((a, b) => b.line - a.line); - let dot_shift = right_shift; - let x_width = 0; - let last_line = null; - let last_note = null; - let prev_dotted_space = null; - let half_shiftY = 0; - for (let i = 0; i < dot_list.length; ++i) { - const { dot, note, note_id, line } = dot_list[i]; - if (line !== last_line || note !== last_note) { - dot_shift = max_shift_map[note_id]; - } - if (!note.isRest() && line !== last_line) { - if (Math.abs(line % 1) === 0.5) { - half_shiftY = 0; - } - else { - half_shiftY = 0.5; - if (last_note != null && !last_note.isRest() && last_line != null && last_line - line === 0.5) { - half_shiftY = -0.5; - } - else if (line + half_shiftY === prev_dotted_space) { - half_shiftY = -0.5; - } - } - } - if (note.isRest()) { - dot.dot_shiftY += -half_shiftY; - } - else { - dot.dot_shiftY = -half_shiftY; - } - prev_dotted_space = line + half_shiftY; - dot.setXShift(dot_shift); - dot_shift += dot.getWidth() + dot_spacing; - x_width = dot_shift > x_width ? dot_shift : x_width; - last_line = line; - last_note = note; - } - state.right_shift += x_width; - return true; - } - constructor() { - super(); - this.position = Modifier.Position.RIGHT; - this.radius = 2; - this.setWidth(5); - this.dot_shiftY = 0; - } - setNote(note) { - this.note = note; - if (isGraceNote(note)) { - this.radius *= 0.5; - this.setWidth(3); - } - return this; - } - setDotShiftY(y) { - this.dot_shiftY = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stave = note.checkStave(); - const lineSpace = stave.getSpacingBetweenLines(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - if (isTabNote(note)) { - start.y = note.getStemExtents().baseY; - } - const x = start.x + this.x_shift + this.width - this.radius; - const y = start.y + this.y_shift + this.dot_shiftY * lineSpace; - ctx.beginPath(); - ctx.arc(x, y, this.radius, 0, Math.PI * 2, false); - ctx.fill(); - } -} diff --git a/build/esm/src/easyscore.js b/build/esm/src/easyscore.js deleted file mode 100644 index 16ed373f4f..0000000000 --- a/build/esm/src/easyscore.js +++ /dev/null @@ -1,374 +0,0 @@ -import { Articulation } from './articulation.js'; -import { Dot } from './dot.js'; -import { FretHandFinger } from './frethandfinger.js'; -import { Music } from './music.js'; -import { Parser } from './parser.js'; -import { Stem } from './stem.js'; -import { defined, log, RuntimeError } from './util.js'; -function L(...args) { - if (EasyScore.DEBUG) - log('Vex.Flow.EasyScore', args); -} -export class EasyScoreGrammar { - constructor(builder) { - this.builder = builder; - } - begin() { - return this.LINE; - } - LINE() { - return { - expect: [this.PIECE, this.PIECES, this.EOL], - }; - } - PIECE() { - return { - expect: [this.CHORDORNOTE, this.PARAMS], - run: () => this.builder.commitPiece(), - }; - } - PIECES() { - return { - expect: [this.COMMA, this.PIECE], - zeroOrMore: true, - }; - } - PARAMS() { - return { - expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS], - }; - } - CHORDORNOTE() { - return { - expect: [this.CHORD, this.SINGLENOTE], - or: true, - }; - } - CHORD() { - return { - expect: [this.LPAREN, this.NOTES, this.RPAREN], - run: (state) => this.builder.addChord(state.matches[1]), - }; - } - NOTES() { - return { - expect: [this.NOTE], - oneOrMore: true, - }; - } - NOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - }; - } - SINGLENOTE() { - return { - expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE], - run: (state) => { - const s = state; - this.builder.addSingleNote(s.matches[0], s.matches[1], s.matches[2]); - }, - }; - } - ACCIDENTAL() { - return { - expect: [this.MICROTONES, this.ACCIDENTALS], - maybe: true, - or: true, - }; - } - DOTS() { - return { - expect: [this.DOT], - zeroOrMore: true, - run: (state) => this.builder.setNoteDots(state.matches), - }; - } - TYPE() { - return { - expect: [this.SLASH, this.MAYBESLASH, this.TYPES], - maybe: true, - run: (state) => this.builder.setNoteType(state.matches[2]), - }; - } - DURATION() { - return { - expect: [this.SLASH, this.DURATIONS], - maybe: true, - run: (state) => this.builder.setNoteDuration(state.matches[1]), - }; - } - OPTS() { - return { - expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET], - maybe: true, - }; - } - KEYVALS() { - return { - expect: [this.COMMA, this.KEYVAL], - zeroOrMore: true, - }; - } - KEYVAL() { - const unquote = (str) => str.slice(1, -1); - return { - expect: [this.KEY, this.EQUALS, this.VAL], - run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])), - }; - } - VAL() { - return { - expect: [this.SVAL, this.DVAL], - or: true, - }; - } - KEY() { - return { token: '[a-zA-Z][a-zA-Z0-9]*' }; - } - DVAL() { - return { token: '["][^"]*["]' }; - } - SVAL() { - return { token: "['][^']*[']" }; - } - NOTENAME() { - return { token: '[a-gA-G]' }; - } - OCTAVE() { - return { token: '[0-9]+' }; - } - ACCIDENTALS() { - return { token: 'bb|b|##|#|n' }; - } - MICROTONES() { - return { token: 'bbs|bss|bs|db|d|\\+\\+-|\\+-|\\+\\+|\\+|k|o' }; - } - DURATIONS() { - return { token: '[0-9whq]+' }; - } - TYPES() { - return { token: '[rRsSmMhHgG]' }; - } - LPAREN() { - return { token: '[(]' }; - } - RPAREN() { - return { token: '[)]' }; - } - COMMA() { - return { token: '[,]' }; - } - DOT() { - return { token: '[.]' }; - } - SLASH() { - return { token: '[/]' }; - } - MAYBESLASH() { - return { token: '[/]?' }; - } - EQUALS() { - return { token: '[=]' }; - } - LBRACKET() { - return { token: '\\[' }; - } - RBRACKET() { - return { token: '\\]' }; - } - EOL() { - return { token: '$' }; - } -} -export class Piece { - constructor(duration) { - this.chord = []; - this.dots = 0; - this.options = {}; - this.duration = duration; - } -} -export class Builder { - constructor(factory) { - this.commitHooks = []; - this.factory = factory; - this.reset(); - } - reset(options) { - this.options = Object.assign({ stem: 'auto', clef: 'treble' }, options); - this.elements = { notes: [], accidentals: [] }; - this.rollingDuration = '8'; - this.resetPiece(); - } - getFactory() { - return this.factory; - } - getElements() { - return this.elements; - } - addCommitHook(commitHook) { - this.commitHooks.push(commitHook); - } - resetPiece() { - L('resetPiece'); - this.piece = new Piece(this.rollingDuration); - } - setNoteDots(dots) { - L('setNoteDots:', dots); - if (dots) - this.piece.dots = dots.length; - } - setNoteDuration(duration) { - L('setNoteDuration:', duration); - this.rollingDuration = this.piece.duration = duration || this.rollingDuration; - } - setNoteType(type) { - L('setNoteType:', type); - if (type) - this.piece.type = type; - } - addNoteOption(key, value) { - L('addNoteOption: key:', key, 'value:', value); - this.piece.options[key] = value; - } - addNote(key, accid, octave) { - L('addNote:', key, accid, octave); - this.piece.chord.push({ - key: key, - accid, - octave, - }); - } - addSingleNote(key, accid, octave) { - L('addSingleNote:', key, accid, octave); - this.addNote(key, accid, octave); - } - addChord(notes) { - L('startChord'); - if (typeof notes[0] !== 'object') { - this.addSingleNote(notes[0]); - } - else { - notes.forEach((n) => { - if (n) - this.addNote(...n); - }); - } - L('endChord'); - } - commitPiece() { - L('commitPiece'); - const { factory } = this; - if (!factory) - return; - const options = Object.assign(Object.assign({}, this.options), this.piece.options); - const stem = defined(options.stem, 'BadArguments', 'options.stem is not defined').toLowerCase(); - const clef = defined(options.clef, 'BadArguments', 'options.clef is not defined').toLowerCase(); - const { chord, duration, dots, type } = this.piece; - const standardAccidentals = Music.accidentals; - const keys = chord.map((notePiece) => { - var _a; - return notePiece.key + - (standardAccidentals.includes((_a = notePiece.accid) !== null && _a !== void 0 ? _a : '') ? notePiece.accid : '') + - '/' + - notePiece.octave; - }); - const auto_stem = stem === 'auto'; - const note = (type === null || type === void 0 ? void 0 : type.toLowerCase()) == 'g' - ? factory.GhostNote({ duration, dots }) - : factory.StaveNote({ keys, duration, dots, type, clef, auto_stem }); - if (!auto_stem) - note.setStemDirection(stem === 'up' ? Stem.UP : Stem.DOWN); - const accidentals = []; - chord.forEach((notePiece, index) => { - const accid = notePiece.accid; - if (typeof accid === 'string') { - const accidental = factory.Accidental({ type: accid }); - note.addModifier(accidental, index); - accidentals.push(accidental); - } - else { - accidentals.push(undefined); - } - }); - for (let i = 0; i < dots; i++) - Dot.buildAndAttach([note], { all: true }); - this.commitHooks.forEach((commitHook) => commitHook(options, note, this)); - this.elements.notes.push(note); - this.elements.accidentals.push(accidentals); - this.resetPiece(); - } -} -function setId(options, note) { - if (options.id === undefined) - return; - note.setAttribute('id', options.id); -} -const commaSeparatedRegex = /\s*,\s*/; -function setClass(options, note) { - if (options.class === undefined) - return; - options.class.split(commaSeparatedRegex).forEach((className) => note.addClass(className)); -} -export class EasyScore { - constructor(options = {}) { - this.defaults = { - clef: 'treble', - time: '4/4', - stem: 'auto', - }; - this.setOptions(options); - } - set(defaults) { - this.defaults = Object.assign(Object.assign({}, this.defaults), defaults); - return this; - } - setOptions(options) { - var _a, _b; - const factory = options.factory; - const builder = (_a = options.builder) !== null && _a !== void 0 ? _a : new Builder(factory); - this.options = Object.assign(Object.assign({ commitHooks: [setId, setClass, Articulation.easyScoreHook, FretHandFinger.easyScoreHook], throwOnError: false }, options), { factory, - builder }); - this.factory = factory; - this.builder = builder; - this.grammar = new EasyScoreGrammar(this.builder); - this.parser = new Parser(this.grammar); - (_b = this.options.commitHooks) === null || _b === void 0 ? void 0 : _b.forEach((commitHook) => this.addCommitHook(commitHook)); - return this; - } - setContext(context) { - this.factory.setContext(context); - return this; - } - parse(line, options = {}) { - this.builder.reset(options); - const result = this.parser.parse(line); - if (!result.success && this.options.throwOnError) { - L(result); - throw new RuntimeError('Error parsing line: ' + line); - } - return result; - } - beam(notes, options) { - this.factory.Beam({ notes, options }); - return notes; - } - tuplet(notes, options) { - this.factory.Tuplet({ notes, options }); - return notes; - } - notes(line, options = {}) { - options = Object.assign({ clef: this.defaults.clef, stem: this.defaults.stem }, options); - this.parse(line, options); - return this.builder.getElements().notes; - } - voice(notes, options = {}) { - options = Object.assign({ time: this.defaults.time }, options); - return this.factory.Voice(options).addTickables(notes); - } - addCommitHook(commitHook) { - this.builder.addCommitHook(commitHook); - } -} -EasyScore.DEBUG = false; diff --git a/build/esm/src/element.js b/build/esm/src/element.js deleted file mode 100644 index ef6ec5ea8c..0000000000 --- a/build/esm/src/element.js +++ /dev/null @@ -1,245 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Registry } from './registry.js'; -import { defined, prefix } from './util.js'; -export class Element { - static get CATEGORY() { - return "Element"; - } - static newID() { - return `auto${Element.ID++}`; - } - constructor() { - var _a; - this.children = []; - this.attrs = { - id: Element.newID(), - type: this.getCategory(), - class: '', - }; - this.rendered = false; - (_a = Registry.getDefaultRegistry()) === null || _a === void 0 ? void 0 : _a.register(this); - } - addChildElement(child) { - this.children.push(child); - return this; - } - getCategory() { - return this.constructor.CATEGORY; - } - setStyle(style) { - this.style = style; - return this; - } - setGroupStyle(style) { - this.style = style; - this.children.forEach((child) => child.setGroupStyle(style)); - return this; - } - getStyle() { - return this.style; - } - applyStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.save(); - if (style.shadowColor) - context.setShadowColor(style.shadowColor); - if (style.shadowBlur) - context.setShadowBlur(style.shadowBlur); - if (style.fillStyle) - context.setFillStyle(style.fillStyle); - if (style.strokeStyle) - context.setStrokeStyle(style.strokeStyle); - if (style.lineWidth) - context.setLineWidth(style.lineWidth); - return this; - } - restoreStyle(context = this.context, style = this.getStyle()) { - if (!style) - return this; - if (!context) - return this; - context.restore(); - return this; - } - drawWithStyle() { - this.checkContext(); - this.applyStyle(); - this.draw(); - this.restoreStyle(); - } - hasClass(className) { - var _a; - if (!this.attrs.class) - return false; - return ((_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' ').indexOf(className)) != -1; - } - addClass(className) { - var _a; - if (this.hasClass(className)) - return this; - if (!this.attrs.class) - this.attrs.class = `${className}`; - else - this.attrs.class = `${this.attrs.class} ${className}`; - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ - id: this.attrs.id, - name: 'class', - value: className, - oldValue: undefined, - }); - return this; - } - removeClass(className) { - var _a, _b; - if (!this.hasClass(className)) - return this; - const arr = (_a = this.attrs.class) === null || _a === void 0 ? void 0 : _a.split(' '); - if (arr) { - arr.splice(arr.indexOf(className)); - this.attrs.class = arr.join(' '); - } - (_b = this.registry) === null || _b === void 0 ? void 0 : _b.onUpdate({ - id: this.attrs.id, - name: 'class', - value: undefined, - oldValue: className, - }); - return this; - } - onRegister(registry) { - this.registry = registry; - return this; - } - isRendered() { - return this.rendered; - } - setRendered(rendered = true) { - this.rendered = rendered; - return this; - } - getAttributes() { - return this.attrs; - } - getAttribute(name) { - return this.attrs[name]; - } - getSVGElement(suffix = '') { - const id = prefix(this.attrs.id + suffix); - const element = document.getElementById(id); - if (element) - return element; - } - setAttribute(name, value) { - var _a; - const oldID = this.attrs.id; - const oldValue = this.attrs[name]; - this.attrs[name] = value; - (_a = this.registry) === null || _a === void 0 ? void 0 : _a.onUpdate({ id: oldID, name, value, oldValue }); - return this; - } - getBoundingBox() { - return this.boundingBox; - } - getContext() { - return this.context; - } - setContext(context) { - this.context = context; - return this; - } - checkContext() { - return defined(this.context, 'NoContext', 'No rendering context attached to instance.'); - } - set font(f) { - this.setFont(f); - } - get font() { - return Font.toCSSString(this.textFont); - } - setFont(font, size, weight, style) { - const defaultTextFont = this.constructor.TEXT_FONT; - const fontIsObject = typeof font === 'object'; - const fontIsString = typeof font === 'string'; - const fontIsUndefined = font === undefined; - const sizeWeightStyleAreUndefined = size === undefined && weight === undefined && style === undefined; - if (fontIsObject) { - this.textFont = Object.assign(Object.assign({}, defaultTextFont), font); - } - else if (fontIsString && sizeWeightStyleAreUndefined) { - this.textFont = Font.fromCSSString(font); - } - else if (fontIsUndefined && sizeWeightStyleAreUndefined) { - this.textFont = Object.assign({}, defaultTextFont); - } - else { - this.textFont = Font.validate(font !== null && font !== void 0 ? font : defaultTextFont.family, size !== null && size !== void 0 ? size : defaultTextFont.size, weight !== null && weight !== void 0 ? weight : defaultTextFont.weight, style !== null && style !== void 0 ? style : defaultTextFont.style); - } - return this; - } - getFont() { - if (!this.textFont) { - this.resetFont(); - } - return Font.toCSSString(this.textFont); - } - resetFont() { - this.setFont(); - } - get fontInfo() { - if (!this.textFont) { - this.resetFont(); - } - return Object.assign({}, this.textFont); - } - set fontInfo(fontInfo) { - this.setFont(fontInfo); - } - setFontSize(size) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, size, fontInfo.weight, fontInfo.style); - return this; - } - getFontSize() { - return this.fontSize; - } - set fontSize(size) { - this.setFontSize(size); - } - get fontSize() { - let size = this.fontInfo.size; - if (typeof size === 'number') { - size = `${size}pt`; - } - return size; - } - get fontSizeInPoints() { - return Font.convertSizeToPointValue(this.fontSize); - } - get fontSizeInPixels() { - return Font.convertSizeToPixelValue(this.fontSize); - } - get fontStyle() { - return this.fontInfo.style; - } - set fontStyle(style) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, fontInfo.weight, style); - } - get fontWeight() { - return this.fontInfo.weight + ''; - } - set fontWeight(weight) { - const fontInfo = this.fontInfo; - this.setFont(fontInfo.family, fontInfo.size, weight, fontInfo.style); - } -} -Element.ID = 1000; -Element.TEXT_FONT = { - family: Font.SANS_SERIF, - size: Font.SIZE, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/factory.js b/build/esm/src/factory.js deleted file mode 100644 index a9358245b9..0000000000 --- a/build/esm/src/factory.js +++ /dev/null @@ -1,466 +0,0 @@ -import { Accidental } from './accidental.js'; -import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; -import { Articulation } from './articulation.js'; -import { BarNote } from './barnote.js'; -import { Beam } from './beam.js'; -import { ChordSymbol } from './chordsymbol.js'; -import { ClefNote } from './clefnote.js'; -import { Curve } from './curve.js'; -import { EasyScore } from './easyscore.js'; -import { Element } from './element.js'; -import { Formatter } from './formatter.js'; -import { FretHandFinger } from './frethandfinger.js'; -import { GhostNote } from './ghostnote.js'; -import { GlyphNote } from './glyphnote.js'; -import { GraceNote } from './gracenote.js'; -import { GraceNoteGroup } from './gracenotegroup.js'; -import { KeySigNote } from './keysignote.js'; -import { ModifierContext } from './modifiercontext.js'; -import { MultiMeasureRest } from './multimeasurerest.js'; -import { NoteSubGroup } from './notesubgroup.js'; -import { Ornament } from './ornament.js'; -import { PedalMarking } from './pedalmarking.js'; -import { Renderer } from './renderer.js'; -import { RepeatNote } from './repeatnote.js'; -import { Stave } from './stave.js'; -import { StaveConnector } from './staveconnector.js'; -import { StaveLine } from './staveline.js'; -import { StaveNote } from './stavenote.js'; -import { StaveTie } from './stavetie.js'; -import { StringNumber } from './stringnumber.js'; -import { System } from './system.js'; -import { TabNote } from './tabnote.js'; -import { TabStave } from './tabstave.js'; -import { TextBracket } from './textbracket.js'; -import { TextDynamics } from './textdynamics.js'; -import { TextNote } from './textnote.js'; -import { TickContext } from './tickcontext.js'; -import { TimeSigNote } from './timesignote.js'; -import { Tuplet } from './tuplet.js'; -import { defined, log, RuntimeError } from './util.js'; -import { VibratoBracket } from './vibratobracket.js'; -import { Voice } from './voice.js'; -import { isHTMLCanvas } from './web.js'; -function L(...args) { - if (Factory.DEBUG) - log('Vex.Flow.Factory', args); -} -export class Factory { - static newFromElementId(elementId, width = 500, height = 200) { - return new Factory({ renderer: { elementId, width, height } }); - } - constructor(options = {}) { - L('New factory: ', options); - this.options = { - stave: { - space: 10, - }, - renderer: { - elementId: '', - width: 500, - height: 200, - background: '#FFF', - }, - font: Factory.TEXT_FONT, - }; - this.setOptions(options); - } - reset() { - this.renderQ = []; - this.systems = []; - this.staves = []; - this.voices = []; - this.stave = undefined; - } - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.initRenderer(); - this.reset(); - } - initRenderer() { - const { elementId, width, height, background } = this.options.renderer; - if (elementId == null) { - return; - } - if (elementId == '') { - L(this); - throw new RuntimeError('renderer.elementId not set in FactoryOptions'); - } - let backend = this.options.renderer.backend; - if (backend === undefined) { - const elem = document.getElementById(elementId); - if (isHTMLCanvas(elem)) { - backend = Renderer.Backends.CANVAS; - } - else { - backend = Renderer.Backends.SVG; - } - } - this.context = Renderer.buildContext(elementId, backend, width, height, background); - } - getContext() { - return this.context; - } - setContext(context) { - this.context = context; - return this; - } - getStave() { - return this.stave; - } - getVoices() { - return this.voices; - } - Stave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.0 } }, params); - const stave = new Stave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - TabStave(params) { - const staveSpace = this.options.stave.space; - const p = Object.assign({ x: 0, y: 0, width: this.options.renderer.width - staveSpace * 1.0, options: { spacing_between_lines_px: staveSpace * 1.3 } }, params); - const stave = new TabStave(p.x, p.y, p.width, p.options); - this.staves.push(stave); - stave.setContext(this.context); - this.stave = stave; - return stave; - } - StaveNote(noteStruct) { - const note = new StaveNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GlyphNote(glyph, noteStruct, options) { - const note = new GlyphNote(glyph, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - RepeatNote(type, noteStruct, options) { - const note = new RepeatNote(type, noteStruct, options); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GhostNote(noteStruct) { - const ghostNote = new GhostNote(noteStruct); - if (this.stave) - ghostNote.setStave(this.stave); - ghostNote.setContext(this.context); - this.renderQ.push(ghostNote); - return ghostNote; - } - TextNote(noteStruct) { - const textNote = new TextNote(noteStruct); - if (this.stave) - textNote.setStave(this.stave); - textNote.setContext(this.context); - this.renderQ.push(textNote); - return textNote; - } - BarNote(params = {}) { - const barNote = new BarNote(params.type); - if (this.stave) - barNote.setStave(this.stave); - barNote.setContext(this.context); - this.renderQ.push(barNote); - return barNote; - } - ClefNote(params) { - const p = Object.assign({ type: 'treble', options: { - size: 'default', - annotation: undefined, - } }, params); - const clefNote = new ClefNote(p.type, p.options.size, p.options.annotation); - if (this.stave) - clefNote.setStave(this.stave); - clefNote.setContext(this.context); - this.renderQ.push(clefNote); - return clefNote; - } - TimeSigNote(params) { - const p = Object.assign({ time: '4/4' }, params); - const timeSigNote = new TimeSigNote(p.time); - if (this.stave) - timeSigNote.setStave(this.stave); - timeSigNote.setContext(this.context); - this.renderQ.push(timeSigNote); - return timeSigNote; - } - KeySigNote(params) { - const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey); - if (this.stave) - keySigNote.setStave(this.stave); - keySigNote.setContext(this.context); - this.renderQ.push(keySigNote); - return keySigNote; - } - TabNote(noteStruct) { - const note = new TabNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - this.renderQ.push(note); - return note; - } - GraceNote(noteStruct) { - const note = new GraceNote(noteStruct); - if (this.stave) - note.setStave(this.stave); - note.setContext(this.context); - return note; - } - GraceNoteGroup(params) { - const group = new GraceNoteGroup(params.notes, params.slur); - group.setContext(this.context); - return group; - } - Accidental(params) { - const accid = new Accidental(params.type); - accid.setContext(this.context); - return accid; - } - Annotation(params) { - const p = Object.assign({ text: 'p', hJustify: AnnotationHorizontalJustify.CENTER, vJustify: AnnotationVerticalJustify.BOTTOM }, params); - const annotation = new Annotation(p.text); - annotation.setJustification(p.hJustify); - annotation.setVerticalJustification(p.vJustify); - annotation.setFont(p.font); - annotation.setContext(this.context); - return annotation; - } - ChordSymbol(params) { - const p = Object.assign({ vJustify: 'top', hJustify: 'center', kerning: true, reportWidth: true }, params); - const chordSymbol = new ChordSymbol(); - chordSymbol.setHorizontal(p.hJustify); - chordSymbol.setVertical(p.vJustify); - chordSymbol.setEnableKerning(p.kerning); - chordSymbol.setReportWidth(p.reportWidth); - if (typeof p.fontFamily === 'string' && typeof p.fontSize === 'number') { - if (typeof p.fontWeight === 'string') - chordSymbol.setFont(p.fontFamily, p.fontSize, p.fontWeight); - else - chordSymbol.setFont(p.fontFamily, p.fontSize, ''); - } - else if (typeof p.fontSize === 'number') { - chordSymbol.setFontSize(p.fontSize); - } - chordSymbol.setContext(this.context); - return chordSymbol; - } - Articulation(params) { - var _a; - const articulation = new Articulation((_a = params === null || params === void 0 ? void 0 : params.type) !== null && _a !== void 0 ? _a : 'a.'); - if ((params === null || params === void 0 ? void 0 : params.position) != undefined) - articulation.setPosition(params.position); - if ((params === null || params === void 0 ? void 0 : params.betweenLines) != undefined) - articulation.setBetweenLines(params.betweenLines); - articulation.setContext(this.context); - return articulation; - } - Ornament(type, params) { - const options = Object.assign({ type, position: 0, accidental: '' }, params); - const ornament = new Ornament(type); - ornament.setPosition(options.position); - if (options.upperAccidental) { - ornament.setUpperAccidental(options.upperAccidental); - } - if (options.lowerAccidental) { - ornament.setLowerAccidental(options.lowerAccidental); - } - if (typeof options.delayed !== 'undefined') { - ornament.setDelayed(options.delayed); - } - ornament.setContext(this.context); - return ornament; - } - TextDynamics(params) { - const p = Object.assign({ text: 'p', duration: 'q', dots: 0, line: 0 }, params); - const text = new TextDynamics({ - text: p.text, - line: p.line, - duration: p.duration, - dots: p.dots, - }); - if (this.stave) - text.setStave(this.stave); - text.setContext(this.context); - this.renderQ.push(text); - return text; - } - Fingering(params) { - const p = Object.assign({ number: '0', position: 'left' }, params); - const fingering = new FretHandFinger(p.number); - fingering.setPosition(p.position); - fingering.setContext(this.context); - return fingering; - } - StringNumber(params, drawCircle = true) { - const stringNumber = new StringNumber(params.number); - stringNumber.setPosition(params.position); - stringNumber.setContext(this.context); - stringNumber.setDrawCircle(drawCircle); - return stringNumber; - } - TickContext() { - return new TickContext(); - } - ModifierContext() { - return new ModifierContext(); - } - MultiMeasureRest(params) { - const numMeasures = defined(params.number_of_measures, 'NoNumberOfMeasures'); - const multiMeasureRest = new MultiMeasureRest(numMeasures, params); - multiMeasureRest.setContext(this.context); - this.renderQ.push(multiMeasureRest); - return multiMeasureRest; - } - Voice(params) { - const p = Object.assign({ time: '4/4' }, params); - const voice = new Voice(p.time); - this.voices.push(voice); - return voice; - } - StaveConnector(params) { - const connector = new StaveConnector(params.top_stave, params.bottom_stave); - connector.setType(params.type).setContext(this.context); - this.renderQ.push(connector); - return connector; - } - Formatter(options) { - return new Formatter(options); - } - Tuplet(params) { - const p = Object.assign({ notes: [], options: {} }, params); - const tuplet = new Tuplet(p.notes, p.options).setContext(this.context); - this.renderQ.push(tuplet); - return tuplet; - } - Beam(params) { - var _a, _b, _c, _d, _e; - const beam = new Beam(params.notes, (_a = params.options) === null || _a === void 0 ? void 0 : _a.autoStem).setContext(this.context); - beam.breakSecondaryAt((_c = (_b = params.options) === null || _b === void 0 ? void 0 : _b.secondaryBeamBreaks) !== null && _c !== void 0 ? _c : []); - if ((_d = params.options) === null || _d === void 0 ? void 0 : _d.partialBeamDirections) { - Object.entries((_e = params.options) === null || _e === void 0 ? void 0 : _e.partialBeamDirections).forEach(([noteIndex, direction]) => { - beam.setPartialBeamSideAt(Number(noteIndex), direction); - }); - } - this.renderQ.push(beam); - return beam; - } - Curve(params) { - const curve = new Curve(params.from, params.to, params.options).setContext(this.context); - this.renderQ.push(curve); - return curve; - } - StaveTie(params) { - var _a; - const tie = new StaveTie({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }, params.text); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.direction) - tie.setDirection(params.options.direction); - tie.setContext(this.context); - this.renderQ.push(tie); - return tie; - } - StaveLine(params) { - var _a, _b; - const line = new StaveLine({ - first_note: params.from, - last_note: params.to, - first_indices: params.first_indices, - last_indices: params.last_indices, - }); - if ((_a = params.options) === null || _a === void 0 ? void 0 : _a.text) - line.setText(params.options.text); - if ((_b = params.options) === null || _b === void 0 ? void 0 : _b.font) - line.setFont(params.options.font); - line.setContext(this.context); - this.renderQ.push(line); - return line; - } - VibratoBracket(params) { - const vibratoBracket = new VibratoBracket({ - start: params.from, - stop: params.to, - }); - if (params.options.line) - vibratoBracket.setLine(params.options.line); - if (params.options.harsh) - vibratoBracket.setHarsh(params.options.harsh); - vibratoBracket.setContext(this.context); - this.renderQ.push(vibratoBracket); - return vibratoBracket; - } - TextBracket(params) { - const textBracket = new TextBracket({ - start: params.from, - stop: params.to, - text: params.text, - superscript: params.options.superscript, - position: params.options.position, - }); - if (params.options.line) - textBracket.setLine(params.options.line); - if (params.options.font) - textBracket.setFont(params.options.font); - textBracket.setContext(this.context); - this.renderQ.push(textBracket); - return textBracket; - } - System(params = {}) { - params.factory = this; - const system = new System(params).setContext(this.context); - this.systems.push(system); - return system; - } - EasyScore(options = {}) { - options.factory = this; - return new EasyScore(options); - } - PedalMarking(params) { - const p = Object.assign({ notes: [], options: { - style: 'mixed', - } }, params); - const pedal = new PedalMarking(p.notes); - pedal.setType(PedalMarking.typeString[p.options.style]); - pedal.setContext(this.context); - this.renderQ.push(pedal); - return pedal; - } - NoteSubGroup(params) { - const p = Object.assign({ notes: [] }, params); - const group = new NoteSubGroup(p.notes); - group.setContext(this.context); - return group; - } - draw() { - const ctx = this.context; - this.systems.forEach((s) => s.setContext(ctx).format()); - this.staves.forEach((s) => s.setContext(ctx).draw()); - this.voices.forEach((v) => v.setContext(ctx).draw()); - this.renderQ.forEach((e) => { - if (!e.isRendered()) - e.setContext(ctx).draw(); - }); - this.systems.forEach((s) => s.setContext(ctx).draw()); - this.reset(); - } -} -Factory.DEBUG = false; -Factory.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); diff --git a/build/esm/src/flow.js b/build/esm/src/flow.js deleted file mode 100644 index 09a4d4c3d3..0000000000 --- a/build/esm/src/flow.js +++ /dev/null @@ -1,300 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { Accidental } from './accidental.js'; -import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation.js'; -import { Articulation } from './articulation.js'; -import { BarNote } from './barnote.js'; -import { Beam } from './beam.js'; -import { Bend } from './bend.js'; -import { BoundingBox } from './boundingbox.js'; -import { BoundingBoxComputation } from './boundingboxcomputation.js'; -import { CanvasContext } from './canvascontext.js'; -import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes, } from './chordsymbol.js'; -import { Clef } from './clef.js'; -import { ClefNote } from './clefnote.js'; -import { Crescendo } from './crescendo.js'; -import { Curve, CurvePosition } from './curve.js'; -import { Dot } from './dot.js'; -import { EasyScore } from './easyscore.js'; -import { Element } from './element.js'; -import { Factory } from './factory.js'; -import { Font, FontStyle, FontWeight } from './font.js'; -import { Formatter } from './formatter.js'; -import { Fraction } from './fraction.js'; -import { FretHandFinger } from './frethandfinger.js'; -import { GhostNote } from './ghostnote.js'; -import { Glyph } from './glyph.js'; -import { GlyphNote } from './glyphnote.js'; -import { GraceNote } from './gracenote.js'; -import { GraceNoteGroup } from './gracenotegroup.js'; -import { GraceTabNote } from './gracetabnote.js'; -import { KeyManager } from './keymanager.js'; -import { KeySignature } from './keysignature.js'; -import { KeySigNote } from './keysignote.js'; -import { Modifier, ModifierPosition } from './modifier.js'; -import { ModifierContext } from './modifiercontext.js'; -import { MultiMeasureRest } from './multimeasurerest.js'; -import { Music } from './music.js'; -import { Note } from './note.js'; -import { NoteHead } from './notehead.js'; -import { NoteSubGroup } from './notesubgroup.js'; -import { Ornament } from './ornament.js'; -import { Parenthesis } from './parenthesis.js'; -import { Parser } from './parser.js'; -import { PedalMarking } from './pedalmarking.js'; -import { Registry } from './registry.js'; -import { RenderContext } from './rendercontext.js'; -import { Renderer, RendererBackends, RendererLineEndType } from './renderer.js'; -import { RepeatNote } from './repeatnote.js'; -import { Stave } from './stave.js'; -import { Barline, BarlineType } from './stavebarline.js'; -import { StaveConnector } from './staveconnector.js'; -import { StaveHairpin } from './stavehairpin.js'; -import { StaveLine } from './staveline.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { StaveNote } from './stavenote.js'; -import { Repetition } from './staverepetition.js'; -import { StaveTempo } from './stavetempo.js'; -import { StaveText } from './stavetext.js'; -import { StaveTie } from './stavetie.js'; -import { Volta, VoltaType } from './stavevolta.js'; -import { Stem } from './stem.js'; -import { StringNumber } from './stringnumber.js'; -import { Stroke } from './strokes.js'; -import { SVGContext } from './svgcontext.js'; -import { System } from './system.js'; -import { Tables } from './tables.js'; -import { TabNote } from './tabnote.js'; -import { TabSlide } from './tabslide.js'; -import { TabStave } from './tabstave.js'; -import { TabTie } from './tabtie.js'; -import { TextBracket, TextBracketPosition } from './textbracket.js'; -import { TextDynamics } from './textdynamics.js'; -import { TextFormatter } from './textformatter.js'; -import { TextJustification, TextNote } from './textnote.js'; -import { TickContext } from './tickcontext.js'; -import { TimeSignature } from './timesignature.js'; -import { TimeSigNote } from './timesignote.js'; -import { Tremolo } from './tremolo.js'; -import { Tuning } from './tuning.js'; -import { Tuplet } from './tuplet.js'; -import { DATE, ID, VERSION } from './version.js'; -import { Vibrato } from './vibrato.js'; -import { VibratoBracket } from './vibratobracket.js'; -import { Voice, VoiceMode } from './voice.js'; -export class Flow { - static get BUILD() { - return { - VERSION: VERSION, - ID: ID, - DATE: DATE, - }; - } - static setMusicFont(...fontNames) { - const fonts = fontNames.map((fontName) => Font.load(fontName)); - Tables.MUSIC_FONT_STACK = fonts; - Glyph.MUSIC_FONT_STACK = fonts.slice(); - Glyph.CURRENT_CACHE_KEY = fontNames.join(','); - return fonts; - } - static fetchMusicFont(fontName, fontModuleOrPath) { - return __awaiter(this, void 0, void 0, function* () { - }); - } - static getMusicFont() { - const fonts = Tables.MUSIC_FONT_STACK; - return fonts.map((font) => font.getName()); - } - static get RENDER_PRECISION_PLACES() { - return Tables.RENDER_PRECISION_PLACES; - } - static set RENDER_PRECISION_PLACES(precision) { - Tables.RENDER_PRECISION_PLACES = precision; - } - static get SOFTMAX_FACTOR() { - return Tables.SOFTMAX_FACTOR; - } - static set SOFTMAX_FACTOR(factor) { - Tables.SOFTMAX_FACTOR = factor; - } - static get NOTATION_FONT_SCALE() { - return Tables.NOTATION_FONT_SCALE; - } - static set NOTATION_FONT_SCALE(value) { - Tables.NOTATION_FONT_SCALE = value; - } - static get TABLATURE_FONT_SCALE() { - return Tables.TABLATURE_FONT_SCALE; - } - static set TABLATURE_FONT_SCALE(value) { - Tables.TABLATURE_FONT_SCALE = value; - } - static get RESOLUTION() { - return Tables.RESOLUTION; - } - static set RESOLUTION(value) { - Tables.RESOLUTION = value; - } - static get SLASH_NOTEHEAD_WIDTH() { - return Tables.SLASH_NOTEHEAD_WIDTH; - } - static set SLASH_NOTEHEAD_WIDTH(value) { - Tables.SLASH_NOTEHEAD_WIDTH = value; - } - static get STAVE_LINE_DISTANCE() { - return Tables.STAVE_LINE_DISTANCE; - } - static set STAVE_LINE_DISTANCE(value) { - Tables.STAVE_LINE_DISTANCE = value; - } - static get STAVE_LINE_THICKNESS() { - return Tables.STAVE_LINE_THICKNESS; - } - static set STAVE_LINE_THICKNESS(value) { - Tables.STAVE_LINE_THICKNESS = value; - } - static get STEM_HEIGHT() { - return Tables.STEM_HEIGHT; - } - static set STEM_HEIGHT(value) { - Tables.STEM_HEIGHT = value; - } - static get STEM_WIDTH() { - return Tables.STEM_WIDTH; - } - static set STEM_WIDTH(value) { - Tables.STEM_WIDTH = value; - } - static get TIME4_4() { - return Tables.TIME4_4; - } - static get accidentalMap() { - return Tables.accidentalMap; - } - static get unicode() { - return Tables.unicode; - } - static keySignature(spec) { - return Tables.keySignature(spec); - } - static hasKeySignature(spec) { - return Tables.hasKeySignature(spec); - } - static getKeySignatures() { - return Tables.getKeySignatures(); - } - static clefProperties(clef) { - return Tables.clefProperties(clef); - } - static keyProperties(key, clef, params) { - return Tables.keyProperties(key, clef, params); - } - static durationToTicks(duration) { - return Tables.durationToTicks(duration); - } -} -Flow.Accidental = Accidental; -Flow.Annotation = Annotation; -Flow.Articulation = Articulation; -Flow.Barline = Barline; -Flow.BarNote = BarNote; -Flow.Beam = Beam; -Flow.Bend = Bend; -Flow.BoundingBox = BoundingBox; -Flow.BoundingBoxComputation = BoundingBoxComputation; -Flow.CanvasContext = CanvasContext; -Flow.ChordSymbol = ChordSymbol; -Flow.Clef = Clef; -Flow.ClefNote = ClefNote; -Flow.Crescendo = Crescendo; -Flow.Curve = Curve; -Flow.Dot = Dot; -Flow.EasyScore = EasyScore; -Flow.Element = Element; -Flow.Factory = Factory; -Flow.Font = Font; -Flow.Formatter = Formatter; -Flow.Fraction = Fraction; -Flow.FretHandFinger = FretHandFinger; -Flow.GhostNote = GhostNote; -Flow.Glyph = Glyph; -Flow.GlyphNote = GlyphNote; -Flow.GraceNote = GraceNote; -Flow.GraceNoteGroup = GraceNoteGroup; -Flow.GraceTabNote = GraceTabNote; -Flow.KeyManager = KeyManager; -Flow.KeySignature = KeySignature; -Flow.KeySigNote = KeySigNote; -Flow.Modifier = Modifier; -Flow.ModifierContext = ModifierContext; -Flow.MultiMeasureRest = MultiMeasureRest; -Flow.Music = Music; -Flow.Note = Note; -Flow.NoteHead = NoteHead; -Flow.NoteSubGroup = NoteSubGroup; -Flow.Ornament = Ornament; -Flow.Parenthesis = Parenthesis; -Flow.Parser = Parser; -Flow.PedalMarking = PedalMarking; -Flow.Registry = Registry; -Flow.RenderContext = RenderContext; -Flow.Renderer = Renderer; -Flow.RepeatNote = RepeatNote; -Flow.Repetition = Repetition; -Flow.Stave = Stave; -Flow.StaveConnector = StaveConnector; -Flow.StaveHairpin = StaveHairpin; -Flow.StaveLine = StaveLine; -Flow.StaveModifier = StaveModifier; -Flow.StaveNote = StaveNote; -Flow.StaveTempo = StaveTempo; -Flow.StaveText = StaveText; -Flow.StaveTie = StaveTie; -Flow.Stem = Stem; -Flow.StringNumber = StringNumber; -Flow.Stroke = Stroke; -Flow.SVGContext = SVGContext; -Flow.System = System; -Flow.TabNote = TabNote; -Flow.TabSlide = TabSlide; -Flow.TabStave = TabStave; -Flow.TabTie = TabTie; -Flow.TextBracket = TextBracket; -Flow.TextDynamics = TextDynamics; -Flow.TextFormatter = TextFormatter; -Flow.TextNote = TextNote; -Flow.TickContext = TickContext; -Flow.TimeSignature = TimeSignature; -Flow.TimeSigNote = TimeSigNote; -Flow.Tremolo = Tremolo; -Flow.Tuning = Tuning; -Flow.Tuplet = Tuplet; -Flow.Vibrato = Vibrato; -Flow.VibratoBracket = VibratoBracket; -Flow.Voice = Voice; -Flow.Volta = Volta; -Flow.AnnotationHorizontalJustify = AnnotationHorizontalJustify; -Flow.AnnotationVerticalJustify = AnnotationVerticalJustify; -Flow.ChordSymbolHorizontalJustify = ChordSymbolHorizontalJustify; -Flow.ChordSymbolVerticalJustify = ChordSymbolVerticalJustify; -Flow.SymbolTypes = SymbolTypes; -Flow.SymbolModifiers = SymbolModifiers; -Flow.CurvePosition = CurvePosition; -Flow.FontWeight = FontWeight; -Flow.FontStyle = FontStyle; -Flow.ModifierPosition = ModifierPosition; -Flow.RendererBackends = RendererBackends; -Flow.RendererLineEndType = RendererLineEndType; -Flow.BarlineType = BarlineType; -Flow.StaveModifierPosition = StaveModifierPosition; -Flow.VoltaType = VoltaType; -Flow.TextBracketPosition = TextBracketPosition; -Flow.TextJustification = TextJustification; -Flow.VoiceMode = VoiceMode; diff --git a/build/esm/src/font.js b/build/esm/src/font.js deleted file mode 100644 index 30690740ac..0000000000 --- a/build/esm/src/font.js +++ /dev/null @@ -1,262 +0,0 @@ -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -import { defined } from './util.js'; -export var FontWeight; -(function (FontWeight) { - FontWeight["NORMAL"] = "normal"; - FontWeight["BOLD"] = "bold"; -})(FontWeight || (FontWeight = {})); -export var FontStyle; -(function (FontStyle) { - FontStyle["NORMAL"] = "normal"; - FontStyle["ITALIC"] = "italic"; -})(FontStyle || (FontStyle = {})); -let fontParser; -const Fonts = {}; -export class Font { - static convertSizeToPixelValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - return fontSize * Font.scaleToPxFrom.pt; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); - const conversionFactor = (_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1; - return value * conversionFactor; - } - } - static convertSizeToPointValue(fontSize = Font.SIZE) { - var _a; - if (typeof fontSize === 'number') { - return fontSize; - } - else { - const value = parseFloat(fontSize); - if (isNaN(value)) { - return 0; - } - const unit = fontSize.replace(/[\d.\s]/g, '').toLowerCase(); - const conversionFactor = ((_a = Font.scaleToPxFrom[unit]) !== null && _a !== void 0 ? _a : 1) / Font.scaleToPxFrom.pt; - return value * conversionFactor; - } - } - static validate(f, size, weight, style) { - if (typeof f === 'string' && size === undefined && weight === undefined && style === undefined) { - return Font.fromCSSString(f); - } - let family; - if (typeof f === 'object') { - family = f.family; - size = f.size; - weight = f.weight; - style = f.style; - } - else { - family = f; - } - family = family !== null && family !== void 0 ? family : Font.SANS_SERIF; - size = size !== null && size !== void 0 ? size : Font.SIZE + 'pt'; - weight = weight !== null && weight !== void 0 ? weight : FontWeight.NORMAL; - style = style !== null && style !== void 0 ? style : FontStyle.NORMAL; - if (weight === '') { - weight = FontWeight.NORMAL; - } - if (style === '') { - style = FontStyle.NORMAL; - } - if (typeof size === 'number') { - size = `${size}pt`; - } - if (typeof weight === 'number') { - weight = weight.toString(); - } - return { family, size, weight, style }; - } - static fromCSSString(cssFontShorthand) { - if (!fontParser) { - fontParser = document.createElement('span'); - } - fontParser.style.font = cssFontShorthand; - const { fontFamily, fontSize, fontWeight, fontStyle } = fontParser.style; - return { family: fontFamily, size: fontSize, weight: fontWeight, style: fontStyle }; - } - static toCSSString(fontInfo) { - var _a; - if (!fontInfo) { - return ''; - } - let style; - const st = fontInfo.style; - if (st === FontStyle.NORMAL || st === '' || st === undefined) { - style = ''; - } - else { - style = st.trim() + ' '; - } - let weight; - const wt = fontInfo.weight; - if (wt === FontWeight.NORMAL || wt === '' || wt === undefined) { - weight = ''; - } - else if (typeof wt === 'number') { - weight = wt + ' '; - } - else { - weight = wt.trim() + ' '; - } - let size; - const sz = fontInfo.size; - if (sz === undefined) { - size = Font.SIZE + 'pt '; - } - else if (typeof sz === 'number') { - size = sz + 'pt '; - } - else { - size = sz.trim() + ' '; - } - const family = (_a = fontInfo.family) !== null && _a !== void 0 ? _a : Font.SANS_SERIF; - return `${style}${weight}${size}${family}`; - } - static scaleSize(fontSize, scaleFactor) { - if (typeof fontSize === 'number') { - return (fontSize * scaleFactor); - } - else { - const value = parseFloat(fontSize); - const unit = fontSize.replace(/[\d.\s]/g, ''); - return `${value * scaleFactor}${unit}`; - } - } - static isBold(weight) { - if (!weight) { - return false; - } - else if (typeof weight === 'number') { - return weight >= 600; - } - else { - const parsedWeight = parseInt(weight, 10); - if (isNaN(parsedWeight)) { - return weight.toLowerCase() === 'bold'; - } - else { - return parsedWeight >= 600; - } - } - } - static isItalic(style) { - if (!style) { - return false; - } - else { - return style.toLowerCase() === FontStyle.ITALIC; - } - } - static loadWebFont(fontName, woffURL, includeWoff2 = true) { - return __awaiter(this, void 0, void 0, function* () { - const woff2URL = includeWoff2 ? `url(${woffURL}2) format('woff2'), ` : ''; - const woff1URL = `url(${woffURL}) format('woff')`; - const woffURLs = woff2URL + woff1URL; - const fontFace = new FontFace(fontName, woffURLs); - yield fontFace.load(); - document.fonts.add(fontFace); - return fontFace; - }); - } - static loadWebFonts() { - return __awaiter(this, void 0, void 0, function* () { - const host = Font.WEB_FONT_HOST; - const files = Font.WEB_FONT_FILES; - for (const fontName in files) { - const fontPath = files[fontName]; - Font.loadWebFont(fontName, host + fontPath); - } - }); - } - static load(fontName, data, metrics) { - let font = Fonts[fontName]; - if (!font) { - font = new Font(fontName); - Fonts[fontName] = font; - } - if (data) { - font.setData(data); - } - if (metrics) { - font.setMetrics(metrics); - } - return font; - } - constructor(fontName) { - this.name = fontName; - } - getName() { - return this.name; - } - getData() { - return defined(this.data, 'FontError', 'Missing font data'); - } - getMetrics() { - return defined(this.metrics, 'FontError', 'Missing metrics'); - } - setData(data) { - this.data = data; - } - setMetrics(metrics) { - this.metrics = metrics; - } - hasData() { - return this.data !== undefined; - } - getResolution() { - return this.getData().resolution; - } - getGlyphs() { - return this.getData().glyphs; - } - lookupMetric(key, defaultValue) { - const keyParts = key.split('.'); - let currObj = this.getMetrics(); - for (let i = 0; i < keyParts.length; i++) { - const keyPart = keyParts[i]; - const value = currObj[keyPart]; - if (value === undefined) { - return defaultValue; - } - currObj = value; - } - return currObj; - } - toString() { - return '[' + this.name + ' Font]'; - } -} -Font.SANS_SERIF = 'Arial, sans-serif'; -Font.SERIF = 'Times New Roman, serif'; -Font.SIZE = 10; -Font.scaleToPxFrom = { - pt: 4 / 3, - px: 1, - em: 16, - '%': 4 / 25, - in: 96, - mm: 96 / 25.4, - cm: 96 / 2.54, -}; -Font.WEB_FONT_HOST = 'https://unpkg.com/vexflow-fonts@1.0.3/'; -Font.WEB_FONT_FILES = { - 'Roboto Slab': 'robotoslab/RobotoSlab-Medium_2.001.woff', - PetalumaScript: 'petaluma/PetalumaScript_1.10_FS.woff', -}; diff --git a/build/esm/src/fonts/bravura_glyphs.js b/build/esm/src/fonts/bravura_glyphs.js deleted file mode 100644 index b5674d36ea..0000000000 --- a/build/esm/src/fonts/bravura_glyphs.js +++ /dev/null @@ -1,3535 +0,0 @@ -export const BravuraFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 469, - y_min: 0, - y_max: 295, - ha: 295, - o: 'm 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z', - }, - bracketBottom: { - x_min: 0, - x_max: 469, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 l 0 0 z', - }, - barlineTick: { - x_min: 0, - x_max: 36, - y_min: 868, - y_max: 1120, - ha: 252, - o: 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 500, - y_min: 0, - y_max: 502, - ha: 502, - o: 'm 9 367 b 0 374 6 372 3 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 z', - }, - segno: { - x_min: 4, - x_max: 550, - y_min: -27, - y_max: 759, - ha: 786, - o: 'm 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 621 75 704 120 670 82 l 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 z m 598 671 b 680 589 598 626 635 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 z m 202 380 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 b 202 380 166 298 202 334 z', - }, - coda: { - x_min: -4, - x_max: 955, - y_min: -158, - y_max: 898, - ha: 1056, - o: 'm 1349 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 660 1002 l 660 576 l 455 576 b 660 1002 455 809 455 985 z m 455 507 l 660 507 l 660 69 b 455 507 474 91 456 285 z m 729 69 l 729 507 l 940 507 b 729 69 936 287 909 91 z', - }, - gClef: { - x_min: 0, - x_max: 671, - y_min: -658, - y_max: 1098, - ha: 1756, - o: 'm 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 z m 619 148 b 635 168 616 166 618 170 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 z', - }, - cClef: { - x_min: 0, - x_max: 699, - y_min: -506, - y_max: 506, - ha: 1012, - o: 'm 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 l 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 z m 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 z', - }, - fClef: { - x_min: -5, - x_max: 684, - y_min: -635, - y_max: 262, - ha: 897, - o: 'm 363 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 z m 906 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 z m 907 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 382, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 230 -338 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 l 210 -360 b 230 -338 222 -360 230 -350 z m 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 z', - }, - '6stringTabClef': { - x_min: -3, - x_max: 408, - y_min: -748, - y_max: 764, - ha: 1512, - o: 'm 557 1024 l 557 1100 l 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 z m 588 -328 l 350 348 l 238 348 l -4 -328 l 88 -328 l 160 -125 l 420 -125 l 491 -328 z m 397 -52 l 181 -52 l 292 256 z m 544 -883 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 l 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 z m 428 -583 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 l 292 -475 b 428 -583 389 -475 428 -514 z m 458 -884 b 337 -1001 458 -949 418 -1001 l 125 -1001 l 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 z', - }, - timeSig0: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 648 0 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 b 648 0 510 -360 648 -199 z m 338 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 b 338 317 230 180 278 317 z', - }, - timeSig1: { - x_min: 20, - x_max: 314, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 35 19 b 29 0 35 19 29 10 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 z', - }, - timeSig2: { - x_min: 20, - x_max: 426, - y_min: -257, - y_max: 254, - ha: 511, - o: 'm 606 -131 b 589 -111 606 -114 599 -111 b 570 -127 577 -111 573 -117 l 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -317 114 -153 58 -223 l 32 -321 b 69 -370 32 -340 48 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 z', - }, - timeSig3: { - x_min: 20, - x_max: 401, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 307 357 b 301 357 305 357 304 357 l 291 359 b 285 359 289 359 287 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 z', - }, - timeSig4: { - x_min: 20, - x_max: 450, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 336 246 -9 477 318 l 482 340 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 35 -118 35 -117 35 -118 l 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 z', - }, - timeSig5: { - x_min: 20, - x_max: 383, - y_min: -251, - y_max: 246, - ha: 497, - o: 'm 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 z', - }, - timeSig6: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 439 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z', - }, - timeSig7: { - x_min: 20, - x_max: 421, - y_min: -250, - y_max: 249, - ha: 499, - o: 'm 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 l 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 z', - }, - timeSig8: { - x_min: 20, - x_max: 416, - y_min: -259, - y_max: 259, - ha: 518, - o: 'm 481 52 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 z m 406 85 b 168 240 291 125 168 150 b 314 331 168 301 251 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 z m 295 -325 b 111 -183 199 -325 111 -276 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 z', - }, - timeSig9: { - x_min: 20, - x_max: 414, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 186 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 z m 305 0 b 220 161 259 0 220 72 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 z', - }, - timeSigCommon: { - x_min: 5, - x_max: 424, - y_min: -249, - y_max: 251, - ha: 500, - o: 'm 336 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 418, - y_min: -359, - y_max: 361, - ha: 720, - o: 'm 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 z m 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 b 236 262 233 262 235 262 b 252 239 243 262 252 251 z', - }, - timeSigPlus: { - x_min: -1, - x_max: 499, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 432 53 b 413 79 420 53 413 65 l 413 340 b 392 360 413 350 405 360 l 325 360 b 305 340 312 360 305 350 l 305 79 b 284 53 305 66 292 53 l 19 53 b -1 33 9 53 -1 46 l -1 -33 b 19 -55 -1 -46 9 -55 l 284 -55 b 305 -75 298 -55 305 -68 l 305 -340 b 325 -360 305 -350 312 -360 l 392 -360 b 413 -340 405 -360 413 -350 l 413 -78 b 433 -55 413 -63 423 -55 l 698 -55 b 719 -33 708 -55 719 -46 l 719 33 b 698 53 719 46 708 53 z', - }, - timeSigPlusSmall: { - x_min: -1, - x_max: 255, - y_min: -133, - y_max: 123, - ha: 256, - o: 'm 220 20 b 210 33 215 20 210 26 l 210 166 b 200 177 210 171 206 177 l 166 177 b 156 166 160 177 156 171 l 156 33 b 145 20 156 27 150 20 l 10 20 b -1 10 4 20 -1 16 l -1 -24 b 10 -35 -1 -30 4 -35 l 145 -35 b 156 -46 153 -35 156 -42 l 156 -180 b 166 -192 156 -186 160 -192 l 200 -192 b 210 -180 206 -192 210 -186 l 210 -48 b 222 -35 210 -39 216 -35 l 356 -35 b 367 -24 361 -35 367 -30 l 367 10 b 356 20 367 16 361 20 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 448, - y_min: -35, - y_max: 40, - ha: 75, - o: 'm 645 39 b 619 58 645 49 634 58 l 27 58 b 0 39 12 58 0 49 l 0 -32 b 27 -50 0 -42 12 -50 l 619 -50 b 645 -32 634 -50 645 -42 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 0 -696 b 3 -704 0 -698 1 -704 b 7 -703 4 -704 6 -704 b 265 1 187 -530 265 -282 b 12 701 265 289 187 531 b 4 707 12 701 6 707 b 0 696 1 707 0 703 l 0 665 b 4 644 0 665 0 651 b 167 1 112 503 167 315 b 6 -641 167 -311 109 -497 b 0 -658 3 -644 0 -651 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 0 -356 b 3 -361 0 -357 1 -361 b 158 0 112 -272 158 -145 b 4 359 158 147 109 272 b 0 353 3 359 0 357 l 0 338 b 3 327 0 338 0 330 b 91 0 60 246 91 160 b 4 -328 91 -160 62 -249 b 0 -337 3 -330 0 -333 z', - }, - timeSigParensLeft: { - x_min: 0, - x_max: 184, - y_min: -489, - y_max: 491, - ha: 980, - o: 'm 265 -658 b 259 -641 265 -651 262 -644 b 98 1 156 -497 98 -311 b 261 644 98 315 153 503 b 265 665 265 651 265 665 l 265 696 b 261 707 265 703 264 707 b 253 701 259 707 253 701 b 0 1 78 531 0 289 b 258 -703 0 -282 78 -530 b 262 -704 259 -704 261 -704 b 265 -696 264 -704 265 -698 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 110, - y_min: -251, - y_max: 249, - ha: 500, - o: 'm 158 -337 b 154 -328 158 -333 156 -330 b 68 0 96 -249 68 -160 b 156 327 68 160 98 246 b 158 338 158 330 158 338 l 158 353 b 154 359 158 357 156 359 b 0 0 49 272 0 147 b 156 -361 0 -145 46 -272 b 158 -356 157 -361 158 -357 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 599, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 96 223 b 82 212 88 223 82 217 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 z m 747 223 b 733 212 740 223 733 217 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 z m 829 223 b 815 212 824 223 815 217 l 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 z m 438 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 b 733 1 657 -180 733 -98 b 438 180 733 104 572 180 z m 469 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 422, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 311 180 b 0 3 120 180 0 101 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 z m 160 91 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 b 160 91 156 68 157 79 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 108 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 295, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 140 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 b 140 -180 0 -135 62 -180 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 546, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 43 213 b 30 223 43 217 39 223 l 13 223 b 0 213 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 43 -215 39 -223 43 -219 z m 704 213 b 693 223 704 217 698 223 l 672 223 b 660 213 667 223 660 217 l 660 163 b 634 180 655 173 645 180 l 505 180 b 484 173 498 180 490 177 l 393 95 l 300 173 b 279 180 294 177 287 180 l 151 180 b 125 163 141 180 130 173 l 125 213 b 112 223 125 217 118 223 l 94 223 b 82 213 86 223 82 217 l 82 -215 b 94 -223 82 -219 86 -223 l 112 -223 b 125 -215 118 -223 125 -219 l 125 -163 b 151 -180 130 -173 140 -180 l 279 -180 b 300 -171 287 -180 294 -177 l 393 -95 l 485 -171 b 505 -180 491 -177 498 -180 l 632 -180 b 660 -163 645 -180 655 -173 l 660 -215 b 672 -223 660 -219 667 -223 l 693 -223 b 704 -215 698 -223 704 -219 z m 786 213 b 772 223 786 217 780 223 l 755 223 b 740 213 747 223 740 217 l 740 -215 b 755 -223 740 -219 747 -223 l 772 -223 b 786 -215 780 -223 786 -219 z m 507 -141 l 393 -45 l 276 -141 l 207 -141 l 364 0 l 207 141 l 276 141 l 393 45 l 507 141 l 577 141 l 420 0 l 577 -141 z m 660 -132 l 518 0 l 660 132 z m 125 131 l 266 0 l 125 -131 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 377, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 z m 386 -141 l 272 -45 l 157 -141 l 88 -141 l 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 334, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 z m 36 148 l 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 290, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 410 -143 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 422, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 576 223 b 563 213 570 223 563 219 l 563 -215 b 576 -223 563 -219 570 -223 l 595 -223 b 608 -215 602 -223 608 -219 l 608 213 b 595 223 608 219 602 223 z m 497 223 b 484 213 491 223 484 219 l 484 -215 b 497 -223 484 -219 491 -223 l 516 -223 b 528 -215 523 -223 528 -219 l 528 213 b 516 223 528 219 523 223 z m 94 223 b 81 213 86 223 81 219 l 81 -215 b 94 -223 81 -219 86 -223 l 111 -223 b 124 -215 118 -223 124 -219 l 124 213 b 111 223 124 219 118 223 z m 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -219 6 -223 l 30 -223 b 45 -215 37 -223 45 -219 l 45 213 b 30 223 45 219 37 223 z m 304 180 b 127 0 206 180 127 101 b 304 -180 127 -99 206 -180 b 482 0 405 -180 482 -99 b 304 180 482 101 405 180 z m 305 32 l 225 112 b 304 140 248 130 275 140 b 387 112 336 140 364 130 z m 278 1 l 193 -82 b 216 0 199 -59 216 -30 b 194 85 216 33 203 50 z m 334 1 l 418 84 b 389 0 402 50 389 23 b 418 -81 389 -30 409 -60 z m 305 -27 l 389 -109 b 304 -138 364 -128 336 -138 b 222 -109 274 -138 246 -128 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 101 278 180 z m 180 32 l 99 112 b 179 140 121 130 150 140 b 262 112 210 140 238 130 z m 151 1 l 68 -82 b 86 0 73 -59 86 -30 b 68 85 86 33 78 50 z m 209 1 l 291 84 b 269 0 276 50 269 32 b 291 -79 269 -26 282 -58 z m 180 -27 l 264 -111 b 179 -138 239 -128 210 -138 b 96 -111 148 -138 120 -128 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 101 b 179 -180 0 -99 81 -180 b 360 0 278 -180 360 -99 b 179 180 360 101 278 180 z m 186 37 l 131 92 b 220 124 153 109 189 124 b 262 112 236 124 249 121 z m 215 7 l 291 84 b 304 42 300 71 304 58 b 271 -49 304 10 288 -26 z m 145 -6 l 68 -82 b 56 -42 59 -71 56 -58 b 89 52 56 -9 72 27 z m 174 -33 l 230 -89 b 140 -124 206 -108 171 -124 b 96 -111 122 -124 109 -121 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 249, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 179 180 b 0 0 81 180 0 99 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 z m 261 112 l 180 30 l 98 112 b 179 138 121 128 148 138 b 261 112 210 138 238 128 z m 317 0 b 292 -82 317 -30 308 -59 l 209 1 l 291 84 b 317 0 307 60 317 30 z m 40 0 b 69 84 40 32 50 60 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 z m 95 -111 l 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 603, - y_min: -218, - y_max: 213, - ha: 431, - o: 'm 770 223 l 752 223 b 737 213 744 223 737 219 l 737 59 b 435 307 710 203 582 307 b 128 48 281 307 156 197 l 128 213 b 115 223 128 219 122 223 l 96 223 b 84 213 89 223 84 219 l 84 -215 b 96 -223 84 -220 89 -223 l 115 -223 b 128 -215 122 -223 128 -220 l 128 -56 b 435 -314 156 -206 282 -314 b 654 -223 517 -314 595 -282 b 737 -66 697 -180 726 -125 l 737 -215 b 752 -223 737 -220 744 -223 l 770 -223 b 785 -215 778 -223 785 -220 l 785 213 b 770 223 785 219 778 223 z m 435 274 b 698 85 556 274 661 194 b 439 180 641 143 534 180 b 176 99 320 180 228 148 b 435 274 217 203 318 274 z m 32 223 l 13 223 b 0 213 6 223 0 219 l 0 -215 b 13 -223 0 -220 6 -223 l 32 -223 b 45 -215 40 -223 45 -220 l 45 213 b 32 223 45 219 40 223 z m 852 223 l 835 223 b 819 213 828 223 819 219 l 819 -215 b 835 -223 819 -220 828 -223 l 852 -223 b 868 -215 861 -223 868 -220 l 868 213 b 852 223 868 219 861 223 z m 580 -46 b 514 -143 580 -91 562 -131 b 472 -148 501 -147 487 -148 b 364 -105 433 -148 395 -131 l 334 -73 b 285 58 307 -39 285 10 b 289 91 285 69 287 79 b 403 145 305 140 357 145 b 580 -46 501 145 580 42 z m 435 -282 b 176 -108 318 -282 217 -209 b 425 -180 222 -151 301 -180 b 691 -109 563 -180 647 -153 b 435 -282 651 -210 550 -282 z', - }, - noteheadCircledWhole: { - x_min: 0, - x_max: 437, - y_min: -225, - y_max: 211, - ha: 436, - o: 'm 314 304 b 0 -10 140 304 0 164 b 314 -324 0 -183 141 -324 b 629 -10 487 -324 629 -183 b 314 304 629 164 488 304 z m 314 275 b 588 73 441 275 549 193 b 321 180 536 137 420 180 b 48 88 190 180 95 143 b 314 275 85 199 199 275 z m 393 -141 b 350 -147 379 -145 364 -147 b 314 -141 337 -147 325 -145 b 167 55 235 -120 167 -26 b 173 91 167 66 168 79 b 284 145 187 138 239 145 b 459 -48 382 145 459 39 b 393 -141 459 -91 438 -131 z m 314 -294 b 40 -86 187 -294 75 -207 b 305 -180 81 -141 164 -180 b 588 -86 464 -180 550 -143 b 314 -294 554 -209 442 -294 z', - }, - noteheadCircledHalf: { - x_min: -18, - x_max: 311, - y_min: -162, - y_max: 167, - ha: 329, - o: 'm 212 240 b -26 3 81 240 -26 134 b 212 -233 -26 -127 81 -233 b 448 3 341 -233 448 -127 b 212 240 448 134 341 240 z m 212 220 b 363 160 271 220 324 197 b 281 180 341 173 312 180 b 0 -52 76 180 6 26 b -6 3 -4 -35 -6 -16 b 212 220 -6 122 92 220 z m 50 -92 b 42 -63 46 -84 42 -73 b 173 63 42 -33 73 7 b 317 120 243 105 288 120 b 369 89 344 120 359 107 b 377 62 374 81 377 72 b 248 -66 377 33 348 -1 b 108 -125 183 -109 138 -125 b 50 -92 78 -125 60 -109 z m 212 -215 b 84 -171 164 -215 120 -199 b 138 -180 101 -179 120 -180 b 422 56 372 -180 420 7 b 429 3 426 40 429 22 b 212 -215 429 -117 333 -215 z', - }, - noteheadCircledBlack: { - x_min: -21, - x_max: 321, - y_min: -171, - y_max: 167, - ha: 338, - o: 'm 216 240 b -30 -3 82 240 -30 131 b 216 -246 -30 -137 82 -246 b 462 -3 351 -246 462 -137 b 216 240 462 131 351 240 z m 216 220 b 372 160 276 220 331 197 b 284 180 348 174 317 180 b 0 -59 127 180 0 65 l 0 -66 b -10 -3 -6 -45 -10 -24 b 216 220 -10 120 92 220 z m 216 -226 b 56 -158 153 -226 96 -200 b 140 -180 79 -171 107 -180 b 425 60 268 -180 425 -60 b 422 88 425 71 425 79 b 442 -3 435 60 442 29 b 216 -226 442 -125 341 -226 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 416, - y_min: -190, - y_max: 198, - ha: 388, - o: 'm 563 217 b 528 180 563 192 544 180 l 62 180 b 36 215 52 180 36 192 l 36 268 b 17 285 36 278 27 285 b 0 268 7 285 0 278 l 0 -255 b 17 -274 0 -264 7 -274 b 36 -255 27 -274 36 -264 l 36 -213 b 66 -180 36 -197 53 -180 l 528 -180 b 563 -209 549 -180 563 -196 l 563 -255 b 580 -274 563 -264 570 -274 b 599 -255 590 -274 599 -264 l 599 268 b 580 285 599 278 590 285 b 563 268 570 285 563 278 z m 36 23 b 111 71 36 55 58 71 l 487 71 b 563 30 533 71 563 53 l 563 -22 b 487 -68 563 -53 533 -68 l 117 -68 b 36 -22 66 -68 36 -49 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 313, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 451 -180 l 451 180 l 0 180 l 0 -180 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 219 690 223 l 662 223 b 648 213 655 223 648 219 l 648 -213 b 662 -223 648 -217 655 -223 l 681 -223 b 696 -213 690 -223 696 -217 z m 619 213 b 605 223 619 219 613 223 l 588 223 b 573 213 580 223 573 219 l 573 174 b 562 180 570 177 566 180 l 134 180 b 122 174 130 180 125 177 l 122 213 b 108 223 122 219 117 223 l 91 223 b 76 213 84 223 76 219 l 76 -213 b 91 -223 76 -217 84 -223 l 108 -223 b 122 -213 117 -223 122 -217 l 122 154 l 334 -173 b 346 -180 337 -177 341 -180 b 357 -173 351 -180 354 -177 l 573 154 l 573 -213 b 588 -223 573 -217 580 -223 l 605 -223 b 619 -213 613 -223 619 -217 z m 32 -223 b 46 -213 40 -223 46 -217 l 46 213 b 32 223 46 219 40 223 l 14 223 b 0 213 7 223 0 219 l 0 -213 b 14 -223 0 -217 7 -223 z m 428 98 b 346 -107 428 17 377 -53 b 265 96 315 -55 265 17 b 289 137 265 109 275 137 l 406 137 b 428 98 419 137 428 111 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 14 180 b 0 166 6 180 0 173 b 1 158 0 163 1 160 l 216 -173 b 228 -180 219 -177 225 -180 b 239 -173 233 -180 238 -177 l 458 158 b 459 166 458 160 459 163 b 445 180 459 173 454 180 z m 288 137 b 310 98 301 137 310 111 b 228 -108 310 17 259 -55 b 145 96 197 -56 145 17 b 170 137 145 109 157 137 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 196 -180 b 209 -173 200 -180 206 -177 l 408 157 b 410 166 409 160 410 163 b 396 180 410 173 403 180 l 14 180 b 0 166 4 180 0 173 b 1 158 0 163 0 161 l 183 -173 b 196 -180 184 -174 190 -180 z m 164 138 l 295 138 l 179 -76 l 114 37 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 292, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 207 -180 l 420 180 l 0 180 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 483, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 696 213 b 681 223 696 217 690 223 l 662 223 b 648 213 655 223 648 217 l 648 -213 b 662 -223 648 -219 655 -223 l 681 -223 b 696 -213 690 -223 696 -219 z m 619 213 b 605 223 619 217 613 223 l 588 223 b 573 213 580 223 573 217 l 573 -154 l 357 173 b 346 180 354 177 351 180 b 334 173 341 180 337 177 l 122 -154 l 122 213 b 108 223 122 217 117 223 l 91 223 b 76 213 84 223 76 217 l 76 -213 b 91 -223 76 -219 84 -223 l 108 -223 b 122 -213 117 -223 122 -219 l 122 -174 b 134 -180 125 -177 130 -180 l 562 -180 b 573 -174 566 -180 570 -177 l 573 -213 b 588 -223 573 -219 580 -223 l 605 -223 b 619 -213 613 -223 619 -219 z m 32 223 l 14 223 b 0 213 7 223 0 217 l 0 -213 b 14 -223 0 -219 7 -223 l 32 -223 b 46 -213 40 -223 46 -219 l 46 213 b 32 223 46 217 40 223 z m 428 -98 b 406 -137 428 -111 419 -137 l 289 -137 b 265 -96 275 -137 265 -109 b 346 107 265 -17 315 55 b 428 -98 377 53 428 -17 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 319, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 6 -180 z m 170 -137 b 145 -96 157 -137 145 -109 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 285, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 215 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 z m 246 -138 l 115 -138 l 232 76 l 297 -37 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 293, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 422 -180 l 207 180 l 0 -180 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 596, - y_min: -179, - y_max: 168, - ha: 347, - o: 'm 618 135 l 697 206 b 704 222 703 210 704 216 b 698 236 704 226 703 232 b 683 242 694 239 688 242 b 670 238 677 242 674 240 l 575 153 b 435 180 531 168 481 180 b 128 0 246 180 128 98 b 236 -148 128 -58 160 -114 l 153 -222 b 145 -238 148 -226 145 -232 b 151 -252 145 -242 148 -248 b 167 -258 156 -256 161 -258 b 181 -253 171 -258 177 -256 l 282 -164 b 420 -180 320 -173 366 -180 b 729 0 654 -180 729 -98 b 618 135 729 55 681 104 z m 114 223 l 95 223 b 82 212 88 223 82 217 l 82 -215 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -215 121 -223 127 -219 l 127 212 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 212 6 223 0 217 l 0 -215 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -215 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 212 819 223 811 217 l 811 -215 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -215 851 -223 858 -219 l 858 212 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 212 736 223 730 217 l 730 -215 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -215 769 -223 776 -219 l 776 212 b 763 223 776 217 769 223 z m 282 56 b 285 89 282 68 284 79 b 399 144 301 137 354 144 b 510 95 441 144 480 124 l 327 -68 b 282 56 301 -35 282 13 z m 572 -72 b 508 -141 564 -108 544 -132 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 l 356 -98 l 537 63 b 575 -46 560 30 575 -9 b 572 -72 575 -55 573 -65 z', - }, - noteheadSlashedWhole1: { - x_min: -22, - x_max: 433, - y_min: -157, - y_max: 148, - ha: 305, - o: 'm 484 140 b 308 180 431 166 367 180 b 0 1 118 180 0 99 b 73 -128 0 -48 22 -95 l -22 -190 b -32 -206 -27 -194 -32 -200 b -27 -217 -32 -210 -30 -215 b -12 -226 -23 -223 -17 -226 b 0 -223 -7 -226 -4 -225 l 112 -150 b 294 -180 157 -168 217 -180 b 602 1 526 -180 602 -98 b 523 118 602 48 570 86 l 613 177 b 624 193 619 181 624 187 b 619 204 624 197 622 200 b 603 213 615 209 609 213 b 592 209 599 213 596 212 z m 190 -52 b 154 56 170 -20 154 19 b 160 91 154 68 156 79 b 271 147 174 138 226 147 b 396 82 321 147 364 121 z m 419 50 b 446 -48 436 19 446 -14 b 337 -147 446 -120 402 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 215 -84 226 -98 220 -91 z', - }, - noteheadSlashedHalf1: { - x_min: -67, - x_max: 386, - y_min: -142, - y_max: 160, - ha: 302, - o: 'm 552 222 b 536 230 549 228 543 230 b 524 228 533 230 528 230 l 389 140 b 281 180 364 164 327 180 b 0 -60 65 180 0 13 b 7 -105 0 -78 3 -92 l -88 -167 b -96 -184 -94 -171 -96 -177 b -94 -194 -96 -187 -95 -192 b -76 -204 -89 -202 -84 -204 b -66 -202 -73 -204 -69 -203 l 29 -140 b 137 -180 55 -167 92 -180 b 420 59 374 -180 420 13 b 412 107 420 76 419 92 l 546 194 b 556 210 552 197 556 204 b 552 222 556 213 554 217 z m 315 120 b 347 112 328 120 338 117 l 46 -82 b 42 -63 43 -76 42 -69 b 315 120 42 6 248 120 z m 108 -124 b 69 -114 91 -124 79 -120 l 372 81 b 376 63 374 75 376 69 b 108 -124 376 0 174 -124 z', - }, - noteheadSlashedBlack1: { - x_min: -80, - x_max: 375, - y_min: -165, - y_max: 167, - ha: 332, - o: 'm 518 240 b 507 236 514 240 510 239 l 384 148 b 284 180 359 168 324 180 b 0 -62 127 180 0 63 b 13 -115 0 -82 4 -99 l -107 -202 b -115 -217 -111 -204 -115 -212 b -111 -229 -115 -222 -114 -225 b -95 -238 -108 -235 -101 -238 b -84 -235 -91 -238 -86 -236 l 39 -148 b 140 -180 63 -170 99 -180 b 425 59 268 -180 425 -62 b 410 117 425 81 420 101 l 530 203 b 540 219 536 207 540 213 b 518 240 540 229 528 240 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 596, - y_min: -178, - y_max: 169, - ha: 347, - o: 'm 729 0 b 435 180 729 102 569 180 b 278 156 374 180 321 170 l 184 239 b 170 243 181 242 176 243 b 154 238 166 243 158 240 b 150 223 151 233 150 228 b 156 207 150 217 153 212 l 233 138 b 128 0 167 107 128 56 b 420 -180 128 -94 210 -180 b 575 -164 482 -180 533 -174 l 672 -252 b 687 -256 677 -255 681 -256 b 703 -251 691 -256 698 -255 b 707 -236 706 -246 707 -240 b 701 -220 707 -230 706 -225 l 619 -150 b 729 0 700 -117 729 -62 z m 114 223 l 95 223 b 82 213 88 223 82 217 l 82 -213 b 95 -223 82 -219 88 -223 l 114 -223 b 127 -213 121 -223 127 -219 l 127 213 b 114 223 127 217 121 223 z m 32 223 l 13 223 b 0 213 6 223 0 217 l 0 -213 b 13 -223 0 -219 6 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 213 b 32 223 45 217 39 223 z m 844 223 l 825 223 b 811 213 819 223 811 217 l 811 -213 b 825 -223 811 -219 819 -223 l 844 -223 b 858 -213 851 -223 858 -219 l 858 213 b 844 223 858 217 851 223 z m 763 223 l 743 223 b 730 213 736 223 730 217 l 730 -213 b 743 -223 730 -219 736 -223 l 763 -223 b 776 -213 769 -223 776 -219 l 776 213 b 763 223 776 217 769 223 z m 312 124 b 399 144 336 141 369 144 b 575 -46 495 144 575 40 b 563 -98 575 -65 570 -81 z m 508 -141 b 467 -147 495 -145 481 -147 b 360 -104 428 -147 389 -128 b 330 -72 350 -95 340 -82 b 282 56 304 -37 282 10 b 285 89 282 68 284 79 b 536 -130 287 89 304 75 z', - }, - noteheadSlashedWhole2: { - x_min: -18, - x_max: 436, - y_min: -154, - y_max: 151, - ha: 305, - o: 'm 531 -128 b 602 1 582 -96 602 -49 b 308 180 602 104 441 180 b 114 144 230 180 164 166 l 4 215 b -6 217 1 217 -3 217 b -22 209 -13 217 -19 215 b -26 197 -24 204 -26 200 b -16 181 -26 192 -22 184 l 75 121 b 0 1 27 91 0 49 b 294 -180 0 -94 82 -180 b 491 -150 379 -180 444 -168 l 598 -219 b 608 -222 600 -222 605 -222 b 624 -213 615 -222 621 -219 b 628 -202 626 -209 628 -206 b 618 -186 628 -196 624 -189 z m 168 108 b 271 147 190 141 233 147 b 446 -48 369 147 446 40 b 445 -72 446 -56 446 -63 z m 154 69 l 429 -109 b 382 -141 419 -125 402 -135 b 337 -147 367 -144 351 -147 b 301 -141 327 -147 314 -144 b 235 -104 276 -134 253 -120 b 203 -72 223 -94 213 -82 b 154 58 177 -39 154 12 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 380, - y_min: -134, - y_max: 168, - ha: 302, - o: 'm 537 -156 l 383 -58 b 422 60 413 -9 422 39 b 281 180 422 134 364 180 b 101 127 203 180 144 157 l -75 239 b -85 242 -78 242 -82 242 b -102 233 -92 242 -98 239 b -105 222 -104 229 -105 225 b -95 206 -105 216 -102 209 l 69 99 b 0 -59 19 46 0 -20 b 138 -180 0 -135 60 -180 b 359 -88 248 -180 317 -138 l 516 -190 b 527 -193 520 -192 524 -193 b 543 -183 534 -193 540 -190 b 547 -173 546 -180 547 -176 b 537 -156 547 -166 543 -160 z m 367 92 b 377 63 374 82 377 73 b 318 -14 377 43 361 20 l 184 72 b 317 121 248 108 289 121 b 367 92 344 121 357 109 z m 248 -66 b 108 -124 181 -108 138 -124 b 50 -92 78 -124 60 -109 b 42 -63 46 -84 42 -73 b 145 49 42 -35 68 0 l 285 -40 b 248 -66 274 -49 261 -56 z', - }, - noteheadSlashedBlack2: { - x_min: -79, - x_max: 376, - y_min: -164, - y_max: 168, - ha: 332, - o: 'm 531 -200 l 363 -78 b 425 59 402 -37 425 10 b 285 180 425 132 367 180 b 92 114 210 180 144 154 l -81 238 b -94 242 -85 240 -89 242 b -111 232 -99 242 -107 238 b -114 220 -112 229 -114 225 b -105 204 -114 215 -111 207 l 62 85 b 0 -62 23 43 0 -9 b 140 -180 0 -137 62 -180 b 331 -108 204 -180 275 -153 l 507 -233 b 520 -236 511 -236 517 -236 b 537 -228 527 -236 533 -233 b 541 -216 540 -225 541 -220 b 531 -200 541 -210 537 -203 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 432, - y_min: -155, - y_max: 155, - ha: 310, - o: 'm 592 223 b 580 215 585 223 580 219 l 580 -215 b 592 -223 580 -219 585 -223 l 608 -223 b 622 -215 615 -223 622 -219 l 622 215 b 608 223 622 219 615 223 z m 517 223 b 504 215 510 223 504 219 l 504 -215 b 517 -223 504 -219 510 -223 l 533 -223 b 544 -215 540 -223 544 -219 l 544 215 b 533 223 544 219 540 223 z m 246 179 b 240 180 243 179 242 180 b 232 176 236 180 233 179 l 118 22 b 117 17 117 20 117 19 l 117 215 b 104 223 117 219 111 223 l 88 223 b 75 215 81 223 75 219 l 75 -215 b 88 -223 75 -219 81 -223 l 104 -223 b 117 -215 111 -223 117 -219 l 117 14 l 118 14 b 122 7 118 12 120 10 l 374 -179 b 382 -180 376 -180 379 -180 b 390 -177 384 -180 387 -180 l 503 -23 l 503 -17 b 500 -9 503 -13 503 -10 z m 12 223 b 0 215 4 223 0 219 l 0 -215 b 12 -223 0 -219 4 -223 l 29 -223 b 40 -215 36 -223 40 -219 l 40 215 b 29 223 40 219 36 223 z m 183 39 b 179 46 181 39 179 43 b 229 112 226 112 228 112 b 236 109 229 112 233 111 l 436 -39 b 439 -46 438 -39 439 -42 b 390 -112 393 -111 392 -112 b 383 -109 389 -112 386 -111 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 270, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 z m 66 40 b 62 48 65 42 62 45 l 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 251, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 z m 266 26 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 b 266 26 238 73 266 50 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 250, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 z', - }, - noteheadParenthesis: { - x_min: -73, - x_max: 368, - y_min: -180, - y_max: 182, - ha: 362, - o: 'm 52 -249 b -30 -144 3 -212 -14 -190 b -52 4 -45 -102 -52 -56 b 52 252 -52 118 -36 179 l 46 262 b -105 3 -49 197 -105 124 b 45 -259 -105 -109 -48 -200 z m 382 -259 b 530 3 474 -202 530 -108 b 379 262 530 122 474 200 l 373 252 b 478 4 462 180 478 118 b 456 -144 478 -56 471 -102 b 373 -249 439 -190 422 -212 z', - }, - noteheadParenthesisRight: { - x_min: -36, - x_max: 73, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm -43 -261 b 105 1 49 -203 105 -109 b -46 261 105 121 49 199 l -52 251 b 53 3 37 179 53 117 b 32 -145 53 -58 46 -104 b -52 -251 14 -192 -3 -213 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 109, - y_min: -181, - y_max: 181, - ha: 362, - o: 'm 157 -251 b 75 -145 108 -213 91 -192 b 53 3 60 -104 53 -58 b 157 251 53 117 69 177 l 151 261 b 0 1 56 196 0 122 b 150 -261 0 -111 58 -202 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 315, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 228 -180 b 454 0 343 -180 454 -130 l 454 180 l 0 180 l 0 0 b 228 -180 0 -131 112 -180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 -180 l 0 180 l 0 -180 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 488 180 l 0 -180 l 488 -180 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 278, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 200 -180 l 400 112 l 383 124 b 199 180 327 161 264 180 b 16 124 135 180 73 161 l 0 112 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 144 0 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 z', - }, - tremolo1: { - x_min: -150, - x_max: 150, - y_min: -93, - y_max: 94, - ha: 187, - o: 'm 216 -45 l 216 135 l -216 46 l -216 -134 z', - }, - flag8thUp: { - x_min: 0, - x_max: 264, - y_min: -810, - y_max: 9, - ha: 819, - o: 'm 343 -1138 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 27 13 53 4 42 13 b 0 -9 12 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 z', - }, - flag8thDown: { - x_min: 0, - x_max: 306, - y_min: -14, - y_max: 808, - ha: 822, - o: 'm 346 1094 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 23 -20 0 -13 12 -20 b 58 12 36 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -813, - y_max: 2, - ha: 815, - o: 'm 392 -1146 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 -12 16 3 0 -1 l 0 -570 l 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 z m 301 -661 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 z', - }, - flag16thDown: { - x_min: 0, - x_max: 291, - y_min: -9, - y_max: 812, - ha: 821, - o: 'm 346 1132 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 l 0 1 b 24 -13 0 -6 10 -13 b 53 6 35 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 z m 325 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 149, - ha: 961, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 20 215 45 200 35 215 b 0 197 12 215 0 207 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 56 -390 147 -527 88 -495 b 73 -367 53 -380 60 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 273, - y_min: -172, - y_max: 812, - ha: 984, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 20 -248 0 -242 9 -248 b 48 -219 35 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z', - }, - flag64thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 347, - ha: 1159, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 20 500 45 485 32 500 b 0 482 10 500 0 492 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 b 300 24 138 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 52 -376 63 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag64thDown: { - x_min: 0, - x_max: 273, - y_min: -376, - y_max: 812, - ha: 1188, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 20 -541 0 -534 9 -541 b 48 -513 35 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z', - }, - flag128thUp: { - x_min: 0, - x_max: 261, - y_min: -812, - y_max: 533, - ha: 1345, - o: 'm 374 -969 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 22 768 45 753 35 768 b 0 750 10 768 0 760 l 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 315 -657 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 b 73 -367 53 -376 62 -367 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 z', - }, - flag128thDown: { - x_min: 0, - x_max: 273, - y_min: -580, - y_max: 812, - ha: 1392, - o: 'm 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 20 -835 0 -828 7 -835 b 48 -806 33 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 356 783 356 782 356 783 l 351 791 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z m 330 350 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 z m 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 z m 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 226, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 68 -117 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 168, - y_min: -335, - y_max: 341, - ha: 676, - o: 'm 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 l 0 -268 b 13 -281 0 -276 4 -281 l 16 -279 b 22 -278 17 -279 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 z m 53 56 b 176 114 53 76 141 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 249, - y_min: -348, - y_max: 350, - ha: 698, - o: 'm 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 13 37 0 42 4 37 l 16 39 b 50 53 17 39 39 48 l 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 13 -301 0 -297 4 -301 l 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 219 -217 217 -217 219 -217 l 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 z m 242 -65 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 247, - y_min: -125, - y_max: 127, - ha: 252, - o: 'm 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 278 50 275 50 276 50 l 287 49 b 346 63 304 49 331 52 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 411, - y_min: -175, - y_max: 437, - ha: 612, - o: 'm 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 z m 96 -134 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 z m 361 -134 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 203 331 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 141, - y_min: -248, - y_max: 247, - ha: 495, - o: 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 1, - x_max: 227, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 310 -245 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 z m 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 1, - x_max: 466, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 289 -249 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 164 216 196 204 180 210 l 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 b 289 -249 210 -186 245 -226 z m 262 72 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 z m 413 -115 b 409 26 413 -115 409 -30 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 179, - y_min: -353, - y_max: 307, - ha: 660, - o: 'm 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 13 23 0 27 4 23 l 16 24 b 86 53 17 24 73 49 l 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 13 -315 0 -311 4 -315 l 16 -314 b 85 -285 17 -314 72 -291 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 245 -86 258 -91 253 -86 l 242 -88 b 240 -88 242 -88 240 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 3, - x_max: 317, - y_min: -347, - y_max: 369, - ha: 716, - o: 'm 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 131 217 132 217 132 217 l 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 397 -22 445 -3 408 -17 l 396 -23 b 383 -6 387 -23 383 -16 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 z m 337 -45 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 z m 118 -127 b 114 -48 114 -121 114 -86 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 1, - x_max: 287, - y_min: -174, - y_max: 438, - ha: 612, - o: 'm 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 l 1 406 b 13 395 1 400 4 395 l 14 396 b 79 419 16 396 72 415 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 170 176 196 190 184 176 l 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 z m 186 -132 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 z', - }, - accidentalBakiyeFlat: { - x_min: -1, - x_max: 286, - y_min: -175, - y_max: 439, - ha: 614, - o: 'm 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 l -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 147 216 147 204 147 209 l 150 262 b 150 276 150 269 150 275 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 z m 181 -134 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 229, - y_min: -337, - y_max: 322, - ha: 659, - o: 'm 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 128 -261 17 -304 117 -264 l 130 -259 b 138 -276 137 -259 138 -268 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 z', - }, - accidentalKucukMucennebSharp: { - x_min: -1, - x_max: 339, - y_min: -338, - y_max: 321, - ha: 659, - o: 'm 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 210 -262 99 -305 199 -265 l 212 -261 b 220 -278 219 -261 220 -269 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 475 144 488 134 487 144 l 472 141 b 471 141 472 141 471 141 l 471 143 b 272 68 471 143 282 71 l 269 66 b 264 71 264 66 264 69 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 300, - y_min: -472, - y_max: 157, - ha: 629, - o: 'm 432 -4 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 l 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 z m 52 -137 l 52 144 l 327 -7 z', - }, - accidentalSori: { - x_min: 0, - x_max: 421, - y_min: -318, - y_max: 328, - ha: 646, - o: 'm 606 10 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 z m 183 -128 l 183 138 l 330 76 l 330 -66 z m 382 -45 l 382 55 l 501 6 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 339, - y_min: 1, - y_max: 245, - ha: 244, - o: 'm 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 339, - y_min: -244, - y_max: 0, - ha: 244, - o: 'm 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 z', - }, - articTenutoAbove: { - x_min: -1, - x_max: 338, - y_min: 0, - y_max: 48, - ha: 48, - o: 'm 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z', - }, - articTenutoBelow: { - x_min: -1, - x_max: 338, - y_min: -48, - y_max: 0, - ha: 48, - o: 'm 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 84, - y_min: 0, - y_max: 84, - ha: 84, - o: 'm 121 60 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 b 121 60 94 0 121 27 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 84, - y_min: -84, - y_max: 0, - ha: 84, - o: 'm 121 -60 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 b 121 -60 94 -121 121 -94 z', - }, - articStaccatissimoAbove: { - x_min: 1, - x_max: 100, - y_min: -2, - y_max: 293, - ha: 295, - o: 'm 72 422 b 1 390 35 422 3 409 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 z', - }, - articStaccatissimoBelow: { - x_min: 1, - x_max: 100, - y_min: -295, - y_max: 0, - ha: 295, - o: 'm 72 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 b 72 -425 3 -412 35 -425 z', - }, - articMarcatoAbove: { - x_min: -1, - x_max: 235, - y_min: -1, - y_max: 253, - ha: 254, - o: 'm 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 z', - }, - articMarcatoBelow: { - x_min: -1, - x_max: 235, - y_min: -254, - y_max: 0, - ha: 254, - o: 'm 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 b 0 -24 -1 -20 -1 -23 z', - }, - fermataAbove: { - x_min: 3, - x_max: 605, - y_min: -3, - y_max: 329, - ha: 332, - o: 'm 435 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 z m 516 75 b 436 153 516 117 480 153 b 359 75 395 153 359 117 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 z', - }, - fermataBelow: { - x_min: 3, - x_max: 605, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm 435 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 z m 516 -79 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 b 516 -79 480 -157 516 -121 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 603, - y_min: -1, - y_max: 333, - ha: 334, - o: 'm 72 480 b 0 441 32 480 0 462 l 0 19 b 35 0 0 9 16 0 b 71 19 55 0 71 9 l 71 289 b 433 315 71 307 252 315 b 798 289 615 315 798 307 l 798 19 b 832 0 798 9 814 0 b 868 19 852 0 868 9 l 868 441 b 796 480 868 462 837 480 z m 513 78 b 433 156 513 121 478 156 b 356 78 390 156 356 121 b 433 -1 356 35 390 -1 b 513 78 478 -1 513 35 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 603, - y_min: -333, - y_max: 1, - ha: 334, - o: 'm 513 -78 b 433 1 513 -35 478 1 b 356 -78 390 1 356 -35 b 433 -156 356 -121 390 -156 b 513 -78 478 -156 513 -121 z m 796 -480 b 868 -441 837 -480 868 -462 l 868 -19 b 832 0 868 -9 852 0 b 798 -19 814 0 798 -9 l 798 -289 b 433 -315 798 -307 615 -315 b 71 -289 252 -315 71 -307 l 71 -19 b 35 0 71 -9 55 0 b 0 -19 16 0 0 -9 l 0 -441 b 72 -480 0 -462 32 -480 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: 0, - y_max: 408, - ha: 408, - o: 'm 76 588 b 0 546 35 588 0 569 l 0 22 b 37 1 0 10 17 1 b 75 22 59 1 75 10 l 75 431 b 514 458 75 449 294 458 b 955 431 734 458 955 449 l 955 22 b 991 1 955 10 971 1 b 1030 22 1012 1 1030 10 l 1030 546 b 953 588 1030 569 995 588 z m 215 389 b 138 347 171 389 138 370 l 138 22 b 174 1 138 10 154 1 b 213 22 196 1 213 10 l 213 217 b 514 245 213 235 363 245 b 816 217 665 245 816 235 l 816 22 b 854 1 816 10 834 1 b 891 22 876 1 891 10 l 891 347 b 815 389 891 370 858 389 z m 606 84 b 521 167 606 130 569 167 b 439 84 475 167 439 130 b 521 0 439 39 475 0 b 606 84 569 0 606 39 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 715, - y_min: -408, - y_max: 0, - ha: 408, - o: 'm 606 -84 b 521 0 606 -39 569 0 b 439 -84 475 0 439 -39 b 521 -167 439 -130 475 -167 b 606 -84 569 -167 606 -130 z m 815 -389 b 891 -347 858 -389 891 -370 l 891 -22 b 854 -1 891 -10 876 -1 b 816 -22 834 -1 816 -10 l 816 -217 b 514 -245 816 -235 665 -245 b 213 -217 363 -245 213 -235 l 213 -22 b 174 -1 213 -10 196 -1 b 138 -22 154 -1 138 -10 l 138 -347 b 215 -389 138 -370 171 -389 z m 953 -588 b 1030 -546 995 -588 1030 -569 l 1030 -22 b 991 -1 1030 -10 1012 -1 b 955 -22 971 -1 955 -10 l 955 -431 b 514 -458 955 -449 734 -458 b 75 -431 294 -458 75 -449 l 75 -22 b 37 -1 75 -10 59 -1 b 0 -22 17 -1 0 -10 l 0 -546 b 76 -588 0 -569 35 -588 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 726, - y_min: 0, - y_max: 449, - ha: 449, - o: 'm 46 0 b 59 7 50 0 52 4 b 516 517 120 59 507 517 b 975 4 527 517 920 52 b 988 0 979 1 988 0 l 1041 0 b 1045 6 1041 0 1045 1 b 1043 13 1045 7 1045 10 b 516 647 962 91 536 647 b 3 13 504 647 91 98 b 0 7 0 10 0 9 b 6 0 0 3 6 0 z m 238 0 b 248 6 240 0 242 3 b 516 236 292 43 494 236 b 786 3 539 236 746 37 b 796 0 789 1 796 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 516 409 806 68 531 409 b 166 10 497 409 229 73 b 163 4 164 9 163 6 b 167 0 163 1 167 0 z m 592 91 b 516 167 592 132 557 167 b 438 91 472 167 438 132 b 516 13 438 48 472 13 b 592 91 557 13 592 48 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 726, - y_min: -449, - y_max: 0, - ha: 449, - o: 'm 167 0 b 163 -4 167 0 163 -1 b 166 -10 163 -6 164 -9 b 516 -409 229 -73 497 -409 b 867 -10 531 -409 806 -68 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 796 0 b 786 -3 796 0 789 -1 b 516 -236 746 -37 539 -236 b 248 -6 494 -236 292 -43 b 238 0 242 -3 240 0 z m 6 0 b 0 -7 6 0 0 -3 b 3 -13 0 -9 0 -10 b 516 -647 91 -98 504 -647 b 1043 -13 536 -647 962 -91 b 1045 -6 1045 -10 1045 -7 b 1041 0 1045 -1 1041 0 l 988 0 b 975 -4 988 0 979 -1 b 516 -517 920 -52 527 -517 b 59 -7 507 -517 120 -59 b 46 0 52 -4 50 0 z m 592 -91 b 516 -13 592 -48 557 -13 b 438 -91 472 -13 438 -48 b 516 -167 438 -132 472 -167 b 592 -91 557 -167 592 -132 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 604, - y_min: 0, - y_max: 341, - ha: 341, - o: 'm 78 0 b 88 6 81 0 82 3 b 435 328 134 45 412 328 b 783 3 458 328 742 39 b 793 0 786 1 793 0 l 865 0 b 870 4 865 0 870 1 b 867 10 870 6 868 9 b 435 491 805 69 474 491 b 3 10 397 491 69 75 b 0 4 1 9 0 6 b 4 0 0 1 4 0 z m 513 94 b 433 171 513 135 477 171 b 354 94 390 171 354 135 b 433 13 354 49 390 13 b 513 94 477 13 513 49 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 604, - y_min: -341, - y_max: 0, - ha: 341, - o: 'm 4 0 b 0 -4 4 0 0 -1 b 3 -10 0 -6 1 -9 b 435 -491 69 -75 397 -491 b 867 -10 474 -491 805 -69 b 870 -4 868 -9 870 -6 b 865 0 870 -1 865 0 l 793 0 b 783 -3 793 0 786 -1 b 435 -328 742 -39 458 -328 b 88 -6 412 -328 134 -45 b 78 0 82 -3 81 0 z m 513 -94 b 433 -13 513 -49 477 -13 b 354 -94 390 -13 354 -49 b 433 -171 354 -135 390 -171 b 513 -94 477 -171 513 -135 z', - }, - breathMarkComma: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - breathMarkUpbow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - caesura: { - x_min: 0, - x_max: 384, - y_min: -1, - y_max: 532, - ha: 533, - o: 'm 40 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 b 40 -1 32 -1 36 -1 z m 308 26 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 373, - y_min: 0, - y_max: 530, - ha: 530, - o: 'm 491 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 z m 29 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 b 29 0 0 14 12 0 z', - }, - restMaxima: { - x_min: 0, - x_max: 381, - y_min: -249, - y_max: 250, - ha: 499, - o: 'm 180 -330 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 l 156 -359 b 180 -330 170 -359 180 -354 z m 549 -330 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: 0, - y_max: 250, - ha: 250, - o: 'm 180 22 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 l 156 0 b 180 22 170 0 180 10 z', - }, - restWhole: { - x_min: 0, - x_max: 282, - y_min: -135, - y_max: 9, - ha: 144, - o: 'm 406 -157 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 z', - }, - restWholeLegerLine: { - x_min: -117, - x_max: 399, - y_min: -135, - y_max: 20, - ha: 155, - o: 'm -143 29 b -168 3 -157 29 -168 17 b -143 -23 -168 -12 -157 -23 l 0 -23 l 0 -157 b 37 -194 0 -177 16 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 549 -23 406 -23 406 -23 b 575 3 563 -23 575 -12 b 549 29 575 17 563 29 z', - }, - restHalf: { - x_min: 0, - x_max: 282, - y_min: -2, - y_max: 142, - ha: 144, - o: 'm 406 35 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 l 369 -3 b 406 35 389 -3 406 14 z', - }, - restHalfLegerLine: { - x_min: -117, - x_max: 399, - y_min: -13, - y_max: 142, - ha: 155, - o: 'm 549 -19 b 575 7 563 -19 575 -7 b 549 33 575 22 563 33 b 406 35 406 33 406 33 l 406 167 b 369 204 406 187 389 204 l 37 204 b 0 167 16 204 0 187 l 0 33 l -143 33 b -168 7 -157 33 -168 22 b -143 -19 -168 -7 -157 -19 z', - }, - restQuarter: { - x_min: 1, - x_max: 270, - y_min: -375, - y_max: 373, - ha: 748, - o: 'm 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 137 -170 141 -170 138 -170 l 125 -166 b 1 -304 50 -166 1 -233 b 168 -527 1 -376 63 -446 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 369 -317 297 -292 344 -308 l 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 236 -27 236 -30 236 -29 l 238 -17 b 238 -13 238 -16 238 -14 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 z', - }, - rest8th: { - x_min: 0, - x_max: 247, - y_min: -251, - y_max: 174, - ha: 425, - o: 'm 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 z', - }, - rest16th: { - x_min: 0, - x_max: 320, - y_min: -500, - y_max: 179, - ha: 679, - o: 'm 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 b 223 -271 153 -301 190 -288 b 229 -279 226 -271 229 -274 l 228 -281 b 228 -282 228 -282 228 -282 l 91 -690 b 91 -691 91 -690 91 -691 l 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 z', - }, - rest32nd: { - x_min: 0, - x_max: 363, - y_min: -500, - y_max: 426, - ha: 926, - o: 'm 508 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 426 409 451 415 436 l 413 423 b 413 422 413 423 413 422 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -753, - y_max: 430, - ha: 1183, - o: 'm 596 609 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -647 226 -628 228 -639 l 226 -651 b 226 -652 226 -651 226 -652 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 z', - }, - rest128th: { - x_min: 0, - x_max: 485, - y_min: -750, - y_max: 689, - ha: 1439, - o: 'm 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 518 806 480 796 501 801 l 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 b 177 -642 138 -652 160 -648 l 179 -641 b 229 -621 197 -635 210 -629 l 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 z', - }, - dynamicPiano: { - x_min: -89, - x_max: 366, - y_min: -142, - y_max: 274, - ha: 416, - o: 'm 395 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 z m 356 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 z', - }, - dynamicMezzo: { - x_min: -20, - x_max: 446, - y_min: -10, - y_max: 274, - ha: 284, - o: 'm 528 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 z', - }, - dynamicForte: { - x_min: -141, - x_max: 364, - y_min: -152, - y_max: 444, - ha: 596, - o: 'm 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 317 203 105 235 194 l 271 318 b 289 336 271 323 282 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 z', - }, - dynamicRinforzando: { - x_min: -20, - x_max: 277, - y_min: 0, - y_max: 274, - ha: 274, - o: 'm 324 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 229, - y_min: -10, - y_max: 273, - ha: 283, - o: 'm 212 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 z', - }, - dynamicZ: { - x_min: -30, - x_max: 244, - y_min: -10, - y_max: 268, - ha: 278, - o: 'm 333 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 z', - }, - ornamentTrill: { - x_min: 0, - x_max: 521, - y_min: -10, - y_max: 390, - ha: 400, - o: 'm 383 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 272 240 b 292 151 285 240 292 164 b 212 30 292 88 253 30 b 196 48 200 30 196 37 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 460, - y_min: 0, - y_max: 218, - ha: 218, - o: 'm 534 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 460, - y_min: -90, - y_max: 306, - ha: 396, - o: 'm 333 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 z', - }, - ornamentMordent: { - x_min: 1, - x_max: 729, - y_min: -73, - y_max: 319, - ha: 392, - o: 'm 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 439 167 454 160 445 160 b 302 327 387 228 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 725, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 429 167 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 16 105 158 268 88 186 b 0 72 9 96 0 86 b 29 58 0 63 7 58 b 71 76 42 58 55 62 l 158 154 b 174 160 163 158 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 533 148 b 554 160 543 158 550 160 b 577 143 562 160 566 156 b 703 10 585 135 690 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 444 167 533 259 491 213 b 429 167 439 161 433 161 z', - }, - ornamentTremblement: { - x_min: 1, - x_max: 985, - y_min: 0, - y_max: 244, - ha: 244, - o: 'm 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 l 448 167 b 439 167 446 164 441 164 l 302 325 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 145 143 147 143 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 l 530 148 b 552 160 536 154 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 907 147 b 930 160 922 158 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 815 166 824 163 818 163 b 678 325 760 226 732 264 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1119, - y_min: 0, - y_max: 481, - ha: 481, - o: 'm 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 2, - x_max: 1150, - y_min: -367, - y_max: 245, - ha: 612, - o: 'm 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1048, - y_min: -367, - y_max: 331, - ha: 698, - o: 'm 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 68 -177 192 -390 84 -298 b 66 -151 66 -168 66 -160 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 949, - y_min: 0, - y_max: 381, - ha: 381, - o: 'm 1367 314 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1278, - y_min: 0, - y_max: 247, - ha: 247, - o: 'm 1801 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1277, - y_min: -62, - y_max: 333, - ha: 395, - o: 'm 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 859, - y_min: -222, - y_max: 246, - ha: 468, - o: 'm 1164 217 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 z', - }, - brassScoop: { - x_min: 1, - x_max: 320, - y_min: -373, - y_max: 13, - ha: 386, - o: 'm 35 -537 b 461 -12 194 -518 461 -289 b 438 19 461 13 451 19 b 410 -9 425 19 413 9 b 35 -425 357 -366 92 -403 b 1 -482 13 -433 1 -438 l 1 -505 b 26 -537 1 -526 3 -537 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 489, - y_min: -40, - y_max: 346, - ha: 386, - o: 'm 33 -58 b 704 468 255 -58 683 186 b 681 498 704 494 693 498 b 654 471 668 498 658 488 b 33 55 550 118 91 76 b 0 -3 12 46 0 42 l 0 -26 b 24 -58 0 -46 1 -58 z', - }, - brassFallLipShort: { - x_min: 1, - x_max: 293, - y_min: -345, - y_max: 42, - ha: 387, - o: 'm 22 60 b 1 35 4 60 1 52 l 1 6 b 26 -50 3 -40 10 -43 b 32 -52 27 -50 30 -50 b 376 -469 85 -73 327 -111 b 400 -497 379 -487 387 -497 b 422 -467 412 -497 422 -491 b 32 60 422 -187 177 40 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 1138 1220 b 1135 1225 1135 1223 1135 1224 b 1129 1227 1133 1227 1130 1227 b 1117 1207 1122 1227 1117 1212 l 1117 1201 b 1109 1164 1117 1187 1117 1172 b 1100 1156 1107 1161 1104 1158 b 959 1104 1058 1128 995 1140 b 929 1032 936 1081 929 1056 b 932 1007 929 1024 930 1015 b 923 976 932 995 930 985 l 914 971 b 773 919 873 942 809 955 b 743 847 750 896 743 870 b 746 821 743 838 744 829 b 737 791 746 809 744 799 l 729 783 b 588 733 687 756 624 769 b 557 661 564 710 557 684 b 560 635 557 652 559 644 b 552 605 560 624 559 612 l 543 598 b 402 547 501 570 438 583 b 372 475 379 524 372 498 b 374 449 372 467 373 458 b 366 419 374 438 373 426 l 357 412 b 216 361 315 384 252 397 b 186 289 193 338 186 312 b 189 264 186 281 187 272 b 180 233 189 252 187 240 b 171 226 177 232 174 229 b 30 176 130 199 66 212 b 0 104 7 153 0 128 b 33 0 0 88 14 0 b 49 17 40 0 49 10 b 71 63 52 35 56 49 b 212 115 102 95 154 59 b 239 186 230 134 239 160 b 236 210 239 194 238 202 b 256 249 239 225 243 236 b 397 301 288 281 340 245 b 425 372 416 320 425 346 b 422 396 425 380 423 387 b 442 435 425 410 429 422 b 583 487 474 467 526 431 b 611 557 602 505 611 531 b 608 582 611 566 609 573 b 628 621 611 596 615 608 b 769 672 660 652 711 618 b 796 743 788 691 796 717 b 793 768 796 752 795 759 b 814 806 796 782 801 793 b 955 858 845 838 897 804 b 982 929 973 877 982 903 b 979 953 982 937 981 945 b 999 992 982 968 986 979 b 1140 1045 1031 1024 1083 989 b 1168 1116 1161 1066 1168 1090 b 1138 1220 1168 1162 1145 1207 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 811, - y_min: 0, - y_max: 852, - ha: 852, - o: 'm 30 1220 b 0 1116 23 1207 0 1162 b 27 1045 0 1090 7 1066 b 168 992 85 989 137 1024 b 189 953 181 979 186 968 b 186 929 187 945 186 937 b 213 858 186 903 194 877 b 354 806 271 804 323 838 b 374 768 367 793 372 782 b 372 743 373 759 372 752 b 399 672 372 717 380 691 b 540 621 456 618 508 652 b 560 582 553 608 557 596 b 557 557 559 573 557 566 b 585 487 557 531 566 505 b 726 435 642 431 694 467 b 746 396 739 422 743 410 b 743 372 744 387 743 380 b 770 301 743 346 752 320 b 912 249 828 245 880 281 b 932 210 924 236 929 225 b 929 186 930 202 929 194 b 956 115 929 160 937 134 b 1097 63 1014 59 1066 95 b 1119 17 1112 49 1116 35 b 1135 0 1119 10 1128 0 b 1168 104 1153 0 1168 91 b 1138 176 1168 128 1161 153 b 996 226 1102 212 1038 199 b 988 233 994 229 991 232 b 979 264 981 240 979 252 b 982 289 981 272 982 281 b 952 361 982 312 975 338 b 811 412 916 397 852 384 l 802 419 b 793 449 795 426 793 438 b 796 475 795 458 796 467 b 766 547 796 498 789 524 b 625 598 730 583 667 570 l 616 605 b 608 635 609 612 608 624 b 611 661 609 644 611 652 b 580 733 611 684 603 710 b 439 783 544 769 481 756 l 431 791 b 422 821 423 799 422 809 b 425 847 423 829 425 838 b 395 919 425 870 418 896 b 253 971 359 955 295 942 l 245 976 b 236 1007 238 985 236 995 b 239 1032 238 1015 239 1024 b 209 1104 239 1056 232 1081 b 68 1156 173 1140 109 1128 b 59 1164 63 1158 60 1161 b 50 1201 50 1172 50 1187 l 50 1207 b 39 1227 50 1212 46 1227 b 33 1225 37 1227 35 1227 b 30 1220 33 1224 33 1223 z', - }, - brassBend: { - x_min: 0, - x_max: 392, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 282 0 b 552 72 369 0 456 23 b 564 92 560 75 564 84 l 564 383 b 541 406 564 395 554 406 b 518 383 528 406 518 395 l 518 107 b 282 46 435 65 357 46 b 46 107 207 46 130 65 l 46 383 b 23 406 46 395 36 406 b 0 383 10 406 0 395 l 0 92 b 13 72 0 84 4 75 b 282 0 108 23 196 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 304, - y_min: 0, - y_max: 304, - ha: 304, - o: 'm 219 0 b 438 219 340 0 438 98 b 219 438 438 340 340 438 b 0 219 98 438 0 340 b 219 0 0 98 98 0 z m 219 392 b 392 219 314 392 392 314 b 219 46 392 124 314 46 b 46 219 124 46 46 124 b 219 392 46 314 124 392 z', - }, - brassFlip: { - x_min: 0, - x_max: 379, - y_min: 0, - y_max: 282, - ha: 282, - o: 'm 523 0 b 541 9 530 0 536 3 b 546 22 544 13 546 17 b 536 42 546 29 541 36 l 36 402 b 23 406 33 405 27 406 b 0 383 12 406 0 395 l 0 23 b 23 0 0 10 10 0 b 46 23 36 0 46 10 l 46 337 l 508 4 b 523 0 513 1 517 0 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 620, - y_min: 0, - y_max: 245, - ha: 245, - o: 'm 792 190 b 765 176 780 179 772 176 b 740 190 755 176 747 183 b 629 325 727 202 644 312 b 593 347 616 338 605 347 b 562 334 583 346 575 344 b 528 298 549 323 539 310 l 406 176 b 389 168 406 176 399 168 b 374 176 384 168 379 170 b 245 325 360 192 245 325 b 200 353 232 343 219 351 b 168 340 190 353 181 350 l 17 156 b 0 121 10 147 0 132 b 16 107 0 114 4 108 b 84 143 26 107 76 137 b 118 160 92 150 108 160 b 141 143 125 160 131 154 b 265 10 147 135 253 24 b 294 0 271 3 282 0 b 321 7 305 0 315 3 b 498 160 321 7 478 158 b 521 143 505 160 513 154 b 647 10 528 135 635 24 b 675 0 652 3 664 0 b 703 7 687 0 697 3 b 874 186 713 16 855 164 b 893 220 881 196 893 212 b 873 245 890 235 883 243 b 796 194 847 245 815 213 z', - }, - brassSmear: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 170, - ha: 170, - o: 'm 193 79 b 308 0 219 50 264 0 b 439 117 396 0 438 102 b 439 120 439 118 439 118 l 441 125 b 441 128 441 127 441 127 b 433 141 441 135 439 141 b 416 130 429 141 423 137 b 343 94 390 107 370 94 b 269 153 315 94 294 121 l 265 158 b 144 245 239 190 180 245 b 6 134 62 245 10 143 b 1 114 3 125 1 118 b 7 107 1 108 4 107 b 36 122 13 107 22 112 b 92 151 55 137 65 151 b 183 89 125 151 161 112 b 189 84 184 88 187 86 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 318, - ha: 318, - o: 'm 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 z', - }, - stringsUpBow: { - x_min: 1, - x_max: 249, - y_min: 1, - y_max: 495, - ha: 494, - o: 'm 181 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 200, - ha: 200, - o: 'm 288 144 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 b 288 144 223 0 288 65 z m 144 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 b 144 249 39 203 86 249 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 0 144 b 144 0 0 63 65 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 z m 121 246 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 b 121 246 39 193 73 236 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 200, - y_min: 0, - y_max: 300, - ha: 300, - o: 'm 288 288 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 z m 167 186 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 272, - y_min: 0, - y_max: 272, - ha: 272, - o: 'm 392 219 l 219 219 l 219 392 l 173 392 l 173 219 l 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 1019, - y_min: -8, - y_max: 555, - ha: 563, - o: 'm 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 z m 815 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 b 815 403 756 346 772 403 z m 1405 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 450, - y_min: 0, - y_max: 450, - ha: 450, - o: 'm 582 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 z m 324 271 b 271 324 291 271 271 291 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 152, - y_min: 2, - y_max: 251, - ha: 249, - o: 'm 104 361 b 1 271 42 361 1 321 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 17 32 29 26 26 l 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 z', - }, - wiggleArpeggiatoUp: { - x_min: -33, - x_max: 292, - y_min: 0, - y_max: 119, - ha: 119, - o: 'm 130 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 z', - }, - arrowheadBlackUp: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 431 b 0 20 111 274 0 30 b 16 0 0 12 6 0 l 17 1 b 166 50 43 16 160 50 b 310 1 171 50 289 13 l 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 z', - }, - arrowheadBlackDown: { - x_min: 0, - x_max: 228, - y_min: 0, - y_max: 299, - ha: 299, - o: 'm 166 0 b 328 410 220 157 328 400 b 311 431 328 419 321 431 l 310 429 b 166 380 289 418 171 380 b 17 429 160 380 43 415 l 16 431 b 0 410 6 431 0 419 b 166 0 0 400 111 157 z', - }, - arpeggiatoUp: { - x_min: 1, - x_max: 229, - y_min: 7, - y_max: 1511, - ha: 1504, - o: 'm 219 1848 l 330 1848 l 164 2176 l 1 1848 l 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1120 118 1155 124 1143 l 122 1113 b 122 1110 122 1113 122 1112 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 z', - }, - arpeggiatoDown: { - x_min: 1, - x_max: 229, - y_min: -4, - y_max: 1500, - ha: 1504, - o: 'm 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 122 1057 122 1058 122 1058 l 124 1050 b 105 998 124 1027 118 1015 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 l 1 323 l 164 -6 l 330 323 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 675 -71 b 586 -161 626 -71 586 -111 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 762, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1007 -71 b 917 -161 958 -71 917 -111 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1232, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 z m 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 l 831 -360 b 861 -340 844 -360 854 -348 z m 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 z m 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z m 89 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 z m 1683 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 532, - y_min: -250, - y_max: 279, - ha: 529, - o: 'm 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 z', - }, - csymDiminished: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 341 681 b 0 341 153 681 0 530 b 341 0 0 153 153 0 b 681 341 530 0 681 153 b 341 681 681 530 530 681 z m 341 618 b 618 341 495 618 618 495 b 341 63 618 189 494 63 b 63 341 187 63 63 187 b 341 618 63 494 189 618 z', - }, - csymHalfDiminished: { - x_min: -16, - x_max: 488, - y_min: -15, - y_max: 489, - ha: 504, - o: 'm 703 660 l 658 704 l 557 603 b 340 681 498 652 422 681 b -1 341 151 681 -1 530 b 78 124 -1 259 29 183 l -23 23 l 22 -22 l 122 79 b 340 0 181 30 258 0 b 680 341 528 0 680 153 b 602 559 680 423 651 500 z m 62 341 b 340 618 62 494 187 618 b 513 559 403 618 464 598 l 122 168 b 62 341 84 217 62 278 z m 616 341 b 340 63 616 189 492 63 b 167 124 276 63 216 85 l 557 514 b 616 341 596 465 616 405 z', - }, - csymAugmented: { - x_min: 0, - x_max: 395, - y_min: 1, - y_max: 396, - ha: 395, - o: 'm 569 318 l 317 318 l 317 570 l 253 570 l 253 318 l 0 318 l 0 255 l 253 255 l 253 1 l 317 1 l 317 255 l 569 255 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 558, - y_min: 1, - y_max: 477, - ha: 476, - o: 'm 402 687 l 0 1 l 804 1 z m 402 562 l 693 65 l 111 65 z', - }, - csymMinor: { - x_min: 0, - x_max: 325, - y_min: 216, - y_max: 260, - ha: 44, - o: 'm 468 374 l 0 374 l 0 311 l 468 311 z', - }, - csymParensLeftTall: { - x_min: 1, - x_max: 185, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm 266 48 b 261 65 266 55 264 62 b 92 719 157 212 92 400 b 262 1371 92 1037 154 1228 b 266 1394 266 1378 266 1394 l 266 1424 b 264 1436 266 1431 266 1436 b 259 1434 262 1436 259 1434 b 1 719 84 1261 1 1011 b 259 1 1 429 79 177 b 264 0 261 0 262 0 b 266 9 265 0 266 6 z', - }, - csymParensRightTall: { - x_min: -20, - x_max: 164, - y_min: 0, - y_max: 997, - ha: 997, - o: 'm -29 9 b -26 0 -29 6 -27 0 b -22 1 -24 0 -23 0 b 236 719 158 177 236 429 b -22 1434 236 1011 154 1261 b -26 1436 -22 1434 -24 1436 b -29 1424 -29 1436 -29 1431 l -29 1394 b -24 1371 -29 1394 -29 1378 b 145 719 84 1228 145 1037 b -23 65 145 400 81 212 b -29 48 -26 62 -29 55 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 155, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 217 0 b 223 9 220 0 223 4 l 223 37 b 217 46 223 42 220 46 l 92 46 l 92 1394 l 217 1394 b 223 1403 220 1394 223 1398 l 223 1431 b 217 1440 223 1436 220 1440 l 6 1440 b 0 1436 3 1440 0 1439 l 0 4 b 6 0 0 1 3 0 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 156, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 219 0 b 225 4 222 0 225 1 l 225 1436 b 219 1440 225 1439 222 1440 l 7 1440 b 1 1431 4 1440 1 1436 l 1 1403 b 7 1394 1 1398 4 1394 l 132 1394 l 132 46 l 7 46 b 1 37 4 46 1 42 l 1 9 b 7 0 1 4 4 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm 176 32 b 171 49 176 39 174 46 b 60 716 104 194 60 399 b 173 1382 60 1032 101 1241 b 176 1405 176 1390 176 1405 l 176 1427 b 173 1430 176 1428 174 1430 b 0 716 40 1297 0 978 b 170 3 0 428 50 179 b 171 0 170 1 170 0 b 176 6 173 0 176 4 z', - }, - csymParensRightVeryTall: { - x_min: -15, - x_max: 107, - y_min: 0, - y_max: 993, - ha: 993, - o: 'm -22 6 b -17 0 -22 4 -19 0 b -16 3 -16 0 -16 1 b 154 716 104 179 154 428 b -19 1430 154 978 114 1297 b -22 1427 -20 1430 -22 1428 l -22 1405 b -19 1382 -22 1405 -22 1390 b 94 716 53 1241 94 1032 b -17 49 94 399 50 194 b -22 32 -20 46 -22 39 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 999, - y_min: 0, - y_max: 1000, - ha: 1000, - o: 'm 1439 1380 l 1377 1440 l 0 60 l 62 0 z', - }, - accSagittal5v7KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -35 b 135 -112 68 -86 99 -112 b 225 68 194 -112 225 -53 l 180 68 b 144 -4 180 20 168 -4 b 122 0 138 -4 131 -3 b 23 248 86 14 52 96 l 0 248 z', - }, - accSagittal5v7KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 122 0 52 -96 86 -14 b 144 4 131 3 138 4 b 180 -68 168 4 180 -20 l 225 -68 b 135 112 225 53 194 112 b 45 35 99 112 68 86 l 45 517 l 0 517 z', - }, - accSagittal5CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 -517 l 225 248 l 203 248 l 0 -112 l 0 -284 l 180 33 l 180 -517 z', - }, - accSagittal5CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 180 517 l 180 -33 l 0 284 l 0 112 l 203 -248 l 225 -248 l 225 517 z', - }, - accSagittal7CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 112 l 89 112 b 180 -68 150 112 180 53 l 180 -248 l 225 -248 l 225 68 b 135 248 225 187 194 248 z', - }, - accSagittal7CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 -248 b 225 -68 194 -248 225 -187 l 225 248 l 180 248 l 180 68 b 89 -112 180 -53 150 -112 l 45 -112 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal25SmallDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 68 l 0 -33 l 315 135 l 315 10 z', - }, - accSagittal25SmallDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 315 -10 l 315 -135 l 0 33 l 0 -68 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 l 0 157 z', - }, - accSagittal35MediumDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 l 0 -112 z', - }, - accSagittal35MediumDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal11MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 l 0 -89 l 0 -248 z', - }, - accSagittal11MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 89 l 248 -248 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 z', - }, - accSagittal11LargeDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 112 l 315 112 b 449 -68 405 112 449 53 l 449 -248 l 495 -248 l 495 68 b 360 248 495 187 449 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal11LargeDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 360 -248 b 495 -68 449 -248 495 -187 l 495 248 l 449 248 l 449 68 b 315 -112 449 -53 405 -112 l 271 -112 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 271 -58 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal35LargeDiesisDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 l 540 112 l 540 274 l 269 -58 l 269 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp25SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -53 36 -112 l 135 -112 l 135 -517 l 180 -517 l 180 -89 b 248 26 206 -65 229 -27 b 315 -89 264 -27 287 -65 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 122 0 216 96 176 14 b 94 -4 112 -3 102 -4 b 45 68 60 -4 45 20 z', - }, - accSagittalFlat25SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 94 4 45 -20 60 4 b 122 0 102 4 112 3 b 248 -248 176 -14 216 -96 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 248 -26 287 65 264 27 b 180 89 229 27 206 65 l 180 517 l 135 517 l 135 112 l 112 112 b 0 -68 36 112 0 53 z', - }, - accSagittalSharp7CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 89 112 b 180 104 124 112 154 109 l 180 -517 l 225 -517 l 225 89 b 315 -68 285 60 315 9 l 315 -248 l 360 -248 l 360 68 b 135 248 360 187 285 248 l 0 248 z', - }, - accSagittalFlat7CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 360 -68 285 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -89 315 -9 285 -60 l 225 517 l 180 517 l 180 -104 b 89 -112 154 -109 124 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp5CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 71 l 180 -56 l 180 -517 l 225 -517 l 225 -98 l 405 -268 l 405 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat5CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 405 112 l 405 268 l 225 98 l 225 517 l 180 517 l 180 56 l 45 -71 l 45 517 z', - }, - accSagittalSharp5v7kDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -276 l 135 -82 l 135 -517 l 180 -517 l 180 -17 l 271 112 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 z', - }, - accSagittalFlat5v7kUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 248 -248 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 l 180 17 l 180 517 l 135 517 l 135 82 l 0 276 l 0 112 z', - }, - accSagittalSharp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 180 -53 l 180 -517 l 225 -517 l 225 0 l 292 85 l 360 0 l 360 -517 l 405 -517 l 405 -53 l 585 -274 l 585 -112 l 292 248 l 0 -112 l 0 -274 z', - }, - accSagittalFlat: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 l 585 112 l 585 274 l 405 53 l 405 517 l 360 517 l 360 0 l 292 -85 l 225 0 l 225 517 l 180 517 l 180 53 z', - }, - accSagittalSharp5v7kUp: { - x_min: 0, - x_max: 312, - y_min: -361, - y_max: 172, - ha: 533, - o: 'm 45 -517 l 45 -10 b 135 -92 68 -48 98 -75 l 135 -520 l 180 -520 l 180 -108 b 248 -115 203 -112 225 -115 b 271 -112 256 -115 264 -115 l 271 -517 l 315 -517 l 315 -107 b 449 68 405 -89 449 -30 l 405 68 b 297 -4 405 19 369 -4 b 23 248 131 -4 56 85 l 0 248 l 0 -517 z', - }, - accSagittalFlat5v7kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 361, - ha: 533, - o: 'm 0 517 l 0 -248 l 23 -248 b 297 4 56 -85 131 4 b 405 -68 369 4 405 -19 l 449 -68 b 315 107 449 30 405 89 l 315 517 l 271 517 l 271 112 b 248 115 264 115 256 115 b 180 108 225 115 203 112 l 180 520 l 135 520 l 135 92 b 45 10 98 75 68 48 l 45 517 z', - }, - accSagittalSharp5CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 -112 z', - }, - accSagittalFlat5CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 z', - }, - accSagittalSharp7CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 112 l 135 112 l 135 -517 l 180 -517 l 180 108 b 271 89 213 105 243 99 l 271 -517 l 315 -517 l 315 73 b 405 -68 374 45 405 -3 l 405 -248 l 449 -248 l 449 68 b 135 248 449 187 346 248 l 0 248 z', - }, - accSagittalFlat7CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 135 -248 b 449 -68 346 -248 449 -187 l 449 248 l 405 248 l 405 68 b 315 -73 405 3 374 -45 l 315 517 l 271 517 l 271 -89 b 180 -108 243 -99 213 -105 l 180 517 l 135 517 l 135 -112 l 45 -112 l 45 517 l 0 517 z', - }, - accSagittalSharp25SUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -30 l 495 143 l 495 14 l 0 -157 l 0 -255 l 225 -177 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 l 0 68 z', - }, - accSagittalFlat25SDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 517 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 177 l 0 255 l 0 157 l 495 -14 l 495 -143 l 0 30 z', - }, - accSagittalSharp35MUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -274 l 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 z', - }, - accSagittalFlat35MDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 l 0 274 l 0 112 z', - }, - accSagittalSharp11MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 z', - }, - accSagittalFlat11MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 337 -248 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 l 0 112 z', - }, - accSagittalSharp11LUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 104 b 631 -68 585 82 631 26 l 631 -248 l 675 -248 l 675 68 b 449 248 675 187 600 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11LDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 449 -248 b 675 -68 600 -248 675 -187 l 675 248 l 631 248 l 631 68 b 495 -104 631 -26 585 -82 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp35LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 71 l 452 -17 l 452 -517 l 495 -517 l 495 -56 l 720 -268 l 720 -112 l 337 248 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat35LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 l 720 112 l 720 268 l 495 56 l 495 517 l 452 517 l 452 17 l 360 -71 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp25SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 135 -112 0 -53 45 -112 b 243 -62 180 -112 215 -95 l 89 -503 l 143 -517 l 292 -82 l 445 -517 l 495 -503 l 343 -62 b 449 -112 372 -95 408 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 z', - }, - accSagittalDoubleFlat25SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 343 62 408 112 372 95 l 495 503 l 445 517 l 292 82 l 143 517 l 89 503 l 243 62 b 135 112 215 95 180 112 b 0 -68 45 112 0 53 z', - }, - accSagittalDoubleSharp7CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -503 l 52 -517 l 203 -82 l 354 -517 l 405 -503 l 230 0 l 271 108 b 495 -68 420 92 495 35 l 495 -248 l 540 -248 l 540 68 b 225 248 540 187 435 248 l 89 248 l 89 112 l 135 112 l 174 0 z m 213 112 l 203 82 l 192 112 z', - }, - accSagittalDoubleFlat7CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 174 0 l 135 -112 l 89 -112 l 89 -248 l 225 -248 b 540 -68 435 -248 540 -187 l 540 248 l 495 248 l 495 68 b 271 -108 495 -35 420 -92 l 230 0 l 405 503 l 354 517 l 203 82 l 52 517 l 0 503 z m 192 -112 l 203 -82 l 213 -112 z', - }, - accSagittalDoubleSharp5CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 405 -503 l 230 0 l 232 4 l 585 -264 l 585 -112 l 112 248 l 89 248 l 89 112 l 151 68 l 174 0 l 0 -503 l 52 -517 l 203 -82 l 354 -517 z', - }, - accSagittalDoubleFlat5CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 354 517 l 203 82 l 52 517 l 0 503 l 174 0 l 151 -68 l 89 -112 l 89 -248 l 112 -248 l 585 112 l 585 264 l 232 -4 l 230 0 l 405 503 z', - }, - accSagittalDoubleSharp5v7kDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -274 l 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 l 0 -112 z', - }, - accSagittalDoubleFlat5v7kUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 292 -248 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 l 0 274 z', - }, - accSagittalDoubleSharp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 540 -503 l 366 0 l 380 45 l 675 -271 l 675 -112 l 337 248 l 0 -112 l 0 -271 l 295 45 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 z', - }, - accSagittalDoubleFlat: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 295 -45 l 0 271 l 0 112 l 337 -248 l 675 112 l 675 271 l 380 -45 l 366 0 l 540 503 z', - }, - accSagittal7v11KleismaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -45 b 248 -112 200 -89 225 -112 b 315 68 292 -112 315 -53 l 271 68 b 248 -4 271 20 264 -4 b 236 0 245 -4 240 -3 b 157 248 213 14 187 96 b 78 0 127 96 101 14 b 65 -4 73 -3 68 -4 b 45 68 50 -4 45 20 l 0 68 b 68 -112 0 -53 23 -112 z', - }, - accSagittal7v11KleismaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 53 l 45 -68 b 65 4 45 -20 50 4 b 78 0 68 4 73 3 b 157 -248 101 -14 127 -96 b 236 0 187 -96 213 -14 b 248 4 240 3 245 4 b 271 -68 264 4 271 -20 l 315 -68 b 248 112 315 53 292 112 b 180 45 225 112 200 89 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 -40 b 315 -118 248 -92 279 -118 b 405 62 374 -118 405 -59 l 360 62 b 324 -10 360 14 348 -10 b 302 -6 318 -10 311 -9 b 206 217 268 9 235 84 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 206 -217 b 302 6 235 -84 268 -9 b 324 10 311 9 318 10 b 360 -62 348 10 360 -14 l 405 -62 b 315 118 405 59 374 118 b 225 40 279 118 248 92 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal55CommaUp: { - x_min: 0, - x_max: 219, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 l 0 -517 l 45 -517 l 45 58 l 315 -274 l 315 -112 l 23 248 z', - }, - accSagittal55CommaDown: { - x_min: 0, - x_max: 219, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 315 112 l 315 274 l 45 -58 l 45 517 l 0 517 l 0 -248 z', - }, - accSagittal7v11CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 248 l 135 248 b 0 68 45 248 0 187 z', - }, - accSagittal7v11CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 135 -248 0 -187 45 -248 l 271 -248 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittal5v11SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 73 l 0 -248 l 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -40 b 360 -118 295 -92 325 -118 b 449 62 420 -118 449 -59 l 405 62 b 369 -10 405 14 393 -10 b 348 -6 363 -10 356 -9 b 251 217 312 9 279 84 l 248 248 l 135 248 b 0 73 45 248 0 189 z', - }, - accSagittal5v11SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -73 b 135 -248 0 -189 45 -248 l 248 -248 l 251 -217 b 348 6 279 -84 312 -9 b 369 10 356 9 363 10 b 405 -62 393 10 405 -14 l 449 -62 b 360 118 449 59 420 118 b 271 40 325 118 295 92 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 242 37 203 -23 225 -3 b 315 -89 262 -23 285 -63 l 315 -517 l 360 -517 l 360 -112 l 383 -112 b 495 68 458 -112 495 -53 l 449 68 b 399 -4 449 20 433 -4 b 248 248 297 -4 261 171 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat5v11SUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 b 399 4 261 -171 297 4 b 449 -68 433 4 449 -20 l 495 -68 b 383 112 495 53 458 112 l 360 112 l 360 517 l 315 517 l 315 89 b 242 -37 285 63 262 23 b 180 23 225 3 203 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -112 l 89 -517 l 135 -517 l 135 -95 b 206 37 163 -73 187 -30 b 271 -23 225 -3 248 -23 l 271 -517 l 315 -517 l 315 -23 l 383 -23 b 449 -203 428 -23 449 -84 l 495 -203 b 405 68 495 -23 465 68 l 292 68 b 203 248 258 68 228 127 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 l 0 68 b 89 -112 0 -52 30 -112 z', - }, - accSagittalFlat7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 112 b 0 -68 30 112 0 52 l 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 b 292 -68 228 -127 258 -68 l 405 -68 b 495 203 465 -68 495 23 l 449 203 b 383 23 449 84 428 23 l 315 23 l 315 517 l 271 517 l 271 23 b 206 -37 248 23 225 3 b 135 95 187 30 163 73 l 135 517 l 89 517 z', - }, - accSagittalSharp55CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 l 0 -112 z', - }, - accSagittalFlat55CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 337 -248 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 z', - }, - accSagittalSharp17CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -89 292 13 321 -55 l 360 -517 l 405 -517 l 405 -112 l 428 -112 b 540 68 504 -112 540 -53 l 495 68 b 445 -4 495 20 480 -4 b 292 248 343 -4 307 171 l 180 248 b 0 68 60 248 0 187 l 0 -248 z', - }, - accSagittalFlat17CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 445 4 307 -171 343 4 b 495 -68 480 4 495 -20 l 540 -68 b 428 112 540 53 504 112 l 405 112 l 405 517 l 360 517 l 360 89 b 271 -112 321 55 292 -13 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 z', - }, - accSagittalSharp7v11kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -32 l 405 138 l 405 13 l 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 l 0 68 z', - }, - accSagittalFlat7v11kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 l 428 -248 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 l 405 -13 l 405 -138 l 0 32 z', - }, - accSagittalSharp7v11kUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -112 l 135 -517 l 180 -517 l 180 -105 b 271 -23 217 -94 248 -65 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 315 148 b 112 -4 274 148 236 -4 b 45 68 68 -4 45 20 l 0 68 b 135 -112 0 -53 45 -112 z', - }, - accSagittalFlat7v11kDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 135 112 b 0 -68 45 112 0 53 l 45 -68 b 112 4 45 -20 68 4 b 292 -248 236 4 274 -148 b 475 4 315 -148 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 23 b 180 105 248 65 217 94 l 180 517 l 135 517 z', - }, - accSagittalSharp17CUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 -23 b 405 -105 337 -65 369 -94 l 405 -517 l 449 -517 l 449 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17CDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 l 449 517 l 405 517 l 405 105 b 315 23 369 94 337 65 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp55CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -517 l 45 78 l 135 10 l 135 -517 l 180 -517 l 180 -23 l 271 -92 l 271 -517 l 315 -517 l 315 -127 l 495 -264 l 495 -112 l 23 248 l 0 248 l 0 -517 z', - }, - accSagittalFlat55CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 517 l 0 -248 l 23 -248 l 495 112 l 495 264 l 315 127 l 315 517 l 271 517 l 271 92 l 180 23 l 180 517 l 135 517 l 135 -10 l 45 -78 l 45 517 z', - }, - accSagittalSharp7v11CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 86 45 6 89 58 l 180 -517 l 225 -517 l 225 98 b 315 109 252 104 282 108 l 315 -517 l 360 -517 l 360 112 l 449 112 l 449 -517 l 495 -517 l 495 248 l 360 248 b 0 68 121 248 0 189 z', - }, - accSagittalFlat7v11CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -189 121 -248 l 495 -248 l 495 517 l 449 517 l 449 -112 l 360 -112 l 360 517 l 315 517 l 315 -109 b 225 -98 282 -108 252 -104 l 225 517 l 180 517 l 180 -86 b 45 68 89 -58 45 -6 l 45 248 l 0 248 z', - }, - accSagittalSharp5v11SUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 -23 b 449 -105 383 -65 415 -94 l 449 -517 l 495 -517 l 495 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 z', - }, - accSagittalFlat5v11SDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 l 495 517 l 449 517 l 449 105 b 360 23 415 94 383 65 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalDoubleSharp5v11SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 341 -60 b 449 -112 370 -95 405 -112 b 585 68 540 -112 585 -53 l 540 68 b 475 -4 540 20 517 -4 b 292 248 350 -4 312 150 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat5v11SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 b 475 4 312 -150 350 4 b 540 -68 517 4 540 -20 l 585 -68 b 449 112 585 53 540 112 b 341 60 405 112 370 95 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp7v11CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 112 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -503 l 275 0 l 278 4 b 337 -23 295 -13 315 -23 l 405 -23 b 495 -203 465 -23 495 -84 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 127 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 112 -112 0 -52 36 -112 z', - }, - accSagittalDoubleFlat7v11CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 112 b 0 -68 36 112 0 52 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -127 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 84 465 23 l 337 23 b 278 -4 315 23 295 13 l 275 0 l 449 503 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 z', - }, - accSagittalDoubleSharp55CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 428 248 l 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 z', - }, - accSagittalDoubleFlat55CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 l 428 -248 z', - }, - accSagittalDoubleSharp17CDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 387 -62 b 495 -112 416 -95 452 -112 b 631 68 585 -112 631 -53 l 585 68 b 520 -4 585 20 563 -4 b 337 248 396 -4 360 150 l 225 248 b 0 68 76 248 0 187 l 0 -248 z', - }, - accSagittalDoubleFlat17CUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 225 -248 0 -187 76 -248 l 337 -248 b 520 4 360 -150 396 4 b 585 -68 563 4 585 -20 l 631 -68 b 495 112 631 53 585 112 b 387 62 452 112 416 95 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 z', - }, - accSagittalDoubleSharp7v11kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -30 l 366 96 l 399 0 l 392 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 276 -517 l 428 -82 l 579 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat7v11kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 517 -248 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 579 517 l 428 82 l 276 517 l 225 503 l 353 135 l 0 255 l 0 157 l 392 23 l 399 0 l 366 -96 l 0 30 l 0 -68 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittal23CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -4 b 68 -23 53 -17 60 -23 l 180 -23 b 225 -203 210 -23 225 -82 l 271 -203 b 206 68 271 -23 248 68 l 89 68 b 23 248 71 68 48 127 l 0 248 z', - }, - accSagittal23CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 89 -68 48 -127 71 -68 l 206 -68 b 271 203 248 -68 271 23 l 225 203 b 180 23 225 82 210 23 l 68 23 b 45 4 60 23 53 17 l 45 517 l 0 517 z', - }, - accSagittal5v19CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 248 l 203 248 b 86 112 151 157 112 112 b 45 157 59 112 45 127 l 0 157 b 76 23 0 72 26 27 l 0 -112 z', - }, - accSagittal5v19CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 76 -23 b 0 -157 26 -27 0 -72 l 45 -157 b 86 -112 45 -127 59 -112 b 203 -248 112 -112 151 -157 l 225 -248 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittal5v23SmallDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -284 l 180 33 l 180 -517 l 225 -517 l 225 -4 b 248 -23 233 -17 240 -23 l 360 -23 b 405 -203 390 -23 405 -82 l 449 -203 b 386 68 449 -23 428 68 l 271 68 b 203 248 251 68 228 127 l 0 -112 z', - }, - accSagittal5v23SmallDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 203 -248 b 271 -68 228 -127 251 -68 l 386 -68 b 449 203 428 -68 449 23 l 405 203 b 360 23 405 82 390 23 l 248 23 b 225 4 240 23 233 17 l 225 517 l 180 517 l 180 -33 l 0 284 z', - }, - accSagittalSharp5v23SDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 6 b 89 -23 59 -13 73 -23 l 180 -23 l 180 -517 l 225 -517 l 225 -23 l 292 -23 b 360 -203 337 -23 360 -84 l 405 -203 b 315 68 405 -23 374 68 l 112 68 b 23 248 78 68 48 127 l 0 248 z', - }, - accSagittalFlat5v23SUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 112 -68 48 -127 78 -68 l 315 -68 b 405 203 374 -68 405 23 l 360 203 b 292 23 360 84 337 23 l 225 23 l 225 517 l 180 517 l 180 23 l 89 23 b 45 -6 73 23 59 13 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 l 89 -517 l 135 -517 l 135 -95 b 225 112 173 -65 203 4 l 271 112 l 271 -517 l 315 -517 l 315 107 b 405 -68 374 89 405 30 l 405 -248 l 449 -248 l 449 68 b 315 248 449 189 405 248 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 23 z', - }, - accSagittalFlat5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -23 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 315 -248 b 449 -68 405 -248 449 -189 l 449 248 l 405 248 l 405 68 b 315 -107 405 -30 374 -89 l 315 517 l 271 517 l 271 -112 l 225 -112 b 135 95 203 -4 173 65 l 135 517 l 89 517 l 89 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -82 l 135 -517 l 180 -517 l 180 -17 l 239 68 b 315 -23 261 7 287 -23 l 315 -517 l 360 -517 l 360 -23 l 428 -23 b 495 -203 472 -23 495 -84 l 540 -203 b 449 68 540 -23 510 68 l 337 68 b 248 248 302 68 271 127 l 0 -112 l 0 -276 z', - }, - accSagittalFlat23CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 276 l 0 112 l 248 -248 b 337 -68 271 -127 302 -68 l 449 -68 b 540 203 510 -68 540 23 l 495 203 b 428 23 495 84 472 23 l 360 23 l 360 517 l 315 517 l 315 23 b 239 -68 287 23 261 -7 l 180 17 l 180 517 l 135 517 l 135 82 z', - }, - accSagittalSharp23CUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 14 b 112 -23 63 -10 86 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 360 -23 b 449 -203 420 -23 449 -84 l 495 -203 b 383 68 495 -23 458 68 l 135 68 b 23 248 85 68 48 127 l 0 248 z', - }, - accSagittalFlat23CDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 b 135 -68 48 -127 85 -68 l 383 -68 b 495 203 458 -68 495 23 l 449 203 b 360 23 449 84 420 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 -14 86 23 63 10 l 45 517 l 0 517 z', - }, - accSagittalSharp5v19CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 135 -153 l 135 -517 l 180 -517 l 180 -115 l 271 -39 l 271 -517 l 315 -517 l 315 0 l 405 75 l 405 -517 l 449 -517 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalFlat5v19CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 517 l 405 517 l 405 -75 l 315 0 l 315 517 l 271 517 l 271 39 l 180 115 l 180 517 l 135 517 l 135 153 l 0 266 l 0 112 z', - }, - accSagittalSharp5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 135 -108 l 135 -517 l 180 -517 l 180 -53 l 271 58 l 271 -517 l 315 -517 l 315 14 b 383 -23 334 -10 357 -23 l 405 -23 l 405 -517 l 449 -517 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalFlat5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 449 517 l 405 517 l 405 23 l 383 23 b 315 -14 357 23 334 10 l 315 517 l 271 517 l 271 -58 l 180 53 l 180 517 l 135 517 l 135 108 z', - }, - accSagittalDoubleSharp5v23SDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 52 -517 l 203 -81 l 354 -517 l 405 -503 l 239 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 225 68 b 112 248 176 68 138 127 l 89 248 l 89 112 b 170 -14 109 45 135 0 l 0 -501 z', - }, - accSagittalDoubleFlat5v23SUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 501 l 170 14 b 89 -112 135 0 109 -45 l 89 -248 l 112 -248 b 225 -68 138 -127 176 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 239 23 l 405 503 l 354 517 l 203 81 l 52 517 z', - }, - accSagittalDoubleSharp5v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 112 -112 0 -52 36 -112 b 193 -73 143 -112 170 -99 l 45 -501 l 95 -517 l 248 -81 l 397 -517 l 449 -501 l 275 0 l 315 112 b 495 -68 435 112 495 53 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 z', - }, - accSagittalDoubleFlat5v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 315 -112 495 -53 435 -112 l 275 0 l 449 501 l 397 517 l 248 81 l 95 517 l 45 501 l 193 73 b 112 112 170 99 143 112 b 0 -68 36 112 0 52 z', - }, - accSagittalDoubleSharp23CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 252 35 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 323 4 b 383 -23 340 -13 360 -23 l 449 -23 b 540 -203 510 -23 540 -84 l 585 -203 b 472 68 585 -23 547 68 l 405 68 b 292 248 356 68 318 127 l 0 -112 l 0 -274 z', - }, - accSagittalDoubleFlat23CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 274 l 0 112 l 292 -248 b 405 -68 318 -127 356 -68 l 472 -68 b 585 203 547 -68 585 23 l 540 203 b 449 23 540 84 510 23 l 383 23 b 323 -4 360 23 340 13 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 252 -35 z', - }, - accSagittal19SchismaUp: { - x_min: 0, - x_max: 125, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 68 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 l 0 68 b 68 -112 0 -52 23 -112 z', - }, - accSagittal19SchismaDown: { - x_min: 0, - x_max: 125, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 112 b 0 -68 23 112 0 52 l 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 180 -248 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 z', - }, - accSagittal17KleismaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal17KleismaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal143CommaUp: { - x_min: 0, - x_max: 156, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 248 l 203 248 b 135 68 177 127 154 68 l 105 68 b 45 157 65 68 45 98 l 0 157 b 23 20 0 95 7 50 b 0 -203 7 -23 0 -98 z', - }, - accSagittal143CommaDown: { - x_min: 0, - x_max: 156, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 23 -20 0 98 7 23 b 0 -157 7 -50 0 -95 l 45 -157 b 105 -68 45 -98 65 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 225 -248 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal11v49CommaUp: { - x_min: 0, - x_max: 188, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -292 b 89 -157 45 -203 60 -157 l 203 -157 b 225 -143 210 -157 217 -153 l 225 -517 l 271 -517 l 271 248 l 248 248 b 180 157 233 187 210 157 l 68 157 b 0 -68 23 157 0 82 l 45 -68 b 89 68 45 23 60 68 l 203 68 b 225 84 209 68 216 72 l 225 -36 b 180 -68 213 -58 199 -68 l 68 -68 b 0 -292 23 -68 0 -143 z', - }, - accSagittal11v49CommaDown: { - x_min: 0, - x_max: 188, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 68 68 0 143 23 68 l 180 68 b 225 36 199 68 213 58 l 225 -84 b 203 -68 216 -72 209 -68 l 89 -68 b 45 68 60 -68 45 -23 l 0 68 b 68 -157 0 -82 23 -157 l 180 -157 b 248 -248 210 -157 233 -187 l 271 -248 l 271 517 l 225 517 l 225 143 b 203 157 217 153 210 157 l 89 157 b 45 292 60 157 45 203 z', - }, - accSagittal19CommaUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 -4 b 203 -23 187 -17 196 -23 l 315 -23 b 360 -203 346 -23 360 -82 l 405 -203 b 341 68 405 -23 383 68 l 225 68 b 157 248 206 68 183 127 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal19CommaDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 b 225 -68 183 -127 206 -68 l 341 -68 b 405 203 383 -68 405 23 l 360 203 b 315 23 360 82 346 23 l 203 23 b 180 4 196 23 187 17 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal7v19CommaUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 68 -112 0 -52 23 -112 b 135 -45 89 -112 112 -89 l 135 -517 l 180 -517 l 180 112 l 225 112 b 315 -68 285 112 315 53 l 315 -248 l 360 -248 l 360 68 b 271 248 360 187 330 248 l 157 248 b 79 0 127 98 101 16 b 68 -3 73 0 68 -3 b 45 68 52 -3 45 20 z', - }, - accSagittal7v19CommaDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 68 3 45 -20 52 3 b 79 0 68 3 73 0 b 157 -248 101 -16 127 -98 l 271 -248 b 360 -68 330 -248 360 -187 l 360 248 l 315 248 l 315 68 b 225 -112 315 -53 285 -112 l 180 -112 l 180 517 l 135 517 l 135 45 b 68 112 112 89 89 112 b 0 -68 23 112 0 52 z', - }, - accSagittal49SmallDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -68 330 112 360 53 l 360 -248 l 405 -248 l 405 68 b 315 248 405 187 374 248 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal49SmallDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 315 -248 b 405 -68 374 -248 405 -187 l 405 248 l 360 248 l 360 68 b 271 -112 360 -53 330 -112 l 225 -112 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal23SmallDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 89 -23 45 -82 60 -23 l 157 -23 b 180 -4 164 -23 173 -17 l 180 -517 l 225 -517 l 225 58 l 495 -274 l 495 -112 l 203 248 b 135 68 177 127 154 68 l 68 68 b 0 -203 23 68 0 -23 z', - }, - accSagittal23SmallDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -68 0 23 23 -68 l 135 -68 b 203 -248 154 -68 177 -127 l 495 112 l 495 274 l 225 -58 l 225 517 l 180 517 l 180 4 b 157 23 173 17 164 23 l 89 23 b 45 203 60 23 45 82 z', - }, - accSagittal5v13MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -259 l 315 -89 l 315 -517 l 360 -517 l 360 248 l 337 248 b 128 180 253 203 184 180 b 45 248 73 180 45 203 l 0 248 b 52 95 0 170 17 120 l 0 68 l 0 -33 l 315 135 l 315 10 l 0 -157 z', - }, - accSagittal5v13MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 157 l 315 -10 l 315 -135 l 0 33 l 0 -68 l 52 -95 b 0 -248 17 -120 0 -170 l 45 -248 b 128 -180 45 -203 73 -180 b 337 -248 184 -180 253 -203 l 360 -248 l 360 517 l 315 517 l 315 89 l 0 259 z', - }, - accSagittal11v19MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -248 l 45 -68 b 180 112 45 53 89 112 l 225 112 l 225 -517 l 271 -517 l 271 -4 b 292 -23 278 -17 285 -23 l 405 -23 b 449 -203 435 -23 449 -82 l 495 -203 b 431 68 495 -23 472 68 l 315 68 b 248 248 295 68 271 127 l 135 248 b 0 68 45 248 0 187 l 0 -248 z', - }, - accSagittal11v19MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 248 l 0 -68 b 135 -248 0 -187 45 -248 l 248 -248 b 315 -68 271 -127 295 -68 l 431 -68 b 495 203 472 -68 495 23 l 449 203 b 405 23 449 82 435 23 l 292 23 b 271 4 285 23 278 17 l 271 517 l 225 517 l 225 -112 l 180 -112 b 45 68 89 -112 45 -53 l 45 248 z', - }, - accSagittal49MediumDiesisUp: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -68 l 0 -248 l 45 -248 l 315 -94 l 315 -517 l 360 -517 l 360 248 l 225 248 b 0 -68 75 248 0 143 z m 45 -68 b 225 112 45 53 105 112 l 315 112 l 315 10 l 45 -145 z', - }, - accSagittal49MediumDiesisDown: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 225 -248 0 -143 75 -248 l 360 -248 l 360 517 l 315 517 l 315 94 l 45 248 l 0 248 z m 45 145 l 315 -10 l 315 -112 l 225 -112 b 45 68 105 -112 45 -53 z', - }, - accSagittal5v49MediumDiesisUp: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -89 l 0 -248 l 225 53 l 225 -517 l 271 -517 l 271 53 l 495 -248 l 495 -89 l 248 248 b 89 89 170 143 118 89 b 45 157 60 89 45 112 l 0 157 b 68 3 0 68 23 16 z', - }, - accSagittal5v49MediumDiesisDown: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 68 -3 b 0 -157 23 -16 0 -68 l 45 -157 b 89 -89 45 -112 60 -89 b 248 -248 118 -89 170 -143 l 495 89 l 495 248 l 271 -53 l 271 517 l 225 517 l 225 -53 l 0 248 l 0 89 z', - }, - accSagittal49LargeDiesisUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -89 l 360 -248 l 405 -248 l 405 -68 b 180 248 405 143 330 248 l 0 248 z m 45 12 l 45 112 l 180 112 b 360 -68 300 112 360 53 l 360 -147 z', - }, - accSagittal49LargeDiesisDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 405 68 330 -248 405 -143 l 405 248 l 360 248 l 45 89 l 45 517 l 0 517 z m 360 147 l 360 68 b 180 -112 360 -53 300 -112 l 45 -112 l 45 -12 z', - }, - accSagittal11v19LargeDiesisUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -86 l 449 -256 l 449 -157 l 45 13 l 45 138 l 449 -30 l 449 68 l 23 248 l 0 248 z', - }, - accSagittal11v19LargeDiesisDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 449 -68 l 449 30 l 45 -138 l 45 -13 l 449 157 l 449 256 l 45 86 l 45 517 l 0 517 z', - }, - accSagittal5v13LargeDiesisUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 b 89 -112 0 -52 30 -112 b 180 -35 125 -112 157 -86 l 180 -517 l 225 -517 l 225 -86 l 631 -256 l 631 -157 l 225 13 l 225 138 l 631 -30 l 631 68 l 203 248 b 101 0 173 98 138 16 b 81 -3 94 0 86 -3 b 45 68 56 -3 45 20 z', - }, - accSagittal5v13LargeDiesisDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -68 b 81 3 45 -20 56 3 b 101 0 86 3 94 0 b 203 -248 138 -16 173 -98 l 631 -68 l 631 30 l 225 -138 l 225 -13 l 631 157 l 631 256 l 225 86 l 225 517 l 180 517 l 180 35 b 89 112 157 86 125 112 b 0 -68 30 112 0 52 z', - }, - accSagittalSharp23SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 b 315 6 287 -23 301 -13 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 68 312 127 282 68 l 194 68 b 89 157 125 68 89 98 l 45 157 b 60 59 45 118 50 85 b 0 -203 20 30 0 -56 z', - }, - accSagittalFlat23SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 60 -59 0 56 20 -30 b 45 -157 50 -85 45 -118 l 89 -157 b 194 -68 89 -98 125 -68 l 248 -68 b 337 -248 282 -68 312 -127 l 360 -248 l 360 517 l 315 517 l 315 -6 b 271 23 301 13 287 23 l 180 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp49SDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 135 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 b 315 -135 285 -157 300 -150 l 315 -517 l 360 -517 l 360 248 l 337 248 b 248 157 323 187 292 157 l 89 157 b 0 -68 30 157 0 82 l 45 -68 b 112 68 45 23 68 68 l 271 68 b 315 89 284 68 300 75 l 315 -32 b 248 -68 298 -56 275 -68 l 89 -68 b 0 -292 29 -68 0 -143 z', - }, - accSagittalFlat49SUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 143 29 68 l 248 68 b 315 32 275 68 298 56 l 315 -89 b 271 -68 300 -75 284 -68 l 112 -68 b 45 68 68 -68 45 -23 l 0 68 b 89 -157 0 -82 30 -157 l 248 -157 b 337 -248 292 -157 323 -187 l 360 -248 l 360 517 l 315 517 l 315 135 b 271 157 300 150 285 157 l 180 157 l 180 517 l 135 517 l 135 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalSharp7v19CDown: { - x_min: 0, - x_max: 250, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -271 l 135 -125 l 135 -517 l 180 -517 l 180 -78 l 315 65 l 315 -517 l 360 -517 l 360 248 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 89 -20 0 53 29 -6 z', - }, - accSagittalFlat7v19CUp: { - x_min: 0, - x_max: 250, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 20 b 0 -157 29 6 0 -53 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 360 -248 l 360 517 l 315 517 l 315 -65 l 180 78 l 180 517 l 135 517 l 135 125 l 0 271 l 0 112 z', - }, - accSagittalSharp19CDown: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 96 45 17 89 72 l 180 -517 l 225 -517 l 225 107 b 315 112 252 112 282 112 l 360 112 l 360 -517 l 405 -517 l 405 248 l 271 248 b 0 68 89 248 0 187 z', - }, - accSagittalFlat19CUp: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 271 -248 0 -187 89 -248 l 405 -248 l 405 517 l 360 517 l 360 -112 l 315 -112 b 225 -107 282 -112 252 -112 l 225 517 l 180 517 l 180 -96 b 45 68 89 -72 45 -17 l 45 248 l 0 248 z', - }, - accSagittalSharp11v49CDown: { - x_min: 0, - x_max: 344, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -82 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 271 112 215 -23 245 23 l 315 112 l 315 -517 l 360 -517 l 360 107 b 449 -68 420 89 449 30 l 449 -248 l 495 -248 l 495 68 b 360 248 495 189 449 248 l 248 248 b 157 68 222 128 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat11v49CUp: { - x_min: 0, - x_max: 344, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -128 l 360 -248 b 495 -68 449 -248 495 -189 l 495 248 l 449 248 l 449 68 b 360 -107 449 -30 420 -89 l 360 517 l 315 517 l 315 -112 l 271 -112 b 180 23 245 -23 215 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 82 z', - }, - accSagittalSharp143CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 112 -23 45 -84 68 -23 l 135 -23 l 135 -517 l 180 -517 l 180 -23 b 259 76 210 -23 236 10 l 315 17 l 315 -517 l 360 -517 l 360 -30 l 585 -271 l 585 -112 l 248 248 b 157 68 222 127 192 68 l 89 68 b 0 -203 30 68 0 -23 z', - }, - accSagittalFlat143CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 89 -68 0 23 30 -68 l 157 -68 b 248 -248 192 -68 222 -127 l 585 112 l 585 271 l 360 30 l 360 517 l 315 517 l 315 -17 l 259 -76 b 180 23 236 -10 210 23 l 180 517 l 135 517 l 135 23 l 112 23 b 45 203 68 23 45 84 z', - }, - accSagittalSharp17kDown: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -157 l 0 -256 l 225 -161 l 225 -517 l 271 -517 l 271 -144 l 405 -86 l 405 -517 l 449 -517 l 449 248 l 428 248 b 145 171 305 196 210 171 b 45 248 78 171 45 196 l 0 248 b 79 101 0 170 26 121 l 0 68 l 0 -32 l 405 138 l 405 13 z', - }, - accSagittalFlat17kUp: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 405 -13 l 405 -138 l 0 32 l 0 -68 l 79 -101 b 0 -248 26 -121 0 -170 l 45 -248 b 145 -171 45 -196 78 -171 b 428 -248 210 -171 305 -196 l 449 -248 l 449 517 l 405 517 l 405 86 l 271 144 l 271 517 l 225 517 l 225 161 l 0 256 l 0 157 z', - }, - accSagittalSharp19sDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 180 109 45 36 89 95 l 180 -517 l 225 -517 l 225 112 l 271 112 b 360 -23 295 23 325 -23 l 360 -517 l 405 -517 l 405 -23 l 472 -23 b 540 -203 517 -23 540 -84 l 585 -203 b 495 68 585 -23 554 68 l 383 68 b 292 248 348 68 318 127 l 180 248 b 0 68 60 248 0 187 z', - }, - accSagittalFlat19sUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 180 -248 0 -187 60 -248 l 292 -248 b 383 -68 318 -127 348 -68 l 495 -68 b 585 203 554 -68 585 23 l 540 203 b 472 23 540 84 517 23 l 405 23 l 405 517 l 360 517 l 360 23 b 271 -112 325 23 295 -23 l 225 -112 l 225 517 l 180 517 l 180 -109 b 45 68 89 -95 45 -36 l 45 248 l 0 248 z', - }, - accSagittalSharp19sUp: { - x_min: 0, - x_max: 281, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -96 l 89 -517 l 135 -517 l 135 -108 b 180 -112 148 -112 163 -112 b 225 -108 196 -112 210 -112 l 225 -517 l 271 -517 l 271 -94 b 360 -12 305 -78 337 -50 l 360 -517 l 405 -517 l 405 248 l 383 248 b 190 0 353 98 288 16 b 138 -3 171 0 153 -3 b 45 68 75 -3 45 20 l 0 68 b 89 -96 0 -17 30 -72 z', - }, - accSagittalFlat19sDown: { - x_min: 0, - x_max: 281, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 96 b 0 -68 30 72 0 17 l 45 -68 b 138 3 45 -20 75 3 b 190 0 153 3 171 0 b 383 -248 288 -16 353 -98 l 405 -248 l 405 517 l 360 517 l 360 12 b 271 94 337 50 305 78 l 271 517 l 225 517 l 225 108 b 180 112 210 112 196 112 b 135 108 163 112 148 112 l 135 517 l 89 517 z', - }, - accSagittalSharp17kUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat17kDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp143CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 271 -23 l 271 -517 l 315 -517 l 315 -23 l 337 -23 b 405 14 363 -23 386 -10 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalFlat143CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 517 l 405 517 l 405 -14 b 337 23 386 10 363 23 l 315 23 l 315 517 l 271 517 l 271 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp11v49CUp: { - x_min: 0, - x_max: 312, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -68 b 135 68 45 23 76 68 l 337 68 b 405 95 363 68 386 76 l 405 -27 b 315 -68 386 -55 356 -68 l 112 -68 b 0 -292 37 -68 0 -143 l 45 -292 b 135 -157 45 -203 75 -157 l 135 -517 l 180 -517 l 180 -157 l 271 -157 l 271 -517 l 315 -517 l 315 -157 l 337 -157 b 405 -130 360 -157 383 -148 l 405 -517 l 449 -517 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 37 157 0 82 z', - }, - accSagittalFlat11v49CDown: { - x_min: 0, - x_max: 312, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 112 -157 0 -82 37 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 517 l 405 517 l 405 130 b 337 157 383 148 360 157 l 315 157 l 315 517 l 271 517 l 271 157 l 180 157 l 180 517 l 135 517 l 135 157 b 45 292 75 157 45 203 l 0 292 b 112 68 0 143 37 68 l 315 68 b 405 27 356 68 386 55 l 405 -95 b 337 -68 386 -76 363 -68 l 135 -68 b 45 68 76 -68 45 -23 z', - }, - accSagittalSharp19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 14 b 337 -23 289 -10 311 -23 l 360 -23 l 360 -517 l 405 -517 l 405 -23 b 495 -203 465 -23 495 -82 l 540 -203 b 428 68 540 -23 503 68 l 360 68 b 248 248 310 68 271 128 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 b 360 -68 271 -128 310 -68 l 428 -68 b 540 203 503 -68 540 23 l 495 203 b 405 23 495 82 465 23 l 405 517 l 360 517 l 360 23 l 337 23 b 271 -14 311 23 289 10 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 112 l 315 112 b 360 109 331 112 346 112 l 360 -517 l 405 -517 l 405 98 b 495 -68 465 73 495 19 l 495 -248 l 540 -248 l 540 68 b 360 248 540 189 480 248 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 360 -248 b 540 -68 480 -248 540 -189 l 540 248 l 495 248 l 495 68 b 405 -98 495 -19 465 -73 l 405 517 l 360 517 l 360 -109 b 315 -112 346 -112 331 -112 l 271 -112 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalSharp49SUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 112 l 360 112 b 405 109 376 112 390 112 l 405 -517 l 449 -517 l 449 96 b 540 -68 510 72 540 17 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat49SDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 449 -96 540 -17 510 -72 l 449 517 l 405 517 l 405 -109 b 360 -112 390 -112 376 -112 l 315 -112 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp23SUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 135 -517 l 180 -517 l 180 -23 l 203 -23 b 271 14 229 -23 251 -10 l 271 -517 l 315 -517 l 315 71 l 405 -14 l 405 -517 l 449 -517 l 449 -56 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalFlat23SDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 449 56 l 449 517 l 405 517 l 405 14 l 315 -71 l 315 517 l 271 517 l 271 -14 b 203 23 251 10 229 23 l 180 23 l 180 517 l 135 517 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalSharp5v13MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 495 141 l 495 14 l 0 -157 l 0 -256 l 225 -180 l 225 -517 l 271 -517 l 271 -161 l 360 -130 l 360 -517 l 405 -517 l 405 -115 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 l 0 248 b 95 99 0 170 30 120 l 0 68 l 0 -30 z', - }, - accSagittalFlat5v13MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 30 l 0 -68 l 95 -99 b 0 -248 30 -120 0 -170 l 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 115 l 405 517 l 360 517 l 360 130 l 271 161 l 271 517 l 225 517 l 225 180 l 0 256 l 0 157 l 495 -14 l 495 -141 z', - }, - accSagittalSharp11v19MUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 180 104 45 26 89 82 l 180 -517 l 225 -517 l 225 112 l 315 112 l 315 -517 l 360 -517 l 360 14 b 428 -23 379 -10 402 -23 l 449 -23 l 449 -517 l 495 -517 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalFlat11v19MDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 495 517 l 449 517 l 449 23 l 428 23 b 360 -14 402 23 379 10 l 360 517 l 315 517 l 315 -112 l 225 -112 l 225 517 l 180 517 l 180 -104 b 45 68 89 -82 45 -26 l 45 248 l 0 248 z', - }, - accSagittalSharp49MUp: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 225 -180 l 225 -517 l 271 -517 l 271 -166 l 360 -132 l 360 -517 l 405 -517 l 405 -117 l 495 -84 l 495 -517 l 540 -517 l 540 248 l 360 248 b 0 -68 120 248 0 143 z m 45 -145 l 45 -68 b 360 112 45 53 150 112 l 495 112 l 495 14 z', - }, - accSagittalFlat49MDown: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 68 b 360 -248 0 -143 120 -248 l 540 -248 l 540 517 l 495 517 l 495 84 l 405 117 l 405 517 l 360 517 l 360 132 l 271 166 l 271 517 l 225 517 l 225 180 l 45 248 l 0 248 z m 495 -14 l 495 -112 l 360 -112 b 45 68 150 -112 45 -53 l 45 145 z', - }, - accSagittalSharp5v49MUp: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -271 l 180 -79 l 180 -517 l 225 -517 l 225 -30 l 315 65 l 315 -517 l 360 -517 l 360 65 l 449 -30 l 449 -517 l 495 -517 l 495 -79 l 675 -271 l 675 -112 l 337 248 b 118 89 239 143 166 89 b 45 157 68 89 45 112 l 0 157 b 107 0 0 62 36 10 l 0 -112 z', - }, - accSagittalFlat5v49MDown: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 112 l 107 0 b 0 -157 36 -10 0 -62 l 45 -157 b 118 -89 45 -112 68 -89 b 337 -248 166 -89 239 -143 l 675 112 l 675 271 l 495 79 l 495 517 l 449 517 l 449 30 l 360 -65 l 360 517 l 315 517 l 315 -65 l 225 30 l 225 517 l 180 517 l 180 79 l 0 271 z', - }, - accSagittalSharp49LUp: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -82 l 135 -112 l 135 -517 l 180 -517 l 180 -127 l 271 -157 l 271 -517 l 315 -517 l 315 -173 l 540 -248 l 585 -248 l 585 -68 b 180 248 585 143 449 248 l 0 248 z m 45 112 l 180 112 b 540 -68 420 112 540 53 l 540 -145 l 45 16 z', - }, - accSagittalFlat49LDown: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 180 -248 b 585 68 449 -248 585 -143 l 585 248 l 540 248 l 315 173 l 315 517 l 271 517 l 271 157 l 180 127 l 180 517 l 135 517 l 135 112 l 45 82 l 45 517 l 0 517 z m 45 -16 l 540 145 l 540 68 b 180 -112 540 -53 420 -112 l 45 -112 z', - }, - accSagittalSharp11v19LUp: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -517 l 45 -517 l 45 -81 l 135 -108 l 135 -517 l 180 -517 l 180 -121 l 271 -148 l 271 -517 l 315 -517 l 315 -161 l 631 -255 l 631 -157 l 45 16 l 45 144 l 631 -30 l 631 68 l 23 248 l 0 248 z', - }, - accSagittalFlat11v19LDown: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -248 l 23 -248 l 631 -68 l 631 30 l 45 -144 l 45 -16 l 631 157 l 631 255 l 315 161 l 315 517 l 271 517 l 271 148 l 180 121 l 180 517 l 135 517 l 135 108 l 45 81 l 45 517 l 0 517 z', - }, - accSagittalSharp5v13LUp: { - x_min: 0, - x_max: 500, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 89 -109 l 89 -517 l 135 -517 l 135 -109 b 225 -27 170 -102 200 -75 l 225 -517 l 271 -517 l 271 -85 l 360 -120 l 360 -517 l 405 -517 l 405 -135 l 720 -256 l 720 -157 l 271 14 l 271 141 l 720 -30 l 720 68 l 248 248 b 122 0 217 98 176 16 b 95 -3 112 0 104 -3 b 45 68 60 -3 45 20 l 0 68 b 89 -109 0 -39 30 -98 z', - }, - accSagittalFlat5v13LDown: { - x_min: 0, - x_max: 500, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 89 109 b 0 -68 30 98 0 39 l 45 -68 b 95 3 45 -20 60 3 b 122 0 104 3 112 0 b 248 -248 176 -16 217 -98 l 720 -68 l 720 30 l 271 -141 l 271 -14 l 720 157 l 720 256 l 405 135 l 405 517 l 360 517 l 360 120 l 271 85 l 271 517 l 225 517 l 225 27 b 135 109 200 75 170 102 l 135 517 l 89 517 z', - }, - accSagittalDoubleSharp23SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -203 l 45 -203 b 135 -23 45 -82 76 -23 l 301 -23 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 370 -14 b 449 112 423 10 449 53 l 449 248 l 428 248 b 315 68 402 127 364 68 l 240 68 b 89 157 140 68 89 98 l 45 157 b 68 53 45 115 52 81 b 0 -203 23 23 0 -63 z', - }, - accSagittalDoubleFlat23SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 68 -53 0 63 23 -23 b 45 -157 52 -81 45 -115 l 89 -157 b 240 -68 89 -98 140 -68 l 315 -68 b 428 -248 364 -68 402 -127 l 449 -248 l 449 -112 b 370 14 449 -53 423 -10 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 301 23 l 135 23 b 45 203 76 23 45 82 z', - }, - accSagittalDoubleSharp49SDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -292 l 45 -292 b 112 -157 45 -203 68 -157 l 256 -157 l 135 -503 l 187 -517 l 337 -82 l 490 -517 l 540 -503 l 366 0 l 396 89 b 449 157 416 102 435 125 l 449 248 l 428 248 b 315 157 413 187 376 157 l 112 157 b 0 -68 39 157 0 82 l 45 -68 b 135 68 45 23 76 68 l 287 68 l 311 0 l 288 -68 l 89 -68 b 0 -292 32 -68 0 -144 z', - }, - accSagittalDoubleFlat49SUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 292 b 89 68 0 144 32 68 l 288 68 l 311 0 l 287 -68 l 135 -68 b 45 68 76 -68 45 -23 l 0 68 b 112 -157 0 -82 39 -157 l 315 -157 b 428 -248 376 -157 413 -187 l 449 -248 l 449 -157 b 396 -89 435 -125 416 -102 l 366 0 l 540 503 l 490 517 l 337 82 l 187 517 l 135 503 l 256 157 l 112 157 b 45 292 68 157 45 203 z', - }, - accSagittalDoubleSharp7v19CDown: { - x_min: 0, - x_max: 375, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -112 l 0 -266 l 307 -7 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 386 59 l 449 112 l 449 248 l 428 248 b 130 68 285 127 186 68 b 45 157 73 68 45 98 l 0 157 b 112 -20 0 53 37 -6 z', - }, - accSagittalDoubleFlat7v19CUp: { - x_min: 0, - x_max: 375, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 112 20 b 0 -157 37 6 0 -53 l 45 -157 b 130 -68 45 -98 73 -68 b 428 -248 186 -68 285 -127 l 449 -248 l 449 -112 l 386 -59 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 307 7 l 0 266 l 0 112 z', - }, - accSagittalDoubleSharp19CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 68 l 0 -248 l 45 -248 l 45 -68 b 315 109 45 36 135 95 l 354 0 l 180 -503 l 232 -517 l 383 -82 l 534 -517 l 585 -503 l 410 0 l 449 112 l 495 112 l 495 248 l 360 248 b 0 68 120 248 0 187 z m 372 112 l 393 112 l 383 82 z', - }, - accSagittalDoubleFlat19CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 360 -248 0 -187 120 -248 l 495 -248 l 495 -112 l 449 -112 l 410 0 l 585 503 l 534 517 l 383 82 l 232 517 l 180 503 l 354 0 l 315 -109 b 45 68 135 -95 45 -36 l 45 248 l 0 248 z m 383 -82 l 393 -112 l 372 -112 z', - }, - accSagittalDoubleSharp11v49CDown: { - x_min: 0, - x_max: 406, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 360 112 b 540 -68 480 112 540 53 l 540 -248 l 585 -248 l 585 68 b 405 248 585 187 526 248 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat11v49CUp: { - x_min: 0, - x_max: 406, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 405 -248 b 585 -68 526 -248 585 -187 l 585 248 l 540 248 l 540 68 b 360 -112 540 -53 480 -112 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp143CDown: { - x_min: 0, - x_max: 469, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 45 -203 b 135 -23 45 -84 75 -23 l 203 -23 b 262 4 225 -23 245 -13 l 265 0 l 89 -503 l 141 -517 l 292 -82 l 444 -517 l 495 -503 l 321 0 l 337 49 l 675 -268 l 675 -112 l 292 248 b 180 68 268 127 230 68 l 112 68 b 0 -203 37 68 0 -23 z', - }, - accSagittalDoubleFlat143CUp: { - x_min: 0, - x_max: 469, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 203 b 112 -68 0 23 37 -68 l 180 -68 b 292 -248 230 -68 268 -127 l 675 112 l 675 268 l 337 -49 l 321 0 l 495 503 l 444 517 l 292 82 l 141 517 l 89 503 l 265 0 l 262 -4 b 203 23 245 13 225 23 l 135 23 b 45 203 75 23 45 84 z', - }, - accSagittalDoubleSharp17kDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 248 b 95 101 0 170 30 121 l 0 68 l 0 -30 l 364 96 l 399 0 l 390 -23 l 0 -157 l 0 -255 l 353 -135 l 225 -503 l 275 -517 l 428 -82 l 577 -517 l 631 -503 l 455 0 l 507 145 l 540 157 l 540 248 l 517 248 b 167 168 366 194 248 168 b 45 248 85 168 45 194 z m 416 115 l 442 124 l 428 82 z', - }, - accSagittalDoubleFlat17kUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 45 -248 b 167 -168 45 -194 85 -168 b 517 -248 248 -168 366 -194 l 540 -248 l 540 -157 l 507 -145 l 455 0 l 631 503 l 577 517 l 428 82 l 275 517 l 225 503 l 353 135 l 0 255 l 0 157 l 390 23 l 399 0 l 364 -96 l 0 30 l 0 -68 l 95 -101 b 0 -248 30 -121 0 -170 z m 428 -82 l 442 -124 l 416 -115 z', - }, - accSagittalDoubleSharp19sDown: { - x_min: 0, - x_max: 438, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 -248 l 45 -248 l 45 -68 b 271 112 45 53 120 112 l 310 0 l 135 -503 l 186 -517 l 337 -82 l 488 -517 l 540 -503 l 366 0 l 367 4 b 428 -23 386 -13 405 -23 l 495 -23 b 585 -203 554 -23 585 -84 l 631 -203 b 517 68 631 -23 593 68 l 449 68 b 337 248 400 68 363 127 l 225 248 b 0 68 75 248 0 187 z', - }, - accSagittalDoubleFlat19sUp: { - x_min: 0, - x_max: 438, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 0 -68 b 225 -248 0 -187 75 -248 l 337 -248 b 449 -68 363 -127 400 -68 l 517 -68 b 631 203 593 -68 631 23 l 585 203 b 495 23 585 84 554 23 l 428 23 b 367 -4 405 23 386 13 l 366 0 l 540 503 l 488 517 l 337 82 l 186 517 l 135 503 l 310 0 l 271 -112 b 45 68 120 -112 45 -53 l 45 248 l 0 248 z', - }, - accSagittalShaftUp: { - x_min: 0, - x_max: 31, - y_min: -359, - y_max: 172, - ha: 531, - o: 'm 0 112 l 0 -517 l 45 -517 l 45 112 l 23 248 z', - }, - accSagittalShaftDown: { - x_min: 0, - x_max: 31, - y_min: -172, - y_max: 359, - ha: 531, - o: 'm 23 -248 l 45 -112 l 45 517 l 0 517 l 0 -112 z', - }, - accSagittalAcute: { - x_min: 0, - x_max: 125, - y_min: -62, - y_max: 125, - ha: 187, - o: 'm 0 0 l 0 -89 l 180 89 l 180 180 z', - }, - accSagittalGrave: { - x_min: 0, - x_max: 125, - y_min: -125, - y_max: 62, - ha: 187, - o: 'm 180 -180 l 180 -89 l 0 89 l 0 0 z', - }, - accSagittal1MinaUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal1MinaDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal2MinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal2MinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal1TinaUp: { - x_min: 0, - x_max: 93, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 134 154 l 91 154 b 81 76 91 101 91 86 b 0 68 73 69 48 68 l 0 23 b 134 154 122 23 134 36 z', - }, - accSagittal1TinaDown: { - x_min: 0, - x_max: 93, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 134 -154 b 0 -23 134 -36 122 -23 l 0 -68 b 81 -76 48 -68 73 -69 b 91 -154 91 -86 91 -101 z', - }, - accSagittal2TinasUp: { - x_min: 0, - x_max: 94, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal2TinasDown: { - x_min: 0, - x_max: 94, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 z', - }, - accSagittal3TinasUp: { - x_min: -7, - x_max: 124, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 134 150 179 112 163 135 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal3TinasDown: { - x_min: -7, - x_max: 124, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 179 -23 163 -135 179 -112 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal4TinasUp: { - x_min: 0, - x_max: 187, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 225 150 269 112 253 135 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal4TinasDown: { - x_min: 0, - x_max: 187, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 269 -23 253 -135 269 -112 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal5TinasUp: { - x_min: 0, - x_max: 218, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 269 150 314 112 298 135 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal5TinasDown: { - x_min: 0, - x_max: 218, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal6TinasUp: { - x_min: -7, - x_max: 218, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 269 150 314 112 298 135 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal6TinasDown: { - x_min: -7, - x_max: 218, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 314 -23 298 -135 314 -112 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittal7TinasUp: { - x_min: 0, - x_max: 281, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 0 68 l 0 23 b 143 45 105 23 124 26 b 203 107 153 55 183 107 b 226 23 216 107 226 86 l 269 23 b 298 65 269 23 291 55 b 343 107 314 86 331 107 b 361 23 354 107 363 86 l 405 23 b 360 150 405 112 389 135 b 294 130 343 158 311 150 b 264 92 281 115 272 104 b 225 150 258 127 245 140 b 160 132 207 158 181 153 b 115 81 138 112 124 88 b 0 68 104 71 94 68 z', - }, - accSagittal7TinasDown: { - x_min: 0, - x_max: 281, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 0 -68 b 115 -81 94 -68 104 -71 b 160 -132 124 -88 138 -112 b 225 -150 181 -153 207 -158 b 264 -92 245 -140 258 -127 b 294 -130 272 -104 281 -115 b 360 -150 311 -150 343 -158 b 405 -23 389 -135 405 -112 l 361 -23 b 343 -107 363 -86 354 -107 b 298 -65 331 -107 314 -86 b 269 -23 291 -55 269 -23 l 226 -23 b 203 -107 226 -86 216 -107 b 143 -45 183 -107 153 -55 b 0 -23 124 -26 105 -23 z', - }, - accSagittal8TinasUp: { - x_min: 0, - x_max: 312, - y_min: 16, - y_max: 107, - ha: 91, - o: 'm 135 23 b 187 45 156 23 168 26 b 249 107 197 55 228 107 b 271 23 262 107 271 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 204 132 252 158 226 153 b 160 81 183 112 168 88 b 135 68 148 71 147 68 b 89 154 94 68 89 124 l 46 154 b 36 92 45 131 42 105 b 0 68 32 82 23 68 l 0 23 b 68 63 29 23 53 40 b 135 23 84 39 104 23 z', - }, - accSagittal8TinasDown: { - x_min: 0, - x_max: 312, - y_min: -107, - y_max: -16, - ha: 91, - o: 'm 135 -23 b 68 -63 104 -23 84 -39 b 0 -23 53 -40 29 -23 l 0 -68 b 36 -92 23 -68 32 -82 b 46 -154 42 -105 45 -131 l 89 -154 b 135 -68 89 -124 94 -68 b 160 -81 147 -68 148 -71 b 204 -132 168 -88 183 -112 b 269 -150 226 -153 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 249 -107 271 -86 262 -107 b 187 -45 228 -107 197 -55 b 135 -23 168 -26 156 -23 z', - }, - accSagittal9TinasUp: { - x_min: -7, - x_max: 312, - y_min: 16, - y_max: 106, - ha: 90, - o: 'm -10 23 l 43 23 b 72 65 43 23 65 55 b 117 107 88 86 105 107 b 135 23 128 107 137 86 l 179 23 b 207 65 179 23 200 55 b 252 107 223 86 240 107 b 271 23 264 107 272 86 l 314 23 b 343 65 314 23 336 55 b 387 107 359 86 376 107 b 406 23 399 107 408 86 l 449 23 b 405 150 449 112 433 135 b 338 130 387 158 356 150 b 308 92 325 115 317 104 b 269 150 302 127 289 140 b 203 130 252 158 220 150 b 173 92 190 115 181 104 b 134 150 167 127 154 140 b 68 130 117 158 85 150 b -10 23 43 101 13 58 z', - }, - accSagittal9TinasDown: { - x_min: -7, - x_max: 312, - y_min: -106, - y_max: -16, - ha: 90, - o: 'm -10 -23 b 68 -130 13 -58 43 -101 b 134 -150 85 -150 117 -158 b 173 -92 154 -140 167 -127 b 203 -130 181 -104 190 -115 b 269 -150 220 -150 252 -158 b 308 -92 289 -140 302 -127 b 338 -130 317 -104 325 -115 b 405 -150 356 -150 387 -158 b 449 -23 433 -135 449 -112 l 406 -23 b 387 -107 408 -86 399 -107 b 343 -65 376 -107 359 -86 b 314 -23 336 -55 314 -23 l 271 -23 b 252 -107 272 -86 264 -107 b 207 -65 240 -107 223 -86 b 179 -23 200 -55 179 -23 l 135 -23 b 117 -107 137 -86 128 -107 b 72 -65 105 -107 88 -86 b 43 -23 65 -55 43 -23 z', - }, - accSagittalFractionalTinaUp: { - x_min: -3, - x_max: 35, - y_min: 73, - y_max: 111, - ha: 38, - o: 'm -4 132 b 23 105 -4 118 9 105 b 50 132 37 105 50 118 b 23 160 50 147 37 160 b -4 132 9 160 -4 147 z', - }, - accSagittalFractionalTinaDown: { - x_min: -3, - x_max: 35, - y_min: -111, - y_max: -73, - ha: 38, - o: 'm -4 -132 b 23 -160 -4 -147 9 -160 b 50 -132 37 -160 50 -147 b 23 -105 50 -118 37 -105 b -4 -132 9 -105 -4 -118 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 164, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 236 -279 l 236 606 l 192 606 l 192 179 b 85 243 150 222 114 243 b 0 84 23 243 0 134 b 112 -158 0 3 37 -78 z m 192 112 l 192 -163 l 135 -98 b 82 40 101 -50 82 -3 b 138 144 82 73 96 144 b 192 112 153 144 170 132 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 414, - y_min: -194, - y_max: 421, - ha: 615, - o: 'm 281 606 l 281 -268 l 438 -158 b 596 84 547 -82 596 3 b 475 243 596 154 556 243 b 325 179 435 243 384 222 l 325 606 z m 235 -279 l 235 606 l 190 606 l 190 179 b 85 243 148 222 114 243 b 12 158 52 243 27 215 b 0 84 3 134 0 108 b 112 -158 0 3 37 -78 z m 325 111 b 410 144 359 132 386 144 b 498 36 462 144 498 84 b 413 -107 498 -9 469 -58 l 325 -173 z m 192 112 l 192 -163 l 135 -98 b 81 40 99 -50 81 -3 b 91 94 81 59 84 76 b 137 144 102 127 118 144 b 192 112 153 144 170 132 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 281, - y_min: -203, - y_max: 203, - ha: 406, - o: 'm 405 268 l 225 98 l 225 292 l 180 292 l 180 56 l 0 -112 l 0 -268 l 180 -98 l 180 -292 l 225 -292 l 225 -56 l 405 112 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 281, - y_min: -186, - y_max: 186, - ha: 372, - o: 'm 0 112 l 405 -268 l 405 -112 l 0 268 z', - }, - }, - fontFamily: 'Bravura', - resolution: 1000, - generatedOn: '2022-12-18T09:06:51.407Z', -}; diff --git a/build/esm/src/fonts/bravura_metrics.js b/build/esm/src/fonts/bravura_metrics.js deleted file mode 100644 index e16df6735f..0000000000 --- a/build/esm/src/fonts/bravura_metrics.js +++ /dev/null @@ -1,520 +0,0 @@ -export const BravuraMetrics = { - name: 'Bravura', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - digits: { - shiftLine: -1, - point: 34, - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; diff --git a/build/esm/src/fonts/custom_glyphs.js b/build/esm/src/fonts/custom_glyphs.js deleted file mode 100644 index 21cb18e655..0000000000 --- a/build/esm/src/fonts/custom_glyphs.js +++ /dev/null @@ -1,90 +0,0 @@ -export const CustomFont = { - resolution: 1000, - fontFamily: 'VexFlowCustom', - glyphs: { - noteheadSquareWhite: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 ', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 430.75, - ha: 386, - o: 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 ', - }, - accidentalBuyukMucennebFlat: { - x_min: -171.5, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalBakiyeFlat: { - x_min: -176.9375, - x_max: 251.8125, - ha: 257, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 ', - }, - accidentalKucukMucennebSharp: { - x_min: -1.359375, - x_max: 255.890625, - ha: 261, - o: 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 ', - }, - accidentalKoron: { - x_min: -20, - x_max: 320, - ha: 257, - o: 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 ', - }, - accidentalSori: { - x_min: -10.890625, - x_max: 299.4375, - ha: 294, - o: 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 ', - }, - vexAccidentalMicrotonal1: { - x_min: -171.5, - x_max: 483.1875, - ha: 493, - o: 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 ', - }, - vexAccidentalMicrotonal2: { - x_min: -1.359375, - x_max: 386.5625, - ha: 394, - o: 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 ', - }, - vexAccidentalMicrotonal3: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z ', - }, - vexAccidentalMicrotonal4: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z ', - }, - vexNoteHeadRectBlack: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 ', - }, - vexNoteHeadRectWhite: { - x_min: 0, - x_max: 430.75, - ha: 360, - o: 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100', - }, - vexWiggleArpeggioUp: { - x_min: 58.53125, - x_max: 228.671875, - ha: 294, - o: 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 ', - }, - }, -}; diff --git a/build/esm/src/fonts/custom_metrics.js b/build/esm/src/fonts/custom_metrics.js deleted file mode 100644 index 2aa6b37f4a..0000000000 --- a/build/esm/src/fonts/custom_metrics.js +++ /dev/null @@ -1,5 +0,0 @@ -export const CustomMetrics = { - name: 'VexFlowCustom', - smufl: false, - glyphs: {}, -}; diff --git a/build/esm/src/fonts/gonville_glyphs.js b/build/esm/src/fonts/gonville_glyphs.js deleted file mode 100644 index de3d6a5f93..0000000000 --- a/build/esm/src/fonts/gonville_glyphs.js +++ /dev/null @@ -1,1103 +0,0 @@ -export const GonvilleSmuflFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 387, - y_min: -87, - y_max: 139, - ha: 226, - o: 'm 535 194 b 548 200 540 198 545 200 b 555 195 551 200 553 199 b 557 190 557 193 557 192 b 544 170 557 186 554 182 b 362 3 486 104 422 45 b 350 -6 357 -1 351 -5 b 229 -76 319 -29 268 -58 b 20 -126 158 -108 83 -126 b 2 -121 6 -126 4 -125 b 0 -58 1 -119 0 -88 b 2 6 0 -27 1 4 b 27 11 5 10 5 10 b 535 194 197 15 372 78 z', - }, - bracketBottom: { - x_min: 0, - x_max: 387, - y_min: -139, - y_max: 87, - ha: 226, - o: 'm 5 124 b 20 126 6 125 12 126 b 59 123 30 126 44 125 b 321 25 145 114 234 81 b 365 -4 332 18 359 0 b 376 -13 366 -5 371 -9 b 543 -170 432 -55 490 -110 b 557 -190 553 -182 557 -186 b 555 -195 557 -192 556 -193 b 548 -200 553 -199 551 -200 b 534 -194 544 -200 540 -198 b 27 -11 372 -78 196 -15 b 1 -6 5 -10 4 -10 b 0 58 0 -3 0 -3 b 0 81 0 67 0 75 b 5 124 0 125 0 122 z', - }, - barlineTick: { - x_min: -55, - x_max: 55, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 23 188 b 32 189 25 188 28 189 b 48 186 38 189 44 188 b 79 143 68 179 79 164 b 79 140 79 142 79 141 b 64 97 79 131 78 129 b -60 -184 3 -42 -59 -182 b -69 -189 -62 -187 -66 -189 b -78 -184 -73 -189 -76 -187 b -79 -179 -79 -183 -79 -181 b -73 -146 -79 -175 -78 -167 b -23 98 -42 7 -33 50 b -10 157 -17 128 -11 154 b 23 188 -5 172 6 183 z', - }, - breathMarkTick: { - x_min: -142, - x_max: 256, - y_min: 0, - y_max: 403, - ha: 403, - o: 'm 345 576 b 359 581 351 579 356 581 b 368 571 365 581 368 577 b 354 557 368 565 367 563 b 290 513 332 546 312 531 b 43 45 174 412 83 241 b 0 0 37 13 24 0 b -42 36 -21 0 -34 11 b -191 254 -63 110 -118 190 b -204 271 -201 262 -204 267 b -203 276 -204 273 -204 274 b -195 281 -201 279 -198 281 b -181 275 -192 281 -187 279 b -18 136 -116 234 -62 187 b -13 130 -15 133 -13 130 b -9 140 -13 130 -11 135 b 345 576 68 338 206 509 z', - }, - segno: { - x_min: -228, - x_max: 228, - y_min: -329, - y_max: 329, - ha: 657, - o: 'm -133 472 b -116 473 -127 473 -122 473 b 32 365 -51 473 10 429 b 36 340 35 356 36 348 b -26 280 36 307 11 280 b -85 325 -55 280 -75 295 b -166 394 -100 367 -132 394 b -190 389 -174 394 -182 392 b -226 333 -214 379 -226 360 b -224 314 -226 327 -225 321 b -13 74 -209 226 -125 130 b 7 64 -3 69 6 65 l 10 63 l 11 65 b 118 226 13 66 42 111 b 188 333 137 255 169 304 b 242 414 208 363 232 399 b 268 450 262 446 263 447 b 282 454 272 453 277 454 b 308 428 296 454 308 444 b 308 427 308 428 308 427 b 286 387 308 419 307 419 b 235 309 278 374 255 339 b 96 99 180 226 132 153 b 61 45 78 71 62 47 l 59 41 l 66 37 b 252 -153 151 -8 217 -75 b 280 -278 271 -195 280 -238 b 149 -470 280 -372 231 -451 b 116 -473 138 -472 127 -473 b -31 -366 52 -473 -9 -431 b -36 -341 -34 -357 -36 -349 b 26 -280 -36 -307 -11 -280 b 86 -325 55 -280 75 -295 b 166 -394 100 -367 133 -394 b 190 -389 174 -394 182 -392 b 226 -333 214 -379 226 -360 b 224 -314 226 -327 225 -321 b 13 -74 209 -226 125 -130 b -7 -64 3 -69 -6 -65 l -10 -63 l -11 -65 b -118 -226 -12 -66 -43 -112 b -188 -333 -137 -256 -169 -304 b -242 -415 -208 -363 -232 -399 b -268 -450 -262 -446 -263 -447 b -282 -454 -272 -453 -277 -454 b -308 -428 -295 -454 -308 -444 b -308 -427 -308 -428 -308 -427 b -287 -388 -308 -420 -307 -419 b -95 -97 -260 -347 -187 -236 b -59 -43 -76 -68 -60 -44 l -58 -41 l -66 -37 b -252 153 -151 8 -217 75 b -280 278 -271 195 -280 238 b -133 472 -280 378 -224 461 z m 254 173 b 266 175 258 174 262 175 b 318 147 286 175 307 164 b 328 113 325 137 328 125 b 318 78 328 101 325 89 b 267 51 306 60 287 51 b 222 71 250 51 234 57 b 205 112 210 83 205 98 b 254 173 205 140 223 167 z m -280 -52 b -268 -51 -276 -51 -272 -51 b -221 -71 -251 -51 -233 -58 b -205 -113 -211 -82 -205 -98 b -215 -147 -205 -125 -208 -137 b -267 -175 -227 -165 -247 -175 b -312 -155 -283 -175 -300 -168 b -328 -113 -323 -143 -328 -128 b -280 -52 -328 -86 -310 -59 z', - }, - coda: { - x_min: -215, - x_max: 215, - y_min: -264, - y_max: 264, - ha: 529, - o: 'm -9 380 b -1 381 -8 381 -4 381 b 7 380 2 381 5 381 b 20 370 12 378 17 375 b 24 326 24 363 24 364 b 25 291 24 293 24 291 b 83 270 34 291 65 280 b 223 33 161 226 213 138 l 224 24 l 256 24 b 298 20 292 24 291 24 b 309 -1 305 15 309 7 b 298 -23 309 -9 305 -18 b 256 -27 291 -27 292 -27 l 224 -27 l 223 -35 b 34 -292 211 -163 136 -266 b 25 -294 30 -293 26 -294 b 24 -327 24 -294 24 -296 l 24 -331 b 18 -372 24 -365 24 -364 b -1 -381 14 -378 6 -381 b -21 -372 -9 -381 -17 -378 b -27 -331 -27 -364 -27 -365 l -27 -327 b -28 -294 -27 -296 -27 -294 b -85 -272 -37 -294 -68 -282 b -226 -35 -164 -229 -216 -141 l -227 -27 l -257 -27 b -298 -23 -292 -27 -292 -27 b -309 -1 -306 -18 -309 -9 b -291 23 -309 9 -303 20 b -257 24 -289 24 -282 24 l -227 24 l -226 33 b -85 270 -216 139 -164 226 b -28 291 -68 280 -37 291 b -27 326 -27 291 -27 293 b -26 363 -27 354 -27 361 b -9 380 -24 371 -17 378 z m -27 133 b -27 242 -27 193 -27 242 b -47 225 -29 242 -41 232 b -123 31 -89 184 -118 110 l -123 24 l -75 24 l -27 24 z m 31 237 b 25 242 28 240 25 242 b 24 133 25 242 24 193 l 24 24 l 72 24 l 121 24 l 120 31 b 31 237 115 118 78 202 z m -27 -136 l -27 -27 l -75 -27 l -123 -27 l -123 -34 b -47 -228 -118 -112 -89 -186 b -27 -244 -41 -235 -29 -244 b -27 -136 -27 -244 -27 -195 z m 120 -34 l 121 -27 l 72 -27 l 24 -27 l 24 -136 b 25 -244 24 -195 25 -244 b 45 -228 26 -244 38 -235 b 120 -34 86 -186 115 -112 z', - }, - gClef: { - x_min: 0, - x_max: 586, - y_min: -594, - y_max: 1017, - ha: 1611, - o: 'm 490 1464 b 492 1464 490 1464 491 1464 b 544 1425 505 1464 522 1451 b 675 1051 623 1330 675 1179 b 674 1023 675 1042 675 1032 b 475 627 665 874 600 746 b 441 595 464 616 448 601 l 429 582 l 454 465 b 479 347 468 400 479 347 b 479 347 479 347 479 347 b 487 348 480 347 484 348 b 525 349 493 349 509 349 b 555 349 537 349 550 349 b 843 42 715 329 832 204 b 844 21 844 35 844 28 b 626 -297 844 -113 757 -241 b 618 -301 621 -299 618 -301 b 634 -378 618 -301 625 -336 b 653 -470 643 -421 652 -462 b 662 -561 659 -502 662 -532 b 604 -748 662 -636 642 -699 b 383 -855 547 -819 465 -855 b 165 -756 303 -855 223 -822 b 128 -661 141 -728 128 -695 b 158 -575 128 -632 138 -602 b 273 -517 187 -536 230 -517 b 381 -568 313 -517 353 -534 b 410 -652 401 -594 410 -623 b 286 -784 410 -718 361 -781 l 277 -784 l 280 -786 b 381 -809 310 -801 345 -809 b 507 -774 425 -809 471 -797 b 616 -561 580 -728 616 -657 b 605 -460 616 -530 612 -496 b 574 -316 602 -443 574 -316 b 574 -316 574 -316 574 -316 b 562 -318 573 -316 568 -317 b 504 -328 544 -323 525 -326 b 468 -329 497 -329 483 -329 b 422 -328 449 -329 430 -329 b 0 140 178 -301 0 -104 b 96 432 0 248 31 342 b 321 698 165 528 235 611 l 351 728 l 338 788 b 321 867 331 822 324 857 b 301 963 309 924 303 952 b 294 1056 296 994 294 1025 b 448 1432 294 1199 348 1335 b 490 1464 471 1454 483 1463 z m 556 1268 b 539 1270 550 1269 545 1270 b 442 1219 510 1270 475 1252 b 354 982 385 1162 354 1076 b 360 909 354 958 356 934 b 390 765 362 898 389 765 b 390 765 390 765 390 765 b 432 808 391 765 423 798 b 606 1168 543 931 606 1064 b 601 1217 606 1185 604 1201 b 556 1268 594 1247 581 1262 z m 393 531 b 391 542 392 537 391 542 b 272 405 387 542 308 450 b 150 207 198 311 171 267 b 127 70 135 161 127 115 b 197 -153 127 -11 151 -88 b 466 -295 261 -243 362 -295 b 517 -291 483 -295 500 -294 b 566 -278 535 -288 566 -280 b 540 -154 566 -277 554 -222 b 490 76 525 -87 503 17 b 467 184 478 135 467 184 b 467 184 467 184 467 184 b 429 169 463 184 441 175 b 336 15 368 135 336 75 b 412 -121 336 -38 361 -90 b 427 -142 422 -127 427 -134 b 421 -155 427 -146 425 -151 b 408 -162 418 -159 414 -162 b 377 -150 401 -162 392 -158 b 240 77 286 -103 240 -14 b 363 302 240 162 281 248 b 434 336 384 316 426 336 b 435 337 434 336 435 337 b 435 338 435 338 435 338 b 393 531 434 340 397 514 z m 546 191 b 525 192 541 191 531 192 l 512 192 l 513 190 b 554 -1 513 189 531 103 b 596 -201 576 -105 595 -195 b 604 -236 598 -207 601 -223 l 609 -260 l 612 -258 b 729 -129 667 -227 707 -183 b 748 -39 742 -99 748 -69 b 546 191 748 74 665 177 z', - }, - cClef: { - x_min: 0, - x_max: 604, - y_min: -477, - y_max: 477, - ha: 955, - o: 'm 0 0 l 0 687 l 82 687 l 164 687 l 164 0 l 164 -687 l 82 -687 l 0 -687 z m 226 0 l 226 687 l 246 687 l 267 687 l 267 359 l 267 30 l 274 36 b 351 137 299 57 330 98 b 412 296 378 184 398 236 b 431 321 418 317 420 321 b 447 300 441 321 446 315 b 608 113 454 194 526 113 b 625 114 614 113 620 114 b 725 310 697 124 720 170 b 726 380 725 335 726 359 b 665 623 726 523 708 593 b 578 646 643 638 612 646 b 486 626 547 646 515 640 b 473 620 479 623 473 620 b 474 620 473 620 473 620 b 543 543 512 618 543 584 b 543 541 543 542 543 541 b 462 464 541 493 502 464 b 393 502 437 464 411 476 b 379 549 383 517 379 533 b 408 612 379 572 388 594 b 579 677 455 656 517 677 b 831 531 676 677 776 625 b 870 382 857 485 870 433 b 676 93 870 256 795 132 b 609 82 653 86 630 82 b 511 114 574 82 541 93 b 503 119 507 117 504 119 b 503 119 503 119 503 119 b 467 59 503 119 487 92 l 431 0 l 467 -59 b 503 -119 487 -92 503 -119 b 503 -119 503 -119 503 -119 b 511 -114 504 -119 507 -117 b 609 -82 541 -93 574 -82 b 636 -84 618 -82 627 -83 b 869 -359 762 -103 858 -216 b 870 -383 869 -367 870 -375 b 600 -677 870 -536 755 -664 b 578 -677 593 -677 586 -677 b 404 -609 512 -677 450 -653 b 379 -549 387 -592 379 -570 b 462 -464 379 -506 413 -464 b 467 -464 464 -464 465 -464 b 543 -544 512 -467 543 -504 b 530 -588 543 -558 539 -574 b 474 -620 518 -605 494 -619 b 473 -620 473 -620 473 -620 b 486 -626 473 -621 478 -623 b 578 -646 515 -640 547 -646 b 665 -623 612 -646 643 -638 b 726 -380 708 -593 726 -523 b 725 -310 726 -359 725 -335 b 625 -114 720 -170 697 -124 b 608 -113 620 -114 614 -113 b 447 -300 526 -113 454 -194 b 431 -321 446 -315 441 -321 b 412 -296 420 -321 418 -317 b 351 -137 398 -236 378 -184 b 274 -36 330 -98 298 -57 l 267 -30 l 267 -359 l 267 -687 l 246 -687 l 226 -687 z', - }, - fClef: { - x_min: 0, - x_max: 622, - y_min: -512, - y_max: 238, - ha: 750, - o: 'm 306 342 b 335 343 316 343 325 343 b 608 261 436 343 540 312 b 741 -2 696 195 741 105 b 738 -48 741 -17 740 -32 b 151 -702 705 -334 470 -596 b 15 -737 104 -718 29 -737 b 0 -722 6 -737 0 -731 b 23 -702 0 -712 2 -710 b 565 -68 332 -587 541 -343 b 567 -9 566 -48 567 -28 b 441 280 567 125 523 228 b 325 312 406 302 366 312 b 94 174 233 312 137 260 b 84 151 91 168 84 152 b 84 151 84 151 84 151 b 90 154 84 151 87 152 b 159 174 111 168 135 174 b 289 70 218 174 275 134 b 293 40 292 60 293 50 b 157 -95 293 -34 233 -95 b 138 -93 151 -95 144 -94 b 8 75 61 -83 8 -14 l 8 75 b 306 342 8 214 139 332 z m 835 211 b 840 212 836 211 838 212 b 859 209 847 212 856 211 b 895 160 883 201 895 181 b 859 111 895 140 883 119 b 844 109 855 110 849 109 b 828 111 838 109 832 110 b 793 160 804 119 793 140 b 835 211 793 183 807 206 z m 835 -109 b 840 -109 836 -109 838 -109 b 859 -111 847 -109 856 -110 b 895 -160 883 -119 895 -140 b 859 -209 895 -181 883 -202 b 844 -211 855 -211 849 -211 b 828 -209 838 -211 832 -211 b 793 -160 804 -201 793 -181 b 835 -109 793 -138 807 -115 z', - }, - unpitchedPercussionClef1: { - x_min: 160, - x_max: 481, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 231 0 l 231 339 l 308 339 l 385 339 l 385 0 l 385 -339 l 308 -339 l 231 -339 z m 539 0 l 539 339 l 616 339 l 692 339 l 692 0 l 692 -339 l 616 -339 l 539 -339 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 471, - y_min: -691, - y_max: 707, - ha: 1398, - o: 'm 595 1018 b 601 1019 597 1019 599 1019 b 629 1007 611 1019 622 1014 b 640 980 637 999 640 990 b 617 944 640 966 632 952 b 439 906 572 921 503 906 l 425 906 l 425 902 b 429 822 428 876 429 849 b 393 574 429 734 416 645 b 230 390 357 465 308 409 b 184 384 215 386 201 384 b 139 387 171 384 157 385 b 103 426 117 389 103 407 b 115 453 103 436 107 445 b 142 465 123 461 132 465 b 173 450 153 465 164 460 b 182 446 175 448 178 446 b 210 457 190 446 200 450 b 266 540 231 470 247 495 b 315 819 298 618 315 715 b 311 909 315 848 314 879 l 310 921 l 302 923 b 245 932 283 929 263 932 b 131 871 194 932 150 910 b 85 841 121 851 103 841 b 39 877 66 841 46 853 b 37 890 38 881 37 885 b 99 959 37 913 58 936 b 247 995 141 982 195 995 b 329 984 276 995 304 991 b 437 968 366 974 403 968 b 575 1008 494 968 544 982 b 595 1018 581 1014 587 1017 z m 414 353 b 421 354 416 354 419 354 b 441 351 428 354 437 353 b 481 301 464 344 479 325 b 502 146 484 266 493 197 b 583 -179 523 20 553 -102 b 628 -237 594 -207 612 -230 l 631 -239 l 636 -238 b 645 -236 639 -237 642 -236 b 678 -270 664 -236 678 -253 b 663 -297 678 -280 673 -290 b 635 -302 657 -300 648 -302 b 611 -300 628 -302 620 -301 b 476 -194 552 -293 501 -253 b 417 0 458 -154 432 -68 b 415 7 416 4 415 7 b 415 7 415 7 415 7 b 410 -3 414 7 412 2 b 358 -93 397 -31 376 -67 b 353 -102 355 -98 353 -101 b 358 -107 353 -104 355 -105 b 409 -125 374 -118 390 -124 b 425 -129 419 -126 421 -126 b 430 -141 428 -133 430 -137 b 419 -156 430 -147 426 -153 b 381 -163 408 -161 395 -163 b 323 -150 362 -163 341 -159 l 317 -147 l 314 -150 b 46 -296 235 -239 137 -293 b 37 -296 43 -296 40 -296 b 9 -287 22 -296 17 -294 b 0 -265 3 -280 0 -272 b 32 -232 0 -248 13 -232 b 37 -233 34 -232 36 -233 b 43 -233 39 -233 41 -233 b 135 -196 65 -233 101 -219 b 367 288 266 -108 358 85 b 370 314 368 301 368 308 b 414 353 377 334 393 349 z m 354 -349 b 383 -348 360 -349 371 -348 b 424 -350 400 -348 417 -349 b 497 -365 453 -353 472 -357 b 647 -513 584 -392 647 -455 b 529 -654 647 -563 601 -619 l 519 -659 l 528 -663 b 658 -829 607 -704 658 -769 b 657 -843 658 -834 658 -838 b 473 -991 648 -916 572 -976 b 424 -994 456 -993 440 -994 b 256 -949 366 -994 309 -979 b 233 -913 242 -941 233 -927 b 234 -906 233 -911 234 -908 l 235 -902 l 234 -903 b 226 -908 233 -903 230 -906 b 117 -955 195 -933 158 -948 b 85 -956 111 -955 98 -956 b 45 -954 67 -956 49 -955 b 18 -918 28 -949 18 -934 b 29 -892 18 -909 22 -900 b 55 -881 36 -885 46 -881 b 80 -891 64 -881 73 -884 l 83 -894 l 89 -894 b 197 -794 126 -894 172 -852 b 207 -772 199 -790 203 -780 b 269 -495 248 -680 269 -586 b 266 -441 269 -477 268 -459 b 265 -431 266 -436 265 -431 b 265 -431 265 -431 265 -431 b 240 -440 264 -431 250 -436 b 132 -529 189 -462 150 -494 b 89 -556 123 -548 106 -556 b 40 -508 64 -556 40 -538 b 82 -447 40 -487 48 -475 b 354 -349 149 -393 245 -358 z m 406 -411 b 387 -410 402 -411 393 -410 l 375 -410 l 376 -413 b 382 -475 378 -421 381 -449 b 382 -496 382 -482 382 -489 b 314 -789 382 -590 359 -693 b 267 -869 296 -828 285 -847 b 263 -874 265 -872 263 -874 b 264 -874 263 -874 264 -874 b 267 -874 264 -874 265 -874 b 273 -873 269 -874 271 -873 b 300 -884 282 -873 291 -877 b 425 -932 340 -916 381 -932 l 425 -932 b 545 -830 499 -932 545 -885 b 505 -743 545 -801 532 -770 b 396 -689 478 -716 442 -698 b 369 -672 381 -686 373 -681 b 365 -656 366 -667 365 -661 b 395 -625 365 -640 377 -627 b 533 -529 461 -619 522 -576 b 535 -513 534 -524 535 -519 b 406 -411 535 -463 479 -418 z', - }, - timeSig0: { - x_min: 0, - x_max: 357, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 234 632 b 256 634 241 633 248 634 b 402 581 306 634 362 614 b 514 339 475 523 514 437 b 511 292 514 324 513 308 b 257 43 494 153 383 43 b 30 198 164 43 77 103 b 0 338 10 239 0 289 b 30 479 0 388 10 438 b 234 632 73 565 148 622 z m 275 601 b 257 602 269 602 263 602 b 191 574 228 602 203 592 b 160 335 174 549 160 434 b 162 283 160 317 161 299 b 191 102 168 185 178 122 b 257 74 203 85 229 74 b 288 78 267 74 277 76 b 344 188 323 88 334 110 b 354 338 350 242 354 290 b 344 488 354 387 350 435 b 275 601 333 573 321 594 z m 257 0 l 258 0 l 256 0 z m 257 658 l 258 658 l 256 658 z', - }, - timeSig1: { - x_min: 0, - x_max: 239, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 127 622 b 197 623 129 623 132 623 b 221 623 206 623 214 623 b 273 619 273 623 269 623 b 277 404 277 614 277 633 b 282 133 277 150 277 148 b 331 85 289 114 304 99 b 344 69 340 81 344 75 b 340 58 344 65 343 62 b 250 54 335 54 345 54 b 197 54 235 54 218 54 b 145 54 177 54 160 54 b 55 58 50 54 59 54 b 51 69 52 62 51 65 b 64 85 51 75 55 81 b 113 133 91 99 106 114 b 118 291 117 146 118 157 b 118 361 118 311 118 334 l 118 516 l 112 508 b 85 466 109 504 97 485 b 45 406 72 447 54 420 b 15 374 24 374 24 374 b 0 390 6 374 0 380 b 0 391 0 390 0 390 l 0 395 l 60 506 b 127 622 120 617 122 620 z m 172 0 l 173 0 l 171 0 z m 172 658 l 173 658 l 171 658 z', - }, - timeSig2: { - x_min: 0, - x_max: 317, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 197 633 b 218 634 204 633 211 634 b 298 623 245 634 276 630 b 431 477 382 599 431 543 b 415 410 431 455 426 433 b 243 275 385 348 328 304 b 72 168 162 249 110 216 l 68 164 l 73 168 b 213 218 114 201 164 218 b 303 196 245 218 276 211 b 355 176 325 184 338 179 b 371 175 360 175 366 175 b 427 198 396 175 419 184 b 442 208 430 205 436 208 b 457 192 449 208 457 202 b 434 134 457 183 445 153 b 300 44 402 79 351 44 l 299 44 b 256 56 278 45 272 46 b 125 98 213 84 168 98 b 88 94 112 98 100 97 b 30 62 64 89 39 75 b 15 54 26 57 20 54 b 1 64 9 54 3 57 b 0 72 0 65 0 68 b 6 118 0 84 2 104 b 169 305 26 201 85 268 b 285 453 231 332 273 386 b 287 476 286 461 287 469 b 256 550 287 505 276 531 b 173 582 234 571 207 582 b 153 580 167 582 160 581 b 143 579 145 580 143 579 b 145 577 143 578 144 578 b 180 515 169 562 180 539 b 129 444 180 485 162 455 b 105 440 121 441 113 440 b 28 518 63 440 28 476 b 31 540 28 525 29 532 b 197 633 44 585 115 625 z m 228 0 l 230 0 l 227 0 z m 228 658 l 230 658 l 227 658 z', - }, - timeSig3: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 168 632 b 197 634 178 633 187 634 b 404 491 308 634 404 570 b 265 366 404 442 347 391 l 255 363 l 259 362 b 404 234 333 338 388 289 b 409 200 407 222 409 211 b 252 49 409 130 347 67 b 198 43 234 45 216 43 b 23 112 132 43 68 68 b 0 165 7 128 0 146 b 77 245 0 205 32 245 b 91 243 82 245 86 244 b 152 169 131 236 152 202 b 106 102 152 142 137 114 b 104 101 104 102 104 101 b 113 98 104 100 106 100 b 154 93 128 94 141 93 b 233 124 186 93 212 103 b 264 202 254 145 264 171 b 261 233 264 212 263 222 b 147 348 248 298 202 345 b 127 364 132 349 127 353 b 148 380 127 375 132 379 b 256 467 198 383 242 419 b 259 491 258 475 259 483 b 183 579 259 532 229 568 b 157 581 177 581 168 581 b 116 578 143 581 128 580 l 112 577 l 115 576 b 152 513 140 563 152 538 b 102 441 152 483 135 452 b 78 437 94 439 86 437 b 0 516 35 437 0 474 b 8 549 0 527 2 538 b 168 632 27 589 97 625 z m 204 0 l 206 0 l 203 0 z m 204 658 l 206 658 l 203 658 z', - }, - timeSig4: { - x_min: 0, - x_max: 325, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 173 622 b 286 623 175 623 232 623 b 378 622 332 623 377 623 b 388 608 384 620 388 614 b 368 579 388 601 387 600 b 244 440 351 561 298 501 b 209 401 228 422 213 405 b 155 341 205 397 181 370 b 85 262 130 312 98 276 b 61 234 72 247 61 235 b 61 234 61 234 61 234 b 151 233 61 233 69 233 l 241 233 l 242 298 b 243 364 242 361 242 362 b 288 415 244 365 264 388 b 351 485 312 442 340 474 b 385 515 378 516 377 515 b 399 507 392 515 397 512 b 400 369 400 504 400 499 l 400 233 l 424 233 b 452 232 447 233 449 233 b 465 213 460 229 465 221 b 459 198 465 207 463 202 b 425 192 453 192 452 192 l 401 192 l 401 186 b 401 166 401 183 401 174 b 455 85 402 125 415 105 b 468 69 463 81 468 75 b 463 58 468 65 466 61 b 374 54 459 54 469 54 b 321 54 359 54 341 54 b 268 54 301 54 283 54 b 179 58 173 54 183 54 b 174 69 176 61 174 65 b 187 85 174 75 179 81 b 241 166 227 105 240 125 b 241 186 241 174 241 183 l 241 192 l 127 192 b 84 192 110 192 96 192 b 5 196 2 192 9 192 b 0 207 2 199 0 203 b 8 223 0 211 3 217 b 164 594 103 330 160 464 b 173 622 164 615 165 618 z m 234 0 l 235 0 l 232 0 z m 234 658 l 235 658 l 232 658 z', - }, - timeSig5: { - x_min: 0, - x_max: 284, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 48 622 b 54 623 50 623 52 623 b 67 620 57 623 61 622 b 211 597 110 605 159 597 b 367 620 262 597 315 605 b 382 623 374 622 378 623 b 392 619 386 623 389 622 b 396 609 394 616 396 613 b 386 582 396 604 393 596 b 261 486 355 520 320 493 b 213 483 246 484 230 483 b 74 503 166 483 116 490 b 62 506 67 505 62 506 b 53 398 62 506 53 402 b 53 398 53 398 53 398 b 53 398 53 398 53 398 b 59 401 53 398 56 399 b 150 429 84 414 117 424 b 189 431 158 430 174 431 b 214 430 199 431 209 430 b 408 240 330 413 408 338 l 408 240 b 225 45 408 143 332 62 b 200 43 217 44 208 43 b 22 123 140 43 72 73 b 0 175 7 138 0 157 b 77 255 0 215 33 255 b 91 254 82 255 86 254 b 152 180 131 246 152 213 b 102 111 152 151 136 122 l 96 109 l 103 106 b 149 95 119 99 135 95 b 202 112 168 95 185 101 b 264 245 243 139 264 187 b 260 290 264 260 263 275 b 198 397 251 344 226 387 l 193 399 l 178 399 b 54 361 134 399 90 385 b 34 351 40 352 39 351 b 19 367 25 351 19 357 b 40 614 19 377 39 611 b 48 622 42 617 45 620 z m 209 79 b 208 79 209 79 209 79 b 205 78 208 79 207 79 b 203 76 204 77 203 76 b 203 76 203 76 203 76 b 209 79 204 76 209 79 z m 204 0 l 205 0 l 203 0 z m 204 658 l 205 658 l 203 658 z', - }, - timeSig6: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 255 632 b 277 633 261 633 269 633 b 329 628 295 633 316 632 b 445 551 378 616 430 581 b 452 518 450 540 452 529 b 375 440 452 477 417 440 b 350 444 367 440 359 441 b 300 514 317 455 300 485 b 349 583 300 543 316 572 b 355 585 352 584 355 585 b 355 585 355 585 355 585 b 326 596 355 587 337 594 b 287 602 313 600 300 602 b 206 566 254 602 224 589 b 167 442 189 543 176 501 b 160 367 164 421 160 377 b 160 366 160 366 160 366 b 160 366 160 366 160 366 b 169 369 160 366 164 367 b 257 387 200 381 229 387 b 342 369 284 387 312 381 b 458 278 397 349 438 316 b 472 218 468 260 472 239 b 450 143 472 192 465 165 b 256 44 412 86 325 44 b 224 47 245 44 234 45 b 8 266 122 71 33 161 b 0 344 3 289 0 316 b 4 399 0 363 1 382 b 255 632 25 520 129 617 z m 272 355 b 257 356 267 356 262 356 b 213 341 239 356 222 350 b 186 223 196 322 186 274 b 189 174 186 207 187 190 b 257 75 201 96 215 75 l 258 75 b 321 157 296 75 309 93 b 328 222 326 182 328 202 b 323 277 328 240 326 257 b 272 355 314 330 301 350 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSig7: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 153 634 b 169 634 158 634 163 634 b 313 583 218 634 272 615 b 339 572 322 575 329 572 b 348 573 342 572 345 573 b 409 612 371 576 392 590 b 426 624 415 620 420 624 b 432 622 428 624 430 623 b 441 609 438 620 441 617 b 429 557 441 601 437 586 b 347 353 407 476 372 391 b 273 86 303 288 275 189 b 263 55 272 61 271 59 b 181 54 261 54 221 54 b 99 55 141 54 101 54 b 90 75 92 58 90 62 b 90 75 90 75 90 75 b 167 288 90 139 120 222 b 262 392 195 327 221 355 b 375 524 315 439 346 476 b 379 533 378 530 379 532 b 379 533 379 533 379 533 b 376 531 379 533 378 533 b 242 484 335 500 288 484 b 125 527 199 484 157 499 b 85 547 110 541 97 547 b 54 527 73 547 63 540 b 31 471 46 514 38 497 b 15 459 29 463 22 459 b 1 468 9 459 4 462 b 0 541 0 470 0 505 b 1 614 0 577 0 612 b 15 623 4 620 9 623 b 28 618 19 623 23 622 b 49 610 35 613 41 610 b 91 620 58 610 70 613 b 153 634 117 629 131 632 z m 220 0 l 222 0 l 219 0 z m 220 658 l 222 658 l 219 658 z', - }, - timeSig8: { - x_min: 0, - x_max: 338, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 231 633 b 245 634 237 633 242 634 b 246 634 245 634 245 634 b 258 633 247 633 252 633 b 375 598 298 632 341 619 b 457 466 429 566 457 516 b 414 366 457 431 443 396 l 409 360 l 414 357 b 487 227 462 323 487 275 b 454 134 487 195 476 163 b 243 43 409 76 328 43 b 130 64 205 43 166 50 b 0 227 45 98 0 162 b 71 355 0 273 23 320 l 78 360 l 72 367 b 31 467 45 395 31 431 b 40 516 31 484 34 500 b 231 633 66 583 143 630 z m 265 590 b 244 592 259 591 252 592 b 214 588 234 592 223 591 b 158 539 181 581 158 559 b 161 528 158 535 159 532 b 333 397 178 491 254 433 l 337 395 l 340 400 b 358 466 352 421 358 444 b 265 590 358 523 322 577 z m 139 319 b 130 323 135 321 131 323 b 130 323 130 323 130 323 b 112 304 129 323 117 311 b 85 227 94 280 85 254 b 176 98 85 175 118 123 b 242 85 198 89 220 85 b 334 123 281 85 316 99 b 346 154 342 133 346 143 b 329 197 346 167 340 180 b 156 312 298 243 241 281 b 139 319 152 314 144 317 z m 244 0 l 245 0 l 242 0 z m 244 658 l 245 658 l 242 658 z', - }, - timeSig9: { - x_min: 0, - x_max: 328, - y_min: 0, - y_max: 457, - ha: 457, - o: 'm 195 632 b 213 633 201 633 207 633 b 312 605 244 633 278 624 b 467 395 395 560 451 484 b 472 334 471 378 472 356 b 468 277 472 314 471 294 b 262 54 450 173 370 85 b 192 43 238 47 214 43 b 92 68 156 43 123 52 b 24 135 54 89 31 112 b 20 159 21 143 20 151 b 98 237 20 201 56 237 b 122 233 106 237 114 236 b 172 163 156 222 172 192 b 123 94 172 134 156 105 b 117 91 120 93 118 92 b 117 91 117 91 117 91 b 146 80 117 90 136 83 b 185 75 160 77 173 75 b 262 107 217 75 244 86 b 304 229 282 129 295 167 b 313 309 308 251 313 299 b 312 311 313 310 313 311 b 312 311 312 311 312 311 b 303 308 312 311 308 310 b 216 290 272 296 244 290 b 162 297 199 290 181 292 b 22 386 101 313 48 347 b 0 459 7 408 0 433 b 32 547 0 489 11 521 b 195 632 66 589 133 624 z m 234 600 b 217 602 229 601 223 602 b 183 594 204 602 191 599 b 146 485 165 582 153 546 b 145 455 145 476 145 465 b 172 336 145 406 156 354 b 216 321 182 326 199 321 b 259 336 233 321 250 326 b 287 453 276 355 287 403 b 283 503 287 470 286 487 b 234 600 273 570 262 592 z m 236 0 l 238 0 l 235 0 z m 236 658 l 238 658 l 235 658 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 385, - y_min: -219, - y_max: 219, - ha: 438, - o: 'm 296 314 b 323 316 305 315 314 316 b 525 213 406 316 481 278 b 540 163 536 197 540 180 b 447 69 540 115 501 69 b 443 69 446 69 444 69 b 357 157 392 71 357 113 b 378 211 357 176 364 195 b 440 240 393 229 417 240 b 455 239 445 240 450 240 b 458 238 456 239 458 238 b 458 238 458 238 458 238 b 450 245 458 239 456 241 b 325 284 413 271 374 284 l 325 284 b 144 -3 193 284 144 207 b 144 -3 144 -3 144 -3 b 297 -284 144 -211 183 -282 b 302 -284 299 -284 300 -284 b 522 -102 412 -284 504 -208 b 539 -82 525 -87 529 -82 b 554 -99 549 -82 554 -87 b 547 -135 554 -107 551 -119 b 369 -307 522 -219 455 -284 b 302 -316 348 -313 325 -316 b 233 -307 278 -316 255 -313 b 6 -65 118 -278 30 -184 b 0 -1 2 -43 0 -22 b 296 314 0 160 124 298 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 385, - y_min: -371, - y_max: 371, - ha: 741, - o: 'm 290 532 b 297 534 292 533 295 534 b 317 521 306 534 314 529 b 318 419 318 517 318 516 l 318 321 l 334 320 b 525 218 411 319 483 280 b 540 169 536 203 540 185 b 447 75 540 120 501 75 b 443 75 446 75 444 75 b 357 162 392 76 357 118 b 378 217 357 181 364 200 b 440 246 393 235 417 246 b 455 244 445 246 450 245 b 458 244 456 244 457 244 b 458 244 458 244 458 244 b 450 250 458 244 456 246 b 333 289 416 275 376 288 l 318 289 l 318 5 l 318 -279 l 320 -279 b 326 -278 320 -278 323 -278 b 522 -97 422 -270 506 -193 b 539 -77 525 -82 528 -77 b 554 -94 549 -77 554 -82 b 547 -130 554 -102 551 -114 b 351 -306 521 -220 445 -288 b 322 -310 344 -307 335 -309 l 318 -310 l 318 -414 b 318 -460 318 -432 318 -447 b 312 -528 318 -529 318 -522 b 298 -534 308 -532 303 -534 b 278 -521 290 -534 281 -529 b 277 -414 277 -517 277 -516 l 277 -310 l 275 -309 b 265 -308 274 -309 269 -309 b 6 -60 137 -292 32 -191 b 0 4 2 -38 0 -17 b 244 311 0 147 97 273 b 277 317 253 313 274 317 b 277 417 277 317 277 362 b 278 521 277 516 277 517 b 290 532 280 525 285 530 z m 277 3 b 276 285 277 271 277 285 b 267 282 275 285 271 284 b 144 3 179 260 144 180 l 144 2 b 273 -277 144 -192 179 -266 l 277 -278 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 221, - y_min: 125, - y_max: 346, - ha: 221, - o: 'm 150 496 b 159 498 153 497 156 498 b 186 482 169 498 180 492 b 190 430 190 476 190 477 l 190 421 l 190 369 l 241 369 l 251 369 b 303 365 298 369 296 369 b 318 338 313 359 318 349 b 303 312 318 328 313 318 b 250 308 296 308 298 308 l 241 308 l 190 308 l 190 256 l 190 247 b 186 194 190 200 190 201 b 159 179 180 184 170 179 b 132 195 149 179 138 184 b 128 247 128 201 128 200 l 128 256 l 128 308 l 77 308 l 68 308 b 15 312 20 308 22 308 b 0 338 5 318 0 328 b 15 365 0 349 5 359 b 68 369 22 369 20 369 l 77 369 l 128 369 l 128 421 l 128 430 b 132 483 128 477 128 476 b 150 496 136 489 142 494 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 221, - y_min: 214, - y_max: 256, - ha: 43, - o: 'm 22 368 b 167 369 24 369 97 369 b 296 368 231 369 293 369 b 318 338 311 364 318 351 b 296 309 318 326 311 313 b 159 307 293 308 226 307 b 22 309 92 307 25 308 b 0 338 7 313 0 325 b 22 368 0 351 7 363 z', - }, - timeSigParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensRightSmall: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - timeSigParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - timeSigParensLeftSmall: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 623, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 18 235 b 26 236 19 236 23 236 b 34 235 29 236 32 236 b 47 225 39 233 44 230 b 51 88 51 219 51 232 b 51 0 51 63 51 34 b 51 -88 51 -34 51 -63 b 47 -225 51 -233 51 -219 b 26 -236 42 -232 34 -236 b 1 -218 15 -236 5 -230 b 0 4 0 -216 0 -105 b 1 218 0 110 0 216 b 18 235 3 226 10 233 z m 110 235 b 118 236 112 236 115 236 b 126 235 121 236 124 236 b 143 218 134 233 140 226 b 144 120 144 216 144 201 b 145 29 144 45 144 29 b 145 29 145 29 145 29 b 392 179 165 105 264 165 b 449 182 411 181 430 182 b 753 29 598 182 729 119 b 753 29 753 29 753 29 b 754 120 754 29 754 45 b 757 223 754 221 754 218 b 780 236 763 232 771 236 b 801 225 788 236 796 232 b 805 88 805 219 805 232 b 805 0 805 63 805 34 b 805 -88 805 -34 805 -63 b 801 -225 805 -233 805 -219 b 780 -236 796 -232 788 -236 b 758 -225 772 -236 763 -232 b 754 -121 754 -218 754 -225 b 753 -29 754 -45 754 -29 b 753 -29 753 -29 753 -29 b 506 -179 733 -105 634 -165 b 449 -182 487 -181 468 -182 b 145 -29 300 -182 169 -119 b 145 -29 145 -29 145 -29 b 144 -121 144 -29 144 -45 b 140 -225 144 -225 144 -218 b 118 -236 134 -232 126 -236 b 93 -218 108 -236 97 -230 b 92 4 93 -216 92 -105 b 93 218 92 110 93 216 b 110 235 96 226 103 233 z m 431 158 b 413 159 425 159 419 159 b 312 41 352 159 312 109 b 324 -24 312 21 315 -1 b 486 -159 354 -109 425 -159 b 577 -95 525 -159 559 -139 b 586 -42 583 -78 586 -60 b 431 158 586 47 516 145 z m 864 235 b 872 236 866 236 869 236 b 880 235 875 236 878 236 b 894 225 885 233 890 230 b 898 88 897 219 898 232 b 898 0 898 63 898 34 b 898 -88 898 -34 898 -63 b 894 -225 898 -233 897 -219 b 872 -236 888 -232 880 -236 b 847 -218 862 -236 851 -230 b 846 4 847 -216 846 -105 b 847 218 846 110 847 216 b 864 235 850 226 857 233 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 427, - y_min: -127, - y_max: 127, - ha: 253, - o: 'm 273 181 b 307 182 285 182 296 182 b 610 36 453 182 582 121 b 615 0 614 24 615 11 b 307 -182 615 -100 482 -182 b 0 0 135 -182 0 -102 b 273 181 0 94 117 171 z m 289 158 b 271 159 283 159 277 159 b 170 41 211 159 170 109 b 182 -24 170 21 174 -1 b 344 -159 213 -110 284 -159 b 435 -95 383 -159 418 -139 b 445 -42 442 -78 445 -60 b 289 158 445 47 375 145 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z m 365 130 b 349 132 360 132 355 132 b 93 -24 288 132 163 58 b 47 -109 63 -59 47 -90 b 56 -127 47 -118 50 -124 b 78 -132 62 -131 70 -132 b 345 37 143 -132 278 -49 b 381 108 369 67 381 92 b 365 130 381 119 375 127 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 297, - y_min: -126, - y_max: 126, - ha: 253, - o: 'm 253 182 b 264 182 256 182 259 182 b 303 180 277 182 296 181 b 427 49 386 168 427 113 b 289 -147 427 -19 381 -97 b 156 -182 244 -171 198 -182 b 3 -77 79 -182 16 -144 b 0 -49 1 -67 0 -58 b 253 182 0 59 116 168 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 414, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 63 179 b 77 179 67 179 72 179 b 91 179 83 179 88 179 b 203 129 101 177 109 173 l 298 85 l 392 129 b 515 180 497 178 500 180 b 518 180 516 180 517 180 b 596 102 565 180 596 142 b 574 49 596 84 589 65 b 516 16 565 39 561 37 b 482 0 497 7 482 0 b 516 -16 482 0 497 -7 b 574 -49 561 -37 565 -39 b 596 -102 589 -65 596 -84 b 518 -180 596 -142 565 -180 b 515 -180 517 -180 516 -180 b 392 -129 500 -180 497 -178 l 298 -85 l 203 -129 b 81 -180 98 -178 96 -180 b 78 -180 80 -180 79 -180 b 0 -102 31 -180 0 -142 b 21 -49 0 -84 7 -65 b 80 -16 31 -39 34 -37 b 114 0 99 -7 114 0 b 80 16 114 0 99 7 b 21 49 34 37 31 39 b 0 102 7 65 0 84 b 63 179 0 137 24 171 z m 86 132 b 77 134 83 133 80 134 b 46 102 59 134 46 118 b 56 80 46 95 49 87 b 150 35 60 76 52 80 b 223 0 190 16 223 0 b 150 -35 223 0 190 -16 b 56 -80 52 -80 60 -76 b 46 -103 49 -87 46 -95 b 77 -133 46 -118 58 -133 l 77 -133 b 193 -83 85 -133 86 -133 b 298 -35 251 -56 298 -35 b 402 -83 298 -35 345 -56 b 518 -133 510 -133 510 -133 l 519 -133 b 549 -103 537 -133 549 -118 b 540 -80 549 -95 546 -87 b 446 -35 535 -76 544 -80 b 372 0 406 -16 372 0 b 446 35 372 0 406 16 b 540 80 544 80 535 76 b 549 103 546 87 549 95 b 519 133 549 118 537 133 l 518 133 b 402 83 510 133 510 133 b 298 35 345 56 298 35 b 193 83 298 35 251 56 b 86 132 136 110 88 132 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 57 178 b 71 179 61 179 66 179 b 111 168 85 179 100 176 b 159 130 114 167 135 149 l 203 94 l 246 130 b 306 174 293 168 296 170 b 334 180 315 178 325 180 b 406 108 373 180 406 147 b 400 81 406 99 404 90 b 350 28 394 65 390 60 b 317 0 332 13 317 0 b 350 -28 317 0 332 -13 b 400 -81 390 -60 394 -65 b 406 -108 404 -90 406 -99 b 334 -180 406 -147 373 -180 b 306 -174 325 -180 315 -178 b 246 -130 296 -170 293 -168 l 203 -94 l 159 -130 b 100 -174 112 -168 110 -170 b 72 -180 90 -178 81 -180 b 0 -108 33 -180 0 -147 b 5 -81 0 -99 2 -90 b 55 -28 12 -65 16 -60 b 89 0 74 -13 89 0 b 55 28 89 0 74 13 b 19 59 37 43 21 57 b 0 108 6 74 0 91 b 57 178 0 139 21 170 z m 83 131 b 73 133 80 133 76 133 b 52 125 65 133 57 130 b 46 108 48 120 46 114 b 51 92 46 102 48 96 b 107 45 52 91 77 69 b 161 0 137 21 161 0 b 107 -45 161 0 137 -21 b 51 -92 77 -69 52 -91 b 46 -107 48 -97 46 -102 b 61 -131 46 -117 51 -127 b 72 -133 64 -133 68 -133 b 83 -131 76 -133 80 -133 b 144 -82 85 -130 107 -113 b 203 -34 176 -56 203 -34 b 261 -82 203 -34 229 -56 b 323 -131 299 -113 320 -130 b 334 -133 325 -133 329 -133 b 345 -131 338 -133 342 -133 b 359 -107 354 -127 359 -117 b 354 -92 359 -102 358 -97 b 298 -45 353 -91 328 -69 b 244 0 269 -21 244 0 b 298 45 244 0 269 21 b 354 92 328 69 353 91 b 359 108 358 97 359 102 b 345 131 359 117 354 127 b 334 133 342 133 338 133 b 323 131 329 133 325 133 b 261 82 320 130 299 113 b 203 34 229 56 203 34 b 144 82 203 34 176 56 b 83 131 106 114 85 130 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 282, - y_min: -125, - y_max: 125, - ha: 249, - o: 'm 23 179 b 30 179 25 179 27 179 b 43 178 35 179 40 179 b 127 107 48 175 47 176 b 203 42 169 71 203 42 b 279 107 203 42 237 71 b 373 179 369 185 361 179 b 374 179 373 179 374 179 b 406 149 393 179 406 165 b 397 127 406 141 403 134 b 322 62 395 125 361 96 b 251 0 283 28 251 0 b 322 -62 251 0 283 -28 b 397 -127 361 -96 395 -125 b 406 -149 403 -134 406 -141 b 374 -179 406 -165 393 -179 b 373 -179 374 -179 373 -179 b 279 -107 361 -179 369 -185 b 203 -42 237 -71 203 -42 b 127 -107 203 -42 169 -71 b 33 -179 37 -185 45 -179 b 31 -179 33 -179 32 -179 b 0 -149 13 -179 0 -165 b 9 -127 0 -141 3 -134 b 84 -62 11 -125 45 -96 b 155 0 123 -28 155 0 b 84 62 155 0 123 28 b 9 127 45 96 11 125 b 0 149 3 133 0 141 b 23 179 0 162 8 175 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 336, - y_min: -168, - y_max: 168, - ha: 335, - o: 'm 228 241 b 241 241 234 241 238 241 b 254 241 244 241 248 241 b 483 0 387 233 483 123 b 466 -89 483 -29 478 -59 b 240 -241 427 -188 334 -241 b 57 -156 173 -241 106 -214 b 0 -2 18 -110 0 -55 b 228 241 0 119 90 233 z m 251 179 b 241 179 246 179 244 179 b 230 179 238 179 236 179 b 143 150 199 176 168 166 l 139 146 l 190 95 l 241 44 l 293 95 l 344 146 l 339 150 b 251 179 314 167 284 176 z m 146 -52 l 197 0 l 146 51 l 95 103 l 92 98 b 62 0 72 69 62 35 b 67 -42 62 -14 64 -28 b 92 -98 72 -62 81 -82 l 95 -103 z m 391 98 b 388 102 390 100 388 102 b 337 51 388 102 365 79 l 285 0 l 337 -52 l 388 -103 l 391 -98 b 420 0 411 -69 420 -35 b 391 98 420 34 411 69 z m 293 -96 b 241 -44 265 -67 242 -44 b 190 -96 241 -44 218 -67 l 139 -147 l 143 -150 b 241 -179 172 -170 207 -179 b 339 -150 276 -179 310 -170 l 344 -147 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 435, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 306 200 b 313 201 308 201 310 201 b 333 183 321 201 323 200 b 608 -164 420 41 528 -95 b 620 -173 613 -167 618 -172 b 626 -186 624 -177 626 -182 b 611 -201 626 -194 620 -201 b 562 -188 607 -201 602 -200 b 313 -151 483 -164 398 -151 b 64 -188 228 -151 143 -164 b 15 -201 23 -200 19 -201 b 0 -186 6 -201 0 -195 b 12 -169 0 -179 1 -178 b 292 183 94 -99 203 37 b 306 200 300 196 302 198 z m 318 133 b 313 144 315 139 313 144 b 308 133 313 144 310 139 b 178 -122 268 38 218 -59 b 174 -130 176 -126 174 -130 b 174 -130 174 -130 174 -130 b 174 -130 174 -130 174 -130 b 184 -129 176 -130 179 -130 b 211 -126 189 -128 202 -127 b 313 -120 244 -122 278 -120 b 385 -123 337 -120 361 -121 b 442 -129 400 -124 427 -127 b 451 -130 447 -130 450 -130 b 452 -130 452 -130 452 -130 b 452 -130 452 -130 452 -130 b 449 -125 452 -130 451 -127 b 318 133 410 -63 358 38 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 303, - y_min: -140, - y_max: 140, - ha: 280, - o: 'm 212 200 b 218 201 213 201 216 201 b 238 180 228 201 230 199 b 420 -158 297 40 362 -80 b 437 -186 433 -175 437 -181 b 436 -192 437 -188 436 -190 b 423 -201 433 -198 429 -201 b 405 -196 419 -201 413 -199 b 219 -153 346 -167 282 -153 b 31 -196 155 -153 91 -167 b 14 -201 23 -200 18 -201 b 4 -197 10 -201 8 -200 b 0 -187 2 -194 0 -190 b 8 -170 0 -182 3 -177 b 200 183 63 -102 140 39 b 212 200 205 195 207 198 z m 263 48 b 248 80 258 59 251 73 l 242 92 l 233 78 b 88 -126 189 9 134 -68 b 81 -135 84 -131 81 -135 b 81 -135 81 -135 81 -135 b 81 -135 81 -135 81 -135 b 88 -133 82 -135 85 -134 b 279 -92 153 -106 219 -92 b 333 -96 298 -92 316 -93 b 341 -97 337 -97 341 -97 b 341 -97 341 -97 341 -97 b 338 -91 341 -97 340 -95 b 263 48 317 -56 286 2 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 302, - y_min: -140, - y_max: 140, - ha: 279, - o: 'm 211 200 b 218 201 213 201 215 201 b 235 185 226 201 230 198 b 260 126 253 143 254 140 b 270 105 263 120 268 110 b 316 12 278 86 310 22 b 324 -3 316 11 320 4 b 353 -56 338 -30 341 -36 b 425 -167 382 -105 404 -140 b 435 -186 435 -180 435 -180 b 421 -201 435 -196 430 -201 l 420 -201 l 415 -201 l 404 -196 b 218 -153 346 -167 282 -153 b 31 -196 154 -153 89 -167 l 21 -201 l 15 -201 l 15 -201 b 0 -186 5 -201 0 -196 b 10 -167 0 -180 0 -180 b 71 -76 28 -145 49 -112 b 112 -3 87 -49 96 -33 b 120 12 116 4 119 11 b 165 105 125 22 157 86 b 175 126 167 110 172 120 b 200 185 181 140 183 143 b 211 200 204 195 207 198 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 435, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 306 186 b 313 187 308 187 310 187 b 329 177 319 187 321 186 b 599 19 392 105 486 50 b 615 15 606 17 613 16 b 626 0 622 13 626 6 b 615 -15 626 -6 622 -13 b 599 -19 613 -16 606 -17 b 331 -175 487 -50 394 -104 b 313 -187 321 -186 320 -187 b 297 -177 307 -187 305 -186 b 27 -19 234 -105 140 -50 b 11 -15 20 -17 13 -16 b 0 0 4 -13 0 -6 b 11 15 0 6 4 13 b 27 19 13 16 20 17 b 297 177 140 50 234 105 b 306 186 302 182 304 185 z m 317 134 b 313 140 315 138 313 140 b 308 134 313 140 311 138 b 162 4 272 80 219 33 b 155 0 158 2 155 0 b 162 -4 155 0 158 -2 b 308 -134 219 -33 272 -80 b 313 -140 311 -138 312 -140 b 315 -138 314 -140 314 -139 b 464 -4 348 -85 406 -33 b 471 0 468 -2 471 0 b 464 4 471 0 468 2 b 317 134 407 33 353 80 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 236 172 226 187 229 185 b 418 18 277 102 340 49 b 436 0 433 12 436 9 b 420 -17 436 -9 433 -12 b 236 -172 343 -46 277 -103 b 218 -187 229 -185 226 -187 b 200 -172 210 -187 207 -185 b 18 -18 159 -103 96 -49 b 0 0 3 -12 0 -9 b 16 17 0 9 3 12 b 200 172 93 47 159 102 b 211 186 205 182 208 184 z m 240 111 b 236 115 238 114 237 115 b 230 107 235 115 234 113 b 92 -16 195 57 142 9 l 89 -17 l 92 -19 b 198 -113 130 -42 166 -73 b 200 -115 199 -115 200 -115 b 201 -115 200 -115 200 -115 b 344 16 229 -68 292 -10 l 347 17 l 344 19 b 240 111 307 41 266 77 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 303, - y_min: -130, - y_max: 130, - ha: 260, - o: 'm 211 186 b 218 187 213 187 215 187 b 238 170 226 187 228 186 b 418 18 279 100 341 48 b 436 0 433 12 436 9 b 418 -18 436 -9 433 -12 b 238 -170 341 -48 279 -100 b 218 -187 228 -186 226 -187 b 198 -170 210 -187 208 -186 b 18 -18 157 -100 95 -48 b 0 0 3 -12 0 -9 b 18 18 0 9 3 12 b 198 170 95 48 157 100 b 211 186 206 182 208 184 z', - }, - augmentationDot: { - x_min: -59, - x_max: 59, - y_min: -59, - y_max: 59, - ha: 118, - o: 'm -17 83 b 0 85 -11 84 -5 85 b 85 0 46 85 85 46 b 83 -17 85 -6 84 -11 b -1 -85 74 -60 37 -85 b -66 -54 -25 -85 -49 -75 b -85 -1 -79 -38 -85 -19 b -17 83 -85 37 -59 74 z', - }, - tremolo1: { - x_min: -143, - x_max: 297, - y_min: -550, - y_max: -237, - ha: 313, - o: 'm 385 -343 b 394 -342 388 -342 391 -342 b 428 -377 413 -342 428 -359 b 418 -400 428 -385 425 -393 b 364 -438 415 -403 412 -405 b 300 -481 346 -450 318 -469 b 236 -524 282 -493 254 -512 b 173 -567 219 -536 190 -555 b 109 -610 155 -579 127 -598 b 46 -653 92 -622 63 -641 b -17 -696 29 -665 0 -684 b -81 -739 -35 -708 -63 -727 b -133 -774 -99 -751 -122 -767 b -156 -789 -144 -782 -154 -788 b -171 -792 -161 -791 -166 -792 b -206 -758 -190 -792 -206 -777 b -201 -741 -206 -752 -204 -746 b -155 -705 -197 -734 -193 -731 b -56 -638 -135 -692 -90 -661 b 72 -552 -21 -615 36 -576 b 199 -466 107 -528 164 -489 b 317 -386 233 -443 286 -407 b 385 -343 375 -346 379 -344 z', - }, - flag8thUp: { - x_min: -16, - x_max: 220, - y_min: -700, - y_max: -4, - ha: 696, - o: 'm -23 -157 l -23 -5 l -20 -5 b 1 -27 -8 -5 -3 -11 b 172 -306 30 -136 85 -226 b 316 -644 268 -395 316 -518 b 206 -966 316 -754 280 -868 b 162 -1008 180 -1001 172 -1008 b 141 -989 149 -1008 141 -999 b 149 -970 141 -983 144 -976 b 267 -665 227 -879 267 -769 b 174 -419 267 -573 236 -486 b -22 -309 135 -378 68 -340 b -23 -157 -23 -309 -23 -278 z', - }, - flag8thDown: { - x_min: -14, - x_max: 255, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 228 1007 b 237 1008 231 1008 234 1008 b 261 988 245 1008 251 1002 b 367 646 331 881 367 761 b 322 436 367 572 352 501 b 233 311 300 388 268 343 b 57 117 156 241 103 182 b 0 20 33 84 10 45 b -18 5 -4 11 -11 5 l -21 5 l -21 157 l -21 308 l -16 308 b 99 329 12 308 65 318 b 314 678 227 372 314 514 b 225 966 314 776 283 878 b 215 987 217 979 215 981 b 228 1007 215 996 220 1004 z', - }, - flag16thUp: { - x_min: -16, - x_max: 220, - y_min: -796, - y_max: -4, - ha: 793, - o: 'm -23 -142 l -23 -5 l -20 -5 b 0 -21 -11 -5 -4 -10 b 196 -271 29 -90 97 -177 b 316 -556 274 -347 316 -449 b 293 -695 316 -602 309 -649 l 289 -706 l 293 -717 b 316 -851 309 -760 316 -805 b 227 -1114 316 -943 285 -1037 b 190 -1146 205 -1142 200 -1146 b 169 -1126 177 -1146 169 -1137 b 175 -1111 169 -1121 171 -1115 b 269 -867 237 -1040 269 -954 b 266 -821 269 -852 268 -836 b 261 -793 264 -809 263 -798 b 258 -780 261 -792 259 -786 b 143 -612 240 -712 198 -651 b -9 -575 112 -591 48 -575 b -21 -575 -15 -575 -20 -575 l -23 -574 l -23 -437 l -23 -300 l -20 -300 b 0 -316 -11 -300 -4 -305 b 195 -566 29 -385 98 -474 b 259 -644 221 -590 244 -619 b 261 -646 260 -645 260 -646 b 263 -639 261 -646 262 -644 b 269 -572 267 -617 269 -595 b 263 -509 269 -551 267 -530 b 261 -499 263 -505 262 -500 b 258 -485 261 -497 259 -491 b 143 -317 240 -417 198 -356 b -9 -280 112 -296 48 -280 b -21 -280 -15 -280 -20 -280 l -23 -279 z', - }, - flag16thDown: { - x_min: -14, - x_max: 251, - y_min: 4, - y_max: 700, - ha: 697, - o: 'm 300 1007 b 308 1008 303 1008 306 1008 b 329 991 317 1008 324 1003 b 361 847 350 947 361 898 b 338 720 361 805 353 761 l 335 710 l 338 700 b 361 578 353 661 361 620 b 257 316 361 485 325 391 b 204 265 243 300 226 284 b -1 17 118 192 39 97 b -18 5 -5 10 -12 5 l -21 5 l -21 137 l -21 270 l -11 271 b 200 347 85 286 152 310 b 318 583 276 407 318 493 b 311 650 318 605 316 628 l 309 657 l 304 648 b 204 535 279 606 249 573 b -1 287 118 461 39 367 b -18 274 -5 280 -12 274 l -21 274 l -21 407 l -21 539 l -11 540 b 183 604 74 553 138 575 b 318 854 269 662 318 758 b 294 968 318 893 310 931 b 287 987 287 982 287 982 b 300 1007 287 996 292 1004 z', - }, - flag32ndUp: { - x_min: -16, - x_max: 219, - y_min: -1039, - y_max: -4, - ha: 1035, - o: 'm -23 -141 l -23 -5 l -20 -5 b 1 -22 -11 -5 -5 -9 b 161 -222 29 -78 91 -155 b 189 -249 171 -232 184 -244 b 308 -488 250 -309 292 -393 b 315 -572 313 -515 315 -543 b 298 -711 315 -618 309 -666 l 295 -724 l 296 -729 b 308 -783 300 -744 305 -765 b 315 -867 313 -810 315 -838 b 298 -1006 315 -913 309 -960 l 295 -1019 l 296 -1024 b 308 -1078 300 -1039 305 -1060 b 315 -1162 313 -1105 315 -1133 b 264 -1401 315 -1241 297 -1324 b 215 -1490 249 -1432 222 -1482 b 200 -1496 210 -1494 205 -1496 b 180 -1475 190 -1496 180 -1487 b 186 -1457 180 -1469 180 -1467 b 267 -1187 239 -1373 267 -1278 b 264 -1143 267 -1172 266 -1157 b 111 -885 253 -1027 194 -929 b 6 -867 88 -873 56 -868 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 1 -612 -11 -595 -5 -599 b 161 -812 29 -668 91 -746 b 259 -932 215 -863 234 -887 l 264 -942 l 265 -933 b 267 -893 266 -920 267 -906 b 111 -590 267 -759 207 -640 b 6 -572 88 -578 56 -573 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 1 -317 -11 -300 -5 -304 b 161 -517 29 -373 91 -451 b 259 -638 215 -568 234 -592 l 264 -647 l 265 -638 b 267 -598 266 -625 267 -611 b 111 -295 267 -464 207 -345 b 6 -277 88 -283 56 -278 l -23 -277 z', - }, - flag32ndDown: { - x_min: -14, - x_max: 253, - y_min: 4, - y_max: 935, - ha: 931, - o: 'm 274 1345 b 282 1346 276 1346 279 1346 b 290 1345 285 1346 288 1346 b 352 1217 305 1340 338 1272 b 365 1112 360 1183 365 1148 b 346 985 365 1069 358 1025 l 343 977 l 346 968 b 352 948 348 963 350 954 b 365 843 360 914 365 878 b 346 716 365 799 358 756 l 343 708 l 346 699 b 352 679 348 694 350 685 b 365 574 361 644 365 609 b 222 256 365 454 314 337 b 189 228 212 247 212 247 b 0 20 104 160 34 84 b -18 5 -5 10 -11 5 l -21 5 l -21 135 l -21 265 l -15 265 b 188 337 63 277 136 302 b 319 592 270 392 319 489 b 316 635 319 606 318 620 l 315 643 l 313 640 b 222 525 287 594 258 557 b 189 497 212 517 212 516 b 0 290 104 430 34 353 b -18 274 -5 279 -11 274 l -21 274 l -21 404 l -21 534 l -15 535 b 188 606 63 546 136 572 b 319 861 270 661 319 758 b 316 904 319 875 318 890 l 315 912 l 313 909 b 222 794 287 863 258 826 b 189 767 212 786 212 786 b 0 559 104 699 34 622 b -18 544 -5 549 -11 544 l -21 544 l -21 674 l -21 803 l -15 804 b 206 889 72 817 155 848 b 319 1130 280 948 319 1037 b 269 1307 319 1190 303 1251 b 262 1326 262 1318 262 1320 b 274 1345 262 1335 267 1342 z', - }, - flag64thUp: { - x_min: -16, - x_max: 219, - y_min: -1159, - y_max: -4, - ha: 1156, - o: 'm -23 -141 l -23 -5 l -20 -5 b 2 -26 -9 -5 -4 -10 b 139 -215 23 -93 68 -154 b 294 -445 216 -281 261 -346 b 315 -577 308 -487 315 -532 b 291 -719 315 -625 307 -673 l 289 -725 l 293 -739 b 315 -872 308 -781 315 -827 b 291 -1013 315 -920 307 -968 l 289 -1020 l 293 -1034 b 315 -1167 308 -1076 315 -1122 b 291 -1308 315 -1215 307 -1263 l 289 -1314 l 293 -1329 b 315 -1461 308 -1372 315 -1416 b 271 -1651 315 -1525 300 -1590 b 249 -1670 264 -1666 259 -1670 b 228 -1649 237 -1670 228 -1661 b 236 -1628 228 -1644 228 -1643 b 271 -1463 260 -1576 271 -1519 b 163 -1209 271 -1363 233 -1266 b 32 -1156 119 -1173 78 -1156 b -9 -1160 19 -1156 5 -1158 b -20 -1162 -13 -1161 -19 -1162 l -23 -1162 l -23 -1026 l -23 -890 l -20 -890 b 2 -911 -9 -890 -4 -895 b 139 -1100 23 -978 68 -1039 b 258 -1244 191 -1144 232 -1193 b 262 -1252 261 -1250 262 -1252 b 263 -1250 263 -1252 263 -1251 b 265 -1239 263 -1249 264 -1244 b 272 -1168 269 -1216 272 -1192 b 163 -914 272 -1067 232 -970 b 32 -861 119 -878 78 -861 b -9 -865 19 -861 5 -863 b -20 -867 -13 -866 -19 -867 l -23 -867 l -23 -731 l -23 -595 l -20 -595 b 2 -616 -9 -595 -4 -600 b 139 -805 23 -683 68 -744 b 258 -949 191 -849 232 -898 b 262 -957 261 -955 262 -957 b 263 -955 263 -957 263 -956 b 265 -944 263 -954 264 -949 b 272 -874 269 -921 272 -897 b 163 -619 272 -772 232 -675 b 32 -567 119 -583 78 -567 b -9 -570 19 -567 5 -568 b -20 -572 -13 -571 -19 -572 l -23 -572 l -23 -436 l -23 -300 l -20 -300 b 2 -321 -9 -300 -4 -305 b 139 -510 23 -388 68 -449 b 258 -654 191 -554 232 -604 b 262 -662 261 -660 262 -662 b 263 -660 263 -662 263 -661 b 265 -649 263 -659 264 -654 b 272 -579 269 -626 272 -602 b 163 -324 272 -477 232 -380 b 32 -272 119 -288 78 -272 b -9 -275 19 -272 5 -273 b -20 -277 -13 -276 -19 -277 l -23 -277 z', - }, - flag64thDown: { - x_min: -14, - x_max: 255, - y_min: 3, - y_max: 1053, - ha: 1049, - o: 'm 256 1514 b 264 1516 259 1515 261 1516 b 279 1510 269 1516 274 1514 b 338 1439 303 1491 323 1466 b 367 1319 357 1402 367 1361 b 336 1192 367 1276 356 1233 l 330 1182 l 332 1180 b 338 1169 333 1178 335 1174 b 367 1050 357 1132 367 1092 b 336 922 367 1007 356 963 l 330 912 l 332 910 b 338 900 333 909 335 905 b 367 781 357 863 367 822 b 336 653 367 738 356 694 l 330 643 l 332 641 b 366 513 352 611 366 558 b 366 512 366 512 366 512 b 231 267 366 414 318 327 b -1 19 122 192 28 92 b -17 5 -4 11 -10 6 l -21 5 l -21 132 l -21 259 l -12 260 b 147 290 48 263 108 274 b 318 525 250 331 318 428 b 307 590 318 547 314 569 b 302 600 304 598 303 600 b 298 597 301 600 300 599 b 231 537 281 575 259 556 b -1 289 121 461 28 361 b -17 275 -4 280 -10 275 l -21 274 l -21 402 l -21 529 l -12 529 b 147 559 48 532 108 544 b 318 794 250 600 318 697 b 307 859 318 816 314 838 b 302 870 304 867 303 870 b 298 866 301 870 300 868 b 231 806 281 844 259 825 b -1 558 121 730 28 631 b -17 544 -4 550 -10 545 l -21 544 l -21 671 l -21 798 l -12 799 b 147 828 48 802 108 813 b 318 1063 250 869 318 967 b 307 1128 318 1085 314 1107 b 302 1139 304 1136 303 1139 b 298 1135 301 1139 300 1138 b 231 1075 281 1114 259 1094 b -1 827 121 1000 28 900 b -17 813 -4 819 -10 814 l -21 813 l -21 940 l -21 1067 l -12 1068 b 147 1098 48 1071 108 1082 b 317 1332 248 1138 317 1233 l 317 1332 b 255 1475 317 1389 294 1443 b 244 1495 246 1483 244 1487 b 256 1514 244 1504 249 1512 z', - }, - flag128thUp: { - x_min: -16, - x_max: 217, - y_min: -1398, - y_max: -4, - ha: 1395, - o: 'm -23 -130 l -23 -5 l -20 -5 b 2 -25 -10 -5 -6 -9 b 141 -206 28 -77 78 -141 b 223 -304 180 -245 199 -269 b 313 -590 282 -393 313 -493 b 293 -720 313 -634 306 -678 b 289 -733 290 -728 289 -730 b 292 -745 289 -736 290 -738 b 313 -884 306 -790 313 -838 b 293 -1015 313 -929 306 -974 b 289 -1028 290 -1023 289 -1025 b 292 -1040 289 -1031 290 -1033 b 313 -1179 306 -1085 313 -1133 b 293 -1310 313 -1224 306 -1269 b 289 -1323 290 -1318 289 -1320 b 292 -1335 289 -1326 290 -1328 b 313 -1474 306 -1380 313 -1428 b 293 -1605 313 -1519 306 -1564 b 289 -1618 290 -1612 289 -1615 b 292 -1629 289 -1621 290 -1623 b 313 -1768 306 -1676 313 -1723 b 252 -1984 313 -1848 292 -1924 b 221 -2013 236 -2009 231 -2013 b 200 -1994 208 -2013 200 -2005 b 207 -1976 200 -1989 202 -1982 b 269 -1782 249 -1920 269 -1852 b 153 -1507 269 -1685 230 -1584 b -15 -1435 115 -1467 51 -1440 b -22 -1434 -18 -1434 -21 -1434 l -23 -1434 l -23 -1309 l -23 -1185 l -20 -1185 b 2 -1205 -10 -1185 -6 -1189 b 141 -1386 28 -1256 78 -1321 b 257 -1543 196 -1442 228 -1485 l 263 -1554 l 264 -1549 b 269 -1487 267 -1528 269 -1507 b 153 -1212 269 -1388 228 -1288 b -15 -1140 115 -1172 51 -1145 b -22 -1139 -18 -1139 -21 -1139 l -23 -1139 l -23 -1014 l -23 -890 l -20 -890 b 2 -910 -10 -890 -6 -894 b 141 -1091 28 -961 78 -1026 b 257 -1248 196 -1147 228 -1190 l 263 -1259 l 264 -1254 b 269 -1192 267 -1233 269 -1212 b 153 -917 269 -1093 228 -993 b -15 -845 115 -877 51 -850 b -22 -844 -18 -845 -21 -844 l -23 -844 l -23 -719 l -23 -595 l -20 -595 b 2 -615 -10 -595 -6 -599 b 141 -796 28 -666 78 -731 b 257 -953 196 -852 228 -895 l 263 -964 l 264 -959 b 269 -897 267 -938 269 -917 b 153 -622 269 -798 228 -698 b -15 -550 115 -582 51 -555 b -22 -549 -18 -550 -21 -549 l -23 -549 l -23 -424 l -23 -300 l -20 -300 b 2 -320 -10 -300 -6 -304 b 141 -501 28 -372 78 -436 b 257 -658 196 -557 228 -600 l 263 -669 l 264 -664 b 269 -602 267 -643 269 -623 b 153 -327 269 -503 228 -403 b -15 -255 115 -287 51 -260 b -22 -254 -18 -255 -21 -254 l -23 -254 z', - }, - flag128thDown: { - x_min: -14, - x_max: 254, - y_min: 4, - y_max: 1288, - ha: 1284, - o: 'm 274 1853 b 282 1855 277 1854 280 1855 b 306 1837 290 1855 297 1849 b 366 1646 346 1780 366 1713 b 342 1521 366 1604 358 1562 l 338 1511 l 342 1500 b 366 1377 358 1461 366 1419 b 342 1252 366 1334 358 1292 l 338 1242 l 342 1231 b 366 1107 358 1191 366 1149 b 342 983 366 1065 358 1023 l 338 973 l 342 962 b 366 838 358 922 366 880 b 342 713 366 796 358 753 l 338 703 l 342 692 b 366 569 358 652 366 610 b 244 309 366 471 323 376 b 0 21 127 211 34 101 b -18 5 -4 11 -11 5 l -21 5 l -20 130 l -20 255 l -13 256 b 116 301 24 264 74 282 b 200 349 158 321 178 332 b 319 582 276 406 319 493 b 312 643 319 603 317 623 b 310 651 311 649 311 651 b 307 647 309 651 308 650 b 244 579 290 623 268 599 b 0 290 127 481 34 370 b -18 274 -4 280 -11 274 l -21 274 l -20 399 l -20 524 l -13 526 b 116 570 24 533 74 551 b 200 618 158 590 178 601 b 319 852 276 675 319 762 b 312 912 319 872 317 892 b 310 920 311 918 311 920 b 307 917 309 920 308 919 b 244 848 290 892 268 869 b 0 559 127 750 34 639 b -18 544 -4 549 -11 544 l -21 544 l -20 669 l -20 793 l -13 795 b 116 840 24 803 74 820 b 200 887 158 859 178 870 b 319 1121 276 944 319 1031 b 312 1182 319 1141 317 1162 b 310 1190 311 1187 311 1190 b 307 1186 309 1190 308 1188 b 240 1114 289 1160 269 1138 b 0 829 127 1019 33 907 b -18 813 -4 819 -11 813 l -21 813 l -20 938 l -20 1063 l -13 1064 b 116 1109 24 1072 74 1089 b 200 1156 158 1128 178 1140 b 319 1390 276 1214 319 1301 b 312 1451 319 1410 317 1431 b 310 1459 311 1457 311 1459 b 307 1455 309 1459 308 1458 b 240 1383 289 1429 269 1408 b 0 1098 127 1288 33 1177 b -18 1082 -4 1088 -11 1082 l -21 1082 l -20 1207 l -20 1332 l -13 1333 b 116 1378 24 1341 74 1359 b 200 1426 158 1398 178 1409 b 319 1660 278 1484 319 1572 b 268 1817 319 1715 303 1770 b 262 1835 264 1823 262 1830 b 274 1853 262 1843 266 1850 z', - }, - accidentalFlat: { - x_min: -14, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 166, - y_min: -314, - y_max: 314, - ha: 627, - o: 'm 12 450 b 20 451 15 451 18 451 b 40 439 29 451 37 447 b 41 318 41 435 41 434 b 42 201 41 235 41 201 b 128 222 42 201 81 211 b 220 244 197 239 213 244 b 226 242 223 244 224 243 b 237 231 231 241 236 236 l 239 228 l 239 -104 l 239 -435 l 237 -439 b 218 -451 234 -447 226 -451 b 203 -446 213 -451 207 -450 b 197 -368 198 -440 197 -449 b 197 -316 197 -354 197 -337 b 197 -196 197 -230 197 -196 b 110 -217 196 -196 157 -206 b 18 -238 42 -234 25 -238 b 13 -237 16 -238 14 -238 b 1 -226 8 -236 3 -231 l 0 -222 l 0 106 l 0 435 l 1 439 b 12 450 3 443 8 448 z m 197 22 b 197 70 197 42 197 57 b 196 114 197 111 197 114 l 196 114 b 118 95 196 114 161 105 l 41 76 l 41 -17 b 41 -58 41 -33 41 -47 b 42 -109 41 -98 41 -109 b 120 -90 42 -109 77 -100 l 197 -71 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 225, - y_min: -364, - y_max: 364, - ha: 729, - o: 'm 218 523 b 226 525 220 524 223 525 b 245 512 234 525 242 520 b 246 380 246 508 246 507 b 248 253 246 261 246 253 b 248 253 248 253 248 253 b 303 265 259 256 300 265 b 322 253 312 265 319 260 b 324 204 323 250 324 227 b 322 155 324 181 323 158 b 277 135 319 145 317 145 l 246 127 l 246 21 b 247 -86 246 -78 246 -86 b 248 -86 248 -86 248 -86 b 303 -73 259 -82 300 -73 b 318 -79 309 -73 313 -75 b 323 -121 323 -85 323 -83 b 323 -135 323 -125 323 -130 b 323 -148 323 -140 323 -144 b 318 -190 323 -187 323 -185 b 277 -204 313 -195 313 -195 l 246 -211 l 246 -341 b 245 -473 246 -469 246 -470 b 226 -486 242 -482 234 -486 b 211 -480 221 -486 215 -484 b 205 -404 206 -475 205 -484 b 205 -346 205 -388 205 -369 b 205 -221 205 -277 205 -221 b 161 -232 205 -221 185 -226 b 116 -243 136 -238 116 -243 b 116 -376 116 -243 116 -303 b 114 -512 116 -507 116 -508 b 95 -525 111 -520 103 -525 b 80 -519 90 -525 84 -523 b 75 -441 75 -513 75 -522 b 75 -381 75 -425 75 -405 b 74 -254 75 -262 75 -254 b 73 -254 74 -254 74 -254 b 21 -265 61 -257 24 -265 b 1 -253 12 -265 4 -260 b 0 -204 0 -250 0 -227 b 1 -155 0 -181 0 -158 b 45 -135 5 -146 7 -145 l 75 -128 l 75 -21 b 74 85 75 78 75 85 b 73 85 74 85 74 85 b 21 73 61 82 24 73 b 1 86 12 73 4 78 b 0 135 0 88 0 112 b 1 184 0 158 0 181 b 45 203 5 193 7 194 l 75 210 l 75 340 b 76 473 75 469 75 470 b 95 486 79 482 87 486 b 110 480 100 486 106 484 b 116 404 115 475 116 484 b 116 345 116 388 116 369 b 116 221 116 277 116 221 b 160 231 116 221 136 226 b 205 242 185 237 205 242 b 205 375 205 242 205 302 b 207 512 205 507 205 508 b 218 523 208 516 213 521 z m 205 11 b 205 117 205 95 205 117 l 205 117 b 189 113 204 117 197 116 b 145 103 181 111 161 107 l 116 95 l 116 -11 b 116 -118 116 -70 116 -118 b 160 -107 116 -118 136 -113 b 205 -96 185 -101 205 -96 b 205 11 205 -96 205 -48 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 255, - y_min: -127, - y_max: 127, - ha: 255, - o: 'm 0 122 l 0 183 l 62 183 l 123 183 l 123 137 l 123 90 l 153 60 l 183 30 l 214 60 l 244 90 l 244 137 l 244 183 l 305 183 l 367 183 l 367 122 l 367 60 l 320 60 l 273 60 l 243 30 l 213 0 l 243 -30 l 273 -60 l 320 -60 l 367 -60 l 367 -122 l 367 -183 l 305 -183 l 244 -183 l 244 -137 l 244 -90 l 214 -60 l 183 -30 l 153 -60 l 123 -90 l 123 -137 l 123 -183 l 62 -183 l 0 -183 l 0 -122 l 0 -60 l 47 -60 l 93 -60 l 123 -30 l 154 0 l 123 30 l 93 60 l 47 60 l 0 60 z', - }, - accidentalDoubleFlat: { - x_min: -14, - x_max: 334, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 374 21 602 21 602 l 21 146 l 23 148 b 140 196 60 179 102 196 b 207 175 165 196 188 189 l 210 173 l 210 388 l 211 604 l 212 607 b 231 618 216 614 223 618 b 250 605 239 618 247 614 b 251 374 251 602 251 602 l 251 146 l 254 148 b 368 196 291 179 330 196 b 413 188 384 196 399 193 b 482 83 457 172 482 132 b 459 1 482 57 474 29 b 331 -139 438 -38 409 -69 b 255 -209 289 -177 279 -186 b 231 -223 241 -222 239 -223 b 216 -217 225 -223 220 -221 b 210 -154 211 -212 210 -218 b 210 -117 210 -144 210 -132 l 210 -28 l 205 -34 b 100 -139 182 -63 160 -86 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 l -21 -207 l -21 197 l -21 602 l -19 605 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z m 342 129 b 326 131 339 130 331 131 b 322 130 324 131 323 131 b 256 86 296 127 273 111 l 251 79 l 251 -36 l 251 -152 l 255 -148 b 375 83 328 -68 375 23 b 373 100 375 89 375 95 b 342 129 371 114 359 126 z', - }, - accidentalParensLeft: { - x_min: -115, - x_max: -18, - y_min: -251, - y_max: 251, - ha: 502, - o: 'm -48 360 b -41 362 -46 361 -44 362 b -27 353 -35 362 -29 358 b -26 347 -26 351 -26 349 b -31 328 -26 343 -27 338 b -92 51 -66 243 -85 157 b -93 0 -92 42 -93 21 b -92 -51 -93 -21 -92 -42 b -31 -328 -85 -157 -66 -243 b -26 -346 -26 -341 -26 -343 b -41 -362 -26 -356 -32 -362 b -61 -345 -49 -362 -51 -360 b -166 0 -131 -236 -166 -118 b -61 345 -166 118 -131 236 b -48 360 -54 356 -51 359 z', - }, - accidentalParensRight: { - x_min: 18, - x_max: 115, - y_min: -251, - y_max: 251, - ha: 503, - o: 'm 34 361 b 41 362 36 361 38 362 b 61 345 49 362 51 360 b 166 0 131 236 166 118 b 61 -345 166 -118 131 -235 b 41 -362 53 -357 48 -362 b 34 -360 39 -362 37 -361 b 26 -348 29 -357 26 -354 b 31 -328 26 -344 28 -337 b 93 0 73 -228 93 -114 b 31 329 93 114 73 229 b 26 349 28 338 26 344 b 34 361 26 355 29 358 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 188, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 419, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm 243 617 b 250 618 245 618 248 618 b 270 605 259 618 267 613 l 271 602 l 271 197 l 271 -207 l 270 -210 b 251 -223 267 -218 259 -223 b 227 -209 243 -223 241 -222 b 154 -142 203 -187 188 -172 b 22 2 73 -70 44 -38 b 0 83 7 29 0 57 b 68 188 0 131 24 172 b 113 196 83 193 98 196 b 228 148 151 196 191 179 l 230 146 l 230 374 b 231 605 230 602 230 602 b 243 617 233 610 238 615 z m 168 129 b 149 131 164 130 155 131 b 146 130 148 131 146 131 b 108 100 123 126 111 117 b 106 83 107 95 106 89 b 227 -148 106 23 153 -68 l 230 -152 l 230 -36 l 230 79 l 225 86 b 168 129 210 109 190 123 z m 345 617 b 353 618 348 618 350 618 b 373 605 361 618 370 613 b 374 374 374 602 374 602 l 374 146 l 376 148 b 491 196 413 179 453 196 b 536 188 506 196 521 193 b 604 83 580 172 604 132 b 581 1 604 57 597 29 b 454 -139 560 -38 532 -69 b 377 -209 411 -177 401 -186 b 353 -223 363 -222 361 -223 b 334 -210 344 -223 337 -218 l 333 -207 l 333 197 l 333 602 l 334 605 b 345 617 336 610 341 615 z m 465 129 b 448 131 461 130 453 131 b 444 130 446 131 445 131 b 379 86 418 127 395 111 l 374 79 l 374 -36 l 374 -152 l 377 -148 b 498 83 451 -68 498 23 b 496 100 498 89 497 95 b 465 129 493 114 481 126 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 315, - y_min: -368, - y_max: 368, - ha: 735, - o: 'm 351 529 b 357 530 353 529 355 530 b 375 518 364 530 371 525 l 377 515 l 377 385 l 377 256 l 378 256 b 407 261 379 256 392 259 b 435 265 421 264 430 265 b 449 259 442 265 444 264 b 454 227 453 255 454 255 b 454 203 454 220 454 213 l 454 157 l 452 154 b 443 144 450 150 446 146 b 378 131 441 143 381 132 b 377 23 377 131 377 83 l 377 -85 l 378 -85 b 407 -80 379 -85 392 -82 b 435 -76 421 -77 430 -76 b 449 -82 442 -76 444 -78 b 454 -114 453 -87 454 -86 b 454 -138 454 -121 454 -128 l 454 -184 l 452 -187 b 443 -197 450 -191 446 -195 b 378 -210 441 -198 381 -210 b 377 -338 377 -210 377 -267 l 377 -466 l 375 -470 b 356 -482 372 -477 365 -482 b 338 -470 348 -482 341 -477 l 336 -466 l 336 -341 b 335 -217 336 -225 336 -217 b 335 -217 335 -217 335 -217 b 290 -226 334 -218 314 -221 l 246 -234 l 246 -361 b 246 -421 246 -386 246 -405 b 240 -499 246 -503 246 -494 b 226 -505 236 -503 231 -505 b 207 -494 218 -505 210 -501 l 206 -491 l 205 -366 l 205 -241 l 160 -250 b 116 -258 136 -254 116 -258 b 115 -386 115 -258 115 -316 l 115 -515 l 114 -518 b 95 -530 109 -526 102 -530 b 76 -518 88 -530 80 -526 l 75 -515 l 75 -390 b 74 -265 74 -322 74 -265 b 49 -270 74 -265 62 -267 b 19 -274 34 -273 25 -274 b 6 -269 12 -274 10 -272 b 0 -226 0 -263 0 -265 b 0 -213 0 -222 0 -218 b 0 -199 0 -208 0 -203 b 6 -157 0 -161 0 -163 b 45 -146 10 -153 12 -152 l 74 -141 l 74 -33 b 74 76 74 27 74 76 b 49 71 74 76 62 74 b 19 67 34 68 25 67 b 6 73 12 67 10 69 b 0 115 0 78 0 76 b 0 128 0 119 0 123 b 0 142 0 133 0 138 b 6 184 0 180 0 178 b 45 195 10 189 12 189 l 74 200 l 74 333 l 74 466 l 76 470 b 95 481 80 478 87 481 b 113 470 102 481 109 478 l 115 467 l 115 338 l 116 208 l 160 216 b 205 224 185 221 205 224 b 205 357 205 224 205 284 b 206 493 205 488 205 489 b 226 505 210 501 218 505 b 240 499 231 505 236 503 b 246 421 246 494 246 503 b 246 361 246 405 246 385 b 247 232 246 277 246 232 b 291 240 247 232 267 236 b 335 248 315 245 335 248 b 336 382 336 248 336 308 l 336 515 l 338 518 b 351 529 341 523 345 527 z m 336 15 b 335 124 336 102 336 124 l 335 124 b 290 116 335 124 315 120 l 246 107 l 246 -1 b 247 -109 246 -71 246 -109 b 291 -101 247 -109 267 -105 b 335 -93 315 -97 335 -93 b 336 15 336 -93 336 -45 z m 205 -117 b 205 -53 205 -116 205 -90 b 205 -8 205 -39 205 -24 l 205 100 l 160 92 b 116 83 136 87 116 83 b 116 20 116 83 116 57 b 116 -25 116 6 116 -9 l 116 -133 l 160 -125 b 205 -117 185 -120 205 -117 z', - }, - accidentalBuyukMucennebFlat: { - x_min: -117, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 541 21 602 21 601 b 21 480 21 492 21 480 b 21 480 21 480 21 480 b 154 523 46 489 150 523 b 175 502 167 523 175 513 b 165 485 175 496 172 489 b 92 460 164 484 131 473 l 21 436 l 21 381 b 21 356 21 371 21 362 b 21 326 21 333 21 326 b 21 326 21 326 21 326 b 154 369 46 335 150 369 b 175 348 167 369 175 359 b 165 331 175 342 172 335 b 92 306 164 330 131 319 l 21 282 l 21 214 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -210 -9 -223 -16 -218 b -21 30 -21 -207 -21 -207 b -21 267 -21 161 -21 267 b -83 247 -21 267 -49 258 b -151 226 -132 230 -145 226 b -157 227 -153 226 -154 226 b -169 247 -165 230 -169 238 b -159 264 -169 254 -166 261 b -28 309 -158 265 -86 290 l -21 312 l -21 367 b -21 421 -21 397 -21 421 b -83 400 -21 421 -49 412 b -151 379 -132 384 -145 379 b -157 381 -153 379 -154 380 b -169 400 -165 384 -169 392 b -159 418 -169 408 -166 415 b -28 463 -158 419 -86 443 l -21 466 l -21 534 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalBakiyeFlat: { - x_min: -121, - x_max: 174, - y_min: -155, - y_max: 429, - ha: 584, - o: 'm -8 617 b 0 618 -6 618 -3 618 b 19 605 8 618 16 613 b 21 492 21 602 21 601 b 21 383 21 432 21 383 b 84 414 21 383 50 397 l 147 446 l 153 446 b 154 446 153 446 153 446 b 175 426 166 446 175 437 b 173 418 175 423 174 421 b 93 372 170 410 173 412 l 21 336 l 21 241 l 21 146 l 23 148 b 138 196 60 179 99 196 b 182 188 153 196 168 193 b 251 83 226 172 251 132 b 228 1 251 57 243 29 b 100 -139 207 -38 179 -69 b 24 -209 58 -177 48 -186 b 0 -223 10 -222 8 -223 b -19 -211 -9 -223 -16 -218 b -21 54 -21 -207 -21 -207 b -21 315 -21 197 -21 315 b -84 283 -21 315 -50 301 l -147 252 l -153 251 b -154 251 -153 251 -153 251 b -175 272 -166 251 -175 261 b -173 280 -175 274 -174 277 b -93 326 -170 287 -173 286 l -21 362 l -21 482 b -19 605 -21 601 -21 602 b -8 617 -18 610 -13 615 z m 112 129 b 95 131 108 130 100 131 b 91 130 93 131 92 131 b 25 86 65 127 42 111 l 21 79 l 21 -36 l 21 -152 l 24 -148 b 144 83 97 -68 144 23 b 143 100 144 89 144 95 b 112 129 140 114 128 126 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 134, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 87 504 b 95 505 89 505 92 505 b 114 493 103 505 111 500 b 116 366 116 489 116 488 l 116 243 l 142 252 b 171 260 164 259 167 260 b 173 260 172 260 172 260 b 191 249 181 260 187 256 l 192 246 l 192 200 b 192 176 192 190 192 182 b 189 145 192 149 192 150 b 148 128 185 140 183 139 l 116 117 l 116 10 b 116 -97 116 -60 116 -97 b 141 -89 116 -97 128 -94 b 169 -80 154 -84 167 -80 b 172 -79 170 -79 171 -79 b 191 -92 180 -79 188 -84 b 193 -147 192 -95 193 -122 b 192 -189 193 -168 192 -187 b 149 -212 188 -198 187 -199 l 116 -224 l 116 -358 l 115 -491 l 114 -494 b 95 -505 110 -501 103 -505 b 80 -499 90 -505 84 -503 b 74 -423 75 -494 74 -503 b 75 -364 74 -407 75 -388 b 74 -239 75 -295 74 -239 b 50 -248 74 -239 63 -243 b 18 -257 33 -254 24 -257 b 6 -251 13 -257 10 -255 b 0 -208 0 -245 0 -247 b 0 -195 0 -204 0 -200 b 0 -183 0 -191 0 -187 b 6 -140 0 -143 0 -145 b 44 -123 10 -135 9 -136 l 75 -113 l 75 -5 b 74 103 75 55 74 103 b 49 95 74 103 63 100 b 18 87 33 90 24 87 b 6 93 13 87 10 89 b 0 135 0 99 0 97 b 0 149 0 139 0 144 b 0 174 0 159 0 167 b 43 219 0 209 3 206 l 75 230 l 75 359 b 76 493 75 488 75 489 b 87 504 78 497 82 502 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 176, - y_min: -351, - y_max: 351, - ha: 702, - o: 'm 119 504 b 127 505 122 505 124 505 b 146 493 135 505 143 500 b 148 394 148 489 148 488 l 148 300 l 174 308 b 203 317 197 316 200 317 b 205 317 204 317 204 317 b 223 305 213 316 219 312 l 224 302 l 224 256 b 225 233 225 247 225 239 b 221 201 225 206 224 206 b 180 184 217 197 215 196 l 148 174 l 148 122 b 148 70 148 81 148 70 b 148 70 148 70 148 70 b 190 84 149 70 167 76 l 230 97 l 235 97 b 252 85 243 96 249 92 l 254 82 l 254 36 b 254 12 254 27 254 19 b 250 -18 254 -14 253 -14 b 195 -40 247 -23 246 -24 l 148 -56 l 148 -105 b 148 -119 148 -110 148 -115 b 148 -154 148 -142 148 -154 b 173 -145 149 -154 160 -150 b 201 -136 186 -140 199 -136 b 204 -136 202 -136 203 -136 b 223 -148 212 -136 220 -141 b 225 -204 224 -151 225 -179 b 224 -246 225 -224 224 -243 b 181 -269 221 -255 219 -255 l 148 -281 l 148 -386 b 146 -494 147 -491 147 -491 b 127 -505 143 -501 135 -505 b 112 -499 122 -505 116 -503 b 107 -435 107 -494 107 -500 b 107 -392 107 -423 107 -409 b 106 -296 107 -339 107 -296 b 82 -304 106 -296 95 -299 b 50 -313 66 -310 56 -313 b 38 -307 45 -313 42 -311 b 32 -265 33 -301 32 -303 b 32 -251 32 -261 32 -256 b 32 -240 32 -247 32 -243 b 38 -196 32 -200 32 -201 b 76 -180 42 -192 41 -192 l 107 -169 l 107 -119 b 106 -70 107 -80 106 -70 b 106 -70 106 -70 106 -70 b 65 -84 105 -70 87 -76 l 24 -97 l 19 -97 b 1 -84 11 -96 4 -91 b 0 -40 0 -81 0 -61 b 2 14 0 -15 1 11 b 60 41 5 23 4 22 l 106 56 l 107 108 b 107 122 107 113 107 118 b 106 160 107 144 106 160 b 82 152 106 160 95 156 b 50 144 65 146 56 144 b 38 149 45 144 42 146 b 32 192 33 155 32 153 b 32 205 32 196 32 200 b 32 231 32 215 32 224 b 75 275 32 266 35 262 l 107 286 l 107 388 b 108 493 107 488 107 489 b 119 504 110 497 115 502 z', - }, - articAccentAbove: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articAccentBelow: { - x_min: -241, - x_max: 18, - y_min: -107, - y_max: 107, - ha: 214, - o: 'm -329 153 b -321 154 -327 154 -324 154 b -313 153 -318 154 -315 154 b -294 142 -310 152 -307 151 b -8 29 -217 93 -115 52 b 13 23 7 25 10 24 b 26 0 22 17 26 8 b 3 -26 26 -11 18 -22 b -18 -31 -1 -27 -10 -29 b -296 -144 -122 -55 -223 -96 b -321 -154 -311 -153 -313 -154 b -346 -128 -336 -154 -346 -142 b -342 -114 -346 -123 -345 -118 b -325 -100 -339 -110 -337 -107 b -127 -8 -268 -63 -201 -32 b -105 0 -114 -4 -105 0 b -127 8 -105 0 -114 4 b -325 100 -201 32 -268 63 b -342 114 -337 107 -339 110 b -346 128 -345 118 -346 123 b -329 153 -346 139 -340 149 z', - }, - articTenutoAbove: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articTenutoBelow: { - x_min: -144, - x_max: 144, - y_min: -14, - y_max: 14, - ha: 29, - o: 'm -195 19 b 2 21 -193 20 -95 21 b 195 19 98 21 192 20 b 208 0 203 16 208 8 b 202 -15 208 -5 206 -11 b 95 -21 196 -20 211 -21 b 0 -21 70 -21 39 -21 b -95 -21 -39 -21 -70 -21 b -202 -15 -211 -21 -196 -20 b -208 0 -206 -11 -208 -5 b -195 19 -208 8 -203 16 z', - }, - articStaccatoAbove: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatoBelow: { - x_min: -46, - x_max: 46, - y_min: -46, - y_max: 46, - ha: 93, - o: 'm -12 66 b -1 67 -8 67 -5 67 b 56 37 21 67 43 56 b 67 0 63 26 67 13 b 37 -56 67 -22 57 -43 b 0 -67 26 -63 13 -67 b -56 -38 -22 -67 -43 -57 b -67 0 -63 -26 -67 -13 b -12 66 -67 31 -45 60 z', - }, - articStaccatissimoAbove: { - x_min: -50, - x_max: 50, - y_min: 0, - y_max: 173, - ha: 173, - o: 'm -72 247 l -72 249 l 0 249 l 72 249 l 72 247 b 0 0 71 244 0 0 b -72 247 0 0 -71 244 z', - }, - articStaccatissimoBelow: { - x_min: -50, - x_max: 50, - y_min: -173, - y_max: 0, - ha: 173, - o: 'm -36 -123 b 0 0 -16 -55 0 0 b 72 -247 0 0 71 -244 l 72 -249 l 0 -249 l -72 -249 l -72 -247 b -36 -123 -72 -247 -55 -191 z', - }, - articMarcatoAbove: { - x_min: -107, - x_max: 107, - y_min: -240, - y_max: 18, - ha: 259, - o: 'm -8 25 b 0 26 -5 26 -2 26 b 26 3 12 26 22 17 b 31 -18 27 -1 29 -10 b 143 -296 55 -122 96 -223 b 154 -321 153 -311 154 -313 b 128 -346 154 -335 143 -346 b 100 -325 116 -346 111 -342 b 8 -127 63 -268 32 -201 b 0 -105 4 -114 0 -105 b -8 -127 0 -105 -4 -114 b -100 -325 -32 -200 -63 -268 b -128 -346 -111 -342 -116 -346 b -154 -321 -143 -346 -154 -335 b -142 -294 -154 -313 -153 -312 b -29 -8 -93 -217 -52 -115 b -20 17 -24 11 -24 11 b -8 25 -18 20 -12 24 z', - }, - articMarcatoBelow: { - x_min: -107, - x_max: 107, - y_min: -18, - y_max: 241, - ha: 259, - o: 'm -136 345 b -128 347 -133 346 -130 347 b -100 325 -118 347 -110 340 b -8 127 -63 268 -32 201 b 0 105 -4 114 0 105 b 8 127 0 105 4 114 b 100 325 32 201 63 268 b 114 342 107 337 110 339 b 128 346 118 345 123 346 b 154 321 142 346 154 336 b 143 296 154 313 153 311 b 29 8 95 221 53 117 b 20 -17 24 -11 24 -11 b 0 -26 15 -23 8 -26 b -20 -17 -8 -26 -15 -23 b -29 8 -24 -11 -24 -11 b -142 294 -52 115 -93 217 b -154 321 -153 312 -154 313 b -136 345 -154 332 -147 342 z', - }, - fermataAbove: { - x_min: -305, - x_max: 305, - y_min: 0, - y_max: 332, - ha: 332, - o: 'm -31 477 b 0 478 -21 477 -10 478 b 432 105 214 478 394 324 b 439 29 436 80 439 48 b 437 13 439 21 438 15 b 418 0 434 5 426 0 b 403 6 413 0 407 2 b 397 30 398 11 398 14 b 0 343 390 208 218 343 b -59 340 -31 343 -37 343 b -397 30 -250 318 -390 188 b -403 6 -398 14 -398 11 b -418 0 -407 2 -413 0 b -437 13 -426 0 -434 5 b -439 29 -438 15 -439 21 b -432 105 -439 48 -436 80 b -31 477 -396 312 -234 462 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataBelow: { - x_min: -305, - x_max: 305, - y_min: -332, - y_max: 0, - ha: 332, - o: 'm -426 -2 b -418 0 -424 -1 -421 0 b -403 -6 -413 0 -407 -2 b -397 -31 -398 -11 -398 -14 b 0 -343 -389 -208 -218 -343 b 59 -340 31 -343 37 -343 b 397 -31 250 -318 390 -189 b 403 -6 398 -14 398 -11 b 418 0 407 -2 413 0 b 437 -13 426 0 434 -5 b 439 -29 438 -16 439 -21 b 435 -82 439 -43 437 -64 b 33 -476 408 -300 244 -461 b -1 -478 22 -477 10 -478 b -432 -105 -214 -478 -394 -325 b -439 -29 -436 -80 -439 -48 b -437 -13 -439 -21 -438 -16 b -426 -2 -436 -9 -431 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 342, - ha: 342, - o: 'm -375 491 b 0 493 -371 493 -368 493 l 371 493 l 375 491 b 386 480 379 490 384 485 b 387 247 387 477 387 476 b 387 132 387 200 387 162 b 382 6 387 -7 387 12 b 367 0 378 2 372 0 b 359 2 364 0 362 1 b 348 13 354 3 349 8 b 346 172 346 16 346 17 l 346 329 l 0 329 l -346 329 l -346 172 b -347 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -387 247 -387 16 -387 131 b -386 480 -387 362 -387 477 b -375 491 -384 485 -379 490 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 26 185 53 173 b 93 93 85 136 93 114 b 52 16 93 63 79 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataLongBelow: { - x_min: -269, - x_max: 269, - y_min: -342, - y_max: 0, - ha: 342, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -173 -346 -16 -346 -17 l -346 -329 l 0 -329 l 346 -329 l 346 -173 b 348 -13 346 -17 346 -16 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -247 387 -16 388 -131 b 386 -480 388 -362 387 -477 b 375 -492 384 -485 379 -490 l 371 -493 l 0 -493 l -371 -493 l -375 -492 b -386 -480 -379 -490 -384 -485 b -388 -247 -387 -477 -388 -362 b -386 -13 -388 -131 -387 -16 b -375 -2 -384 -9 -379 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryLongAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 412, - ha: 412, - o: 'm -375 591 b 0 593 -372 593 -368 593 l 371 593 l 375 591 b 386 580 379 590 384 585 b 388 297 387 577 388 437 b 386 13 388 156 387 16 b 367 0 383 5 375 0 b 348 13 359 0 351 5 b 346 222 346 16 346 17 l 346 429 l 0 429 l -346 429 l -346 222 b -348 13 -346 17 -346 16 b -367 0 -351 5 -359 0 b -386 13 -375 0 -383 5 b -388 297 -387 16 -388 156 b -386 580 -388 437 -387 577 b -375 591 -384 585 -379 590 z m -272 361 b 3 362 -270 362 -133 362 b 272 361 137 362 269 362 b 283 349 277 359 282 354 b 285 181 284 347 285 264 b 283 13 285 98 284 16 b 264 0 280 5 272 0 b 249 6 259 0 254 2 b 244 76 244 12 244 4 b 244 122 244 89 244 104 l 244 229 l 0 229 l -244 229 l -244 122 b -244 76 -244 104 -244 89 b -249 6 -244 4 -244 12 b -264 0 -254 2 -259 0 b -283 13 -272 0 -280 5 b -285 181 -284 16 -285 98 b -283 349 -285 264 -284 347 b -272 361 -282 354 -277 359 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataVeryLongBelow: { - x_min: -269, - x_max: 269, - y_min: -412, - y_max: 0, - ha: 412, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -348 -13 -359 0 -350 -5 b -346 -223 -346 -17 -346 -17 l -346 -429 l 0 -429 l 346 -429 l 346 -223 b 348 -13 346 -17 346 -17 b 367 0 351 -5 359 0 b 386 -13 375 0 383 -5 b 388 -297 387 -16 388 -156 b 386 -580 388 -437 387 -578 b 375 -592 384 -585 379 -590 l 371 -593 l 0 -593 l -371 -593 l -375 -592 b -386 -580 -379 -590 -384 -585 b -388 -297 -387 -578 -388 -437 b -386 -13 -388 -156 -387 -16 b -375 -2 -384 -9 -379 -4 z m -272 -2 b -265 0 -270 -1 -267 0 b -245 -13 -256 0 -248 -5 b -244 -123 -244 -16 -244 -18 l -244 -229 l 0 -229 l 244 -229 l 244 -123 b 244 -76 244 -104 244 -89 b 249 -6 244 -4 244 -12 b 264 0 254 -2 259 0 b 283 -13 272 0 280 -5 b 285 -181 284 -16 285 -99 b 283 -349 285 -264 284 -347 b 272 -361 282 -354 277 -359 b 0 -362 269 -362 135 -362 b -272 -361 -135 -362 -269 -362 b -283 -349 -277 -359 -282 -354 b -285 -181 -284 -347 -285 -264 b -283 -13 -285 -99 -284 -16 b -272 -2 -282 -9 -277 -4 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - fermataVeryShortAbove: { - x_min: -330, - x_max: 330, - y_min: 0, - y_max: 536, - ha: 536, - o: 'm -8 771 b 0 772 -6 772 -3 772 b 8 771 3 772 6 772 b 33 738 14 769 16 766 b 63 689 42 724 56 702 b 92 643 71 677 84 656 b 138 570 100 630 121 597 b 181 500 154 543 174 511 b 213 448 188 488 203 465 b 295 317 260 372 283 336 b 340 244 302 306 322 273 b 382 177 358 216 376 185 b 410 132 387 168 400 148 b 475 23 470 34 475 28 b 474 21 475 23 474 22 b 462 2 474 12 469 4 b 423 0 459 1 441 0 b 384 2 405 0 387 1 b 359 35 379 4 376 7 b 329 83 350 49 337 71 b 300 130 321 96 308 117 b 255 203 292 143 272 175 b 211 273 238 230 218 261 b 179 324 204 284 190 307 b 98 456 133 399 110 436 b 7 601 69 502 23 576 b -20 645 -2 616 -14 635 b -31 662 -26 654 -31 662 b -42 645 -31 662 -36 654 b -69 601 -48 635 -60 616 b -159 456 -84 577 -125 511 b -191 404 -166 444 -181 421 b -273 273 -238 330 -261 292 b -316 203 -280 261 -300 230 b -362 130 -333 175 -354 143 b -390 83 -370 117 -383 96 b -421 35 -398 71 -412 49 b -446 2 -438 7 -440 4 b -454 0 -449 1 -451 0 b -474 21 -465 0 -474 9 b -475 23 -474 22 -475 23 b -410 132 -475 28 -470 34 b -382 177 -400 148 -387 168 b -340 244 -376 185 -358 216 b -295 317 -322 273 -302 306 b -213 448 -283 336 -260 372 b -181 500 -203 465 -188 488 b -138 570 -174 511 -154 543 b -92 643 -121 597 -100 630 b -63 689 -84 656 -71 677 b -33 738 -56 702 -42 724 b -8 771 -16 765 -14 769 z m -34 476 b -26 477 -31 477 -29 477 b -11 472 -20 477 -15 475 b 263 28 -8 468 261 34 b 264 21 264 26 264 24 b 252 2 264 13 259 4 b 213 0 249 1 231 0 b 174 2 195 0 177 1 b 54 188 168 4 171 -1 b -56 366 -6 286 -56 366 b -167 188 -57 366 -107 286 b -287 2 -284 -1 -281 4 b -295 0 -290 1 -292 0 b -316 21 -306 0 -316 10 b -314 28 -316 23 -315 26 b -40 472 -312 34 -43 468 b -34 476 -38 474 -36 475 z m -52 184 b -39 185 -48 185 -43 185 b 31 153 -13 185 14 173 b 54 93 47 136 54 114 b 14 16 54 63 40 33 b -38 0 -3 5 -21 0 b -131 93 -86 0 -131 38 b -52 184 -131 139 -99 176 z', - }, - fermataVeryShortBelow: { - x_min: -330, - x_max: 330, - y_min: -536, - y_max: 0, - ha: 536, - o: 'm 8 -771 b 0 -772 6 -772 3 -772 b -8 -771 -3 -772 -6 -772 b -33 -738 -14 -769 -16 -766 b -63 -689 -42 -724 -56 -702 b -92 -643 -71 -677 -84 -656 b -138 -570 -100 -630 -121 -597 b -181 -500 -154 -543 -174 -511 b -213 -448 -188 -488 -203 -465 b -295 -317 -260 -372 -283 -336 b -340 -244 -302 -306 -322 -273 b -382 -177 -358 -216 -376 -185 b -410 -132 -387 -168 -400 -148 b -475 -23 -470 -34 -475 -28 b -474 -21 -475 -23 -474 -22 b -462 -2 -474 -12 -469 -4 b -423 0 -459 -1 -441 0 b -384 -2 -405 0 -387 -1 b -359 -35 -379 -4 -376 -7 b -329 -83 -350 -49 -337 -71 b -300 -130 -321 -96 -308 -117 b -255 -203 -292 -143 -272 -175 b -211 -273 -238 -230 -218 -261 b -179 -324 -204 -284 -190 -307 b -98 -456 -133 -399 -110 -436 b -7 -601 -69 -502 -23 -576 b 20 -645 2 -616 14 -635 b 31 -662 26 -654 31 -662 b 42 -645 31 -662 36 -654 b 69 -601 48 -635 60 -616 b 159 -456 84 -577 125 -511 b 191 -404 166 -444 181 -421 b 273 -273 238 -330 261 -292 b 316 -203 280 -261 300 -230 b 362 -130 333 -175 354 -143 b 390 -83 370 -117 383 -96 b 421 -35 398 -71 412 -49 b 446 -2 438 -7 440 -4 b 454 0 449 -1 451 0 b 474 -21 465 0 474 -9 b 475 -23 474 -22 475 -23 b 410 -132 475 -28 470 -34 b 382 -177 400 -148 387 -168 b 340 -244 376 -185 358 -216 b 295 -317 322 -273 302 -306 b 213 -448 283 -336 260 -372 b 181 -500 203 -465 188 -488 b 138 -570 174 -511 154 -543 b 92 -643 121 -597 100 -630 b 63 -689 84 -656 71 -677 b 33 -738 56 -702 42 -724 b 8 -771 16 -765 14 -769 z m 34 -476 b 26 -477 31 -477 29 -477 b 11 -472 20 -477 15 -475 b -263 -28 8 -468 -261 -34 b -264 -21 -264 -26 -264 -24 b -252 -2 -264 -13 -259 -4 b -213 0 -249 -1 -231 0 b -174 -2 -195 0 -177 -1 b -54 -188 -168 -4 -171 1 b 56 -366 6 -286 56 -366 b 167 -188 57 -366 107 -286 b 287 -2 284 1 281 -4 b 295 0 290 -1 292 0 b 316 -21 306 0 316 -10 b 314 -28 316 -23 315 -26 b 40 -472 312 -34 43 -468 b 34 -476 38 -474 36 -475 z m 52 -184 b 39 -185 48 -185 43 -185 b -31 -153 13 -185 -14 -173 b -54 -93 -47 -136 -54 -114 b -14 -16 -54 -63 -40 -33 b 38 0 3 -5 21 0 b 131 -93 86 0 131 -38 b 52 -184 131 -139 99 -176 z', - }, - fermataShortAbove: { - x_min: -269, - x_max: 269, - y_min: 0, - y_max: 441, - ha: 441, - o: 'm -8 634 b 0 635 -6 635 -3 635 b 14 629 5 635 11 633 b 70 541 16 627 35 598 b 219 299 99 495 166 386 b 351 86 273 213 332 117 b 386 28 370 56 386 29 b 387 21 387 26 387 23 b 375 2 387 13 382 4 b 336 0 372 1 354 0 b 297 2 318 0 300 1 b 235 94 291 4 291 4 b 86 336 207 141 139 250 b -21 509 32 422 -16 500 b -31 524 -26 517 -31 524 b -39 511 -31 524 -35 518 b -129 366 -44 504 -84 439 b -226 209 -174 293 -217 223 b -359 2 -364 -15 -352 4 b -367 0 -362 1 -364 0 b -387 21 -378 0 -387 9 l -387 21 b -352 84 -387 27 -387 28 b -238 269 -267 222 -253 245 b -171 378 -229 283 -199 332 b -32 603 -119 461 -60 558 b -8 634 -16 628 -14 632 z m -14 184 b 0 185 -9 185 -5 185 b 70 153 25 185 53 173 b 92 93 85 136 92 114 b 52 16 92 63 78 33 b 0 0 36 5 18 0 b -92 93 -48 0 -92 38 b -14 184 -92 139 -61 176 z', - }, - fermataShortBelow: { - x_min: -269, - x_max: 269, - y_min: -441, - y_max: 0, - ha: 441, - o: 'm -375 -2 b -367 0 -372 -1 -370 0 b -352 -6 -361 0 -356 -2 b -297 -94 -350 -8 -332 -37 b -147 -336 -268 -141 -201 -250 b -41 -509 -94 -422 -46 -500 b -31 -524 -36 -517 -31 -524 b -22 -511 -31 -524 -27 -518 b 19 -445 -18 -504 1 -474 b 67 -366 37 -416 59 -380 b 135 -257 76 -352 106 -303 b 273 -33 186 -174 246 -78 b 297 -2 289 -7 292 -4 b 336 0 300 -1 318 0 b 375 -2 354 0 372 -1 b 387 -21 382 -5 387 -13 b 386 -28 387 -24 387 -26 b 368 -58 386 -29 378 -43 b 334 -114 359 -74 343 -99 b 238 -269 324 -130 281 -200 b 143 -424 195 -339 152 -409 b 72 -539 133 -439 101 -490 b 3 -635 15 -631 13 -635 b 0 -635 2 -635 1 -635 b -3 -635 -1 -635 -2 -635 b -70 -542 -13 -635 -15 -631 b -219 -300 -99 -495 -166 -386 b -351 -87 -273 -213 -332 -117 b -386 -28 -370 -56 -386 -29 b -387 -21 -387 -26 -387 -24 b -375 -2 -387 -13 -382 -5 z m -14 -1 b 0 0 -9 0 -5 0 b 77 -41 29 0 60 -16 b 93 -93 88 -57 93 -75 b 0 -185 93 -141 55 -185 b -93 -93 -55 -185 -93 -141 b -77 -41 -93 -75 -88 -57 b -14 -1 -63 -20 -40 -6 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - breathMarkUpbow: { - x_min: -118, - x_max: 118, - y_min: 0, - y_max: 385, - ha: 385, - o: 'm -161 553 b -122 554 -158 554 -156 554 l -116 554 b -78 550 -81 554 -83 554 b -21 362 -75 546 -79 558 b 32 182 8 263 32 182 b 86 362 32 182 56 263 b 140 545 115 462 139 544 b 154 554 142 551 148 554 b 168 545 160 554 165 551 b 169 542 169 544 169 544 b 93 275 169 535 159 501 b 12 5 17 15 14 5 b 12 5 12 5 12 5 b 12 5 12 5 12 5 b 0 0 9 2 4 0 b -15 11 -6 0 -13 4 b -169 539 -24 38 -169 536 b -161 553 -169 545 -166 550 z', - }, - caesura: { - x_min: 0, - x_max: 430, - y_min: -190, - y_max: 284, - ha: 474, - o: 'm 397 408 b 405 410 400 409 403 410 b 426 389 417 410 426 400 b 425 382 426 387 426 384 b 35 -267 423 377 38 -264 b 21 -273 31 -271 26 -273 b 0 -252 11 -273 0 -264 b 1 -245 0 -250 0 -248 b 391 404 3 -240 388 401 b 397 408 393 406 396 407 z m 590 408 b 598 410 592 409 595 410 b 619 389 609 410 619 400 b 617 382 619 387 618 384 b 227 -267 616 377 230 -264 b 214 -273 223 -271 219 -273 b 192 -252 203 -273 192 -264 b 194 -245 192 -250 193 -248 b 584 404 195 -240 581 401 b 590 408 585 406 588 407 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 348, - y_min: -195, - y_max: 292, - ha: 486, - o: 'm 274 420 b 278 420 275 420 277 420 b 309 386 295 420 309 405 b 308 379 309 383 309 381 b 306 361 308 377 307 369 b 41 -267 281 194 185 -35 b 20 -280 36 -275 28 -280 b 6 -274 15 -280 10 -278 b 0 -261 2 -270 0 -266 b 10 -236 0 -255 3 -248 b 246 385 138 -11 230 231 b 274 420 248 407 256 417 z m 466 420 b 471 420 468 420 469 420 b 501 386 488 420 501 405 b 501 379 501 383 501 381 b 498 361 500 377 499 369 b 233 -267 473 194 377 -35 b 213 -280 228 -275 220 -280 b 199 -274 208 -280 203 -278 b 192 -261 194 -270 192 -266 b 202 -236 192 -255 196 -248 b 438 385 330 -11 422 231 b 466 420 441 407 449 417 z', - }, - restMaxima: { - x_min: 0, - x_max: 801, - y_min: -235, - y_max: 235, - ha: 470, - o: 'm 0 0 l 0 339 l 192 339 l 385 339 l 385 0 l 385 -339 l 192 -339 l 0 -339 z m 769 0 l 769 339 l 962 339 l 1154 339 l 1154 0 l 1154 -339 l 962 -339 l 769 -339 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 267, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 0 169 l 0 339 l 192 339 l 385 339 l 385 169 l 385 0 l 192 0 l 0 0 z', - }, - restWhole: { - x_min: 0, - x_max: 310, - y_min: -118, - y_max: 0, - ha: 118, - o: 'm 0 -85 l 0 0 l 223 0 l 446 0 l 446 -85 l 446 -169 l 223 -169 l 0 -169 z', - }, - restWholeLegerLine: { - x_min: 0, - x_max: 509, - y_min: -118, - y_max: 11, - ha: 128, - o: 'm 9 14 b 401 16 11 15 213 16 b 724 14 567 16 723 15 b 734 0 731 12 734 6 b 724 -14 734 -6 731 -12 b 656 -15 722 -15 714 -15 l 590 -15 l 590 -92 l 590 -169 l 367 -169 l 144 -169 l 144 -92 l 144 -15 l 78 -15 b 9 -14 19 -15 11 -15 b 0 0 3 -12 0 -6 b 9 14 0 6 3 11 z', - }, - restHalf: { - x_min: 0, - x_max: 310, - y_min: 0, - y_max: 118, - ha: 118, - o: 'm 0 85 l 0 169 l 223 169 l 446 169 l 446 85 l 446 0 l 223 0 l 0 0 z', - }, - restHalfLegerLine: { - x_min: 0, - x_max: 509, - y_min: -11, - y_max: 118, - ha: 128, - o: 'm 144 92 l 144 169 l 367 169 l 590 169 l 590 92 l 590 15 l 656 15 b 725 14 714 15 722 15 b 734 0 731 12 734 6 b 725 -14 734 -6 731 -12 b 402 -16 723 -15 567 -16 b 9 -14 213 -16 11 -15 b 0 0 3 -12 0 -6 b 4 11 0 4 1 8 b 55 15 8 15 5 15 b 78 15 61 15 69 15 l 144 15 z', - }, - restQuarter: { - x_min: 0, - x_max: 208, - y_min: -343, - y_max: 343, - ha: 686, - o: 'm 47 493 b 53 494 49 494 51 494 b 70 485 58 494 63 491 b 91 467 73 482 83 474 b 111 449 98 460 108 452 b 170 398 134 429 144 420 b 292 286 284 298 292 292 b 292 284 292 286 292 285 b 292 281 292 283 292 282 b 280 261 292 277 291 277 b 220 124 252 219 230 170 b 209 36 213 94 209 65 b 287 -167 209 -43 236 -115 b 300 -186 299 -178 300 -180 b 285 -201 300 -196 294 -201 b 273 -199 281 -201 277 -200 b 245 -195 264 -197 254 -195 b 145 -244 208 -195 170 -213 b 115 -332 125 -270 115 -301 b 174 -461 115 -376 135 -423 b 185 -480 181 -468 185 -474 b 180 -490 185 -483 183 -486 b 170 -494 177 -492 174 -494 b 128 -466 163 -494 152 -486 b 0 -254 45 -395 0 -320 l 0 -254 l 0 -237 l 2 -229 b 148 -137 18 -171 74 -137 b 204 -143 166 -137 185 -139 l 214 -145 l 212 -143 b 117 -58 210 -141 158 -95 b 18 35 22 26 18 29 b 18 37 18 36 18 36 l 18 38 b 27 55 18 44 18 44 b 110 294 82 129 110 216 b 50 460 110 359 90 419 b 38 478 39 470 38 472 b 47 493 38 485 41 490 z', - }, - rest8th: { - x_min: 0, - x_max: 242, - y_min: -185, - y_max: 206, - ha: 391, - o: 'm 92 296 b 103 297 96 297 99 297 b 166 275 124 297 149 288 b 205 195 192 255 205 225 b 180 129 205 171 197 147 l 176 124 l 181 126 b 307 244 236 141 284 186 b 311 254 308 248 311 253 b 328 262 316 259 322 262 b 349 242 339 262 349 254 b 200 -256 349 237 203 -251 b 182 -266 197 -263 190 -266 b 163 -254 174 -266 166 -262 b 161 -249 162 -252 161 -251 b 217 -58 161 -241 170 -215 b 272 126 247 43 272 126 b 272 126 272 126 272 126 b 263 120 271 126 268 124 b 140 79 227 93 182 79 b 36 114 102 79 65 90 b 0 192 12 133 0 162 b 29 265 0 218 9 244 b 92 296 45 282 65 292 z', - }, - rest16th: { - x_min: 0, - x_max: 312, - y_min: -417, - y_max: 206, - ha: 623, - o: 'm 192 296 b 203 297 196 297 199 297 b 266 275 224 297 249 288 b 305 195 292 255 305 225 b 280 129 305 171 297 147 l 276 124 l 281 126 b 407 244 336 141 384 186 b 411 254 408 248 411 253 b 428 262 416 259 422 262 b 449 242 439 262 449 254 b 200 -590 449 237 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 192 296 145 282 165 292 z', - }, - rest32nd: { - x_min: 0, - x_max: 381, - y_min: -417, - y_max: 438, - ha: 854, - o: 'm 292 629 b 303 630 296 630 299 630 b 366 608 324 630 349 622 b 405 528 392 588 405 558 b 380 462 405 504 397 481 l 376 457 l 382 459 b 507 577 436 474 484 519 b 511 587 508 582 511 586 b 528 595 516 593 522 595 b 549 575 539 595 549 588 b 200 -590 549 571 203 -584 b 182 -600 197 -597 190 -600 b 163 -587 174 -600 166 -596 b 161 -583 162 -586 161 -585 b 217 -392 161 -575 170 -548 b 272 -207 247 -290 272 -208 b 272 -207 272 -207 272 -207 b 263 -213 271 -207 268 -210 b 140 -255 227 -241 182 -255 b 36 -220 102 -255 65 -243 b 0 -141 12 -200 0 -171 b 29 -69 0 -115 9 -89 b 103 -37 49 -47 76 -37 b 195 -94 140 -37 177 -57 b 205 -138 202 -108 205 -123 b 180 -205 205 -163 196 -187 l 176 -209 l 181 -208 b 306 -91 236 -193 284 -147 b 372 126 308 -85 372 125 b 372 126 372 126 372 126 b 363 120 371 126 368 124 b 240 79 327 93 283 79 b 136 114 202 79 165 90 b 100 192 112 133 100 162 b 129 265 100 218 109 244 b 203 296 149 286 176 296 b 295 240 240 296 277 277 b 305 195 302 226 305 211 b 280 129 305 171 296 147 l 276 124 l 281 126 b 406 243 336 140 384 186 b 472 459 408 248 472 458 b 472 459 472 459 472 459 b 463 454 471 459 468 457 b 340 412 427 426 383 412 b 236 447 302 412 265 424 b 200 525 212 467 200 496 b 229 598 200 551 210 578 b 292 629 246 616 265 625 z', - }, - rest64th: { - x_min: 0, - x_max: 451, - y_min: -648, - y_max: 438, - ha: 1086, - o: 'm 392 629 b 403 630 396 630 399 630 b 466 608 424 630 449 622 b 505 528 492 588 505 558 b 480 462 505 504 497 481 l 476 457 l 482 459 b 607 577 536 474 584 519 b 612 587 608 582 611 586 b 628 595 616 593 622 595 b 649 575 639 595 649 588 b 200 -923 649 571 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 392 629 346 616 365 625 z', - }, - rest128th: { - x_min: 0, - x_max: 520, - y_min: -648, - y_max: 669, - ha: 1317, - o: 'm 492 963 b 503 964 496 963 499 964 b 566 942 524 964 549 955 b 605 861 592 922 605 892 b 580 796 605 838 597 814 l 576 791 l 582 793 b 707 911 636 807 684 853 b 712 921 708 915 711 919 b 728 929 716 926 722 929 b 749 908 739 929 749 921 b 200 -923 749 904 203 -917 b 182 -933 197 -930 190 -933 b 163 -921 174 -933 166 -929 b 161 -916 162 -919 161 -918 b 217 -725 161 -908 170 -881 b 272 -541 247 -624 272 -541 b 272 -541 272 -541 272 -541 b 263 -547 271 -541 268 -543 b 140 -588 227 -574 182 -588 b 36 -553 102 -588 65 -577 b 0 -475 12 -534 0 -504 b 29 -402 0 -449 9 -422 b 103 -370 49 -381 76 -370 b 195 -427 140 -370 177 -390 b 205 -471 202 -441 205 -456 b 180 -538 205 -496 196 -520 l 176 -543 l 181 -541 b 306 -424 236 -526 284 -481 b 372 -207 308 -419 372 -209 b 372 -207 372 -207 372 -207 b 363 -213 371 -207 368 -210 b 240 -255 327 -241 283 -255 b 136 -220 202 -255 165 -243 b 100 -141 112 -200 100 -171 b 129 -69 100 -115 109 -89 b 203 -37 149 -47 176 -37 b 295 -94 240 -37 277 -57 b 305 -138 302 -108 305 -123 b 280 -205 305 -163 296 -187 l 276 -209 l 281 -208 b 406 -91 336 -193 384 -147 b 472 126 408 -85 472 125 b 472 126 472 126 472 126 b 463 120 471 126 468 124 b 340 79 427 93 383 79 b 236 114 302 79 265 90 b 200 192 212 133 200 162 b 229 265 200 218 210 244 b 303 296 249 286 276 296 b 395 240 340 296 377 277 b 405 195 402 226 405 211 b 380 129 405 171 396 147 l 376 124 l 382 126 b 506 243 436 140 484 186 b 572 459 508 248 572 458 b 572 459 572 459 572 459 b 563 454 571 459 568 457 b 440 412 527 426 483 412 b 336 447 402 412 365 424 b 300 525 312 467 300 496 b 329 598 300 551 310 578 b 403 630 349 620 376 630 b 495 573 440 630 477 610 b 505 529 502 559 505 544 b 480 462 505 504 496 480 l 476 457 l 482 459 b 606 576 536 474 584 519 b 672 793 608 581 672 791 b 672 793 672 793 672 793 b 664 787 672 793 668 790 b 540 745 627 759 583 745 b 436 780 502 745 465 757 b 400 859 412 800 400 829 b 429 931 400 885 410 911 b 492 963 446 949 465 959 z', - }, - dynamicPiano: { - x_min: -36, - x_max: 355, - y_min: -168, - y_max: 261, - ha: 428, - o: 'm 185 375 b 196 375 189 375 192 375 b 287 295 240 375 280 341 l 288 290 l 294 297 b 381 359 318 325 353 351 b 404 363 388 362 396 363 b 464 340 424 363 445 355 b 511 234 495 315 511 278 b 354 -28 511 109 447 1 b 314 -34 341 -32 327 -34 b 274 -23 297 -34 282 -31 b 264 -16 272 -22 268 -18 b 226 40 246 -1 233 18 b 223 49 224 45 223 48 b 223 50 223 49 223 50 b 186 -69 222 50 216 29 b 150 -194 156 -170 150 -190 b 151 -196 150 -196 150 -196 b 182 -208 155 -200 169 -205 b 193 -211 186 -209 191 -210 b 204 -226 201 -213 204 -219 b 196 -240 204 -231 202 -237 b 76 -241 194 -241 135 -241 b -43 -240 17 -241 -41 -241 b -52 -226 -49 -237 -52 -231 b -48 -215 -52 -222 -51 -218 b -31 -209 -45 -212 -44 -211 b 27 -180 8 -200 22 -194 b 163 273 32 -167 163 269 b 166 285 164 276 165 281 b 167 298 167 290 167 294 b 153 316 167 309 162 316 b 148 315 152 316 150 316 b 66 225 117 307 84 271 b 53 210 61 212 60 210 b 43 219 46 210 43 213 b 46 233 43 223 44 228 b 140 353 66 284 98 326 b 152 362 145 356 150 360 b 185 375 158 367 173 373 z m 375 299 b 365 301 372 300 369 301 b 299 268 348 301 320 287 b 284 248 288 256 286 254 b 280 238 283 245 281 240 b 257 166 278 235 271 212 l 236 98 l 237 91 b 250 48 237 76 243 60 b 278 27 258 37 271 27 b 280 28 279 27 280 27 b 290 32 281 28 286 30 b 403 216 347 58 395 135 b 405 241 404 225 405 234 b 375 299 405 272 396 288 z', - }, - dynamicMezzo: { - x_min: 32, - x_max: 463, - y_min: -18, - y_max: 256, - ha: 274, - o: 'm 180 367 b 193 368 184 368 189 368 b 265 329 221 368 249 353 b 274 311 268 324 273 313 b 274 310 274 310 274 310 b 279 316 275 310 276 312 b 309 349 288 329 298 340 b 318 357 312 351 316 355 b 353 368 327 365 339 368 b 408 350 372 368 392 362 b 435 311 420 340 433 321 b 436 310 436 310 436 310 b 441 316 436 310 438 312 b 471 349 449 329 460 340 b 480 357 474 351 478 355 b 515 368 488 365 501 368 b 569 350 533 368 554 362 b 603 277 591 333 603 304 b 595 244 603 265 600 254 b 541 65 593 240 541 68 b 540 56 541 64 541 59 b 538 44 539 52 538 48 b 550 24 538 33 543 24 b 551 24 550 24 550 24 b 643 119 583 28 624 70 b 657 136 649 134 650 136 b 667 127 663 136 667 133 b 654 92 667 120 663 109 b 560 -12 631 44 601 11 b 547 -19 554 -14 549 -18 b 519 -26 538 -24 529 -26 b 452 17 493 -26 466 -10 b 442 59 445 29 442 44 b 449 92 442 71 444 83 b 503 271 451 96 503 268 b 505 280 503 273 504 276 b 506 292 506 285 506 289 b 491 318 506 304 501 313 b 485 320 488 320 486 320 b 477 317 483 320 481 319 b 440 265 461 309 442 282 b 434 245 439 260 436 248 b 397 125 433 243 417 191 b 357 2 360 1 361 4 l 355 0 l 313 0 b 301 0 309 0 305 0 b 266 5 267 0 269 0 b 265 8 265 6 265 6 b 303 140 265 14 271 35 b 341 272 324 210 341 270 b 343 281 342 274 343 278 b 345 292 344 285 345 289 b 329 318 345 304 339 313 b 323 320 326 319 325 320 b 315 317 321 320 319 319 b 278 265 300 309 280 282 b 272 245 278 260 274 248 b 236 125 271 243 256 191 b 196 2 198 1 199 4 l 194 0 l 152 0 b 140 0 147 0 143 0 b 104 5 105 0 107 0 b 103 8 104 6 103 6 b 141 140 103 14 110 35 b 180 272 162 210 180 270 b 182 281 180 274 181 278 b 183 292 183 285 183 289 b 168 318 183 304 178 313 b 161 320 166 319 164 320 b 141 313 156 320 150 317 b 70 226 113 299 86 266 b 57 210 65 212 63 210 b 47 219 50 210 47 213 b 50 233 47 223 48 228 b 152 355 71 287 110 334 b 160 360 154 356 158 358 b 180 367 165 363 172 366 z', - }, - dynamicForte: { - x_min: -81, - x_max: 413, - y_min: -171, - y_max: 390, - ha: 561, - o: 'm 457 561 b 462 561 458 561 460 561 b 484 560 469 561 481 561 b 496 559 486 560 492 559 b 593 491 541 556 584 525 b 595 475 594 485 595 480 b 526 407 595 438 562 407 b 500 413 517 407 508 409 b 464 469 476 423 464 446 b 487 515 464 486 471 504 b 488 517 488 516 488 516 b 488 517 488 517 488 517 b 466 505 487 517 473 510 b 349 332 418 472 375 409 b 345 321 347 326 345 321 b 382 321 345 321 362 321 b 390 321 385 321 387 321 b 431 315 425 321 424 320 b 440 295 437 310 440 303 b 431 275 440 287 437 280 b 386 269 424 270 426 269 b 375 269 383 269 379 269 l 331 269 l 330 262 b 164 -137 301 113 238 -38 b -22 -246 113 -205 43 -246 b -26 -246 -23 -246 -25 -246 b -117 -155 -78 -245 -117 -204 b -114 -132 -117 -147 -116 -140 b -50 -84 -106 -100 -78 -84 b 16 -133 -22 -84 7 -100 b 18 -149 17 -138 18 -144 b -12 -202 18 -170 7 -190 b -15 -204 -14 -203 -15 -203 b -15 -204 -15 -204 -15 -204 b -9 -202 -14 -204 -12 -203 b 75 -122 23 -193 55 -163 b 96 -69 82 -108 87 -96 b 175 231 118 -3 137 68 b 184 268 180 251 184 268 b 184 268 184 268 184 268 b 142 269 184 269 180 269 b 92 272 97 269 96 269 b 78 295 83 278 78 286 b 92 318 78 303 83 312 b 148 321 96 320 96 320 l 198 321 l 202 332 b 457 561 248 461 350 553 z', - }, - dynamicRinforzando: { - x_min: 55, - x_max: 336, - y_min: 0, - y_max: 258, - ha: 258, - o: 'm 360 371 b 377 372 365 372 371 372 b 478 331 419 372 465 354 b 484 308 482 323 484 316 b 461 268 484 291 475 276 b 438 261 453 263 445 261 b 398 283 423 261 408 269 b 343 312 383 303 363 312 b 281 264 315 312 289 295 b 278 256 280 260 279 257 b 276 251 278 255 277 253 b 273 244 275 248 274 246 b 237 125 273 243 256 189 b 197 2 200 1 201 4 l 195 0 l 153 0 b 141 0 149 0 145 0 b 106 5 106 0 108 0 b 105 8 105 6 105 6 b 142 140 105 14 111 35 b 181 272 164 211 181 270 b 183 282 181 274 182 279 b 185 296 184 287 185 291 b 164 323 185 311 177 322 b 160 323 163 323 161 323 b 103 297 140 323 119 313 b 89 287 94 288 93 287 b 79 297 82 287 79 292 b 81 305 79 299 79 302 b 140 350 93 321 119 341 b 199 365 158 358 185 365 b 202 365 200 365 201 365 b 266 328 230 362 251 349 b 268 324 267 326 268 325 b 268 324 268 324 268 324 b 273 329 268 324 271 326 b 360 371 297 352 328 367 z', - }, - dynamicSforzando: { - x_min: 49, - x_max: 262, - y_min: -21, - y_max: 254, - ha: 274, - o: 'm 244 365 b 255 365 247 365 251 365 b 347 340 286 365 318 357 b 372 318 361 333 367 327 b 377 296 375 311 377 303 b 338 245 377 273 361 250 b 328 244 334 244 331 244 b 282 288 302 244 282 265 b 287 307 282 294 284 301 b 290 312 288 310 289 312 b 290 312 290 312 290 312 b 269 314 290 314 279 314 b 253 313 263 314 256 314 b 207 282 230 309 212 297 b 206 277 206 281 206 279 b 257 218 206 261 229 234 b 283 202 272 210 277 206 b 350 89 326 170 350 128 b 339 46 350 74 347 60 b 205 -30 312 -3 261 -30 b 95 7 168 -30 130 -18 b 71 48 79 18 71 32 b 80 77 71 57 74 67 b 121 100 88 92 105 100 b 154 87 133 100 145 96 b 167 56 163 78 167 67 b 160 32 167 47 165 39 l 156 27 l 158 26 b 190 21 167 23 179 21 b 212 23 198 21 206 22 b 258 64 238 30 258 48 b 257 70 258 66 258 68 b 204 124 248 92 234 107 b 115 247 151 153 119 198 b 114 254 114 249 114 251 b 244 365 114 310 173 361 z', - }, - dynamicZ: { - x_min: 22, - x_max: 291, - y_min: 2, - y_max: 235, - ha: 233, - o: 'm 116 338 b 208 339 118 338 158 339 b 409 338 294 339 408 338 b 419 323 415 335 419 329 b 414 312 419 319 417 315 b 296 214 412 310 359 266 b 179 117 232 161 180 118 l 177 116 l 189 116 b 193 116 190 116 192 116 b 252 95 217 116 234 110 b 301 75 267 83 287 75 b 306 75 303 75 304 75 b 319 88 310 76 314 79 b 322 92 321 90 322 91 b 321 92 322 92 322 92 b 319 91 321 92 320 92 b 310 90 316 90 313 90 b 276 126 292 90 276 106 b 277 133 276 128 277 131 b 320 165 281 153 300 165 b 349 153 330 165 341 161 b 360 116 357 144 360 131 b 337 56 360 94 352 69 b 303 28 329 48 309 33 b 225 3 278 12 250 3 b 169 20 205 3 185 8 b 110 37 152 31 130 37 b 81 32 99 37 89 36 b 63 21 74 30 72 29 b 47 13 54 14 52 13 b 31 28 37 13 31 20 b 35 40 31 32 32 36 b 68 67 38 43 57 59 b 285 246 75 72 281 243 b 285 246 285 246 285 246 b 231 247 285 247 260 247 b 137 246 190 247 141 246 b 96 225 123 243 110 237 b 83 217 88 218 87 217 b 80 216 82 216 81 216 b 65 232 71 216 65 223 l 65 232 l 65 237 l 86 284 b 109 333 98 310 108 332 b 116 338 111 335 114 338 z', - }, - ornamentTrill: { - x_min: -234, - x_max: 234, - y_min: 0, - y_max: 354, - ha: 354, - o: 'm -87 472 b -28 509 -31 509 -31 509 b -20 502 -23 509 -20 506 b -66 344 -20 500 -61 360 l -67 342 l -44 343 b 118 360 12 344 67 350 b 140 364 128 362 135 364 b 157 359 146 364 151 362 b 170 348 161 357 169 351 b 171 348 170 348 171 348 b 216 357 174 348 183 350 b 286 370 269 370 272 370 l 287 370 b 335 332 310 370 328 356 b 337 316 337 328 337 322 b 333 295 337 307 336 297 b 241 273 331 293 247 273 b 241 273 241 273 241 273 b 235 281 237 274 235 277 b 236 286 235 283 235 284 b 236 295 236 289 236 292 b 220 329 236 309 230 322 l 216 332 l 210 328 b 159 270 190 314 172 294 b 119 147 153 260 156 269 b 83 35 87 40 86 36 b -8 14 79 33 -4 14 b -8 14 -8 14 -8 14 b -14 20 -12 15 -14 16 b -8 44 -14 24 -12 31 b -2 65 -4 55 -2 65 b -2 65 -2 65 -2 65 b -43 41 -2 65 -20 54 b -115 4 -96 9 -98 8 b -142 0 -124 1 -133 0 b -241 99 -196 0 -241 43 b -240 112 -241 103 -240 108 b -210 217 -238 122 -241 113 b -184 306 -195 265 -184 305 b -184 306 -184 306 -184 306 b -186 306 -184 306 -185 306 b -257 305 -194 306 -223 305 b -320 304 -291 305 -310 304 b -333 305 -330 304 -332 305 b -337 312 -336 306 -337 309 b -335 317 -337 314 -336 316 b -289 330 -333 319 -332 320 l -245 340 l -208 340 l -171 341 l -158 386 b -143 433 -150 412 -144 433 b -87 472 -143 434 -117 451 z m 58 328 b 54 328 56 328 55 328 b 37 325 51 328 48 327 b -58 311 8 319 -28 313 b -78 302 -79 309 -77 310 b -108 198 -78 299 -88 266 b -139 83 -141 89 -139 93 b -139 82 -139 83 -139 82 b -116 50 -139 63 -128 50 b -107 52 -113 50 -110 50 b 16 125 -104 53 16 124 b 43 214 18 126 43 211 b 50 236 43 217 45 224 b 74 314 53 246 74 311 b 58 328 74 320 66 326 z', - }, - ornamentTurn: { - x_min: -292, - x_max: 292, - y_min: -134, - y_max: 134, - ha: 269, - o: 'm -256 193 b -248 193 -254 193 -251 193 b -190 186 -234 193 -207 190 b 41 45 -112 166 -35 119 b 245 -85 110 -23 180 -67 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 295 -93 b 377 1 340 -86 372 -47 b 378 11 377 5 378 8 b 301 82 378 54 344 82 b 242 65 283 82 263 76 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 182 148 148 164 169 b 260 193 220 190 240 193 b 410 85 327 193 388 152 b 420 22 417 65 420 44 b 343 -153 420 -43 391 -112 b 241 -193 311 -180 279 -193 b 167 -180 219 -193 195 -189 b -44 -45 95 -158 27 -114 b -235 81 -109 19 -169 58 b -293 93 -259 89 -277 93 b -339 78 -311 93 -325 88 b -377 6 -365 61 -377 34 b -328 -73 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -66 -279 -80 -263 -75 b -210 -56 -233 -59 -221 -56 b -177 -67 -199 -56 -187 -60 b -150 -118 -159 -79 -150 -98 b -177 -170 -150 -138 -159 -158 b -255 -191 -198 -184 -227 -191 b -275 -190 -262 -191 -269 -191 b -420 -5 -362 -178 -420 -97 b -409 64 -420 17 -417 41 b -263 192 -386 133 -328 184 b -256 193 -260 192 -257 193 z', - }, - ornamentTurnSlash: { - x_min: -292, - x_max: 292, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm -9 271 b -1 272 -7 271 -4 272 b 18 259 7 272 15 267 b 19 161 19 256 19 255 l 19 66 l 41 46 b 246 -85 113 -24 179 -66 b 289 -94 268 -91 279 -94 b 299 -93 292 -94 296 -93 b 377 2 340 -86 372 -47 b 378 11 378 5 378 8 b 302 82 378 54 345 82 b 243 66 283 82 263 77 b 208 56 231 59 219 56 b 148 118 175 56 148 81 b 201 183 148 149 164 169 b 260 194 221 190 241 194 b 405 99 322 194 378 159 b 420 23 415 77 420 51 b 416 -22 420 8 419 -7 b 242 -193 398 -120 323 -193 b 242 -193 242 -193 242 -193 b 22 -102 179 -193 95 -159 l 19 -101 l 19 -178 b 19 -210 19 -191 19 -201 b 14 -266 19 -265 19 -261 b -1 -272 10 -270 4 -272 b -20 -259 -9 -272 -17 -267 b -22 -161 -22 -256 -22 -255 l -22 -66 l -43 -46 b -235 81 -112 21 -168 58 b -293 93 -258 89 -277 93 b -338 79 -310 93 -324 88 b -377 6 -365 62 -377 34 b -328 -72 -377 -26 -360 -58 b -295 -80 -317 -77 -306 -80 b -244 -65 -279 -80 -263 -75 b -210 -56 -232 -59 -221 -56 b -166 -76 -193 -56 -178 -63 b -150 -118 -155 -88 -150 -103 b -177 -170 -150 -138 -159 -158 b -252 -191 -199 -184 -225 -191 b -353 -155 -288 -191 -325 -179 b -420 -7 -399 -116 -420 -62 b -276 190 -420 81 -367 169 b -245 193 -266 192 -256 193 b -24 102 -183 193 -99 159 l -22 101 l -22 178 b -20 259 -22 255 -22 256 b -9 271 -19 264 -14 269 z', - }, - ornamentMordent: { - x_min: -278, - x_max: 278, - y_min: -202, - y_max: 186, - ha: 388, - o: 'm -11 267 b -3 268 -8 268 -6 268 b 16 256 5 268 13 264 b 18 155 18 254 18 253 l 18 56 l 64 111 b 111 168 92 145 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b 28 0 28 0 28 0 b 23 -6 27 0 25 -3 l 18 -11 l 18 -143 b 18 -205 18 -168 18 -188 b 12 -285 18 -289 18 -280 b -2 -291 8 -289 3 -291 b -21 -280 -10 -291 -18 -287 b -23 -169 -23 -277 -23 -276 l -23 -62 l -66 -114 b -111 -168 -93 -147 -109 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -210 171 -219 170 -214 171 b -199 168 -206 171 -202 170 b -45 17 -197 167 -109 81 l -28 0 l -25 2 l -23 5 l -23 128 b -22 255 -23 251 -23 252 b -11 267 -20 260 -15 265 z', - }, - ornamentShortTrill: { - x_min: -278, - x_max: 278, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -217 170 b -211 171 -216 171 -213 171 b -199 168 -207 171 -202 170 b -112 83 -197 167 -159 129 b -28 0 -66 38 -28 0 b 41 83 -27 0 4 37 b 111 168 84 136 110 167 b 123 171 115 170 119 171 b 135 168 127 171 132 170 b 289 17 137 167 218 87 l 306 -1 l 334 34 b 379 76 369 76 369 76 l 380 76 b 401 56 392 76 401 67 b 399 47 401 53 400 50 b 222 -168 396 41 227 -165 b 210 -171 219 -170 214 -171 b 198 -168 206 -171 202 -170 b 112 -83 197 -167 159 -129 b 28 0 66 -38 28 0 b -41 -83 27 0 -4 -37 b -111 -168 -84 -136 -110 -167 b -123 -171 -115 -170 -119 -171 b -135 -168 -127 -171 -131 -170 b -289 -17 -137 -167 -219 -85 l -306 1 l -334 -34 b -379 -76 -369 -76 -369 -76 l -380 -76 b -401 -56 -392 -76 -401 -67 b -399 -47 -401 -53 -400 -50 b -222 168 -396 -41 -227 165 b -217 170 -221 169 -219 170 z', - }, - ornamentTremblement: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 119, - ha: 238, - o: 'm -384 170 b -378 171 -382 171 -380 171 b -365 168 -373 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -233 38 -195 0 l -194 0 b -126 83 -194 0 -163 37 b -55 168 -83 136 -57 167 b -43 171 -52 170 -48 171 b -32 168 -39 171 -35 170 b 54 83 -31 167 8 129 b 139 0 101 38 139 0 b 208 83 139 0 170 37 b 278 168 251 136 276 167 b 290 171 282 170 286 171 b 302 168 294 171 298 170 b 456 17 303 167 385 87 l 473 -1 l 501 34 b 546 76 536 76 536 76 l 547 76 b 567 56 559 76 567 67 b 565 47 567 53 567 50 b 389 -168 563 41 393 -165 b 377 -171 385 -170 381 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 325 -129 b 194 0 233 -38 195 0 l 194 0 b 126 -83 194 0 163 -37 b 55 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 39 -171 35 -170 b -54 -83 31 -167 -8 -129 b -139 0 -101 -38 -139 0 l -139 0 b -208 -83 -139 0 -170 -37 b -278 -168 -251 -136 -276 -167 b -290 -171 -282 -170 -286 -171 b -302 -168 -294 -171 -298 -170 b -456 -17 -303 -167 -386 -85 l -473 1 l -501 -34 b -546 -76 -536 -76 -536 -76 l -547 -76 b -567 -56 -559 -76 -567 -67 b -565 -47 -567 -53 -567 -50 b -389 168 -563 -41 -393 165 b -384 170 -388 169 -385 170 z', - }, - ornamentPrecompAppoggTrill: { - x_min: -394, - x_max: 394, - y_min: -119, - y_max: 240, - ha: 359, - o: 'm -556 343 b -547 345 -553 345 -550 345 b -527 331 -539 345 -530 340 b -526 166 -527 330 -526 285 l -526 2 l -495 39 b -429 120 -479 59 -449 96 b -390 167 -408 145 -391 165 b -376 171 -386 170 -381 171 b -365 168 -372 171 -368 170 b -279 83 -364 167 -325 129 b -194 0 -232 38 -194 0 b -125 83 -194 0 -163 37 b -55 168 -82 136 -57 167 b -43 171 -51 170 -47 171 b -31 168 -39 171 -35 170 b 55 83 -30 167 9 129 b 139 0 101 38 139 0 l 139 0 b 208 83 140 0 171 37 b 278 168 251 136 277 167 b 290 171 282 170 286 171 b 302 168 295 171 299 170 b 456 17 304 167 385 87 l 473 -1 l 501 34 b 547 76 536 76 536 76 l 547 76 b 568 56 559 76 568 67 b 566 47 568 53 567 50 b 389 -168 563 41 394 -165 b 377 -171 386 -170 382 -171 b 365 -168 373 -171 369 -170 b 279 -83 364 -167 326 -129 b 195 0 233 -38 195 0 l 195 0 b 126 -83 194 0 164 -37 b 56 -168 83 -136 57 -167 b 44 -171 52 -170 48 -171 b 32 -168 40 -171 36 -170 b -54 -83 31 -167 -8 -129 b -139 0 -100 -38 -138 0 b -207 -83 -139 0 -170 -37 b -278 -168 -250 -136 -276 -167 b -289 -171 -281 -170 -285 -171 b -301 -168 -294 -171 -298 -170 b -455 -17 -303 -167 -400 -71 l -473 1 l -503 -36 b -536 -74 -525 -63 -533 -73 b -547 -78 -539 -77 -543 -78 b -566 -66 -555 -78 -562 -73 l -567 -63 l -568 133 l -568 328 l -566 332 b -556 343 -565 337 -561 341 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 119, - ha: 348, - o: 'm -365 170 b -359 171 -363 171 -361 171 b -346 168 -354 171 -349 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 73 83 -12 167 27 129 b 158 0 120 38 158 0 b 227 83 158 0 189 37 b 297 168 270 136 295 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 145 -83 213 0 182 -37 b 74 -168 102 -136 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -365 170 -373 166 -370 168 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: -407, - x_max: 407, - y_min: -229, - y_max: 186, - ha: 415, - o: 'm 175 267 b 183 268 178 268 180 268 b 202 256 191 268 199 264 b 204 155 203 254 203 253 l 204 56 l 249 111 b 297 168 278 145 296 167 b 309 171 301 170 305 171 b 321 168 313 171 317 170 b 475 17 322 167 404 87 l 492 -1 l 520 34 b 565 76 555 76 555 76 l 566 76 b 586 56 578 76 586 67 b 584 47 586 53 586 50 b 408 -168 582 41 412 -165 b 396 -171 404 -170 400 -171 b 384 -168 392 -171 388 -170 b 298 -83 383 -167 344 -129 b 213 0 252 -38 214 0 b 213 0 213 0 213 0 b 208 -6 213 0 211 -3 l 204 -11 l 204 -143 b 204 -205 204 -168 204 -188 b 198 -285 204 -289 203 -280 b 183 -291 194 -289 188 -291 b 164 -280 175 -291 168 -287 b 163 -169 163 -277 163 -276 l 162 -62 l 120 -114 b 75 -168 93 -147 76 -167 b 63 -171 71 -170 67 -171 b 51 -168 58 -171 54 -170 b -35 -83 50 -167 11 -129 b -120 0 -82 -38 -120 0 b -189 -83 -120 0 -151 -37 b -259 -168 -232 -136 -257 -167 b -271 -171 -263 -170 -267 -171 b -283 -168 -275 -171 -279 -170 b -369 -83 -284 -167 -323 -129 b -454 0 -416 -37 -454 0 b -454 0 -454 0 -454 0 b -475 -25 -455 0 -467 -14 b -545 -221 -520 -86 -545 -156 b -533 -296 -545 -247 -541 -272 b -530 -310 -531 -301 -530 -306 b -550 -330 -530 -322 -538 -330 b -573 -306 -562 -330 -567 -325 b -586 -221 -582 -279 -586 -251 b -514 -8 -586 -150 -561 -74 b -462 57 -506 4 -501 9 b -401 132 -444 79 -416 113 b -370 168 -383 153 -371 167 b -358 171 -366 170 -362 171 b -346 168 -354 171 -350 170 b -260 83 -345 167 -306 129 b -175 0 -214 38 -176 0 l -175 0 b -107 83 -175 0 -144 37 b -36 168 -64 136 -38 167 b -24 171 -33 170 -29 171 b -13 168 -20 171 -16 170 b 141 17 -11 167 76 81 l 158 0 l 160 2 l 163 5 l 163 128 b 164 255 163 251 163 252 b 175 267 166 260 171 265 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: -407, - x_max: 407, - y_min: -119, - y_max: 229, - ha: 348, - o: 'm 542 328 b 550 330 545 329 547 330 b 565 324 556 330 561 328 b 586 216 576 312 586 259 b 585 191 586 207 586 199 b 526 25 578 131 559 78 b 462 -57 513 6 509 0 b 401 -132 444 -79 416 -113 b 370 -168 383 -153 371 -167 b 358 -171 366 -170 362 -171 b 346 -168 354 -171 350 -170 b 260 -83 345 -167 306 -129 b 175 0 214 -38 176 0 l 175 0 b 107 -83 175 0 144 -37 b 36 -168 64 -136 38 -167 b 25 -171 33 -170 29 -171 b 13 -168 20 -171 16 -170 b -73 -83 12 -167 -27 -129 b -158 0 -120 -38 -158 0 b -227 -83 -158 0 -189 -37 b -297 -168 -270 -136 -296 -167 b -309 -171 -301 -170 -305 -171 b -321 -168 -313 -171 -317 -170 b -475 -17 -322 -167 -405 -85 l -492 1 l -520 -34 b -565 -76 -555 -76 -555 -76 l -566 -76 b -586 -56 -578 -76 -586 -67 b -584 -47 -586 -53 -586 -50 b -408 168 -582 -41 -412 165 b -396 171 -404 170 -400 171 b -384 168 -392 171 -388 170 b -298 83 -383 167 -344 129 b -213 0 -252 38 -214 0 b -145 83 -213 0 -182 37 b -74 168 -102 136 -76 167 b -62 171 -71 170 -67 171 b -51 168 -58 171 -54 170 b 35 83 -50 167 -11 129 b 120 0 82 38 120 0 b 189 83 120 0 151 37 b 259 168 232 136 257 167 b 271 171 263 170 267 171 b 283 168 275 171 279 170 b 369 83 284 167 323 129 b 454 0 416 37 454 0 b 454 0 454 0 454 0 b 475 25 455 0 467 14 b 545 221 520 86 545 156 b 533 296 545 247 541 272 b 530 310 531 301 530 306 b 542 328 530 319 534 325 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: -413, - x_max: 413, - y_min: -119, - y_max: 222, - ha: 341, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 81 83 -4 167 35 129 b 166 0 128 38 166 0 l 166 0 b 234 83 166 0 197 37 b 305 168 277 136 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 l 221 0 b 153 -83 221 0 190 -37 b 82 -168 110 -136 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: -413, - x_max: 413, - y_min: -202, - y_max: 222, - ha: 424, - o: 'm -530 318 b -522 320 -527 319 -525 320 b -502 299 -511 320 -502 311 b -502 298 -502 299 -502 298 b -509 279 -502 293 -502 293 b -553 109 -538 221 -553 165 b -548 59 -553 92 -551 75 b -521 -20 -544 32 -532 -2 l -519 -22 l -480 25 b -404 118 -459 51 -425 93 b -363 167 -383 144 -365 165 b -350 171 -359 170 -355 171 b -339 168 -346 171 -342 170 b -252 83 -337 167 -298 129 b -168 0 -206 38 -168 0 b -99 83 -167 0 -136 37 b -29 168 -56 136 -30 167 b -17 171 -25 170 -21 171 b -5 168 -13 171 -8 170 b 149 17 -3 167 84 81 l 166 0 l 168 2 l 170 5 l 170 128 b 172 255 170 251 170 252 b 191 268 175 263 183 268 b 205 262 196 268 201 266 b 211 155 212 256 211 267 l 212 56 l 257 111 b 305 168 285 145 303 167 b 317 171 308 170 313 171 b 328 168 321 171 325 170 b 482 17 330 167 412 87 l 500 -1 l 528 34 b 573 76 563 76 563 76 l 573 76 b 594 56 585 76 594 67 b 592 47 594 53 594 50 b 416 -168 589 41 420 -165 b 404 -171 412 -170 408 -171 b 392 -168 400 -171 395 -170 b 306 -83 391 -167 352 -129 b 221 0 259 -38 221 0 b 221 0 221 0 221 0 b 216 -6 221 0 219 -3 l 211 -11 l 211 -143 b 211 -205 211 -168 211 -188 b 206 -285 211 -289 211 -280 b 191 -291 202 -289 196 -291 b 172 -280 183 -291 176 -287 b 170 -169 171 -277 171 -276 l 170 -62 l 128 -114 b 82 -168 100 -147 84 -167 b 70 -171 79 -170 75 -171 b 58 -168 66 -171 62 -170 b -28 -83 57 -167 19 -129 b -112 0 -74 -38 -112 0 b -181 -83 -113 0 -143 -37 b -251 -168 -224 -136 -250 -167 b -263 -171 -255 -170 -259 -171 b -275 -168 -267 -171 -271 -170 b -429 -17 -277 -167 -374 -71 l -446 1 l -476 -36 b -520 -78 -510 -77 -510 -78 l -521 -78 b -542 -64 -529 -78 -534 -74 b -594 108 -576 -18 -594 43 b -558 274 -594 162 -582 219 b -530 318 -545 304 -537 315 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: -413, - x_max: 413, - y_min: -222, - y_max: 119, - ha: 341, - o: 'm -411 170 b -405 171 -409 171 -407 171 b -392 168 -400 171 -395 170 b -306 83 -391 167 -352 129 b -221 0 -259 38 -221 0 l -221 0 b -153 83 -221 0 -190 37 b -82 168 -110 136 -84 167 b -70 171 -79 170 -74 171 b -59 168 -66 171 -62 170 b 28 83 -57 167 -19 129 b 112 0 74 38 112 0 b 181 83 113 0 144 37 b 251 168 224 136 250 167 b 263 171 255 170 259 171 b 275 168 267 171 271 170 b 429 17 277 167 373 72 l 446 -1 l 476 36 b 520 78 510 77 510 78 l 521 78 b 542 64 529 78 534 74 b 594 -109 576 18 594 -43 b 571 -242 594 -152 586 -197 b 537 -314 561 -270 543 -307 b 522 -319 533 -318 527 -319 b 503 -307 514 -319 506 -315 b 501 -300 502 -304 501 -302 b 509 -279 501 -295 503 -290 b 553 -110 538 -221 553 -165 b 544 -38 553 -85 550 -61 b 521 20 539 -18 529 7 l 519 22 l 480 -25 b 404 -118 459 -51 425 -93 b 363 -167 383 -144 365 -165 b 350 -171 359 -170 355 -171 b 338 -168 346 -171 342 -170 b 252 -83 337 -167 299 -129 b 168 0 206 -38 168 0 l 168 0 b 99 -83 167 0 136 -37 b 29 -168 56 -136 30 -167 b 17 -171 25 -170 21 -171 b 5 -168 13 -171 8 -170 b -81 -83 4 -167 -35 -129 b -166 0 -127 -38 -166 0 b -234 -83 -166 0 -197 -37 b -305 -168 -277 -136 -303 -167 b -317 -171 -308 -170 -312 -171 b -329 -168 -321 -171 -325 -170 b -482 -17 -330 -167 -413 -85 l -500 1 l -528 -34 b -573 -76 -563 -76 -563 -76 l -573 -76 b -594 -56 -585 -76 -594 -67 b -592 -47 -594 -53 -594 -50 b -416 168 -589 -41 -420 165 b -411 170 -414 169 -412 170 z', - }, - stringsDownBow: { - x_min: -158, - x_max: 158, - y_min: 0, - y_max: 331, - ha: 331, - o: 'm -215 476 b 2 477 -212 477 -104 477 b 214 476 107 477 212 477 b 226 464 219 474 224 469 b 227 239 227 462 227 350 b 226 13 227 127 227 15 b 206 0 223 5 215 0 b 192 6 201 0 196 2 b 186 83 186 11 186 3 b 186 136 186 98 186 115 l 186 257 l 0 257 l -186 257 l -186 136 b -186 83 -186 115 -186 98 b -192 6 -186 3 -186 11 b -206 0 -196 2 -201 0 b -226 13 -215 0 -223 5 b -227 239 -227 15 -227 127 b -226 464 -227 350 -227 462 b -215 476 -224 469 -219 474 z', - }, - stringsUpBow: { - x_min: -103, - x_max: 103, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm -135 373 b -129 374 -133 374 -131 374 b -110 363 -121 374 -113 370 b -54 220 -109 362 -84 298 b 0 79 -25 143 0 79 b 55 220 0 79 25 143 b 110 363 84 298 109 362 b 128 375 114 371 121 375 b 149 354 138 375 149 367 l 149 348 l 84 180 b 18 10 48 87 19 11 b 0 0 15 3 8 0 b -18 10 -7 0 -15 3 b -148 352 -23 20 -148 348 b -149 354 -149 353 -149 353 b -135 373 -149 363 -144 370 z', - }, - stringsHarmonic: { - x_min: -77, - x_max: 77, - y_min: -77, - y_max: 77, - ha: 154, - o: 'm -18 109 b 1 111 -12 110 -5 111 b 111 0 61 111 111 60 b 107 -28 111 -9 109 -19 b -1 -111 94 -80 47 -111 b -78 -78 -28 -111 -56 -100 b -111 -1 -100 -56 -111 -28 b -18 109 -111 50 -76 99 z m 13 93 b 0 94 9 94 4 94 b -94 0 -53 94 -94 49 b -84 -42 -94 -14 -91 -28 b 0 -94 -67 -77 -33 -94 b 85 -42 34 -94 67 -77 b 94 -1 91 -29 94 -14 b 13 93 94 44 61 87 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: -103, - x_max: 103, - y_min: -103, - y_max: 192, - ha: 296, - o: 'm -8 276 b 0 277 -6 277 -3 277 b 19 264 8 277 16 272 b 20 204 20 261 20 260 l 20 148 l 24 147 b 144 37 80 140 130 94 b 149 0 147 25 149 12 b 37 -144 149 -67 104 -127 b 0 -149 25 -147 12 -149 b -144 -37 -67 -149 -127 -104 b -149 -1 -147 -25 -149 -13 b -24 147 -149 71 -96 137 l -21 148 l -21 204 b -19 264 -21 260 -21 261 b -8 276 -18 269 -13 274 z m -21 50 b -22 105 -21 102 -21 105 b -22 105 -22 105 -22 105 b -76 76 -35 104 -61 90 b -107 1 -97 54 -107 27 b 0 -107 -107 -54 -64 -107 b 107 1 64 -107 107 -54 b 76 76 107 27 97 54 b 21 105 61 90 33 105 b 20 50 21 105 20 86 b 19 -8 20 -3 20 -5 b 0 -21 16 -16 8 -21 b -15 -15 -5 -21 -11 -19 b -21 32 -20 -9 -21 -12 b -21 50 -21 37 -21 43 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: -103, - x_max: 103, - y_min: -192, - y_max: 103, - ha: 296, - o: 'm 8 -276 b 0 -277 6 -277 3 -277 b -19 -264 -8 -277 -16 -272 b -20 -204 -20 -261 -20 -260 l -20 -148 l -24 -147 b -144 -37 -80 -140 -130 -94 b -149 0 -147 -25 -149 -12 b -37 144 -149 67 -104 127 b 0 149 -25 147 -12 149 b 144 37 67 149 127 104 b 149 1 147 25 149 13 b 24 -147 149 -71 96 -137 l 21 -148 l 21 -204 b 19 -264 21 -260 21 -261 b 8 -276 18 -269 13 -274 z m 21 -50 b 22 -105 21 -102 21 -105 b 22 -105 22 -105 22 -105 b 76 -76 35 -104 61 -90 b 107 -1 97 -54 107 -27 b 0 107 107 54 64 107 b -107 -1 -64 107 -107 54 b -76 -76 -107 -27 -97 -54 b -21 -105 -61 -90 -33 -105 b -20 -50 -21 -105 -20 -86 b -19 8 -20 3 -20 5 b 0 21 -16 16 -8 21 b 15 15 5 21 11 19 b 21 -32 20 9 21 12 b 21 -50 21 -37 21 -43 z', - }, - pluckedLeftHandPizzicato: { - x_min: -146, - x_max: 146, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm -8 212 b 0 213 -6 212 -3 213 b 19 200 8 213 16 208 b 21 109 21 197 21 196 l 21 21 l 107 21 b 143 21 121 21 133 21 b 204 15 205 21 199 20 b 210 0 208 11 210 5 b 198 -19 210 -8 206 -16 b 107 -21 194 -21 193 -21 l 21 -21 l 21 -109 b 21 -145 21 -123 21 -135 b 15 -207 21 -207 20 -202 b 0 -213 11 -211 5 -213 b -19 -200 -8 -213 -16 -208 b -21 -109 -21 -197 -21 -196 l -21 -21 l -107 -21 b -198 -19 -193 -21 -194 -21 b -210 0 -206 -16 -210 -8 b -204 15 -210 5 -208 11 b -143 21 -199 20 -205 21 b -107 21 -133 21 -121 21 l -21 21 l -21 109 b -19 200 -21 196 -21 197 b -8 212 -18 205 -13 210 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 735, - y_min: -1, - y_max: 470, - ha: 471, - o: 'm 290 676 b 315 677 299 677 307 677 b 489 611 385 677 445 654 b 547 486 527 573 547 527 b 497 397 547 448 530 414 b 454 387 483 390 468 387 b 368 452 416 387 381 411 b 361 485 363 466 361 477 b 376 503 361 497 366 502 b 392 489 384 503 389 498 b 431 464 396 473 412 464 b 469 476 443 464 457 468 b 489 519 482 486 489 501 b 440 606 489 547 472 582 b 328 645 411 630 366 645 l 323 645 l 315 631 b 269 511 281 573 269 542 b 269 511 269 511 269 511 b 320 422 269 480 280 461 b 349 386 338 404 342 399 b 362 336 357 370 362 354 b 356 298 362 324 360 312 b 284 155 343 254 316 199 b 280 150 282 152 280 150 b 281 150 280 150 280 150 b 286 150 281 150 284 150 b 316 152 296 152 306 152 b 457 100 369 152 418 134 l 462 95 l 481 110 b 501 126 491 118 500 125 b 502 128 502 127 502 127 b 501 135 502 129 502 131 b 498 177 499 149 498 163 b 536 301 498 224 511 266 b 617 367 552 321 596 357 b 645 373 626 371 635 373 b 718 315 677 373 709 349 b 720 296 719 308 720 302 b 695 236 720 273 711 251 b 657 206 691 233 660 208 b 598 162 655 205 623 181 b 577 144 580 148 577 145 b 577 144 577 144 577 144 b 606 85 584 121 597 94 b 652 68 618 74 634 68 b 749 115 685 68 723 85 l 752 119 l 751 126 b 747 165 749 139 747 152 b 890 379 747 250 800 330 b 893 381 892 380 893 380 b 887 389 893 382 891 384 b 620 548 823 467 728 523 b 598 567 602 552 598 556 b 615 583 598 578 604 583 b 626 582 618 583 622 582 b 1046 265 831 542 999 416 b 1058 186 1054 238 1058 211 b 896 -1 1058 82 991 -1 b 874 1 889 -1 882 0 b 768 78 830 7 790 35 b 766 81 767 80 767 81 b 760 74 765 81 764 79 b 624 0 725 27 674 0 b 583 6 610 0 596 2 b 514 86 549 17 532 37 l 511 93 l 508 91 b 452 46 506 90 481 69 b 389 0 394 0 395 1 l 389 0 b 372 16 380 0 375 5 b 267 104 358 68 313 104 b 250 102 261 104 256 103 l 242 100 l 232 88 b 154 2 200 50 159 4 b 147 0 152 0 149 0 b 131 16 138 0 131 7 b 132 21 131 18 131 20 b 135 32 132 23 134 27 b 220 129 149 74 178 107 b 244 154 229 134 229 134 b 300 273 282 204 300 243 b 264 328 300 293 294 302 b 210 426 235 354 216 389 b 209 444 209 431 209 438 b 278 633 209 491 231 552 l 285 644 l 282 644 b 273 643 281 644 277 643 b 57 466 161 627 72 555 b 55 449 56 461 55 454 b 72 400 55 426 62 405 b 94 395 79 396 87 395 b 152 457 123 395 151 421 b 168 477 153 471 158 477 b 184 450 181 477 184 471 b 184 449 184 450 184 450 b 83 315 183 373 142 318 b 78 315 81 315 79 315 b 0 416 29 315 0 352 l 0 417 b 290 676 0 548 130 664 z m 922 340 b 917 345 919 344 919 345 b 910 340 916 345 914 344 b 820 164 853 299 820 232 b 824 123 820 150 821 137 b 886 32 833 77 859 40 b 892 32 888 32 890 32 b 957 120 915 32 944 70 b 965 187 963 142 965 164 b 922 340 965 238 951 290 z m 625 318 b 618 319 623 319 620 319 b 602 315 613 319 608 318 b 578 275 597 313 585 293 b 566 208 570 257 566 231 b 568 186 566 200 567 193 b 569 180 568 182 568 180 b 572 181 570 180 570 180 b 626 223 576 185 604 206 b 654 248 649 241 650 241 b 660 272 658 256 660 264 b 625 318 660 293 646 314 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 409, - y_min: 61, - y_max: 470, - ha: 409, - o: 'm 282 676 b 293 677 285 677 288 677 b 312 675 300 677 308 676 b 356 615 340 667 356 644 b 333 565 356 594 352 583 b 311 525 318 549 311 537 b 316 504 311 518 313 511 b 351 481 323 489 337 481 b 365 483 356 481 361 482 b 397 540 389 492 397 506 b 446 607 397 577 414 601 b 460 609 450 608 455 609 b 521 546 496 609 521 578 b 503 503 521 531 516 516 b 450 484 489 489 477 485 b 423 481 435 484 431 484 b 393 440 404 475 393 457 b 411 407 393 427 399 415 b 436 398 420 401 428 398 b 478 422 449 398 462 406 b 524 445 495 438 506 444 b 527 445 525 445 526 445 b 589 382 563 445 589 415 b 583 355 589 373 587 364 b 527 321 572 333 552 321 l 527 321 b 478 343 506 321 495 326 b 437 366 461 360 450 366 b 429 366 435 366 432 366 b 393 326 407 361 393 345 b 398 305 393 319 395 312 b 450 281 407 287 419 282 b 503 262 478 280 489 276 b 521 219 516 250 521 234 b 460 156 521 187 495 156 b 446 157 455 156 451 156 b 397 224 414 164 397 188 b 369 280 397 257 389 272 b 351 284 363 283 357 284 b 312 250 332 284 317 271 b 311 240 311 246 311 243 b 333 200 311 227 317 216 b 356 151 352 181 356 171 l 356 150 b 295 88 356 113 327 88 b 255 102 281 88 268 92 b 233 150 240 114 233 132 b 244 186 233 163 236 175 b 256 200 245 188 250 194 b 279 240 272 216 279 227 b 277 250 279 243 278 246 b 238 284 272 271 257 284 b 220 280 232 284 226 283 b 193 224 200 272 193 257 b 143 157 193 188 175 164 b 130 156 139 156 134 156 b 68 218 95 156 68 185 b 77 251 68 229 71 240 b 139 281 90 272 106 280 b 171 286 158 281 161 282 b 185 296 178 288 180 290 b 196 326 193 305 196 316 b 169 363 196 342 186 356 b 152 366 163 365 157 366 b 112 343 139 366 128 359 b 98 331 106 338 100 333 b 63 320 87 324 75 320 b 2 367 35 320 9 338 b 0 383 1 372 0 377 b 62 445 0 417 28 445 b 78 443 67 445 73 444 b 111 422 91 440 98 435 b 151 398 128 406 140 398 b 153 398 152 398 152 398 b 196 439 180 401 196 418 b 191 460 196 446 194 453 b 139 484 182 478 169 484 b 87 503 112 485 101 489 b 68 546 74 516 68 531 b 130 609 68 578 94 609 b 144 607 134 609 139 608 b 193 540 175 601 193 577 b 224 483 193 506 200 492 b 238 481 229 482 233 481 b 273 504 253 481 266 489 b 279 524 277 511 279 518 b 256 565 279 537 272 549 b 239 587 246 575 243 579 b 232 615 234 596 232 605 b 282 676 232 643 252 669 z m 307 446 b 294 448 303 447 299 448 b 229 382 258 448 229 417 b 237 353 229 373 232 363 b 295 317 249 329 272 317 b 353 353 318 317 340 329 b 360 382 358 362 360 372 b 307 446 360 412 339 440 z', - }, - pictChokeCymbal: { - x_min: 0, - x_max: 158, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 91 210 b 100 210 94 210 97 210 b 222 98 154 210 205 164 b 227 52 225 83 227 67 b 62 -196 227 -39 165 -135 b 31 -210 46 -206 37 -210 b 24 -205 28 -210 26 -209 b 22 -200 23 -204 22 -202 b 34 -187 22 -196 26 -192 b 123 -53 90 -156 123 -103 b 105 7 123 -32 117 -11 l 103 10 l 94 10 b 5 77 54 12 18 39 b 0 110 2 88 0 99 b 91 210 0 160 37 204 z', - }, - arrowheadBlackUp: { - x_min: 11, - x_max: 239, - y_min: -6, - y_max: 269, - ha: 275, - o: 'm 171 386 b 179 387 174 387 176 387 b 201 378 187 387 196 384 b 212 345 206 372 206 372 b 333 45 237 235 282 123 b 344 19 343 29 344 27 b 317 -8 344 2 332 -8 b 299 -3 312 -8 305 -7 b 180 30 262 19 221 30 b 74 4 144 30 108 21 b 61 -3 70 2 64 -1 b 43 -8 55 -7 48 -8 b 16 19 28 -8 16 2 b 27 45 16 27 17 29 b 148 344 78 123 122 233 b 159 378 155 373 154 372 b 171 386 161 381 167 385 z', - }, - arrowheadBlackDown: { - x_min: 11, - x_max: 239, - y_min: 6, - y_max: 281, - ha: 275, - o: 'm 35 403 b 43 405 37 404 40 405 b 62 398 49 405 55 403 b 79 390 65 396 73 392 b 180 367 111 374 145 367 b 298 398 221 367 262 377 b 318 404 305 402 312 404 b 344 377 332 404 344 394 b 333 351 344 369 343 367 b 212 51 282 273 237 161 b 204 23 207 28 206 26 b 180 8 199 13 189 8 b 156 23 171 8 162 13 b 150 44 154 25 153 28 b 27 351 125 158 80 271 b 16 377 17 367 16 369 b 35 403 16 389 24 400 z', - }, - }, - fontFamily: 'GonvilleSmufl', - resolution: 1000, - generatedOn: '2022-12-24T06:31:40.861Z', -}; diff --git a/build/esm/src/fonts/gonville_metrics.js b/build/esm/src/fonts/gonville_metrics.js deleted file mode 100644 index aae371be34..0000000000 --- a/build/esm/src/fonts/gonville_metrics.js +++ /dev/null @@ -1,482 +0,0 @@ -export const GonvilleMetrics = { - name: 'Gonville', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: 0, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: -40, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 50, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 40, - advanceWidth: 250, - yOffset: -402, - }, - accidentalFlat: { - leftSideBearing: -50, - advanceWidth: 208, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 20, - treble: { - line: -1.2, - shiftX: 11, - }, - }, - '8vb': { - point: 20, - treble: { - line: 6.3, - shiftX: 10, - }, - bass: { - line: 4, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 18, - treble: { - line: -0.4, - shiftX: 8, - }, - }, - '8vb': { - point: 18, - treble: { - line: 5.8, - shiftX: 6, - }, - bass: { - line: 3.5, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 17, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -9, - stemUpYOffset: 24, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 3, - yOffset: -4, - stemUpYOffset: 10, - reportedWidth: 28, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 9, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 40, - }, - }, - digits: { - point: 40, - tupletPoint: 28, - }, - tremolo: { - default: { - point: 25, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 9, - offsetXStemDown: -0.5, - }, - grace: { - point: 15, - spacing: 4, - offsetYStemUp: -7, - offsetYStemDown: 7, - offsetXStemUp: 6.5, - offsetXStemDown: -0.5, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 0, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadBlack: { - offsetYBaseStemUp: -1.5, - offsetYBaseStemDown: 1.5, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - glyphs: { - flag: { - shiftX: -0.08, - flag8thDown: { - shiftX: -0.16, - }, - flag16thDown: { - shiftX: -0.16, - }, - flag32ndDown: { - shiftX: -0.16, - shiftY: 9, - }, - flag64thDown: { - shiftX: -0.16, - shiftY: 13, - }, - flag128thDown: { - shiftX: -0.16, - shiftY: 22, - }, - flag32ndUp: { - shiftY: -9, - }, - flag64thUp: { - shiftY: -13, - }, - flag128thUp: { - shiftY: -22, - }, - }, - clef_default: { - point: 40, - '6stringTabClef': { - point: 40, - shiftY: -5.5, - }, - }, - clef_small: { - point: 32, - }, - clefNote_default: { - point: 40, - }, - clefNote_small: { - point: 32, - }, - textNote: { - point: 40, - default: {}, - ornamentTrill: { - shiftX: -5, - shiftY: 4, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.95, - }, - }, - ornament: { - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - tremolo: { - default: { - shiftY: -10, - }, - grace: { - shiftY: -5, - }, - }, - }, -}; diff --git a/build/esm/src/fonts/leland_glyphs.js b/build/esm/src/fonts/leland_glyphs.js deleted file mode 100644 index 9283353161..0000000000 --- a/build/esm/src/fonts/leland_glyphs.js +++ /dev/null @@ -1,1183 +0,0 @@ -export const LelandFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 491, - y_min: 0, - y_max: 279, - ha: 279, - o: 'm 697 399 b 687 402 694 400 690 402 b 671 395 681 402 674 400 b 249 168 668 390 524 168 l 20 168 b 0 150 9 168 0 161 l 0 20 l 0 0 l 176 0 b 706 374 619 0 704 370 b 707 382 706 376 707 379 b 697 399 707 389 703 395 z', - }, - bracketBottom: { - x_min: 0, - x_max: 491, - y_min: -279, - y_max: 0, - ha: 279, - o: 'm 697 -399 b 707 -382 703 -395 707 -389 b 706 -374 707 -379 706 -376 b 176 0 704 -370 619 0 l 0 0 l 0 -20 l 0 -150 b 20 -168 0 -161 9 -168 l 249 -168 b 671 -395 524 -168 668 -390 b 687 -402 674 -400 681 -402 b 697 -399 690 -402 694 -400 z', - }, - segno: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 869, - ha: 869, - o: 'm 546 690 l 838 1207 b 841 1215 840 1210 841 1212 b 832 1233 841 1221 837 1230 l 809 1248 b 798 1251 806 1250 801 1251 b 780 1241 792 1251 783 1247 l 487 721 l 217 860 b 99 995 147 897 99 924 b 236 1165 99 1120 179 1165 b 343 1073 288 1165 325 1130 b 454 988 357 1022 405 988 b 477 991 461 988 469 989 b 541 1076 526 1002 541 1045 b 540 1089 541 1080 541 1084 b 294 1225 534 1116 514 1225 b 0 939 72 1225 0 1053 b 125 706 0 825 42 753 l 397 563 l 104 45 b 102 35 102 42 102 37 b 111 19 102 29 107 22 l 132 3 b 144 0 135 1 141 0 b 148 0 145 0 147 0 b 161 10 153 1 158 6 l 456 531 l 704 403 b 842 256 780 361 842 318 b 706 86 842 131 763 86 b 599 177 654 86 616 120 b 488 262 585 228 537 262 b 465 259 481 262 472 261 b 402 177 418 248 402 206 b 403 163 402 171 402 167 b 649 26 409 135 429 26 b 942 312 871 26 942 199 b 821 549 942 426 901 507 z m 52 444 b 118 416 69 426 95 416 b 183 444 141 416 166 426 b 210 508 200 461 210 485 b 183 573 210 531 200 556 b 118 600 166 590 141 600 b 52 573 95 600 69 590 b 24 508 35 556 24 531 b 52 444 24 485 35 461 z m 760 730 b 825 703 778 713 802 703 b 890 730 848 703 873 713 b 917 795 907 747 917 772 b 890 861 917 818 907 844 b 825 888 873 878 848 888 b 760 861 802 888 778 878 b 733 795 743 844 733 818 b 760 730 733 772 743 747 z', - }, - coda: { - x_min: 0, - x_max: 745, - y_min: -113, - y_max: 735, - ha: 848, - o: 'm 924 467 b 560 896 916 697 757 881 l 560 1038 b 540 1058 560 1050 552 1058 l 524 1058 b 505 1038 513 1058 505 1050 l 505 896 b 150 467 311 877 158 693 l 20 467 b 0 446 9 467 0 458 l 0 432 b 20 412 0 420 9 412 l 150 412 b 505 0 166 193 317 17 l 505 -143 b 524 -163 505 -154 513 -163 l 540 -163 b 560 -143 552 -163 560 -154 l 560 0 b 923 412 753 13 907 190 l 1054 412 b 1073 432 1066 412 1073 420 l 1073 446 b 1054 467 1073 458 1066 467 z m 560 467 l 560 852 b 773 467 716 837 773 671 z m 505 467 l 301 467 b 505 851 301 668 357 831 z m 505 412 l 505 45 b 301 412 366 65 301 219 z m 560 412 l 772 412 b 560 45 772 215 706 60 z', - }, - gClef: { - x_min: 0, - x_max: 640, - y_min: -666, - y_max: 1112, - ha: 1778, - o: 'm 809 -30 b 665 -279 809 -132 768 -238 b 586 186 635 -107 596 122 b 809 -30 716 186 809 98 z m 605 -297 b 521 -305 576 -302 549 -305 b 140 56 315 -305 140 -161 b 390 498 140 232 264 389 b 459 562 415 520 438 540 b 492 357 472 484 482 416 b 272 45 361 318 272 180 b 467 -194 272 -56 351 -194 b 491 -176 478 -194 491 -189 b 459 -144 491 -163 477 -156 b 372 -1 403 -109 372 -72 b 521 177 372 86 436 157 z m 478 1184 b 632 1392 491 1241 557 1392 b 688 1223 654 1392 688 1322 b 478 863 688 1073 577 960 b 462 1037 469 920 462 976 b 478 1184 462 1090 467 1139 z m 176 -739 b 444 -959 176 -834 249 -959 b 622 -910 511 -959 570 -942 b 720 -670 700 -855 720 -760 b 697 -467 720 -613 711 -549 b 675 -338 693 -438 684 -395 b 922 3 816 -292 922 -145 b 557 367 922 220 768 367 b 516 619 543 454 528 539 b 773 1188 668 779 773 959 b 710 1477 773 1319 733 1426 b 608 1601 675 1551 634 1601 b 505 1528 598 1601 553 1584 b 387 1113 413 1418 387 1234 b 419 804 387 1035 395 965 b 312 701 418 802 343 726 b 0 117 181 579 0 405 b 503 -364 0 -153 235 -364 b 616 -354 544 -364 583 -360 b 660 -670 644 -492 660 -593 b 438 -899 660 -819 583 -899 b 370 -891 403 -899 373 -891 b 366 -887 369 -890 366 -888 b 373 -881 366 -884 369 -883 b 508 -721 441 -871 508 -814 b 341 -562 508 -644 449 -562 b 176 -739 240 -562 176 -644 z', - }, - cClef: { - x_min: 0, - x_max: 627, - y_min: -480, - y_max: 482, - ha: 962, - o: 'm 19 675 b 0 657 9 675 0 667 l 0 -654 b 19 -672 0 -664 9 -672 l 122 -672 b 141 -654 132 -672 141 -664 l 141 657 b 122 675 141 667 132 675 z m 903 -376 b 619 -58 903 -197 808 -58 b 505 -95 586 -58 562 -60 b 426 1 503 -89 474 -32 b 505 98 474 35 503 92 b 641 60 560 65 579 60 b 903 379 816 60 903 223 b 580 694 903 580 755 694 b 318 517 472 694 318 649 b 438 400 318 446 367 400 b 546 510 501 400 546 446 b 425 615 546 589 494 615 b 547 651 458 638 503 651 b 723 400 698 651 723 530 b 593 128 723 289 720 128 b 438 279 467 128 441 265 b 418 300 438 281 438 300 b 396 279 397 300 396 281 b 264 29 383 200 344 62 l 264 657 b 246 675 264 667 256 675 b 228 657 236 675 228 667 l 228 -654 b 246 -672 228 -664 236 -672 b 264 -654 256 -672 264 -664 l 264 -26 b 396 -278 348 -60 380 -197 b 418 -297 396 -279 397 -297 b 438 -278 438 -297 438 -279 b 593 -125 441 -262 467 -125 b 723 -397 720 -125 723 -287 b 547 -648 723 -527 698 -648 b 425 -612 503 -648 458 -635 b 441 -613 426 -612 432 -613 b 546 -507 504 -613 546 -569 b 438 -397 546 -444 501 -397 b 318 -514 367 -397 318 -444 b 580 -691 318 -647 472 -691 b 903 -376 755 -691 903 -577 z', - }, - fClef: { - x_min: 0, - x_max: 664, - y_min: -617, - y_max: 251, - ha: 868, - o: 'm 366 361 b 167 298 256 361 168 298 b 37 112 84 236 50 163 b 27 36 30 86 27 60 b 46 -58 27 1 33 -30 b 140 -138 63 -96 96 -124 b 194 -147 157 -144 176 -147 b 287 -122 226 -147 259 -138 b 359 10 331 -98 359 -46 b 289 134 359 60 333 107 b 206 160 259 154 230 160 b 160 153 189 160 173 157 b 109 122 145 147 121 132 b 147 215 114 150 131 192 b 219 279 163 238 194 266 b 351 308 255 300 301 308 b 570 -52 498 308 570 190 b 477 -399 570 -186 520 -314 b 310 -635 429 -494 366 -585 b 17 -837 160 -772 19 -837 b 0 -864 17 -837 0 -847 b 1 -871 0 -867 1 -868 b 27 -888 6 -886 19 -888 b 35 -887 29 -888 33 -887 b 331 -717 36 -887 200 -819 b 528 -544 405 -664 471 -606 b 661 -367 580 -488 625 -428 b 760 -50 724 -259 760 -147 b 670 239 760 69 729 168 b 366 361 602 320 500 361 z m 818 179 b 887 107 818 138 850 107 b 956 179 924 107 956 138 b 887 252 956 219 924 252 b 818 179 850 252 818 219 z m 818 -177 b 887 -251 818 -217 850 -251 b 956 -177 924 -251 956 -217 b 887 -104 956 -137 924 -104 b 818 -177 850 -104 818 -137 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 352, - y_min: -252, - y_max: 252, - ha: 504, - o: 'm 19 363 b 0 344 9 363 0 354 l 0 -344 b 19 -363 0 -354 9 -363 l 177 -363 b 196 -344 187 -363 196 -354 l 196 344 b 177 363 196 354 187 363 z m 330 363 b 311 344 320 363 311 354 l 311 -344 b 330 -363 311 -354 320 -363 l 488 -363 b 507 -344 498 -363 507 -354 l 507 344 b 488 363 507 354 498 363 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 439, - y_min: -743, - y_max: 746, - ha: 1489, - o: 'm 52 1074 l 52 958 l 249 958 l 249 419 l 387 419 l 387 958 l 583 958 l 583 1074 z m 0 -333 l 145 -333 l 192 -196 l 436 -196 l 481 -333 l 632 -333 l 396 334 l 238 334 z m 315 181 l 400 -81 l 229 -81 z m 566 -474 b 393 -402 531 -428 475 -403 l 71 -402 l 71 -1070 l 372 -1070 b 374 -1070 373 -1070 373 -1070 b 465 -1061 405 -1070 435 -1067 b 541 -1027 494 -1056 520 -1043 b 588 -975 560 -1012 575 -995 b 618 -868 608 -943 618 -907 b 592 -770 618 -829 609 -798 b 514 -711 575 -743 549 -724 b 566 -674 537 -700 554 -688 b 596 -576 586 -649 596 -616 b 566 -474 596 -536 586 -503 z m 348 -518 b 428 -528 380 -518 408 -521 b 464 -590 452 -539 464 -559 b 436 -649 464 -619 455 -638 b 366 -665 418 -661 395 -665 l 203 -665 l 203 -518 z m 367 -776 b 435 -788 396 -776 419 -780 b 477 -858 464 -801 477 -824 b 433 -942 477 -900 462 -927 b 366 -953 418 -949 395 -953 l 203 -953 l 203 -776 z', - }, - timeSig0: { - x_min: 15, - x_max: 389, - y_min: -254, - y_max: 255, - ha: 509, - o: 'm 291 367 b 22 0 138 367 22 209 b 291 -366 22 -209 138 -366 b 560 0 444 -366 560 -209 b 291 367 560 209 444 367 z m 376 -200 b 291 -308 376 -252 353 -308 b 206 -200 229 -308 206 -252 l 206 200 b 291 308 206 252 229 308 b 376 200 353 308 376 252 z', - }, - timeSig1: { - x_min: 15, - x_max: 336, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 359 -284 l 359 336 b 341 353 359 346 351 353 l 199 353 b 190 350 196 353 193 351 b 184 344 189 348 186 346 l 23 65 b 22 56 22 62 22 59 b 30 42 22 50 26 45 l 58 26 b 66 23 60 24 63 23 b 81 32 72 23 78 27 l 183 207 l 183 -284 l 73 -284 b 56 -301 63 -284 56 -291 l 56 -333 b 73 -350 56 -343 63 -350 l 468 -350 b 484 -333 478 -350 484 -343 l 484 -301 b 468 -284 484 -291 478 -284 z', - }, - timeSig2: { - x_min: 15, - x_max: 377, - y_min: -243, - y_max: 245, - ha: 488, - o: 'm 492 -56 b 382 -192 481 -88 452 -192 b 190 -134 288 -192 268 -134 b 153 -138 179 -134 167 -135 b 341 -36 153 -138 189 -84 b 533 173 494 12 533 86 b 288 353 533 233 505 353 b 30 156 71 353 30 222 b 138 49 30 96 79 49 b 245 156 197 49 245 96 b 179 255 245 196 216 240 b 168 271 174 256 168 264 b 202 297 168 279 176 289 b 251 304 209 300 229 304 b 311 288 271 304 294 300 b 348 180 338 271 348 245 b 65 -150 348 12 148 -24 b 22 -278 65 -150 22 -210 b 73 -350 22 -346 56 -350 b 121 -305 96 -350 121 -331 b 117 -287 121 -300 120 -294 b 105 -239 108 -266 105 -251 b 107 -226 105 -235 105 -230 b 154 -203 108 -217 120 -203 b 238 -289 196 -203 212 -252 b 350 -350 264 -327 304 -350 b 484 -264 396 -350 458 -317 b 543 -63 510 -210 543 -102 b 518 -36 543 -45 531 -36 b 492 -56 508 -36 498 -42 z', - }, - timeSig3: { - x_min: 15, - x_max: 364, - y_min: -244, - y_max: 244, - ha: 488, - o: 'm 392 23 b 514 168 507 68 514 143 b 514 176 514 171 514 174 b 262 351 514 189 510 351 b 22 176 14 351 22 176 l 23 176 l 22 173 b 115 81 22 121 63 81 b 207 173 167 81 207 121 b 135 264 207 215 176 255 b 140 268 137 265 138 266 b 215 289 160 282 187 289 b 340 176 275 289 340 253 b 255 69 340 85 272 72 b 140 60 238 66 157 60 b 121 40 122 60 121 40 l 121 12 b 140 -6 121 12 124 -4 b 243 -14 164 -7 197 -7 b 340 -167 307 -23 340 -66 b 215 -289 340 -264 275 -289 b 121 -266 174 -289 137 -278 b 207 -174 168 -264 207 -222 b 115 -81 207 -122 167 -81 b 22 -174 63 -81 22 -122 b 22 -180 22 -174 22 -177 b 78 -298 22 -199 26 -251 b 236 -351 134 -350 204 -351 b 524 -147 374 -351 524 -304 b 389 23 524 -42 452 3 z', - }, - timeSig4: { - x_min: 14, - x_max: 442, - y_min: -248, - y_max: 249, - ha: 497, - o: 'm 300 -183 l 300 -289 l 180 -289 b 160 -310 170 -289 160 -298 l 160 -337 b 180 -357 160 -348 170 -357 l 616 -357 b 636 -337 628 -357 636 -348 l 636 -310 b 616 -289 636 -298 628 -289 l 487 -289 l 487 -183 l 616 -183 b 636 -161 628 -183 636 -173 l 636 -134 b 616 -114 636 -124 628 -114 l 487 -114 l 487 115 b 477 134 487 124 482 131 l 459 143 b 452 144 456 144 455 144 b 449 144 451 144 451 144 b 436 140 445 144 439 143 l 305 20 b 300 4 301 16 300 10 l 300 -114 l 132 -114 b 464 287 132 -114 294 59 b 471 307 469 294 471 301 b 467 321 471 314 468 320 l 435 353 b 420 359 431 356 426 359 b 206 359 412 359 217 359 b 187 341 196 359 189 350 b 143 118 187 341 180 235 b 24 -124 105 1 62 -71 b 20 -140 24 -124 20 -131 b 22 -148 20 -143 20 -145 b 36 -174 26 -158 36 -174 b 52 -183 36 -174 39 -183 z', - }, - timeSig5: { - x_min: 15, - x_max: 362, - y_min: -244, - y_max: 246, - ha: 490, - o: 'm 39 314 b 46 170 39 314 46 245 b 46 151 46 164 46 157 b 39 -24 45 71 39 -24 b 39 -29 39 -24 39 -26 b 49 -48 39 -35 40 -46 b 99 -59 62 -50 92 -58 b 107 -59 102 -59 104 -59 b 121 -49 112 -59 118 -58 b 235 45 128 -30 144 45 b 356 -112 337 45 356 -43 b 238 -292 356 -184 333 -288 b 226 -292 233 -292 230 -292 b 166 -282 193 -292 174 -288 b 158 -274 161 -281 158 -276 b 164 -264 158 -269 160 -266 b 222 -168 177 -255 222 -239 b 117 -71 222 -98 173 -71 b 22 -171 60 -71 22 -122 b 111 -318 22 -220 36 -275 b 252 -351 147 -338 199 -351 b 456 -275 325 -351 405 -328 b 521 -109 503 -228 521 -167 b 433 79 521 -32 487 43 b 271 124 397 104 336 124 b 131 84 223 124 173 112 b 125 82 130 82 127 82 b 115 92 120 82 115 86 l 115 183 b 131 199 115 192 122 199 l 132 199 b 252 192 154 197 202 192 b 372 209 295 192 340 196 b 474 320 439 236 462 289 b 477 334 475 324 477 330 b 451 354 477 346 469 354 b 431 351 445 354 439 353 b 252 328 360 334 305 328 b 88 343 200 328 150 334 b 71 344 88 343 81 344 b 39 320 56 344 39 340 b 39 314 39 317 39 315 z', - }, - timeSig6: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 356 69 b 216 22 268 69 236 43 b 209 98 212 52 209 75 b 216 167 209 121 212 141 b 338 287 225 220 261 287 b 410 259 374 287 396 275 b 356 174 380 246 356 207 b 448 82 356 122 396 82 b 541 174 500 82 541 122 l 541 177 b 541 179 541 177 541 177 b 533 225 541 192 539 213 b 310 353 514 276 454 353 b 58 163 180 353 86 229 b 22 -23 43 128 22 58 b 131 -285 22 -111 46 -210 b 318 -351 215 -348 268 -351 b 557 -125 369 -351 557 -292 b 356 69 557 16 446 69 z m 302 -291 b 216 -145 255 -291 216 -226 b 302 1 216 -65 255 1 b 390 -145 350 1 390 -65 b 302 -291 390 -226 350 -291 z', - }, - timeSig7: { - x_min: 15, - x_max: 366, - y_min: -250, - y_max: 251, - ha: 501, - o: 'm 233 -177 b 160 -336 202 -225 160 -282 b 180 -360 160 -351 164 -360 b 264 -351 203 -360 217 -354 b 278 -350 268 -351 274 -350 b 369 -360 320 -350 359 -360 b 405 -331 382 -360 406 -344 b 405 -327 405 -330 405 -328 b 396 -226 405 -324 396 -279 b 408 -130 396 -196 399 -161 b 503 151 425 -62 471 60 b 527 308 518 196 527 275 b 526 341 527 321 527 327 b 510 361 524 356 518 361 b 484 361 503 361 491 361 b 467 341 477 361 467 356 b 406 228 467 327 464 228 b 235 351 346 228 328 351 b 86 252 145 351 91 261 l 86 321 b 71 337 86 330 79 337 l 37 337 b 22 321 29 337 22 330 l 22 55 b 37 39 22 46 29 39 l 71 39 b 86 55 79 39 86 46 l 86 101 b 158 179 86 134 108 179 b 328 124 209 179 213 124 b 425 143 357 124 410 128 b 233 -177 413 120 266 -130 z', - }, - timeSig8: { - x_min: 15, - x_max: 393, - y_min: -248, - y_max: 246, - ha: 494, - o: 'm 467 26 b 547 166 514 62 547 108 b 294 354 547 269 433 354 b 40 166 154 354 40 269 b 122 13 40 108 55 56 b 22 -147 58 -24 22 -78 b 294 -357 22 -264 144 -357 b 566 -147 444 -357 566 -264 b 467 26 566 -78 541 -13 z m 294 -276 b 122 -145 202 -276 122 -226 b 197 -26 122 -49 197 -26 b 435 -187 295 -59 435 -108 b 294 -276 435 -226 384 -276 z m 386 65 b 180 209 288 96 180 144 b 294 288 180 265 232 288 b 444 180 383 288 444 246 b 386 65 444 111 412 78 z', - }, - timeSig9: { - x_min: 15, - x_max: 387, - y_min: -244, - y_max: 245, - ha: 489, - o: 'm 223 -68 b 363 -20 311 -68 343 -42 b 370 -96 367 -50 370 -73 b 363 -166 370 -120 367 -140 b 240 -285 354 -219 318 -285 b 168 -258 204 -285 183 -274 b 223 -173 199 -245 223 -206 b 131 -81 223 -121 183 -81 b 37 -173 79 -81 37 -121 l 37 -176 b 37 -177 37 -176 37 -176 b 46 -223 37 -190 40 -212 b 269 -351 65 -275 125 -351 b 521 -161 399 -351 492 -228 b 557 24 536 -127 557 -56 b 448 287 557 112 533 212 b 261 353 364 350 311 353 b 22 127 210 353 22 294 b 223 -68 22 -14 132 -68 z m 276 294 b 363 147 324 294 363 228 b 276 1 363 66 324 1 b 189 147 229 1 189 66 b 276 294 189 228 229 294 z', - }, - timeSigCommon: { - x_min: 0, - x_max: 463, - y_min: -256, - y_max: 258, - ha: 514, - o: 'm 468 258 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 521 17 415 71 462 24 b 537 17 526 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 350 372 651 239 595 372 b 0 17 36 372 0 111 b 382 -369 0 -154 22 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 l 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 196 -128 256 -323 196 -255 l 196 147 b 356 320 196 228 228 320 b 469 271 423 320 454 295 b 471 264 471 268 471 266 b 468 258 471 262 471 259 z', - }, - timeSigCutCommon: { - x_min: 0, - x_max: 463, - y_min: -376, - y_max: 388, - ha: 764, - o: 'm 611 -120 b 599 -131 605 -120 599 -125 b 382 -323 593 -251 508 -323 b 369 -323 377 -323 373 -323 l 369 320 b 469 269 428 317 455 292 b 471 264 471 266 471 265 b 468 258 471 261 471 259 b 406 147 432 235 406 193 b 408 130 406 141 406 135 b 523 17 415 71 464 24 b 537 17 527 17 533 17 b 667 147 609 17 667 75 b 667 156 667 147 667 151 b 664 177 667 161 665 171 b 369 370 651 236 598 364 l 369 543 b 353 559 369 552 361 559 l 314 559 b 298 543 305 559 298 552 l 298 369 b 0 17 32 341 0 105 b 298 -364 0 -140 17 -334 l 298 -526 b 314 -541 298 -534 305 -541 l 353 -541 b 369 -526 361 -541 369 -534 l 369 -369 b 382 -369 373 -369 377 -369 b 641 -131 524 -369 635 -285 b 629 -120 641 -124 636 -120 z m 196 147 b 298 312 196 215 216 289 l 298 -310 b 196 -128 229 -285 196 -223 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 408, - y_min: -204, - y_max: 204, - ha: 408, - o: 'm 327 33 l 327 275 b 308 294 327 285 318 294 l 279 294 b 261 275 269 294 261 285 l 261 33 l 19 33 b 0 14 9 33 0 24 l 0 -13 b 19 -33 0 -23 9 -33 l 261 -33 l 261 -274 b 279 -294 261 -284 269 -294 l 308 -294 b 327 -274 318 -294 327 -284 l 327 -33 l 567 -33 b 588 -13 577 -33 588 -23 l 588 14 b 567 33 588 24 577 33 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 538, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 33 258 b 20 258 27 258 26 258 b 0 238 9 258 0 249 b 0 -236 0 226 0 -226 b 20 -256 0 -246 9 -256 b 33 -256 26 -256 27 -256 b 53 -236 43 -256 53 -245 b 53 238 53 -228 53 226 b 33 258 53 249 45 258 z m 649 258 b 636 258 644 258 642 258 b 616 238 625 258 616 249 b 616 125 616 235 616 187 b 389 196 573 167 500 196 b 160 125 276 196 203 167 b 160 238 160 187 160 235 b 140 258 160 249 151 258 b 127 258 134 258 132 258 b 107 238 115 258 107 249 b 107 -236 107 226 107 -226 b 127 -256 107 -246 115 -256 b 140 -256 132 -256 134 -256 b 160 -236 150 -256 160 -245 b 160 -122 160 -233 160 -186 b 389 -194 203 -166 276 -194 b 616 -122 500 -194 573 -166 b 616 -236 616 -186 616 -233 b 636 -256 616 -246 625 -256 b 649 -256 642 -256 644 -256 b 670 -236 660 -256 670 -245 b 670 238 670 -228 670 226 b 649 258 670 249 661 258 z m 462 -140 b 400 -148 445 -144 422 -148 b 314 -101 360 -148 333 -135 b 268 68 295 -65 269 29 b 268 76 268 71 268 73 b 314 141 268 109 282 130 b 377 150 331 145 354 150 b 462 102 416 150 442 140 b 510 -66 482 63 510 -29 b 462 -140 510 -104 497 -128 z m 755 258 b 742 258 749 258 747 258 b 721 238 730 258 721 249 b 721 -236 721 226 721 -226 b 742 -256 721 -246 730 -256 b 755 -256 747 -256 749 -256 b 775 -236 765 -256 775 -245 b 775 238 775 -228 775 226 b 755 258 775 249 766 258 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 373, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 269 196 b 0 1 71 196 0 95 b 269 -193 0 -92 71 -193 b 537 1 468 -193 537 -92 b 269 196 537 95 468 196 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 194 141 145 107 160 130 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 343 -138 389 -102 377 -128 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 307 190 b 0 -60 167 190 0 73 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 z m 268 -63 b 108 -124 264 -66 158 -124 b 50 -72 60 -124 50 -85 b 200 62 50 -12 194 59 b 360 122 206 65 308 122 b 418 71 395 122 418 102 b 268 -63 418 9 272 -60 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 325, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 0 -60 b 161 -192 0 -122 45 -192 b 468 58 311 -192 468 -69 b 307 190 468 143 396 190 b 0 -60 167 190 0 72 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 325, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 461 138 b 468 153 465 141 468 147 l 468 154 b 462 167 468 160 465 164 l 445 184 b 431 190 441 187 436 190 b 418 186 426 190 420 189 l 235 40 l 50 186 b 37 190 48 189 42 190 b 24 184 32 190 29 187 l 6 167 b 0 153 3 164 0 158 b 7 138 0 147 3 141 l 183 0 l 7 -138 b 0 -153 3 -141 0 -147 b 6 -166 0 -157 3 -163 l 23 -184 b 37 -190 26 -189 32 -190 b 50 -186 42 -190 48 -189 l 235 -40 l 418 -186 b 431 -190 420 -189 426 -190 b 445 -184 436 -190 442 -189 l 462 -166 b 468 -153 465 -163 468 -157 b 461 -138 468 -147 465 -141 l 285 0 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 325, - y_min: -162, - y_max: 163, - ha: 325, - o: 'm 265 0 l 395 105 b 426 0 415 75 426 39 b 387 -115 426 -43 412 -84 z m 233 -27 l 360 -145 b 235 -192 327 -174 282 -192 b 99 -137 183 -192 134 -171 z m 202 1 l 73 -105 b 42 0 53 -75 42 -39 b 81 115 42 43 56 84 z m 235 29 l 108 145 b 233 193 141 174 186 193 b 369 138 285 193 334 173 z m 233 235 b 0 0 104 235 0 130 b 233 -233 0 -130 104 -233 b 468 0 363 -233 468 -130 b 233 235 468 130 363 235 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 432, - y_min: -179, - y_max: 177, - ha: 356, - o: 'm 590 255 b 570 235 579 255 570 246 l 570 203 l 53 203 l 53 235 b 33 255 53 246 45 255 l 20 255 b 0 235 9 255 0 246 l 0 -230 b 20 -251 0 -242 9 -251 l 33 -251 b 53 -230 45 -251 53 -242 l 53 -200 l 570 -200 l 570 -238 b 590 -258 570 -249 579 -258 l 603 -258 b 622 -238 615 -258 622 -249 l 622 235 b 603 255 622 246 615 255 z m 570 -101 l 53 -101 l 53 105 l 570 105 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 395 128 l 395 -128 l 52 -128 l 52 128 z m 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 446 180 l 0 180 l 0 -180 l 446 -180 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 223 176 l 0 -196 l 446 -196 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 652 298 b 638 305 649 304 644 305 b 626 301 634 305 629 304 l 560 248 b 543 256 557 253 550 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 204 510 235 510 223 l 455 161 b 281 194 413 181 356 194 b 53 124 168 194 96 166 b 53 236 53 186 53 233 b 29 256 53 253 42 256 b 20 256 26 256 23 256 b 0 236 9 256 0 248 b 0 -204 0 228 0 -98 l -88 -272 b -95 -288 -92 -276 -95 -282 b -91 -300 -95 -291 -94 -295 b -76 -307 -86 -304 -82 -307 b -65 -302 -72 -307 -68 -305 l 3 -248 b 20 -258 6 -253 12 -258 b 53 -238 33 -258 52 -255 b 53 -206 53 -236 53 -225 l 107 -161 b 281 -196 148 -183 206 -196 b 510 -124 393 -196 465 -166 b 510 -238 510 -187 510 -235 b 530 -258 510 -248 518 -258 b 563 -238 543 -258 563 -255 b 563 204 563 -229 563 98 l 649 272 b 657 288 655 276 657 282 b 652 298 657 291 655 295 z m 160 75 b 269 148 160 138 219 148 b 356 101 310 148 334 140 b 363 85 357 96 360 91 l 189 -56 b 160 66 174 -14 161 40 b 160 75 160 69 160 72 z m 53 -163 b 53 -124 53 -151 53 -138 b 76 -144 60 -131 68 -138 z m 402 -68 b 292 -148 402 -138 351 -148 b 207 -101 252 -150 226 -137 b 199 -84 204 -96 202 -91 l 373 56 b 402 -68 389 13 402 -40 z m 510 124 b 485 144 503 131 494 137 l 510 163 b 510 124 510 151 510 137 z', - }, - noteheadSlashedWhole1: { - x_min: -75, - x_max: 448, - y_min: -211, - y_max: 214, - ha: 425, - o: 'm 641 301 b 625 308 636 305 631 308 b 613 304 621 307 618 307 l 439 160 b 269 196 399 181 343 196 b 0 1 71 196 0 95 b 69 -138 0 -49 20 -101 l -101 -271 b -108 -287 -105 -275 -108 -281 b -104 -298 -107 -291 -107 -294 b -88 -304 -99 -302 -94 -304 b -76 -301 -85 -304 -81 -304 l 98 -157 b 269 -193 138 -179 194 -193 b 537 1 468 -193 537 -92 b 468 141 537 52 517 104 l 638 274 b 645 289 642 278 645 284 b 641 301 644 292 644 297 z m 148 68 b 148 78 148 72 148 75 b 194 141 148 111 163 131 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 350 86 346 98 348 92 l 177 -55 b 148 68 163 -12 150 42 z m 389 -65 b 343 -138 389 -102 377 -128 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 187 -82 192 -95 190 -89 l 279 -6 l 361 58 b 389 -65 376 16 389 -39 z', - }, - noteheadSlashedHalf1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 163 b 307 190 383 180 347 190 b 153 148 258 190 204 176 b 0 -60 58 98 0 13 b 14 -120 0 -81 4 -101 b 32 -143 20 -128 26 -135 l -134 -274 b -141 -288 -138 -276 -141 -282 b -137 -300 -141 -292 -140 -297 b -122 -307 -134 -304 -128 -307 b -111 -302 -118 -307 -114 -305 l 56 -164 b 161 -192 85 -181 121 -192 b 315 -151 210 -192 264 -179 b 468 58 410 -101 468 -16 b 454 117 468 78 464 98 b 436 141 449 125 444 134 l 603 272 b 611 287 608 275 611 281 b 606 298 611 291 609 295 z m 56 -98 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 199 60 99 1 147 32 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 361 121 360 121 360 121 l 225 9 l 69 -114 b 56 -98 65 -109 60 -104 z m 410 94 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 266 -65 367 -6 318 -36 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 104 -125 107 -125 105 -125 l 245 -9 l 396 111 b 410 94 402 107 408 101 z', - }, - noteheadSlashedBlack1: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 606 298 b 592 305 602 302 598 305 b 580 301 588 305 583 304 l 412 161 b 307 190 383 180 347 190 b 0 -60 167 190 0 72 b 32 -144 0 -89 10 -120 l -134 -274 b -141 -288 -138 -278 -141 -284 b -137 -301 -141 -292 -140 -297 b -122 -307 -134 -305 -128 -307 b -111 -304 -118 -307 -114 -307 l 56 -164 b 161 -192 82 -181 117 -192 b 468 58 311 -192 468 -71 b 436 141 468 91 456 120 l 603 271 b 611 285 608 275 611 281 b 606 298 611 289 609 294 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: -66, - x_max: 456, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 563 -204 b 563 236 563 -98 563 228 b 543 256 563 249 554 256 b 530 256 537 256 536 256 b 510 236 518 256 510 248 b 510 124 510 233 510 187 b 281 194 467 166 393 194 b 107 161 207 194 150 181 l 53 204 b 53 236 53 223 53 235 b 33 256 53 249 45 256 b 20 256 27 256 26 256 b 3 246 12 256 6 253 l -63 301 b -76 305 -68 304 -72 305 b -91 298 -81 305 -86 304 b -95 287 -94 295 -95 291 b -88 272 -95 281 -92 276 l 0 204 b 0 -238 0 98 0 -229 b 20 -258 0 -248 9 -258 b 33 -258 26 -258 27 -258 b 53 -238 43 -258 53 -246 b 53 -124 53 -235 53 -187 b 281 -196 96 -166 170 -196 b 456 -161 356 -196 413 -183 l 510 -206 b 510 -238 510 -225 510 -236 b 530 -258 510 -248 518 -258 b 543 -258 536 -258 537 -258 b 560 -246 549 -258 556 -252 l 626 -302 b 638 -307 631 -305 634 -307 b 654 -300 645 -307 649 -304 b 657 -288 655 -295 657 -292 b 651 -272 657 -282 655 -276 z m 207 140 b 269 148 225 144 248 148 b 356 101 310 148 336 140 b 402 -68 376 62 402 -30 b 402 -78 402 -71 402 -75 l 292 9 l 168 109 b 207 140 176 124 189 134 z m 78 144 b 53 124 69 137 60 131 b 53 163 53 137 53 150 z m 356 -141 b 294 -148 338 -145 315 -148 b 207 -101 253 -148 226 -137 b 161 66 189 -66 163 27 b 160 72 161 69 160 71 b 161 78 160 75 160 76 l 271 -9 l 395 -109 b 356 -141 387 -124 374 -134 z m 485 -144 b 510 -124 494 -138 503 -131 b 510 -163 510 -138 510 -151 z', - }, - noteheadSlashedWhole2: { - x_min: -75, - x_max: 448, - y_min: -212, - y_max: 214, - ha: 426, - o: 'm 468 -138 b 537 1 517 -101 537 -49 b 269 196 537 95 468 196 b 98 160 196 196 140 181 l -76 304 b -88 308 -81 307 -84 307 b -104 301 -94 308 -99 305 b -108 289 -107 297 -107 292 b -101 274 -108 284 -105 278 l 69 141 b 0 1 20 104 0 52 b 269 -193 0 -92 71 -193 b 441 -157 343 -193 399 -179 l 613 -301 b 625 -305 618 -304 622 -305 b 641 -298 631 -305 636 -302 b 645 -287 644 -294 644 -291 b 638 -271 645 -281 642 -275 z m 194 141 b 256 150 212 147 235 150 b 343 102 297 150 323 141 b 389 -65 363 63 389 -29 b 389 -76 389 -69 389 -73 l 279 10 l 156 112 b 194 141 163 125 176 135 z m 343 -138 b 281 -147 325 -144 302 -147 b 194 -99 240 -147 213 -135 b 148 68 176 -63 150 29 b 148 76 148 71 148 73 b 148 81 148 78 148 79 l 258 -6 l 382 -108 b 343 -138 374 -122 361 -132 z', - }, - noteheadSlashedHalf2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 386 -102 b 468 58 438 -55 468 4 b 454 117 468 78 464 98 b 307 190 428 164 373 190 b 153 148 258 190 204 176 b 108 120 137 140 122 130 l -111 301 b -122 305 -114 304 -118 305 b -137 298 -128 305 -134 302 b -141 287 -140 295 -141 291 b -134 272 -141 281 -138 275 l 85 101 b 0 -60 32 53 0 -7 b 14 -120 0 -81 4 -101 b 161 -192 40 -167 95 -192 b 315 -151 210 -192 264 -179 b 361 -122 333 -143 347 -132 l 580 -302 b 592 -307 583 -305 588 -307 b 606 -300 598 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 611 -282 608 -276 z m 199 60 b 337 118 251 89 302 111 b 359 121 344 120 351 121 b 410 94 382 121 400 112 b 416 69 415 86 416 78 b 392 19 416 53 408 36 b 308 -42 374 0 343 -20 l 245 7 l 189 55 b 199 60 192 56 196 58 z m 266 -65 b 128 -122 215 -94 163 -115 b 107 -125 121 -124 114 -125 b 56 -98 84 -125 66 -117 b 49 -73 52 -91 49 -82 b 75 -23 49 -58 59 -39 b 163 39 94 -4 125 17 l 225 -9 l 282 -56 b 266 -65 276 -59 272 -62 z', - }, - noteheadSlashedBlack2: { - x_min: -98, - x_max: 424, - y_min: -213, - y_max: 212, - ha: 425, - o: 'm 384 -102 b 468 58 435 -58 468 0 b 307 190 468 143 396 190 b 108 121 239 190 167 163 l -111 301 b -124 305 -115 304 -120 305 b -138 298 -128 305 -134 302 b -141 289 -140 295 -141 292 b -141 287 -141 288 -143 288 b -135 272 -141 281 -140 275 l 84 101 b 0 -60 35 56 0 0 b 161 -192 0 -122 45 -192 b 361 -122 232 -192 304 -164 l 579 -302 b 590 -307 583 -305 588 -307 b 606 -300 596 -307 602 -304 b 611 -288 609 -297 611 -292 b 603 -274 609 -282 608 -276 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 373, - y_min: -178, - y_max: 179, - ha: 357, - o: 'm 504 258 b 484 238 494 258 484 248 l 484 46 b 282 187 415 95 285 186 b 268 192 279 190 275 192 b 255 187 262 192 258 190 l 52 45 l 52 238 b 33 258 52 248 43 258 l 20 258 b 0 238 9 258 0 248 l 0 -236 b 20 -256 0 -248 9 -256 l 33 -256 b 52 -236 43 -256 52 -248 l 52 -45 l 249 -181 b 268 -190 258 -189 264 -190 b 282 -186 274 -190 279 -189 b 484 -43 285 -184 413 -94 l 484 -236 b 504 -256 484 -248 494 -256 l 517 -256 b 537 -236 528 -256 537 -248 l 537 238 b 517 258 537 248 528 258 z m 220 -115 l 102 -33 l 317 117 l 435 35 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 373, - y_min: -133, - y_max: 132, - ha: 265, - o: 'm 282 -187 b 530 -13 285 -186 530 -13 b 537 0 534 -10 537 -6 b 530 13 537 4 534 10 b 282 186 530 13 287 183 b 268 190 279 189 275 190 b 255 186 262 190 258 189 l 7 12 b 0 -1 3 9 0 4 b 4 -13 0 -6 1 -10 l 249 -183 b 268 -192 258 -190 264 -192 b 282 -187 274 -192 279 -190 z m 220 -117 l 102 -35 l 317 115 l 435 33 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -13 b 482 0 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 6 b 7 -13 0 -4 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z m 284 -115 l 92 33 l 199 117 l 390 -33 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 335, - y_min: -132, - y_max: 133, - ha: 265, - o: 'm 475 -14 b 482 -1 480 -10 482 -6 b 475 13 482 4 480 10 l 253 187 b 240 192 251 190 246 192 b 229 187 236 192 232 190 l 7 13 b 0 0 3 10 0 4 b 7 -14 0 -6 3 -10 l 229 -186 b 240 -190 232 -189 236 -190 b 253 -186 246 -190 251 -189 z', - }, - noteheadParenthesisRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 310, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 0 180 l 0 0 b 223 -180 0 -99 99 -180 b 446 0 347 -180 446 -99 l 446 180 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 0 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 339, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 488 176 l 0 -196 l 488 -196 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 310, - y_min: -136, - y_max: 122, - ha: 258, - o: 'm 226 -196 l 446 63 b 226 176 446 63 384 176 b 0 63 68 176 0 63 z', - }, - augmentationDot: { - x_min: 0, - x_max: 100, - y_min: -50, - y_max: 50, - ha: 100, - o: 'm 0 0 b 72 -72 0 -40 32 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 z', - }, - tremolo1: { - x_min: 0, - x_max: 290, - y_min: -93, - y_max: 96, - ha: 189, - o: 'm 0 48 l 0 -134 l 418 -43 l 418 138 z', - }, - flag8thUp: { - x_min: 0, - x_max: 289, - y_min: -817, - y_max: 12, - ha: 829, - o: 'm 0 -327 b 12 -343 0 -331 1 -338 b 291 -600 73 -363 197 -441 b 359 -827 317 -645 359 -707 b 294 -1140 359 -930 331 -1037 b 289 -1162 291 -1149 288 -1156 b 297 -1175 289 -1168 291 -1172 b 304 -1176 300 -1176 302 -1176 b 327 -1161 314 -1176 321 -1171 b 416 -798 395 -1041 418 -888 b 416 -780 416 -791 416 -786 b 302 -458 409 -595 302 -458 b 131 -220 307 -458 170 -281 b 50 -50 78 -138 53 -56 b 36 6 49 -46 36 6 b 19 17 35 12 27 17 b 0 -1 9 17 0 9 z', - }, - flag8thDown: { - x_min: 0, - x_max: 309, - y_min: -12, - y_max: 817, - ha: 829, - o: 'm 0 1 b 19 -17 0 -9 9 -17 b 36 -6 26 -17 35 -12 b 50 50 36 -4 49 46 b 117 196 52 56 65 111 b 331 458 173 289 259 357 b 445 780 402 559 445 654 b 338 1161 445 912 415 1021 b 317 1176 334 1171 325 1176 b 310 1175 314 1176 311 1176 b 300 1158 302 1172 300 1166 b 304 1140 300 1153 301 1146 b 384 827 361 1007 384 930 b 317 600 384 707 343 645 b 12 343 223 441 72 363 b 0 327 1 338 0 331 z', - }, - flag16thUp: { - x_min: 0, - x_max: 279, - y_min: -820, - y_max: 12, - ha: 832, - o: 'm 301 -681 b 148 -514 262 -631 219 -585 b 56 -372 92 -458 66 -409 b 52 -343 55 -364 53 -354 b 271 -510 125 -343 219 -442 b 340 -696 327 -583 340 -641 b 337 -739 340 -710 338 -724 b 301 -681 325 -716 312 -697 z m 0 -549 b 22 -563 0 -553 12 -559 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1009 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1169 282 -1175 b 297 -1181 292 -1181 294 -1181 b 318 -1161 307 -1181 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -855 382 -920 379 -886 b 402 -678 389 -802 402 -749 b 333 -471 402 -603 382 -536 b 137 -228 265 -382 192 -307 b 42 0 82 -148 42 0 b 22 17 39 10 37 17 b 0 0 4 17 0 10 z', - }, - flag16thDown: { - x_min: 0, - x_max: 309, - y_min: -26, - y_max: 803, - ha: 829, - o: 'm 53 346 b 56 363 55 353 56 359 b 163 517 66 399 78 452 b 384 732 246 582 346 662 b 317 503 382 621 354 552 b 53 346 229 395 122 364 z m 0 -14 b 22 -37 0 -26 10 -37 b 43 -14 33 -37 40 -26 b 167 232 65 134 109 177 b 445 683 243 305 445 416 b 432 837 445 730 441 783 b 441 919 438 855 441 881 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 374 876 382 912 380 893 l 373 871 b 373 871 373 871 373 871 b 327 789 366 842 350 815 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 186, - ha: 1007, - o: 'm 301 -683 b 148 -516 262 -632 219 -588 b 56 -373 92 -459 66 -410 b 50 -343 55 -366 53 -354 b 271 -500 125 -343 219 -432 b 340 -687 327 -575 340 -632 b 337 -739 340 -704 338 -721 b 301 -683 325 -716 312 -698 z m 271 -259 b 340 -446 327 -333 340 -392 b 338 -469 340 -455 338 -462 b 333 -461 337 -467 334 -464 b 91 -192 265 -372 145 -271 b 50 -92 69 -160 58 -124 b 271 -259 124 -92 219 -192 z m 0 -550 b 22 -564 0 -554 12 -560 b 258 -778 59 -577 171 -649 b 318 -952 307 -851 318 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1011 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1171 282 -1176 b 297 -1182 292 -1182 294 -1182 b 318 -1162 307 -1182 312 -1171 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 386 -563 402 -632 396 -596 b 402 -441 395 -526 402 -487 b 402 -428 402 -436 402 -432 b 333 -220 402 -353 382 -285 b 137 23 265 -131 192 -56 b 42 251 82 102 42 251 b 22 268 39 261 37 268 b 0 251 4 268 0 261 z', - }, - flag32ndDown: { - x_min: 0, - x_max: 309, - y_min: -216, - y_max: 803, - ha: 1019, - o: 'm 50 73 b 91 171 58 105 71 141 b 347 402 145 251 272 317 b 384 454 361 418 374 435 b 324 239 384 347 361 287 b 50 73 235 130 122 94 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 383 621 359 562 b 53 343 258 436 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 0 -288 b 22 -311 0 -298 10 -311 b 43 -288 33 -311 40 -300 b 167 -40 65 -138 109 -95 b 445 409 243 32 445 143 b 431 577 445 462 439 520 b 441 651 435 602 439 626 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1156 321 1153 314 1156 b 287 1152 300 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z', - }, - flag64thUp: { - x_min: 0, - x_max: 279, - y_min: -822, - y_max: 373, - ha: 1195, - o: 'm 333 -461 b 91 -192 265 -372 145 -271 b 50 -92 69 -161 58 -125 b 271 -251 125 -92 219 -183 b 340 -438 327 -324 340 -383 b 338 -469 340 -448 338 -459 b 333 -461 337 -467 334 -464 z m 301 -683 b 148 -517 262 -632 219 -588 b 56 -374 92 -461 66 -410 b 50 -343 55 -366 53 -356 b 271 -501 125 -343 219 -433 b 340 -688 327 -575 340 -634 b 337 -739 340 -706 338 -721 b 301 -683 325 -717 312 -698 z m 271 10 b 340 -176 327 -63 340 -121 b 337 -217 340 -190 338 -204 b 333 -212 336 -216 334 -213 b 91 65 265 -122 145 -16 b 48 177 66 101 53 143 l 50 177 b 271 10 124 177 217 78 z m 0 -552 b 22 -564 0 -554 12 -562 b 258 -778 59 -579 171 -649 b 318 -952 307 -851 317 -903 b 317 -976 318 -960 318 -968 b 285 -1142 317 -1012 307 -1084 b 279 -1165 284 -1149 279 -1158 b 289 -1181 279 -1172 282 -1178 b 297 -1184 292 -1182 295 -1184 b 318 -1164 307 -1182 312 -1172 b 382 -963 344 -1122 382 -1044 b 374 -857 382 -923 379 -887 b 402 -668 389 -804 402 -740 b 386 -563 402 -632 396 -596 b 402 -432 395 -523 402 -480 b 402 -418 402 -428 402 -423 b 383 -304 402 -379 396 -341 b 402 -170 393 -264 402 -222 b 402 -158 402 -166 402 -163 b 333 49 402 -84 382 -16 b 137 292 265 138 192 213 b 42 520 82 372 42 520 b 22 537 39 530 37 537 b 0 520 4 537 0 530 z', - }, - flag64thDown: { - x_min: 0, - x_max: 309, - y_min: -403, - y_max: 804, - ha: 1207, - o: 'm 52 -196 b 91 -102 59 -166 71 -131 b 347 128 145 -23 272 45 b 384 180 361 145 374 163 b 324 -30 384 76 361 16 b 52 -196 235 -140 124 -176 z m 163 517 b 366 693 248 589 327 644 b 382 717 372 701 377 708 b 383 693 383 708 383 701 b 314 505 383 621 359 562 b 53 343 258 438 179 390 b 56 363 55 351 56 359 b 163 517 66 400 81 449 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 102 69 140 b 347 402 145 251 272 318 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 348 359 288 z m 0 -557 b 22 -580 0 -567 10 -580 b 43 -557 33 -580 40 -567 b 167 -310 65 -408 109 -364 b 445 140 243 -238 445 -125 b 431 307 445 192 439 249 b 441 377 436 331 439 354 b 441 406 441 387 441 397 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 651 432 582 438 618 b 441 675 441 660 441 667 b 441 688 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 305 1158 321 1153 314 1156 b 287 1152 300 1158 292 1156 b 279 1145 281 1151 279 1148 b 294 1129 279 1140 288 1136 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 563 z', - }, - flag128thUp: { - x_min: 0, - x_max: 279, - y_min: -821, - y_max: 573, - ha: 1394, - o: 'm 0 -550 b 22 -563 0 -553 12 -560 b 258 -776 59 -576 171 -648 b 318 -950 307 -850 318 -901 b 317 -975 318 -959 318 -966 b 285 -1140 317 -1011 307 -1083 b 279 -1164 284 -1148 279 -1156 b 289 -1179 279 -1171 282 -1176 b 297 -1182 292 -1181 294 -1181 b 318 -1162 307 -1182 312 -1169 b 382 -962 344 -1120 382 -1043 b 374 -857 382 -922 379 -887 b 402 -668 389 -802 402 -740 b 383 -554 402 -629 396 -590 b 402 -399 396 -503 402 -452 b 382 -284 402 -359 396 -321 b 402 -125 396 -230 402 -180 b 383 -14 402 -86 396 -49 b 402 130 396 35 402 81 b 333 348 402 204 382 284 b 137 592 265 438 192 513 b 42 808 82 671 46 793 b 22 825 39 818 37 825 b 0 808 4 825 0 818 z m 271 310 b 340 111 328 235 340 170 b 338 73 340 98 338 86 b 333 81 336 76 334 79 b 91 357 265 170 145 276 b 48 469 66 393 53 435 l 50 469 b 271 310 124 469 217 377 z m 301 -681 b 148 -523 262 -631 219 -593 b 56 -383 92 -465 66 -420 b 49 -343 55 -374 52 -359 l 50 -343 b 271 -500 124 -343 217 -432 b 340 -688 327 -575 340 -634 b 337 -737 340 -706 338 -721 b 301 -681 325 -716 312 -697 z m 333 -461 b 91 -192 265 -372 145 -271 b 48 -73 66 -154 53 -111 l 48 -73 l 50 -73 b 271 -232 124 -73 217 -163 b 340 -419 327 -305 340 -364 b 337 -468 340 -435 338 -452 b 333 -461 336 -465 334 -464 z m 333 -192 b 91 84 265 -102 145 4 b 48 200 65 121 53 164 l 48 200 l 50 200 b 271 42 124 200 217 109 b 340 -147 327 -32 340 -92 b 337 -197 340 -164 338 -181 b 333 -192 336 -196 334 -194 z', - }, - flag128thDown: { - x_min: 0, - x_max: 309, - y_min: -591, - y_max: 803, - ha: 1394, - o: 'm 0 -828 b 22 -851 0 -838 10 -851 b 43 -828 33 -851 40 -840 b 167 -580 65 -678 109 -635 b 445 -131 243 -508 445 -397 b 431 36 445 -79 439 -22 b 441 108 436 60 439 85 b 441 137 441 117 441 127 b 441 147 441 140 441 144 b 423 275 441 193 432 236 b 441 377 433 310 438 344 b 441 406 441 387 441 396 b 441 418 441 410 441 413 b 423 546 441 464 432 507 b 441 649 432 582 438 616 b 441 675 441 658 441 667 b 441 687 441 680 441 684 b 425 808 441 730 433 772 b 441 919 435 840 441 876 b 327 1149 441 1032 374 1112 b 304 1156 321 1153 312 1156 b 287 1152 298 1156 292 1155 b 279 1145 281 1149 279 1148 b 294 1129 279 1140 288 1135 b 382 930 344 1076 382 1027 b 327 789 382 877 364 832 b 22 598 226 672 86 612 b 0 559 12 593 0 562 z m 314 -37 b 50 -200 258 -107 179 -153 b 91 -102 58 -168 71 -132 b 347 128 145 -23 272 45 b 382 176 360 143 372 160 b 383 151 383 167 383 160 b 314 -37 383 79 359 19 z m 314 232 b 50 69 258 163 179 117 b 91 171 56 101 69 138 b 347 402 145 251 272 317 b 382 449 360 416 372 432 b 383 420 383 439 383 429 b 314 232 383 347 359 288 z m 163 517 b 366 693 248 589 327 642 b 382 716 372 700 377 708 b 383 693 383 708 383 700 b 314 505 382 621 359 560 b 53 343 258 436 179 390 b 56 363 55 350 56 357 b 163 517 66 399 81 449 z m 52 -467 b 91 -372 59 -435 71 -402 b 347 -141 145 -292 272 -225 b 384 -89 361 -125 374 -108 b 324 -301 382 -194 361 -255 b 52 -467 235 -410 122 -446 z', - }, - accidentalFlat: { - x_min: 0, - x_max: 203, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 289 114 b 173 223 281 170 246 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -251 30 -253 36 -252 b 216 -114 45 -248 138 -202 b 292 78 271 -52 292 19 b 289 114 292 91 291 102 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 171, - y_min: -323, - y_max: 325, - ha: 648, - o: 'm 239 264 b 228 268 236 266 232 268 b 222 266 226 268 223 266 l 40 216 l 40 468 l 0 468 l 0 -245 b 20 -264 0 -256 9 -264 b 26 -264 22 -264 24 -264 l 207 -213 l 207 -465 l 246 -465 b 246 248 246 -226 246 1 b 239 264 246 253 243 261 z m 40 -140 l 40 96 l 207 144 l 207 -94 z', - }, - accidentalSharp: { - x_min: 0, - x_max: 244, - y_min: -333, - y_max: 334, - ha: 667, - o: 'm 336 151 b 351 171 344 153 351 163 l 351 256 b 331 276 351 268 343 276 b 328 276 330 276 330 276 l 281 266 l 281 481 l 240 481 l 240 258 l 112 232 l 112 435 l 72 435 l 72 223 l 16 212 b 0 192 7 210 0 200 l 0 189 l 0 105 l 0 108 b 20 88 0 96 9 88 b 24 88 22 88 23 88 l 72 98 l 72 -140 l 16 -151 b 0 -171 7 -153 0 -163 l 0 -255 b 20 -275 0 -266 9 -275 b 24 -275 22 -275 23 -275 l 72 -265 l 72 -480 l 112 -480 l 112 -256 l 240 -230 l 240 -433 l 281 -433 l 281 -222 l 336 -212 b 351 -192 344 -210 351 -200 l 351 -107 b 331 -86 351 -95 343 -86 b 328 -86 330 -86 330 -86 l 281 -96 l 281 141 z m 112 107 l 240 132 l 240 -105 l 112 -132 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 275, - y_min: -137, - y_max: 138, - ha: 275, - o: 'm 360 73 l 376 73 b 396 94 387 73 396 82 l 396 179 b 376 199 396 190 387 199 l 291 199 b 271 179 279 199 271 190 l 271 161 l 271 102 l 200 30 l 196 30 l 124 102 l 124 179 b 105 199 124 190 117 199 l 20 199 b 0 179 9 199 0 190 l 0 94 b 20 73 0 82 9 73 l 35 73 l 36 73 l 96 73 l 167 3 l 167 -1 l 96 -73 l 36 -73 l 35 -73 l 20 -73 b 0 -92 9 -73 0 -81 l 0 -177 b 20 -197 0 -189 9 -197 l 105 -197 b 124 -177 117 -197 124 -189 l 124 -101 l 196 -32 l 200 -32 l 271 -101 l 271 -161 l 271 -163 l 271 -177 b 291 -197 271 -189 279 -197 l 376 -197 b 396 -177 387 -197 396 -189 l 396 -92 b 376 -73 396 -81 387 -73 l 361 -73 l 360 -73 l 300 -73 l 228 -1 l 228 1 l 300 73 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 371, - y_min: -176, - y_max: 453, - ha: 629, - o: 'm 531 115 b 415 223 523 171 488 223 b 294 171 343 223 301 180 l 300 632 b 279 652 300 644 291 652 l 262 652 b 242 632 251 652 242 644 l 246 199 b 173 223 228 213 204 223 b 52 170 101 223 59 179 l 58 632 b 37 652 58 644 49 652 l 20 652 b 0 632 9 652 0 644 l 7 -233 b 27 -253 7 -245 16 -253 b 39 -249 30 -253 36 -251 b 216 -114 45 -246 138 -202 b 248 -69 226 -102 239 -82 l 249 -233 b 269 -253 249 -245 258 -253 b 281 -249 272 -253 278 -251 b 458 -112 287 -246 380 -200 b 534 79 513 -50 534 20 b 531 115 534 92 533 104 z m 190 58 b 148 -85 190 36 184 -30 b 48 -183 124 -122 75 -161 l 52 98 b 134 153 55 111 76 153 b 190 73 186 153 190 104 b 190 58 190 66 190 62 z m 432 58 b 390 -85 432 36 426 -30 b 289 -183 366 -122 317 -161 l 294 98 b 376 153 297 111 318 153 b 432 73 428 153 432 104 b 432 58 432 66 432 62 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 75, - y_min: -212, - y_max: 209, - ha: 421, - o: 'm 98 -305 b 104 -302 101 -304 102 -304 b 108 -295 107 -301 108 -298 b 107 -289 108 -294 108 -292 b 40 10 107 -288 40 -160 b 107 288 40 95 58 192 b 108 292 108 289 108 291 b 104 300 108 295 107 298 b 96 301 101 301 99 302 b 91 298 94 301 92 300 b 0 0 86 292 0 174 b 91 -301 0 -174 86 -295 b 98 -305 92 -304 95 -305 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 75, - y_min: -209, - y_max: 212, - ha: 421, - o: 'm 10 305 b 4 302 7 304 6 304 b 0 295 1 301 0 298 b 1 289 0 294 0 292 b 68 -10 1 288 68 160 b 1 -288 68 -95 50 -192 b 0 -292 0 -289 0 -291 b 4 -300 0 -295 1 -298 b 12 -301 7 -301 9 -302 b 17 -298 14 -301 16 -300 b 108 0 22 -292 108 -174 b 17 301 108 174 22 295 b 10 305 16 304 13 305 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 193, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 608 84 b 482 217 608 173 554 217 b 376 174 416 217 384 186 l 379 632 b 360 651 379 642 370 651 l 348 651 b 330 632 338 651 330 642 l 336 -235 b 354 -253 336 -245 344 -253 b 363 -249 359 -253 360 -251 b 501 -145 363 -249 442 -202 b 608 84 543 -105 608 -26 z m 459 154 b 516 75 511 154 516 105 b 516 58 516 68 516 62 b 474 -72 516 36 510 -17 b 373 -179 448 -111 400 -156 l 374 107 b 376 102 374 102 376 99 b 459 154 376 115 396 154 z m 0 84 b 107 -145 0 -26 65 -105 b 245 -249 166 -202 245 -249 b 253 -253 248 -251 249 -253 b 272 -235 264 -253 272 -245 l 278 632 b 259 651 278 642 269 651 l 248 651 b 229 632 238 651 229 642 l 232 174 b 125 217 223 186 192 217 b 0 84 53 217 0 173 z m 148 154 b 232 102 212 154 232 115 b 233 107 232 99 233 102 l 235 -179 b 134 -72 207 -156 160 -111 b 92 58 98 -17 92 36 b 92 75 92 62 92 68 b 148 154 92 105 96 154 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 180, - y_min: -316, - y_max: 320, - ha: 636, - o: 'm 243 144 b 259 164 252 145 259 156 l 259 249 b 239 269 259 261 251 269 b 235 268 238 269 236 268 l 150 251 l 150 461 l 109 461 l 109 242 l 16 222 b 0 203 7 220 0 212 l 0 120 b 20 99 0 108 9 99 b 24 99 22 99 23 99 l 109 117 l 109 -121 l 16 -141 b 0 -160 7 -143 0 -151 l 0 -243 b 20 -264 0 -255 9 -264 b 24 -264 22 -264 23 -264 l 109 -246 l 109 -455 l 150 -455 l 150 -238 l 243 -219 b 259 -199 252 -217 259 -207 l 259 -114 b 239 -95 259 -102 251 -95 b 235 -95 238 -95 236 -95 l 150 -112 l 150 125 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: 0, - x_max: 290, - y_min: -328, - y_max: 339, - ha: 667, - o: 'm 400 158 b 416 179 409 160 416 170 l 416 264 b 397 284 416 275 409 284 b 393 284 396 284 395 284 l 348 274 l 348 488 l 308 488 l 308 265 l 223 248 l 223 465 l 184 465 l 184 240 l 108 225 l 108 442 l 69 442 l 69 216 l 16 204 b 0 186 7 203 0 194 l 0 102 b 20 82 0 91 9 82 b 24 82 22 82 23 82 l 69 92 l 69 -147 l 16 -158 b 0 -177 7 -160 0 -168 l 0 -261 b 20 -281 0 -272 9 -281 b 24 -281 22 -281 23 -281 l 69 -272 l 69 -472 l 108 -472 l 108 -264 l 184 -248 l 184 -451 l 223 -451 l 223 -240 l 308 -223 l 308 -426 l 348 -426 l 348 -215 l 400 -204 b 418 -184 409 -203 418 -193 l 418 -99 b 397 -79 418 -88 409 -79 b 393 -79 396 -79 395 -79 l 348 -89 l 348 148 z m 184 -122 l 108 -138 l 108 99 l 184 115 z m 223 122 l 308 140 l 308 -98 l 223 -115 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 160 317 l 336 419 l 336 482 l 161 380 l 161 488 l 336 590 l 336 654 l 163 552 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 108 520 l 0 456 l 0 393 l 108 456 l 109 350 l 0 285 l 0 222 l 109 287 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 141 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 154 -184 230 -122 181 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalBakiyeFlat: { - x_min: 0, - x_max: 277, - y_min: -176, - y_max: 454, - ha: 630, - o: 'm 396 115 b 279 225 387 173 354 225 b 158 171 204 225 164 179 l 161 348 l 336 452 l 336 516 l 161 413 l 164 634 b 144 654 164 645 156 654 l 127 654 b 107 634 115 654 107 645 l 109 382 l 0 318 l 0 255 l 109 318 l 114 -235 b 134 -253 114 -246 122 -253 b 145 -251 138 -253 143 -252 b 323 -114 145 -251 242 -204 b 399 79 377 -52 399 20 b 396 115 399 92 397 104 z m 297 58 b 255 -85 297 36 291 -30 b 156 -184 230 -122 183 -163 l 158 96 b 240 153 161 109 181 153 b 297 73 292 153 297 104 b 297 58 297 66 297 62 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 348, - y_min: -316, - y_max: 318, - ha: 634, - o: 'm 494 121 b 482 125 491 124 487 125 b 478 124 481 125 480 124 l 269 68 l 269 127 l 412 164 b 425 181 420 167 425 173 l 425 266 b 418 282 425 272 422 279 b 406 285 415 285 410 285 b 402 285 405 285 403 285 l 269 249 l 269 458 l 232 458 l 232 239 l 89 200 b 76 181 81 197 76 190 l 76 98 b 84 84 76 92 79 86 b 95 79 86 81 91 79 b 99 81 96 79 98 81 l 232 115 l 232 58 l 14 -3 b 0 -20 6 -6 0 -12 l 0 -104 b 7 -118 0 -109 3 -115 b 19 -122 10 -121 14 -122 b 23 -122 20 -122 22 -122 l 232 -66 l 232 -124 l 89 -163 b 76 -180 81 -166 76 -171 l 76 -264 b 84 -279 76 -269 79 -276 b 95 -282 86 -282 91 -282 b 99 -282 96 -282 98 -282 l 232 -246 l 232 -455 l 269 -455 l 269 -236 l 412 -199 b 425 -180 420 -196 425 -189 l 425 -95 b 418 -81 425 -89 422 -84 b 406 -76 415 -78 410 -76 b 402 -78 405 -76 403 -78 l 269 -114 l 269 -55 l 487 4 b 501 22 495 7 501 13 l 501 107 b 494 121 501 112 498 118 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 361, - y_min: 0, - y_max: 235, - ha: 235, - o: 'm 26 337 b 20 338 24 337 22 338 b 0 318 9 338 0 330 l 0 285 b 14 266 0 276 7 269 l 323 170 l 14 72 b 0 53 7 69 0 62 l 0 20 b 20 0 0 9 9 0 b 26 1 22 0 24 1 l 505 150 b 520 170 513 153 520 161 b 505 189 520 179 513 186 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 361, - y_min: -235, - y_max: 0, - ha: 235, - o: 'm 26 -1 b 20 0 24 -1 22 0 b 0 -20 9 0 0 -9 l 0 -53 b 14 -72 0 -62 7 -69 l 323 -168 l 14 -266 b 0 -285 7 -269 0 -276 l 0 -318 b 20 -338 0 -330 9 -338 b 26 -337 22 -338 24 -337 l 505 -189 b 520 -168 513 -186 520 -177 b 505 -150 520 -160 513 -153 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 316, - y_min: 0, - y_max: 46, - ha: 46, - o: 'm 20 66 b 0 46 9 66 0 58 l 0 20 b 20 0 0 9 9 0 l 435 0 b 455 20 446 0 455 9 l 455 46 b 435 66 455 58 446 66 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 316, - y_min: -46, - y_max: 0, - ha: 46, - o: 'm 20 0 b 0 -20 9 0 0 -9 l 0 -46 b 20 -66 0 -58 9 -66 l 435 -66 b 455 -46 446 -66 455 -58 l 455 -20 b 435 0 455 -9 446 0 z', - }, - articStaccatoAbove: { - x_min: 0, - x_max: 78, - y_min: 0, - y_max: 78, - ha: 78, - o: 'm 16 16 b 96 16 39 -6 73 -6 b 96 95 118 39 118 73 b 16 95 73 118 39 118 b 16 16 -6 73 -6 39 z', - }, - articStaccatoBelow: { - x_min: 0, - x_max: 78, - y_min: -78, - y_max: 0, - ha: 78, - o: 'm 16 -96 b 96 -96 39 -118 73 -118 b 96 -17 118 -73 118 -39 b 16 -17 73 6 39 6 b 16 -96 -6 -39 -6 -73 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 127, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 163 357 b 150 353 154 357 150 353 l 99 300 b 92 295 96 297 95 295 b 85 300 89 295 88 297 l 35 353 b 22 357 35 353 30 357 b 0 338 13 357 0 351 b 73 22 0 323 73 22 b 92 0 75 16 78 0 b 111 22 107 0 109 16 b 183 338 111 22 183 323 b 163 357 183 351 171 357 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 127, - y_min: -248, - y_max: 0, - ha: 248, - o: 'm 20 -357 b 33 -353 29 -357 33 -353 l 84 -300 b 91 -295 86 -297 88 -295 b 98 -300 94 -295 95 -297 l 148 -353 b 161 -357 148 -353 153 -357 b 183 -338 170 -357 183 -351 b 109 -22 183 -323 109 -22 b 91 0 108 -16 105 0 b 72 -22 76 0 73 -16 b 0 -338 72 -22 0 -323 b 20 -357 0 -351 12 -357 z', - }, - articMarcatoAbove: { - x_min: 1, - x_max: 296, - y_min: 0, - y_max: 253, - ha: 253, - o: 'm 36 10 l 173 239 l 298 10 b 317 0 301 4 310 0 l 408 0 b 426 20 419 0 426 9 b 425 30 426 23 426 27 l 230 356 b 213 364 226 361 222 363 b 196 356 207 364 199 361 l 1 30 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 295, - y_min: -253, - y_max: 0, - ha: 253, - o: 'm 390 -10 l 253 -239 l 128 -10 b 109 0 125 -4 117 0 l 19 0 b 0 -20 7 0 0 -9 b 1 -30 0 -23 0 -27 l 196 -356 b 213 -364 200 -361 204 -363 b 230 -356 219 -364 228 -361 l 425 -30 z', - }, - fermataAbove: { - x_min: 0, - x_max: 622, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 778 374 b 448 530 642 521 523 530 b 120 374 373 530 255 521 b 0 65 49 297 0 143 b 20 19 0 37 6 19 b 161 265 60 19 40 143 b 445 373 268 372 410 373 b 448 373 446 373 446 373 b 451 373 449 373 449 373 b 734 265 485 373 628 372 b 876 19 855 143 835 19 b 896 65 890 19 896 36 b 778 374 896 143 848 298 z m 348 99 b 448 0 348 45 393 0 b 547 99 503 0 547 45 b 448 199 547 154 503 199 b 348 99 393 199 348 154 z', - }, - fermataBelow: { - x_min: 0, - x_max: 622, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 778 -374 b 896 -65 848 -298 896 -143 b 876 -19 896 -36 890 -19 b 734 -265 835 -19 855 -143 b 451 -373 628 -372 485 -373 b 448 -373 449 -373 449 -373 b 445 -373 446 -373 446 -373 b 161 -265 410 -373 268 -372 b 20 -19 40 -143 60 -19 b 0 -65 6 -19 0 -37 b 120 -374 0 -143 49 -297 b 448 -530 255 -521 373 -530 b 778 -374 523 -530 642 -521 z m 348 -99 b 448 -199 348 -154 393 -199 b 547 -99 503 -199 547 -154 b 448 0 547 -45 503 0 b 348 -99 393 0 348 -45 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 623, - y_min: 0, - y_max: 368, - ha: 368, - o: 'm 40 0 l 40 399 l 858 399 l 858 0 l 897 0 l 897 510 b 877 530 897 521 888 530 l 20 530 b 0 510 9 530 0 521 l 0 0 z m 350 148 b 449 49 350 94 395 49 b 547 148 504 49 547 94 b 449 248 547 203 504 248 b 350 148 395 248 350 203 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 623, - y_min: -368, - y_max: 0, - ha: 368, - o: 'm 0 -510 b 20 -530 0 -521 9 -530 l 877 -530 b 897 -510 888 -530 897 -521 l 897 0 l 858 0 l 858 -399 l 40 -399 l 40 0 l 0 0 z m 350 -148 b 449 -248 350 -203 395 -248 b 547 -148 504 -248 547 -203 b 449 -49 547 -94 504 -49 b 350 -148 395 -49 350 -94 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 842, - y_min: 0, - y_max: 549, - ha: 549, - o: 'm 276 0 l 276 399 l 936 399 l 936 0 l 976 0 l 976 510 b 956 530 976 521 968 530 l 256 530 b 236 510 245 530 236 521 l 236 0 z m 507 148 b 606 49 507 94 552 49 b 706 148 661 49 706 94 b 606 248 706 203 661 248 b 507 148 552 248 507 203 z m 40 0 l 40 661 l 1172 661 l 1172 0 l 1212 0 l 1212 772 b 1192 791 1212 783 1204 791 l 20 791 b 0 772 9 791 0 783 l 0 0 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 842, - y_min: -549, - y_max: 0, - ha: 549, - o: 'm 236 -510 b 256 -530 236 -521 245 -530 l 956 -530 b 976 -510 968 -530 976 -521 l 976 0 l 936 0 l 936 -399 l 276 -399 l 276 0 l 236 0 z m 507 -148 b 606 -248 507 -203 552 -248 b 706 -148 661 -248 706 -203 b 606 -49 706 -94 661 -49 b 507 -148 552 -49 507 -94 z m 0 -772 b 20 -791 0 -783 9 -791 l 1192 -791 b 1212 -772 1204 -791 1212 -783 l 1212 0 l 1172 0 l 1172 -661 l 40 -661 l 40 0 l 0 0 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 642, - y_min: 0, - y_max: 454, - ha: 454, - o: 'm 363 148 b 462 49 363 94 408 49 b 562 148 517 49 562 94 b 462 248 562 203 517 248 b 363 148 408 248 363 203 z m 477 645 b 461 654 474 649 467 654 b 445 645 455 654 448 649 l 4 32 b 0 20 3 29 0 23 b 20 0 0 9 9 0 l 82 0 b 98 9 88 0 95 4 l 461 514 l 827 9 b 842 0 829 4 837 0 l 904 0 b 924 20 916 0 924 9 b 920 32 924 23 922 29 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 642, - y_min: -454, - y_max: 0, - ha: 454, - o: 'm 363 -148 b 462 -248 363 -203 408 -248 b 562 -148 517 -248 562 -203 b 462 -49 562 -94 517 -49 b 363 -148 408 -49 363 -94 z m 920 -32 b 924 -20 922 -29 924 -23 b 904 0 924 -9 916 0 l 842 0 b 827 -9 837 0 829 -4 l 461 -514 l 98 -9 b 82 0 95 -4 88 0 l 20 0 b 0 -20 9 0 0 -9 b 4 -32 0 -23 3 -29 l 445 -645 b 461 -654 448 -649 455 -654 b 477 -645 467 -654 474 -649 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 321, - ha: 321, - o: 'm 82 0 b 275 285 215 92 275 183 b 115 462 275 396 212 462 b 0 356 46 462 0 413 b 115 246 0 294 53 246 b 181 258 157 246 177 256 b 192 261 184 259 189 261 b 199 259 194 261 196 261 b 203 245 202 258 203 253 b 48 43 203 183 147 112 z', - }, - caesura: { - x_min: 0, - x_max: 380, - y_min: 0, - y_max: 490, - ha: 490, - o: 'm 285 706 b 285 706 285 706 285 706 b 271 696 279 706 274 701 l 1 22 b 0 16 0 20 0 17 b 16 0 0 7 7 0 l 50 0 b 65 10 56 0 62 4 l 334 684 b 336 690 334 685 336 688 b 320 706 336 698 328 706 z m 213 22 b 212 16 213 20 212 17 b 228 0 212 7 219 0 l 262 0 b 276 10 268 0 274 4 l 546 684 b 547 690 547 685 547 688 b 531 706 547 698 540 706 l 497 706 b 482 696 491 706 485 701 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 368, - y_min: 0, - y_max: 491, - ha: 491, - o: 'm 262 707 b 245 693 253 707 246 701 b 1 26 233 603 177 348 b 0 17 0 23 0 20 b 16 0 0 9 6 0 b 30 7 22 0 27 3 b 318 687 259 341 304 602 b 318 690 318 688 318 688 b 301 707 318 698 310 707 z m 474 707 b 458 693 465 707 459 701 b 213 26 446 603 389 348 b 212 19 212 23 212 20 b 229 0 212 9 219 0 b 243 7 235 0 240 3 b 530 687 472 341 516 602 b 530 690 530 688 530 688 b 514 707 530 698 523 707 z', - }, - restMaxima: { - x_min: 0, - x_max: 450, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 158 -360 b 180 -338 170 -360 180 -350 l 180 338 b 158 360 180 350 170 360 l 22 360 b 0 338 9 360 0 350 l 0 -338 b 22 -360 0 -350 9 -360 z m 626 -360 b 648 -338 638 -360 648 -350 l 648 338 b 626 360 648 350 638 360 l 490 360 b 468 338 477 360 468 350 l 468 -338 b 490 -360 468 -350 477 -360 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 125, - y_min: -11, - y_max: 262, - ha: 273, - o: 'm 158 -16 b 180 6 171 -16 180 -6 l 180 356 b 158 377 180 367 171 377 l 22 377 b 0 356 10 377 0 367 l 0 6 b 22 -16 0 -6 10 -16 z', - }, - restWhole: { - x_min: 0, - x_max: 325, - y_min: -131, - y_max: 5, - ha: 136, - o: 'm 20 7 b 0 -13 9 7 0 -1 l 0 -168 b 20 -189 0 -180 9 -189 l 448 -189 b 468 -168 459 -189 468 -180 l 468 -13 b 448 7 468 -1 459 7 z', - }, - restWholeLegerLine: { - x_min: -139, - x_max: 464, - y_min: -122, - y_max: 14, - ha: 136, - o: 'm 449 20 l 19 20 l -200 20 l -200 -20 l 0 -20 l 0 -156 b 19 -176 0 -167 7 -176 l 449 -176 b 468 -156 461 -176 468 -167 l 468 -20 l 668 -20 l 668 20 z', - }, - restHalf: { - x_min: 0, - x_max: 325, - y_min: -4, - y_max: 132, - ha: 136, - o: 'm 0 14 b 20 -6 0 -6 0 -6 l 448 -6 b 468 14 468 -6 468 -6 l 468 170 b 448 190 468 190 468 190 l 20 190 b 0 170 0 190 0 190 z', - }, - restHalfLegerLine: { - x_min: -139, - x_max: 464, - y_min: -14, - y_max: 122, - ha: 136, - o: 'm 668 20 l 468 20 l 468 156 b 449 176 468 167 461 176 l 19 176 b 0 156 7 176 0 167 l 0 20 l -200 20 l -200 -20 l 19 -20 l 449 -20 l 668 -20 z', - }, - restQuarter: { - x_min: 0, - x_max: 235, - y_min: -331, - y_max: 401, - ha: 732, - o: 'm 331 -239 b 323 -229 330 -238 327 -235 l 157 -24 b 154 -16 156 -23 154 -19 b 157 -3 154 -12 156 -6 l 304 219 b 307 229 305 222 307 226 l 307 242 b 302 253 307 246 305 251 l 69 569 b 55 577 69 569 63 577 b 43 573 50 577 48 576 b 36 559 37 569 36 563 b 40 543 36 550 40 543 l 150 393 b 154 376 153 389 154 383 b 150 359 154 370 153 363 l 4 137 b 1 125 3 134 1 128 l 1 112 b 6 101 1 108 3 104 l 167 -99 b 131 -95 161 -98 148 -95 b 49 -124 107 -95 75 -101 b 0 -229 17 -153 0 -193 b 16 -285 0 -249 4 -269 b 154 -468 46 -331 154 -468 b 171 -477 154 -468 161 -477 b 180 -474 174 -477 177 -477 b 190 -456 187 -468 190 -462 b 186 -444 190 -451 187 -446 b 135 -353 181 -436 135 -353 b 125 -307 135 -353 125 -333 b 150 -246 125 -288 131 -265 b 206 -223 167 -229 187 -223 b 252 -236 225 -223 240 -229 l 308 -272 b 320 -275 308 -272 314 -275 b 334 -268 325 -275 330 -274 b 338 -255 337 -262 338 -259 b 334 -243 338 -251 337 -248 z', - }, - rest8th: { - x_min: 0, - x_max: 276, - y_min: -255, - y_max: 204, - ha: 459, - o: 'm 384 292 b 379 294 383 292 380 294 b 360 282 370 294 363 289 b 245 141 354 274 310 189 b 180 112 226 127 203 117 b 206 181 196 131 206 154 b 104 284 206 238 160 284 b 0 181 46 284 0 238 b 65 85 0 137 27 101 b 144 68 86 75 115 68 b 269 109 186 68 230 81 b 320 157 287 122 304 140 l 156 -356 l 194 -367 l 396 268 b 397 275 397 269 397 272 b 384 292 397 282 393 288 z', - }, - rest16th: { - x_min: 1, - x_max: 344, - y_min: -507, - y_max: 204, - ha: 711, - o: 'm 494 268 b 495 275 495 271 495 272 b 482 292 495 282 491 289 b 475 294 480 294 477 294 b 456 282 467 294 461 289 b 285 115 422 213 364 135 b 310 184 302 135 310 158 b 203 284 310 240 259 284 b 104 177 145 281 104 233 b 171 84 105 134 134 98 b 252 69 197 72 225 69 b 423 164 324 72 380 108 l 423 164 l 359 -65 b 183 -245 338 -132 256 -226 b 207 -176 199 -225 207 -200 b 102 -76 207 -118 158 -76 b 1 -183 45 -76 1 -125 b 69 -275 1 -226 32 -262 b 150 -289 96 -287 121 -289 b 321 -194 222 -287 278 -251 l 174 -720 l 213 -730 z', - }, - rest32nd: { - x_min: 0, - x_max: 391, - y_min: -507, - y_max: 460, - ha: 967, - o: 'm 217 71 b 408 171 348 71 402 161 l 354 -46 b 184 -240 323 -121 268 -217 b 204 -171 200 -220 204 -197 b 102 -76 204 -114 158 -76 b 0 -177 46 -76 0 -120 b 140 -288 0 -252 63 -288 b 320 -186 216 -288 276 -246 l 189 -721 l 228 -730 l 562 638 b 563 644 563 639 563 642 b 549 661 563 652 557 658 b 543 662 547 662 544 662 b 524 649 534 662 528 657 b 361 487 497 589 431 504 b 383 556 379 508 383 530 b 282 652 383 611 338 652 b 179 549 226 652 179 609 b 249 451 179 505 210 464 b 311 439 268 444 288 441 b 330 441 317 439 323 439 b 498 541 400 445 458 485 l 442 310 b 271 117 413 238 351 137 b 292 186 288 138 292 160 b 189 282 292 243 245 282 b 88 180 132 282 88 238 b 217 71 88 112 153 71 z', - }, - rest64th: { - x_min: 0, - x_max: 423, - y_min: -758, - y_max: 464, - ha: 1222, - o: 'm 207 -1083 l 246 -1092 b 608 644 282 -919 605 634 b 609 649 608 647 609 648 b 595 667 609 658 603 665 b 589 668 593 668 592 668 b 569 654 577 668 575 664 b 474 521 563 644 530 573 b 412 487 456 505 435 494 b 432 546 425 503 432 526 b 328 649 432 606 382 649 b 226 546 275 649 226 608 b 360 438 226 465 300 438 b 501 492 419 438 474 465 b 546 546 527 518 533 526 l 547 547 l 500 323 b 399 161 491 300 452 209 b 337 125 382 144 360 132 b 357 184 350 143 357 134 b 253 288 357 235 317 288 b 151 187 190 288 151 236 b 285 76 151 138 183 76 b 471 184 412 76 465 173 l 423 -45 b 324 -204 413 -69 374 -158 b 262 -240 305 -222 284 -233 b 281 -180 274 -223 281 -212 b 177 -78 281 -147 258 -78 b 75 -180 98 -78 75 -153 b 209 -289 75 -207 88 -289 b 395 -181 330 -289 389 -193 l 350 -397 b 248 -564 337 -449 285 -530 b 186 -599 229 -580 207 -592 b 204 -540 197 -583 204 -563 b 102 -438 204 -501 174 -438 b 0 -540 29 -438 0 -501 b 132 -648 0 -579 24 -648 b 320 -540 266 -648 315 -552 z', - }, - rest128th: { - x_min: -1, - x_max: 475, - y_min: -759, - y_max: 717, - ha: 1476, - o: 'm 677 1028 b 664 1032 672 1031 667 1032 b 644 1018 654 1032 649 1028 b 549 886 638 1008 605 937 b 487 851 531 870 510 858 b 507 910 500 868 507 890 b 403 1014 507 971 456 1014 b 301 910 350 1014 301 972 b 435 802 301 829 374 802 b 576 857 494 802 549 829 b 621 910 602 883 608 890 l 622 912 l 575 687 b 474 526 566 664 527 573 b 412 490 456 508 435 497 b 432 549 425 507 432 498 b 328 652 432 599 392 652 b 226 552 265 652 226 600 b 360 441 226 503 258 441 b 546 549 487 441 540 537 l 498 320 b 399 160 488 295 449 207 b 337 125 380 143 359 131 b 356 184 348 141 356 153 b 252 287 356 217 333 287 b 150 184 173 287 150 212 b 284 76 150 157 163 76 b 469 183 405 76 464 171 l 425 -33 b 323 -200 412 -85 360 -166 b 261 -235 304 -216 282 -228 b 279 -176 272 -219 279 -199 b 177 -72 279 -137 249 -72 b 75 -176 104 -72 75 -137 b 207 -284 75 -215 99 -284 b 395 -176 341 -284 390 -187 l 347 -409 b 248 -566 330 -461 282 -533 b 186 -600 229 -582 207 -593 b 204 -541 197 -583 204 -564 b 102 -438 204 -501 174 -438 b -1 -541 29 -438 -1 -503 b 132 -649 -1 -580 24 -649 b 318 -546 256 -649 307 -567 l 206 -1084 l 245 -1093 b 683 1008 281 -920 680 996 b 684 1015 683 1009 684 1014 b 677 1028 684 1020 683 1024 z', - }, - dynamicPiano: { - x_min: -95, - x_max: 317, - y_min: -163, - y_max: 263, - ha: 426, - o: 'm 186 -235 l 186 -206 l 78 -206 l 161 26 l 166 16 b 229 -29 166 16 180 -16 b 256 -32 238 -32 248 -32 b 445 166 336 -32 415 49 b 456 246 454 197 456 223 b 374 373 456 343 396 367 b 356 376 369 374 361 376 b 242 314 311 376 266 338 l 238 310 l 235 315 b 154 377 235 315 204 370 b 138 379 148 377 144 379 b 0 226 91 379 42 346 l 26 213 b 63 301 32 232 46 278 b 102 328 72 314 89 325 b 108 328 104 328 107 328 b 120 325 112 328 117 327 b 127 304 125 321 127 314 b 94 192 127 269 101 206 l -49 -206 l -137 -206 l -137 -235 z m 226 17 b 215 19 223 17 217 17 b 187 81 193 27 187 53 b 204 180 187 125 203 177 b 297 317 217 235 259 295 b 324 325 307 323 315 325 b 336 324 328 325 333 325 b 350 311 341 323 347 317 b 356 278 354 302 356 291 b 333 161 356 239 341 187 b 242 20 314 105 278 37 b 226 17 238 17 230 17 z', - }, - dynamicMezzo: { - x_min: -7, - x_max: 374, - y_min: -2, - y_max: 251, - ha: 253, - o: 'm 488 63 b 467 48 481 50 474 48 b 459 49 464 48 462 48 b 449 65 452 52 449 58 b 461 112 449 76 455 94 b 474 157 464 121 471 150 b 492 281 482 183 492 242 b 491 301 492 288 492 295 b 436 359 484 340 467 359 b 340 307 399 359 359 331 l 337 301 l 334 308 b 272 359 334 308 311 359 b 177 310 232 359 202 343 l 173 304 l 171 311 b 117 360 171 311 153 353 b 96 361 109 361 102 361 b 29 328 60 361 39 340 b -10 252 20 318 0 284 l 12 240 b 68 318 12 240 36 318 b 75 317 71 318 72 318 b 86 295 84 314 86 307 b 59 194 86 275 75 240 b 1 20 59 193 6 33 b 0 13 1 17 0 16 b 3 4 0 10 1 7 b 14 -1 6 1 9 -1 l 36 -1 b 91 -1 58 -1 86 -1 b 107 22 94 -1 101 -1 b 127 99 114 53 121 79 b 235 310 132 121 186 310 b 243 305 238 310 242 308 b 248 289 246 302 248 297 b 216 160 248 265 233 219 b 173 22 194 89 173 22 b 173 16 173 20 173 19 b 176 3 173 12 173 6 b 187 -1 179 0 183 -1 l 266 -1 b 282 16 272 -1 279 0 b 284 26 282 17 284 22 b 392 302 312 228 359 288 b 396 304 393 302 395 304 l 397 304 b 400 302 399 304 399 302 b 408 289 403 301 408 297 b 369 140 408 275 399 217 b 356 75 360 117 356 95 b 370 23 356 55 360 37 b 428 -3 382 6 408 -3 b 536 99 492 -3 517 49 b 539 108 537 102 537 105 l 514 120 b 488 63 514 120 498 81 z', - }, - dynamicForte: { - x_min: -137, - x_max: 334, - y_min: -193, - y_max: 421, - ha: 614, - o: 'm -122 -86 b -197 -161 -161 -86 -197 -122 b -81 -278 -197 -236 -147 -278 b 35 -228 -35 -278 -1 -264 b 202 173 98 -164 167 50 b 238 297 215 219 228 264 l 238 300 l 341 300 b 356 314 350 300 356 305 l 356 346 b 341 360 356 354 350 360 l 256 360 l 256 364 b 330 554 297 511 308 537 b 359 566 341 563 351 566 b 366 564 361 566 364 564 b 380 553 373 563 377 559 b 382 546 382 550 382 549 b 373 528 382 539 379 531 b 351 478 359 517 351 498 b 354 458 351 471 353 465 b 384 426 359 445 370 432 b 410 420 390 423 400 420 b 445 431 420 420 432 423 b 478 472 459 438 474 456 b 481 497 481 480 481 488 b 467 550 481 514 477 533 b 376 605 455 572 422 598 b 351 606 369 606 360 606 b 225 553 317 606 272 595 b 122 363 187 520 154 456 l 122 360 l 13 360 b -1 346 4 360 -1 354 l -1 314 b 13 300 -1 305 4 300 l 102 300 l 102 294 b 66 140 88 236 76 187 b 24 -35 55 86 42 32 l 20 -52 b -53 -235 -10 -170 -19 -212 b -78 -242 -60 -239 -69 -242 b -98 -235 -85 -242 -92 -239 b -105 -222 -102 -232 -105 -228 b -105 -219 -105 -220 -105 -220 b -94 -204 -104 -213 -101 -207 b -58 -144 -66 -193 -58 -167 b -122 -86 -58 -124 -71 -86 z', - }, - dynamicRinforzando: { - x_min: -12, - x_max: 230, - y_min: 0, - y_max: 254, - ha: 254, - o: 'm 272 364 b 200 341 239 364 212 348 b 168 310 187 333 177 321 l 164 304 b 109 363 164 304 151 353 b 88 366 102 364 95 366 b 22 331 52 366 32 343 b -17 255 13 321 -7 287 l 4 243 b 60 321 4 243 29 321 b 68 320 63 321 65 321 b 78 297 75 317 78 308 b 49 180 78 272 65 230 l 0 23 b 0 17 0 22 0 20 b 3 4 0 13 0 7 b 14 0 6 1 10 0 l 94 0 b 109 17 99 0 107 1 b 111 27 109 19 111 23 b 209 302 140 230 186 279 b 225 311 215 308 220 311 b 229 310 226 311 228 311 b 233 304 233 307 233 305 b 233 301 233 302 233 301 b 216 268 220 291 216 279 b 225 243 216 259 219 249 b 262 229 235 232 249 229 b 304 242 279 229 295 235 b 331 308 320 255 331 275 b 272 364 331 341 304 364 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 208, - y_min: -5, - y_max: 263, - ha: 268, - o: 'm 242 328 b 217 289 222 317 217 300 b 258 249 217 274 230 249 b 298 284 285 249 295 269 b 300 295 300 287 300 291 b 189 379 300 328 272 379 b 49 259 92 379 49 315 b 99 173 49 229 59 196 b 164 137 117 163 140 151 b 194 88 189 122 194 102 b 124 24 194 73 177 24 b 72 46 82 24 72 39 b 73 49 72 48 72 49 b 96 96 78 52 96 62 b 50 150 96 134 72 150 b 0 91 29 150 0 134 b 124 -7 0 26 49 -7 b 282 111 199 -7 282 24 b 171 239 282 197 207 219 b 128 292 135 259 128 268 b 193 347 128 317 156 347 b 242 328 230 347 242 328 z', - }, - dynamicZ: { - x_min: -42, - x_max: 239, - y_min: -1, - y_max: 258, - ha: 259, - o: 'm 229 292 b 235 288 232 292 233 291 b 236 284 236 285 236 285 b 233 278 236 281 235 279 b -42 55 232 276 -4 85 b -60 24 -56 43 -60 33 b -50 4 -60 12 -50 4 b -35 0 -45 1 -40 0 b 9 29 -14 0 1 19 b 50 69 17 43 26 69 b 89 35 75 69 81 50 b 170 -1 104 10 137 -1 b 243 22 197 -1 223 6 b 304 147 288 56 304 118 b 264 196 304 176 294 196 b 226 156 239 196 226 174 b 251 117 226 128 249 122 b 251 108 251 114 251 111 b 243 79 251 98 249 88 b 212 56 236 68 223 56 b 202 59 209 56 204 56 b 163 92 194 63 186 75 b 108 122 140 109 114 120 b 105 125 105 124 105 124 b 107 128 105 127 107 128 b 312 304 107 128 302 294 b 341 340 324 315 336 327 b 344 347 343 341 344 346 l 344 356 b 333 369 343 367 336 369 l 331 369 l 262 363 b 217 361 245 361 230 361 b 156 366 193 361 174 363 b 114 372 147 367 125 372 b 107 370 111 372 108 370 b 86 344 98 367 89 360 b 37 222 72 265 42 232 b 37 219 37 220 37 220 b 50 207 37 213 43 207 l 66 207 b 81 225 75 207 76 215 b 108 291 85 235 105 285 b 118 297 111 297 112 297 b 167 289 125 295 144 291 b 181 289 171 289 177 289 b 229 292 202 289 222 291 z', - }, - ornamentTrill: { - x_min: -12, - x_max: 383, - y_min: 0, - y_max: 383, - ha: 383, - o: 'm 464 396 b 376 359 408 396 376 359 l 364 370 b 346 377 357 377 346 377 l 197 377 l 246 528 b 246 531 246 530 246 531 b 226 552 246 541 236 552 l 213 552 b 199 544 209 552 202 547 b 124 482 196 541 130 487 b 117 471 118 478 117 471 b 84 377 117 471 102 431 l 3 377 b -17 360 -14 377 -17 360 l -17 341 b 3 324 -17 325 3 324 l 66 324 b 0 85 35 229 0 117 b 92 0 0 16 48 0 b 186 35 137 0 186 35 b 194 13 186 35 190 24 b 212 0 199 1 212 0 l 276 0 b 298 16 295 0 298 16 l 298 43 b 321 147 298 75 321 147 l 382 284 b 412 325 382 284 396 311 b 446 341 425 336 438 341 b 452 340 448 341 451 341 b 428 288 432 327 428 305 b 485 233 428 271 446 233 b 552 308 534 233 552 264 b 464 396 552 353 520 396 z m 222 143 b 147 78 210 104 171 78 b 137 79 143 78 140 78 b 121 115 125 85 121 99 b 137 190 121 148 137 190 l 180 324 l 275 324 b 279 320 279 324 279 320 b 222 143 279 320 235 187 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 456, - y_min: 0, - y_max: 232, - ha: 232, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 328 255 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 328 79 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 456, - y_min: -80, - y_max: 313, - ha: 393, - o: 'm 527 334 b 442 269 488 334 442 312 b 501 204 442 228 468 204 b 570 226 533 204 540 226 b 613 164 598 226 613 204 l 613 163 b 550 98 613 127 586 98 b 448 143 508 98 485 109 l 354 230 l 354 431 b 336 451 354 442 347 451 l 323 451 b 302 431 311 451 302 442 l 302 279 l 298 284 b 174 334 262 317 223 334 b 0 170 92 334 0 278 b 131 0 0 68 58 0 b 215 65 170 0 215 22 b 156 130 215 107 189 130 b 86 108 124 130 117 108 b 43 170 59 108 43 130 l 43 171 b 108 236 43 207 72 236 b 209 192 150 236 171 225 l 302 104 l 302 -96 b 323 -115 302 -108 311 -115 l 336 -115 b 354 -96 347 -115 354 -108 l 354 55 l 360 50 b 482 0 396 17 433 0 b 657 164 564 0 657 56 b 527 334 657 266 600 334 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 473, - y_min: -77, - y_max: 316, - ha: 393, - o: 'm 647 302 l 562 166 l 446 347 b 429 357 444 353 435 357 b 413 347 423 357 416 353 l 363 262 l 363 435 b 343 455 363 446 354 455 l 331 455 b 311 435 320 455 311 446 l 311 173 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 171 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 311 95 l 311 -91 b 331 -111 311 -102 320 -111 l 343 -111 b 363 -91 354 -111 363 -102 l 363 184 l 366 189 l 478 10 b 495 0 481 4 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 647 302 l 562 166 l 446 347 b 431 357 444 353 436 357 b 413 347 425 357 416 353 l 310 171 l 203 347 b 186 357 200 353 192 357 b 168 347 180 357 173 353 l 0 69 l 35 48 l 120 189 l 226 10 b 243 0 229 4 238 0 b 261 10 249 0 258 4 l 366 189 l 478 9 b 495 0 481 3 490 0 b 513 10 501 0 510 4 l 681 281 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 654, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 907 302 l 822 166 l 708 348 b 691 357 704 354 701 357 b 674 347 685 357 677 353 l 648 302 l 563 166 l 449 348 b 432 357 446 354 438 357 b 415 347 426 357 418 353 l 415 346 l 311 171 l 203 348 b 186 357 200 354 192 357 b 168 348 177 357 171 354 l 168 347 l 0 69 l 35 48 l 120 190 l 226 10 b 243 0 229 4 238 0 l 245 0 b 261 10 251 0 258 4 l 367 189 l 480 10 b 497 0 482 4 491 0 b 513 10 503 0 510 4 l 625 192 l 739 10 b 756 0 742 4 750 0 b 772 10 762 0 769 4 l 942 282 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 680, - y_min: 0, - y_max: 388, - ha: 388, - o: 'm 860 170 l 746 353 b 729 361 743 359 737 361 b 713 351 723 361 716 357 l 685 307 l 600 170 l 487 353 b 481 359 485 356 484 357 b 469 361 478 360 472 361 b 452 351 464 361 455 357 l 348 176 l 240 353 b 223 361 238 359 229 361 b 206 353 215 361 209 359 l 40 76 l 40 541 b 20 559 39 552 30 559 b 0 541 10 559 1 552 l 0 26 b 19 1 0 16 9 4 b 26 0 20 1 24 0 b 48 13 35 0 43 6 l 72 52 l 157 194 l 265 14 b 282 4 268 9 276 4 b 298 14 288 4 295 9 l 405 193 l 517 14 b 534 4 520 9 528 4 b 550 14 540 4 547 9 l 664 196 l 776 14 b 793 4 779 9 788 4 b 811 14 799 4 808 9 l 979 287 l 945 307 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 248, - ha: 406, - o: 'm 834 166 l 720 348 b 704 357 717 354 713 357 b 687 348 697 357 690 353 l 661 302 l 660 302 l 575 166 l 461 348 b 455 354 459 350 456 353 b 444 357 452 356 448 357 b 428 347 438 357 431 353 l 323 171 l 215 347 b 213 350 215 348 215 350 b 213 350 213 350 213 350 l 213 351 l 212 351 l 212 353 l 210 353 l 210 353 l 209 354 b 207 354 209 354 207 354 b 197 357 206 356 200 357 b 197 357 197 357 197 357 b 194 357 196 357 196 357 b 180 347 187 357 183 353 l 180 346 l 69 164 b 0 -50 23 88 0 17 b 49 -219 0 -108 16 -163 b 66 -228 52 -223 59 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -215 b 84 -197 86 -204 85 -200 b 40 -52 55 -150 40 -102 b 104 143 40 10 62 73 l 131 190 l 239 10 b 256 0 242 4 249 0 l 256 0 b 272 10 262 0 269 4 l 379 189 l 491 10 b 508 0 494 4 503 0 b 508 0 508 0 508 0 l 508 0 b 526 10 514 0 521 4 l 638 192 l 750 10 b 768 0 755 4 762 0 l 768 0 b 785 10 773 0 782 4 l 785 10 l 953 282 l 919 302 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 662, - y_min: -158, - y_max: 321, - ha: 479, - o: 'm 834 166 l 720 348 b 704 357 716 354 713 357 b 687 348 698 357 690 354 l 660 304 l 660 302 l 632 259 l 632 442 b 612 462 632 454 624 462 l 599 462 b 579 442 588 462 579 454 l 579 173 l 575 166 l 461 348 b 455 356 459 351 458 354 b 445 359 452 357 448 359 b 428 348 439 359 431 354 l 323 171 l 215 347 b 213 350 215 348 213 350 l 213 351 l 212 353 l 210 353 l 210 354 l 207 354 b 197 357 204 356 200 357 b 180 348 189 357 183 354 l 179 346 l 69 164 b 0 -49 23 88 0 19 b 49 -217 0 -107 17 -163 b 66 -228 52 -223 60 -228 b 76 -225 69 -228 73 -226 b 86 -207 82 -222 86 -213 b 84 -197 86 -204 85 -200 b 42 -50 56 -148 42 -101 b 104 144 42 12 62 75 l 131 190 l 239 10 b 256 0 242 4 251 0 b 274 10 262 0 271 4 l 379 190 l 491 10 b 508 0 494 4 503 0 b 526 10 514 0 523 4 l 579 98 l 579 -84 b 599 -104 579 -95 588 -104 l 612 -104 b 632 -84 624 -104 632 -95 l 632 183 l 638 192 l 750 10 b 768 0 753 4 762 0 b 785 10 773 0 782 4 l 953 282 l 919 302 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 662, - y_min: 0, - y_max: 406, - ha: 406, - o: 'm 904 575 b 887 585 901 580 893 585 b 877 582 884 585 880 583 b 867 564 871 579 867 570 b 870 554 867 562 868 557 b 912 408 897 505 912 458 b 850 213 912 346 891 282 l 822 167 l 714 348 b 697 357 711 354 703 357 b 680 348 691 357 683 354 l 575 168 l 462 348 b 445 357 459 354 451 357 b 428 348 439 357 431 354 l 315 167 l 203 348 b 186 357 200 354 192 357 b 168 348 180 357 171 354 l 0 76 l 35 55 l 120 192 l 233 10 b 249 0 238 4 240 0 b 266 10 255 0 264 4 l 294 55 l 379 192 l 492 9 b 498 3 494 6 495 4 b 508 0 501 1 505 0 b 526 10 514 0 523 4 l 631 186 l 737 13 b 746 3 739 10 743 4 b 756 0 749 1 753 0 b 773 9 762 0 770 3 l 884 193 b 953 406 930 269 953 338 b 904 575 953 464 936 520 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 857, - y_min: 0, - y_max: 248, - ha: 248, - o: 'm 383 140 b 413 189 399 166 412 187 b 520 10 423 171 516 16 b 537 0 523 4 530 0 b 554 10 543 0 550 4 b 660 189 557 16 649 171 b 772 10 671 173 766 19 b 791 0 778 1 785 0 b 806 10 796 0 802 4 b 919 192 809 16 907 174 l 1031 10 b 1048 0 1035 4 1043 0 l 1048 0 b 1066 10 1054 1 1063 4 l 1066 10 l 1234 282 l 1200 302 l 1115 166 l 1002 348 b 985 357 998 354 994 357 b 968 348 978 357 971 353 l 855 166 b 742 348 845 183 746 341 b 726 357 737 354 732 357 b 708 348 719 357 711 354 b 603 171 704 341 613 189 b 495 348 593 189 498 343 b 478 357 492 353 487 357 b 461 348 469 357 464 353 b 357 173 459 346 393 235 b 213 79 320 111 284 79 b 66 176 143 79 95 112 b 40 279 43 228 40 275 b 20 300 40 291 30 300 b 0 278 9 300 0 289 b 29 161 0 276 3 219 b 213 39 65 81 130 39 b 383 140 297 39 346 73 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 565, - y_min: -171, - y_max: 249, - ha: 420, - o: 'm 347 168 l 235 348 b 217 359 230 354 226 359 b 200 348 209 359 203 353 b 3 30 197 344 6 35 b 0 20 0 26 0 24 b 22 0 0 9 10 0 b 37 9 27 0 35 3 l 151 192 b 265 10 161 174 262 13 b 281 0 268 6 272 0 b 298 10 289 0 295 3 l 403 186 l 511 10 b 528 0 516 4 521 0 b 546 10 537 0 541 4 l 698 265 b 775 22 744 202 775 112 b 700 -215 775 -60 752 -144 b 696 -226 697 -219 696 -222 b 704 -243 696 -232 700 -239 b 717 -246 708 -246 713 -246 b 733 -239 723 -246 729 -243 b 814 20 789 -160 814 -69 b 711 312 814 132 773 242 b 696 320 707 317 700 320 b 680 310 691 320 684 318 b 595 168 671 297 602 181 l 488 348 b 471 359 484 354 478 359 b 454 348 464 359 456 353 b 347 168 449 343 357 186 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 312, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 22 256 b 0 225 7 256 0 240 b 22 193 0 209 7 193 l 193 193 l 193 22 b 225 0 193 7 209 0 b 256 22 240 0 256 7 l 256 193 l 428 193 b 449 225 442 193 449 209 b 428 256 449 240 442 256 l 256 256 l 256 428 b 225 449 256 442 240 449 b 193 428 209 449 193 442 l 193 256 z', - }, - brassMuteOpen: { - x_min: 0, - x_max: 280, - y_min: 0, - y_max: 280, - ha: 280, - o: 'm 202 403 b 0 202 91 403 0 312 b 202 0 0 91 91 0 b 403 202 312 0 403 91 b 202 403 403 312 312 403 z m 202 40 b 40 202 112 40 40 112 b 202 363 40 291 112 363 b 363 202 291 363 363 291 b 202 40 363 112 291 40 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 315, - y_min: 0, - y_max: 293, - ha: 293, - o: 'm 40 0 l 40 291 l 413 291 l 413 0 l 454 0 l 454 402 b 433 422 454 413 445 422 l 20 422 b 0 402 9 422 0 402 l 0 0 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 343, - ha: 343, - o: 'm 374 485 b 357 494 372 490 363 494 l 337 494 b 318 481 330 494 321 488 l 189 118 l 59 481 b 40 494 56 488 48 494 l 20 494 b 0 474 9 494 0 485 b 1 467 0 472 1 468 l 170 13 b 189 0 173 6 181 0 b 207 13 196 0 204 6 l 376 467 b 377 474 376 468 377 472 b 374 485 377 477 376 482 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 181, - y_min: 0, - y_max: 181, - ha: 181, - o: 'm 131 220 b 220 131 181 220 220 181 b 131 40 220 81 181 40 b 40 131 81 40 40 81 b 131 220 40 181 81 220 z m 131 261 b 0 131 59 261 0 203 b 131 0 0 59 59 0 b 261 131 203 0 261 59 b 131 261 261 203 203 261 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 540 b 194 560 213 552 204 560 b 174 540 183 560 174 552 l 174 386 b 0 193 76 376 0 294 b 194 0 0 86 86 0 b 387 193 301 0 387 86 b 213 386 387 294 311 376 z m 194 40 b 40 193 109 40 40 109 b 174 346 40 271 98 336 l 174 193 b 194 173 174 183 183 173 b 213 193 204 173 213 183 l 213 346 b 347 193 289 336 347 271 b 194 40 347 109 278 40 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 269, - y_min: 0, - y_max: 389, - ha: 389, - o: 'm 213 174 b 387 367 311 184 387 266 b 193 560 387 474 301 560 b 0 367 86 560 0 474 b 174 174 0 266 76 184 l 174 20 b 194 0 174 9 183 0 b 213 20 204 0 213 9 z m 194 520 b 347 367 278 520 347 452 b 213 215 347 289 289 225 l 213 367 b 194 387 213 377 204 387 b 174 367 183 387 174 377 l 174 215 b 40 367 98 225 40 289 b 194 520 40 452 109 520 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 981, - y_min: -10, - y_max: 545, - ha: 555, - o: 'm 1354 12 b 1413 78 1385 12 1413 42 b 1354 145 1413 115 1385 145 b 1293 78 1320 145 1293 115 b 1354 12 1293 42 1320 12 z m 1092 88 b 1080 86 1089 86 1084 86 b 1004 203 1037 86 1004 137 b 1107 376 1004 360 1097 374 b 1149 209 1129 336 1149 287 b 1092 88 1149 117 1130 95 z m 752 393 b 795 344 779 393 795 372 b 770 285 795 325 788 304 b 693 203 737 249 697 207 b 688 264 690 225 688 245 b 752 393 688 347 714 393 z m 245 507 b 220 544 245 533 235 544 b 217 544 219 544 219 544 b 186 510 206 546 192 537 b 143 464 179 478 163 464 b 134 465 140 464 137 464 b 102 516 117 467 102 487 b 141 613 102 541 112 576 b 347 721 212 711 315 721 b 356 721 351 721 354 721 b 275 560 344 701 297 616 b 259 495 274 557 259 528 b 272 452 259 480 264 465 b 373 323 297 416 350 354 b 387 284 382 311 387 298 b 350 222 387 265 376 245 b 230 140 301 180 252 154 b 128 39 215 130 128 92 b 134 12 128 30 130 22 b 173 -14 144 -7 157 -14 b 264 40 204 -14 243 17 b 333 98 281 58 302 98 b 389 39 357 98 373 60 b 478 -10 416 1 435 -10 b 622 96 527 -10 559 43 b 740 -10 626 86 667 -10 b 929 95 827 -10 917 85 b 1086 -12 950 37 1018 -12 b 1120 -7 1097 -12 1109 -10 b 1264 213 1212 17 1264 111 b 1263 248 1264 225 1263 236 b 815 664 1228 544 907 647 b 785 668 805 665 795 668 b 779 668 783 668 782 668 b 757 654 769 668 760 665 b 757 649 757 652 757 651 b 786 618 759 629 783 619 b 818 606 796 613 808 611 b 1071 435 1007 534 1066 445 b 909 181 930 386 909 256 b 910 141 909 164 909 151 b 786 78 899 127 844 78 b 708 151 726 78 710 144 b 799 230 711 154 742 181 b 864 350 845 271 864 312 b 757 456 864 410 815 456 b 599 222 644 456 599 328 b 609 141 599 192 602 164 b 563 104 608 140 595 122 b 540 98 556 99 549 98 b 459 140 513 98 480 118 b 397 184 413 189 399 184 b 475 279 403 189 454 226 b 482 311 480 289 482 300 b 449 410 482 359 452 405 b 361 533 442 419 383 503 b 354 560 356 541 354 550 b 386 651 353 588 372 622 b 429 713 405 693 426 710 b 557 592 521 688 557 628 b 549 569 557 582 554 573 b 523 559 540 562 531 559 b 459 592 495 559 469 583 b 425 613 451 600 438 613 b 409 608 419 613 415 612 b 399 586 402 602 399 595 b 399 583 397 585 399 585 b 409 552 399 573 405 562 b 541 458 441 487 492 458 b 608 480 564 458 588 465 b 648 572 632 497 648 531 b 429 778 648 649 589 749 b 351 785 402 782 376 785 b 0 507 130 785 0 615 b 127 366 0 399 68 366 b 245 507 186 366 245 429 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 473, - y_min: 0, - y_max: 473, - ha: 473, - o: 'm 99 99 b 164 69 120 79 143 69 b 199 82 177 69 190 73 b 210 114 206 89 210 102 b 206 137 210 122 209 130 b 200 160 203 145 200 154 b 210 179 200 166 203 171 l 245 215 b 285 213 255 225 272 219 l 287 213 l 288 212 b 318 183 301 206 318 196 l 318 134 b 291 102 318 112 308 112 b 258 58 274 92 258 76 b 340 0 258 26 294 0 b 423 58 386 0 423 26 b 390 102 423 76 408 92 b 361 134 373 112 361 112 l 361 183 b 392 212 361 196 379 206 b 395 213 393 212 393 213 b 436 215 408 219 426 225 l 471 179 b 480 161 478 171 480 167 b 474 137 480 154 477 147 b 471 115 472 130 471 122 b 482 82 471 102 474 91 b 517 69 491 73 504 69 b 582 99 539 69 562 79 b 612 164 602 120 612 143 b 599 199 612 177 608 190 b 567 210 592 206 579 210 b 544 206 559 210 552 209 b 521 200 536 203 528 200 b 501 210 514 200 508 203 l 467 245 b 468 285 456 255 462 272 l 468 287 b 469 288 468 287 469 287 b 498 318 475 301 485 318 l 547 318 b 579 291 569 318 569 308 b 624 258 589 274 605 258 b 681 340 655 258 681 294 b 624 423 681 386 655 423 b 579 390 605 423 589 408 b 547 361 569 373 569 361 l 498 361 b 469 392 485 361 475 379 b 468 395 469 393 468 393 b 467 436 462 408 456 426 l 501 471 b 520 480 508 478 514 480 b 544 474 527 480 534 477 b 566 471 552 472 559 471 b 599 482 579 471 590 474 b 612 516 608 491 612 503 b 582 580 612 536 602 560 b 516 612 562 600 537 612 b 482 599 503 612 491 608 b 471 566 474 590 471 579 b 474 544 471 559 472 552 b 480 520 477 534 480 527 b 471 501 480 514 478 508 l 436 467 b 395 468 426 456 408 462 b 392 469 393 468 393 469 b 361 498 379 475 361 485 l 361 547 b 390 579 361 569 373 569 b 423 624 408 589 423 605 b 340 681 423 655 386 681 b 258 624 294 681 258 655 b 291 579 258 605 274 589 b 318 547 308 569 318 569 l 318 498 b 288 469 318 485 301 475 l 287 468 l 285 468 b 245 467 272 462 255 456 l 210 501 b 200 521 203 508 200 514 b 206 544 200 528 203 536 b 210 567 209 552 210 559 b 199 599 210 579 206 592 b 164 612 190 608 177 612 b 99 582 143 612 120 602 b 69 517 79 562 69 539 b 82 482 69 504 73 491 b 115 471 91 474 102 471 b 137 474 122 471 130 472 b 161 480 147 477 154 480 b 180 471 167 480 173 478 l 215 436 b 213 395 225 426 219 408 b 212 392 213 393 212 393 b 183 361 206 379 196 361 l 134 361 b 102 390 112 361 112 373 b 58 423 92 408 76 423 b 0 340 26 423 0 386 b 58 258 0 294 26 258 b 102 291 76 258 92 274 b 134 318 112 308 112 318 l 183 318 b 212 288 196 318 206 301 b 213 287 212 287 213 288 l 213 285 b 215 245 219 272 225 255 l 179 210 b 160 200 171 203 166 200 b 137 206 154 200 145 203 b 114 210 130 209 122 210 b 82 199 102 210 89 206 b 69 164 73 190 69 177 b 99 99 69 143 79 120 z m 276 276 b 249 340 262 291 249 320 b 340 432 249 390 289 432 b 432 340 390 432 432 390 b 405 276 432 320 419 291 b 340 249 390 262 360 249 b 276 276 320 249 291 262 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 242, - y_min: 0, - y_max: 164, - ha: 164, - o: 'm 343 122 b 323 143 343 122 334 132 b 308 148 318 147 312 148 b 298 144 304 148 301 147 b 282 128 295 141 291 137 b 274 124 279 125 276 124 b 265 128 268 124 265 128 b 158 220 265 128 173 207 b 112 236 143 232 127 236 b 43 206 82 236 55 219 l -26 137 b -32 125 -30 132 -32 130 b -26 112 -32 118 -26 112 b -6 92 -26 112 -17 102 b 7 86 -1 88 3 86 b 17 91 12 86 14 88 b 33 107 20 94 24 98 b 42 111 36 109 39 111 b 52 107 48 111 52 107 b 158 16 52 107 144 29 b 204 0 174 4 190 0 b 274 30 235 0 262 17 l 343 99 b 348 111 347 104 348 108 b 343 122 348 118 343 122 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 693 -181 b 602 -91 693 -131 651 -91 b 511 -181 552 -91 511 -131 b 602 -272 511 -232 552 -272 b 693 -181 651 -272 693 -232 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 735, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 1058 -181 b 968 -91 1058 -131 1017 -91 b 877 -181 917 -91 877 -131 b 968 -272 877 -232 917 -272 b 1058 -181 1017 -272 1058 -232 z m 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1243, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 183 180 b 92 271 183 230 141 271 b 1 180 42 271 1 230 b 92 89 1 130 42 89 b 183 180 141 89 183 130 z m 693 360 l 511 360 l 0 -360 l 181 -360 z m 1058 360 l 877 360 l 366 -360 l 547 -360 z m 1424 360 l 1243 360 l 732 -360 l 913 -360 z m 1790 360 l 1608 360 l 1097 -360 l 1279 -360 z m 1790 -181 b 1699 -91 1790 -131 1748 -91 b 1608 -181 1649 -91 1608 -131 b 1699 -272 1608 -232 1649 -272 b 1790 -181 1748 -272 1790 -232 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 481, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 693 360 l 511 360 l 0 -360 l 181 -360 z', - }, - csymDiminished: { - x_min: 0, - x_max: 501, - y_min: 0, - y_max: 501, - ha: 501, - o: 'm 361 721 b 0 361 161 721 0 560 b 361 0 0 161 161 0 b 721 361 560 0 721 161 b 361 721 721 560 560 721 z m 557 164 b 361 82 505 111 435 82 b 164 164 287 82 216 111 b 82 361 111 216 82 287 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 557 557 436 639 505 611 b 639 361 611 505 639 436 b 557 164 639 287 609 216 z', - }, - csymHalfDiminished: { - x_min: -1, - x_max: 502, - y_min: -1, - y_max: 502, - ha: 503, - o: 'm 723 684 l 684 723 l 596 634 b 361 721 533 688 451 721 b 0 361 161 721 0 560 b 88 125 0 271 33 189 l -1 36 l 36 -1 l 125 88 b 361 0 189 33 271 0 b 721 361 560 0 721 161 b 634 596 721 451 688 533 z m 82 361 b 164 557 82 436 111 505 b 361 639 216 611 287 639 b 537 576 426 639 488 616 l 145 184 b 82 361 105 233 82 295 z m 639 361 b 557 164 639 287 609 216 b 361 82 505 111 435 82 b 184 145 295 82 233 105 l 576 537 b 639 361 616 488 639 426 z', - }, - csymAugmented: { - x_min: 1, - x_max: 321, - y_min: 90, - y_max: 410, - ha: 320, - o: 'm 462 400 l 272 400 l 272 590 l 192 590 l 192 400 l 1 400 l 1 320 l 192 320 l 192 130 l 272 130 l 272 320 l 462 320 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 500, - y_min: 10, - y_max: 490, - ha: 480, - o: 'm 360 528 l 585 96 l 135 96 z m 360 706 l 0 14 l 720 14 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 160, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 416, - y_min: -176, - y_max: 452, - ha: 628, - o: 'm 462 217 b 330 174 374 217 338 181 l 334 632 b 315 651 334 642 325 651 l 302 651 b 284 632 292 651 284 642 l 289 -235 b 308 -253 289 -245 298 -253 b 320 -249 312 -253 317 -251 b 492 -138 320 -249 433 -194 b 599 84 534 -98 599 -26 b 462 217 599 173 534 217 z m 501 58 b 459 -72 501 36 498 -19 b 327 -179 431 -111 359 -164 l 330 85 l 330 91 b 422 154 330 125 359 154 b 501 58 503 154 501 79 z m 0 84 b 101 -153 0 -26 65 -107 b 196 -249 153 -217 196 -249 b 206 -253 199 -251 202 -253 b 225 -235 216 -253 225 -245 l 230 632 b 212 651 230 642 222 651 l 199 651 b 180 632 189 651 180 642 l 184 204 b 125 217 184 204 171 217 b 0 84 53 217 0 173 z m 145 154 b 184 107 181 154 184 120 l 187 -179 b 114 -72 167 -158 132 -112 b 82 58 86 -13 82 36 b 145 154 82 79 82 154 z', - }, - }, - fontFamily: 'Leland', - resolution: 1000, - generatedOn: '2022-12-19T23:52:37.756Z', -}; diff --git a/build/esm/src/fonts/leland_metrics.js b/build/esm/src/fonts/leland_metrics.js deleted file mode 100644 index 16e92c2047..0000000000 --- a/build/esm/src/fonts/leland_metrics.js +++ /dev/null @@ -1,520 +0,0 @@ -export const LelandMetrics = { - name: 'Leland', - smufl: true, - stave: { - padding: 12, - endPaddingMax: 10, - endPaddingMin: 5, - unalignedNotePadding: 10, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -250, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['A', 'L'], - spacing: 100, - superSubRatio: 0.66, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: 0, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: -20, - advanceWidth: 184, - yOffset: 250, - }, - csymParensRightTall: { - leftSideBearing: 0, - advanceWidth: 189, - yOffset: 250, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 50, - advanceWidth: 121, - yOffset: 350, - }, - csymParensRightVeryTall: { - leftSideBearing: 0, - advanceWidth: 111, - yOffset: 350, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 200, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 20, - advanceWidth: 250, - yOffset: -302, - }, - accidentalFlat: { - leftSideBearing: -20, - advanceWidth: 226, - yOffset: -184, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 20, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 22, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 28, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 2, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 3, - yOffset: -7, - stemUpYOffset: 25, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 7, - reportedWidth: 10, - }, - brassJazzTurn: { - xOffset: 0, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 31, - }, - brassSmear: { - xOffset: 10, - yOffset: 0, - stemUpYOffset: 8, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - digits: { - shiftLine: -1, - point: 34, - tupletPoint: 22, - shiftY: -6, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 11, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 7, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - }, - stem: { - heightAdjustmentForFlag: -3, - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemUp: -2.55, - offsetYBaseStemDown: 2.65, - }, - noteheadBlack: { - offsetYBaseStemUp: -2, - offsetYBaseStemDown: 2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 15, - }, - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.75, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -8, - shiftY: 8, - }, - ornamentTurn: { - point: 42, - }, - ornamentTurnSlash: { - point: 42, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - restQuarterStemUp: { - point: 35, - }, - restQuarterStemDown: { - point: 35, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.9, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.8, - }, - csymMajorSeventh: { - scale: 0.9, - }, - accidentalSharp: { - scale: 0.75, - }, - accidentalFlat: { - scale: 0.9, - }, - }, - }, -}; diff --git a/build/esm/src/fonts/load_all.js b/build/esm/src/fonts/load_all.js deleted file mode 100644 index 09b7cde58a..0000000000 --- a/build/esm/src/fonts/load_all.js +++ /dev/null @@ -1,12 +0,0 @@ -import { loadBravura } from './load_bravura.js'; -import { loadCustom } from './load_custom.js'; -import { loadGonville } from './load_gonville.js'; -import { loadLeland } from './load_leland.js'; -import { loadPetaluma } from './load_petaluma.js'; -export function loadAllMusicFonts() { - loadBravura(); - loadGonville(); - loadPetaluma(); - loadCustom(); - loadLeland(); -} diff --git a/build/esm/src/fonts/load_bravura.js b/build/esm/src/fonts/load_bravura.js deleted file mode 100644 index db708aa73b..0000000000 --- a/build/esm/src/fonts/load_bravura.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Font } from '../font.js'; -import { BravuraFont } from './bravura_glyphs.js'; -import { BravuraMetrics } from './bravura_metrics.js'; -export function loadBravura() { - Font.load('Bravura', BravuraFont, BravuraMetrics); -} diff --git a/build/esm/src/fonts/load_custom.js b/build/esm/src/fonts/load_custom.js deleted file mode 100644 index 0a1bb4f9df..0000000000 --- a/build/esm/src/fonts/load_custom.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Font } from '../font.js'; -import { CustomFont } from './custom_glyphs.js'; -import { CustomMetrics } from './custom_metrics.js'; -export function loadCustom() { - Font.load('Custom', CustomFont, CustomMetrics); -} diff --git a/build/esm/src/fonts/load_gonville.js b/build/esm/src/fonts/load_gonville.js deleted file mode 100644 index 11f20dfd44..0000000000 --- a/build/esm/src/fonts/load_gonville.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Font } from '../font.js'; -import { GonvilleSmuflFont } from './gonville_glyphs.js'; -import { GonvilleMetrics } from './gonville_metrics.js'; -export function loadGonville() { - Font.load('Gonville', GonvilleSmuflFont, GonvilleMetrics); -} diff --git a/build/esm/src/fonts/load_leland.js b/build/esm/src/fonts/load_leland.js deleted file mode 100644 index 22658eaf3f..0000000000 --- a/build/esm/src/fonts/load_leland.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Font } from '../font.js'; -import { LelandFont } from './leland_glyphs.js'; -import { LelandMetrics } from './leland_metrics.js'; -export function loadLeland() { - Font.load('Leland', LelandFont, LelandMetrics); -} diff --git a/build/esm/src/fonts/load_petaluma.js b/build/esm/src/fonts/load_petaluma.js deleted file mode 100644 index c3d416ba25..0000000000 --- a/build/esm/src/fonts/load_petaluma.js +++ /dev/null @@ -1,6 +0,0 @@ -import { Font } from '../font.js'; -import { PetalumaFont } from './petaluma_glyphs.js'; -import { PetalumaMetrics } from './petaluma_metrics.js'; -export function loadPetaluma() { - Font.load('Petaluma', PetalumaFont, PetalumaMetrics); -} diff --git a/build/esm/src/fonts/petaluma_glyphs.js b/build/esm/src/fonts/petaluma_glyphs.js deleted file mode 100644 index 95c349e095..0000000000 --- a/build/esm/src/fonts/petaluma_glyphs.js +++ /dev/null @@ -1,1631 +0,0 @@ -export const PetalumaFont = { - glyphs: { - bracketTop: { - x_min: 0, - x_max: 508, - y_min: 0, - y_max: 370, - ha: 370, - o: 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z', - }, - bracketBottom: { - x_min: 0, - x_max: 496, - y_min: -393, - y_max: 0, - ha: 393, - o: 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z', - }, - barlineTick: { - x_min: 0, - x_max: 56, - y_min: 877, - y_max: 1122, - ha: 245, - o: 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z', - }, - breathMarkTick: { - x_min: 0, - x_max: 568, - y_min: 0, - y_max: 621, - ha: 621, - o: 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z', - }, - segno: { - x_min: 0, - x_max: 798, - y_min: -65, - y_max: 806, - ha: 871, - o: 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 z', - }, - coda: { - x_min: 0, - x_max: 1380, - y_min: -196, - y_max: 1037, - ha: 1233, - o: 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z', - }, - gClef: { - x_min: 0, - x_max: 664, - y_min: -559, - y_max: 1009, - ha: 1568, - o: 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 l 569 -131 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z', - }, - cClef: { - x_min: 0, - x_max: 731, - y_min: -543, - y_max: 543, - ha: 1086, - o: 'm 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z m 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z', - }, - fClef: { - x_min: 0, - x_max: 776, - y_min: -496, - y_max: 216, - ha: 712, - o: 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 l 213 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 z', - }, - unpitchedPercussionClef1: { - x_min: 0, - x_max: 379, - y_min: -250, - y_max: 250, - ha: 500, - o: 'm 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z m 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z', - }, - '6stringTabClef': { - x_min: 0, - x_max: 438, - y_min: -768, - y_max: 767, - ha: 1535, - o: 'm 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 l 272 965 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z m 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 l 282 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z', - }, - timeSig0: { - x_min: 20, - x_max: 513, - y_min: -358, - y_max: 359, - ha: 717, - o: 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z', - }, - timeSig1: { - x_min: 20, - x_max: 283, - y_min: -364, - y_max: 366, - ha: 730, - o: 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z', - }, - timeSig2: { - x_min: 20, - x_max: 660, - y_min: -379, - y_max: 382, - ha: 761, - o: 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z', - }, - timeSig3: { - x_min: 20, - x_max: 540, - y_min: -392, - y_max: 392, - ha: 784, - o: 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z', - }, - timeSig4: { - x_min: 20, - x_max: 633, - y_min: -490, - y_max: 491, - ha: 981, - o: 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z', - }, - timeSig5: { - x_min: 20, - x_max: 583, - y_min: -389, - y_max: 389, - ha: 778, - o: 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z', - }, - timeSig6: { - x_min: 20, - x_max: 565, - y_min: -363, - y_max: 363, - ha: 726, - o: 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z', - }, - timeSig7: { - x_min: 20, - x_max: 592, - y_min: -345, - y_max: 345, - ha: 690, - o: 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z', - }, - timeSig8: { - x_min: 20, - x_max: 504, - y_min: -428, - y_max: 428, - ha: 856, - o: 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 l 530 327 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z', - }, - timeSig9: { - x_min: 20, - x_max: 494, - y_min: -421, - y_max: 421, - ha: 842, - o: 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z', - }, - timeSigCommon: { - x_min: 20, - x_max: 585, - y_min: -298, - y_max: 294, - ha: 592, - o: 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z', - }, - timeSigCutCommon: { - x_min: 20, - x_max: 695, - y_min: -687, - y_max: 687, - ha: 1374, - o: 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 l 539 -422 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z', - }, - timeSigPlus: { - x_min: 0, - x_max: 661, - y_min: -358, - y_max: 358, - ha: 716, - o: 'm 605 -516 b 629 -490 624 -516 629 -507 b 628 -475 629 -485 628 -481 b 613 -131 624 -405 616 -174 b 612 -96 612 -114 612 -96 l 647 -98 b 897 -115 730 -99 814 -109 b 940 -89 919 -117 935 -109 b 952 -24 946 -69 952 -46 b 948 9 952 -14 950 -3 b 912 39 942 26 933 37 b 609 60 822 48 609 60 b 616 392 609 60 608 291 b 567 488 619 436 605 467 b 511 516 550 498 531 514 b 498 511 507 516 503 514 b 478 446 475 501 480 469 b 467 150 474 348 469 249 b 465 59 465 121 465 59 l 372 49 b 73 14 272 36 173 24 b 49 13 65 13 56 13 b 0 -33 9 13 0 6 b 60 -141 0 -117 6 -140 b 112 -135 73 -141 91 -140 b 413 -102 213 -125 314 -112 b 464 -98 441 -99 464 -98 l 464 -145 b 477 -456 464 -249 468 -353 b 526 -510 478 -488 491 -507 b 589 -513 546 -511 569 -510 b 605 -516 595 -514 600 -516 z', - }, - timeSigPlusSmall: { - x_min: 0, - x_max: 418, - y_min: -197, - y_max: 199, - ha: 396, - o: 'm 301 -284 b 330 -238 320 -284 324 -255 b 348 -46 350 -176 341 -111 b 374 -20 351 -27 356 -23 b 481 -17 409 -16 445 -17 b 566 -9 510 -17 537 -16 b 602 3 579 -7 602 -16 b 566 29 602 19 582 24 b 526 33 553 32 539 33 b 384 39 478 36 432 39 b 356 62 363 39 356 42 l 356 68 b 359 177 359 104 359 141 l 359 251 b 341 287 359 264 361 285 b 311 255 324 287 314 272 b 310 228 311 246 310 236 l 301 69 b 275 39 301 49 295 39 l 271 39 b 210 40 251 40 230 40 b 167 39 196 40 181 40 b 89 40 141 37 115 40 b 24 30 68 40 46 37 b 0 17 17 27 0 30 l 0 13 b 27 -17 3 0 7 -13 b 91 -22 49 -22 71 -22 b 153 -22 115 -22 137 -20 l 275 -22 b 295 -40 289 -22 295 -27 l 295 -48 b 288 -235 288 -109 287 -171 b 287 -264 288 -243 287 -253 b 301 -284 287 -275 289 -284 z', - }, - timeSigMinus: { - x_min: 0, - x_max: 662, - y_min: -54, - y_max: 55, - ha: 109, - o: 'm 39 -78 b 49 -76 42 -78 45 -76 b 452 -75 94 -75 272 -75 b 861 -76 632 -75 814 -76 b 953 -20 927 -79 953 -66 b 948 27 953 -7 950 9 b 946 37 948 30 948 35 b 896 79 940 63 929 79 b 471 78 827 78 648 78 l 42 78 b 0 37 14 78 0 69 b 23 -66 0 0 17 -32 b 39 -78 24 -75 32 -76 z', - }, - timeSigParensRight: { - x_min: 0, - x_max: 274, - y_min: -723, - y_max: 725, - ha: 1448, - o: 'm 37 -1038 b 69 -1031 48 -1044 59 -1038 b 88 -1015 76 -1027 82 -1021 b 164 -886 120 -976 147 -933 b 333 -351 233 -711 292 -534 b 395 118 366 -204 399 -59 b 389 245 392 144 392 194 b 120 996 369 521 265 766 b 68 1044 99 1030 84 1044 b 19 988 50 1044 36 1024 b 0 922 7 965 0 945 b 20 858 0 901 6 881 b 259 215 141 660 236 449 b 271 -1 266 143 271 71 b 252 -239 271 -82 265 -161 b 148 -667 228 -384 183 -524 b 39 -1009 120 -785 66 -893 b 33 -1031 37 -1017 33 -1024 b 37 -1038 33 -1034 35 -1037 z', - }, - timeSigParensRightSmall: { - x_min: 0, - x_max: 154, - y_min: -422, - y_max: 422, - ha: 844, - o: 'm 43 -608 b 60 -598 48 -608 53 -605 b 117 -511 82 -572 102 -543 b 222 23 193 -350 219 -177 b 213 166 225 55 216 109 b 115 531 206 294 174 416 b 45 603 99 562 76 588 b 30 608 39 606 35 608 b 10 598 23 608 17 603 b 0 546 3 590 0 570 b 23 451 0 507 9 458 b 102 351 66 429 84 390 b 167 42 150 252 167 148 b 163 -49 167 12 166 -19 b 35 -449 151 -192 121 -330 b 14 -504 22 -467 14 -485 b 17 -527 14 -511 16 -520 l 30 -590 b 43 -608 33 -603 37 -608 z', - }, - timeSigParensLeft: { - x_min: 1, - x_max: 400, - y_min: -728, - y_max: 728, - ha: 1456, - o: 'm 562 -1048 b 573 -1043 566 -1048 570 -1047 b 553 -988 582 -1025 564 -1004 b 472 -884 527 -952 497 -920 b 210 -354 366 -717 275 -541 b 148 -6 170 -240 148 -124 b 160 148 148 45 153 96 b 315 678 189 331 242 508 b 431 901 350 755 380 834 b 459 950 451 926 461 939 b 435 995 459 962 451 972 b 364 1048 405 1034 383 1048 b 305 996 343 1048 325 1028 b 127 624 226 881 174 753 b 1 30 56 432 9 235 b 1 -32 1 9 0 -12 b 180 -629 13 -245 92 -438 b 363 -936 230 -739 298 -835 b 526 -1041 402 -995 448 -1041 b 562 -1048 537 -1040 552 -1048 z', - }, - timeSigParensLeftSmall: { - x_min: 0, - x_max: 173, - y_min: -405, - y_max: 404, - ha: 809, - o: 'm 197 -583 b 222 -553 212 -582 219 -566 b 229 -497 226 -534 229 -516 b 213 -425 229 -472 225 -448 b 102 -177 173 -344 132 -262 b 62 30 78 -111 58 -42 b 91 183 66 82 75 134 b 215 426 118 271 156 356 b 249 552 246 465 252 505 b 230 582 249 563 246 582 b 197 563 219 582 206 576 b 71 356 144 500 105 429 b 0 50 26 259 3 158 b 13 -112 4 -3 7 -58 b 176 -559 29 -275 105 -416 b 196 -583 180 -569 186 -583 z', - }, - noteheadDoubleWhole: { - x_min: 0, - x_max: 614, - y_min: -223, - y_max: 223, - ha: 446, - o: 'm 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z', - }, - noteheadWhole: { - x_min: 0, - x_max: 380, - y_min: -186, - y_max: 165, - ha: 351, - o: 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z', - }, - noteheadHalf: { - x_min: 0, - x_max: 334, - y_min: -174, - y_max: 175, - ha: 349, - o: 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z', - }, - noteheadBlack: { - x_min: 0, - x_max: 334, - y_min: -164, - y_max: 164, - ha: 328, - o: 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z', - }, - noteheadXDoubleWhole: { - x_min: 0, - x_max: 730, - y_min: -266, - y_max: 267, - ha: 533, - o: 'm 1018 -373 b 1032 -361 1025 -376 1028 -367 b 1051 -287 1047 -338 1051 -314 b 1050 -252 1051 -276 1051 -264 b 1030 186 1031 -107 1037 40 b 1031 266 1028 213 1031 239 b 1018 363 1031 300 1028 331 b 1005 384 1015 373 1017 384 l 1004 384 b 984 363 992 384 986 373 b 982 343 982 356 982 348 b 981 235 982 307 981 271 b 996 -285 981 60 986 -112 b 1009 -360 998 -311 1005 -336 b 1018 -373 1011 -364 1014 -373 z m 16 -383 b 49 -328 39 -367 48 -350 b 69 56 58 -202 62 -73 b 75 212 72 107 72 160 b 78 278 76 233 78 255 b 59 382 78 312 73 347 b 29 328 33 372 29 350 b 13 -29 29 209 23 88 b 3 -222 7 -95 10 -157 b 0 -265 1 -236 0 -252 b 16 -383 0 -304 6 -343 z m 923 -314 b 955 -240 948 -289 952 -265 b 965 -65 962 -181 965 -125 b 963 0 965 -45 965 -22 b 962 111 960 37 962 73 b 953 240 962 154 960 197 b 939 275 952 253 952 275 b 913 239 924 274 913 258 b 913 173 914 217 913 194 b 914 135 913 160 913 147 b 920 27 919 98 920 63 b 909 -128 920 -26 917 -78 b 906 -179 906 -147 906 -163 b 923 -314 906 -223 913 -266 z m 121 -301 b 143 -272 134 -301 138 -284 b 147 -255 145 -268 145 -261 b 173 160 161 -117 166 22 b 173 233 173 184 174 209 b 157 264 171 243 171 264 b 137 235 143 264 138 249 b 132 207 135 226 132 216 b 121 43 128 153 124 96 b 105 -186 117 -36 105 -111 b 111 -269 105 -215 107 -242 b 121 -301 114 -281 104 -300 z m 210 -238 b 376 -193 274 -239 327 -226 b 471 -134 406 -173 439 -154 b 534 -94 491 -120 513 -107 b 671 -192 579 -127 624 -161 b 733 -226 691 -204 708 -228 b 746 -225 737 -228 742 -226 b 845 -204 782 -226 814 -213 b 868 -194 854 -203 865 -203 b 852 -173 871 -183 860 -179 b 661 -40 789 -128 724 -84 b 642 -27 654 -36 648 -32 b 861 114 716 17 791 63 b 886 132 870 120 886 121 l 886 137 b 852 164 883 151 867 161 b 776 176 827 170 801 176 b 685 145 744 176 714 168 b 530 45 638 107 583 76 b 403 132 487 73 444 101 b 279 176 364 161 324 171 b 223 160 259 176 229 176 b 258 115 215 141 242 127 b 431 -17 314 71 372 26 b 173 -196 341 -73 253 -130 b 157 -209 168 -200 157 -203 b 158 -215 157 -212 157 -215 b 183 -236 166 -223 168 -235 b 210 -238 194 -236 206 -239 z m 768 -207 b 533 -40 687 -150 609 -94 b 321 -173 462 -85 392 -130 b 261 -194 304 -184 287 -196 b 239 -193 253 -196 246 -194 b 387 -95 294 -157 340 -125 b 505 -20 426 -71 465 -45 l 484 -4 b 353 89 441 27 396 56 b 320 115 341 96 330 107 b 297 141 311 124 297 132 b 300 148 297 144 298 145 b 336 135 311 164 324 143 b 528 -4 400 89 464 42 l 723 121 b 770 140 737 131 753 138 b 792 132 779 140 789 141 b 778 115 795 122 783 120 b 586 -6 714 75 651 35 b 557 -24 576 -13 567 -19 b 726 -147 613 -66 670 -109 b 768 -207 744 -161 765 -173 z', - }, - noteheadXWhole: { - x_min: 0, - x_max: 506, - y_min: -143, - y_max: 144, - ha: 287, - o: 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 l 485 4 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 l 164 -143 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 l 196 121 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 l 372 27 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z', - }, - noteheadXHalf: { - x_min: 0, - x_max: 421, - y_min: -146, - y_max: 151, - ha: 297, - o: 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 l 406 -19 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 l 213 -202 b 262 -180 228 -202 246 -199 l 314 -122 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 l 124 117 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z', - }, - noteheadXBlack: { - x_min: 0, - x_max: 289, - y_min: -156, - y_max: 157, - ha: 313, - o: 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 l 408 -210 b 416 -192 416 -207 416 -199 l 416 -186 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z', - }, - noteheadCircleXDoubleWhole: { - x_min: 0, - x_max: 437, - y_min: -220, - y_max: 219, - ha: 439, - o: 'm 10 -304 b 40 -206 43 -275 37 -239 b 55 168 48 -81 50 45 b 53 269 56 202 55 236 b 33 315 52 287 46 314 b 3 269 9 317 4 291 b 0 239 1 259 0 249 l 0 -196 b 10 -304 1 -232 7 -268 z m 592 -317 b 621 -220 619 -287 621 -253 b 622 -121 622 -187 622 -154 b 625 -20 622 -88 622 -55 b 629 101 628 20 629 60 b 628 220 629 141 628 181 b 618 253 628 232 625 243 b 608 275 613 259 616 274 b 602 272 606 275 603 275 b 575 249 590 269 575 266 l 575 246 b 573 222 575 239 573 230 l 573 -50 b 592 -317 575 -137 570 -225 z m 79 -285 b 114 -6 96 -261 109 -131 b 117 -63 114 -24 114 -45 b 249 -242 124 -151 166 -212 b 324 -256 275 -252 300 -256 b 504 -137 406 -256 478 -209 b 505 -265 504 -180 505 -222 b 513 -282 505 -269 510 -275 b 533 -248 526 -272 528 -261 b 540 -174 539 -223 540 -199 l 540 -127 b 553 207 546 -16 549 95 b 543 232 553 216 554 232 b 518 207 530 233 518 222 b 511 118 520 177 510 148 l 511 92 b 330 216 488 174 420 223 b 301 215 320 216 311 216 b 122 65 202 204 151 163 b 114 9 117 46 114 27 b 115 75 114 32 115 53 b 101 248 115 157 109 228 b 76 206 78 242 76 225 l 76 91 b 75 -26 76 52 76 13 b 69 -189 72 -81 66 -134 b 79 -285 71 -219 76 -249 z m 317 4 b 219 109 285 40 252 75 l 209 120 b 331 153 248 141 289 151 b 420 137 360 153 390 147 b 446 120 435 131 442 127 l 436 108 l 328 -7 z m 215 -131 b 216 -101 215 -122 215 -114 b 219 -45 217 -82 219 -63 b 197 94 219 3 213 49 l 197 95 b 199 94 199 95 199 94 l 310 -27 b 233 -108 285 -55 259 -81 z m 442 -141 b 432 -122 441 -134 436 -128 l 344 -26 l 426 58 l 445 81 b 444 75 445 78 444 76 b 428 -13 433 46 428 16 b 446 -104 428 -45 433 -75 b 452 -122 449 -111 452 -117 b 442 -141 452 -131 448 -137 z m 323 -190 b 272 -180 305 -187 288 -184 b 217 -158 239 -173 225 -168 l 327 -45 b 330 -48 328 -46 328 -48 b 432 -150 363 -82 393 -121 b 323 -190 400 -174 364 -189 z', - }, - noteheadCircleXWhole: { - x_min: 0, - x_max: 323, - y_min: -190, - y_max: 184, - ha: 374, - o: 'm 156 -258 b 240 -274 184 -268 213 -274 b 455 -101 347 -274 441 -202 b 465 19 462 -60 465 -22 b 464 71 465 36 465 52 b 246 265 455 194 370 274 b 216 264 236 265 226 264 b 12 94 102 251 45 203 b 0 13 3 66 1 40 b 4 -55 0 -10 3 -32 b 156 -258 14 -154 60 -222 z m 245 10 b 233 23 242 14 238 19 b 121 144 196 65 158 104 l 109 154 b 249 192 156 179 202 192 b 351 174 284 192 317 186 b 380 154 366 168 376 163 b 379 153 380 154 380 153 b 369 141 376 148 372 145 b 245 10 327 98 287 53 z m 115 -131 b 118 -96 117 -121 117 -111 b 121 -27 120 -73 121 -50 b 98 124 121 24 115 75 b 96 127 96 125 98 125 b 99 125 98 127 98 125 b 225 -12 140 79 181 33 l 138 -105 b 115 -131 131 -114 122 -121 z m 376 -143 b 363 -121 374 -134 369 -128 b 265 -12 331 -85 298 -48 l 357 85 b 379 111 364 94 372 101 b 377 102 379 108 377 105 b 359 4 364 71 359 37 b 382 -99 359 -32 366 -66 b 387 -121 384 -108 386 -115 b 376 -143 387 -130 382 -135 z m 239 -197 b 181 -187 220 -194 200 -192 b 121 -161 145 -177 128 -173 b 243 -33 161 -118 203 -75 l 248 -36 b 364 -153 285 -75 320 -118 b 239 -197 327 -180 287 -197 z', - }, - noteheadCircleXHalf: { - x_min: 0, - x_max: 309, - y_min: -179, - y_max: 179, - ha: 358, - o: 'm 232 -258 b 435 -94 328 -258 412 -196 b 445 6 444 -60 445 -27 b 444 69 445 27 445 48 b 258 258 439 170 374 258 l 230 258 l 207 256 b 14 107 111 248 45 202 b 0 12 4 75 0 43 b 12 -82 0 -20 4 -50 b 144 -242 27 -160 69 -212 b 232 -258 174 -252 203 -258 z m 192 60 b 115 141 166 88 141 115 l 108 150 b 226 189 141 173 186 189 b 253 186 236 189 245 187 b 305 180 271 183 288 183 b 192 60 268 140 229 101 z m 56 -78 b 45 6 43 -56 45 -23 b 65 84 49 39 50 45 b 85 121 72 96 78 107 b 95 124 88 124 92 127 b 171 39 120 95 145 68 z m 360 -132 b 348 -112 359 -124 353 -118 l 300 -58 l 387 37 b 410 63 397 48 405 56 b 413 26 412 52 413 40 b 360 -132 413 -42 393 -95 z m 232 -183 b 184 -177 217 -183 202 -181 l 281 -78 b 348 -143 301 -101 323 -122 b 232 -183 318 -168 279 -183 z', - }, - noteheadCircleX: { - x_min: 0, - x_max: 344, - y_min: -179, - y_max: 175, - ha: 354, - o: 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 245 42 l 124 156 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z', - }, - noteheadCircledDoubleWhole: { - x_min: 0, - x_max: 672, - y_min: -291, - y_max: 291, - ha: 582, - o: 'm 27 -419 b 43 -369 37 -403 43 -387 b 49 -82 45 -272 49 -177 b 50 370 50 69 50 219 b 30 419 50 389 50 419 b 7 369 7 419 7 389 b 0 -284 4 151 1 -66 b 16 -418 0 -328 10 -373 z m 945 -374 b 968 -282 963 -343 968 -312 b 966 -245 968 -269 968 -258 b 958 -45 959 -179 962 -111 b 948 262 949 56 952 160 b 936 377 946 301 946 340 b 922 399 933 386 933 399 l 919 397 b 897 374 909 396 899 389 b 894 308 897 353 893 331 b 904 120 899 246 903 183 b 913 -111 907 43 909 -35 b 927 -297 916 -173 919 -235 b 945 -374 930 -320 927 -347 z m 95 -347 b 120 -292 115 -325 117 -310 b 124 -223 122 -269 124 -246 b 122 -141 124 -196 122 -168 b 121 -85 121 -122 121 -104 b 462 -297 170 -209 300 -297 b 727 -219 543 -294 639 -271 b 828 -118 773 -190 808 -157 b 842 -268 831 -168 834 -219 b 851 -288 844 -275 840 -287 b 865 -272 861 -289 863 -279 b 873 -225 871 -256 873 -240 b 873 -171 873 -207 871 -190 b 858 196 868 -48 863 75 b 848 295 857 229 854 262 b 840 315 848 301 850 315 l 837 315 b 816 295 827 314 816 307 b 809 216 815 268 808 243 b 815 102 812 179 814 140 b 672 295 780 176 733 240 b 500 370 621 340 566 370 b 436 361 480 370 459 367 b 120 95 288 321 183 233 l 120 256 b 115 287 120 266 118 276 b 104 305 112 292 115 305 l 101 305 b 82 284 91 304 82 297 b 76 216 81 262 76 239 b 84 -253 78 59 79 -96 b 95 -347 84 -282 89 -311 z m 780 -33 b 779 -24 780 -30 779 -27 b 704 92 766 22 743 62 b 544 173 655 128 599 147 b 400 206 497 194 448 204 b 307 193 369 206 338 202 b 202 118 264 181 226 153 b 235 168 212 135 222 151 b 505 337 302 262 396 312 b 523 338 511 337 517 338 b 611 288 559 338 586 312 b 763 62 678 225 733 151 b 780 -33 776 26 782 -4 z m 435 -88 b 337 -23 387 -88 354 -65 b 333 6 334 -14 333 -6 b 366 86 333 35 344 66 b 456 122 390 111 423 121 b 602 27 517 122 582 88 b 606 1 605 19 606 10 b 575 -49 606 -20 596 -36 b 435 -88 530 -76 481 -82 z m 441 -269 b 194 -96 327 -262 249 -194 b 167 1 176 -62 167 -30 b 177 59 167 22 171 42 b 174 39 176 52 174 46 b 266 -104 174 -27 210 -73 b 511 -151 346 -148 435 -144 l 552 -151 b 740 -104 616 -145 683 -141 b 776 -66 756 -94 769 -81 b 700 -174 766 -105 740 -140 b 441 -269 632 -232 533 -268 z', - }, - noteheadCircledWhole: { - x_min: -50, - x_max: 472, - y_min: -231, - y_max: 232, - ha: 463, - o: 'm 289 -333 b 553 -255 370 -330 465 -307 b 680 -62 635 -206 680 -138 b 662 22 680 -36 674 -7 b 500 259 626 112 573 193 b 327 334 448 304 393 334 b 264 325 307 334 287 331 b -59 49 111 284 4 193 b -72 -19 -68 26 -72 4 b 289 -333 -72 -192 84 -334 z m 608 -69 b 605 -60 606 -66 606 -63 b 530 56 592 -14 570 26 b 372 137 482 92 425 111 b 228 170 324 158 275 168 b 134 157 196 170 166 166 b 29 82 91 145 53 117 b 60 132 37 99 49 115 b 333 301 128 226 223 276 b 350 302 338 301 344 302 b 438 252 386 302 413 276 b 590 26 505 189 560 115 b 608 -69 603 -10 608 -40 z m 262 -124 b 164 -59 215 -124 180 -101 b 160 -32 161 -50 160 -42 b 193 50 160 -3 171 30 b 284 86 217 75 251 85 b 429 -9 344 86 409 52 b 433 -36 432 -17 433 -26 b 402 -85 433 -56 423 -72 b 262 -124 357 -112 307 -118 z m 268 -305 b 22 -132 154 -298 76 -230 b -6 -33 3 -98 -6 -65 b 3 23 -6 -14 -3 6 b 1 3 1 16 1 10 b 94 -140 1 -63 37 -109 b 338 -187 173 -184 261 -180 l 379 -187 b 566 -140 444 -181 510 -177 b 602 -102 582 -130 595 -117 b 526 -210 592 -141 567 -176 b 268 -305 459 -268 360 -304 z', - }, - noteheadCircledHalf: { - x_min: -50, - x_max: 393, - y_min: -175, - y_max: 175, - ha: 350, - o: 'm 540 39 b 408 187 503 94 464 148 b 259 252 356 223 301 252 b 35 192 160 252 95 229 b -68 50 -17 160 -53 112 b -72 13 -71 37 -72 24 b 69 -204 -72 -79 -1 -161 b 246 -252 125 -238 186 -252 b 500 -164 336 -252 426 -219 b 566 -42 543 -132 566 -88 b 540 39 566 -14 557 14 z m 9 -42 b 12 -68 10 -50 10 -59 b -7 6 3 -46 -4 -22 b 131 189 1 98 55 153 b 243 220 167 206 204 215 b 261 222 249 222 255 222 b 377 161 308 222 341 189 b 435 89 402 141 420 117 b 431 92 433 89 432 91 b 346 120 402 102 372 107 b 253 143 314 135 282 143 b 85 79 193 143 138 115 b 9 -42 45 52 10 13 z m 356 39 b 343 1 356 24 351 12 b 206 -111 304 -46 259 -84 b 181 -118 196 -115 189 -118 b 156 -71 163 -118 154 -102 b 238 35 164 -22 199 9 b 324 66 264 52 294 59 b 356 39 348 71 356 62 z m 488 -78 b 392 -176 471 -125 433 -154 b 246 -225 346 -200 297 -217 b 230 -226 240 -226 235 -226 b 157 -204 203 -226 180 -215 b 78 -154 128 -190 101 -174 b 232 -184 128 -171 180 -184 b 344 -161 269 -184 307 -179 b 491 -39 405 -135 455 -94 b 500 -23 495 -33 497 -29 b 488 -78 500 -40 494 -59 z', - }, - noteheadCircledBlack: { - x_min: -70, - x_max: 326, - y_min: -168, - y_max: 192, - ha: 360, - o: 'm 176 -239 b 190 -242 180 -240 186 -240 b 262 -232 213 -242 238 -235 b 469 -19 384 -225 469 -131 b 467 22 469 -6 468 9 b 383 194 455 86 436 151 b 183 276 315 249 251 275 b 32 236 134 276 85 264 b -94 88 -30 207 -75 160 b -101 30 -98 69 -101 49 b 176 -239 -101 -107 9 -251 z m 177 -212 b -30 -27 81 -213 -13 -131 b -33 17 -33 -13 -33 3 b 127 226 -33 111 14 187 b 194 239 151 233 173 238 b 301 203 232 239 266 226 b 364 134 330 184 350 160 b 233 181 341 160 279 180 b 192 171 216 181 202 179 b 13 1 117 131 46 86 b 3 -48 6 -17 3 -33 b 60 -115 3 -79 20 -101 b 203 -135 105 -131 151 -138 b 229 -138 212 -137 220 -137 b 295 -122 251 -138 274 -135 b 400 -33 337 -99 373 -71 b 228 -206 393 -125 330 -192 b 177 -212 209 -209 192 -213 z', - }, - noteheadDoubleWholeSquare: { - x_min: 0, - x_max: 474, - y_min: -209, - y_max: 211, - ha: 420, - o: 'm 648 -301 b 668 -287 658 -304 665 -295 b 683 -209 678 -262 683 -235 b 677 258 681 -55 678 102 b 672 284 677 266 677 276 b 661 304 670 291 672 304 l 658 304 b 635 279 647 301 635 297 b 629 240 635 266 629 252 l 629 236 b 631 225 629 232 631 228 b 583 194 631 197 611 194 l 528 194 b 125 207 393 194 259 202 b 89 207 114 209 101 206 b 63 210 79 207 71 207 b 52 229 55 213 52 220 b 55 258 52 238 55 248 b 53 266 55 261 55 264 b 36 298 48 276 53 298 l 35 298 b 4 264 14 298 7 284 b 0 187 0 238 0 213 b 4 50 0 143 3 96 b 6 -10 6 30 6 10 b 4 -130 6 -50 4 -91 b 12 -268 4 -176 6 -222 b 19 -287 13 -275 10 -284 b 35 -275 26 -288 30 -281 b 52 -220 50 -261 48 -239 b 75 -199 55 -206 58 -199 l 141 -197 l 274 -197 l 634 -197 b 639 -281 635 -219 636 -251 b 648 -301 641 -288 638 -300 z m 72 -66 b 55 -56 59 -69 55 -65 l 55 -50 b 53 53 55 -16 55 20 b 69 73 53 69 60 72 l 79 72 b 330 65 163 66 246 63 l 592 65 b 634 81 606 65 618 71 b 635 -30 634 39 635 6 b 605 -58 635 -49 628 -58 b 451 -60 553 -60 503 -60 b 219 -59 373 -60 295 -59 l 166 -59 b 72 -66 134 -59 104 -60 z', - }, - noteheadSquareWhite: { - x_min: 0, - x_max: 350, - y_min: -131, - y_max: 131, - ha: 262, - o: 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 l 503 -135 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 l 246 -127 z', - }, - noteheadSquareBlack: { - x_min: 0, - x_max: 342, - y_min: -130, - y_max: 132, - ha: 262, - o: 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 l 1 156 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z', - }, - noteheadTriangleDownDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -294 b 734 -213 733 -271 734 -242 b 729 245 733 -60 730 92 b 719 285 729 259 724 272 b 707 298 716 291 714 298 l 703 298 b 685 284 696 297 687 292 b 683 253 683 274 683 264 b 691 -181 685 108 685 -36 b 707 -294 693 -217 690 -256 z m 108 -238 b 125 -203 125 -238 121 -216 b 127 -190 127 -199 127 -194 b 120 -138 127 -173 120 -156 l 120 -66 b 114 167 120 12 118 89 l 118 161 b 314 -153 184 58 248 -48 b 350 -184 327 -173 338 -184 b 387 -154 361 -184 374 -174 b 567 108 449 -68 508 20 b 626 193 588 137 608 164 b 615 -132 622 85 619 -24 l 615 -166 b 619 -207 615 -180 615 -194 b 638 -226 622 -217 629 -225 b 651 -209 648 -226 649 -216 b 658 -177 655 -199 658 -187 l 658 -171 b 667 49 655 -98 667 -23 b 665 88 667 62 667 75 b 665 220 665 135 667 179 b 641 265 664 238 660 265 b 626 243 629 265 626 255 b 628 222 626 236 628 228 b 612 225 624 223 619 225 b 384 223 537 223 461 223 l 384 225 l 170 225 b 131 215 157 225 144 222 b 112 200 122 210 117 206 b 88 266 111 225 108 249 b 75 239 76 259 75 249 b 73 147 75 207 73 179 b 82 -189 73 35 79 -78 b 84 -203 82 -194 82 -199 b 108 -238 86 -219 91 -238 z m 361 -79 b 295 78 336 -26 314 26 b 284 151 287 101 284 125 b 310 177 284 171 291 177 b 419 176 346 176 383 174 l 423 176 b 445 153 441 176 445 168 l 445 147 b 361 -79 442 65 415 -10 z', - }, - noteheadTriangleDownWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 242 -209 b 279 -180 253 -209 266 -200 b 459 84 341 -92 400 -4 b 520 170 480 112 501 141 b 527 189 524 177 527 183 b 504 199 527 196 520 199 l 55 199 b 23 190 45 199 33 196 b 0 161 9 181 0 173 b 10 135 0 154 3 145 b 206 -177 76 32 140 -73 b 242 -209 219 -199 230 -209 z m 253 -105 b 187 52 228 -52 206 0 b 176 127 179 76 176 101 b 197 151 176 144 181 151 l 202 151 b 256 150 220 151 238 150 b 311 151 275 150 294 151 b 337 128 331 151 337 144 l 337 122 b 253 -105 334 39 307 -35 z', - }, - noteheadTriangleDownHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 266 -229 b 282 -215 274 -229 278 -225 b 487 153 350 -92 418 30 b 491 170 490 158 491 164 b 480 189 491 177 487 183 b 425 215 464 202 448 213 b 33 226 297 217 168 222 b 13 229 29 223 22 229 b 1 222 9 229 4 228 b 14 184 -4 207 7 196 b 210 -176 81 65 145 -56 b 253 -225 222 -194 230 -213 b 266 -229 259 -226 264 -228 z m 134 22 b 147 43 138 27 141 37 b 206 163 174 79 179 127 b 213 170 209 166 212 167 l 340 167 b 193 -75 287 89 251 1 b 190 -82 192 -76 190 -79 z', - }, - noteheadTriangleDownBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 229 -215 b 259 -202 238 -215 248 -210 b 284 -173 269 -194 278 -184 l 482 173 b 498 209 488 184 498 194 b 481 215 492 215 487 215 b 63 213 343 215 203 213 b 12 197 45 213 29 206 b 0 180 4 193 0 187 b 3 168 0 177 1 173 b 13 150 6 163 9 156 l 196 -189 b 229 -215 206 -206 216 -215 z', - }, - noteheadTriangleUpDoubleWhole: { - x_min: 0, - x_max: 510, - y_min: -213, - y_max: 213, - ha: 426, - o: 'm 16 -307 b 30 -289 26 -307 29 -297 b 43 -236 36 -272 42 -253 l 65 219 b 59 285 62 240 69 264 b 46 307 55 294 58 307 l 43 307 b 19 279 30 304 20 295 b 13 184 17 248 14 216 b 1 -125 9 81 7 -23 b 0 -163 0 -138 0 -150 b 6 -287 0 -204 4 -245 b 16 -307 6 -295 7 -305 z m 707 -298 b 734 -217 733 -275 734 -246 b 729 240 733 -65 730 88 b 719 281 729 255 724 268 b 707 294 716 287 714 294 l 703 294 b 685 279 696 292 687 288 b 683 249 683 269 683 259 b 691 -186 685 104 685 -40 b 707 -298 693 -222 690 -261 z m 88 -266 b 112 -200 108 -249 111 -225 b 131 -215 117 -206 122 -210 b 170 -225 144 -222 157 -225 l 384 -225 l 384 -223 b 612 -225 461 -223 537 -223 b 628 -222 619 -225 624 -223 b 641 -265 628 -238 622 -265 b 665 -220 660 -265 664 -238 b 665 -88 667 -179 665 -135 b 667 -49 667 -75 667 -62 b 658 171 667 23 655 98 b 651 209 660 184 655 197 b 638 226 649 216 648 226 b 619 207 629 225 622 217 b 615 166 615 194 615 180 l 615 132 b 626 -193 619 24 622 -85 b 567 -108 608 -164 588 -137 b 387 154 508 -20 449 68 b 350 184 374 174 361 184 b 314 153 338 184 327 173 b 118 -161 248 48 184 -58 l 114 -167 b 120 66 118 -89 120 -12 l 120 138 b 127 190 120 156 127 173 b 125 203 127 194 127 199 b 108 238 121 216 125 238 b 84 203 91 238 86 219 b 82 189 82 199 82 194 b 73 -147 79 78 73 -35 b 75 -239 73 -179 75 -207 b 88 -266 75 -249 76 -259 z m 310 -177 b 284 -151 291 -177 284 -171 b 295 -78 284 -125 287 -101 b 361 79 314 -26 336 26 b 445 -147 415 10 442 -65 b 423 -176 446 -166 442 -176 l 419 -176 b 310 -177 383 -174 346 -176 z', - }, - noteheadTriangleUpWhole: { - x_min: 0, - x_max: 366, - y_min: -145, - y_max: 138, - ha: 283, - o: 'm 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z', - }, - noteheadTriangleUpHalf: { - x_min: 0, - x_max: 341, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 l 357 -22 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z', - }, - noteheadTriangleUpBlack: { - x_min: 0, - x_max: 346, - y_min: -149, - y_max: 149, - ha: 298, - o: 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z', - }, - noteheadSlashedDoubleWhole1: { - x_min: 0, - x_max: 697, - y_min: -290, - y_max: 290, - ha: 580, - o: 'm 20 -418 b 42 -376 40 -418 37 -392 b 43 -356 45 -370 43 -363 l 43 -348 b 50 -197 43 -298 49 -248 b 78 317 58 -24 69 147 b 72 387 75 343 82 366 b 52 418 68 397 69 418 l 49 416 b 24 380 33 413 24 399 b 19 235 23 333 20 284 b 7 -82 14 130 10 24 b 0 -264 6 -143 0 -203 b 10 -382 0 -302 1 -343 b 20 -418 13 -393 6 -418 z m 976 -344 b 991 -331 985 -346 988 -337 b 1004 -271 999 -312 1004 -292 l 1004 -194 b 996 184 1004 -68 1001 59 b 996 281 996 216 998 249 b 984 379 995 314 991 347 b 971 397 981 392 976 396 b 952 386 965 397 959 392 b 943 361 943 380 945 370 b 937 288 939 337 937 312 b 945 158 937 245 942 203 b 959 -248 950 23 953 -112 b 966 -325 960 -274 963 -300 b 976 -344 966 -334 968 -344 z m 102 -331 b 124 -272 120 -314 122 -294 b 135 -278 127 -276 131 -278 l 141 -278 b 320 -199 206 -262 272 -252 b 348 -171 328 -189 338 -180 b 482 -199 392 -190 436 -199 b 704 -173 576 -199 641 -187 b 847 -82 760 -158 809 -130 l 855 -69 l 855 -73 b 863 -229 857 -125 860 -177 b 876 -255 863 -239 863 -255 b 893 -233 886 -255 888 -242 b 900 -189 899 -219 900 -203 l 900 66 b 900 192 899 108 900 150 b 893 301 900 228 899 265 b 877 325 890 310 893 325 l 876 325 b 855 301 865 324 855 315 b 850 202 852 268 847 235 b 854 50 854 151 854 101 b 821 99 847 68 835 85 b 733 167 795 127 765 148 b 831 253 766 196 799 225 b 851 265 837 258 844 261 b 829 282 840 275 835 279 b 772 295 815 291 795 295 b 685 271 739 295 704 287 b 624 215 665 252 645 233 l 566 232 b 527 239 553 236 540 239 b 490 228 514 239 501 236 b 451 219 475 217 467 219 b 275 176 389 219 331 200 b 184 53 216 150 184 105 b 199 -14 184 32 189 10 b 262 -108 215 -52 236 -82 l 125 -230 b 134 225 130 -78 132 73 b 135 269 134 239 135 255 b 121 330 135 291 132 311 b 95 287 99 323 95 307 b 92 124 94 233 95 179 b 85 -143 88 36 85 -53 b 89 -300 85 -196 86 -248 b 102 -331 89 -311 89 -323 z m 367 -14 b 350 43 359 3 351 22 b 392 122 350 82 363 107 b 544 171 439 150 492 160 b 572 168 554 174 563 171 z m 564 -132 b 467 -105 528 -138 497 -121 b 442 -89 458 -101 449 -95 l 658 101 b 690 30 677 82 690 59 b 688 10 690 24 690 17 b 564 -132 678 -45 611 -127 z', - }, - noteheadSlashedWhole1: { - x_min: -76, - x_max: 498, - y_min: -168, - y_max: 168, - ha: 336, - o: 'm -79 -242 b 55 -202 -32 -236 14 -228 l 145 -143 b 333 -171 203 -166 265 -171 b 429 -164 361 -174 395 -168 b 582 -130 481 -158 534 -154 b 657 -20 631 -105 657 -65 b 619 68 657 9 644 40 b 552 120 599 89 577 107 b 582 138 562 127 572 132 b 717 226 625 167 668 194 b 638 242 688 236 662 242 b 543 213 603 242 573 232 b 455 154 514 194 484 174 b 325 199 412 167 367 179 b 233 215 298 210 265 215 b 75 156 173 215 124 186 b 0 27 24 122 0 76 b 66 -98 0 -17 22 -63 b 72 -102 69 -99 71 -101 b -89 -209 17 -137 -36 -173 b -109 -225 -95 -213 -109 -216 b -108 -229 -109 -226 -108 -228 b -85 -242 -104 -239 -95 -242 z m 181 -29 b 167 14 171 -13 167 1 b 187 62 167 30 173 46 b 301 137 217 99 258 118 b 312 138 304 138 308 138 l 317 138 b 389 109 340 125 364 118 l 383 105 z m 337 -109 b 239 -82 301 -107 268 -99 l 468 65 b 482 24 477 53 482 40 b 480 4 482 19 481 12 b 337 -109 467 -56 399 -111 z', - }, - noteheadSlashedHalf1: { - x_min: -79, - x_max: 471, - y_min: -184, - y_max: 184, - ha: 368, - o: 'm -112 -251 b -94 -265 -107 -261 -101 -264 b -52 -242 -79 -265 -63 -249 l 89 -148 b 212 -180 125 -170 167 -179 b 238 -177 220 -180 229 -179 l 262 -180 b 346 -171 289 -180 318 -176 b 576 -91 431 -166 507 -140 b 641 4 619 -60 641 -29 b 592 96 641 35 625 65 l 583 104 b 533 147 567 121 550 134 l 613 200 b 678 261 636 216 664 232 b 658 265 671 264 664 265 b 611 248 641 265 625 258 l 491 171 b 337 204 444 194 392 204 b 281 200 318 204 300 204 b 27 62 180 187 92 145 b -1 -19 9 37 -1 10 b 36 -107 -1 -50 12 -82 b 52 -121 42 -112 46 -117 l -72 -203 b -112 -251 -91 -216 -122 -233 z m 161 -49 b 158 -29 160 -42 158 -35 b 183 33 158 -7 167 16 b 395 137 239 95 311 122 b 420 125 405 134 413 130 z m 276 -128 b 261 -131 271 -130 266 -131 b 181 -86 233 -131 203 -114 l 454 94 l 468 72 b 481 36 477 60 481 49 b 469 1 481 26 477 14 b 276 -128 422 -66 354 -105 z', - }, - noteheadSlashedBlack1: { - x_min: -110, - x_max: 452, - y_min: -190, - y_max: 190, - ha: 380, - o: 'm -131 -274 b -102 -262 -121 -272 -111 -266 b 7 -186 -65 -239 -29 -212 b 50 -157 22 -176 36 -166 b 105 -176 65 -166 84 -173 b 207 -183 140 -181 173 -183 b 239 -184 219 -184 229 -184 b 428 -91 327 -184 377 -150 b 487 43 461 -52 487 -7 b 482 76 487 53 485 65 b 459 128 478 95 469 112 b 507 161 475 138 491 150 l 651 262 b 622 274 641 271 632 274 b 605 271 616 274 611 272 b 514 233 573 262 541 252 l 422 167 b 317 203 392 190 354 203 b 271 196 301 203 285 200 b 168 157 236 186 200 173 b 6 -16 94 120 33 68 b -1 -62 1 -32 -1 -48 b 17 -125 -1 -86 4 -108 b -81 -196 -16 -148 -48 -173 b -145 -242 -102 -212 -128 -219 b -158 -256 -150 -246 -158 -251 b -157 -261 -158 -258 -157 -259 b -131 -274 -153 -269 -141 -274 z', - }, - noteheadSlashedDoubleWhole2: { - x_min: 0, - x_max: 697, - y_min: -295, - y_max: 295, - ha: 590, - o: 'm 870 -338 b 891 -315 884 -341 887 -325 b 906 -183 907 -274 903 -228 b 914 186 912 -60 904 62 b 914 240 914 203 916 222 b 916 276 913 251 916 265 b 899 300 916 289 913 300 b 871 253 874 300 871 274 b 858 -168 871 111 858 -27 b 860 -235 858 -190 860 -213 l 736 -131 b 834 -20 799 -111 834 -69 b 789 85 834 13 819 49 b 683 160 760 118 723 140 b 383 216 589 209 487 215 b 330 213 364 217 347 216 b 228 300 295 242 261 271 b 86 347 184 337 138 348 b 58 343 76 347 63 350 l 58 360 b 35 425 58 384 53 423 b 6 382 9 425 6 403 l 6 131 b 0 -164 6 33 4 -66 b 24 -327 -1 -216 6 -271 b 50 -262 46 -305 50 -284 l 50 -154 b 52 -45 50 -118 50 -81 b 58 325 55 79 58 202 b 73 310 60 320 68 315 b 94 294 79 304 86 298 b 89 271 89 287 89 278 l 89 94 b 104 -194 101 -20 88 -108 b 118 -245 107 -213 104 -248 b 140 -190 140 -243 140 -212 l 140 -62 b 132 258 140 46 138 153 l 132 259 l 235 173 b 193 132 219 161 204 148 b 153 26 167 101 153 63 b 164 -35 153 7 157 -16 b 341 -170 196 -114 261 -158 b 433 -177 372 -174 403 -177 b 619 -157 497 -177 559 -170 l 706 -230 b 799 -276 736 -258 765 -276 b 818 -274 806 -276 812 -276 l 861 -274 b 863 -312 861 -287 863 -300 b 870 -338 864 -321 858 -337 z m 966 -425 b 986 -397 979 -425 982 -408 b 991 -373 989 -390 989 -382 b 995 -239 991 -328 995 -284 b 1004 334 1001 -49 1002 143 b 995 380 1005 350 1005 367 b 982 402 989 386 992 402 l 978 400 b 949 374 965 396 950 390 b 948 333 948 360 948 346 l 948 -37 b 949 -84 949 -52 949 -68 b 946 -248 949 -132 946 -189 b 953 -396 946 -297 948 -346 b 966 -425 955 -408 950 -425 z m 624 -36 b 416 140 554 22 485 81 b 482 156 439 150 461 154 b 625 81 537 156 588 124 b 647 27 639 63 647 46 b 624 -36 647 7 638 -14 z m 469 -117 b 320 14 386 -118 320 -60 b 343 81 320 37 327 60 l 547 -95 b 469 -117 521 -105 494 -111 z', - }, - noteheadSlashedWhole2: { - x_min: -83, - x_max: 510, - y_min: -201, - y_max: 198, - ha: 399, - o: 'm 734 -289 b 696 -245 726 -266 710 -256 b 586 -164 660 -217 622 -192 l 589 -161 b 654 -50 631 -135 654 -94 b 616 40 654 -19 641 13 b 305 174 536 127 420 174 b 171 151 261 174 215 167 b 166 150 170 151 168 150 b 86 209 140 170 112 189 b -94 284 32 249 -22 289 l -108 285 b -120 274 -114 285 -120 284 b -104 251 -120 266 -112 258 b 71 124 -46 209 12 166 l 85 114 b 36 72 66 102 50 89 b 0 -30 12 40 0 4 b 122 -186 0 -96 45 -160 b 343 -222 194 -210 268 -222 b 514 -197 410 -220 467 -213 l 554 -228 b 734 -289 609 -268 668 -275 z m 477 -82 b 268 73 408 -30 338 22 l 301 91 b 336 101 314 96 324 101 b 370 88 347 101 359 96 b 459 9 405 66 436 43 b 481 -56 474 -13 481 -35 b 477 -82 481 -65 480 -73 z m 310 -161 b 216 -143 276 -161 246 -156 b 166 -72 181 -128 166 -105 b 168 -46 166 -65 167 -55 b 206 26 176 -16 189 7 b 436 -140 282 -29 360 -84 b 382 -158 420 -150 402 -157 b 310 -161 357 -161 333 -161 z', - }, - noteheadSlashedHalf2: { - x_min: -73, - x_max: 454, - y_min: -188, - y_max: 188, - ha: 376, - o: 'm 654 -271 b 603 -202 649 -233 625 -217 b 481 -115 563 -173 523 -144 b 564 -60 510 -101 539 -82 b 615 40 596 -33 615 4 b 609 69 615 50 613 60 b 505 167 590 120 554 151 b 336 190 451 184 392 190 b 124 134 259 190 189 171 l -42 248 b -88 271 -56 256 -75 271 b -101 265 -94 271 -98 269 b -105 252 -104 259 -105 255 b -66 210 -105 235 -82 222 l 85 107 b 0 -24 42 73 0 35 b 183 -183 0 -118 75 -184 b 262 -176 206 -180 233 -177 b 438 -135 324 -171 383 -158 b 570 -228 482 -166 527 -197 b 654 -271 595 -243 621 -259 z m 393 -53 l 311 4 l 225 65 b 392 134 274 102 331 122 b 455 50 425 141 455 101 b 439 -3 455 35 451 14 b 393 -53 425 -22 409 -37 z m 287 -121 b 246 -130 272 -127 259 -130 b 171 -89 215 -130 189 -115 b 156 -40 161 -73 156 -58 b 186 29 156 -17 166 7 l 192 35 l 359 -82 b 287 -121 337 -98 312 -111 z', - }, - noteheadSlashedBlack2: { - x_min: -84, - x_max: 405, - y_min: -189, - y_max: 189, - ha: 378, - o: 'm 557 -265 b 573 -272 562 -268 567 -272 b 583 -261 577 -272 580 -269 b 575 -242 580 -253 579 -248 b 524 -190 563 -220 544 -204 b 405 -99 485 -160 445 -130 b 497 50 449 -60 482 -9 b 500 72 498 58 500 65 b 478 122 500 91 492 107 b 331 186 438 167 387 186 b 120 131 258 186 186 167 l 107 124 b -52 242 53 163 1 203 b -89 265 -63 251 -76 259 b -107 272 -95 268 -101 272 b -117 266 -109 272 -114 271 b -121 251 -120 262 -121 256 b -114 235 -121 245 -120 239 b -60 186 -96 217 -81 199 b 63 95 -20 156 22 125 b -1 -35 26 66 -1 27 b 137 -183 -1 -130 46 -183 b 174 -180 148 -183 161 -181 l 245 -171 b 366 -128 289 -166 331 -150 l 426 -171 b 557 -265 469 -203 514 -233 z', - }, - noteheadDiamondDoubleWhole: { - x_min: 0, - x_max: 429, - y_min: -221, - y_max: 221, - ha: 442, - o: 'm 22 -318 b 42 -294 33 -318 37 -302 b 46 -266 45 -285 45 -275 b 50 -219 49 -249 50 -233 b 48 -153 50 -197 49 -176 b 43 120 43 -62 43 29 l 43 253 b 37 298 43 269 45 284 b 26 318 35 305 35 318 l 24 318 b 1 295 13 317 3 308 b 0 268 0 285 0 276 l 0 -121 b 10 -291 0 -177 1 -235 b 22 -318 12 -301 10 -318 z m 593 -312 b 618 -256 611 -294 616 -276 l 618 -186 b 611 253 618 -40 612 108 b 605 276 611 261 608 268 b 589 295 600 284 600 297 b 567 272 577 294 569 285 l 567 251 b 575 -197 573 102 575 -48 b 593 -312 575 -233 579 -271 z m 99 -268 b 114 -256 107 -269 111 -262 b 127 -196 124 -238 125 -217 b 128 -144 128 -179 128 -161 b 122 -9 128 -99 125 -55 l 135 -19 b 344 -179 206 -71 276 -122 b 370 -190 354 -186 363 -190 b 395 -173 379 -190 386 -184 b 492 -33 426 -127 459 -79 b 491 -86 491 -50 491 -68 b 507 -251 491 -138 495 -193 b 534 -184 530 -228 533 -206 b 541 144 537 -75 539 35 b 530 204 541 164 539 186 b 520 220 528 210 528 220 b 500 203 511 219 503 213 b 498 192 498 200 498 194 l 498 176 b 494 7 497 120 497 63 l 490 12 l 287 176 b 258 190 279 181 274 190 b 212 153 239 186 225 168 l 127 40 b 121 32 124 37 122 35 b 118 114 120 59 118 86 b 102 249 117 158 122 206 b 75 219 85 246 79 236 b 72 187 72 209 72 197 b 76 117 72 164 75 141 b 85 -151 79 27 79 -62 b 91 -251 86 -184 91 -217 b 99 -268 91 -258 92 -266 z m 392 -128 b 374 -122 387 -134 380 -127 l 180 29 b 170 45 173 35 170 39 b 176 56 170 48 173 52 b 236 122 204 101 219 122 b 308 76 252 122 272 107 l 433 -26 b 449 -50 439 -32 449 -36 b 392 -128 432 -75 413 -102 z', - }, - noteheadDiamondWhole: { - x_min: 0, - x_max: 271, - y_min: -132, - y_max: 132, - ha: 264, - o: 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z', - }, - noteheadDiamondHalf: { - x_min: 0, - x_max: 295, - y_min: -148, - y_max: 148, - ha: 296, - o: 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z', - }, - noteheadDiamondBlack: { - x_min: 0, - x_max: 310, - y_min: -146, - y_max: 146, - ha: 292, - o: 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z', - }, - noteheadParenthesis: { - x_min: -70, - x_max: 329, - y_min: -196, - y_max: 201, - ha: 397, - o: 'm 344 -279 b 382 -262 361 -288 370 -272 b 405 -233 390 -255 399 -245 b 474 9 455 -158 468 -73 b 416 228 474 78 448 174 b 364 282 403 249 387 271 b 344 289 359 285 350 288 b 331 279 338 289 333 287 b 325 248 328 269 325 258 b 338 225 325 238 328 229 b 412 138 379 207 396 174 b 445 1 433 92 445 45 b 346 -217 445 -81 410 -154 b 336 -252 340 -223 336 -238 b 344 -279 336 -265 338 -276 z m 19 -274 b 35 -282 24 -279 30 -281 b 49 -265 42 -282 46 -275 b 52 -243 50 -256 52 -249 b 36 -210 52 -230 49 -220 b -60 -59 -16 -173 -35 -114 b -73 9 -69 -39 -73 -16 b 33 223 -73 92 -24 189 b 50 265 43 229 50 249 b 33 288 50 278 46 289 b 4 272 23 288 14 275 b -9 261 0 269 -4 265 b -101 23 -58 193 -105 124 b -37 -206 -104 -52 -75 -130 b 19 -274 -23 -232 -6 -255 z', - }, - noteheadParenthesisRight: { - x_min: -30, - x_max: 82, - y_min: -199, - y_max: 206, - ha: 405, - o: 'm -17 -282 b 24 -264 -6 -297 12 -272 b 60 -219 40 -253 52 -236 b 117 1 96 -150 112 -75 b 118 16 118 6 118 12 b 109 73 118 36 112 55 b 4 279 99 154 68 226 b -23 297 -4 287 -13 297 b -37 289 -27 297 -32 294 b -43 266 -42 285 -43 276 b -32 225 -43 251 -37 229 b 84 -7 48 170 84 82 b 32 -184 84 -69 65 -132 b -10 -222 22 -200 4 -209 b -24 -258 -20 -232 -24 -245 b -17 -282 -24 -266 -22 -276 z', - }, - noteheadParenthesisLeft: { - x_min: 0, - x_max: 106, - y_min: -197, - y_max: 197, - ha: 394, - o: 'm 134 -284 b 138 -281 135 -284 137 -284 b 145 -268 144 -278 145 -274 l 144 -253 b 107 -180 138 -225 121 -204 b 42 13 71 -120 42 -56 b 49 73 42 32 43 52 b 137 210 62 128 95 171 b 153 255 147 219 153 239 b 145 278 153 265 151 274 b 130 284 140 281 135 284 b 98 259 117 284 108 268 b 0 37 35 203 1 131 b 118 -268 9 -69 53 -173 b 134 -284 121 -274 127 -284 z', - }, - noteheadMoonBlack: { - x_min: 0, - x_max: 328, - y_min: -125, - y_max: 125, - ha: 250, - o: 'm 353 -160 b 465 -40 412 -140 451 -102 b 472 30 471 -17 472 6 b 469 124 472 60 469 92 b 406 179 469 170 459 177 l 128 179 b 37 180 98 179 68 179 b 0 141 7 180 0 170 b 3 -20 3 88 3 33 b 69 -134 3 -72 26 -109 b 240 -180 125 -164 181 -180 b 353 -160 278 -180 315 -174 z', - }, - noteheadTriangleLeftBlack: { - x_min: 0, - x_max: 391, - y_min: -142, - y_max: 142, - ha: 284, - o: 'm 138 -204 b 318 -197 197 -199 258 -197 l 431 -197 b 544 -192 469 -196 507 -193 b 563 -184 552 -190 560 -193 b 553 -167 564 -177 559 -171 l 540 -157 b 232 60 436 -85 334 -12 l 50 190 b 20 204 42 197 32 204 b 10 202 17 204 14 204 b 0 184 1 197 0 192 b 1 164 0 177 1 170 b 6 -150 3 59 6 -45 b 39 -193 7 -176 17 -186 b 138 -204 72 -204 105 -204 z', - }, - noteheadTriangleRightBlack: { - x_min: 0, - x_max: 398, - y_min: -139, - y_max: 140, - ha: 279, - o: 'm 543 -200 b 573 -176 566 -200 573 -194 l 573 -168 b 554 141 566 -66 560 37 b 520 197 553 167 546 187 b 495 202 511 200 504 202 b 454 184 481 202 467 196 l 35 -137 b 0 -171 22 -147 -4 -154 b 52 -199 6 -193 33 -193 b 69 -199 58 -200 63 -199 z', - }, - noteheadTriangleRoundDownBlack: { - x_min: 0, - x_max: 334, - y_min: -134, - y_max: 136, - ha: 270, - o: 'm 252 -192 b 285 -176 269 -196 276 -187 b 468 52 346 -99 406 -23 b 481 79 477 62 481 71 b 465 104 481 88 475 95 b 441 124 456 109 449 117 b 249 196 380 174 314 194 b 13 104 157 196 69 154 b 0 86 6 98 0 92 b 7 69 0 82 3 76 b 202 -164 73 -7 137 -85 b 252 -192 216 -181 235 -186 z', - }, - augmentationDot: { - x_min: 0, - x_max: 96, - y_min: -57, - y_max: 57, - ha: 114, - o: 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z', - }, - tremolo1: { - x_min: -158, - x_max: 156, - y_min: -88, - y_max: 88, - ha: 176, - o: 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z', - }, - flag8thUp: { - x_min: 0, - x_max: 261, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z', - }, - flag8thDown: { - x_min: 0, - x_max: 261, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z', - }, - flag16thUp: { - x_min: 0, - x_max: 327, - y_min: -819, - y_max: 0, - ha: 819, - o: 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z', - }, - flag16thDown: { - x_min: 0, - x_max: 327, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 l 415 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 l 0 88 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z', - }, - flag32ndUp: { - x_min: 0, - x_max: 268, - y_min: -849, - y_max: 149, - ha: 999, - o: 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z', - }, - flag32ndDown: { - x_min: -3, - x_max: 268, - y_min: -169, - y_max: 829, - ha: 999, - o: 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 l 0 -148 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z', - }, - flag64thUp: { - x_min: -4, - x_max: 282, - y_min: -824, - y_max: 347, - ha: 1171, - o: 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z', - }, - flag64thDown: { - x_min: -5, - x_max: 281, - y_min: -375, - y_max: 796, - ha: 1171, - o: 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z', - }, - flag128thUp: { - x_min: 0, - x_max: 252, - y_min: -804, - y_max: 530, - ha: 1334, - o: 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z', - }, - flag128thDown: { - x_min: -1, - x_max: 252, - y_min: -580, - y_max: 754, - ha: 1334, - o: 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z', - }, - accidentalFlat: { - x_min: 1, - x_max: 209, - y_min: -208, - y_max: 472, - ha: 680, - o: 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z', - }, - accidentalNatural: { - x_min: 0, - x_max: 214, - y_min: -456, - y_max: 462, - ha: 918, - o: 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z', - }, - accidentalSharp: { - x_min: -22, - x_max: 390, - y_min: -384, - y_max: 383, - ha: 767, - o: 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 l 523 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 l 533 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 l 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z', - }, - accidentalDoubleSharp: { - x_min: 0, - x_max: 287, - y_min: -159, - y_max: 159, - ha: 318, - o: 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z', - }, - accidentalDoubleFlat: { - x_min: 0, - x_max: 359, - y_min: -220, - y_max: 446, - ha: 666, - o: 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z', - }, - accidentalParensLeft: { - x_min: 0, - x_max: 130, - y_min: -270, - y_max: 268, - ha: 538, - o: 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z', - }, - accidentalParensRight: { - x_min: 0, - x_max: 139, - y_min: -275, - y_max: 277, - ha: 552, - o: 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z', - }, - accidentalQuarterToneFlatStein: { - x_min: 0, - x_max: 208, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z', - }, - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: 0, - x_max: 422, - y_min: -240, - y_max: 440, - ha: 680, - o: 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z', - }, - accidentalQuarterToneSharpStein: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalThreeQuarterTonesSharpStein: { - x_min: -23, - x_max: 388, - y_min: -373, - y_max: 445, - ha: 818, - o: 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 l 300 108 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z', - }, - accidentalBuyukMucennebFlat: { - x_min: 2, - x_max: 287, - y_min: -248, - y_max: 432, - ha: 680, - o: 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 l 197 251 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 l 203 431 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 l 203 556 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 l 29 315 b 3 281 12 310 3 298 b 12 170 1 245 9 209 l 141 226 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z', - }, - accidentalBakiyeFlat: { - x_min: 2, - x_max: 287, - y_min: -236, - y_max: 444, - ha: 680, - o: 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z', - }, - accidentalKomaSharp: { - x_min: 0, - x_max: 300, - y_min: -338, - y_max: 351, - ha: 689, - o: 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 l 35 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z', - }, - accidentalKucukMucennebSharp: { - x_min: 0, - x_max: 359, - y_min: -420, - y_max: 343, - ha: 763, - o: 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z', - }, - accidentalKoron: { - x_min: 0, - x_max: 303, - y_min: -462, - y_max: 180, - ha: 642, - o: 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 l 69 -600 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z', - }, - accidentalSori: { - x_min: 0, - x_max: 434, - y_min: -295, - y_max: 325, - ha: 620, - o: 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 l 369 428 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 l 137 392 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 49 l 526 7 l 485 -10 l 419 -36 z', - }, - articAccentAbove: { - x_min: 0, - x_max: 425, - y_min: 0, - y_max: 326, - ha: 326, - o: 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 l 0 9 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z', - }, - articAccentBelow: { - x_min: 0, - x_max: 425, - y_min: -326, - y_max: 0, - ha: 326, - o: 'm 26 -469 l 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 l 0 -461 b 16 -469 3 -468 10 -469 z', - }, - articTenutoAbove: { - x_min: 0, - x_max: 471, - y_min: 0, - y_max: 56, - ha: 56, - o: 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z', - }, - articTenutoBelow: { - x_min: 0, - x_max: 471, - y_min: -59, - y_max: -3, - ha: 56, - o: 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z', - }, - articStaccatoAbove: { - x_min: 1, - x_max: 112, - y_min: 0, - y_max: 156, - ha: 156, - o: 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z', - }, - articStaccatoBelow: { - x_min: 1, - x_max: 112, - y_min: -156, - y_max: 0, - ha: 156, - o: 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z', - }, - articStaccatissimoAbove: { - x_min: 0, - x_max: 139, - y_min: 0, - y_max: 411, - ha: 411, - o: 'm 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z', - }, - articStaccatissimoBelow: { - x_min: 0, - x_max: 139, - y_min: -411, - y_max: 0, - ha: 411, - o: 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z', - }, - articMarcatoAbove: { - x_min: 0, - x_max: 396, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z', - }, - articMarcatoBelow: { - x_min: 0, - x_max: 396, - y_min: -328, - y_max: 0, - ha: 328, - o: 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z', - }, - fermataAbove: { - x_min: 0, - x_max: 472, - y_min: 2, - y_max: 454, - ha: 452, - o: 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z', - }, - fermataBelow: { - x_min: 0, - x_max: 519, - y_min: -430, - y_max: -1, - ha: 429, - o: 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z', - }, - fermataLongAbove: { - x_min: 0, - x_max: 591, - y_min: -6, - y_max: 337, - ha: 343, - o: 'm 20 -9 b 36 14 29 -9 35 3 b 49 109 45 45 49 78 b 48 143 49 121 49 131 b 42 312 40 200 45 256 b 63 338 42 331 46 338 b 68 340 65 338 66 338 b 279 333 138 336 209 334 b 760 317 439 330 599 323 b 783 298 775 317 782 315 l 796 161 b 814 17 801 115 802 68 b 851 144 840 45 855 102 b 824 396 842 228 834 312 b 760 468 816 459 812 467 l 55 485 b 1 433 12 487 1 478 l 1 387 b 0 203 1 325 0 264 b 9 17 0 141 3 79 b 20 -9 9 7 6 -9 z m 403 3 b 439 6 413 3 425 4 b 477 42 464 9 474 22 b 478 62 478 49 478 55 l 478 84 b 465 160 478 109 478 135 b 449 173 461 167 459 173 b 354 105 386 179 354 156 b 359 71 354 95 356 84 b 360 65 360 69 360 66 b 403 3 372 14 373 3 z', - }, - fermataLongBelow: { - x_min: 0, - x_max: 602, - y_min: -335, - y_max: 7, - ha: 342, - o: 'm 793 -482 b 851 -444 822 -482 842 -471 b 867 -357 860 -416 867 -387 b 865 -336 867 -350 867 -343 b 851 -189 858 -287 855 -238 b 832 -32 847 -135 840 -84 b 824 -17 832 -26 832 -17 l 822 -17 b 805 -30 816 -19 806 -20 b 798 -88 802 -50 798 -69 b 805 -292 798 -157 801 -225 b 772 -327 806 -318 801 -327 b 360 -324 635 -327 497 -325 b 78 -327 265 -323 171 -327 b 50 -304 59 -327 50 -320 l 50 -297 b 62 -187 55 -261 60 -225 b 71 -60 62 -144 71 -102 b 68 -20 71 -48 71 -33 b 53 10 66 -10 69 10 l 52 10 b 22 -22 37 9 24 -1 b 14 -121 17 -55 16 -89 b 0 -359 10 -200 0 -279 b 6 -452 0 -390 3 -420 b 42 -481 9 -478 20 -481 l 415 -481 l 415 -482 z m 409 -183 b 454 -179 420 -183 435 -181 b 505 -124 487 -176 504 -158 b 505 -89 507 -112 505 -101 b 507 -58 505 -79 507 -68 b 505 -42 507 -52 507 -48 b 485 -10 503 -29 501 -10 b 448 -9 472 -9 461 -9 b 380 -22 425 -9 402 -12 b 363 -46 372 -27 363 -35 l 363 -49 b 364 -114 363 -71 361 -94 b 409 -183 374 -168 377 -183 z', - }, - fermataVeryLongAbove: { - x_min: 0, - x_max: 715, - y_min: -14, - y_max: 437, - ha: 451, - o: 'm 26 -20 b 42 -4 36 -22 39 -12 b 49 53 49 14 49 33 l 49 448 b 69 478 49 467 52 478 l 72 478 b 81 480 75 478 78 478 b 144 477 102 477 122 477 l 207 477 b 943 471 452 477 698 471 b 978 442 966 471 976 467 b 989 99 985 327 985 213 b 999 -19 991 60 995 22 b 1030 62 1028 6 1030 35 b 1021 507 1028 210 1025 359 b 1012 596 1021 537 1017 567 b 976 624 1009 618 998 624 b 507 626 819 624 662 625 b 46 629 353 628 200 629 b 7 590 19 629 7 618 b 0 101 7 428 0 264 b 16 -4 0 65 13 32 b 26 -20 17 -10 22 -19 z m 187 -9 b 207 30 206 -7 204 14 b 207 55 209 37 207 46 b 200 240 210 117 197 179 b 219 262 200 256 203 262 l 223 262 b 456 252 301 258 379 255 l 772 239 b 804 209 792 238 802 235 b 818 69 806 163 809 115 b 834 -4 821 46 816 19 b 857 56 852 13 857 35 b 851 183 857 99 858 141 b 827 360 841 242 841 301 b 786 390 821 383 809 389 b 189 409 588 403 387 402 b 153 377 163 409 153 400 b 173 27 153 259 150 143 b 187 -9 176 13 177 -9 z m 478 3 b 536 10 491 3 510 6 b 582 60 569 14 580 32 l 582 89 l 580 89 b 580 117 580 98 582 107 b 540 171 577 158 572 171 b 521 171 534 171 528 170 b 459 166 500 170 480 168 b 423 132 436 164 423 154 b 428 88 423 118 425 102 b 478 3 438 22 439 4 z', - }, - fermataVeryLongBelow: { - x_min: 0, - x_max: 686, - y_min: -427, - y_max: 30, - ha: 457, - o: 'm 56 -615 b 282 -612 132 -612 207 -613 b 924 -606 497 -608 710 -606 b 973 -570 953 -606 968 -593 b 988 -455 984 -533 991 -494 b 982 -262 984 -390 982 -327 b 976 -69 982 -197 981 -134 b 976 -14 975 -50 976 -33 b 966 43 976 4 975 23 b 940 20 953 37 943 35 b 933 -76 936 -12 933 -45 b 935 -121 933 -91 933 -107 b 940 -307 940 -183 940 -245 l 940 -435 b 919 -458 940 -451 935 -458 b 894 -459 910 -458 903 -458 b 206 -467 665 -461 435 -467 b 88 -467 167 -467 127 -468 b 45 -425 45 -467 42 -465 b 46 -400 46 -416 46 -408 b 43 -325 46 -376 43 -350 b 42 -59 42 -236 42 -148 b 22 17 42 -32 36 -6 b 0 -27 -1 7 0 -10 b 7 -420 0 -158 7 -289 l 7 -474 b 16 -579 7 -510 7 -544 b 56 -615 22 -603 27 -615 z m 789 -390 b 835 -357 816 -392 829 -380 b 850 -256 844 -324 850 -291 b 848 -230 850 -248 850 -239 b 845 -135 845 -199 845 -167 l 845 -72 b 837 23 845 -40 848 -9 b 809 -27 809 14 809 -7 l 809 -222 b 788 -242 809 -238 805 -242 l 203 -229 b 180 -209 186 -229 180 -223 l 180 -160 b 179 -115 180 -145 180 -131 b 179 -50 177 -94 179 -72 b 163 24 179 -26 176 0 b 137 -6 145 19 140 10 b 134 -39 134 -17 134 -27 b 138 -105 134 -60 137 -82 l 138 -197 b 145 -343 138 -246 138 -294 b 179 -377 148 -364 151 -377 b 789 -390 383 -377 586 -380 z m 480 -164 b 566 -65 549 -164 566 -140 b 527 1 566 -10 564 1 b 436 -71 426 1 436 -9 l 436 -88 l 436 -143 b 454 -163 436 -153 439 -161 b 480 -164 464 -163 472 -164 z', - }, - fermataVeryShortAbove: { - x_min: 0, - x_max: 711, - y_min: -31, - y_max: 496, - ha: 527, - o: 'm 1018 -45 b 1024 -1 1021 -29 1024 -14 b 986 105 1024 40 1008 75 b 557 688 845 302 701 495 b 520 714 544 706 531 714 b 480 687 505 714 492 706 b 340 490 433 621 387 556 b 73 127 252 367 168 243 b 0 22 48 95 22 63 b 68 60 33 27 52 42 b 167 170 101 96 132 135 b 494 503 276 279 384 393 b 518 518 504 513 511 518 b 543 501 526 518 533 513 b 923 63 670 356 799 212 b 1018 -45 952 29 984 -4 z m 837 -16 b 838 1 838 -10 838 -4 b 799 82 838 37 818 60 b 560 369 721 179 639 274 b 541 396 553 377 546 386 b 518 422 533 413 527 422 b 491 400 511 422 503 415 b 347 229 445 341 396 285 b 203 45 297 170 239 117 b 184 17 199 36 184 26 b 189 9 184 14 186 12 b 226 26 200 -1 215 19 l 238 35 b 494 245 321 107 408 176 b 510 253 501 251 505 253 b 526 245 514 253 520 251 b 729 73 592 186 660 130 z m 495 0 b 511 6 500 0 505 1 b 556 32 526 16 540 30 b 586 68 583 35 586 50 b 579 115 586 86 582 101 b 533 190 566 168 553 190 b 459 154 516 190 494 177 b 442 122 448 145 442 135 b 445 105 442 117 442 111 b 477 17 456 76 465 46 b 495 0 481 7 487 0 z', - }, - fermataVeryShortBelow: { - x_min: 0, - x_max: 697, - y_min: -475, - y_max: 13, - ha: 488, - o: 'm 507 -383 b 530 -369 514 -383 521 -377 b 775 -130 611 -288 694 -210 b 824 3 811 -94 822 -48 b 789 -7 808 6 799 0 b 521 -212 698 -72 611 -143 b 488 -226 508 -222 498 -226 b 452 -209 477 -226 467 -220 b 202 7 370 -135 285 -65 b 187 19 197 10 193 19 b 179 14 184 19 181 17 b 171 -3 174 10 171 4 b 173 -13 171 -6 171 -9 b 235 -122 186 -53 206 -94 l 484 -370 b 507 -383 492 -379 500 -383 z m 503 -684 b 539 -647 517 -674 528 -661 b 917 -153 665 -482 793 -318 b 999 -24 948 -112 984 -73 b 1004 -10 1001 -20 1004 -16 b 999 -3 1004 -7 1002 -4 b 973 -10 991 1 981 -1 l 963 -23 b 552 -505 825 -184 688 -344 b 528 -521 543 -517 536 -521 b 505 -505 521 -521 514 -516 b 156 -128 393 -374 274 -253 b 27 6 114 -84 72 -39 b 16 17 24 9 22 17 b 9 13 13 17 12 16 b 0 -3 6 10 0 3 b 1 -9 0 -4 0 -7 b 14 -36 4 -17 9 -27 b 117 -179 45 -86 81 -132 b 482 -667 242 -338 360 -504 b 503 -684 487 -672 491 -683 z m 487 -164 b 552 -98 523 -164 552 -137 b 544 -30 550 -78 549 -55 b 521 -1 541 -19 537 -1 l 517 -1 b 446 -29 492 -9 462 0 b 445 -42 444 -32 445 -37 b 464 -145 451 -76 458 -111 b 487 -164 468 -157 467 -164 z', - }, - fermataShortAbove: { - x_min: 0, - x_max: 545, - y_min: -18, - y_max: 348, - ha: 366, - o: 'm 16 -26 b 36 -9 26 -27 30 -16 b 354 340 143 107 249 223 b 369 348 360 346 364 348 b 382 341 373 348 377 346 l 530 199 b 743 0 599 131 672 68 b 753 -7 747 -3 750 -7 b 762 -1 756 -7 759 -6 b 785 84 776 10 785 48 b 768 150 785 112 779 138 l 399 491 b 379 501 392 498 384 501 b 357 488 372 501 364 495 b 27 137 248 370 141 251 b 1 84 12 121 1 105 b 3 69 1 79 1 75 b 0 55 1 65 0 59 b 9 1 0 36 9 20 b 16 -26 10 -7 3 -22 z m 357 24 b 367 27 360 24 363 24 b 431 118 422 42 431 49 b 429 151 431 130 431 141 b 400 193 428 171 429 193 b 333 147 359 193 333 176 b 341 42 333 111 337 78 b 357 24 343 30 346 24 z', - }, - fermataShortBelow: { - x_min: 0, - x_max: 565, - y_min: -335, - y_max: 10, - ha: 345, - o: 'm 386 -482 b 422 -455 395 -482 405 -474 b 732 -117 526 -343 631 -232 b 814 12 765 -79 799 -42 b 752 -22 780 14 768 -7 b 436 -320 645 -120 540 -219 b 419 -328 429 -325 425 -328 b 400 -318 413 -328 408 -325 b 35 0 279 -212 157 -105 b 16 14 29 4 23 14 b 7 12 13 14 10 14 b 0 -3 1 7 0 1 b 7 -23 0 -10 3 -17 b 20 -48 12 -30 14 -39 b 167 -238 60 -117 115 -177 b 351 -455 229 -310 289 -383 b 386 -482 367 -474 377 -482 z m 382 -213 b 406 -207 389 -213 396 -210 b 452 -156 431 -199 446 -180 b 461 -85 456 -132 458 -108 b 448 -32 461 -66 454 -49 b 418 -6 442 -12 431 -6 b 397 -9 410 -6 405 -7 b 348 -50 376 -14 350 -14 b 356 -170 348 -91 354 -130 b 382 -213 357 -199 363 -213 z', - }, - breathMarkComma: { - x_min: 0, - x_max: 148, - y_min: 0, - y_max: 275, - ha: 275, - o: 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z', - }, - breathMarkUpbow: { - x_min: 0, - x_max: 254, - y_min: 0, - y_max: 595, - ha: 595, - o: 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z', - }, - caesura: { - x_min: 0, - x_max: 566, - y_min: 0, - y_max: 562, - ha: 563, - o: 'm 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z m 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z', - }, - caesuraCurved: { - x_min: 0, - x_max: 386, - y_min: -10, - y_max: 584, - ha: 594, - o: 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z', - }, - restMaxima: { - x_min: 0, - x_max: 366, - y_min: -255, - y_max: 255, - ha: 510, - o: 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z', - }, - restDoubleWhole: { - x_min: 0, - x_max: 122, - y_min: 0, - y_max: 249, - ha: 249, - o: 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z', - }, - restWhole: { - x_min: 1, - x_max: 500, - y_min: -120, - y_max: 14, - ha: 134, - o: 'm 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z', - }, - restWholeLegerLine: { - x_min: -197, - x_max: 685, - y_min: -157, - y_max: 29, - ha: 186, - o: 'm 96 -226 b 167 -223 121 -226 144 -225 b 300 -222 207 -222 252 -222 l 444 -222 b 660 -217 520 -222 595 -222 b 746 -131 703 -216 746 -200 b 744 -62 746 -108 747 -85 b 743 -39 743 -53 743 -46 b 789 -14 743 -16 752 -17 b 883 -16 821 -13 851 -16 b 965 -9 910 -16 937 -14 b 986 3 972 -7 986 -10 l 986 6 b 963 35 984 17 982 32 b 887 42 937 39 913 42 b 39 27 605 42 321 33 l -76 27 b -261 20 -138 27 -200 26 b -282 14 -269 20 -279 23 b -271 -7 -287 4 -276 -1 b -209 -27 -253 -23 -230 -24 b -153 -30 -190 -30 -173 -30 b -48 -29 -118 -30 -82 -27 b 6 -32 -22 -29 -6 -27 b 1 -72 3 -43 1 -58 b 4 -167 1 -105 7 -140 b 53 -223 3 -207 14 -217 b 96 -226 68 -226 82 -226 z', - }, - restHalf: { - x_min: 0, - x_max: 518, - y_min: 0, - y_max: 162, - ha: 162, - o: 'm 98 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z', - }, - restHalfLegerLine: { - x_min: -120, - x_max: 448, - y_min: -20, - y_max: 143, - ha: 163, - o: 'm 397 -29 b 482 -23 426 -29 455 -27 b 526 -24 497 -24 511 -24 b 608 -17 554 -24 582 -23 b 645 -1 622 -14 644 -17 b 615 26 648 13 629 20 b 595 32 608 29 602 30 b 526 37 572 35 549 37 b 498 36 517 37 507 37 b 471 35 487 35 478 35 b 445 53 451 35 445 39 b 449 89 445 60 446 73 l 454 117 b 373 206 456 173 428 206 b 324 204 356 206 340 206 b 209 203 287 203 248 203 b 46 193 156 203 101 202 b 16 170 32 190 19 187 b 9 112 13 151 9 131 b 14 78 9 101 10 89 b 19 59 17 71 19 63 b -4 45 19 49 12 45 l -10 45 b -150 33 -58 45 -104 46 b -173 22 -158 32 -173 33 l -173 19 b -151 -13 -170 6 -168 -10 b -117 -17 -140 -16 -128 -17 b 118 -13 -37 -17 39 -13 b 397 -29 213 -13 308 -29 z', - }, - restQuarter: { - x_min: 0, - x_max: 263, - y_min: -415, - y_max: 415, - ha: 830, - o: 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z', - }, - rest8th: { - x_min: 0, - x_max: 289, - y_min: -260, - y_max: 261, - ha: 521, - o: 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z', - }, - rest16th: { - x_min: 0, - x_max: 333, - y_min: -328, - y_max: 244, - ha: 572, - o: 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z', - }, - rest32nd: { - x_min: 0, - x_max: 347, - y_min: -498, - y_max: 483, - ha: 981, - o: 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z', - }, - rest64th: { - x_min: 0, - x_max: 428, - y_min: -720, - y_max: 474, - ha: 1194, - o: 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 l 118 -196 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z', - }, - rest128th: { - x_min: 1, - x_max: 491, - y_min: -711, - y_max: 719, - ha: 1430, - o: 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 l 184 -436 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z', - }, - dynamicPiano: { - x_min: -49, - x_max: 327, - y_min: -142, - y_max: 515, - ha: 657, - o: 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z', - }, - dynamicMezzo: { - x_min: -18, - x_max: 559, - y_min: -50, - y_max: 365, - ha: 415, - o: 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 l -26 379 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z', - }, - dynamicForte: { - x_min: -144, - x_max: 311, - y_min: -115, - y_max: 504, - ha: 619, - o: 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 l 63 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z', - }, - dynamicRinforzando: { - x_min: -75, - x_max: 322, - y_min: -90, - y_max: 325, - ha: 415, - o: 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z', - }, - dynamicSforzando: { - x_min: 0, - x_max: 296, - y_min: 0, - y_max: 379, - ha: 379, - o: 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z', - }, - dynamicZ: { - x_min: -43, - x_max: 331, - y_min: 0, - y_max: 328, - ha: 328, - o: 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z', - }, - ornamentTrill: { - x_min: 1, - x_max: 551, - y_min: -18, - y_max: 539, - ha: 557, - o: 'm 321 612 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 l 3 452 b 53 432 6 436 23 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 l 264 148 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 l 312 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 z m 759 588 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 z', - }, - ornamentTurn: { - x_min: 0, - x_max: 574, - y_min: 0, - y_max: 312, - ha: 312, - o: 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z', - }, - ornamentTurnSlash: { - x_min: 0, - x_max: 574, - y_min: -106, - y_max: 405, - ha: 511, - o: 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z', - }, - ornamentMordent: { - x_min: 0, - x_max: 700, - y_min: 0, - y_max: 497, - ha: 497, - o: 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z', - }, - ornamentShortTrill: { - x_min: 0, - x_max: 747, - y_min: 0, - y_max: 243, - ha: 243, - o: 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z', - }, - ornamentTremblement: { - x_min: 0, - x_max: 982, - y_min: 0, - y_max: 224, - ha: 224, - o: 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z', - }, - ornamentPrecompAppoggTrill: { - x_min: 0, - x_max: 1066, - y_min: -50, - y_max: 533, - ha: 583, - o: 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z', - }, - ornamentPrecompSlideTrillDAnglebert: { - x_min: 0, - x_max: 1088, - y_min: -380, - y_max: 252, - ha: 632, - o: 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z', - }, - ornamentPrecompSlideTrillBach: { - x_min: 0, - x_max: 1185, - y_min: -380, - y_max: 465, - ha: 845, - o: 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z', - }, - ornamentPrecompTrillSuffixDandrieu: { - x_min: 0, - x_max: 1003, - y_min: -20, - y_max: 521, - ha: 541, - o: 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z', - }, - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: 0, - x_max: 1246, - y_min: -30, - y_max: 296, - ha: 326, - o: 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z', - }, - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: 0, - x_max: 1226, - y_min: -237, - y_max: 436, - ha: 673, - o: 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z', - }, - ornamentPrecompTrillLowerSuffix: { - x_min: 0, - x_max: 833, - y_min: -309, - y_max: 319, - ha: 628, - o: 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z', - }, - brassScoop: { - x_min: 0, - x_max: 312, - y_min: -390, - y_max: 28, - ha: 418, - o: 'm 0 -562 b 393 -256 171 -504 307 -412 b 449 -39 431 -189 449 -115 b 448 -1 449 -26 449 -14 b 433 40 446 14 448 40 b 408 -3 410 40 412 14 b 396 -66 403 -23 402 -46 b 45 -397 346 -243 209 -337 b 0 -451 13 -409 1 -423 b 0 -562 -1 -485 0 -520 z', - }, - brassDoitMedium: { - x_min: 0, - x_max: 476, - y_min: -50, - y_max: 333, - ha: 383, - o: 'm 16 -72 b 27 -71 19 -72 23 -72 b 215 -33 89 -56 153 -48 b 521 114 327 -7 435 35 b 685 432 615 199 691 295 b 670 480 684 449 688 475 b 642 441 654 482 648 456 b 403 183 599 321 513 240 b 79 89 301 130 192 105 b 0 -1 -12 76 0 76 b 0 -50 0 -17 1 -33 b 16 -72 0 -65 3 -72 z', - }, - brassFallLipShort: { - x_min: 0, - x_max: 298, - y_min: -344, - y_max: 65, - ha: 409, - o: 'm 396 -495 b 420 -461 412 -487 418 -474 b 429 -382 428 -435 429 -409 b 426 -330 429 -364 428 -347 b 285 -6 410 -209 356 -104 b 98 94 239 59 173 94 b 39 86 79 94 58 92 b 0 49 20 81 0 73 l 0 -52 b 10 -69 0 -62 1 -69 b 20 -68 13 -69 16 -69 b 88 -56 45 -59 66 -56 b 261 -160 156 -56 213 -95 b 396 -495 333 -259 382 -369 z', - }, - brassLiftMedium: { - x_min: 0, - x_max: 807, - y_min: 0, - y_max: 838, - ha: 838, - o: 'm 50 0 b 55 1 52 0 53 0 b 58 23 65 7 59 16 b 55 58 56 36 55 48 b 130 117 55 99 75 112 b 220 213 202 121 220 141 b 315 308 220 289 238 308 l 336 308 b 408 380 393 310 406 321 b 461 452 409 438 416 452 b 485 451 468 452 477 451 b 569 510 531 448 556 464 b 573 543 572 520 572 531 b 657 619 580 605 595 618 b 698 621 670 619 684 619 b 788 700 749 625 778 649 b 798 778 792 726 793 752 b 873 857 806 841 809 845 b 985 950 927 867 973 887 b 1084 1047 1002 1035 1004 1034 b 1162 1128 1133 1056 1162 1087 b 1146 1182 1162 1145 1158 1164 b 1125 1207 1140 1191 1136 1207 l 1122 1207 b 1110 1191 1113 1205 1110 1198 b 1112 1174 1110 1185 1112 1178 b 1048 1110 1109 1126 1096 1113 b 1028 1109 1043 1110 1035 1109 b 939 1022 969 1102 948 1081 b 845 922 929 949 917 936 b 746 812 773 909 753 886 b 744 780 744 802 744 791 b 635 681 737 700 717 683 b 524 583 553 680 536 665 b 439 510 514 520 503 510 b 357 431 377 510 360 492 l 357 406 b 314 364 356 379 343 364 b 238 361 288 364 264 364 b 173 300 202 357 180 334 b 167 245 168 281 167 262 b 105 174 166 192 157 180 b 75 171 95 173 85 171 b 6 112 30 166 14 153 b 0 73 1 98 0 85 b 37 10 0 45 13 26 b 50 0 42 7 46 0 z', - }, - brassFallRoughMedium: { - x_min: 0, - x_max: 791, - y_min: 0, - y_max: 819, - ha: 819, - o: 'm 1117 0 b 1139 101 1129 26 1139 71 b 1138 121 1139 109 1139 115 b 1084 193 1125 171 1110 193 b 1044 183 1073 193 1060 189 b 1022 177 1035 179 1028 177 b 1007 209 1012 177 1008 186 b 876 324 1004 292 959 330 b 799 317 850 321 825 320 b 759 354 772 314 755 320 b 760 373 760 360 760 366 b 759 392 760 379 760 384 b 681 477 753 451 730 477 b 654 474 672 477 664 475 b 606 467 638 471 622 468 b 586 465 599 465 592 465 b 564 481 570 465 564 469 b 569 505 564 487 566 495 b 575 553 572 521 575 537 b 572 585 575 564 573 575 b 481 665 560 657 539 668 b 412 665 458 664 435 665 b 382 690 392 667 382 672 b 383 700 382 693 383 696 b 386 773 387 724 387 749 b 297 858 382 828 351 857 b 229 861 274 858 251 858 b 190 897 207 863 193 871 b 163 1012 186 936 180 976 b 79 1084 145 1050 124 1084 b 66 1083 75 1084 71 1083 b 43 1096 49 1081 43 1087 b 48 1112 43 1100 45 1106 b 53 1130 52 1119 53 1125 b 39 1169 53 1145 45 1158 b 26 1179 36 1175 30 1179 b 16 1171 22 1179 17 1176 b 0 1103 10 1149 0 1126 b 9 1067 0 1092 1 1079 b 91 1021 26 1031 52 1018 b 145 978 122 1024 141 1011 b 156 913 147 956 151 935 b 291 795 170 831 210 795 b 346 768 337 795 346 796 b 344 743 346 760 344 753 b 343 716 344 733 343 724 b 455 600 343 651 390 602 b 505 605 471 599 490 605 b 528 598 514 605 523 603 b 536 579 534 592 536 586 b 524 523 536 562 526 541 b 523 505 524 517 523 511 b 621 405 523 442 560 405 b 639 406 626 405 634 406 b 677 413 652 408 664 410 b 701 416 687 415 696 416 b 721 392 716 416 721 410 b 720 373 721 386 720 380 b 831 255 714 301 759 252 b 897 261 854 255 876 261 b 926 262 909 261 919 262 b 969 197 963 262 965 252 b 971 184 969 193 971 189 b 1031 115 979 137 998 115 b 1071 122 1043 115 1056 118 b 1096 130 1079 125 1086 127 b 1087 59 1094 107 1087 82 b 1117 0 1087 37 1094 17 z', - }, - brassBend: { - x_min: 0, - x_max: 381, - y_min: 0, - y_max: 367, - ha: 367, - o: 'm 298 0 b 472 50 359 0 418 14 b 537 135 501 71 530 92 b 543 216 543 163 543 190 l 543 266 b 544 308 543 281 543 295 b 549 433 546 354 549 395 b 543 507 549 459 547 482 b 533 528 541 516 544 528 b 511 508 524 528 514 520 b 508 478 510 498 508 488 b 504 318 507 425 504 372 b 505 264 504 300 505 282 b 446 181 505 220 484 199 b 294 150 396 160 344 150 b 92 194 226 150 158 167 b 45 269 62 207 45 230 b 46 359 46 300 46 328 b 37 497 46 405 45 451 b 27 523 36 507 37 523 b 4 498 14 524 6 513 b 3 481 3 492 3 487 b 0 409 1 456 0 433 b 4 228 0 348 4 288 b 3 177 4 210 4 194 b 68 53 1 125 20 84 b 200 10 108 27 154 17 b 298 0 233 4 266 0 z', - }, - brassMuteClosed: { - x_min: 0, - x_max: 274, - y_min: 0, - y_max: 260, - ha: 260, - o: 'm 203 0 b 209 1 206 0 207 0 b 216 13 215 4 216 9 l 215 27 l 215 153 b 216 161 216 156 216 158 b 372 164 268 163 318 164 b 395 184 383 164 395 166 l 395 189 b 357 229 392 209 386 229 b 219 228 311 229 265 228 l 223 310 b 209 357 225 328 219 344 b 189 374 203 364 197 374 b 184 373 187 374 186 373 b 177 359 179 372 177 366 l 177 348 l 173 222 l 39 222 b 0 206 12 222 0 219 b 10 174 0 199 3 189 b 46 157 19 157 30 157 b 108 160 68 158 88 160 b 171 161 130 161 150 161 l 167 58 b 184 16 167 40 171 26 b 203 0 192 12 196 0 z', - }, - brassMuteOpen: { - x_min: 1, - x_max: 313, - y_min: 0, - y_max: 309, - ha: 309, - o: 'm 265 0 b 451 189 363 7 452 88 l 451 215 b 348 383 441 285 405 343 b 209 445 288 426 248 445 b 84 379 168 445 132 420 b 69 364 79 373 73 369 b 1 213 30 323 1 275 b 230 0 1 88 94 0 z m 210 62 b 128 73 181 62 154 66 b 40 171 71 91 42 125 b 52 226 40 187 45 206 b 197 374 79 295 130 344 b 228 382 207 380 217 382 b 300 361 252 382 276 370 b 374 308 328 350 353 331 b 410 223 397 284 410 253 b 393 163 410 202 405 181 b 210 62 354 91 288 63 z', - }, - brassFlip: { - x_min: 0, - x_max: 402, - y_min: 0, - y_max: 361, - ha: 361, - o: 'm 579 0 b 511 153 579 68 557 117 b 52 504 359 271 206 387 b 29 520 45 510 39 520 b 20 517 26 520 23 518 b 0 477 3 510 0 494 l 0 125 b 17 20 1 92 1 56 b 40 84 37 40 40 60 b 42 287 40 151 42 219 l 42 363 z', - }, - brassJazzTurn: { - x_min: 0, - x_max: 646, - y_min: 0, - y_max: 212, - ha: 212, - o: 'm 310 0 b 367 33 327 0 344 10 b 389 55 374 40 382 49 b 490 145 423 85 456 114 b 507 154 495 151 501 154 b 524 144 513 154 517 151 b 598 72 547 120 575 98 b 700 24 625 42 662 24 b 765 43 721 24 744 30 b 893 147 812 72 855 105 b 930 212 910 166 923 186 b 912 215 923 213 917 215 b 871 199 896 215 883 209 b 812 153 852 183 832 167 b 789 144 805 148 796 144 b 773 156 782 144 776 147 b 691 251 757 199 720 222 b 603 301 658 282 631 301 b 527 258 580 301 556 288 b 420 156 494 222 455 190 b 399 143 412 147 405 143 b 377 157 392 143 386 147 b 259 282 340 200 300 242 b 219 305 245 298 232 305 b 177 279 204 305 192 297 b 55 127 137 228 95 177 b 0 52 36 104 20 79 b 14 50 6 50 10 50 b 53 66 32 50 45 58 b 115 131 75 88 98 108 b 135 148 124 143 130 148 b 157 132 141 148 148 143 b 252 33 186 96 219 65 b 310 0 275 12 292 0 z', - }, - brassSmear: { - x_min: 0, - x_max: 334, - y_min: 0, - y_max: 151, - ha: 151, - o: 'm 321 0 b 475 125 390 0 436 43 b 481 143 478 131 481 137 b 475 154 481 147 480 151 b 449 148 468 158 458 154 b 395 132 432 137 413 132 b 343 140 377 132 360 137 b 229 194 301 148 266 173 b 168 217 206 209 186 217 b 109 192 148 217 130 209 b 0 26 59 148 32 89 b 59 63 32 29 45 48 b 98 84 72 78 84 84 b 130 73 108 84 118 81 b 213 26 157 58 183 37 b 321 0 255 9 289 0 z', - }, - stringsDownBow: { - x_min: 0, - x_max: 306, - y_min: 0, - y_max: 366, - ha: 366, - o: 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z', - }, - stringsUpBow: { - x_min: 0, - x_max: 219, - y_min: 0, - y_max: 489, - ha: 489, - o: 'm 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z', - }, - stringsHarmonic: { - x_min: 0, - x_max: 191, - y_min: 0, - y_max: 202, - ha: 202, - o: 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z', - }, - pluckedSnapPizzicatoAbove: { - x_min: 0, - x_max: 201, - y_min: 0, - y_max: 325, - ha: 325, - o: 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z', - }, - pluckedSnapPizzicatoBelow: { - x_min: 0, - x_max: 211, - y_min: 0, - y_max: 307, - ha: 307, - o: 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z', - }, - pluckedLeftHandPizzicato: { - x_min: 0, - x_max: 271, - y_min: 0, - y_max: 284, - ha: 284, - o: 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z', - }, - keyboardPedalPed: { - x_min: 0, - x_max: 944, - y_min: -13, - y_max: 550, - ha: 563, - o: 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z', - }, - keyboardPedalUp: { - x_min: 0, - x_max: 437, - y_min: 0, - y_max: 461, - ha: 461, - o: 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z', - }, - pictChokeCymbal: { - x_min: 1, - x_max: 147, - y_min: 0, - y_max: 242, - ha: 242, - o: 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z', - }, - wiggleArpeggiatoUp: { - x_min: -22, - x_max: 300, - y_min: 0, - y_max: 176, - ha: 176, - o: 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z', - }, - arpeggiatoUp: { - x_min: 0, - x_max: 262, - y_min: 0, - y_max: 1459, - ha: 1459, - o: 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z', - }, - arpeggiatoDown: { - x_min: 0, - x_max: 218, - y_min: 0, - y_max: 1440, - ha: 1440, - o: 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z', - }, - repeat1Bar: { - x_min: 0, - x_max: 599, - y_min: -250, - y_max: 175, - ha: 425, - o: 'm 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z', - }, - repeat2Bars: { - x_min: 0, - x_max: 775, - y_min: -247, - y_max: 363, - ha: 610, - o: 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 l 91 -179 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 l 233 269 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 l 924 -153 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z', - }, - repeat4Bars: { - x_min: 0, - x_max: 1374, - y_min: -304, - y_max: 304, - ha: 608, - o: 'm 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z', - }, - repeatBarSlash: { - x_min: 0, - x_max: 630, - y_min: -225, - y_max: 265, - ha: 490, - o: 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z', - }, - csymDiminished: { - x_min: 0, - x_max: 506, - y_min: 0, - y_max: 500, - ha: 500, - o: 'm 397 0 b 729 265 576 -1 729 95 b 711 367 729 297 723 331 b 472 670 668 498 586 595 b 315 720 423 701 372 720 b 253 713 295 720 275 719 b 32 514 144 687 75 615 b 0 374 12 468 0 420 b 27 251 0 333 9 292 b 140 117 52 196 92 153 b 397 0 223 52 317 4 z m 340 95 b 132 314 233 84 122 216 b 324 589 145 438 200 539 b 415 611 360 603 389 611 b 544 505 469 611 505 576 b 590 392 564 471 583 432 b 596 343 593 374 596 359 b 340 95 596 210 485 96 z', - }, - csymHalfDiminished: { - x_min: -32, - x_max: 496, - y_min: -33, - y_max: 492, - ha: 525, - o: 'm -29 -48 b 0 -36 -19 -48 -9 -40 b 17 -20 7 -32 12 -24 b 134 94 56 19 95 56 b 372 0 207 43 282 0 b 455 13 397 0 426 4 b 677 258 556 45 671 141 b 678 289 677 268 678 278 b 593 539 678 380 654 467 b 592 541 593 540 592 540 l 684 632 b 713 678 700 647 711 665 b 714 691 714 684 714 688 b 707 704 714 698 711 701 b 691 708 701 707 696 708 b 660 691 680 708 670 701 l 552 585 b 478 634 530 606 507 624 b 361 684 438 648 397 661 b 301 703 341 697 320 703 b 226 677 275 703 251 693 b 27 449 140 618 72 543 b 0 324 9 410 -4 370 b 88 128 -1 243 30 177 b -30 -7 43 86 0 46 b -46 -33 -35 -16 -46 -24 b -42 -42 -46 -36 -45 -39 b -29 -48 -37 -46 -33 -48 z m 141 179 b 121 251 128 200 121 225 b 128 297 121 265 124 281 b 351 575 163 420 248 505 b 377 582 359 579 369 580 b 501 536 422 586 468 567 b 141 179 382 416 261 298 z m 281 105 b 179 137 240 105 206 117 b 210 168 189 147 200 157 l 537 487 b 547 455 541 477 544 467 b 556 370 552 426 556 397 b 429 154 556 274 503 207 b 281 105 384 122 336 105 z', - }, - csymAugmented: { - x_min: 0, - x_max: 530, - y_min: 0, - y_max: 539, - ha: 539, - o: 'm 380 0 b 393 14 384 4 390 9 b 397 46 397 24 397 36 l 397 333 b 736 327 511 331 624 330 b 763 343 755 327 763 333 b 755 361 763 348 760 354 b 635 431 726 402 688 431 l 390 431 l 390 485 b 386 606 392 526 386 566 b 392 664 386 625 387 645 b 395 690 393 672 395 681 b 376 753 395 711 389 734 b 357 776 372 762 369 776 b 350 775 354 776 353 776 b 327 740 337 769 327 759 b 327 621 328 700 327 661 b 330 438 328 559 328 498 l 29 438 b 4 431 20 438 7 442 b 0 413 3 425 0 419 b 7 399 0 408 1 403 b 131 338 45 369 85 340 b 331 334 199 336 265 334 b 333 163 333 276 333 220 b 366 13 333 109 348 63 b 380 0 367 7 374 4 z', - }, - csymMajorSeventh: { - x_min: 0, - x_max: 593, - y_min: 0, - y_max: 569, - ha: 569, - o: 'm 124 1 l 497 27 b 819 50 605 35 711 43 b 854 98 847 52 855 63 b 812 200 845 128 835 166 b 564 585 730 328 648 456 b 435 786 521 652 480 720 b 397 819 419 809 408 819 b 369 792 387 819 379 811 b 7 173 248 585 128 379 b 0 150 3 166 0 158 b 7 128 0 143 3 135 b 89 10 30 86 65 50 b 109 0 95 1 102 0 z m 163 147 b 153 153 158 147 156 148 b 164 179 147 163 158 170 b 426 644 251 334 338 488 b 442 660 432 655 436 660 b 458 645 446 660 452 655 b 727 220 547 503 636 361 b 736 202 732 213 736 206 b 714 190 736 196 730 192 b 179 148 537 177 359 163 b 163 147 174 150 168 147 z', - }, - csymMinor: { - x_min: 0, - x_max: 482, - y_min: 193, - y_max: 265, - ha: 72, - o: 'm 168 278 b 197 279 177 278 187 278 b 431 292 275 287 353 288 l 431 291 b 661 302 508 295 585 300 b 693 311 672 304 688 300 b 674 346 697 324 685 338 b 564 382 641 366 606 384 l 27 360 b 0 347 17 360 1 366 b 19 314 0 333 3 321 b 168 278 66 291 115 278 z', - }, - csymParensLeftTall: { - x_min: 0, - x_max: 185, - y_min: 0, - y_max: 1034, - ha: 1034, - o: 'm 215 0 b 226 17 223 1 223 10 b 229 37 229 24 229 32 b 220 81 229 52 225 66 b 167 203 206 124 181 160 b 86 616 124 338 89 474 b 82 765 85 665 82 716 b 91 886 82 805 84 845 b 245 1319 120 1038 171 1184 b 266 1397 259 1346 266 1371 b 259 1443 266 1411 264 1427 b 226 1489 253 1463 248 1489 b 193 1454 212 1489 203 1467 b 114 1292 158 1404 140 1346 b 0 806 40 1138 0 978 b 3 721 0 779 0 750 b 1 677 1 707 1 693 b 36 418 1 593 16 504 b 144 96 62 307 95 199 b 196 12 158 66 179 39 b 212 0 200 7 204 0 z', - }, - csymParensRightTall: { - x_min: -40, - x_max: 189, - y_min: 0, - y_max: 1058, - ha: 1058, - o: 'm 30 1 b 63 14 42 -3 55 6 b 122 99 86 40 108 68 b 189 258 145 153 166 204 b 271 667 239 379 268 503 b 246 852 275 708 261 780 b 10 1495 197 1077 128 1295 b -14 1524 4 1505 1 1524 b -16 1522 -14 1524 -16 1524 b -46 1489 -33 1521 -43 1503 b -58 1417 -53 1464 -58 1440 b -36 1335 -58 1390 -52 1364 b 68 1138 0 1270 35 1204 b 163 883 108 1056 137 969 b 206 668 184 814 200 742 b 207 631 207 655 207 642 b 166 426 207 560 192 492 b 46 143 130 330 111 228 b 19 29 19 109 17 69 b 30 1 20 19 24 3 z', - }, - csymBracketLeftTall: { - x_min: 0, - x_max: 328, - y_min: 2, - y_max: 807, - ha: 805, - o: 'm 68 3 b 76 4 71 3 73 3 b 186 13 112 12 150 13 b 240 13 204 13 222 13 l 287 13 b 379 17 317 13 348 13 b 472 121 435 24 472 69 b 467 156 472 132 469 144 b 446 174 462 168 456 174 l 439 174 b 327 166 402 167 364 166 b 265 167 307 166 285 167 l 209 167 b 187 475 199 269 189 372 b 166 985 186 645 187 815 l 377 1002 b 415 1001 389 1002 402 1001 b 456 1027 432 1001 448 1005 b 472 1096 467 1048 472 1073 b 464 1146 472 1113 469 1130 b 439 1162 459 1161 452 1162 b 40 1129 305 1151 173 1139 b 1 1093 17 1128 1 1120 b 0 1009 0 1064 0 1037 b 13 975 0 991 3 981 b 30 670 23 873 30 772 b 29 608 30 649 29 628 l 29 563 b 56 88 29 405 49 246 b 53 22 55 66 55 43 b 68 3 53 12 56 3 z', - }, - csymBracketRightTall: { - x_min: 1, - x_max: 306, - y_min: 0, - y_max: 829, - ha: 829, - o: 'm 117 0 b 372 29 203 -3 287 20 l 373 29 b 406 32 383 30 395 30 b 436 60 428 33 432 43 b 441 109 439 76 441 92 b 433 200 441 140 436 170 b 409 696 422 366 409 530 b 416 887 409 763 416 831 b 415 920 416 899 415 910 l 415 1106 b 412 1135 415 1116 415 1126 l 412 1145 b 373 1189 413 1171 408 1192 b 321 1189 356 1189 338 1189 l 215 1189 l 215 1194 l 56 1194 b 6 1153 27 1195 10 1187 b 1 1064 3 1123 4 1093 b 22 1043 0 1050 6 1043 b 84 1044 42 1044 63 1044 b 264 1038 144 1044 203 1040 b 265 958 264 1011 265 985 b 262 845 265 920 264 883 b 259 710 259 801 259 755 b 279 243 259 554 271 399 b 285 170 281 219 284 194 b 95 151 222 161 158 156 b 29 81 27 147 27 147 l 29 73 b 105 0 33 0 33 0 z', - }, - csymParensLeftVeryTall: { - x_min: 0, - x_max: 116, - y_min: 0, - y_max: 934, - ha: 934, - o: 'm 128 0 b 147 17 137 0 144 9 b 167 102 160 45 167 73 b 158 154 167 120 164 137 b 117 307 141 204 130 256 b 63 698 84 435 71 567 b 62 788 62 729 62 757 b 69 916 62 829 63 873 b 109 1172 81 1001 94 1087 b 132 1320 118 1221 137 1269 b 124 1345 131 1329 134 1342 b 96 1332 114 1346 102 1341 b 71 1269 82 1313 75 1292 b 39 1104 59 1214 48 1159 b 0 742 19 988 0 871 b 10 559 3 688 6 624 b 58 226 16 446 33 336 b 112 20 73 157 94 89 b 128 0 115 13 118 0 z', - }, - csymParensRightVeryTall: { - x_min: -20, - x_max: 111, - y_min: 0, - y_max: 1009, - ha: 1009, - o: 'm -3 0 b 20 22 9 -1 14 12 b 36 56 26 33 32 45 b 99 274 58 128 84 199 b 160 788 135 439 163 605 b 122 1181 164 912 145 1047 b 50 1431 108 1267 86 1351 b 36 1453 48 1439 46 1453 l 35 1453 l 30 1453 b 7 1423 17 1449 7 1440 b 27 1287 9 1377 10 1331 b 96 963 71 1184 85 1074 b 105 818 102 914 105 867 b 91 624 105 753 99 688 b -4 213 72 484 48 344 b -29 101 -19 174 -29 138 b -16 27 -29 76 -24 52 b -3 0 -13 17 -14 3 z', - }, - csymDiagonalArrangementSlash: { - x_min: 0, - x_max: 990, - y_min: -27, - y_max: 1028, - ha: 1054, - o: 'm 14 -37 b 58 -9 35 -45 46 -22 b 392 333 170 105 279 217 l 765 711 b 1372 1329 968 916 1168 1125 b 1424 1439 1403 1359 1417 1397 b 1426 1457 1424 1444 1426 1450 b 1416 1477 1426 1466 1423 1475 b 1374 1462 1400 1485 1385 1473 b 1181 1269 1309 1397 1246 1331 b 736 831 1031 1122 884 979 b 356 452 609 704 485 576 b 32 132 246 347 143 236 b 0 50 7 109 1 84 b 6 9 -1 37 3 23 b 14 -37 10 -9 0 -32 z', - }, - accidentalNarrowReversedFlat: { - x_min: 0, - x_max: 208, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 272 -333 b 284 -320 278 -333 281 -328 b 300 -174 297 -272 300 -222 b 275 190 298 -52 279 68 b 268 445 272 275 268 360 l 268 490 b 264 612 269 530 265 572 b 236 647 264 632 252 645 l 235 647 b 217 618 220 647 220 628 b 207 526 210 588 207 556 b 210 432 207 494 210 464 b 216 268 213 377 215 323 l 216 230 l 215 232 b 154 256 194 240 174 251 b 111 264 138 261 124 264 b 3 153 50 264 10 223 b 0 94 0 132 0 114 b 194 -276 0 -63 68 -186 b 255 -323 215 -291 236 -307 b 272 -333 262 -330 268 -333 z m 233 -138 b 71 30 168 -92 105 -45 b 63 59 65 42 63 50 b 96 95 62 75 73 86 b 130 102 108 99 120 102 b 215 76 160 102 187 88 l 220 73 b 225 -22 220 42 222 10 b 233 -138 229 -62 230 -101 z', - }, - accidentalNarrowReversedFlatAndFlat: { - x_min: 0, - x_max: 335, - y_min: -231, - y_max: 449, - ha: 680, - o: 'm 151 490 b 148 612 151 530 150 572 b 132 647 148 632 141 645 b 122 618 124 647 124 628 b 117 526 118 588 117 556 b 118 432 117 494 118 464 b 121 268 120 377 121 323 l 121 232 b 86 256 109 240 98 251 b 62 264 78 261 69 264 b 1 153 29 264 6 223 b 0 94 0 132 0 114 b 109 -276 0 -63 37 -186 b 144 -323 121 -291 132 -307 b 153 -333 147 -330 151 -333 b 160 -320 157 -333 158 -328 b 168 -174 167 -272 168 -222 b 154 190 168 -52 157 68 b 151 445 153 275 151 360 z m 480 153 b 372 264 472 223 432 264 b 328 256 359 264 344 261 b 268 232 308 251 288 240 l 266 230 l 266 268 b 272 432 266 323 269 377 b 275 526 272 464 275 494 b 265 618 275 556 272 588 b 248 647 262 628 262 647 l 246 647 b 219 612 230 645 219 632 b 215 490 217 572 213 530 l 215 445 b 207 190 215 360 210 275 b 183 -174 203 68 183 -52 b 199 -320 183 -222 186 -272 b 210 -333 202 -328 204 -333 b 228 -323 215 -333 220 -330 b 288 -276 246 -307 268 -291 b 482 94 415 -186 482 -63 b 480 153 482 114 482 132 z m 40 30 b 36 59 36 42 36 50 b 55 95 35 75 42 86 b 73 102 60 99 68 102 b 121 76 89 102 105 88 l 124 73 b 127 -22 124 42 125 10 l 131 -138 b 40 30 95 -92 60 -43 z m 419 59 b 412 30 419 50 418 42 b 249 -138 374 -43 314 -92 b 258 -22 252 -101 253 -62 b 262 73 261 10 262 42 l 268 76 b 353 102 295 88 323 102 b 386 95 363 102 374 99 b 419 59 409 86 420 75 z', - }, - accidentalWilsonPlus: { - x_min: 0, - x_max: 298, - y_min: -218, - y_max: 218, - ha: 436, - o: 'm 232 -314 b 236 -301 236 -310 236 -305 l 236 -295 b 243 -52 239 -213 242 -132 l 369 62 b 429 200 413 101 425 147 b 416 243 429 216 428 236 b 383 225 406 251 393 232 l 377 220 b 246 98 336 177 291 138 b 249 242 248 145 246 193 b 225 304 251 265 242 287 b 209 314 220 308 215 314 b 204 312 207 314 206 312 b 196 292 196 310 196 300 b 193 184 194 256 194 220 b 187 48 192 140 190 94 b 46 -72 141 7 94 -32 b 0 -163 13 -98 0 -127 b 1 -187 0 -170 0 -179 b 10 -235 4 -203 6 -219 b 20 -255 12 -242 14 -251 b 36 -245 26 -259 30 -249 b 181 -109 85 -200 132 -154 b 176 -258 180 -158 176 -209 b 232 -314 176 -298 186 -307 z', - }, - accidentalWilsonMinus: { - x_min: 0, - x_max: 284, - y_min: -163, - y_max: 163, - ha: 326, - o: 'm 386 -232 b 409 -163 415 -222 408 -180 b 382 -69 410 -120 408 -89 b 32 228 264 30 141 118 b 17 235 26 233 22 235 b 3 219 9 235 3 228 b 0 157 3 199 0 179 b 29 69 0 125 6 95 b 323 -194 115 -29 222 -111 b 374 -235 338 -206 353 -235 b 386 -232 377 -235 382 -233 z', - }, - }, - fontFamily: 'Petaluma', - resolution: 1000, - generatedOn: '2022-12-18T09:07:50.817Z', -}; diff --git a/build/esm/src/fonts/petaluma_metrics.js b/build/esm/src/fonts/petaluma_metrics.js deleted file mode 100644 index 484239e568..0000000000 --- a/build/esm/src/fonts/petaluma_metrics.js +++ /dev/null @@ -1,542 +0,0 @@ -export const PetalumaMetrics = { - name: 'Petaluma', - smufl: true, - stave: { - padding: 15, - endPaddingMax: 15, - endPaddingMin: 7, - unalignedNotePadding: 12, - }, - accidental: { - noteheadAccidentalPadding: 1, - leftPadding: 2, - accidentalSpacing: 3, - }, - chordSymbol: { - global: { - superscriptOffset: -400, - subscriptOffset: 300, - kerningOffset: -150, - lowerKerningText: ['D', 'F', 'P', 'T', 'V', 'Y'], - upperKerningText: ['L'], - spacing: 20, - superSubRatio: 0.73, - }, - glyphs: { - csymDiminished: { - leftSideBearing: -95, - advanceWidth: 506, - yOffset: 0, - }, - csymHalfDiminished: { - leftSideBearing: -32, - advanceWidth: 506, - yOffset: 0, - }, - csymAugmented: { - leftSideBearing: -25, - advanceWidth: 530, - yOffset: 0, - }, - csymParensLeftTall: { - leftSideBearing: 0, - advanceWidth: 155, - yOffset: 150, - }, - csymParensRightTall: { - leftSideBearing: 40, - advanceWidth: 189, - yOffset: 150, - }, - csymBracketLeftTall: { - leftSideBearing: 0, - advanceWidth: 328, - yOffset: 0, - }, - csymBracketRightTall: { - leftSideBearing: 1, - advanceWidth: 600, - yOffset: 0, - }, - csymParensLeftVeryTall: { - leftSideBearing: 0, - advanceWidth: 210, - yOffset: 250, - }, - csymParensRightVeryTall: { - leftSideBearing: -100, - advanceWidth: 111, - yOffset: 250, - }, - csymDiagonalArrangementSlash: { - leftSideBearing: -1, - advanceWidth: 990, - yOffset: 0, - }, - csymMinor: { - leftSideBearing: 0, - advanceWidth: 482, - yOffset: 0, - }, - csymMajorSeventh: { - leftSideBearing: 100, - yOffset: 0, - advanceWidth: 600, - }, - accidentalSharp: { - leftSideBearing: 0, - advanceWidth: 425, - yOffset: -422, - }, - accidentalFlat: { - leftSideBearing: -10, - advanceWidth: 228, - yOffset: -284, - }, - }, - }, - clef_default: { - width: 26, - annotations: { - '8va': { - point: 18, - treble: { - line: -1.4, - shiftX: 12, - }, - }, - '8vb': { - point: 18, - treble: { - line: 6, - shiftX: 10, - }, - bass: { - line: 3.5, - shiftX: 1, - }, - }, - }, - }, - clef_small: { - width: 20, - annotations: { - '8va': { - point: 16, - treble: { - line: -0.2, - shiftX: 8, - }, - }, - '8vb': { - point: 16, - treble: { - line: 5.3, - shiftX: 6, - }, - bass: { - line: 3.1, - shiftX: 0.5, - }, - }, - }, - }, - ornament: { - brassScoop: { - xOffset: -12, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassDoitMedium: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassFallLipShort: { - xOffset: 16, - yOffset: 0, - stemUpYOffset: 0, - reportedWidth: 19, - }, - brassLiftMedium: { - xOffset: 16, - yOffset: 5, - stemUpYOffset: 0, - reportedWidth: 15, - }, - brassFallRoughMedium: { - xOffset: 16, - yOffset: 26, - stemUpYOffset: 0, - reportedWidth: 5, - }, - brassBend: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 28, - reportedWidth: 5, - }, - brassMuteClosed: { - xOffset: 3, - yOffset: -8, - stemUpYOffset: 26, - reportedWidth: 5, - }, - brassMuteOpen: { - xOffset: 4, - yOffset: -8, - stemUpYOffset: 27, - reportedWidth: 5, - }, - brassFlip: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 7, - reportedWidth: 5, - }, - brassJazzTurn: { - xOffset: 6, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 30, - }, - brassSmear: { - xOffset: 10, - yOffset: -4, - stemUpYOffset: 5, - reportedWidth: 5, - }, - }, - parenthesis: { - default: { - point: 39, - width: 7, - }, - gracenote: { - point: (39 * 3) / 5, - width: 3, - }, - }, - pedalMarking: { - up: { - point: 40, - }, - down: { - point: 34, - }, - }, - digits: { - shiftLine: -1, - point: 22, - tupletPoint: 16, - shiftY: -2, - }, - articulation: { - articStaccatissimoAbove: { - padding: 2, - }, - articStaccatissimoBelow: { - padding: 2, - }, - }, - tremolo: { - default: { - point: 25, - spacing: 5, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 13, - offsetXStemDown: 1, - }, - grace: { - point: 18, - spacing: 4, - offsetYStemUp: -5, - offsetYStemDown: 5, - offsetXStemUp: 8, - offsetXStemDown: 1, - }, - }, - staveRepetition: { - symbolText: { - offsetX: 12, - offsetY: 25, - spacing: 5, - }, - coda: { - offsetY: 25, - }, - segno: { - offsetY: 10, - }, - }, - noteHead: { - minPadding: 2, - displacedShiftX: -2, - }, - stem: { - heightAdjustmentForFlag: -3, - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpBlack: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadTriangleUpWhole: { - offsetYBaseStemUp: 5, - offsetYBaseStemDown: 4, - }, - noteheadXHalf: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXBlack: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadXWhole: { - offsetYBaseStemUp: -4, - offsetYBaseStemDown: 4, - }, - noteheadHalf: { - offsetYBaseStemDown: 1.8, - offsetYBaseStemUp: -1.8, - }, - noteheadBlack: { - offsetYBaseStemDown: 2, - offsetYBaseStemUp: -2, - }, - noteheadSquareWhite: { - offsetYBaseStemDown: -5, - offsetYBaseStemUp: 5, - }, - }, - }, - stringNumber: { - verticalPadding: 8, - stemPadding: 2, - leftPadding: 5, - rightPadding: 6, - }, - tuplet: { - noteHeadOffset: 20, - stemOffset: 10, - bottomLine: 4, - topModifierOffset: 20, - }, - glyphs: { - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - segno: { - shiftX: -7, - }, - flag: { - shiftX: -0.77, - flag16thUp: { - shiftX: -0.75, - }, - flag32ndUp: { - shiftX: -0.85, - }, - flag64thUp: { - shiftX: -1.55, - }, - flag128thUp: { - shiftX: -1.3, - }, - flag16thDown: { - shiftX: -0.75, - }, - flag32ndDown: { - shiftX: -0.76, - }, - flag64thDown: { - shiftX: -1.5, - }, - flag128thDown: { - shiftX: -1.2, - }, - staveTempo: { - shiftX: -1, - }, - }, - clef_default: { - point: 32, - gClef: { - scale: 1.1, - shiftY: 1, - }, - fClef: { - shiftY: -0.5, - }, - '6stringTabClef': { - point: 32, - shiftY: -5.5, - }, - }, - clef_small: { - point: 26, - gClef: { - shiftY: 1.5, - }, - }, - clefNote_default: { - point: 32, - }, - clefNote_small: { - point: 26, - }, - ornament: { - ornamentTurn: { - scale: 1.2, - }, - ornamentTurnSlash: { - scale: 1.2, - }, - brassScoop: { - scale: 1.0, - }, - brassDoitMedium: { - scale: 1.0, - }, - brassFallLipShort: { - scale: 1.0, - }, - brassLiftMedium: { - scale: 1.0, - }, - brassFallRoughMedium: { - scale: 1.0, - }, - brassBend: { - scale: 1.0, - }, - brassMuteClosed: { - scale: 1.0, - }, - brassMuteOpen: { - scale: 1.0, - }, - brassFlip: { - scale: 1.0, - }, - brassJazzTurn: { - scale: 1.0, - }, - brassSmear: { - scale: 1.0, - }, - }, - stroke_straight: { - arrowheadBlackDown: { - shiftX: -4.5, - }, - arrowheadBlackUp: { - shiftX: -0.85, - }, - }, - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: -1, - shiftY: 1, - }, - arrowheadBlackUp: { - shiftX: -1, - shiftY: 1, - }, - }, - textNote: { - point: 34, - breathMarkTick: { - point: 36, - shiftY: 9, - }, - breathMarkComma: { - point: 36, - }, - segno: { - point: 30, - shiftX: -7, - shiftY: 8, - }, - coda: { - point: 20, - shiftX: -7, - shiftY: 8, - }, - ornamentTrill: { - shiftX: -10, - shiftY: 8, - }, - ornamentMordent: { - shiftX: -8, - }, - ornamentShortTrill: { - shiftX: -8, - }, - }, - noteHead: { - noteheadBlackStemUp: { - shiftX: 0.5, - }, - noteheadHalfStemUp: { - shiftX: 0.725, - }, - noteheadWholeStemUp: { - shiftX: 1, - }, - }, - chordSymbol: { - csymDiminished: { - scale: 0.8, - }, - csymHalfDiminished: { - scale: 0.8, - }, - csymAugmented: { - scale: 1, - }, - csymParensLeftTall: { - scale: 0.8, - }, - csymParensRightTall: { - scale: 0.8, - }, - csymBracketLeftTall: { - scale: 0.8, - }, - csymBracketRightTall: { - scale: 0.8, - }, - csymParensLeftVeryTall: { - scale: 0.95, - }, - csymParensRightVeryTall: { - scale: 0.9, - }, - csymDiagonalArrangementSlash: { - scale: 0.6, - }, - csymMinor: { - scale: 0.7, - }, - csymMajorSeventh: { - scale: 0.8, - }, - accidentalSharp: { - scale: 0.7, - }, - accidentalFlat: { - scale: 0.8, - }, - }, - }, -}; diff --git a/build/esm/src/fonts/petalumascript_glyphs.js b/build/esm/src/fonts/petalumascript_glyphs.js deleted file mode 100644 index 2589c61a67..0000000000 --- a/build/esm/src/fonts/petalumascript_glyphs.js +++ /dev/null @@ -1,863 +0,0 @@ -export const PetalumaScriptFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 250, - y_min: 0, - y_max: 500, - ha: 500, - leftSideBearing: 0, - advanceWidth: 250, - }, - '0': { - x_min: 33, - x_max: 534, - y_min: -13, - y_max: 751, - ha: 764, - leftSideBearing: 33, - advanceWidth: 570, - }, - '1': { - x_min: 48, - x_max: 235, - y_min: -17, - y_max: 734, - ha: 751, - leftSideBearing: 48, - advanceWidth: 286, - }, - '2': { - x_min: 56, - x_max: 571, - y_min: -19, - y_max: 741, - ha: 760, - leftSideBearing: 56, - advanceWidth: 626, - }, - '3': { - x_min: 50, - x_max: 528, - y_min: -7, - y_max: 731, - ha: 738, - leftSideBearing: 50, - advanceWidth: 589, - }, - '4': { - x_min: 38, - x_max: 564, - y_min: -13, - y_max: 743, - ha: 756, - leftSideBearing: 38, - advanceWidth: 614, - }, - '5': { - x_min: 42, - x_max: 601, - y_min: -34, - y_max: 743, - ha: 777, - leftSideBearing: 42, - advanceWidth: 648, - }, - '6': { - x_min: 47, - x_max: 606, - y_min: -16, - y_max: 743, - ha: 759, - leftSideBearing: 47, - advanceWidth: 667, - }, - '7': { - x_min: 47, - x_max: 567, - y_min: 5, - y_max: 739, - ha: 734, - leftSideBearing: 0, - advanceWidth: 615, - }, - '8': { - x_min: 40, - x_max: 541, - y_min: -15, - y_max: 752, - ha: 767, - leftSideBearing: 40, - advanceWidth: 585, - }, - '9': { - x_min: 40, - x_max: 537, - y_min: -52, - y_max: 736, - ha: 788, - leftSideBearing: 40, - advanceWidth: 592, - }, - '!': { - x_min: 49, - x_max: 180, - y_min: -7, - y_max: 761, - ha: 768, - leftSideBearing: 49, - advanceWidth: 230, - }, - '"': { - x_min: 39, - x_max: 304, - y_min: 596, - y_max: 804, - ha: 208, - leftSideBearing: 39, - advanceWidth: 353, - }, - '#': { - x_min: 33, - x_max: 599, - y_min: -8, - y_max: 765, - ha: 773, - leftSideBearing: 33, - advanceWidth: 648, - }, - $: { - x_min: 53, - x_max: 495, - y_min: -111, - y_max: 823, - ha: 934, - leftSideBearing: 53, - advanceWidth: 560, - }, - '%': { - x_min: 35, - x_max: 656, - y_min: -128, - y_max: 808, - ha: 936, - leftSideBearing: 35, - advanceWidth: 711, - }, - '&': { - x_min: 53, - x_max: 441, - y_min: -3, - y_max: 753, - ha: 756, - leftSideBearing: 53, - advanceWidth: 500, - }, - "'": { - x_min: 43, - x_max: 161, - y_min: 590, - y_max: 811, - ha: 221, - leftSideBearing: 43, - advanceWidth: 217, - }, - '(': { - x_min: 41, - x_max: 311, - y_min: -36, - y_max: 845, - ha: 881, - leftSideBearing: 41, - advanceWidth: 308, - }, - ')': { - x_min: -8, - x_max: 257, - y_min: -21, - y_max: 852, - ha: 873, - leftSideBearing: -8, - advanceWidth: 280, - }, - '*': { - x_min: 59, - x_max: 539, - y_min: 175, - y_max: 589, - ha: 414, - leftSideBearing: 59, - advanceWidth: 601, - }, - '+': { - x_min: 33, - x_max: 361, - y_min: 180, - y_max: 587, - ha: 407, - leftSideBearing: 33, - advanceWidth: 400, - }, - ',': { - x_min: 15, - x_max: 176, - y_min: -129, - y_max: 92, - ha: 221, - leftSideBearing: 15, - advanceWidth: 205, - }, - '-': { - x_min: 40, - x_max: 380, - y_min: 317, - y_max: 452, - ha: 135, - leftSideBearing: 40, - advanceWidth: 422, - }, - '.': { - x_min: 48, - x_max: 185, - y_min: -56, - y_max: 84, - ha: 140, - leftSideBearing: 48, - advanceWidth: 227, - }, - '/': { - x_min: -58, - x_max: 654, - y_min: -122, - y_max: 844, - ha: 966, - leftSideBearing: -58, - advanceWidth: 626, - }, - ':': { - x_min: 65, - x_max: 225, - y_min: 97, - y_max: 536, - ha: 439, - leftSideBearing: 65, - advanceWidth: 302, - }, - ';': { - x_min: 13, - x_max: 295, - y_min: -139, - y_max: 536, - ha: 675, - leftSideBearing: 13, - advanceWidth: 334, - }, - '<': { - x_min: 28, - x_max: 438, - y_min: -1, - y_max: 607, - ha: 608, - leftSideBearing: 28, - advanceWidth: 475, - }, - '=': { - x_min: 40, - x_max: 383, - y_min: 199.9598640852289, - y_max: 541, - ha: 341.0401359147711, - leftSideBearing: 40, - advanceWidth: 422, - }, - '>': { - x_min: 35, - x_max: 421, - y_min: 28, - y_max: 632, - ha: 604, - leftSideBearing: 35, - advanceWidth: 466, - }, - '?': { - x_min: 45, - x_max: 548, - y_min: -17, - y_max: 767, - ha: 784, - leftSideBearing: 45, - advanceWidth: 592, - }, - '@': { - x_min: 51, - x_max: 730, - y_min: -78, - y_max: 753, - ha: 831, - leftSideBearing: 51, - advanceWidth: 781, - }, - A: { - x_min: 37, - x_max: 554, - y_min: -4, - y_max: 746, - ha: 750, - leftSideBearing: 37, - advanceWidth: 617, - }, - B: { - x_min: 37, - x_max: 532, - y_min: 3, - y_max: 783, - ha: 780, - leftSideBearing: 37, - advanceWidth: 579, - }, - C: { - x_min: 37, - x_max: 583, - y_min: -3, - y_max: 775, - ha: 778, - leftSideBearing: 37, - advanceWidth: 623, - }, - D: { - x_min: 50, - x_max: 530, - y_min: -15, - y_max: 749, - ha: 764, - leftSideBearing: 50, - advanceWidth: 579, - }, - E: { - x_min: 45, - x_max: 531, - y_min: -1, - y_max: 743, - ha: 744, - leftSideBearing: 45, - advanceWidth: 585, - }, - F: { - x_min: 45, - x_max: 459, - y_min: 23, - y_max: 727, - ha: 704, - leftSideBearing: 45, - advanceWidth: 510, - }, - G: { - x_min: 31, - x_max: 577, - y_min: -8, - y_max: 733, - ha: 741, - leftSideBearing: 31, - advanceWidth: 611, - }, - H: { - x_min: 37, - x_max: 493, - y_min: -22, - y_max: 758, - ha: 780, - leftSideBearing: 37, - advanceWidth: 535, - }, - I: { - x_min: 47, - x_max: 501, - y_min: -3, - y_max: 731, - ha: 734, - leftSideBearing: 47, - advanceWidth: 541, - }, - J: { - x_min: 33, - x_max: 531, - y_min: -23, - y_max: 725, - ha: 748, - leftSideBearing: 33, - advanceWidth: 573, - }, - K: { - x_min: 43, - x_max: 505, - y_min: -10, - y_max: 740, - ha: 750, - leftSideBearing: 43, - advanceWidth: 560, - }, - L: { - x_min: 49, - x_max: 457, - y_min: -2, - y_max: 746, - ha: 748, - leftSideBearing: 49, - advanceWidth: 510, - }, - M: { - x_min: 35, - x_max: 699, - y_min: 1, - y_max: 744, - ha: 743, - leftSideBearing: 35, - advanceWidth: 743, - }, - N: { - x_min: 34, - x_max: 533, - y_min: -17, - y_max: 761, - ha: 778, - leftSideBearing: 34, - advanceWidth: 579, - }, - O: { - x_min: 41, - x_max: 608, - y_min: -5, - y_max: 735, - ha: 740, - leftSideBearing: 41, - advanceWidth: 667, - }, - P: { - x_min: 53, - x_max: 451, - y_min: -18, - y_max: 735, - ha: 753, - leftSideBearing: 53, - advanceWidth: 497, - }, - Q: { - x_min: 40, - x_max: 599, - y_min: -67, - y_max: 744, - ha: 811, - leftSideBearing: 40, - advanceWidth: 648, - }, - R: { - x_min: 39, - x_max: 487, - y_min: 16, - y_max: 735, - ha: 719, - leftSideBearing: 39, - advanceWidth: 535, - }, - S: { - x_min: 35, - x_max: 552, - y_min: -47, - y_max: 708, - ha: 755, - leftSideBearing: 35, - advanceWidth: 604, - }, - T: { - x_min: 26, - x_max: 656, - y_min: -13, - y_max: 718, - ha: 731, - leftSideBearing: 26, - advanceWidth: 705, - }, - U: { - x_min: 41, - x_max: 518, - y_min: -20, - y_max: 748, - ha: 768, - leftSideBearing: 41, - advanceWidth: 567, - }, - V: { - x_min: 47, - x_max: 509, - y_min: -26, - y_max: 744, - ha: 770, - leftSideBearing: 47, - advanceWidth: 567, - }, - W: { - x_min: 44, - x_max: 789, - y_min: -35, - y_max: 720, - ha: 755, - leftSideBearing: 44, - advanceWidth: 833, - }, - X: { - x_min: 63, - x_max: 635, - y_min: -10, - y_max: 745, - ha: 755, - leftSideBearing: 63, - advanceWidth: 680, - }, - Y: { - x_min: 43, - x_max: 503, - y_min: -21, - y_max: 734, - ha: 755, - leftSideBearing: 43, - advanceWidth: 541, - }, - Z: { - x_min: 42, - x_max: 584, - y_min: -10, - y_max: 739, - ha: 749, - leftSideBearing: 42, - advanceWidth: 629, - }, - '[': { - x_min: 46, - x_max: 346, - y_min: -150, - y_max: 884, - ha: 1034, - leftSideBearing: 46, - advanceWidth: 291, - }, - '\\': { - x_min: 20, - x_max: 616, - y_min: -100, - y_max: 797, - ha: 897, - leftSideBearing: 20, - advanceWidth: 645, - }, - ']': { - x_min: -76, - x_max: 226, - y_min: -150, - y_max: 881, - ha: 1031, - leftSideBearing: -76, - advanceWidth: 297, - }, - '^': { - x_min: 43, - x_max: 437, - y_min: 517, - y_max: 812, - ha: 295, - leftSideBearing: 43, - advanceWidth: 478, - }, - _: { - x_min: 29, - x_max: 563, - y_min: -110, - y_max: -1, - ha: 109, - leftSideBearing: 29, - advanceWidth: 598, - }, - '`': { - x_min: 54, - x_max: 321, - y_min: 540, - y_max: 747, - ha: 207, - leftSideBearing: 54, - advanceWidth: 368, - }, - a: { - x_min: 20, - x_max: 447, - y_min: -17, - y_max: 495, - ha: 512, - leftSideBearing: 20, - advanceWidth: 494, - }, - b: { - x_min: 37, - x_max: 466, - y_min: -27, - y_max: 770, - ha: 797, - leftSideBearing: 37, - advanceWidth: 510, - }, - c: { - x_min: 35, - x_max: 456, - y_min: -9, - y_max: 507, - ha: 516, - leftSideBearing: 35, - advanceWidth: 460, - }, - d: { - x_min: 45, - x_max: 520, - y_min: -15, - y_max: 764, - ha: 779, - leftSideBearing: 45, - advanceWidth: 560, - }, - e: { - x_min: 33, - x_max: 370, - y_min: -5, - y_max: 501, - ha: 506, - leftSideBearing: 33, - advanceWidth: 397, - }, - f: { - x_min: 35, - x_max: 411, - y_min: -13, - y_max: 695, - ha: 708, - leftSideBearing: 35, - advanceWidth: 453, - }, - g: { - x_min: 33, - x_max: 551, - y_min: -257, - y_max: 505, - ha: 762, - leftSideBearing: 33, - advanceWidth: 611, - }, - h: { - x_min: 32, - x_max: 458, - y_min: -29, - y_max: 743, - ha: 772, - leftSideBearing: 32, - advanceWidth: 491, - }, - i: { - x_min: 45, - x_max: 167, - y_min: -13, - y_max: 631, - ha: 644, - leftSideBearing: 45, - advanceWidth: 220, - }, - j: { - x_min: -127, - x_max: 261, - y_min: -231, - y_max: 601, - ha: 832, - leftSideBearing: -127, - advanceWidth: 308, - }, - k: { - x_min: 39, - x_max: 443, - y_min: -3, - y_max: 700, - ha: 703, - leftSideBearing: 39, - advanceWidth: 497, - }, - l: { - x_min: 58, - x_max: 168, - y_min: -8, - y_max: 686, - ha: 694, - leftSideBearing: 58, - advanceWidth: 227, - }, - m: { - x_min: 39, - x_max: 688, - y_min: -14, - y_max: 501, - ha: 515, - leftSideBearing: 39, - advanceWidth: 718, - }, - n: { - x_min: 45, - x_max: 491, - y_min: -32, - y_max: 512, - ha: 544, - leftSideBearing: 45, - advanceWidth: 541, - }, - o: { - x_min: 41, - x_max: 424, - y_min: -12, - y_max: 493, - ha: 505, - leftSideBearing: 41, - advanceWidth: 447, - }, - p: { - x_min: 25, - x_max: 529, - y_min: -260, - y_max: 500, - ha: 760, - leftSideBearing: 25, - advanceWidth: 573, - }, - q: { - x_min: 53, - x_max: 603, - y_min: -235, - y_max: 514, - ha: 749, - leftSideBearing: 53, - advanceWidth: 623, - }, - r: { - x_min: 32, - x_max: 407, - y_min: -7, - y_max: 492, - ha: 499, - leftSideBearing: 32, - advanceWidth: 460, - }, - s: { - x_min: 49, - x_max: 416, - y_min: -12, - y_max: 519, - ha: 531, - leftSideBearing: 49, - advanceWidth: 460, - }, - t: { - x_min: 32, - x_max: 442, - y_min: -5, - y_max: 684, - ha: 689, - leftSideBearing: 32, - advanceWidth: 469, - }, - u: { - x_min: 41, - x_max: 487, - y_min: -5, - y_max: 507, - ha: 512, - leftSideBearing: 41, - advanceWidth: 510, - }, - v: { - x_min: 16, - x_max: 441, - y_min: -20, - y_max: 542, - ha: 562, - leftSideBearing: 16, - advanceWidth: 456, - }, - w: { - x_min: 39, - x_max: 639, - y_min: -22, - y_max: 505, - ha: 527, - leftSideBearing: 39, - advanceWidth: 661, - }, - x: { - x_min: 15, - x_max: 505, - y_min: -39, - y_max: 539, - ha: 578, - leftSideBearing: 15, - advanceWidth: 541, - }, - y: { - x_min: -98, - x_max: 501, - y_min: -242, - y_max: 511, - ha: 753, - leftSideBearing: -98, - advanceWidth: 548, - }, - z: { - x_min: 27, - x_max: 479, - y_min: -3, - y_max: 494, - ha: 497, - leftSideBearing: 27, - advanceWidth: 494, - }, - '{': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '|': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '}': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - '~': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 308, - }, - }, - fontFamily: 'PetalumaScript', - resolution: 1000, - generatedOn: '2020-06-14T18:33:25.407Z', -}; diff --git a/build/esm/src/fonts/robotoslab_glyphs.js b/build/esm/src/fonts/robotoslab_glyphs.js deleted file mode 100644 index e7f8b1d3e9..0000000000 --- a/build/esm/src/fonts/robotoslab_glyphs.js +++ /dev/null @@ -1,863 +0,0 @@ -export const RobotoSlabFont = { - spacing: 50, - glyphs: { - ' ': { - x_min: 0, - x_max: 509, - y_min: 0, - y_max: 2000, - ha: 2000, - leftSideBearing: 0, - advanceWidth: 509, - }, - '0': { - x_min: 121, - x_max: 1048, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1168, - }, - '1': { - x_min: 117, - x_max: 767, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 117, - advanceWidth: 844, - }, - '2': { - x_min: 75.8474576645637, - x_max: 1040, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 75, - advanceWidth: 1131, - }, - '3': { - x_min: 74.85365853658536, - x_max: 994, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1106, - }, - '4': { - x_min: 63, - x_max: 1114, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1187, - }, - '5': { - x_min: 96.8448275474953, - x_max: 982, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 96, - advanceWidth: 1081, - }, - '6': { - x_min: 121, - x_max: 1067, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 121, - advanceWidth: 1144, - }, - '7': { - x_min: 76, - x_max: 1060, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: -30, - advanceWidth: 1128, - }, - '8': { - x_min: 92, - x_max: 1039, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 92, - advanceWidth: 1131, - }, - '9': { - x_min: 84, - x_max: 1026, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 84, - advanceWidth: 1154, - }, - '!': { - x_min: 143, - x_max: 340, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 143, - advanceWidth: 483, - }, - '"': { - x_min: 166, - x_max: 634, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 770, - }, - '#': { - x_min: 63, - x_max: 1179, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 63, - advanceWidth: 1246, - }, - $: { - x_min: 81.92156915727656, - x_max: 1012, - y_min: -208, - y_max: 1693, - ha: 1901, - leftSideBearing: 81, - advanceWidth: 1110, - }, - '%': { - x_min: 77, - x_max: 1384, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 77, - advanceWidth: 1460, - }, - '&': { - x_min: 74, - x_max: 1242, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 74, - advanceWidth: 1289, - }, - "'": { - x_min: 166, - x_max: 324, - y_min: 1055, - y_max: 1560, - ha: 505, - leftSideBearing: 166, - advanceWidth: 460, - }, - '(': { - x_min: 114, - x_max: 650, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 114, - advanceWidth: 662, - }, - ')': { - x_min: 11, - x_max: 547, - y_min: -463, - y_max: 1636, - ha: 2099, - leftSideBearing: 11, - advanceWidth: 654, - }, - '*': { - x_min: 66, - x_max: 893, - y_min: 607, - y_max: 1456, - ha: 849, - leftSideBearing: 66, - advanceWidth: 958, - }, - '+': { - x_min: 73, - x_max: 1071, - y_min: 146, - y_max: 1206, - ha: 1060, - leftSideBearing: 73, - advanceWidth: 1145, - }, - ',': { - x_min: 23, - x_max: 315, - y_min: -311, - y_max: 221, - ha: 532, - leftSideBearing: 23, - advanceWidth: 404, - }, - '-': { - x_min: 154, - x_max: 643, - y_min: 538, - y_max: 692, - ha: 154, - leftSideBearing: 154, - advanceWidth: 797, - }, - '.': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 202, - ha: 202, - leftSideBearing: 145, - advanceWidth: 493, - }, - '/': { - x_min: 0, - x_max: 774, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 0, - advanceWidth: 824, - }, - ':': { - x_min: 145, - x_max: 342, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 145, - advanceWidth: 419, - }, - ';': { - x_min: 53, - x_max: 345, - y_min: -311, - y_max: 1082, - ha: 1393, - leftSideBearing: 53, - advanceWidth: 424, - }, - '<': { - x_min: 76, - x_max: 892, - y_min: 107, - y_max: 1013, - ha: 906, - leftSideBearing: 76, - advanceWidth: 1017, - }, - '=': { - x_min: 147, - x_max: 981, - y_min: 407, - y_max: 987, - ha: 580, - leftSideBearing: 147, - advanceWidth: 1127, - }, - '>': { - x_min: 125, - x_max: 980, - y_min: 87, - y_max: 993, - ha: 906, - leftSideBearing: 125, - advanceWidth: 1060, - }, - '?': { - x_min: 65.92660602419838, - x_max: 890, - y_min: 0, - y_max: 1477, - ha: 1477, - leftSideBearing: 65, - advanceWidth: 953, - }, - '@': { - x_min: 84.3592218305664, - x_max: 1705.2346925277395, - y_min: -453, - y_max: 1431, - ha: 1884, - leftSideBearing: 84, - advanceWidth: 1821, - }, - A: { - x_min: 70, - x_max: 1463, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 70, - advanceWidth: 1533, - }, - B: { - x_min: 81, - x_max: 1253, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1322, - }, - C: { - x_min: 80, - x_max: 1174, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1290, - }, - D: { - x_min: 81, - x_max: 1291, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1356, - }, - E: { - x_min: 81, - x_max: 1190, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1306, - }, - F: { - x_min: 81, - x_max: 1176, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1256, - }, - G: { - x_min: 80, - x_max: 1226, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 80, - advanceWidth: 1346, - }, - H: { - x_min: 81, - x_max: 1497, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1578, - }, - I: { - x_min: 81, - x_max: 604, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 685, - }, - J: { - x_min: 60, - x_max: 1100, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 60, - advanceWidth: 1169, - }, - K: { - x_min: 81, - x_max: 1427, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1501, - }, - L: { - x_min: 81, - x_max: 1130, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1210, - }, - M: { - x_min: 94, - x_max: 1888, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 94, - advanceWidth: 1982, - }, - N: { - x_min: 83, - x_max: 1509, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 83, - advanceWidth: 1592, - }, - O: { - x_min: 70, - x_max: 1281, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 70, - advanceWidth: 1351, - }, - P: { - x_min: 81, - x_max: 1242, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 81, - advanceWidth: 1297, - }, - Q: { - x_min: 70, - x_max: 1348, - y_min: -245, - y_max: 1477, - ha: 1722, - leftSideBearing: 70, - advanceWidth: 1376, - }, - R: { - x_min: 81, - x_max: 1285, - y_min: 0, - y_max: 1455, - ha: 1455, - leftSideBearing: 81, - advanceWidth: 1385, - }, - S: { - x_min: 115, - x_max: 1116, - y_min: -21, - y_max: 1477, - ha: 1498, - leftSideBearing: 115, - advanceWidth: 1206, - }, - T: { - x_min: 96, - x_max: 1306, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 96, - advanceWidth: 1406, - }, - U: { - x_min: 70, - x_max: 1452, - y_min: -21, - y_max: 1456, - ha: 1477, - leftSideBearing: 70, - advanceWidth: 1522, - }, - V: { - x_min: 65, - x_max: 1443, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1508, - }, - W: { - x_min: 72, - x_max: 2057, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 72, - advanceWidth: 2129, - }, - X: { - x_min: 80, - x_max: 1449, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 80, - advanceWidth: 1529, - }, - Y: { - x_min: 65, - x_max: 1396, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 65, - advanceWidth: 1461, - }, - Z: { - x_min: 90, - x_max: 1107, - y_min: 0, - y_max: 1456, - ha: 1456, - leftSideBearing: 90, - advanceWidth: 1197, - }, - '[': { - x_min: 157, - x_max: 541, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 157, - advanceWidth: 573, - }, - '\\': { - x_min: 36, - x_max: 830, - y_min: -125, - y_max: 1456, - ha: 1581, - leftSideBearing: 36, - advanceWidth: 841, - }, - ']': { - x_min: 23, - x_max: 408, - y_min: -312, - y_max: 1664, - ha: 1976, - leftSideBearing: 23, - advanceWidth: 552, - }, - '^': { - x_min: 71, - x_max: 802, - y_min: 729, - y_max: 1456, - ha: 727, - leftSideBearing: 71, - advanceWidth: 864, - }, - _: { - x_min: 119, - x_max: 1041, - y_min: -154, - y_max: 0, - ha: 154, - leftSideBearing: 119, - advanceWidth: 1168, - }, - '`': { - x_min: 40, - x_max: 456, - y_min: 1288, - y_max: 1560, - ha: 272, - leftSideBearing: 40, - advanceWidth: 496, - }, - a: { - x_min: 79, - x_max: 1053, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 79, - advanceWidth: 1132, - }, - b: { - x_min: -16, - x_max: 1071, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: -16, - advanceWidth: 1145, - }, - c: { - x_min: 78, - x_max: 988, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1067, - }, - d: { - x_min: 78, - x_max: 1156, - y_min: -21, - y_max: 1560, - ha: 1581, - leftSideBearing: 78, - advanceWidth: 1218, - }, - e: { - x_min: 74, - x_max: 980, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 74, - advanceWidth: 1059, - }, - f: { - x_min: 64, - x_max: 731, - y_min: 0, - y_max: 1581, - ha: 1581, - leftSideBearing: 64, - advanceWidth: 725, - }, - g: { - x_min: 78, - x_max: 1133, - y_min: -437, - y_max: 1102, - ha: 1539, - leftSideBearing: 78, - advanceWidth: 1157, - }, - h: { - x_min: 49, - x_max: 1255, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 49, - advanceWidth: 1315, - }, - i: { - x_min: 67, - x_max: 590, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 67, - advanceWidth: 652, - }, - j: { - x_min: -56, - x_max: 381, - y_min: -437, - y_max: 1560, - ha: 1997, - leftSideBearing: -56, - advanceWidth: 525, - }, - k: { - x_min: 64, - x_max: 1248, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 1287, - }, - l: { - x_min: 64, - x_max: 587, - y_min: 0, - y_max: 1560, - ha: 1560, - leftSideBearing: 64, - advanceWidth: 653, - }, - m: { - x_min: 74, - x_max: 1905, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1977, - }, - n: { - x_min: 74, - x_max: 1278, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 74, - advanceWidth: 1343, - }, - o: { - x_min: 78, - x_max: 1046, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 78, - advanceWidth: 1124, - }, - p: { - x_min: 34, - x_max: 1119, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 34, - advanceWidth: 1197, - }, - q: { - x_min: 78, - x_max: 1135, - y_min: -416, - y_max: 1102, - ha: 1518, - leftSideBearing: 78, - advanceWidth: 1139, - }, - r: { - x_min: 72, - x_max: 808, - y_min: 0, - y_max: 1102, - ha: 1102, - leftSideBearing: 72, - advanceWidth: 854, - }, - s: { - x_min: 104, - x_max: 933, - y_min: -21, - y_max: 1102, - ha: 1123, - leftSideBearing: 104, - advanceWidth: 1022, - }, - t: { - x_min: 24, - x_max: 678, - y_min: -17, - y_max: 1343, - ha: 1360, - leftSideBearing: 24, - advanceWidth: 730, - }, - u: { - x_min: 52, - x_max: 1181, - y_min: -21, - y_max: 1082, - ha: 1103, - leftSideBearing: 52, - advanceWidth: 1245, - }, - v: { - x_min: 26, - x_max: 1176, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 26, - advanceWidth: 1206, - }, - w: { - x_min: 52, - x_max: 1777, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 52, - advanceWidth: 1823, - }, - x: { - x_min: 42, - x_max: 1163, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 42, - advanceWidth: 1203, - }, - y: { - x_min: 24, - x_max: 1172, - y_min: -437, - y_max: 1082, - ha: 1519, - leftSideBearing: 24, - advanceWidth: 1192, - }, - z: { - x_min: 88, - x_max: 960, - y_min: 0, - y_max: 1082, - ha: 1082, - leftSideBearing: 88, - advanceWidth: 1032, - }, - '{': { - x_min: 63, - x_max: 671, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 63, - advanceWidth: 701, - }, - '|': { - x_min: 150, - x_max: 307, - y_min: -270, - y_max: 1456, - ha: 1726, - leftSideBearing: 150, - advanceWidth: 451, - }, - '}': { - x_min: 27, - x_max: 635, - y_min: -364, - y_max: 1597, - ha: 1961, - leftSideBearing: 27, - advanceWidth: 701, - }, - '~': { - x_min: 121, - x_max: 1257, - y_min: 401, - y_max: 803, - ha: 402, - leftSideBearing: 121, - advanceWidth: 1386, - }, - }, - fontFamily: 'Roboto Slab', - resolution: 2048, - generatedOn: '2020-06-15T19:12:58.120Z', -}; diff --git a/build/esm/src/fonts/sans_bold_text_metrics.js b/build/esm/src/fonts/sans_bold_text_metrics.js deleted file mode 100644 index 350031ffe1..0000000000 --- a/build/esm/src/fonts/sans_bold_text_metrics.js +++ /dev/null @@ -1,862 +0,0 @@ -export const SansFontBold = { - glyphs: { - '0': { - x_min: 86, - x_max: 1038, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '1': { - x_min: 162, - x_max: 806, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 162, - advanceWidth: 1139, - }, - '2': { - x_min: 51, - x_max: 1036, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 51, - advanceWidth: 1139, - }, - '3': { - x_min: 77, - x_max: 1051, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '4': { - x_min: 38, - x_max: 1092, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 38, - advanceWidth: 1139, - }, - '5': { - x_min: 91, - x_max: 1077, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 91, - advanceWidth: 1139, - }, - '6': { - x_min: 87, - x_max: 1066, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '7': { - x_min: 87, - x_max: 1048, - y_min: 0, - y_max: 1446, - ha: 1446, - leftSideBearing: 87, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1047, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 65, - x_max: 1044, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 65, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 184, - x_max: 488, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 184, - advanceWidth: 682, - }, - '"': { - x_min: 112, - x_max: 869, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 112, - advanceWidth: 971, - }, - '#': { - x_min: 18, - x_max: 1115, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 18, - advanceWidth: 1139, - }, - $: { - x_min: 70, - x_max: 1048, - y_min: -205, - y_max: 1584, - ha: 1789, - leftSideBearing: 70, - advanceWidth: 1139, - }, - '%': { - x_min: 89, - x_max: 1725, - y_min: -59, - y_max: 1491, - ha: 1550, - leftSideBearing: 89, - advanceWidth: 1821, - }, - '&': { - x_min: 90, - x_max: 1446, - y_min: -38, - y_max: 1491, - ha: 1529, - leftSideBearing: 90, - advanceWidth: 1479, - }, - "'": { - x_min: 92, - x_max: 398, - y_min: 945, - y_max: 1466, - ha: 521, - leftSideBearing: 92, - advanceWidth: 487, - }, - '(': { - x_min: 107, - x_max: 616, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 107, - advanceWidth: 682, - }, - ')': { - x_min: 67, - x_max: 576, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 67, - advanceWidth: 682, - }, - '*': { - x_min: 28, - x_max: 753, - y_min: 792, - y_max: 1491, - ha: 699, - leftSideBearing: 28, - advanceWidth: 797, - }, - '+': { - x_min: 85, - x_max: 1110, - y_min: 211, - y_max: 1236, - ha: 1025, - leftSideBearing: 85, - advanceWidth: 1196, - }, - ',': { - x_min: 117, - x_max: 421, - y_min: -327, - y_max: 281, - ha: 608, - leftSideBearing: 117, - advanceWidth: 569, - }, - '-': { - x_min: 115, - x_max: 667, - y_min: 391, - y_max: 672, - ha: 281, - leftSideBearing: 115, - advanceWidth: 682, - }, - '.': { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 281, - ha: 281, - leftSideBearing: 147, - advanceWidth: 569, - }, - '/': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ':': { - x_min: 201, - x_max: 482, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 201, - advanceWidth: 682, - }, - ';': { - x_min: 170, - x_max: 474, - y_min: -327, - y_max: 1062, - ha: 1389, - leftSideBearing: 170, - advanceWidth: 682, - }, - '<': { - x_min: 95, - x_max: 1100, - y_min: 167, - y_max: 1281, - ha: 1114, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '=': { - x_min: 85, - x_max: 1110, - y_min: 372, - y_max: 1074, - ha: 702, - leftSideBearing: 85, - advanceWidth: 1196, - }, - '>': { - x_min: 95, - x_max: 1101, - y_min: 166, - y_max: 1279, - ha: 1113, - leftSideBearing: 95, - advanceWidth: 1196, - }, - '?': { - x_min: 106, - x_max: 1158, - y_min: 0, - y_max: 1481, - ha: 1481, - leftSideBearing: 106, - advanceWidth: 1251, - }, - '@': { - x_min: 61, - x_max: 1990, - y_min: -431, - y_max: 1492, - ha: 1923, - leftSideBearing: 61, - advanceWidth: 1997, - }, - A: { - x_min: 0, - x_max: 1471, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1479, - }, - B: { - x_min: 150, - x_max: 1378, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - C: { - x_min: 97, - x_max: 1374, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 97, - advanceWidth: 1479, - }, - D: { - x_min: 148, - x_max: 1377, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 148, - advanceWidth: 1479, - }, - E: { - x_min: 149, - x_max: 1264, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - F: { - x_min: 151, - x_max: 1156, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 151, - advanceWidth: 1251, - }, - G: { - x_min: 98, - x_max: 1469, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 98, - advanceWidth: 1593, - }, - H: { - x_min: 150, - x_max: 1322, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - I: { - x_min: 140, - x_max: 436, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 140, - advanceWidth: 569, - }, - J: { - x_min: 35, - x_max: 973, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 35, - advanceWidth: 1139, - }, - K: { - x_min: 153, - x_max: 1475, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 153, - advanceWidth: 1479, - }, - L: { - x_min: 157, - x_max: 1189, - y_min: 0, - y_max: 1454, - ha: 1454, - leftSideBearing: 157, - advanceWidth: 1251, - }, - M: { - x_min: 145, - x_max: 1561, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 145, - advanceWidth: 1706, - }, - N: { - x_min: 152, - x_max: 1315, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1479, - }, - O: { - x_min: 89, - x_max: 1511, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 89, - advanceWidth: 1593, - }, - P: { - x_min: 149, - x_max: 1272, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 149, - advanceWidth: 1366, - }, - Q: { - x_min: 89, - x_max: 1566, - y_min: -147, - y_max: 1491, - ha: 1638, - leftSideBearing: 89, - advanceWidth: 1593, - }, - R: { - x_min: 150, - x_max: 1468, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1479, - }, - S: { - x_min: 74, - x_max: 1266, - y_min: -26, - y_max: 1491, - ha: 1517, - leftSideBearing: 74, - advanceWidth: 1366, - }, - T: { - x_min: 44, - x_max: 1209, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 44, - advanceWidth: 1251, - }, - U: { - x_min: 147, - x_max: 1316, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 147, - advanceWidth: 1479, - }, - V: { - x_min: -1, - x_max: 1364, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -1, - advanceWidth: 1366, - }, - W: { - x_min: 7, - x_max: 1931, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 7, - advanceWidth: 1933, - }, - X: { - x_min: 0, - x_max: 1363, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 0, - advanceWidth: 1366, - }, - Y: { - x_min: -3, - x_max: 1368, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - Z: { - x_min: 22, - x_max: 1213, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 22, - advanceWidth: 1251, - }, - '[': { - x_min: 146, - x_max: 644, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 146, - advanceWidth: 682, - }, - '\\': { - x_min: -3, - x_max: 571, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: -3, - advanceWidth: 569, - }, - ']': { - x_min: 38, - x_max: 536, - y_min: -413, - y_max: 1466, - ha: 1879, - leftSideBearing: 38, - advanceWidth: 682, - }, - '^': { - x_min: 115, - x_max: 1080, - y_min: 692, - y_max: 1491, - ha: 799, - leftSideBearing: 115, - advanceWidth: 1196, - }, - _: { - x_min: -19, - x_max: 1149, - y_min: -405, - y_max: -223, - ha: 182, - leftSideBearing: -19, - advanceWidth: 1139, - }, - '`': { - x_min: 42, - x_max: 495, - y_min: 1192, - y_max: 1491, - ha: 299, - leftSideBearing: 42, - advanceWidth: 682, - }, - a: { - x_min: 73, - x_max: 1070, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 73, - advanceWidth: 1139, - }, - b: { - x_min: 135, - x_max: 1172, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 135, - advanceWidth: 1251, - }, - c: { - x_min: 85, - x_max: 1087, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 85, - advanceWidth: 1139, - }, - d: { - x_min: 84, - x_max: 1121, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 84, - advanceWidth: 1251, - }, - e: { - x_min: 65, - x_max: 1057.2517482517483, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 65, - advanceWidth: 1139, - }, - f: { - x_min: 24, - x_max: 742, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 24, - advanceWidth: 682, - }, - g: { - x_min: 84, - x_max: 1120, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 84, - advanceWidth: 1251, - }, - h: { - x_min: 146, - x_max: 1113, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 146, - advanceWidth: 1251, - }, - i: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - j: { - x_min: -94, - x_max: 422, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 569, - }, - k: { - x_min: 137, - x_max: 1119, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 137, - advanceWidth: 1139, - }, - l: { - x_min: 147, - x_max: 428, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 147, - advanceWidth: 569, - }, - m: { - x_min: 126, - x_max: 1688, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 126, - advanceWidth: 1821, - }, - n: { - x_min: 145, - x_max: 1113, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 145, - advanceWidth: 1251, - }, - o: { - x_min: 82, - x_max: 1178, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 82, - advanceWidth: 1251, - }, - p: { - x_min: 139, - x_max: 1175, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 139, - advanceWidth: 1251, - }, - q: { - x_min: 91, - x_max: 1122, - y_min: -404, - y_max: 1086, - ha: 1490, - leftSideBearing: 91, - advanceWidth: 1251, - }, - r: { - x_min: 135, - x_max: 823, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 797, - }, - s: { - x_min: 48, - x_max: 1040, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 48, - advanceWidth: 1139, - }, - t: { - x_min: 31, - x_max: 657, - y_min: -24, - y_max: 1437, - ha: 1461, - leftSideBearing: 31, - advanceWidth: 682, - }, - u: { - x_min: 141, - x_max: 1107, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 141, - advanceWidth: 1251, - }, - v: { - x_min: 11, - x_max: 1114, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 11, - advanceWidth: 1139, - }, - w: { - x_min: 9, - x_max: 1592, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 9, - advanceWidth: 1593, - }, - x: { - x_min: 12, - x_max: 1120, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 12, - advanceWidth: 1139, - }, - y: { - x_min: 14, - x_max: 1106, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 14, - advanceWidth: 1139, - }, - z: { - x_min: 34, - x_max: 982, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 34, - advanceWidth: 1024, - }, - '{': { - x_min: 60, - x_max: 744, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 60, - advanceWidth: 797, - }, - '|': { - x_min: 176, - x_max: 399, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 176, - advanceWidth: 573, - }, - '}': { - x_min: 45, - x_max: 729, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 45, - advanceWidth: 797, - }, - '~': { - x_min: 67, - x_max: 1129, - y_min: 519, - y_max: 924, - ha: 405, - leftSideBearing: 67, - advanceWidth: 1196, - }, - }, - fontFamily: 'Arial', - resolution: 2048, - generatedOn: '2022-11-04T20:05:21.000Z', -}; diff --git a/build/esm/src/fonts/sans_text_metrics.js b/build/esm/src/fonts/sans_text_metrics.js deleted file mode 100644 index bb6d9affcd..0000000000 --- a/build/esm/src/fonts/sans_text_metrics.js +++ /dev/null @@ -1,870 +0,0 @@ -export const SansFont = { - smufl: false, - name: 'SANS', - spacing: 50, - Description: 'Built-in sans-serif font', - bold: true, - italic: true, - monospaced: false, - serifs: false, - glyphs: { - '0': { - x_min: 85, - x_max: 1041, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '1': { - x_min: 223, - x_max: 763, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 223, - advanceWidth: 1139, - }, - '2': { - x_min: 61.840001123045234, - x_max: 1031, - y_min: 0, - y_max: 1472, - ha: 1472, - leftSideBearing: 61, - advanceWidth: 1139, - }, - '3': { - x_min: 86, - x_max: 1046, - y_min: -26, - y_max: 1472, - ha: 1498, - leftSideBearing: 86, - advanceWidth: 1139, - }, - '4': { - x_min: 26, - x_max: 1040, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 26, - advanceWidth: 1139, - }, - '5': { - x_min: 85, - x_max: 1057, - y_min: -25, - y_max: 1446, - ha: 1471, - leftSideBearing: 85, - advanceWidth: 1139, - }, - '6': { - x_min: 77, - x_max: 1045, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 77, - advanceWidth: 1139, - }, - '7': { - x_min: 97, - x_max: 1046, - y_min: 0, - y_max: 1447, - ha: 1447, - leftSideBearing: 97, - advanceWidth: 1139, - }, - '8': { - x_min: 83, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 83, - advanceWidth: 1139, - }, - '9': { - x_min: 85, - x_max: 1049, - y_min: -25, - y_max: 1472, - ha: 1497, - leftSideBearing: 85, - advanceWidth: 1139, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 569, - }, - '!': { - x_min: 176, - x_max: 399, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 176, - advanceWidth: 569, - }, - '"': { - x_min: 94, - x_max: 631, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 94, - advanceWidth: 727, - }, - '#': { - x_min: 21, - x_max: 1113, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 21, - advanceWidth: 1139, - }, - $: { - x_min: 73, - x_max: 1043, - y_min: -211, - y_max: 1601, - ha: 1812, - leftSideBearing: 73, - advanceWidth: 1139, - }, - '%': { - x_min: 119, - x_max: 1695, - y_min: -54, - y_max: 1491, - ha: 1545, - leftSideBearing: 119, - advanceWidth: 1821, - }, - '&': { - x_min: 88, - x_max: 1319, - y_min: -34, - y_max: 1491, - ha: 1525, - leftSideBearing: 88, - advanceWidth: 1366, - }, - "'": { - x_min: 90, - x_max: 295, - y_min: 947, - y_max: 1466, - ha: 519, - leftSideBearing: 90, - advanceWidth: 391, - }, - '(': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - ')': { - x_min: 124, - x_max: 608, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 124, - advanceWidth: 682, - }, - '*': { - x_min: 64, - x_max: 725, - y_min: 867, - y_max: 1491, - ha: 624, - leftSideBearing: 64, - advanceWidth: 797, - }, - '+': { - x_min: 114, - x_max: 1082, - y_min: 237, - y_max: 1206, - ha: 969, - leftSideBearing: 114, - advanceWidth: 1196, - }, - ',': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 205, - ha: 495, - leftSideBearing: 170, - advanceWidth: 569, - }, - '-': { - x_min: 65, - x_max: 618, - y_min: 440, - y_max: 621, - ha: 181, - leftSideBearing: 65, - advanceWidth: 682, - }, - '.': { - x_min: 186, - x_max: 391, - y_min: 0, - y_max: 205, - ha: 205, - leftSideBearing: 186, - advanceWidth: 569, - }, - '/': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ':': { - x_min: 185, - x_max: 390, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 185, - advanceWidth: 569, - }, - ';': { - x_min: 170, - x_max: 387, - y_min: -290, - y_max: 1062, - ha: 1352, - leftSideBearing: 170, - advanceWidth: 569, - }, - '<': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '=': { - x_min: 114, - x_max: 1082, - y_min: 417, - y_max: 1030, - ha: 613, - leftSideBearing: 114, - advanceWidth: 1196, - }, - '>': { - x_min: 112, - x_max: 1083, - y_min: 226, - y_max: 1219, - ha: 993, - leftSideBearing: 112, - advanceWidth: 1196, - }, - '?': { - x_min: 90, - x_max: 1036, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 90, - advanceWidth: 1139, - }, - '@': { - x_min: 111, - x_max: 2005, - y_min: -431, - y_max: 1493, - ha: 1924, - leftSideBearing: 111, - advanceWidth: 2079, - }, - A: { - x_min: -3, - x_max: 1369, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: -3, - advanceWidth: 1366, - }, - B: { - x_min: 150, - x_max: 1257, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - C: { - x_min: 102, - x_max: 1398, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 102, - advanceWidth: 1479, - }, - D: { - x_min: 158, - x_max: 1370, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1479, - }, - E: { - x_min: 162, - x_max: 1256, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 162, - advanceWidth: 1366, - }, - F: { - x_min: 168, - x_max: 1157, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 168, - advanceWidth: 1251, - }, - G: { - x_min: 109, - x_max: 1465, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 109, - advanceWidth: 1593, - }, - H: { - x_min: 164, - x_max: 1314, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 164, - advanceWidth: 1479, - }, - I: { - x_min: 191, - x_max: 385, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 191, - advanceWidth: 569, - }, - J: { - x_min: 58.84976474807333, - x_max: 865, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 58, - advanceWidth: 1024, - }, - K: { - x_min: 150, - x_max: 1362, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1366, - }, - L: { - x_min: 150, - x_max: 1066, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 150, - advanceWidth: 1139, - }, - M: { - x_min: 152, - x_max: 1551, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 152, - advanceWidth: 1706, - }, - N: { - x_min: 156, - x_max: 1311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 156, - advanceWidth: 1479, - }, - O: { - x_min: 99, - x_max: 1501, - y_min: -25, - y_max: 1492, - ha: 1517, - leftSideBearing: 99, - advanceWidth: 1593, - }, - P: { - x_min: 158, - x_max: 1277, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 158, - advanceWidth: 1366, - }, - Q: { - x_min: 88, - x_max: 1518, - y_min: -114, - y_max: 1492, - ha: 1606, - leftSideBearing: 88, - advanceWidth: 1593, - }, - R: { - x_min: 161, - x_max: 1453, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 161, - advanceWidth: 1479, - }, - S: { - x_min: 92, - x_max: 1259, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 92, - advanceWidth: 1366, - }, - T: { - x_min: 48, - x_max: 1210, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 48, - advanceWidth: 1251, - }, - U: { - x_min: 161, - x_max: 1314, - y_min: -25, - y_max: 1466, - ha: 1491, - leftSideBearing: 161, - advanceWidth: 1479, - }, - V: { - x_min: 9, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - W: { - x_min: 25, - x_max: 1910, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 25, - advanceWidth: 1933, - }, - X: { - x_min: 9, - x_max: 1353, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 9, - advanceWidth: 1366, - }, - Y: { - x_min: 6, - x_max: 1350, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 6, - advanceWidth: 1366, - }, - Z: { - x_min: 41, - x_max: 1200, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 41, - advanceWidth: 1251, - }, - '[': { - x_min: 139, - x_max: 536, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 139, - advanceWidth: 569, - }, - '\\': { - x_min: 0, - x_max: 569, - y_min: -25, - y_max: 1491, - ha: 1516, - leftSideBearing: 0, - advanceWidth: 569, - }, - ']': { - x_min: 39, - x_max: 436, - y_min: -407, - y_max: 1466, - ha: 1873, - leftSideBearing: 39, - advanceWidth: 569, - }, - '^': { - x_min: 54, - x_max: 907, - y_min: 690, - y_max: 1491, - ha: 801, - leftSideBearing: 54, - advanceWidth: 961, - }, - _: { - x_min: -31, - x_max: 1162, - y_min: -407, - y_max: -277, - ha: 130, - leftSideBearing: -31, - advanceWidth: 1139, - }, - '`': { - x_min: 89, - x_max: 465, - y_min: 1194, - y_max: 1474, - ha: 280, - leftSideBearing: 89, - advanceWidth: 682, - }, - a: { - x_min: 74, - x_max: 1052, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 74, - advanceWidth: 1139, - }, - b: { - x_min: 134, - x_max: 1055, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 134, - advanceWidth: 1139, - }, - c: { - x_min: 80, - x_max: 1005, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 80, - advanceWidth: 1024, - }, - d: { - x_min: 70, - x_max: 991, - y_min: -24, - y_max: 1466, - ha: 1490, - leftSideBearing: 70, - advanceWidth: 1139, - }, - e: { - x_min: 75, - x_max: 1054, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 75, - advanceWidth: 1139, - }, - f: { - x_min: 19, - x_max: 640, - y_min: 0, - y_max: 1491, - ha: 1491, - leftSideBearing: 19, - advanceWidth: 569, - }, - g: { - x_min: 66, - x_max: 1002, - y_min: -431, - y_max: 1086, - ha: 1517, - leftSideBearing: 66, - advanceWidth: 1139, - }, - h: { - x_min: 135, - x_max: 1000, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 135, - advanceWidth: 1139, - }, - i: { - x_min: 136, - x_max: 316, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 455, - }, - j: { - x_min: -94, - x_max: 314, - y_min: -431, - y_max: 1466, - ha: 1897, - leftSideBearing: -94, - advanceWidth: 455, - }, - k: { - x_min: 136, - x_max: 1016, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 136, - advanceWidth: 1024, - }, - l: { - x_min: 131, - x_max: 311, - y_min: 0, - y_max: 1466, - ha: 1466, - leftSideBearing: 131, - advanceWidth: 455, - }, - m: { - x_min: 135, - x_max: 1574, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1706, - }, - n: { - x_min: 135, - x_max: 998, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 135, - advanceWidth: 1139, - }, - o: { - x_min: 68, - x_max: 1063, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 68, - advanceWidth: 1139, - }, - p: { - x_min: 135, - x_max: 1057, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 135, - advanceWidth: 1139, - }, - q: { - x_min: 72, - x_max: 992, - y_min: -407, - y_max: 1086, - ha: 1493, - leftSideBearing: 72, - advanceWidth: 1139, - }, - r: { - x_min: 133, - x_max: 710, - y_min: 0, - y_max: 1086, - ha: 1086, - leftSideBearing: 133, - advanceWidth: 682, - }, - s: { - x_min: 63, - x_max: 945, - y_min: -24, - y_max: 1086, - ha: 1110, - leftSideBearing: 63, - advanceWidth: 1024, - }, - t: { - x_min: 36, - x_max: 554, - y_min: -14, - y_max: 1433, - ha: 1447, - leftSideBearing: 36, - advanceWidth: 569, - }, - u: { - x_min: 131, - x_max: 992, - y_min: -24, - y_max: 1062, - ha: 1086, - leftSideBearing: 131, - advanceWidth: 1139, - }, - v: { - x_min: 26, - x_max: 1000, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 26, - advanceWidth: 1024, - }, - w: { - x_min: 6, - x_max: 1463, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 6, - advanceWidth: 1479, - }, - x: { - x_min: 15, - x_max: 1009, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 15, - advanceWidth: 1024, - }, - y: { - x_min: 33, - x_max: 1006, - y_min: -431, - y_max: 1062, - ha: 1493, - leftSideBearing: 33, - advanceWidth: 1024, - }, - z: { - x_min: 40, - x_max: 980, - y_min: 0, - y_max: 1062, - ha: 1062, - leftSideBearing: 40, - advanceWidth: 1024, - }, - '{': { - x_min: 57, - x_max: 636, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 57, - advanceWidth: 684, - }, - '|': { - x_min: 188, - x_max: 345, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 188, - advanceWidth: 532, - }, - '}': { - x_min: 47, - x_max: 626, - y_min: -431, - y_max: 1491, - ha: 1922, - leftSideBearing: 47, - advanceWidth: 684, - }, - '~': { - x_min: 87, - x_max: 1110, - y_min: 557, - y_max: 885, - ha: 328, - leftSideBearing: 87, - advanceWidth: 1196, - }, - }, - fontFamily: 'sans-serif', - resolution: 2048, - generatedOn: '2020-10-18T18:48:11.823Z', -}; diff --git a/build/esm/src/fonts/serif_text_metrics.js b/build/esm/src/fonts/serif_text_metrics.js deleted file mode 100644 index a2af7634f4..0000000000 --- a/build/esm/src/fonts/serif_text_metrics.js +++ /dev/null @@ -1,870 +0,0 @@ -export const SerifFont = { - smufl: false, - name: 'SERIF', - spacing: 50, - Description: 'Built-in serif font', - bold: true, - italic: true, - monospaced: false, - serifs: true, - glyphs: { - '0': { - x_min: 49, - x_max: 975, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 49, - advanceWidth: 1024, - }, - '1': { - x_min: 227, - x_max: 811, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 227, - advanceWidth: 1024, - }, - '2': { - x_min: 61, - x_max: 965, - y_min: 0, - y_max: 1383, - ha: 1383, - leftSideBearing: 61, - advanceWidth: 1024, - }, - '3': { - x_min: 88, - x_max: 883, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 88, - advanceWidth: 1024, - }, - '4': { - x_min: 25, - x_max: 967, - y_min: 0, - y_max: 1384, - ha: 1384, - leftSideBearing: 25, - advanceWidth: 1024, - }, - '5': { - x_min: 66, - x_max: 898, - y_min: -27, - y_max: 1409, - ha: 1436, - leftSideBearing: 66, - advanceWidth: 1024, - }, - '6': { - x_min: 70, - x_max: 958, - y_min: -27, - y_max: 1401, - ha: 1428, - leftSideBearing: 70, - advanceWidth: 1024, - }, - '7': { - x_min: 41, - x_max: 920, - y_min: -16, - y_max: 1356, - ha: 1372, - leftSideBearing: 41, - advanceWidth: 1024, - }, - '8': { - x_min: 115, - x_max: 911, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: 115, - advanceWidth: 1024, - }, - '9': { - x_min: 61, - x_max: 940, - y_min: -41, - y_max: 1383, - ha: 1424, - leftSideBearing: 61, - advanceWidth: 1024, - }, - ' ': { - x_min: 0, - x_max: 0, - y_min: 0, - y_max: 0, - ha: 0, - leftSideBearing: 0, - advanceWidth: 512, - }, - '!': { - x_min: 266, - x_max: 488, - y_min: -22, - y_max: 1383, - ha: 1405, - leftSideBearing: 266, - advanceWidth: 682, - }, - '"': { - x_min: 157.2000021972655, - x_max: 678.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 157, - advanceWidth: 836, - }, - '#': { - x_min: 10, - x_max: 1016, - y_min: -1, - y_max: 1356, - ha: 1357, - leftSideBearing: 10, - advanceWidth: 1024, - }, - $: { - x_min: 90, - x_max: 936, - y_min: -180, - y_max: 1492, - ha: 1672, - leftSideBearing: 90, - advanceWidth: 1024, - }, - '%': { - x_min: 125, - x_max: 1581, - y_min: -30, - y_max: 1388, - ha: 1418, - leftSideBearing: 125, - advanceWidth: 1706, - }, - '&': { - x_min: 86, - x_max: 1536, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1593, - }, - "'": { - x_min: 97.20000219726548, - x_max: 273.2500021457677, - y_min: 881, - y_max: 1385, - ha: 504, - leftSideBearing: 97, - advanceWidth: 369, - }, - '(': { - x_min: 98, - x_max: 623, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 98, - advanceWidth: 682, - }, - ')': { - x_min: 59, - x_max: 584, - y_min: -363, - y_max: 1383, - ha: 1746, - leftSideBearing: 59, - advanceWidth: 682, - }, - '*': { - x_min: 137.96078522291893, - x_max: 886.039214777081, - y_min: 543, - y_max: 1383, - ha: 840, - leftSideBearing: 137, - advanceWidth: 1024, - }, - '+': { - x_min: 61, - x_max: 1093, - y_min: 2, - y_max: 1034, - ha: 1032, - leftSideBearing: 61, - advanceWidth: 1155, - }, - ',': { - x_min: 115, - x_max: 399, - y_min: -291, - y_max: 208, - ha: 499, - leftSideBearing: 115, - advanceWidth: 512, - }, - '-': { - x_min: 80, - x_max: 584, - y_min: 396, - y_max: 525, - ha: 129, - leftSideBearing: 80, - advanceWidth: 682, - }, - '.': { - x_min: 143, - x_max: 371, - y_min: -22, - y_max: 205, - ha: 227, - leftSideBearing: 143, - advanceWidth: 512, - }, - '/': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ':': { - x_min: 166, - x_max: 394, - y_min: -22, - y_max: 943, - ha: 965, - leftSideBearing: 166, - advanceWidth: 569, - }, - ';': { - x_min: 164, - x_max: 448, - y_min: -290, - y_max: 943, - ha: 1233, - leftSideBearing: 164, - advanceWidth: 569, - }, - '<': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '=': { - x_min: 61, - x_max: 1093, - y_min: 246, - y_max: 791, - ha: 545, - leftSideBearing: 61, - advanceWidth: 1155, - }, - '>': { - x_min: 57, - x_max: 1098, - y_min: -15, - y_max: 1051, - ha: 1066, - leftSideBearing: 57, - advanceWidth: 1155, - }, - '?': { - x_min: 139, - x_max: 848, - y_min: -15, - y_max: 1383, - ha: 1398, - leftSideBearing: 139, - advanceWidth: 909, - }, - '@': { - x_min: 238, - x_max: 1657, - y_min: -29, - y_max: 1386, - ha: 1415, - leftSideBearing: 238, - advanceWidth: 1886, - }, - A: { - x_min: 31, - x_max: 1445, - y_min: 0, - y_max: 1380, - ha: 1380, - leftSideBearing: 31, - advanceWidth: 1479, - }, - B: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - C: { - x_min: 57, - x_max: 1296, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 57, - advanceWidth: 1366, - }, - D: { - x_min: 33, - x_max: 1403, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1479, - }, - E: { - x_min: 25, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - F: { - x_min: 25, - x_max: 1119, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1139, - }, - G: { - x_min: 66, - x_max: 1452, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 66, - advanceWidth: 1479, - }, - H: { - x_min: 39, - x_max: 1438, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 39, - advanceWidth: 1479, - }, - I: { - x_min: 37, - x_max: 642, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 37, - advanceWidth: 682, - }, - J: { - x_min: 20, - x_max: 758, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 20, - advanceWidth: 797, - }, - K: { - x_min: 70, - x_max: 1479, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 70, - advanceWidth: 1479, - }, - L: { - x_min: 25, - x_max: 1224, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1251, - }, - M: { - x_min: 25, - x_max: 1768, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 25, - advanceWidth: 1821, - }, - N: { - x_min: 25, - x_max: 1450, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 25, - advanceWidth: 1479, - }, - O: { - x_min: 70, - x_max: 1409, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 70, - advanceWidth: 1479, - }, - P: { - x_min: 33, - x_max: 1110, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 33, - advanceWidth: 1139, - }, - Q: { - x_min: 70, - x_max: 1435, - y_min: -364.28571588721996, - y_max: 1383, - ha: 1747.28571588722, - leftSideBearing: 70, - advanceWidth: 1479, - }, - R: { - x_min: 35, - x_max: 1347, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1366, - }, - S: { - x_min: 86, - x_max: 1006, - y_min: -28, - y_max: 1383, - ha: 1411, - leftSideBearing: 86, - advanceWidth: 1139, - }, - T: { - x_min: 35, - x_max: 1214, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 35, - advanceWidth: 1251, - }, - U: { - x_min: 29, - x_max: 1444, - y_min: -28, - y_max: 1356, - ha: 1384, - leftSideBearing: 29, - advanceWidth: 1479, - }, - V: { - x_min: 33, - x_max: 1428, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 33, - advanceWidth: 1479, - }, - W: { - x_min: 10, - x_max: 1906, - y_min: -22, - y_max: 1356, - ha: 1378, - leftSideBearing: 10, - advanceWidth: 1933, - }, - X: { - x_min: 20, - x_max: 1449, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 20, - advanceWidth: 1479, - }, - Y: { - x_min: 45, - x_max: 1441, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 45, - advanceWidth: 1479, - }, - Z: { - x_min: 18, - x_max: 1222, - y_min: 0, - y_max: 1356, - ha: 1356, - leftSideBearing: 18, - advanceWidth: 1251, - }, - '[': { - x_min: 180, - x_max: 612, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 180, - advanceWidth: 682, - }, - '\\': { - x_min: -17, - x_max: 586, - y_min: -27, - y_max: 1383, - ha: 1410, - leftSideBearing: -17, - advanceWidth: 569, - }, - ']': { - x_min: 70, - x_max: 502, - y_min: -319, - y_max: 1355, - ha: 1674, - leftSideBearing: 70, - advanceWidth: 682, - }, - '^': { - x_min: 49, - x_max: 914, - y_min: 608, - y_max: 1355, - ha: 747, - leftSideBearing: 49, - advanceWidth: 961, - }, - _: { - x_min: 0, - x_max: 1024, - y_min: -255, - y_max: -153, - ha: 102, - leftSideBearing: 0, - advanceWidth: 1024, - }, - '`': { - x_min: 39, - x_max: 499, - y_min: 1037, - y_max: 1392.509803639748, - ha: 355.50980363974804, - leftSideBearing: 39, - advanceWidth: 682, - }, - a: { - x_min: 76, - x_max: 905, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 76, - advanceWidth: 909, - }, - b: { - x_min: 6, - x_max: 958, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 6, - advanceWidth: 1024, - }, - c: { - x_min: 51, - x_max: 843, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - d: { - x_min: 55, - x_max: 1006, - y_min: -20, - y_max: 1399, - ha: 1419, - leftSideBearing: 55, - advanceWidth: 1024, - }, - e: { - x_min: 51, - x_max: 868, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 51, - advanceWidth: 909, - }, - f: { - x_min: 41, - x_max: 783, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 41, - advanceWidth: 682, - }, - g: { - x_min: 57, - x_max: 963, - y_min: -446, - y_max: 942, - ha: 1388, - leftSideBearing: 57, - advanceWidth: 1024, - }, - h: { - x_min: 18, - x_max: 997, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 18, - advanceWidth: 1024, - }, - i: { - x_min: 33, - x_max: 516, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 33, - advanceWidth: 569, - }, - j: { - x_min: -142, - x_max: 397, - y_min: -446, - y_max: 1399, - ha: 1845, - leftSideBearing: -142, - advanceWidth: 569, - }, - k: { - x_min: 14, - x_max: 1029, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 14, - advanceWidth: 1024, - }, - l: { - x_min: 39, - x_max: 523, - y_min: 0, - y_max: 1399, - ha: 1399, - leftSideBearing: 39, - advanceWidth: 569, - }, - m: { - x_min: 33, - x_max: 1587, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1593, - }, - n: { - x_min: 33, - x_max: 993, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 33, - advanceWidth: 1024, - }, - o: { - x_min: 59, - x_max: 963, - y_min: -20, - y_max: 942, - ha: 962, - leftSideBearing: 59, - advanceWidth: 1024, - }, - p: { - x_min: 10, - x_max: 964, - y_min: -443, - y_max: 944, - ha: 1387, - leftSideBearing: 10, - advanceWidth: 1024, - }, - q: { - x_min: 49, - x_max: 999, - y_min: -443, - y_max: 942.0135137169275, - ha: 1385.0135137169275, - leftSideBearing: 49, - advanceWidth: 1024, - }, - r: { - x_min: 10, - x_max: 685, - y_min: 0, - y_max: 944, - ha: 944, - leftSideBearing: 10, - advanceWidth: 682, - }, - s: { - x_min: 104, - x_max: 713, - y_min: -20, - y_max: 942.0263161804552, - ha: 962.0263161804552, - leftSideBearing: 104, - advanceWidth: 797, - }, - t: { - x_min: 27, - x_max: 572, - y_min: -18, - y_max: 1186, - ha: 1204, - leftSideBearing: 27, - advanceWidth: 569, - }, - u: { - x_min: 18, - x_max: 981, - y_min: -21, - y_max: 921, - ha: 942, - leftSideBearing: 18, - advanceWidth: 1024, - }, - v: { - x_min: 39, - x_max: 976, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 39, - advanceWidth: 1024, - }, - w: { - x_min: 43, - x_max: 1423, - y_min: -28, - y_max: 921, - ha: 949, - leftSideBearing: 43, - advanceWidth: 1479, - }, - x: { - x_min: 35, - x_max: 989, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 35, - advanceWidth: 1024, - }, - y: { - x_min: 29, - x_max: 976, - y_min: -445, - y_max: 921, - ha: 1366, - leftSideBearing: 29, - advanceWidth: 1024, - }, - z: { - x_min: 55, - x_max: 855, - y_min: 0, - y_max: 921, - ha: 921, - leftSideBearing: 55, - advanceWidth: 909, - }, - '{': { - x_min: 205, - x_max: 717, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 205, - advanceWidth: 983, - }, - '|': { - x_min: 137, - x_max: 273, - y_min: -512, - y_max: 1535, - ha: 2047, - leftSideBearing: 137, - advanceWidth: 410, - }, - '}': { - x_min: 266, - x_max: 778, - y_min: -377, - y_max: 1397, - ha: 1774, - leftSideBearing: 266, - advanceWidth: 983, - }, - '~': { - x_min: 82, - x_max: 1028, - y_min: 380, - y_max: 666, - ha: 286, - leftSideBearing: 82, - advanceWidth: 1108, - }, - }, - fontFamily: 'serif', - resolution: 2048, - generatedOn: '2020-10-18T19:03:12.514Z', -}; diff --git a/build/esm/src/fonts/textfonts.js b/build/esm/src/fonts/textfonts.js deleted file mode 100644 index 35bacbfa06..0000000000 --- a/build/esm/src/fonts/textfonts.js +++ /dev/null @@ -1,104 +0,0 @@ -import { Font } from '../font.js'; -import { TextFormatter } from '../textformatter.js'; -import { PetalumaScriptFont } from './petalumascript_glyphs.js'; -import { RobotoSlabFont } from './robotoslab_glyphs.js'; -import { SansFontBold } from './sans_bold_text_metrics.js'; -import { SansFont } from './sans_text_metrics.js'; -import { SerifFont } from './serif_text_metrics.js'; -export function loadTextFonts() { - { - const fontData = SansFontBold; - const { fontFamily, resolution, glyphs } = fontData; - Font.load(fontFamily, fontData); - const maxSizeGlyph = '@'; - TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: true, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - { - const fontData = SansFont; - const { fontFamily, resolution, glyphs } = fontData; - Font.load(fontFamily, fontData); - const maxSizeGlyph = '@'; - TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Generic SANS font', - }); - } - { - const fontData = SerifFont; - const { fontFamily, resolution, glyphs } = fontData; - Font.load(fontFamily, fontData); - const maxSizeGlyph = '@'; - TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Generic SERIF font', - }); - } - { - const fontData = RobotoSlabFont; - const { fontFamily, resolution, glyphs } = fontData; - Font.load(fontFamily, fontData); - const maxSizeGlyph = 'b'; - TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: true, - description: 'Text font to pair with the Bravura / Gonville music fonts.', - }); - } - { - const fontData = PetalumaScriptFont; - const { fontFamily, resolution, glyphs } = fontData; - Font.load(fontFamily, fontData); - const maxSizeGlyph = 'b'; - TextFormatter.registerInfo({ - family: fontFamily, - resolution, - glyphs, - maxSizeGlyph, - monospaced: false, - bold: false, - italic: false, - superscriptOffset: 0.66, - subscriptOffset: 0.66, - serifs: false, - description: 'Text font to pair with the Petaluma music font.', - }); - } -} diff --git a/build/esm/src/formatter.js b/build/esm/src/formatter.js deleted file mode 100644 index 47fd80b709..0000000000 --- a/build/esm/src/formatter.js +++ /dev/null @@ -1,620 +0,0 @@ -import { Beam } from './beam.js'; -import { Font } from './font.js'; -import { Fraction } from './fraction.js'; -import { ModifierContext } from './modifiercontext.js'; -import { Stave } from './stave.js'; -import { StaveConnector } from './staveconnector.js'; -import { Tables } from './tables.js'; -import { TickContext } from './tickcontext.js'; -import { isNote, isStaveNote } from './typeguard.js'; -import { defined, log, midLine, RuntimeError, sumArray } from './util.js'; -import { Voice } from './voice.js'; -function createContexts(voices, makeContext, addToContext) { - if (voices.length == 0) - return { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - const tickToContextMap = {}; - const tickList = []; - const contexts = []; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - voices.forEach((voice, voiceIndex) => { - const ticksUsed = new Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - if (!tickToContextMap[integerTicks]) { - const newContext = makeContext({ tickID: integerTicks }); - contexts.push(newContext); - tickToContextMap[integerTicks] = newContext; - tickList.push(integerTicks); - } - addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); - ticksUsed.add(tickable.getTicks()); - }); - }); - return { - map: tickToContextMap, - array: contexts, - list: tickList.sort((a, b) => a - b), - resolutionMultiplier, - }; -} -function L(...args) { - if (Formatter.DEBUG) - log('Vex.Flow.Formatter', args); -} -function getRestLineForNextNoteGroup(notes, currRestLine, currNoteIndex, compare) { - let nextRestLine = currRestLine; - for (let noteIndex = currNoteIndex + 1; noteIndex < notes.length; noteIndex++) { - const note = notes[noteIndex]; - if (isNote(note) && !note.isRest() && !note.shouldIgnoreTicks()) { - nextRestLine = note.getLineForRest(); - break; - } - } - if (compare && currRestLine !== nextRestLine) { - const top = Math.max(currRestLine, nextRestLine); - const bot = Math.min(currRestLine, nextRestLine); - nextRestLine = midLine(top, bot); - } - return nextRestLine; -} -export class Formatter { - static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) { - notes.reduce((accumulator, note) => { - note.addToModifierContext(new ModifierContext()); - const tick = new TickContext().addTickable(note).preFormat(); - const metrics = tick.getMetrics(); - tick.setX(accumulator + metrics.totalLeftPx); - return accumulator + tick.getWidth() + metrics.totalRightPx + paddingBetween; - }, x); - } - static plotDebugging(ctx, formatter, xPos, y1, y2, options) { - options = Object.assign({ stavePadding: Tables.currentMusicFont().lookupMetric('stave.padding') }, options); - const x = xPos + options.stavePadding; - const contextGaps = formatter.contextGaps; - function stroke(x1, x2, color) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(1); - ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1); - } - ctx.save(); - ctx.setFont(Font.SANS_SERIF, 8); - contextGaps.gaps.forEach((gap) => { - stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)'); - ctx.setFillStyle('green'); - ctx.fillText(Math.round(gap.x2 - gap.x1).toString(), x + gap.x1, y2 + 12); - }); - ctx.setFillStyle('red'); - ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27); - ctx.restore(); - } - static FormatAndDraw(ctx, stave, notes, params) { - let options = { - auto_beam: false, - align_rests: false, - }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - else if (typeof params === 'boolean') { - options.auto_beam = params; - } - const voice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); - const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : []; - new Formatter() - .joinVoices([voice]) - .formatToStave([voice], stave, { align_rests: options.align_rests, stave }); - voice.setStave(stave).draw(ctx, stave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - return voice.getBoundingBox(); - } - static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) { - let opts = { - auto_beam: autobeam, - align_rests: false, - }; - if (typeof params === 'object') { - opts = Object.assign(Object.assign({}, opts), params); - } - else if (typeof params === 'boolean') { - opts.auto_beam = params; - } - const notevoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(notes); - const tabvoice = new Voice(Tables.TIME4_4).setMode(Voice.Mode.SOFT).addTickables(tabnotes); - const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : []; - new Formatter() - .joinVoices([notevoice]) - .joinVoices([tabvoice]) - .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests }); - notevoice.draw(ctx, stave); - tabvoice.draw(ctx, tabstave); - beams.forEach((beam) => beam.setContext(ctx).draw()); - new StaveConnector(stave, tabstave).setContext(ctx).draw(); - } - static AlignRestsToNotes(tickables, alignAllNotes, alignTuplets) { - tickables.forEach((currTickable, index) => { - if (isStaveNote(currTickable) && currTickable.isRest()) { - if (currTickable.getTuplet() && !alignTuplets) { - return; - } - const position = currTickable.getGlyphProps().position.toUpperCase(); - if (position !== 'R/4' && position !== 'B/4') { - return; - } - if (alignAllNotes || currTickable.getBeam()) { - const props = currTickable.getKeyProps()[0]; - if (index === 0) { - props.line = getRestLineForNextNoteGroup(tickables, props.line, index, false); - } - else if (index > 0 && index < tickables.length) { - const prevTickable = tickables[index - 1]; - if (isStaveNote(prevTickable)) { - if (prevTickable.isRest()) { - props.line = prevTickable.getKeyProps()[0].line; - } - else { - const restLine = prevTickable.getLineForRest(); - props.line = getRestLineForNextNoteGroup(tickables, restLine, index, true); - } - } - } - currTickable.setKeyLine(0, props.line); - } - } - }); - } - constructor(options) { - this.formatterOptions = Object.assign({ globalSoftmax: false, softmaxFactor: Tables.SOFTMAX_FACTOR, maxIterations: 5 }, options); - this.justifyWidth = 0; - this.totalCost = 0; - this.totalShift = 0; - this.durationStats = {}; - this.minTotalWidth = 0; - this.hasMinTotalWidth = false; - this.tickContexts = { - map: {}, - array: [], - list: [], - resolutionMultiplier: 0, - }; - this.modifierContexts = []; - this.contextGaps = { - total: 0, - gaps: [], - }; - this.voices = []; - this.lossHistory = []; - } - alignRests(voices, alignAllNotes) { - if (!voices || !voices.length) { - throw new RuntimeError('BadArgument', 'No voices to format rests'); - } - voices.forEach((voice) => Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes)); - } - preCalculateMinTotalWidth(voices) { - const unalignedPadding = Tables.currentMusicFont().lookupMetric('stave.unalignedNotePadding'); - let unalignedCtxCount = 0; - let wsum = 0; - let dsum = 0; - const widths = []; - const durations = []; - if (this.hasMinTotalWidth) - return this.minTotalWidth; - if (!voices) { - throw new RuntimeError('BadArgument', "'voices' required to run preCalculateMinTotalWidth"); - } - this.createTickContexts(voices); - const { list: contextList, map: contextMap } = this.tickContexts; - this.minTotalWidth = 0; - contextList.forEach((tick) => { - const context = contextMap[tick]; - context.preFormat(); - if (context.getTickables().length < voices.length) { - unalignedCtxCount += 1; - } - context.getTickables().forEach((t) => { - wsum += t.getMetrics().width; - dsum += t.getTicks().value(); - widths.push(t.getMetrics().width); - durations.push(t.getTicks().value()); - }); - const width = context.getWidth(); - this.minTotalWidth += width; - }); - this.hasMinTotalWidth = true; - const wavg = wsum > 0 ? wsum / widths.length : 1 / widths.length; - const wvar = sumArray(widths.map((ll) => Math.pow(ll - wavg, 2))); - const wpads = Math.pow(wvar / widths.length, 0.5) / wavg; - const davg = dsum / durations.length; - const dvar = sumArray(durations.map((ll) => Math.pow(ll - davg, 2))); - const dpads = Math.pow(dvar / durations.length, 0.5) / davg; - const padmax = Math.max(dpads, wpads) * contextList.length * unalignedPadding; - const unalignedPad = unalignedPadding * unalignedCtxCount; - return this.minTotalWidth + Math.max(unalignedPad, padmax); - } - getMinTotalWidth() { - if (!this.hasMinTotalWidth) { - throw new RuntimeError('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'"); - } - return this.minTotalWidth; - } - static getResolutionMultiplier(voices) { - if (!voices || !voices.length) { - throw new RuntimeError('BadArgument', 'No voices to format'); - } - const totalTicks = voices[0].getTotalTicks(); - const resolutionMultiplier = voices.reduce((accumulator, voice) => { - if (!voice.getTotalTicks().equals(totalTicks)) { - throw new RuntimeError('TickMismatch', 'Voices should have same total note duration in ticks.'); - } - if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) { - throw new RuntimeError('IncompleteVoice', 'Voice does not have enough notes.'); - } - return Math.max(accumulator, Fraction.LCM(accumulator, voice.getResolutionMultiplier())); - }, 1); - return resolutionMultiplier; - } - createModifierContexts(voices) { - if (voices.length == 0) - return; - const resolutionMultiplier = Formatter.getResolutionMultiplier(voices); - const tickToContextMap = new Map(); - const contexts = []; - voices.forEach((voice) => { - const ticksUsed = new Fraction(0, resolutionMultiplier); - voice.getTickables().forEach((tickable) => { - const integerTicks = ticksUsed.numerator; - let staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - if (!staveTickToContextMap) { - tickToContextMap.set(tickable.getStave(), {}); - staveTickToContextMap = tickToContextMap.get(tickable.getStave()); - } - if (!(staveTickToContextMap ? staveTickToContextMap[integerTicks] : undefined)) { - const newContext = new ModifierContext(); - contexts.push(newContext); - staveTickToContextMap[integerTicks] = newContext; - } - tickable.addToModifierContext(staveTickToContextMap[integerTicks]); - ticksUsed.add(tickable.getTicks()); - }); - }); - this.modifierContexts.push({ - map: tickToContextMap, - array: contexts, - resolutionMultiplier, - }); - } - createTickContexts(voices) { - const fn = (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex); - const contexts = createContexts(voices, (tick) => new TickContext(tick), fn); - this.tickContexts = contexts; - const contextArray = this.tickContexts.array; - contextArray.forEach((context) => { - context.tContexts = contextArray; - }); - return contexts; - } - getTickContexts() { - return this.tickContexts; - } - preFormat(justifyWidth = 0, renderingContext, voicesParam, stave) { - const contexts = this.tickContexts; - if (!contexts) { - throw new RuntimeError('NoTickContexts', 'preFormat requires TickContexts'); - } - const { list: contextList, map: contextMap } = contexts; - this.lossHistory = []; - if (voicesParam && stave) { - voicesParam.forEach((voice) => voice.setStave(stave).preFormat()); - } - let x = 0; - let shift = 0; - this.minTotalWidth = 0; - let totalTicks = 0; - contextList.forEach((tick) => { - const context = contextMap[tick]; - context.preFormat(); - const width = context.getWidth(); - this.minTotalWidth += width; - const maxTicks = context.getMaxTicks().value(); - totalTicks += maxTicks; - const metrics = context.getMetrics(); - x = x + shift + metrics.totalLeftPx; - context.setX(x); - shift = width - metrics.totalLeftPx; - }); - const { globalSoftmax, softmaxFactor, maxIterations } = this.formatterOptions; - const exp = (tick) => Math.pow(softmaxFactor, (contextMap[tick].getMaxTicks().value() / totalTicks)); - const expTicksUsed = sumArray(contextList.map(exp)); - this.minTotalWidth = x + shift; - this.hasMinTotalWidth = true; - if (justifyWidth <= 0) - return this.evaluate(); - const firstContext = contextMap[contextList[0]]; - const lastContext = contextMap[contextList[contextList.length - 1]]; - function calculateIdealDistances(adjustedJustifyWidth) { - const distances = contextList.map((tick, i) => { - const context = contextMap[tick]; - const voices = context.getTickablesByVoice(); - let backTickable; - if (i > 0) { - const prevContext = contextMap[contextList[i - 1]]; - for (let j = i - 1; j >= 0; j--) { - const backTick = contextMap[contextList[j]]; - const backVoices = backTick.getTickablesByVoice(); - const matchingVoices = []; - Object.keys(voices).forEach((v) => { - if (backVoices[v]) { - matchingVoices.push(v); - } - }); - if (matchingVoices.length > 0) { - let maxTicks = 0; - let maxNegativeShiftPx = Infinity; - let expectedDistance = 0; - matchingVoices.forEach((v) => { - const ticks = backVoices[v].getTicks().value(); - if (ticks > maxTicks) { - backTickable = backVoices[v]; - maxTicks = ticks; - } - const thisTickable = voices[v]; - const insideLeftEdge = thisTickable.getX() - - (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx); - const backMetrics = backVoices[v].getMetrics(); - const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx; - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge); - }); - maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - (prevContext.getX() + adjustedJustifyWidth * 0.05)); - if (globalSoftmax) { - const t = totalTicks; - expectedDistance = (Math.pow(softmaxFactor, (maxTicks / t)) / expTicksUsed) * adjustedJustifyWidth; - } - else if (typeof backTickable !== 'undefined') { - expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth; - } - return { - expectedDistance, - maxNegativeShiftPx, - fromTickable: backTickable, - }; - } - } - } - return { expectedDistance: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 }; - }); - return distances; - } - function shiftToIdealDistances(idealDistances) { - const centerX = adjustedJustifyWidth / 2; - let spaceAccum = 0; - contextList.forEach((tick, index) => { - const context = contextMap[tick]; - if (index > 0) { - const contextX = context.getX(); - const ideal = idealDistances[index]; - const errorPx = defined(ideal.fromTickable).getX() + ideal.expectedDistance - (contextX + spaceAccum); - let negativeShiftPx = 0; - if (errorPx > 0) { - spaceAccum += errorPx; - } - else if (errorPx < 0) { - negativeShiftPx = Math.min(ideal.maxNegativeShiftPx, Math.abs(errorPx)); - spaceAccum += -negativeShiftPx; - } - context.setX(contextX + spaceAccum); - } - context.getCenterAlignedTickables().forEach((tickable) => { - tickable.setCenterXShift(centerX - context.getX()); - }); - }); - return lastContext.getX() - firstContext.getX(); - } - const adjustedJustifyWidth = justifyWidth - - lastContext.getMetrics().notePx - - lastContext.getMetrics().totalRightPx - - firstContext.getMetrics().totalLeftPx; - const musicFont = Tables.currentMusicFont(); - const configMinPadding = musicFont.lookupMetric('stave.endPaddingMin'); - const configMaxPadding = musicFont.lookupMetric('stave.endPaddingMax'); - const leftPadding = musicFont.lookupMetric('stave.padding'); - let targetWidth = adjustedJustifyWidth; - const distances = calculateIdealDistances(targetWidth); - let actualWidth = shiftToIdealDistances(distances); - if (contextList.length === 1) - return 0; - const calcMinDistance = (targetWidth, distances) => { - let mdCalc = targetWidth / 2; - if (distances.length > 1) { - for (let di = 1; di < distances.length; ++di) { - mdCalc = Math.min(distances[di].expectedDistance / 2, mdCalc); - } - } - return mdCalc; - }; - const minDistance = calcMinDistance(targetWidth, distances); - const paddingMaxCalc = (curTargetWidth) => { - let lastTickablePadding = 0; - const lastTickable = lastContext && lastContext.getMaxTickable(); - if (lastTickable) { - const voice = lastTickable.getVoice(); - if (voice.getTicksUsed().value() > voice.getTotalTicks().value()) { - return configMaxPadding * 2 < minDistance ? minDistance : configMaxPadding; - } - const tickWidth = lastTickable.getWidth(); - lastTickablePadding = - voice.softmax(lastContext.getMaxTicks().value()) * curTargetWidth - (tickWidth + leftPadding); - } - return configMaxPadding * 2 < lastTickablePadding ? lastTickablePadding : configMaxPadding; - }; - let paddingMax = paddingMaxCalc(targetWidth); - let paddingMin = paddingMax - (configMaxPadding - configMinPadding); - const maxX = adjustedJustifyWidth - paddingMin; - let iterations = maxIterations; - while ((actualWidth > maxX && iterations > 0) || (actualWidth + paddingMax < maxX && iterations > 1)) { - targetWidth -= actualWidth - maxX; - paddingMax = paddingMaxCalc(targetWidth); - paddingMin = paddingMax - (configMaxPadding - configMinPadding); - actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth)); - iterations--; - } - this.justifyWidth = justifyWidth; - return this.evaluate(); - } - evaluate() { - const contexts = this.tickContexts; - const justifyWidth = this.justifyWidth; - this.contextGaps = { total: 0, gaps: [] }; - contexts.list.forEach((tick, index) => { - if (index === 0) - return; - const prevTick = contexts.list[index - 1]; - const prevContext = contexts.map[prevTick]; - const context = contexts.map[tick]; - const prevMetrics = prevContext.getMetrics(); - const currMetrics = context.getMetrics(); - const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; - const insideLeftEdge = context.getX() - currMetrics.totalLeftPx; - const gap = insideLeftEdge - insideRightEdge; - this.contextGaps.total += gap; - this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge }); - context.getFormatterMetrics().freedom.left = gap; - prevContext.getFormatterMetrics().freedom.right = gap; - }); - this.durationStats = {}; - const durationStats = this.durationStats; - function updateStats(duration, space) { - const stats = durationStats[duration]; - if (stats === undefined) { - durationStats[duration] = { mean: space, count: 1 }; - } - else { - stats.count += 1; - stats.mean = (stats.mean + space) / 2; - } - } - this.voices.forEach((voice) => { - voice.getTickables().forEach((note, i, notes) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getMetrics(); - const formatterMetrics = note.getFormatterMetrics(); - const leftNoteEdge = note.getX() + metrics.notePx + metrics.modRightPx + metrics.rightDisplacedHeadPx; - let space = 0; - if (i < notes.length - 1) { - const rightNote = notes[i + 1]; - const rightMetrics = rightNote.getMetrics(); - const rightNoteEdge = rightNote.getX() - rightMetrics.modLeftPx - rightMetrics.leftDisplacedHeadPx; - space = rightNoteEdge - leftNoteEdge; - formatterMetrics.space.used = rightNote.getX() - note.getX(); - rightNote.getFormatterMetrics().freedom.left = space; - } - else { - space = justifyWidth - leftNoteEdge; - formatterMetrics.space.used = justifyWidth - note.getX(); - } - formatterMetrics.freedom.right = space; - updateStats(duration, formatterMetrics.space.used); - }); - }); - let totalDeviation = 0; - this.voices.forEach((voice) => { - voice.getTickables().forEach((note) => { - const duration = note.getTicks().clone().simplify().toString(); - const metrics = note.getFormatterMetrics(); - metrics.space.mean = durationStats[duration].mean; - metrics.duration = duration; - metrics.iterations += 1; - metrics.space.deviation = metrics.space.used - metrics.space.mean; - totalDeviation += Math.pow(metrics.space.deviation, 2); - }); - }); - this.totalCost = Math.sqrt(totalDeviation); - this.lossHistory.push(this.totalCost); - return this.totalCost; - } - tune(options) { - var _a; - const contexts = this.tickContexts; - if (!contexts) { - return 0; - } - const alpha = (_a = options === null || options === void 0 ? void 0 : options.alpha) !== null && _a !== void 0 ? _a : 0.5; - function move(current, shift, prev, next) { - current.setX(current.getX() + shift); - current.getFormatterMetrics().freedom.left += shift; - current.getFormatterMetrics().freedom.right -= shift; - if (prev) - prev.getFormatterMetrics().freedom.right += shift; - if (next) - next.getFormatterMetrics().freedom.left -= shift; - } - let shift = 0; - this.totalShift = 0; - contexts.list.forEach((tick, index, list) => { - const context = contexts.map[tick]; - const prevContext = index > 0 ? contexts.map[list[index - 1]] : undefined; - const nextContext = index < list.length - 1 ? contexts.map[list[index + 1]] : undefined; - move(context, shift, prevContext, nextContext); - const cost = -sumArray(context.getTickables().map((t) => t.getFormatterMetrics().space.deviation)); - if (cost > 0) { - shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else if (cost < 0) { - if (nextContext) { - shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost)); - } - else { - shift = 0; - } - } - shift *= alpha; - this.totalShift += shift; - }); - return this.evaluate(); - } - postFormat() { - this.modifierContexts.forEach((modifierContexts) => { - modifierContexts.array.forEach((mc) => mc.postFormat()); - }); - this.tickContexts.list.forEach((tick) => { - this.tickContexts.map[tick].postFormat(); - }); - return this; - } - joinVoices(voices) { - this.createModifierContexts(voices); - this.hasMinTotalWidth = false; - return this; - } - format(voices, justifyWidth, options) { - const opts = Object.assign({ align_rests: false }, options); - this.voices = voices; - const softmaxFactor = this.formatterOptions.softmaxFactor; - if (softmaxFactor) { - this.voices.forEach((v) => v.setSoftmaxFactor(softmaxFactor)); - } - this.alignRests(voices, opts.align_rests); - this.createTickContexts(voices); - this.preFormat(justifyWidth, opts.context, voices, opts.stave); - if (opts.stave) - this.postFormat(); - return this; - } - formatToStave(voices, stave, optionsParam) { - const options = Object.assign({ context: stave.getContext() }, optionsParam); - const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - Stave.defaultPadding; - L('Formatting voices to width: ', justifyWidth); - return this.format(voices, justifyWidth, options); - } - getTickContext(tick) { - var _a; - return (_a = this.tickContexts) === null || _a === void 0 ? void 0 : _a.map[tick]; - } -} -Formatter.DEBUG = false; diff --git a/build/esm/src/fraction.js b/build/esm/src/fraction.js deleted file mode 100644 index d51919cf41..0000000000 --- a/build/esm/src/fraction.js +++ /dev/null @@ -1,171 +0,0 @@ -import { RuntimeError } from './util.js'; -export class Fraction { - static get CATEGORY() { - return "Fraction"; - } - static GCD(a, b) { - if (typeof a !== 'number' || Number.isNaN(a) || typeof b !== 'number' || Number.isNaN(b)) { - throw new RuntimeError('BadArgument', `Invalid numbers: ${a}, ${b}`); - } - let t; - while (b !== 0) { - t = b; - b = a % b; - a = t; - } - return a; - } - static LCM(a, b) { - return (a * b) / Fraction.GCD(a, b); - } - static LCMM(args) { - if (args.length === 0) { - return 0; - } - else if (args.length === 1) { - return args[0]; - } - else if (args.length === 2) { - return Fraction.LCM(args[0], args[1]); - } - else { - return Fraction.LCM(args.shift(), Fraction.LCMM(args)); - } - } - constructor(numerator, denominator) { - this.numerator = 1; - this.denominator = 1; - this.set(numerator, denominator); - } - set(numerator = 1, denominator = 1) { - this.numerator = numerator; - this.denominator = denominator; - return this; - } - value() { - return this.numerator / this.denominator; - } - simplify() { - let u = this.numerator; - let d = this.denominator; - const gcd = Fraction.GCD(u, d); - u /= gcd; - d /= gcd; - if (d < 0) { - d = -d; - u = -u; - } - return this.set(u, d); - } - add(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a + otherNumerator * b; - return this.set(u, lcm); - } - subtract(param1 = 0, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - const lcm = Fraction.LCM(this.denominator, otherDenominator); - const a = lcm / this.denominator; - const b = lcm / otherDenominator; - const u = this.numerator * a - otherNumerator * b; - return this.set(u, lcm); - } - multiply(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator); - } - divide(param1 = 1, param2 = 1) { - const [otherNumerator, otherDenominator] = getNumeratorAndDenominator(param1, param2); - return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator); - } - equals(compare) { - const a = Fraction.__staticFractionA.copy(compare).simplify(); - const b = Fraction.__staticFractionB.copy(this).simplify(); - return a.numerator === b.numerator && a.denominator === b.denominator; - } - greaterThan(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator > 0; - } - greaterThanEquals(compare) { - const a = Fraction.__staticFractionB.copy(this); - a.subtract(compare); - return a.numerator >= 0; - } - lessThan(compare) { - return !this.greaterThanEquals(compare); - } - lessThanEquals(compare) { - return !this.greaterThan(compare); - } - clone() { - return new Fraction(this.numerator, this.denominator); - } - copy(other) { - if (typeof other === 'number') { - return this.set(other, 1); - } - else { - return this.set(other.numerator, other.denominator); - } - } - quotient() { - return Math.floor(this.numerator / this.denominator); - } - remainder() { - return this.numerator % this.denominator; - } - makeAbs() { - this.denominator = Math.abs(this.denominator); - this.numerator = Math.abs(this.numerator); - return this; - } - toString() { - return `${this.numerator}/${this.denominator}`; - } - toSimplifiedString() { - return Fraction.__staticFractionTmp.copy(this).simplify().toString(); - } - toMixedString() { - let s = ''; - const q = this.quotient(); - const f = Fraction.__staticFractionTmp.copy(this); - if (q < 0) { - f.makeAbs(); - } - if (q !== 0) { - s += q; - if (f.numerator !== 0) { - s += ` ${f.toSimplifiedString()}`; - } - } - else if (f.numerator === 0) { - s = '0'; - } - else { - s = f.toSimplifiedString(); - } - return s; - } - parse(str) { - const i = str.split('/'); - const n = parseInt(i[0], 10); - const d = i[1] ? parseInt(i[1], 10) : 1; - return this.set(n, d); - } -} -Fraction.__staticFractionA = new Fraction(); -Fraction.__staticFractionB = new Fraction(); -Fraction.__staticFractionTmp = new Fraction(); -function getNumeratorAndDenominator(n, d = 1) { - if (typeof n === 'number') { - return [n, d]; - } - else { - return [n.numerator, n.denominator]; - } -} diff --git a/build/esm/src/frethandfinger.js b/build/esm/src/frethandfinger.js deleted file mode 100644 index 880f5b2ade..0000000000 --- a/build/esm/src/frethandfinger.js +++ /dev/null @@ -1,156 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Modifier, ModifierPosition } from './modifier.js'; -import { Tables } from './tables.js'; -import { TextFormatter } from './textformatter.js'; -import { RuntimeError } from './util.js'; -export class FretHandFinger extends Modifier { - static get CATEGORY() { - return "FretHandFinger"; - } - static format(nums, state) { - const { left_shift, right_shift } = state; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shiftLeft = 0; - let shiftRight = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const textFormatter = TextFormatter.create(num.textFont); - const textHeight = textFormatter.maxHeight; - if (num.position === ModifierPosition.ABOVE) { - state.top_text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (num.position === ModifierPosition.BELOW) { - state.text_line += textHeight / Tables.STAVE_LINE_DISTANCE + 0.5; - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft); - } - if (right_shift === 0) { - shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight); - } - } - prev_note = note; - } - nums_list.push({ - note, - num, - pos, - line: props.line, - shiftL: shiftLeft, - shiftR: shiftRight, - }); - } - nums_list.sort((a, b) => b.line - a.line); - let numShiftL = 0; - let numShiftR = 0; - let xWidthL = 0; - let xWidthR = 0; - let lastLine = null; - let lastNote = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const { note, pos, num, line, shiftL, shiftR } = nums_list[i]; - if (line !== lastLine || note !== lastNote) { - numShiftL = left_shift + shiftL; - numShiftR = right_shift + shiftR; - } - const numWidth = num.getWidth() + num_spacing; - if (pos === Modifier.Position.LEFT) { - num.setXShift(left_shift + numShiftL); - num_shift = left_shift + numWidth; - xWidthL = num_shift > xWidthL ? num_shift : xWidthL; - } - else if (pos === Modifier.Position.RIGHT) { - num.setXShift(numShiftR); - num_shift = shiftRight + numWidth; - xWidthR = num_shift > xWidthR ? num_shift : xWidthR; - } - lastLine = line; - lastNote = note; - } - state.left_shift += xWidthL; - state.right_shift += xWidthR; - return true; - } - static easyScoreHook({ fingerings } = {}, note, builder) { - fingerings === null || fingerings === void 0 ? void 0 : fingerings.split(',').map((fingeringString) => { - const split = fingeringString.trim().split('.'); - const params = { number: split[0] }; - if (split[1]) - params.position = split[1]; - return builder.getFactory().Fingering(params); - }).map((fingering, index) => note.addModifier(fingering, index)); - } - constructor(finger) { - super(); - this.finger = finger; - this.width = 7; - this.position = Modifier.Position.LEFT; - this.x_shift = 0; - this.y_shift = 0; - this.x_offset = 0; - this.y_offset = 0; - this.resetFont(); - } - setFretHandFinger(finger) { - this.finger = finger; - return this; - } - getFretHandFinger() { - return this.finger; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let dot_x = start.x + this.x_shift + this.x_offset; - let dot_y = start.y + this.y_shift + this.y_offset + 5; - switch (this.position) { - case Modifier.Position.ABOVE: - dot_x -= 4; - dot_y -= 12; - break; - case Modifier.Position.BELOW: - dot_x -= 2; - dot_y += 10; - break; - case Modifier.Position.LEFT: - dot_x -= this.width; - break; - case Modifier.Position.RIGHT: - dot_x += 1; - break; - default: - throw new RuntimeError('InvalidPosition', `The position ${this.position} does not exist`); - } - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('' + this.finger, dot_x, dot_y); - ctx.restore(); - } -} -FretHandFinger.TEXT_FONT = { - family: Font.SANS_SERIF, - size: 9, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/ghostnote.js b/build/esm/src/ghostnote.js deleted file mode 100644 index 02b3f05342..0000000000 --- a/build/esm/src/ghostnote.js +++ /dev/null @@ -1,50 +0,0 @@ -import { StemmableNote } from './stemmablenote.js'; -import { isAnnotation } from './typeguard.js'; -import { RuntimeError } from './util.js'; -const ERROR_MSG = 'Ghost note must have valid initialization data to identify duration.'; -export class GhostNote extends StemmableNote { - static get CATEGORY() { - return "GhostNote"; - } - constructor(parameter) { - if (!parameter) { - throw new RuntimeError('BadArguments', ERROR_MSG); - } - let noteStruct; - if (typeof parameter === 'string') { - noteStruct = { duration: parameter }; - } - else if (typeof parameter === 'object') { - noteStruct = parameter; - } - else { - throw new RuntimeError('BadArguments', ERROR_MSG); - } - super(noteStruct); - this.setWidth(0); - } - isRest() { - return true; - } - setStave(stave) { - super.setStave(stave); - return this; - } - addToModifierContext(mc) { - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - this.setRendered(); - for (let i = 0; i < this.modifiers.length; ++i) { - const modifier = this.modifiers[i]; - if (isAnnotation(modifier)) { - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - } - } - } -} diff --git a/build/esm/src/glyph.js b/build/esm/src/glyph.js deleted file mode 100644 index d20c07c035..0000000000 --- a/build/esm/src/glyph.js +++ /dev/null @@ -1,340 +0,0 @@ -import { BoundingBox } from './boundingbox.js'; -import { BoundingBoxComputation } from './boundingboxcomputation.js'; -import { Element } from './element.js'; -import { Tables } from './tables.js'; -import { defined, RuntimeError } from './util.js'; -class GlyphCacheEntry { - constructor(fontStack, code, category) { - this.point = -1; - this.metrics = Glyph.loadMetrics(fontStack, code, category); - this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift); - if (category) { - this.point = Glyph.lookupFontMetric(this.metrics.font, category, code, 'point', -1); - } - } -} -class GlyphCache { - constructor() { - this.cache = new Map(); - } - lookup(code, category) { - let entries = this.cache.get(Glyph.CURRENT_CACHE_KEY); - if (entries === undefined) { - entries = {}; - this.cache.set(Glyph.CURRENT_CACHE_KEY, entries); - } - const key = category ? `${code}%${category}` : code; - let entry = entries[key]; - if (entry === undefined) { - entry = new GlyphCacheEntry(Glyph.MUSIC_FONT_STACK, code, category); - entries[key] = entry; - } - return entry; - } -} -class GlyphOutline { - constructor(outline, originX, originY, scale) { - this.outline = outline; - this.originX = originX; - this.originY = originY; - this.scale = scale; - this.i = 0; - this.precision = 1; - this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); - } - done() { - return this.i >= this.outline.length; - } - next() { - return Math.round((this.outline[this.i++] * this.precision) / this.precision); - } - nextX() { - return Math.round((this.originX + this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - nextY() { - return Math.round((this.originY - this.outline[this.i++] * this.scale) * this.precision) / this.precision; - } - static parse(str) { - const result = []; - const parts = str.split(' '); - let i = 0; - while (i < parts.length) { - switch (parts[i++]) { - case 'm': - result.push(0, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'l': - result.push(1, parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'q': - result.push(2, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - case 'b': - result.push(3, parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++]), parseInt(parts[i++])); - break; - } - } - return result; - } -} -export class Glyph extends Element { - static get CATEGORY() { - return "Glyph"; - } - static lookupFontMetric(font, category, code, key, defaultValue) { - let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, undefined); - if (value === undefined) { - value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue); - } - return value; - } - static lookupGlyph(fontStack, code) { - defined(fontStack, 'BadFontStack', 'Font stack is misconfigured'); - let glyph; - let font; - for (let i = 0; i < fontStack.length; i++) { - font = fontStack[i]; - glyph = font.getGlyphs()[code]; - if (glyph) - return { glyph, font }; - } - throw new RuntimeError('BadGlyph', `Glyph ${code} does not exist in font.`); - } - static loadMetrics(fontStack, code, category) { - const { glyph, font } = Glyph.lookupGlyph(fontStack, code); - if (!glyph.o) - throw new RuntimeError('BadGlyph', `Glyph ${code} has no outline defined.`); - let x_shift = 0; - let y_shift = 0; - let scale = 1; - if (category && font) { - x_shift = Glyph.lookupFontMetric(font, category, code, 'shiftX', 0); - y_shift = Glyph.lookupFontMetric(font, category, code, 'shiftY', 0); - scale = Glyph.lookupFontMetric(font, category, code, 'scale', 1); - } - const x_min = glyph.x_min; - const x_max = glyph.x_max; - const ha = glyph.ha; - if (!glyph.cached_outline) { - glyph.cached_outline = GlyphOutline.parse(glyph.o); - } - return { - x_min, - x_max, - x_shift, - y_shift, - scale, - ha, - outline: glyph.cached_outline, - font, - width: x_max - x_min, - height: ha, - }; - } - static renderGlyph(ctx, x_pos, y_pos, point, code, options) { - var _a; - const data = Glyph.cache.lookup(code, options === null || options === void 0 ? void 0 : options.category); - const metrics = data.metrics; - if (data.point != -1) { - point = data.point; - } - const customScale = (_a = options === null || options === void 0 ? void 0 : options.scale) !== null && _a !== void 0 ? _a : 1; - const scale = ((point * 72.0) / (metrics.font.getResolution() * 100.0)) * metrics.scale * customScale; - Glyph.renderOutline(ctx, metrics.outline, scale, x_pos + metrics.x_shift * customScale, y_pos + metrics.y_shift * customScale); - return metrics; - } - static renderOutline(ctx, outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - ctx.beginPath(); - let x, y; - while (!go.done()) { - switch (go.next()) { - case 0: - ctx.moveTo(go.nextX(), go.nextY()); - break; - case 1: - ctx.lineTo(go.nextX(), go.nextY()); - break; - case 2: - x = go.nextX(); - y = go.nextY(); - ctx.quadraticCurveTo(go.nextX(), go.nextY(), x, y); - break; - case 3: - x = go.nextX(); - y = go.nextY(); - ctx.bezierCurveTo(go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - break; - } - } - ctx.fill(); - } - static getOutlineBoundingBox(outline, scale, x_pos, y_pos) { - const go = new GlyphOutline(outline, x_pos, y_pos, scale); - const bboxComp = new BoundingBoxComputation(); - let penX = x_pos; - let penY = y_pos; - let x, y; - while (!go.done()) { - switch (go.next()) { - case 0: - penX = go.nextX(); - penY = go.nextY(); - break; - case 1: - bboxComp.addPoint(penX, penY); - penX = go.nextX(); - penY = go.nextY(); - bboxComp.addPoint(penX, penY); - break; - case 2: - x = go.nextX(); - y = go.nextY(); - bboxComp.addQuadraticCurve(penX, penY, go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - case 3: - x = go.nextX(); - y = go.nextY(); - bboxComp.addBezierCurve(penX, penY, go.nextX(), go.nextY(), go.nextX(), go.nextY(), x, y); - penX = x; - penY = y; - break; - } - } - return new BoundingBox(bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()); - } - static getWidth(code, point, category) { - const data = Glyph.cache.lookup(code, category); - if (data.point != -1) { - point = data.point; - } - const scale = (point * 72) / (data.metrics.font.getResolution() * 100); - return data.bbox.getW() * scale; - } - constructor(code, point, options) { - super(); - this.bbox = new BoundingBox(0, 0, 0, 0); - this.topGlyphs = []; - this.botGlyphs = []; - this.options = {}; - this.scale = 1; - this.code = code; - this.point = point; - this.originShift = { x: 0, y: 0 }; - this.x_shift = 0; - this.y_shift = 0; - if (options) { - this.setOptions(options); - } - else { - this.reset(); - } - } - draw(...args) { - } - getCode() { - return this.code; - } - setOptions(options) { - this.options = Object.assign(Object.assign({}, this.options), options); - this.reset(); - } - setPoint(point) { - this.point = point; - return this; - } - setStave(stave) { - this.stave = stave; - return this; - } - getXShift() { - return this.x_shift; - } - setXShift(x_shift) { - this.x_shift = x_shift; - return this; - } - getYshift() { - return this.y_shift; - } - setYShift(y_shift) { - this.y_shift = y_shift; - return this; - } - reset() { - const data = Glyph.cache.lookup(this.code, this.options.category); - this.metrics = data.metrics; - if (data.point != -1) { - this.point = data.point; - } - this.scale = (this.point * 72) / (this.metrics.font.getResolution() * 100); - this.bbox = new BoundingBox(data.bbox.getX() * this.scale, data.bbox.getY() * this.scale, data.bbox.getW() * this.scale, data.bbox.getH() * this.scale); - } - checkMetrics() { - return defined(this.metrics, 'BadGlyph', `Glyph ${this.code} is not initialized.`); - } - getMetrics() { - const metrics = this.checkMetrics(); - const metricsScale = metrics.scale; - return { - x_min: metrics.x_min * this.scale * metricsScale, - x_max: metrics.x_max * this.scale * metricsScale, - width: this.bbox.getW(), - height: this.bbox.getH(), - scale: this.scale * metricsScale, - x_shift: metrics.x_shift, - y_shift: metrics.y_shift, - outline: metrics.outline, - font: metrics.font, - ha: metrics.ha, - }; - } - setOriginX(x) { - const { bbox } = this; - const originX = Math.abs(bbox.getX() / bbox.getW()); - const xShift = (x - originX) * bbox.getW(); - this.originShift.x = -xShift; - } - setOriginY(y) { - const { bbox } = this; - const originY = Math.abs(bbox.getY() / bbox.getH()); - const yShift = (y - originY) * bbox.getH(); - this.originShift.y = -yShift; - } - setOrigin(x, y) { - this.setOriginX(x); - this.setOriginY(y); - } - render(ctx, x, y) { - const metrics = this.checkMetrics(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(ctx); - const xPos = x + this.originShift.x + metrics.x_shift; - const yPos = y + this.originShift.y + metrics.y_shift; - Glyph.renderOutline(ctx, outline, scale, xPos, yPos); - this.restoreStyle(ctx); - } - checkStave() { - return defined(this.stave, 'NoStave', 'No stave attached to instance.'); - } - renderToStave(x) { - const context = this.checkContext(); - const metrics = this.checkMetrics(); - const stave = this.checkStave(); - const outline = metrics.outline; - const scale = this.scale * metrics.scale; - this.setRendered(); - this.applyStyle(); - const xPos = x + this.x_shift + metrics.x_shift; - const yPos = stave.getYForGlyphs() + this.y_shift + metrics.y_shift; - Glyph.renderOutline(context, outline, scale, xPos, yPos); - this.restoreStyle(); - } -} -Glyph.cache = new GlyphCache(); -Glyph.CURRENT_CACHE_KEY = ''; -Glyph.MUSIC_FONT_STACK = []; diff --git a/build/esm/src/glyphnote.js b/build/esm/src/glyphnote.js deleted file mode 100644 index b7b3446b1b..0000000000 --- a/build/esm/src/glyphnote.js +++ /dev/null @@ -1,56 +0,0 @@ -import { Note } from './note.js'; -export class GlyphNote extends Note { - static get CATEGORY() { - return "GlyphNote"; - } - constructor(glyph, noteStruct, options) { - super(noteStruct); - this.options = Object.assign({ ignoreTicks: false, line: 2 }, options); - this.ignore_ticks = this.options.ignoreTicks; - this.setGlyph(glyph); - } - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth(this.glyph.getMetrics().width); - return this; - } - getBoundingBox() { - return this.glyph.getBoundingBox(); - } - preFormat() { - if (!this.preFormatted && this.modifierContext) { - this.modifierContext.preFormat(); - } - this.preFormatted = true; - return this; - } - drawModifiers() { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - modifier.setContext(ctx); - modifier.drawWithStyle(); - } - } - getGlyphWidth() { - return this.glyph.getMetrics().width; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('glyphNote', this.getAttribute('id')); - const glyph = this.glyph; - if (!glyph.getContext()) { - glyph.setContext(ctx); - } - glyph.setStave(stave); - glyph.setYShift(stave.getYForLine(this.options.line) - stave.getYForGlyphs()); - const x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX(); - glyph.renderToStave(x); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} diff --git a/build/esm/src/gracenote.js b/build/esm/src/gracenote.js deleted file mode 100644 index 29b2aaacda..0000000000 --- a/build/esm/src/gracenote.js +++ /dev/null @@ -1,133 +0,0 @@ -import { StaveNote } from './stavenote.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { RuntimeError } from './util.js'; -export class GraceNote extends StaveNote { - static get CATEGORY() { - return "GraceNote"; - } - static get LEDGER_LINE_OFFSET() { - return 2; - } - static get SCALE() { - return 0.66; - } - constructor(noteStruct) { - super(Object.assign({ glyph_font_scale: Tables.NOTATION_FONT_SCALE * GraceNote.SCALE, stroke_px: GraceNote.LEDGER_LINE_OFFSET }, noteStruct)); - this.slash = noteStruct.slash || false; - this.slur = true; - this.buildNoteHeads(); - this.width = 3; - } - getStemExtension() { - if (this.stem_extension_override) { - return this.stem_extension_override; - } - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - let ret = super.getStemExtension(); - if (glyphProps.stem) { - const staveNoteScale = this.getStaveNoteScale(); - ret = (Stem.HEIGHT + ret) * staveNoteScale - Stem.HEIGHT; - } - return ret; - } - return 0; - } - getStaveNoteScale() { - return this.render_options.glyph_font_scale / Tables.NOTATION_FONT_SCALE; - } - draw() { - super.draw(); - this.setRendered(); - const stem = this.stem; - if (this.slash && stem) { - const staveNoteScale = this.getStaveNoteScale(); - const offsetScale = staveNoteScale / 0.66; - let slashBBox = undefined; - const beam = this.beam; - if (beam) { - if (!beam.postFormatted) { - beam.postFormat(); - } - slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale, 8 * offsetScale, { - stem: 6 * offsetScale, - beam: 5 * offsetScale, - }); - } - else { - const stem_direction = this.getStemDirection(); - const noteHeadBounds = this.getNoteHeadBounds(); - const noteStemHeight = stem.getHeight(); - let x = this.getAbsoluteX(); - let y = stem_direction === Stem.DOWN - ? noteHeadBounds.y_top - noteStemHeight - : noteHeadBounds.y_bottom - noteStemHeight; - const defaultStemExtention = stem_direction === Stem.DOWN ? this.glyphProps.stem_down_extension : this.glyphProps.stem_up_extension; - let defaultOffsetY = Tables.STEM_HEIGHT; - defaultOffsetY -= defaultOffsetY / 2.8; - defaultOffsetY += defaultStemExtention; - y += defaultOffsetY * staveNoteScale * stem_direction; - const offsets = stem_direction === Stem.UP - ? { - x1: 1, - y1: 0, - x2: 13, - y2: -9, - } - : { - x1: -4, - y1: 1, - x2: 13, - y2: 9, - }; - x += offsets.x1 * offsetScale; - y += offsets.y1 * offsetScale; - slashBBox = { - x1: x, - y1: y, - x2: x + offsets.x2 * offsetScale, - y2: y + offsets.y2 * offsetScale, - }; - } - const ctx = this.checkContext(); - ctx.save(); - ctx.setLineWidth(1 * offsetScale); - ctx.beginPath(); - ctx.moveTo(slashBBox.x1, slashBBox.y1); - ctx.lineTo(slashBBox.x2, slashBBox.y2); - ctx.closePath(); - ctx.stroke(); - ctx.restore(); - } - } - calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) { - const beam = this.beam; - if (!beam) - throw new RuntimeError('NoBeam', "Can't calculate without a beam."); - const beam_slope = beam.slope; - const isBeamEndNote = beam.notes[beam.notes.length - 1] === this; - const scaleX = isBeamEndNote ? -1 : 1; - const beam_angle = Math.atan(beam_slope * scaleX); - const iPointOnBeam = { - dx: Math.cos(beam_angle) * slashBeamOffset, - dy: Math.sin(beam_angle) * slashBeamOffset, - }; - slashStemOffset *= this.getStemDirection(); - const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx); - const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX; - const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem; - const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX; - const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam; - const stemX = this.getStemX(); - const stem0X = beam.notes[0].getStemX(); - const stemY = beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope; - const ret = { - x1: stemX - protrusion_stem_dx, - y1: stemY + slashStemOffset - protrusion_stem_dy, - x2: stemX + iPointOnBeam.dx * scaleX + protrusion_beam_dx, - y2: stemY + iPointOnBeam.dy + protrusion_beam_dy, - }; - return ret; - } -} diff --git a/build/esm/src/gracenotegroup.js b/build/esm/src/gracenotegroup.js deleted file mode 100644 index 8208bcfbb8..0000000000 --- a/build/esm/src/gracenotegroup.js +++ /dev/null @@ -1,129 +0,0 @@ -import { Beam } from './beam.js'; -import { Formatter } from './formatter.js'; -import { Modifier } from './modifier.js'; -import { StaveNote } from './stavenote.js'; -import { StaveTie } from './stavetie.js'; -import { Tables } from './tables.js'; -import { TabTie } from './tabtie.js'; -import { isStaveNote } from './typeguard.js'; -import { log } from './util.js'; -import { Voice } from './voice.js'; -function L(...args) { - if (GraceNoteGroup.DEBUG) - log('Vex.Flow.GraceNoteGroup', args); -} -export class GraceNoteGroup extends Modifier { - static get CATEGORY() { - return "GraceNoteGroup"; - } - static format(gracenote_groups, state) { - const group_spacing_stave = 4; - const group_spacing_tab = 0; - if (!gracenote_groups || gracenote_groups.length === 0) - return false; - const group_list = []; - let prev_note = null; - let shiftL = 0; - for (let i = 0; i < gracenote_groups.length; ++i) { - const gracenote_group = gracenote_groups[i]; - const note = gracenote_group.getNote(); - const is_stavenote = isStaveNote(note); - const spacing = is_stavenote ? group_spacing_stave : group_spacing_tab; - if (is_stavenote && note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL); - } - prev_note = note; - } - group_list.push({ shift: shiftL, gracenote_group, spacing }); - } - let group_shift = group_list[0].shift; - let formatWidth; - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - gracenote_group.preFormat(); - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - group_shift = Math.max(formatWidth, group_shift); - } - for (let i = 0; i < group_list.length; ++i) { - const gracenote_group = group_list[i].gracenote_group; - formatWidth = gracenote_group.getWidth() + group_list[i].spacing; - gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift) + StaveNote.minNoteheadPadding); - } - state.left_shift += group_shift; - return true; - } - constructor(grace_notes, show_slur) { - super(); - this.preFormatted = false; - this.position = Modifier.Position.LEFT; - this.grace_notes = grace_notes; - this.width = 0; - this.show_slur = show_slur; - this.slur = undefined; - this.voice = new Voice({ - num_beats: 4, - beat_value: 4, - resolution: Tables.RESOLUTION, - }).setStrict(false); - this.render_options = { - slur_y_shift: 0, - }; - this.beams = []; - this.voice.addTickables(this.grace_notes); - return this; - } - preFormat() { - if (this.preFormatted) - return; - if (!this.formatter) { - this.formatter = new Formatter(); - } - this.formatter.joinVoices([this.voice]).format([this.voice], 0, {}); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - beamNotes(grace_notes) { - grace_notes = grace_notes || this.grace_notes; - if (grace_notes.length > 1) { - const beam = new Beam(grace_notes); - beam.render_options.beam_width = 3; - beam.render_options.partial_beam_length = 4; - this.beams.push(beam); - } - return this; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width + StaveNote.minNoteheadPadding; - } - getGraceNotes() { - return this.grace_notes; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - L('Drawing grace note group for:', note); - this.alignSubNotesWithNote(this.getGraceNotes(), note); - this.grace_notes.forEach((graceNote) => graceNote.setContext(ctx).draw()); - this.beams.forEach((beam) => beam.setContext(ctx).draw()); - if (this.show_slur) { - const is_stavenote = isStaveNote(note); - const TieClass = is_stavenote ? StaveTie : TabTie; - this.slur = new TieClass({ - last_note: this.grace_notes[0], - first_note: note, - first_indices: [0], - last_indices: [0], - }); - this.slur.render_options.cp2 = 12; - this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift; - this.slur.setContext(ctx).draw(); - } - } -} -GraceNoteGroup.DEBUG = false; diff --git a/build/esm/src/gracetabnote.js b/build/esm/src/gracetabnote.js deleted file mode 100644 index 8aba164203..0000000000 --- a/build/esm/src/gracetabnote.js +++ /dev/null @@ -1,12 +0,0 @@ -import { Font } from './font.js'; -import { TabNote } from './tabnote.js'; -export class GraceTabNote extends TabNote { - static get CATEGORY() { - return "GraceTabNote"; - } - constructor(noteStruct) { - super(noteStruct, false); - this.render_options = Object.assign(Object.assign({}, this.render_options), { y_shift: 0.3, scale: 0.6, font: `7.5pt ${Font.SANS_SERIF}` }); - this.updateWidth(); - } -} diff --git a/build/esm/src/index.js b/build/esm/src/index.js deleted file mode 100644 index 2c9f8c57d8..0000000000 --- a/build/esm/src/index.js +++ /dev/null @@ -1,89 +0,0 @@ -export * from './accidental.js'; -export * from './annotation.js'; -export * from './articulation.js'; -export * from './barnote.js'; -export * from './beam.js'; -export * from './bend.js'; -export * from './boundingbox.js'; -export * from './boundingboxcomputation.js'; -export * from './canvascontext.js'; -export * from './chordsymbol.js'; -export * from './clef.js'; -export * from './clefnote.js'; -export * from './crescendo.js'; -export * from './curve.js'; -export * from './dot.js'; -export * from './easyscore.js'; -export * from './element.js'; -export * from './factory.js'; -export * from './flow.js'; -export * from './font.js'; -export * from './formatter.js'; -export * from './fraction.js'; -export * from './frethandfinger.js'; -export * from './ghostnote.js'; -export * from './glyph.js'; -export * from './glyphnote.js'; -export * from './gracenote.js'; -export * from './gracenotegroup.js'; -export * from './gracetabnote.js'; -export * from './keymanager.js'; -export * from './keysignature.js'; -export * from './keysignote.js'; -export * from './modifier.js'; -export * from './modifiercontext.js'; -export * from './multimeasurerest.js'; -export * from './music.js'; -export * from './note.js'; -export * from './notehead.js'; -export * from './notesubgroup.js'; -export * from './ornament.js'; -export * from './parenthesis.js'; -export * from './parser.js'; -export * from './pedalmarking.js'; -export * from './registry.js'; -export * from './rendercontext.js'; -export * from './renderer.js'; -export * from './repeatnote.js'; -export * from './stave.js'; -export * from './stavebarline.js'; -export * from './staveconnector.js'; -export * from './stavehairpin.js'; -export * from './staveline.js'; -export * from './stavemodifier.js'; -export * from './stavenote.js'; -export * from './staverepetition.js'; -export * from './stavesection.js'; -export * from './stavetempo.js'; -export * from './stavetext.js'; -export * from './stavetie.js'; -export * from './stavevolta.js'; -export * from './stem.js'; -export * from './stemmablenote.js'; -export * from './stringnumber.js'; -export * from './strokes.js'; -export * from './svgcontext.js'; -export * from './system.js'; -export * from './tabnote.js'; -export * from './tabslide.js'; -export * from './tabstave.js'; -export * from './tabtie.js'; -export * from './textbracket.js'; -export * from './textdynamics.js'; -export * from './textformatter.js'; -export * from './textnote.js'; -export * from './tickable.js'; -export * from './tickcontext.js'; -export * from './timesigglyph.js'; -export * from './timesignature.js'; -export * from './timesignote.js'; -export * from './tremolo.js'; -export * from './tuning.js'; -export * from './tuplet.js'; -export * from './typeguard.js'; -export * from './util.js'; -export * from './vex.js'; -export * from './vibrato.js'; -export * from './vibratobracket.js'; -export * from './voice.js'; -export * from './web.js'; diff --git a/build/esm/src/keymanager.js b/build/esm/src/keymanager.js deleted file mode 100644 index 6ccffe83c2..0000000000 --- a/build/esm/src/keymanager.js +++ /dev/null @@ -1,99 +0,0 @@ -import { Music } from './music.js'; -import { RuntimeError } from './util.js'; -export class KeyManager { - constructor(key) { - this.music = new Music(); - this.setKey(key); - } - setKey(key) { - this.key = key; - this.reset(); - return this; - } - getKey() { - return this.key; - } - reset() { - this.keyParts = this.music.getKeyParts(this.key); - this.keyString = this.keyParts.root; - if (this.keyParts.accidental) - this.keyString += this.keyParts.accidental; - const is_supported_type = Music.scaleTypes[this.keyParts.type]; - if (!is_supported_type) { - throw new RuntimeError('BadArguments', `Unsupported key type: ${this.key}`); - } - this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), Music.scaleTypes[this.keyParts.type]); - this.scaleMap = {}; - this.scaleMapByValue = {}; - this.originalScaleMapByValue = {}; - const noteLocation = Music.root_indices[this.keyParts.root]; - for (let i = 0; i < Music.roots.length; ++i) { - const index = (noteLocation + i) % Music.roots.length; - const rootName = Music.roots[index]; - const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]); - this.scaleMap[rootName] = noteName; - this.scaleMapByValue[this.scale[i]] = noteName; - this.originalScaleMapByValue[this.scale[i]] = noteName; - } - return this; - } - getAccidental(key) { - const root = this.music.getKeyParts(key).root; - const parts = this.music.getNoteParts(this.scaleMap[root]); - return { - note: this.scaleMap[root], - accidental: parts.accidental, - }; - } - selectNote(note) { - note = note.toLowerCase(); - const parts = this.music.getNoteParts(note); - const scaleNote = this.scaleMap[parts.root]; - const modparts = this.music.getNoteParts(scaleNote); - if (scaleNote === note) { - return { - note: scaleNote, - accidental: parts.accidental, - change: false, - }; - } - const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)]; - if (valueNote != null) { - return { - note: valueNote, - accidental: this.music.getNoteParts(valueNote).accidental, - change: false, - }; - } - const originalValueNote = this.originalScaleMapByValue[this.music.getNoteValue(note)]; - if (originalValueNote != null) { - this.scaleMap[modparts.root] = originalValueNote; - delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)]; - this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote; - return { - note: originalValueNote, - accidental: this.music.getNoteParts(originalValueNote).accidental, - change: true, - }; - } - if (modparts.root === note) { - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root; - this.scaleMap[modparts.root] = modparts.root; - return { - note: modparts.root, - accidental: undefined, - change: true, - }; - } - delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])]; - this.scaleMapByValue[this.music.getNoteValue(note)] = note; - delete this.scaleMap[modparts.root]; - this.scaleMap[modparts.root] = note; - return { - note, - accidental: parts.accidental, - change: true, - }; - } -} diff --git a/build/esm/src/keysignature.js b/build/esm/src/keysignature.js deleted file mode 100644 index f13c7fd0cb..0000000000 --- a/build/esm/src/keysignature.js +++ /dev/null @@ -1,257 +0,0 @@ -import { Glyph } from './glyph.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -import { defined } from './util.js'; -export class KeySignature extends StaveModifier { - static get CATEGORY() { - return "KeySignature"; - } - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super(); - this.accList = []; - this.setKeySig(keySpec, cancelKeySpec, alterKeySpec); - this.setPosition(StaveModifierPosition.BEGIN); - this.glyphFontScale = 38; - this.glyphs = []; - this.xPositions = []; - this.paddingForced = false; - } - convertToGlyph(acc, nextAcc) { - const accGlyphData = Tables.accidentalCodes(acc.type); - const glyph = new Glyph(accGlyphData.code, this.glyphFontScale); - let extraWidth = 1; - if (acc.type === 'n' && nextAcc) { - const spacing = KeySignature.accidentalSpacing[nextAcc.type]; - if (spacing) { - const isAbove = nextAcc.line >= acc.line; - extraWidth = isAbove ? spacing.above : spacing.below; - } - } - this.placeGlyphOnLine(glyph, this.checkStave(), acc.line); - this.glyphs.push(glyph); - const xPosition = this.xPositions[this.xPositions.length - 1]; - const glyphWidth = glyph.getMetrics().width + extraWidth; - this.xPositions.push(xPosition + glyphWidth); - this.width += glyphWidth; - } - cancelKey(spec) { - this.formatted = false; - this.cancelKeySpec = spec; - return this; - } - convertToCancelAccList(spec) { - const cancel_accList = Tables.keySignature(spec); - const different_types = this.accList.length > 0 && cancel_accList.length > 0 && cancel_accList[0].type !== this.accList[0].type; - const naturals = different_types ? cancel_accList.length : cancel_accList.length - this.accList.length; - if (naturals < 1) - return undefined; - const cancelled = []; - for (let i = 0; i < naturals; i++) { - let index = i; - if (!different_types) { - index = cancel_accList.length - naturals + i; - } - const acc = cancel_accList[index]; - cancelled.push({ type: 'n', line: acc.line }); - } - this.accList = cancelled.concat(this.accList); - return { - accList: cancelled, - type: cancel_accList[0].type, - }; - } - addToStave(stave) { - this.paddingForced = true; - stave.addModifier(this); - return this; - } - convertAccLines(clef, type, accList = this.accList) { - let offset = 0.0; - let customLines; - switch (clef) { - case 'soprano': - if (type === '#') - customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1]; - else - offset = -1; - break; - case 'mezzo-soprano': - if (type === 'b') - customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5]; - else - offset = 1.5; - break; - case 'alto': - offset = 0.5; - break; - case 'tenor': - if (type === '#') - customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5]; - else - offset = -0.5; - break; - case 'baritone-f': - case 'baritone-c': - if (type === 'b') - customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2]; - else - offset = 2; - break; - case 'bass': - case 'french': - offset = 1; - break; - default: - break; - } - let i; - if (typeof customLines !== 'undefined') { - for (i = 0; i < accList.length; ++i) { - accList[i].line = customLines[i]; - } - } - else if (offset !== 0) { - for (i = 0; i < accList.length; ++i) { - accList[i].line += offset; - } - } - } - getPadding(index) { - if (!this.formatted) - this.format(); - return this.glyphs.length === 0 || (!this.paddingForced && index < 2) ? 0 : this.padding; - } - getWidth() { - if (!this.formatted) - this.format(); - return this.width; - } - setKeySig(keySpec, cancelKeySpec, alterKeySpec) { - this.formatted = false; - this.keySpec = keySpec; - this.cancelKeySpec = cancelKeySpec; - this.alterKeySpec = alterKeySpec; - return this; - } - alterKey(alterKeySpec) { - this.formatted = false; - this.alterKeySpec = alterKeySpec; - return this; - } - convertToAlterAccList(alterKeySpec) { - const max = Math.min(alterKeySpec.length, this.accList.length); - for (let i = 0; i < max; ++i) { - if (alterKeySpec[i]) { - this.accList[i].type = alterKeySpec[i]; - } - } - } - format() { - const stave = this.checkStave(); - this.width = 0; - this.glyphs = []; - this.xPositions = [0]; - this.accList = Tables.keySignature(defined(this.keySpec)); - const accList = this.accList; - const firstAccidentalType = accList.length > 0 ? accList[0].type : undefined; - let cancelAccList; - if (this.cancelKeySpec) { - cancelAccList = this.convertToCancelAccList(this.cancelKeySpec); - } - if (this.alterKeySpec) { - this.convertToAlterAccList(this.alterKeySpec); - } - if (this.accList.length > 0) { - const clef = (this.position === StaveModifierPosition.END ? stave.getEndClef() : stave.getClef()) || stave.getClef(); - if (cancelAccList) { - this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList); - } - this.convertAccLines(clef, firstAccidentalType, accList); - for (let i = 0; i < this.accList.length; ++i) { - this.convertToGlyph(this.accList[i], this.accList[i + 1]); - } - } - this.formatted = true; - } - getGlyphs() { - if (!this.formatted) - this.format(); - return this.glyphs; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - if (!this.formatted) - this.format(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('keysignature', this.getAttribute('id')); - for (let i = 0; i < this.glyphs.length; i++) { - const glyph = this.glyphs[i]; - const x = this.x + this.xPositions[i]; - glyph.setStave(stave); - glyph.setContext(ctx); - glyph.renderToStave(x); - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} -KeySignature.accidentalSpacing = { - '#': { - above: 6, - below: 4, - }, - b: { - above: 4, - below: 7, - }, - n: { - above: 4, - below: 1, - }, - '##': { - above: 6, - below: 4, - }, - bb: { - above: 4, - below: 7, - }, - db: { - above: 4, - below: 7, - }, - d: { - above: 4, - below: 7, - }, - bbs: { - above: 4, - below: 7, - }, - '++': { - above: 6, - below: 4, - }, - '+': { - above: 6, - below: 4, - }, - '+-': { - above: 6, - below: 4, - }, - '++-': { - above: 6, - below: 4, - }, - bs: { - above: 4, - below: 10, - }, - bss: { - above: 4, - below: 10, - }, -}; diff --git a/build/esm/src/keysignote.js b/build/esm/src/keysignote.js deleted file mode 100644 index 13998c1698..0000000000 --- a/build/esm/src/keysignote.js +++ /dev/null @@ -1,28 +0,0 @@ -import { KeySignature } from './keysignature.js'; -import { Note } from './note.js'; -export class KeySigNote extends Note { - static get CATEGORY() { - return "KeySigNote"; - } - constructor(keySpec, cancelKeySpec, alterKeySpec) { - super({ duration: 'b' }); - this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec); - this.ignore_ticks = true; - } - addToModifierContext(mc) { - return this; - } - preFormat() { - this.preFormatted = true; - this.keySignature.setStave(this.checkStave()); - this.setWidth(this.keySignature.getWidth()); - return this; - } - draw() { - const ctx = this.checkStave().checkContext(); - this.setRendered(); - this.keySignature.setX(this.getAbsoluteX()); - this.keySignature.setContext(ctx); - this.keySignature.draw(); - } -} diff --git a/build/esm/src/modifier.js b/build/esm/src/modifier.js deleted file mode 100644 index 2da5e569b1..0000000000 --- a/build/esm/src/modifier.js +++ /dev/null @@ -1,128 +0,0 @@ -import { Element } from './element.js'; -import { defined, RuntimeError } from './util.js'; -export var ModifierPosition; -(function (ModifierPosition) { - ModifierPosition[ModifierPosition["CENTER"] = 0] = "CENTER"; - ModifierPosition[ModifierPosition["LEFT"] = 1] = "LEFT"; - ModifierPosition[ModifierPosition["RIGHT"] = 2] = "RIGHT"; - ModifierPosition[ModifierPosition["ABOVE"] = 3] = "ABOVE"; - ModifierPosition[ModifierPosition["BELOW"] = 4] = "BELOW"; -})(ModifierPosition || (ModifierPosition = {})); -export class Modifier extends Element { - static get CATEGORY() { - return "Modifier"; - } - static get Position() { - return ModifierPosition; - } - static get PositionString() { - return { - center: ModifierPosition.CENTER, - above: ModifierPosition.ABOVE, - below: ModifierPosition.BELOW, - left: ModifierPosition.LEFT, - right: ModifierPosition.RIGHT, - }; - } - constructor() { - super(); - this.width = 0; - this.text_line = 0; - this.position = Modifier.Position.LEFT; - this.x_shift = 0; - this.y_shift = 0; - this.spacingFromNextModifier = 0; - } - reset() { - } - getWidth() { - return this.width; - } - setWidth(width) { - this.width = width; - return this; - } - getNote() { - return defined(this.note, 'NoNote', 'Modifier has no note.'); - } - checkAttachedNote() { - const category = this.getCategory(); - defined(this.index, 'NoIndex', `Can't draw ${category} without an index.`); - return defined(this.note, 'NoNote', `Can't draw ${category} without a note.`); - } - setNote(note) { - this.note = note; - return this; - } - getIndex() { - return this.index; - } - checkIndex() { - return defined(this.index, 'NoIndex', 'Modifier has an invalid index.'); - } - setIndex(index) { - this.index = index; - return this; - } - getModifierContext() { - return this.modifierContext; - } - checkModifierContext() { - return defined(this.modifierContext, 'NoModifierContext', 'Modifier Context Required'); - } - setModifierContext(c) { - this.modifierContext = c; - return this; - } - getPosition() { - return this.position; - } - setPosition(position) { - this.position = typeof position === 'string' ? Modifier.PositionString[position] : position; - this.reset(); - return this; - } - setTextLine(line) { - this.text_line = line; - return this; - } - setYShift(y) { - this.y_shift = y; - return this; - } - setSpacingFromNextModifier(x) { - this.spacingFromNextModifier = x; - } - getSpacingFromNextModifier() { - return this.spacingFromNextModifier; - } - setXShift(x) { - this.x_shift = 0; - if (this.position === Modifier.Position.LEFT) { - this.x_shift -= x; - } - else { - this.x_shift += x; - } - return this; - } - getXShift() { - return this.x_shift; - } - draw() { - this.checkContext(); - throw new RuntimeError('NotImplemented', 'draw() not implemented for this modifier.'); - } - alignSubNotesWithNote(subNotes, note) { - const tickContext = note.getTickContext(); - const metrics = tickContext.getMetrics(); - const stave = note.getStave(); - const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier(); - subNotes.forEach((subNote) => { - const subTickContext = subNote.getTickContext(); - if (stave) - subNote.setStave(stave); - subTickContext.setXOffset(subNoteXOffset); - }); - } -} diff --git a/build/esm/src/modifiercontext.js b/build/esm/src/modifiercontext.js deleted file mode 100644 index dc3d3bdc14..0000000000 --- a/build/esm/src/modifiercontext.js +++ /dev/null @@ -1,110 +0,0 @@ -import { Accidental } from './accidental.js'; -import { Annotation } from './annotation.js'; -import { Articulation } from './articulation.js'; -import { Bend } from './bend.js'; -import { ChordSymbol } from './chordsymbol.js'; -import { Dot } from './dot.js'; -import { FretHandFinger } from './frethandfinger.js'; -import { GraceNoteGroup } from './gracenotegroup.js'; -import { NoteSubGroup } from './notesubgroup.js'; -import { Ornament } from './ornament.js'; -import { Parenthesis } from './parenthesis.js'; -import { StaveNote } from './stavenote.js'; -import { StringNumber } from './stringnumber.js'; -import { Stroke } from './strokes.js'; -import { log, RuntimeError } from './util.js'; -import { Vibrato } from './vibrato.js'; -function L(...args) { - if (ModifierContext.DEBUG) - log('Vex.Flow.ModifierContext', args); -} -export class ModifierContext { - constructor() { - this.state = { - left_shift: 0, - right_shift: 0, - text_line: 0, - top_text_line: 0, - }; - this.members = {}; - this.preFormatted = false; - this.postFormatted = false; - this.formatted = false; - this.width = 0; - this.spacing = 0; - } - addModifier(member) { - L('addModifier is deprecated, use addMember instead.'); - return this.addMember(member); - } - addMember(member) { - const category = member.getCategory(); - if (!this.members[category]) { - this.members[category] = []; - } - this.members[category].push(member); - member.setModifierContext(this); - this.preFormatted = false; - return this; - } - getModifiers(category) { - L('getModifiers is deprecated, use getMembers instead.'); - return this.getMembers(category); - } - getMembers(category) { - var _a; - return (_a = this.members[category]) !== null && _a !== void 0 ? _a : []; - } - getWidth() { - return this.width; - } - getLeftShift() { - return this.state.left_shift; - } - getRightShift() { - return this.state.right_shift; - } - getState() { - return this.state; - } - getMetrics() { - if (!this.formatted) { - throw new RuntimeError('UnformattedMember', 'Unformatted member has no metrics.'); - } - return { - width: this.state.left_shift + this.state.right_shift + this.spacing, - spacing: this.spacing, - }; - } - preFormat() { - if (this.preFormatted) - return; - L('Preformatting ModifierContext'); - const state = this.state; - const members = this.members; - StaveNote.format(members["StaveNote"], state); - Parenthesis.format(members["Parenthesis"], state); - Dot.format(members["Dot"], state); - FretHandFinger.format(members["FretHandFinger"], state); - Accidental.format(members["Accidental"], state); - Stroke.format(members["Stroke"], state); - GraceNoteGroup.format(members["GraceNoteGroup"], state); - NoteSubGroup.format(members["NoteSubGroup"], state); - StringNumber.format(members["StringNumber"], state); - Articulation.format(members["Articulation"], state); - Ornament.format(members["Ornament"], state); - Annotation.format(members["Annotation"], state); - ChordSymbol.format(members["ChordSymbol"], state); - Bend.format(members["Bend"], state); - Vibrato.format(members["Vibrato"], state, this); - this.width = state.left_shift + state.right_shift; - this.preFormatted = true; - } - postFormat() { - if (this.postFormatted) - return; - L('Postformatting ModifierContext'); - StaveNote.postFormat(this.getMembers("StaveNote")); - } -} -ModifierContext.DEBUG = false; diff --git a/build/esm/src/multimeasurerest.js b/build/esm/src/multimeasurerest.js deleted file mode 100644 index 8d4e79c3b5..0000000000 --- a/build/esm/src/multimeasurerest.js +++ /dev/null @@ -1,173 +0,0 @@ -import { Element } from './element.js'; -import { Glyph } from './glyph.js'; -import { NoteHead } from './notehead.js'; -import { StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -import { TimeSignature } from './timesignature.js'; -import { isBarline } from './typeguard.js'; -import { defined } from './util.js'; -let semibreve_rest; -function get_semibreve_rest() { - if (!semibreve_rest) { - const noteHead = new NoteHead({ duration: 'w', note_type: 'r' }); - semibreve_rest = { - glyph_font_scale: noteHead.render_options.glyph_font_scale, - glyph_code: noteHead.glyph_code, - width: noteHead.getWidth(), - }; - } - return semibreve_rest; -} -export class MultiMeasureRest extends Element { - static get CATEGORY() { - return "MultiMeasureRest"; - } - constructor(number_of_measures, options) { - super(); - this.xs = { left: NaN, right: NaN }; - this.hasPaddingLeft = false; - this.hasPaddingRight = false; - this.hasLineThickness = false; - this.hasSymbolSpacing = false; - this.number_of_measures = number_of_measures; - this.hasPaddingLeft = typeof options.padding_left === 'number'; - this.hasPaddingRight = typeof options.padding_right === 'number'; - this.hasLineThickness = typeof options.line_thickness === 'number'; - this.hasSymbolSpacing = typeof options.symbol_spacing === 'number'; - const musicFont = Tables.currentMusicFont(); - this.render_options = Object.assign({ use_symbols: false, show_number: true, number_line: -0.5, number_glyph_point: musicFont.lookupMetric('digits.point'), line: 2, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, serif_thickness: 2, semibreve_rest_glyph_scale: Tables.NOTATION_FONT_SCALE, padding_left: 0, padding_right: 0, line_thickness: 5, symbol_spacing: 0 }, options); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.render_options.number_line += fontLineShift; - } - getXs() { - return this.xs; - } - setStave(stave) { - this.stave = stave; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return defined(this.stave, 'NoStave', 'No stave attached to instance.'); - } - drawLine(stave, ctx, left, right, spacingBetweenLines) { - const options = this.render_options; - const y = stave.getYForLine(options.line); - const padding = (right - left) * 0.1; - left += padding; - right -= padding; - let lineThicknessHalf; - if (this.hasLineThickness) { - lineThicknessHalf = options.line_thickness * 0.5; - } - else { - lineThicknessHalf = spacingBetweenLines * 0.25; - } - const serifThickness = options.serif_thickness; - const top = y - spacingBetweenLines; - const bot = y + spacingBetweenLines; - const leftIndented = left + serifThickness; - const rightIndented = right - serifThickness; - const lineTop = y - lineThicknessHalf; - const lineBottom = y + lineThicknessHalf; - ctx.save(); - ctx.beginPath(); - ctx.moveTo(left, top); - ctx.lineTo(leftIndented, top); - ctx.lineTo(leftIndented, lineTop); - ctx.lineTo(rightIndented, lineTop); - ctx.lineTo(rightIndented, top); - ctx.lineTo(right, top); - ctx.lineTo(right, bot); - ctx.lineTo(rightIndented, bot); - ctx.lineTo(rightIndented, lineBottom); - ctx.lineTo(leftIndented, lineBottom); - ctx.lineTo(leftIndented, bot); - ctx.lineTo(left, bot); - ctx.closePath(); - ctx.fill(); - } - drawSymbols(stave, ctx, left, right, spacingBetweenLines) { - const n4 = Math.floor(this.number_of_measures / 4); - const n = this.number_of_measures % 4; - const n2 = Math.floor(n / 2); - const n1 = n % 2; - const options = this.render_options; - semibreve_rest = undefined; - const rest = get_semibreve_rest(); - const rest_scale = options.semibreve_rest_glyph_scale; - const rest_width = rest.width * (rest_scale / rest.glyph_font_scale); - const glyphs = { - 2: { - width: rest_width * 0.5, - height: spacingBetweenLines, - }, - 1: { - width: rest_width, - }, - }; - const spacing = this.hasSymbolSpacing ? options.symbol_spacing : 10; - const width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing; - let x = left + (right - left) * 0.5 - width * 0.5; - const line = options.line; - const yTop = stave.getYForLine(line - 1); - const yMiddle = stave.getYForLine(line); - const yBottom = stave.getYForLine(line + 1); - ctx.save(); - ctx.setStrokeStyle('none'); - ctx.setLineWidth(0); - for (let i = 0; i < n4; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n2; ++i) { - ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height); - x += glyphs[2].width + spacing; - } - for (let i = 0; i < n1; ++i) { - Glyph.renderGlyph(ctx, x, yTop, rest_scale, rest.glyph_code); - x += glyphs[1].width + spacing; - } - ctx.restore(); - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const stave = this.checkStave(); - let left = stave.getNoteStartX(); - let right = stave.getNoteEndX(); - const begModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); - if (begModifiers.length === 1 && isBarline(begModifiers[0])) { - left -= begModifiers[0].getWidth(); - } - const options = this.render_options; - if (this.hasPaddingLeft) { - left = stave.getX() + options.padding_left; - } - if (this.hasPaddingRight) { - right = stave.getX() + stave.getWidth() - options.padding_right; - } - this.xs.left = left; - this.xs.right = right; - const spacingBetweenLines = options.spacing_between_lines_px; - if (options.use_symbols) { - this.drawSymbols(stave, ctx, left, right, spacingBetweenLines); - } - else { - this.drawLine(stave, ctx, left, right, spacingBetweenLines); - } - if (options.show_number) { - const timeSpec = '/' + this.number_of_measures; - const timeSig = new TimeSignature(timeSpec, 0, false); - timeSig.point = options.number_glyph_point; - timeSig.setTimeSig(timeSpec); - timeSig.setStave(stave); - timeSig.setX(left + (right - left) * 0.5 - timeSig.getInfo().glyph.getMetrics().width * 0.5); - timeSig.bottomLine = options.number_line; - timeSig.setContext(ctx).draw(); - } - } -} diff --git a/build/esm/src/music.js b/build/esm/src/music.js deleted file mode 100644 index d92c3749fe..0000000000 --- a/build/esm/src/music.js +++ /dev/null @@ -1,322 +0,0 @@ -import { RuntimeError } from './util.js'; -export class Music { - static get NUM_TONES() { - return this.canonical_notes.length; - } - static get roots() { - return ['c', 'd', 'e', 'f', 'g', 'a', 'b']; - } - static get root_values() { - return [0, 2, 4, 5, 7, 9, 11]; - } - static get root_indices() { - return { - c: 0, - d: 1, - e: 2, - f: 3, - g: 4, - a: 5, - b: 6, - }; - } - static get canonical_notes() { - return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']; - } - static get diatonic_intervals() { - return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave']; - } - static get diatonic_accidentals() { - return { - unison: { note: 0, accidental: 0 }, - m2: { note: 1, accidental: -1 }, - M2: { note: 1, accidental: 0 }, - m3: { note: 2, accidental: -1 }, - M3: { note: 2, accidental: 0 }, - p4: { note: 3, accidental: 0 }, - dim5: { note: 4, accidental: -1 }, - p5: { note: 4, accidental: 0 }, - m6: { note: 5, accidental: -1 }, - M6: { note: 5, accidental: 0 }, - b7: { note: 6, accidental: -1 }, - M7: { note: 6, accidental: 0 }, - octave: { note: 7, accidental: 0 }, - }; - } - static get intervals() { - return { - u: 0, - unison: 0, - m2: 1, - b2: 1, - min2: 1, - S: 1, - H: 1, - 2: 2, - M2: 2, - maj2: 2, - T: 2, - W: 2, - m3: 3, - b3: 3, - min3: 3, - M3: 4, - 3: 4, - maj3: 4, - 4: 5, - p4: 5, - '#4': 6, - b5: 6, - aug4: 6, - dim5: 6, - 5: 7, - p5: 7, - '#5': 8, - b6: 8, - aug5: 8, - 6: 9, - M6: 9, - maj6: 9, - b7: 10, - m7: 10, - min7: 10, - dom7: 10, - M7: 11, - maj7: 11, - 8: 12, - octave: 12, - }; - } - static get scales() { - return { - major: [2, 2, 1, 2, 2, 2, 1], - minor: [2, 1, 2, 2, 1, 2, 2], - ionian: [2, 2, 1, 2, 2, 2, 1], - dorian: [2, 1, 2, 2, 2, 1, 2], - phyrgian: [1, 2, 2, 2, 1, 2, 2], - lydian: [2, 2, 2, 1, 2, 2, 1], - mixolydian: [2, 2, 1, 2, 2, 1, 2], - aeolian: [2, 1, 2, 2, 1, 2, 2], - locrian: [1, 2, 2, 1, 2, 2, 2], - }; - } - static get scaleTypes() { - return { - M: Music.scales.major, - m: Music.scales.minor, - }; - } - static get accidentals() { - return ['bb', 'b', 'n', '#', '##']; - } - static get noteValues() { - return { - c: { root_index: 0, int_val: 0 }, - cn: { root_index: 0, int_val: 0 }, - 'c#': { root_index: 0, int_val: 1 }, - 'c##': { root_index: 0, int_val: 2 }, - cb: { root_index: 0, int_val: 11 }, - cbb: { root_index: 0, int_val: 10 }, - d: { root_index: 1, int_val: 2 }, - dn: { root_index: 1, int_val: 2 }, - 'd#': { root_index: 1, int_val: 3 }, - 'd##': { root_index: 1, int_val: 4 }, - db: { root_index: 1, int_val: 1 }, - dbb: { root_index: 1, int_val: 0 }, - e: { root_index: 2, int_val: 4 }, - en: { root_index: 2, int_val: 4 }, - 'e#': { root_index: 2, int_val: 5 }, - 'e##': { root_index: 2, int_val: 6 }, - eb: { root_index: 2, int_val: 3 }, - ebb: { root_index: 2, int_val: 2 }, - f: { root_index: 3, int_val: 5 }, - fn: { root_index: 3, int_val: 5 }, - 'f#': { root_index: 3, int_val: 6 }, - 'f##': { root_index: 3, int_val: 7 }, - fb: { root_index: 3, int_val: 4 }, - fbb: { root_index: 3, int_val: 3 }, - g: { root_index: 4, int_val: 7 }, - gn: { root_index: 4, int_val: 7 }, - 'g#': { root_index: 4, int_val: 8 }, - 'g##': { root_index: 4, int_val: 9 }, - gb: { root_index: 4, int_val: 6 }, - gbb: { root_index: 4, int_val: 5 }, - a: { root_index: 5, int_val: 9 }, - an: { root_index: 5, int_val: 9 }, - 'a#': { root_index: 5, int_val: 10 }, - 'a##': { root_index: 5, int_val: 11 }, - ab: { root_index: 5, int_val: 8 }, - abb: { root_index: 5, int_val: 7 }, - b: { root_index: 6, int_val: 11 }, - bn: { root_index: 6, int_val: 11 }, - 'b#': { root_index: 6, int_val: 0 }, - 'b##': { root_index: 6, int_val: 1 }, - bb: { root_index: 6, int_val: 10 }, - bbb: { root_index: 6, int_val: 9 }, - }; - } - isValidNoteValue(note) { - return note >= 0 && note < Music.canonical_notes.length; - } - isValidIntervalValue(interval) { - return interval >= 0 && interval < Music.diatonic_intervals.length; - } - getNoteParts(noteString) { - if (!noteString || noteString.length < 1) { - throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - if (noteString.length > 3) { - throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - const note = noteString.toLowerCase(); - const regex = /^([cdefgab])(b|bb|n|#|##)?$/; - const match = regex.exec(note); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - return { - root, - accidental, - }; - } - else { - throw new RuntimeError('BadArguments', 'Invalid note name: ' + noteString); - } - } - getKeyParts(keyString) { - if (!keyString || keyString.length < 1) { - throw new RuntimeError('BadArguments', 'Invalid key: ' + keyString); - } - const key = keyString.toLowerCase(); - const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/; - const match = regex.exec(key); - if (match !== null) { - const root = match[1]; - const accidental = match[2]; - let type = match[3]; - if (!type) - type = 'M'; - return { - root, - accidental, - type, - }; - } - else { - throw new RuntimeError('BadArguments', `Invalid key: ${keyString}`); - } - } - getNoteValue(noteString) { - const value = Music.noteValues[noteString]; - if (value === undefined) { - throw new RuntimeError('BadArguments', `Invalid note name: ${noteString}`); - } - return value.int_val; - } - getIntervalValue(intervalString) { - const value = Music.intervals[intervalString]; - if (value === undefined) { - throw new RuntimeError('BadArguments', `Invalid interval name: ${intervalString}`); - } - return value; - } - getCanonicalNoteName(noteValue) { - if (!this.isValidNoteValue(noteValue)) { - throw new RuntimeError('BadArguments', `Invalid note value: ${noteValue}`); - } - return Music.canonical_notes[noteValue]; - } - getCanonicalIntervalName(intervalValue) { - if (!this.isValidIntervalValue(intervalValue)) { - throw new RuntimeError('BadArguments', `Invalid interval value: ${intervalValue}`); - } - return Music.diatonic_intervals[intervalValue]; - } - getRelativeNoteValue(noteValue, intervalValue, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - let sum = (noteValue + direction * intervalValue) % Music.NUM_TONES; - if (sum < 0) - sum += Music.NUM_TONES; - return sum; - } - getRelativeNoteName(root, noteValue) { - const parts = this.getNoteParts(root); - const rootValue = this.getNoteValue(parts.root); - let interval = noteValue - rootValue; - if (Math.abs(interval) > Music.NUM_TONES - 3) { - let multiplier = 1; - if (interval > 0) - multiplier = -1; - const reverse_interval = ((noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES) * multiplier; - if (Math.abs(reverse_interval) > 2) { - throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - else { - interval = reverse_interval; - } - } - if (Math.abs(interval) > 2) { - throw new RuntimeError('BadArguments', `Notes not related: ${root}, ${noteValue})`); - } - let relativeNoteName = parts.root; - if (interval > 0) { - for (let i = 1; i <= interval; ++i) { - relativeNoteName += '#'; - } - } - else if (interval < 0) { - for (let i = -1; i >= interval; --i) { - relativeNoteName += 'b'; - } - } - return relativeNoteName; - } - getScaleTones(key, intervals) { - const tones = [key]; - let nextNote = key; - for (let i = 0; i < intervals.length; i++) { - nextNote = this.getRelativeNoteValue(nextNote, intervals[i]); - if (nextNote !== key) - tones.push(nextNote); - } - return tones; - } - getIntervalBetween(note1, note2, direction = 1) { - if (direction !== 1 && direction !== -1) { - throw new RuntimeError('BadArguments', `Invalid direction: ${direction}`); - } - if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) { - throw new RuntimeError('BadArguments', `Invalid notes: ${note1}, ${note2}`); - } - let difference = direction === 1 ? note2 - note1 : note1 - note2; - if (difference < 0) - difference += Music.NUM_TONES; - return difference; - } - createScaleMap(keySignature) { - const keySigParts = this.getKeyParts(keySignature); - if (!keySigParts.type) - throw new RuntimeError('BadArguments', 'Unsupported key type: undefined'); - const scaleName = Music.scaleTypes[keySigParts.type]; - let keySigString = keySigParts.root; - if (keySigParts.accidental) - keySigString += keySigParts.accidental; - if (!scaleName) - throw new RuntimeError('BadArguments', 'Unsupported key type: ' + keySignature); - const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName); - const noteLocation = Music.root_indices[keySigParts.root]; - const scaleMap = {}; - for (let i = 0; i < Music.roots.length; ++i) { - const index = (noteLocation + i) % Music.roots.length; - const rootName = Music.roots[index]; - let noteName = this.getRelativeNoteName(rootName, scale[i]); - if (noteName.length === 1) { - noteName += 'n'; - } - scaleMap[rootName] = noteName; - } - return scaleMap; - } -} diff --git a/build/esm/src/note.js b/build/esm/src/note.js deleted file mode 100644 index 75e221321c..0000000000 --- a/build/esm/src/note.js +++ /dev/null @@ -1,366 +0,0 @@ -import { Font } from './font.js'; -import { drawDot } from './rendercontext.js'; -import { Tables } from './tables.js'; -import { Tickable } from './tickable.js'; -import { defined, RuntimeError } from './util.js'; -export class Note extends Tickable { - static get CATEGORY() { - return "Note"; - } - static plotMetrics(ctx, note, yPos) { - const metrics = note.getMetrics(); - const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx; - const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx; - const xAbs = note.getAbsoluteX(); - const xPost1 = note.getAbsoluteX() + metrics.notePx; - const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx; - const xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx; - const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0); - const xWidth = xEnd - xStart; - ctx.save(); - ctx.setFont(Font.SANS_SERIF, 8); - ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos); - const y = yPos + 7; - function stroke(x1, x2, color, yy = y) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(3); - ctx.moveTo(x1 + note.getXShift(), yy); - ctx.lineTo(x2 + note.getXShift(), yy); - ctx.stroke(); - } - stroke(xStart, xPre1, 'red'); - stroke(xPre1, xAbs, '#999'); - stroke(xAbs, xPost1, 'green'); - stroke(xPost1, xPost2, '#999'); - stroke(xPost2, xEnd, 'red'); - stroke(xEnd, xFreedomRight, '#DD0'); - stroke(xStart - note.getXShift(), xStart, '#BBB'); - drawDot(ctx, xAbs + note.getXShift(), y, 'blue'); - const formatterMetrics = note.getFormatterMetrics(); - if (formatterMetrics.iterations > 0) { - const spaceDeviation = formatterMetrics.space.deviation; - const prefix = spaceDeviation >= 0 ? '+' : ''; - ctx.setFillStyle('red'); - ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10); - } - ctx.restore(); - } - static parseDuration(durationString) { - if (!durationString) { - return undefined; - } - const regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/; - const result = regexp.exec(durationString); - if (!result) { - return undefined; - } - const duration = result[1]; - const dots = result[2].length; - const type = result[3] || 'n'; - return { duration, dots, type }; - } - static parseNoteStruct(noteStruct) { - const durationProps = Note.parseDuration(noteStruct.duration); - if (!durationProps) { - return undefined; - } - let type = noteStruct.type; - if (type && !Tables.validTypes[type]) { - return undefined; - } - const customTypes = []; - if (!type) { - type = durationProps.type || 'n'; - if (noteStruct.keys !== undefined) { - noteStruct.keys.forEach((k, i) => { - const result = k.split('/'); - customTypes[i] = (result && result.length === 3 ? result[2] : type); - }); - } - } - let ticks = Tables.durationToTicks(durationProps.duration); - if (!ticks) { - return undefined; - } - const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots; - if (typeof dots !== 'number') { - return undefined; - } - let currentTicks = ticks; - for (let i = 0; i < dots; i++) { - if (currentTicks <= 1) - return undefined; - currentTicks = currentTicks / 2; - ticks += currentTicks; - } - return { - duration: durationProps.duration, - type, - customTypes, - dots, - ticks, - }; - } - constructor(noteStruct) { - super(); - if (!noteStruct) { - throw new RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.'); - } - const parsedNoteStruct = Note.parseNoteStruct(noteStruct); - if (!parsedNoteStruct) { - throw new RuntimeError('BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`); - } - this.keys = noteStruct.keys || []; - this.keyProps = []; - this.duration = parsedNoteStruct.duration; - this.noteType = parsedNoteStruct.type; - this.customTypes = parsedNoteStruct.customTypes; - if (noteStruct.duration_override) { - this.setDuration(noteStruct.duration_override); - } - else { - this.setIntrinsicTicks(parsedNoteStruct.ticks); - } - this.modifiers = []; - this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); - this.customGlyphs = this.customTypes.map((t) => Tables.getGlyphProps(this.duration, t)); - this.playNote = undefined; - this.ignore_ticks = false; - this.width = 0; - this.leftDisplacedHeadPx = 0; - this.rightDisplacedHeadPx = 0; - this.x_shift = 0; - this.ys = []; - if (noteStruct.align_center) { - this.setCenterAlignment(noteStruct.align_center); - } - this.render_options = { - annotation_spacing: 5, - glyph_font_scale: 1, - stroke_px: 1, - scale: 1, - font: '', - y_shift: 0, - }; - } - getPlayNote() { - return this.playNote; - } - setPlayNote(note) { - this.playNote = note; - return this; - } - isRest() { - return false; - } - addStroke(index, stroke) { - stroke.setNote(this); - stroke.setIndex(index); - this.modifiers.push(stroke); - this.preFormatted = false; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return defined(this.stave, 'NoStave', 'No stave attached to instance.'); - } - setStave(stave) { - this.stave = stave; - this.setYs([stave.getYForLine(0)]); - this.setContext(this.stave.getContext()); - return this; - } - getLeftDisplacedHeadPx() { - return this.leftDisplacedHeadPx; - } - getRightDisplacedHeadPx() { - return this.rightDisplacedHeadPx; - } - setLeftDisplacedHeadPx(x) { - this.leftDisplacedHeadPx = x; - return this; - } - setRightDisplacedHeadPx(x) { - this.rightDisplacedHeadPx = x; - return this; - } - shouldIgnoreTicks() { - return this.ignore_ticks; - } - getLineNumber(isTopNote) { - return 0; - } - getLineForRest() { - return 0; - } - getGlyph() { - return this.glyphProps; - } - getGlyphProps() { - return this.glyphProps; - } - getGlyphWidth() { - return this.glyphProps.getWidth(this.render_options.glyph_font_scale); - } - setYs(ys) { - this.ys = ys; - return this; - } - getYs() { - if (this.ys.length === 0) { - throw new RuntimeError('NoYValues', 'No Y-values calculated for this note.'); - } - return this.ys; - } - getYForTopText(text_line) { - return this.checkStave().getYForTopText(text_line); - } - getVoice() { - if (!this.voice) - throw new RuntimeError('NoVoice', 'Note has no voice.'); - return this.voice; - } - setVoice(voice) { - this.voice = voice; - this.preFormatted = false; - return this; - } - getTickContext() { - return this.checkTickContext(); - } - setTickContext(tc) { - this.tickContext = tc; - this.preFormatted = false; - return this; - } - getDuration() { - return this.duration; - } - isDotted() { - return this.getModifiersByType("Dot").length > 0; - } - hasStem() { - return false; - } - getNoteType() { - return this.noteType; - } - getBeam() { - return this.beam; - } - checkBeam() { - return defined(this.beam, 'NoBeam', 'No beam attached to instance'); - } - hasBeam() { - return this.beam != undefined; - } - setBeam(beam) { - this.beam = beam; - return this; - } - addModifier(modifier, index = 0) { - const signature = 'Note.addModifier(modifier: Modifier, index: number=0)'; - if (typeof index === 'string') { - index = parseInt(index); - console.warn(signature + ' expected a number for `index`, but received a string.'); - } - if (typeof modifier !== 'object' || typeof index !== 'number') { - throw new RuntimeError('WrongParams', 'Incorrect call signature. Use ' + signature + ' instead.'); - } - modifier.setNote(this); - modifier.setIndex(index); - super.addModifier(modifier); - return this; - } - getModifiersByType(type) { - return this.modifiers.filter((modifier) => modifier.getCategory() === type); - } - getModifierStartXY(position, index, options) { - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - return { - x: this.getAbsoluteX(), - y: this.ys[0], - }; - } - getRightParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getRightDisplacedHeadPx() : 0; - } - getLeftParenthesisPx(index) { - const props = this.getKeyProps()[index]; - return props.displaced ? this.getLeftDisplacedHeadPx() - this.x_shift : -this.x_shift; - } - getFirstDotPx() { - let px = this.getRightDisplacedHeadPx(); - if (this.checkModifierContext().getMembers('Parenthesis').length !== 0) - px += Tables.currentMusicFont().lookupMetric('parenthesis.default.width'); - return px; - } - getMetrics() { - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call getMetrics on an unformatted note."); - } - const modLeftPx = this.modifierContext ? this.modifierContext.getState().left_shift : 0; - const modRightPx = this.modifierContext ? this.modifierContext.getState().right_shift : 0; - const width = this.getWidth(); - const glyphWidth = this.getGlyphWidth(); - const notePx = width - - modLeftPx - - modRightPx - - this.leftDisplacedHeadPx - - this.rightDisplacedHeadPx; - return { - width, - glyphWidth, - notePx, - modLeftPx, - modRightPx, - leftDisplacedHeadPx: this.leftDisplacedHeadPx, - rightDisplacedHeadPx: this.rightDisplacedHeadPx, - glyphPx: 0, - }; - } - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - let x = tickContext.getX(); - if (this.stave) { - x += this.stave.getNoteStartX() + Tables.currentMusicFont().lookupMetric('stave.padding'); - } - if (this.isCenterAligned()) { - x += this.getCenterXShift(); - } - return x; - } - getStemDirection() { - throw new RuntimeError('NoStem', 'No stem attached to this note.'); - } - getStemExtents() { - throw new RuntimeError('NoStem', 'No stem attached to this note.'); - } - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieStartX += note_glyph_width / 2; - tieStartX += -this.width / 2 + this.width + 2; - return tieStartX; - } - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - const note_glyph_width = this.glyphProps.getWidth(); - tieEndX += note_glyph_width / 2; - tieEndX -= this.width / 2 + 2; - return tieEndX; - } - getKeys() { - return this.keys; - } - getKeyProps() { - return this.keyProps; - } -} diff --git a/build/esm/src/notehead.js b/build/esm/src/notehead.js deleted file mode 100644 index 600a92b459..0000000000 --- a/build/esm/src/notehead.js +++ /dev/null @@ -1,171 +0,0 @@ -import { BoundingBox } from './boundingbox.js'; -import { Glyph } from './glyph.js'; -import { Note } from './note.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { defined, log, RuntimeError } from './util.js'; -function L(...args) { - if (NoteHead.DEBUG) - log('Vex.Flow.NoteHead', args); -} -function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) { - const width = Tables.SLASH_NOTEHEAD_WIDTH; - ctx.save(); - ctx.setLineWidth(Tables.STEM_WIDTH); - let fill = false; - if (Tables.durationToNumber(duration) > 2) { - fill = true; - } - if (!fill) - x -= (Tables.STEM_WIDTH / 2) * stem_direction; - ctx.beginPath(); - ctx.moveTo(x, y + staveSpace); - ctx.lineTo(x, y + 1); - ctx.lineTo(x + width, y - staveSpace); - ctx.lineTo(x + width, y); - ctx.lineTo(x, y + staveSpace); - ctx.closePath(); - if (fill) { - ctx.fill(); - } - else { - ctx.stroke(); - } - if (Tables.durationToFraction(duration).equals(0.5)) { - const breve_lines = [-3, -1, width + 1, width + 3]; - for (let i = 0; i < breve_lines.length; i++) { - ctx.beginPath(); - ctx.moveTo(x + breve_lines[i], y - 10); - ctx.lineTo(x + breve_lines[i], y + 11); - ctx.stroke(); - } - } - ctx.restore(); -} -export class NoteHead extends Note { - static get CATEGORY() { - return "NoteHead"; - } - constructor(noteStruct) { - super(noteStruct); - this.custom_glyph = false; - this.stem_up_x_offset = 0; - this.stem_down_x_offset = 0; - this.index = noteStruct.index; - this.x = noteStruct.x || 0; - this.y = noteStruct.y || 0; - if (noteStruct.note_type) - this.noteType = noteStruct.note_type; - this.displaced = noteStruct.displaced || false; - this.stem_direction = noteStruct.stem_direction || Stem.UP; - this.line = noteStruct.line || 0; - this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); - defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - if ((this.line > 5 || this.line < 0) && this.glyphProps.ledger_code_head) { - this.glyphProps.code_head = this.glyphProps.ledger_code_head; - } - this.glyph_code = this.glyphProps.code_head; - this.x_shift = noteStruct.x_shift || 0; - if (noteStruct.custom_glyph_code) { - this.custom_glyph = true; - this.glyph_code = noteStruct.custom_glyph_code; - this.stem_up_x_offset = noteStruct.stem_up_x_offset || 0; - this.stem_down_x_offset = noteStruct.stem_down_x_offset || 0; - } - this.setStyle(noteStruct.style); - this.slashed = noteStruct.slashed || false; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE }); - this.setWidth(this.custom_glyph && - !this.glyph_code.startsWith('noteheadSlashed') && - !this.glyph_code.startsWith('noteheadCircled') - ? Glyph.getWidth(this.glyph_code, this.render_options.glyph_font_scale) - : this.glyphProps.getWidth(this.render_options.glyph_font_scale)); - } - getWidth() { - return this.width; - } - isDisplaced() { - return this.displaced === true; - } - setX(x) { - this.x = x; - return this; - } - getY() { - return this.y; - } - setY(y) { - this.y = y; - return this; - } - getLine() { - return this.line; - } - setLine(line) { - this.line = line; - return this; - } - getAbsoluteX() { - const x = !this.preFormatted ? this.x : super.getAbsoluteX(); - const displacementStemAdjustment = Stem.WIDTH / 2; - const musicFont = Tables.currentMusicFont(); - const fontShift = musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction; - const displacedFontShift = musicFont.lookupMetric('noteHead.displacedShiftX', 0) * this.stem_direction; - return (x + - fontShift + - (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0)); - } - getBoundingBox() { - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const spacing = this.checkStave().getSpacingBetweenLines(); - const half_spacing = spacing / 2; - const min_y = this.y - half_spacing; - return new BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing); - } - setStave(stave) { - const line = this.getLine(); - this.stave = stave; - if (this.stave) { - this.setY(this.stave.getYForNote(line)); - this.setContext(this.stave.getContext()); - } - return this; - } - preFormat() { - if (this.preFormatted) - return this; - const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; - this.setWidth(width); - this.preFormatted = true; - return this; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let head_x = this.getAbsoluteX(); - if (this.custom_glyph) { - head_x += - this.stem_direction === Stem.UP - ? this.stem_up_x_offset + - (this.glyphProps.stem ? this.glyphProps.getWidth(this.render_options.glyph_font_scale) - this.width : 0) - : this.stem_down_x_offset; - } - const y = this.y; - L("Drawing note head '", this.noteType, this.duration, "' at", head_x, y); - const stem_direction = this.stem_direction; - const glyph_font_scale = this.render_options.glyph_font_scale; - const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`; - if (this.noteType === 's') { - const staveSpace = this.checkStave().getSpacingBetweenLines(); - drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace); - } - else { - Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, { - category: `noteHead.${categorySuffix}`, - }); - } - } -} -NoteHead.DEBUG = false; diff --git a/build/esm/src/notesubgroup.js b/build/esm/src/notesubgroup.js deleted file mode 100644 index b91f3d0ada..0000000000 --- a/build/esm/src/notesubgroup.js +++ /dev/null @@ -1,59 +0,0 @@ -import { Formatter } from './formatter.js'; -import { Modifier } from './modifier.js'; -import { Tables } from './tables.js'; -import { Voice } from './voice.js'; -export class NoteSubGroup extends Modifier { - static get CATEGORY() { - return "NoteSubGroup"; - } - static format(groups, state) { - if (!groups || groups.length === 0) - return false; - let width = 0; - for (let i = 0; i < groups.length; ++i) { - const group = groups[i]; - group.preFormat(); - width += group.getWidth(); - } - state.left_shift += width; - return true; - } - constructor(subNotes) { - super(); - this.preFormatted = false; - this.position = Modifier.Position.LEFT; - this.subNotes = subNotes; - this.subNotes.forEach((subNote) => { - subNote.setIgnoreTicks(false); - }); - this.width = 0; - this.formatter = new Formatter(); - this.voice = new Voice({ - num_beats: 4, - beat_value: 4, - resolution: Tables.RESOLUTION, - }).setStrict(false); - this.voice.addTickables(this.subNotes); - } - preFormat() { - if (this.preFormatted) - return; - this.formatter.joinVoices([this.voice]).format([this.voice], 0); - this.setWidth(this.formatter.getMinTotalWidth()); - this.preFormatted = true; - } - setWidth(width) { - this.width = width; - return this; - } - getWidth() { - return this.width; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - this.alignSubNotesWithNote(this.subNotes, note); - this.subNotes.forEach((subNote) => subNote.setContext(ctx).drawWithStyle()); - } -} diff --git a/build/esm/src/ornament.js b/build/esm/src/ornament.js deleted file mode 100644 index 1431d707a6..0000000000 --- a/build/esm/src/ornament.js +++ /dev/null @@ -1,214 +0,0 @@ -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { TickContext } from './tickcontext.js'; -import { isTabNote } from './typeguard.js'; -import { defined, log, RuntimeError } from './util.js'; -function L(...args) { - if (Ornament.DEBUG) - log('Vex.Flow.Ornament', args); -} -export class Ornament extends Modifier { - static get CATEGORY() { - return "Ornament"; - } - static get minPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - static format(ornaments, state) { - if (!ornaments || ornaments.length === 0) - return false; - let width = 0; - let right_shift = state.right_shift; - let left_shift = state.left_shift; - let yOffset = 0; - for (let i = 0; i < ornaments.length; ++i) { - const ornament = ornaments[i]; - const increment = 2; - if (Ornament.ornamentRelease.indexOf(ornament.type) >= 0) { - ornament.x_shift += right_shift + 2; - } - if (Ornament.ornamentAttack.indexOf(ornament.type) >= 0) { - ornament.x_shift -= left_shift + 2; - } - if (ornament.reportedWidth && ornament.x_shift < 0) { - left_shift += ornament.reportedWidth; - } - else if (ornament.reportedWidth && ornament.x_shift >= 0) { - right_shift += ornament.reportedWidth + Ornament.minPadding; - } - else { - width = Math.max(ornament.getWidth(), width); - } - if (Ornament.ornamentArticulation.indexOf(ornament.type) >= 0) { - const ornamentNote = defined(ornament.note, 'NoAttachedNote'); - if (ornamentNote.getLineNumber() >= 3 || ornament.getPosition() === Modifier.Position.ABOVE) { - state.top_text_line += increment; - ornament.y_shift += yOffset; - yOffset -= ornament.glyph.bbox.getH(); - } - else { - state.text_line += increment; - ornament.y_shift += yOffset; - yOffset += ornament.glyph.bbox.getH(); - } - } - else { - if (ornament.getPosition() === Modifier.Position.ABOVE) { - ornament.setTextLine(state.top_text_line); - state.top_text_line += increment; - } - else { - ornament.setTextLine(state.text_line); - state.text_line += increment; - } - } - } - state.left_shift = left_shift + width / 2; - state.right_shift = right_shift + width / 2; - return true; - } - static get ornamentNoteTransition() { - return ['flip', 'jazzTurn', 'smear']; - } - static get ornamentAttack() { - return ['scoop']; - } - static get ornamentAlignWithNoteHead() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'bend', 'plungerClosed', 'plungerOpen', 'scoop']; - } - static get ornamentRelease() { - return ['doit', 'fall', 'fallLong', 'doitLong', 'jazzTurn', 'smear', 'flip']; - } - static get ornamentArticulation() { - return ['bend', 'plungerClosed', 'plungerOpen']; - } - getMetrics() { - const ornamentMetrics = Tables.currentMusicFont().getMetrics().ornament; - if (!ornamentMetrics) - throw new RuntimeError('BadMetrics', `ornament missing`); - return ornamentMetrics[this.ornament.code]; - } - constructor(type) { - super(); - this.type = type; - this.delayed = false; - this.render_options = { - font_scale: 38, - accidentalLowerPadding: 3, - accidentalUpperPadding: 3, - }; - this.ornament = Tables.ornamentCodes(this.type); - const metrics = this.getMetrics(); - this.adjustForStemDirection = false; - this.reportedWidth = metrics && metrics.reportedWidth ? metrics.reportedWidth : 0; - this.stemUpYOffset = metrics && metrics.stemUpYOffset ? metrics.stemUpYOffset : 0; - this.ornamentAlignWithNoteHead = Ornament.ornamentAlignWithNoteHead.indexOf(this.type) >= 0; - if (!this.ornament) { - throw new RuntimeError('ArgumentError', `Ornament not found: '${this.type}'`); - } - this.x_shift = metrics ? metrics.xOffset : 0; - this.y_shift = metrics ? metrics.yOffset : 0; - this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, { - category: `ornament.${this.ornament.code}`, - }); - if (Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - this.delayed = true; - } - if (!metrics) { - this.glyph.setOrigin(0.5, 1.0); - } - } - setDelayed(delayed) { - this.delayed = delayed; - return this; - } - setUpperAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalUpper = new Glyph(Tables.accidentalCodes(accid).code, scale); - this.accidentalUpper.setOrigin(0.5, 1.0); - return this; - } - setLowerAccidental(accid) { - const scale = this.render_options.font_scale / 1.3; - this.accidentalLower = new Glyph(Tables.accidentalCodes(accid).code, scale); - this.accidentalLower.setOrigin(0.5, 1.0); - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDir = note.getStemDirection(); - const stave = note.checkStave(); - this.applyStyle(); - ctx.openGroup('ornament', this.getAttribute('id')); - const stemExtents = note.checkStem().getExtents(); - let y = stemDir === Stem.DOWN ? stemExtents.baseY : stemExtents.topY; - if (isTabNote(note)) { - if (note.hasStem()) { - if (stemDir === Stem.DOWN) { - y = stave.getYForTopText(this.text_line); - } - } - else { - y = stave.getYForTopText(this.text_line); - } - } - const isPlacedOnNoteheadSide = stemDir === Stem.DOWN; - const spacing = stave.getSpacingBetweenLines(); - let lineSpacing = 1; - if (!isPlacedOnNoteheadSide && note.hasBeam()) { - lineSpacing += 0.5; - } - const totalSpacing = spacing * (this.text_line + lineSpacing); - const glyphYBetweenLines = y - totalSpacing; - const start = note.getModifierStartXY(this.position, this.index); - let glyphX = start.x; - let glyphY = this.ornamentAlignWithNoteHead - ? start.y - : Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines); - glyphY += this.y_shift; - if (this.delayed) { - let delayXShift = 0; - const startX = glyphX - (stave.getX() - 10); - if (this.delayXShift !== undefined) { - delayXShift = this.delayXShift; - } - else { - delayXShift += this.glyph.getMetrics().width / 2; - const nextContext = TickContext.getNextContext(note.getTickContext()); - if (nextContext) { - delayXShift += (nextContext.getX() - startX) * 0.5; - } - else { - delayXShift += (stave.getX() + stave.getWidth() - startX) * 0.5; - } - this.delayXShift = delayXShift; - } - glyphX += delayXShift; - } - L('Rendering ornament: ', this.ornament, glyphX, glyphY); - if (this.accidentalLower) { - this.accidentalLower.render(ctx, glyphX, glyphY); - glyphY -= this.accidentalLower.getMetrics().height; - glyphY -= this.render_options.accidentalLowerPadding; - } - if (this.stemUpYOffset && note.hasStem() && note.getStemDirection() === 1) { - glyphY += this.stemUpYOffset; - } - if (note.getLineNumber() < 5 && Ornament.ornamentNoteTransition.indexOf(this.type) >= 0) { - glyphY = note.checkStave().getBoundingBox().getY() + 40; - } - this.glyph.render(ctx, glyphX + this.x_shift, glyphY); - if (this.accidentalUpper) { - glyphY -= this.glyph.getMetrics().height + this.render_options.accidentalUpperPadding; - this.accidentalUpper.render(ctx, glyphX, glyphY); - } - ctx.closeGroup(); - this.restoreStyle(); - } -} -Ornament.DEBUG = false; diff --git a/build/esm/src/parenthesis.js b/build/esm/src/parenthesis.js deleted file mode 100644 index d5aba0ab5e..0000000000 --- a/build/esm/src/parenthesis.js +++ /dev/null @@ -1,76 +0,0 @@ -import { Glyph } from './glyph.js'; -import { Modifier, ModifierPosition } from './modifier.js'; -import { Tables } from './tables.js'; -import { isGraceNote } from './typeguard.js'; -export class Parenthesis extends Modifier { - static get CATEGORY() { - return "Parenthesis"; - } - static buildAndAttach(notes) { - for (const note of notes) { - for (let i = 0; i < note.keys.length; i++) { - note.addModifier(new Parenthesis(ModifierPosition.LEFT), i); - note.addModifier(new Parenthesis(ModifierPosition.RIGHT), i); - } - } - } - static format(parentheses, state) { - if (!parentheses || parentheses.length === 0) - return false; - let x_widthL = 0; - let x_widthR = 0; - for (let i = 0; i < parentheses.length; ++i) { - const parenthesis = parentheses[i]; - const note = parenthesis.getNote(); - const pos = parenthesis.getPosition(); - const index = parenthesis.checkIndex(); - let shift = 0; - if (pos === ModifierPosition.RIGHT) { - shift = note.getRightParenthesisPx(index); - x_widthR = x_widthR > shift + parenthesis.width ? x_widthR : shift + parenthesis.width; - } - if (pos === ModifierPosition.LEFT) { - shift = note.getLeftParenthesisPx(index); - x_widthL = x_widthL > shift + parenthesis.width ? x_widthL : shift + parenthesis.width; - } - parenthesis.setXShift(shift); - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - constructor(position) { - super(); - this.position = position !== null && position !== void 0 ? position : Modifier.Position.LEFT; - this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - } - setNote(note) { - this.note = note; - this.point = Tables.currentMusicFont().lookupMetric('parenthesis.default.point'); - this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.default.width')); - if (isGraceNote(note)) { - this.point = Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.point'); - this.setWidth(Tables.currentMusicFont().lookupMetric('parenthesis.gracenote.width')); - } - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index, { forceFlagRight: true }); - const x = start.x + this.x_shift; - const y = start.y + this.y_shift; - if (this.position == Modifier.Position.RIGHT) { - Glyph.renderGlyph(ctx, x + 1, y, this.point, 'noteheadParenthesisRight', { - category: `noteHead.standard.noteheadParenthesisRight`, - }); - } - else if (this.position == Modifier.Position.LEFT) { - Glyph.renderGlyph(ctx, x - 2, y, this.point, 'noteheadParenthesisLeft', { - category: `noteHead.standard.noteheadParenthesisLeft`, - }); - } - } -} diff --git a/build/esm/src/parser.js b/build/esm/src/parser.js deleted file mode 100644 index 2cb5274923..0000000000 --- a/build/esm/src/parser.js +++ /dev/null @@ -1,164 +0,0 @@ -import { log, RuntimeError } from './util.js'; -function L(...args) { - if (Parser.DEBUG) - log('Vex.Flow.Parser', args); -} -const NO_ERROR_POS = -1; -function flattenMatches(r) { - if ('matchedString' in r) - return r.matchedString; - if ('results' in r) - return flattenMatches(r.results); - const results = r; - if (results.length === 1) - return flattenMatches(results[0]); - if (results.length === 0) - return null; - return results.map(flattenMatches); -} -export class Parser { - constructor(grammar) { - this.grammar = grammar; - this.line = ''; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - } - parse(line) { - this.line = line; - this.pos = 0; - this.errorPos = NO_ERROR_POS; - const result = this.expect(this.grammar.begin()); - result.errorPos = this.errorPos; - return result; - } - matchFail(returnPos) { - if (this.errorPos === NO_ERROR_POS) - this.errorPos = this.pos; - this.pos = returnPos; - } - matchSuccess() { - this.errorPos = NO_ERROR_POS; - } - matchToken(token, noSpace = false) { - const regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)'); - const workingLine = this.line.slice(this.pos); - const result = workingLine.match(regexp); - if (result !== null) { - return { - success: true, - matchedString: result[2], - incrementPos: result[1].length, - pos: this.pos, - }; - } - else { - return { success: false, pos: this.pos }; - } - } - expectOne(rule, maybe = false) { - const results = []; - const pos = this.pos; - let allMatches = true; - let oneMatch = false; - maybe = maybe === true || rule.maybe === true; - if (rule.expect) { - for (const next of rule.expect) { - const localPos = this.pos; - const result = this.expect(next); - if (result.success) { - results.push(result); - oneMatch = true; - if (rule.or) - break; - } - else { - allMatches = false; - if (!rule.or) { - this.pos = localPos; - break; - } - } - } - } - const gotOne = (rule.or && oneMatch) || allMatches; - const success = gotOne || maybe === true; - const numMatches = gotOne ? 1 : 0; - if (maybe && !gotOne) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - expectOneOrMore(rule, maybe = false) { - const results = []; - const pos = this.pos; - let numMatches = 0; - let more = true; - do { - const result = this.expectOne(rule); - if (result.success && result.results) { - numMatches++; - results.push(result.results); - } - else { - more = false; - } - } while (more); - const success = numMatches > 0 || maybe === true; - if (maybe && !(numMatches > 0)) - this.pos = pos; - if (success) { - this.matchSuccess(); - } - else { - this.matchFail(pos); - } - return { success, results, numMatches }; - } - expectZeroOrMore(rule) { - return this.expectOneOrMore(rule, true); - } - expect(ruleFunc) { - L('Evaluating rule function:', ruleFunc); - if (!ruleFunc) { - throw new RuntimeError('Invalid rule function'); - } - let result; - const rule = ruleFunc.bind(this.grammar)(); - if (rule.token) { - result = this.matchToken(rule.token, rule.noSpace === true); - if (result.success) { - this.pos += result.incrementPos; - } - } - else if (rule.expect) { - if (rule.oneOrMore) { - result = this.expectOneOrMore(rule); - } - else if (rule.zeroOrMore) { - result = this.expectZeroOrMore(rule); - } - else { - result = this.expectOne(rule); - } - } - else { - L(rule); - throw new RuntimeError('Bad grammar! No `token` or `expect` property ' + rule); - } - const matches = []; - result.matches = matches; - if (result.results) { - result.results.forEach((r) => matches.push(flattenMatches(r))); - } - if (rule.run && result.success) { - rule.run({ matches }); - } - return result; - } -} -Parser.DEBUG = false; diff --git a/build/esm/src/pedalmarking.js b/build/esm/src/pedalmarking.js deleted file mode 100644 index d969e36501..0000000000 --- a/build/esm/src/pedalmarking.js +++ /dev/null @@ -1,192 +0,0 @@ -import { Element } from './element.js'; -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { Tables } from './tables.js'; -import { log, RuntimeError } from './util.js'; -function L(...args) { - if (PedalMarking.DEBUG) - log('Vex.Flow.PedalMarking', args); -} -function drawPedalGlyph(name, context, x, y, point) { - const glyph_data = PedalMarking.GLYPHS[name]; - const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' }); - glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift); -} -export class PedalMarking extends Element { - static get CATEGORY() { - return "PedalMarking"; - } - static createSustain(notes) { - const pedal = new PedalMarking(notes); - return pedal; - } - static createSostenuto(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.MIXED); - pedal.setCustomText('Sost. Ped.'); - return pedal; - } - static createUnaCorda(notes) { - const pedal = new PedalMarking(notes); - pedal.setType(PedalMarking.type.TEXT); - pedal.setCustomText('una corda', 'tre corda'); - return pedal; - } - constructor(notes) { - super(); - this.notes = notes; - this.type = PedalMarking.type.TEXT; - this.line = 0; - this.custom_depress_text = ''; - this.custom_release_text = ''; - this.resetFont(); - this.render_options = { - bracket_height: 10, - text_margin_right: 6, - bracket_line_width: 1, - color: 'black', - }; - } - setType(type) { - type = typeof type === 'string' ? PedalMarking.typeString[type] : type; - if (type >= PedalMarking.type.TEXT && type <= PedalMarking.type.MIXED) { - this.type = type; - } - return this; - } - setCustomText(depress, release) { - this.custom_depress_text = depress || ''; - this.custom_release_text = release || ''; - return this; - } - setLine(line) { - this.line = line; - return this; - } - drawBracketed() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - let prev_x; - let prev_y; - this.notes.forEach((note, index, notes) => { - is_pedal_depressed = !is_pedal_depressed; - const x = note.getAbsoluteX(); - const y = note.checkStave().getYForBottomText(this.line + 3); - if (x < prev_x) { - throw new RuntimeError('InvalidConfiguration', 'The notes provided must be in order of ascending x positions'); - } - const next_is_same = notes[index + 1] === note; - const prev_is_same = notes[index - 1] === note; - let x_shift = 0; - const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - if (is_pedal_depressed) { - x_shift = prev_is_same ? 5 : 0; - if (this.type === PedalMarking.type.MIXED && !prev_is_same) { - if (this.custom_depress_text) { - const text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - x_shift = text_width / 2 + this.render_options.text_margin_right; - } - else { - drawPedalGlyph('pedal_depress', ctx, x, y, point); - x_shift = 20 + this.render_options.text_margin_right; - } - } - else { - ctx.beginPath(); - ctx.moveTo(x, y - this.render_options.bracket_height); - ctx.lineTo(x + x_shift, y); - ctx.stroke(); - ctx.closePath(); - } - } - else { - x_shift = next_is_same ? -5 : 0; - ctx.beginPath(); - ctx.moveTo(prev_x, prev_y); - ctx.lineTo(x + x_shift, y); - ctx.lineTo(x, y - this.render_options.bracket_height); - ctx.stroke(); - ctx.closePath(); - } - prev_x = x + x_shift; - prev_y = y; - }); - } - drawText() { - const ctx = this.checkContext(); - let is_pedal_depressed = false; - this.notes.forEach((note) => { - is_pedal_depressed = !is_pedal_depressed; - const stave = note.checkStave(); - const x = note.getAbsoluteX(); - const y = stave.getYForBottomText(this.line + 3); - const point = Tables.currentMusicFont().lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`); - let text_width = 0; - if (is_pedal_depressed) { - if (this.custom_depress_text) { - text_width = ctx.measureText(this.custom_depress_text).width; - ctx.fillText(this.custom_depress_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_depress', ctx, x, y, point); - } - } - else { - if (this.custom_release_text) { - text_width = ctx.measureText(this.custom_release_text).width; - ctx.fillText(this.custom_release_text, x - text_width / 2, y); - } - else { - drawPedalGlyph('pedal_release', ctx, x, y, point); - } - } - }); - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - ctx.setFont(this.textFont); - L('Rendering Pedal Marking'); - if (this.type === PedalMarking.type.BRACKET || this.type === PedalMarking.type.MIXED) { - ctx.setLineWidth(this.render_options.bracket_line_width); - this.drawBracketed(); - } - else if (this.type === PedalMarking.type.TEXT) { - this.drawText(); - } - ctx.restore(); - } -} -PedalMarking.DEBUG = false; -PedalMarking.TEXT_FONT = { - family: Font.SERIF, - size: 12, - weight: FontWeight.BOLD, - style: FontStyle.ITALIC, -}; -PedalMarking.GLYPHS = { - pedal_depress: { - code: 'keyboardPedalPed', - x_shift: -10, - y_shift: 0, - }, - pedal_release: { - code: 'keyboardPedalUp', - x_shift: -2, - y_shift: 3, - }, -}; -PedalMarking.type = { - TEXT: 1, - BRACKET: 2, - MIXED: 3, -}; -PedalMarking.typeString = { - text: PedalMarking.type.TEXT, - bracket: PedalMarking.type.BRACKET, - mixed: PedalMarking.type.MIXED, -}; diff --git a/build/esm/src/registry.js b/build/esm/src/registry.js deleted file mode 100644 index 368096fd04..0000000000 --- a/build/esm/src/registry.js +++ /dev/null @@ -1,81 +0,0 @@ -import { RuntimeError } from './util.js'; -class Index { - constructor() { - this.id = {}; - this.type = {}; - this.class = {}; - } -} -export class Registry { - static getDefaultRegistry() { - return Registry.defaultRegistry; - } - static enableDefaultRegistry(registry) { - Registry.defaultRegistry = registry; - } - static disableDefaultRegistry() { - Registry.defaultRegistry = undefined; - } - constructor() { - this.index = new Index(); - } - clear() { - this.index = new Index(); - return this; - } - setIndexValue(name, value, id, elem) { - const index = this.index; - if (!index[name][value]) { - index[name][value] = {}; - } - index[name][value][id] = elem; - } - updateIndex({ id, name, value, oldValue }) { - const elem = this.getElementById(id); - if (oldValue !== undefined && this.index[name][oldValue]) { - delete this.index[name][oldValue][id]; - } - if (value && elem) { - this.setIndexValue(name, value, elem.getAttribute('id'), elem); - } - } - register(elem, id) { - id = id || elem.getAttribute('id'); - if (!id) { - throw new RuntimeError("Can't add element without `id` attribute to registry"); - } - elem.setAttribute('id', id); - this.setIndexValue('id', id, id, elem); - this.updateIndex({ id, name: 'type', value: elem.getAttribute('type'), oldValue: undefined }); - elem.onRegister(this); - return this; - } - getElementById(id) { - var _a, _b; - return (_b = (_a = this.index.id) === null || _a === void 0 ? void 0 : _a[id]) === null || _b === void 0 ? void 0 : _b[id]; - } - getElementsByAttribute(attribute, value) { - const index_attr = this.index[attribute]; - if (index_attr) { - const index_attr_val = index_attr[value]; - if (index_attr_val) { - const keys = Object.keys(index_attr_val); - return keys.map((k) => index_attr_val[k]); - } - } - return []; - } - getElementsByType(type) { - return this.getElementsByAttribute('type', type); - } - getElementsByClass(className) { - return this.getElementsByAttribute('class', className); - } - onUpdate(info) { - const allowedNames = ['id', 'type', 'class']; - if (allowedNames.includes(info.name)) { - this.updateIndex(info); - } - return this; - } -} diff --git a/build/esm/src/rendercontext.js b/build/esm/src/rendercontext.js deleted file mode 100644 index ec7a54acc0..0000000000 --- a/build/esm/src/rendercontext.js +++ /dev/null @@ -1,24 +0,0 @@ -export class RenderContext { - static get CATEGORY() { - return "RenderContext"; - } - set font(f) { - this.setFont(f); - } - get font() { - return this.getFont(); - } - setRawFont(f) { - this.setFont(f); - return this; - } -} -export function drawDot(ctx, x, y, color = '#F55') { - ctx.save(); - ctx.setFillStyle(color); - ctx.beginPath(); - ctx.arc(x, y, 3, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.restore(); -} diff --git a/build/esm/src/renderer.js b/build/esm/src/renderer.js deleted file mode 100644 index 250c4ff46c..0000000000 --- a/build/esm/src/renderer.js +++ /dev/null @@ -1,112 +0,0 @@ -import { CanvasContext } from './canvascontext.js'; -import { SVGContext } from './svgcontext.js'; -import { isRenderContext } from './typeguard.js'; -import { RuntimeError } from './util.js'; -import { isHTMLCanvas, isHTMLDiv } from './web.js'; -export var RendererBackends; -(function (RendererBackends) { - RendererBackends[RendererBackends["CANVAS"] = 1] = "CANVAS"; - RendererBackends[RendererBackends["SVG"] = 2] = "SVG"; -})(RendererBackends || (RendererBackends = {})); -export var RendererLineEndType; -(function (RendererLineEndType) { - RendererLineEndType[RendererLineEndType["NONE"] = 1] = "NONE"; - RendererLineEndType[RendererLineEndType["UP"] = 2] = "UP"; - RendererLineEndType[RendererLineEndType["DOWN"] = 3] = "DOWN"; -})(RendererLineEndType || (RendererLineEndType = {})); -export class Renderer { - static buildContext(elementId, backend, width, height, background = '#FFF') { - const renderer = new Renderer(elementId, backend); - if (width && height) { - renderer.resize(width, height); - } - const ctx = renderer.getContext(); - ctx.setBackgroundFillStyle(background); - Renderer.lastContext = ctx; - return ctx; - } - static getCanvasContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background); - } - static getSVGContext(elementId, width, height, background) { - return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background); - } - static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) { - context.beginPath(); - const dx = toX - fromX; - const dy = toY - fromY; - const angle = Math.atan2(dy, dx); - let x = fromX; - let y = fromY; - context.moveTo(fromX, fromY); - let idx = 0; - let draw = true; - while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) { - const dashLength = dashPattern[idx++ % dashPattern.length]; - const nx = x + Math.cos(angle) * dashLength; - x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx); - const ny = y + Math.sin(angle) * dashLength; - y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny); - if (draw) { - context.lineTo(x, y); - } - else { - context.moveTo(x, y); - } - draw = !draw; - } - context.closePath(); - context.stroke(); - } - constructor(arg0, arg1) { - if (isRenderContext(arg0)) { - this.ctx = arg0; - } - else { - if (arg1 === undefined) { - throw new RuntimeError('InvalidArgument', 'Missing backend argument'); - } - const backend = arg1; - let element; - if (typeof arg0 == 'string') { - const maybeElement = document.getElementById(arg0); - if (!maybeElement) { - throw new RuntimeError('BadElementId', `Can't find element with ID "${maybeElement}"`); - } - element = maybeElement; - } - else { - element = arg0; - } - if (backend === Renderer.Backends.CANVAS) { - if (!isHTMLCanvas(element)) { - throw new RuntimeError('BadElement', 'CANVAS context requires an HTMLCanvasElement.'); - } - const context = element.getContext('2d', { willReadFrequently: true }); - if (!context) { - throw new RuntimeError('BadElement', "Can't get canvas context"); - } - this.ctx = new CanvasContext(context); - } - else if (backend === Renderer.Backends.SVG) { - if (!isHTMLDiv(element)) { - throw new RuntimeError('BadElement', 'SVG context requires an HTMLDivElement.'); - } - this.ctx = new SVGContext(element); - } - else { - throw new RuntimeError('InvalidBackend', `No support for backend: ${backend}`); - } - } - } - resize(width, height) { - this.ctx.resize(width, height); - return this; - } - getContext() { - return this.ctx; - } -} -Renderer.Backends = RendererBackends; -Renderer.LineEndType = RendererLineEndType; -Renderer.lastContext = undefined; diff --git a/build/esm/src/repeatnote.js b/build/esm/src/repeatnote.js deleted file mode 100644 index 6d97c8c3a4..0000000000 --- a/build/esm/src/repeatnote.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Glyph } from './glyph.js'; -import { GlyphNote } from './glyphnote.js'; -import { Tables } from './tables.js'; -const CODES = { - '1': 'repeat1Bar', - '2': 'repeat2Bars', - '4': 'repeat4Bars', - slash: 'repeatBarSlash', -}; -export class RepeatNote extends GlyphNote { - static get CATEGORY() { - return "RepeatNote"; - } - constructor(type, noteStruct, options) { - const glyphCode = CODES[type] || 'repeat1Bar'; - const glyph = new Glyph(glyphCode, Tables.currentMusicFont().lookupMetric('repeatNote.point', 40), { - category: 'repeatNote', - }); - super(glyph, Object.assign({ duration: 'q', align_center: type !== 'slash' }, noteStruct), options); - } -} diff --git a/build/esm/src/stave.js b/build/esm/src/stave.js deleted file mode 100644 index 62b45d5c6b..0000000000 --- a/build/esm/src/stave.js +++ /dev/null @@ -1,607 +0,0 @@ -import { BoundingBox } from './boundingbox.js'; -import { Clef } from './clef.js'; -import { Element } from './element.js'; -import { Font, FontStyle, FontWeight } from './font.js'; -import { KeySignature } from './keysignature.js'; -import { Barline, BarlineType } from './stavebarline.js'; -import { StaveModifierPosition } from './stavemodifier.js'; -import { Repetition } from './staverepetition.js'; -import { StaveSection } from './stavesection.js'; -import { StaveTempo } from './stavetempo.js'; -import { StaveText } from './stavetext.js'; -import { Volta } from './stavevolta.js'; -import { Tables } from './tables.js'; -import { TimeSignature } from './timesignature.js'; -import { isBarline } from './typeguard.js'; -import { RuntimeError } from './util.js'; -const SORT_ORDER_BEG_MODIFIERS = { - [Barline.CATEGORY]: 0, - [Clef.CATEGORY]: 1, - [KeySignature.CATEGORY]: 2, - [TimeSignature.CATEGORY]: 3, -}; -const SORT_ORDER_END_MODIFIERS = { - [TimeSignature.CATEGORY]: 0, - [KeySignature.CATEGORY]: 1, - [Barline.CATEGORY]: 2, - [Clef.CATEGORY]: 3, -}; -export class Stave extends Element { - static get CATEGORY() { - return "Stave"; - } - static get defaultPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.padding') + musicFont.lookupMetric('stave.endPaddingMax'); - } - static get rightPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('stave.endPaddingMax'); - } - constructor(x, y, width, options) { - super(); - this.height = 0; - this.x = x; - this.y = y; - this.width = width; - this.formatted = false; - this.start_x = x + 5; - this.end_x = x + width; - this.modifiers = []; - this.measure = 0; - this.clef = 'treble'; - this.endClef = undefined; - this.resetFont(); - this.options = Object.assign({ vertical_bar_width: 10, num_lines: 5, fill_style: '#999999', left_bar: true, right_bar: true, spacing_between_lines_px: Tables.STAVE_LINE_DISTANCE, space_above_staff_ln: 4, space_below_staff_ln: 4, top_text_position: 1, bottom_text_position: 4, line_config: [] }, options); - this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 }; - this.defaultLedgerLineStyle = { strokeStyle: '#444', lineWidth: 1.4 }; - this.resetLines(); - this.addModifier(new Barline(this.options.left_bar ? BarlineType.SINGLE : BarlineType.NONE)); - this.addEndModifier(new Barline(this.options.right_bar ? BarlineType.SINGLE : BarlineType.NONE)); - } - setDefaultLedgerLineStyle(style) { - this.defaultLedgerLineStyle = style; - } - getDefaultLedgerLineStyle() { - return Object.assign(Object.assign({}, this.getStyle()), this.defaultLedgerLineStyle); - } - space(spacing) { - return this.options.spacing_between_lines_px * spacing; - } - resetLines() { - this.options.line_config = []; - for (let i = 0; i < this.options.num_lines; i++) { - this.options.line_config.push({ visible: true }); - } - this.height = (this.options.num_lines + this.options.space_above_staff_ln) * this.options.spacing_between_lines_px; - this.options.bottom_text_position = this.options.num_lines; - } - setNoteStartX(x) { - if (!this.formatted) - this.format(); - this.start_x = x; - return this; - } - getNoteStartX() { - if (!this.formatted) - this.format(); - return this.start_x; - } - getNoteEndX() { - if (!this.formatted) - this.format(); - return this.end_x; - } - getTieStartX() { - return this.start_x; - } - getTieEndX() { - return this.end_x; - } - getX() { - return this.x; - } - getNumLines() { - return this.options.num_lines; - } - setNumLines(n) { - this.options.num_lines = n; - this.resetLines(); - return this; - } - setY(y) { - this.y = y; - return this; - } - getY() { - return this.y; - } - getTopLineTopY() { - return this.getYForLine(0) - Tables.STAVE_LINE_THICKNESS / 2; - } - getBottomLineBottomY() { - return this.getYForLine(this.getNumLines() - 1) + Tables.STAVE_LINE_THICKNESS / 2; - } - setX(x) { - const shift = x - this.x; - this.formatted = false; - this.x = x; - this.start_x += shift; - this.end_x += shift; - for (let i = 0; i < this.modifiers.length; i++) { - const mod = this.modifiers[i]; - mod.setX(mod.getX() + shift); - } - return this; - } - setWidth(width) { - this.formatted = false; - this.width = width; - this.end_x = this.x + width; - return this; - } - getWidth() { - return this.width; - } - getStyle() { - return Object.assign({ fillStyle: this.options.fill_style, strokeStyle: this.options.fill_style, lineWidth: Tables.STAVE_LINE_THICKNESS }, super.getStyle()); - } - setMeasure(measure) { - this.measure = measure; - return this; - } - getMeasure() { - return this.measure; - } - getModifierXShift(index = 0) { - if (typeof index !== 'number') { - throw new RuntimeError('InvalidIndex', 'Must be of number type'); - } - if (!this.formatted) - this.format(); - if (this.getModifiers(StaveModifierPosition.BEGIN).length === 1) { - return 0; - } - if (this.modifiers[index].getPosition() === StaveModifierPosition.RIGHT) { - return 0; - } - let start_x = this.start_x - this.x; - const begBarline = this.modifiers[0]; - if (begBarline.getType() === BarlineType.REPEAT_BEGIN && start_x > begBarline.getWidth()) { - start_x -= begBarline.getWidth(); - } - return start_x; - } - setRepetitionType(type, yShift = 0) { - this.modifiers.push(new Repetition(type, this.x, yShift)); - return this; - } - setVoltaType(type, number_t, y) { - this.modifiers.push(new Volta(type, number_t, this.x, y)); - return this; - } - setSection(section, y, xOffset = 0, fontSize, drawRect = true) { - const staveSection = new StaveSection(section, this.x + xOffset, y, drawRect); - if (fontSize) - staveSection.setFontSize(fontSize); - this.modifiers.push(staveSection); - return this; - } - setTempo(tempo, y) { - this.modifiers.push(new StaveTempo(tempo, this.x, y)); - return this; - } - setText(text, position, options = {}) { - this.modifiers.push(new StaveText(text, position, options)); - return this; - } - getHeight() { - return this.height; - } - getSpacingBetweenLines() { - return this.options.spacing_between_lines_px; - } - getBoundingBox() { - return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y); - } - getBottomY() { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing; - return score_bottom; - } - getBottomLineY() { - return this.getYForLine(this.options.num_lines); - } - getYForLine(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - const y = this.y + line * spacing + headroom * spacing; - return y; - } - getLineForY(y) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return (y - this.y) / spacing - headroom; - } - getYForTopText(line = 0) { - return this.getYForLine(-line - this.options.top_text_position); - } - getYForBottomText(line = 0) { - return this.getYForLine(this.options.bottom_text_position + line); - } - getYForNote(line) { - const options = this.options; - const spacing = options.spacing_between_lines_px; - const headroom = options.space_above_staff_ln; - return this.y + headroom * spacing + 5 * spacing - line * spacing; - } - getYForGlyphs() { - return this.getYForLine(3); - } - addModifier(modifier, position) { - if (position !== undefined) { - modifier.setPosition(position); - } - modifier.setStave(this); - this.formatted = false; - this.modifiers.push(modifier); - return this; - } - addEndModifier(modifier) { - this.addModifier(modifier, StaveModifierPosition.END); - return this; - } - setBegBarType(type) { - const { SINGLE, REPEAT_BEGIN, NONE } = BarlineType; - if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) { - this.modifiers[0].setType(type); - this.formatted = false; - } - return this; - } - setEndBarType(type) { - if (type !== BarlineType.REPEAT_BEGIN) { - this.modifiers[1].setType(type); - this.formatted = false; - } - return this; - } - setClef(clefSpec, size, annotation, position) { - if (position === undefined) { - position = StaveModifierPosition.BEGIN; - } - if (position === StaveModifierPosition.END) { - this.endClef = clefSpec; - } - else { - this.clef = clefSpec; - } - const clefs = this.getModifiers(position, Clef.CATEGORY); - if (clefs.length === 0) { - this.addClef(clefSpec, size, annotation, position); - } - else { - clefs[0].setType(clefSpec, size, annotation); - } - return this; - } - getClef() { - return this.clef; - } - setEndClef(clefSpec, size, annotation) { - this.setClef(clefSpec, size, annotation, StaveModifierPosition.END); - return this; - } - getEndClef() { - return this.endClef; - } - setKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = StaveModifierPosition.BEGIN; - } - const keySignatures = this.getModifiers(position, KeySignature.CATEGORY); - if (keySignatures.length === 0) { - this.addKeySignature(keySpec, cancelKeySpec, position); - } - else { - keySignatures[0].setKeySig(keySpec, cancelKeySpec); - } - return this; - } - setEndKeySignature(keySpec, cancelKeySpec) { - this.setKeySignature(keySpec, cancelKeySpec, StaveModifierPosition.END); - return this; - } - setTimeSignature(timeSpec, customPadding, position) { - if (position === undefined) { - position = StaveModifierPosition.BEGIN; - } - const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY); - if (timeSignatures.length === 0) { - this.addTimeSignature(timeSpec, customPadding, position); - } - else { - timeSignatures[0].setTimeSig(timeSpec); - } - return this; - } - setEndTimeSignature(timeSpec, customPadding) { - this.setTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); - return this; - } - addKeySignature(keySpec, cancelKeySpec, position) { - if (position === undefined) { - position = StaveModifierPosition.BEGIN; - } - this.addModifier(new KeySignature(keySpec, cancelKeySpec).setPosition(position), position); - return this; - } - addClef(clef, size, annotation, position) { - if (position === undefined || position === StaveModifierPosition.BEGIN) { - this.clef = clef; - } - else if (position === StaveModifierPosition.END) { - this.endClef = clef; - } - this.addModifier(new Clef(clef, size, annotation), position); - return this; - } - addEndClef(clef, size, annotation) { - this.addClef(clef, size, annotation, StaveModifierPosition.END); - return this; - } - addTimeSignature(timeSpec, customPadding, position) { - this.addModifier(new TimeSignature(timeSpec, customPadding), position); - return this; - } - addEndTimeSignature(timeSpec, customPadding) { - this.addTimeSignature(timeSpec, customPadding, StaveModifierPosition.END); - return this; - } - addTrebleGlyph() { - this.addClef('treble'); - return this; - } - getModifiers(position, category) { - const noPosition = position === undefined; - const noCategory = category === undefined; - if (noPosition && noCategory) { - return this.modifiers; - } - else if (noPosition) { - return this.modifiers.filter((m) => category === m.getCategory()); - } - else if (noCategory) { - return this.modifiers.filter((m) => position === m.getPosition()); - } - else { - return this.modifiers.filter((m) => position === m.getPosition() && category === m.getCategory()); - } - } - sortByCategory(items, order) { - for (let i = items.length - 1; i >= 0; i--) { - for (let j = 0; j < i; j++) { - if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) { - const temp = items[j]; - items[j] = items[j + 1]; - items[j + 1] = temp; - } - } - } - } - format() { - const begBarline = this.modifiers[0]; - const endBarline = this.modifiers[1]; - const begModifiers = this.getModifiers(StaveModifierPosition.BEGIN); - const endModifiers = this.getModifiers(StaveModifierPosition.END); - this.sortByCategory(begModifiers, SORT_ORDER_BEG_MODIFIERS); - this.sortByCategory(endModifiers, SORT_ORDER_END_MODIFIERS); - if (begModifiers.length > 1 && begBarline.getType() === BarlineType.REPEAT_BEGIN) { - begModifiers.push(begModifiers.splice(0, 1)[0]); - begModifiers.splice(0, 0, new Barline(BarlineType.SINGLE)); - } - if (endModifiers.indexOf(endBarline) > 0) { - endModifiers.splice(0, 0, new Barline(BarlineType.NONE)); - } - let width; - let padding; - let modifier; - let offset = 0; - let x = this.x; - for (let i = 0; i < begModifiers.length; i++) { - modifier = begModifiers[i]; - padding = modifier.getPadding(i + offset); - width = modifier.getWidth(); - x += padding; - modifier.setX(x); - x += width; - if (padding + width === 0) - offset--; - } - this.start_x = x; - x = this.x + this.width; - const widths = { - left: 0, - right: 0, - paddingRight: 0, - paddingLeft: 0, - }; - let lastBarlineIdx = 0; - for (let i = 0; i < endModifiers.length; i++) { - modifier = endModifiers[i]; - lastBarlineIdx = isBarline(modifier) ? i : lastBarlineIdx; - widths.right = 0; - widths.left = 0; - widths.paddingRight = 0; - widths.paddingLeft = 0; - const layoutMetrics = modifier.getLayoutMetrics(); - if (layoutMetrics) { - if (i !== 0) { - widths.right = layoutMetrics.xMax || 0; - widths.paddingRight = layoutMetrics.paddingRight || 0; - } - widths.left = -layoutMetrics.xMin || 0; - widths.paddingLeft = layoutMetrics.paddingLeft || 0; - if (i === endModifiers.length - 1) { - widths.paddingLeft = 0; - } - } - else { - widths.paddingRight = modifier.getPadding(i - lastBarlineIdx); - if (i !== 0) { - widths.right = modifier.getWidth(); - } - if (i === 0) { - widths.left = modifier.getWidth(); - } - } - x -= widths.paddingRight; - x -= widths.right; - modifier.setX(x); - x -= widths.left; - x -= widths.paddingLeft; - } - this.end_x = endModifiers.length === 1 ? this.x + this.width : x; - this.formatted = true; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - this.applyStyle(); - ctx.openGroup('stave', this.getAttribute('id')); - if (!this.formatted) - this.format(); - const num_lines = this.options.num_lines; - const width = this.width; - const x = this.x; - let y; - for (let line = 0; line < num_lines; line++) { - y = this.getYForLine(line); - if (this.options.line_config[line].visible) { - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + width, y); - ctx.stroke(); - } - } - ctx.closeGroup(); - this.restoreStyle(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - if (typeof modifier.draw === 'function') { - modifier.applyStyle(ctx); - modifier.draw(this, this.getModifierXShift(i)); - modifier.restoreStyle(ctx); - } - } - if (this.measure > 0) { - ctx.save(); - ctx.setFont(this.textFont); - const textWidth = ctx.measureText('' + this.measure).width; - y = this.getYForTopText(0) + 3; - ctx.fillText('' + this.measure, this.x - textWidth / 2, y); - ctx.restore(); - } - return this; - } - getVerticalBarWidth() { - return this.options.vertical_bar_width; - } - getConfigForLines() { - return this.options.line_config; - } - setConfigForLine(line_number, line_config) { - if (line_number >= this.options.num_lines || line_number < 0) { - throw new RuntimeError('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.'); - } - if (line_config.visible === undefined) { - throw new RuntimeError('StaveConfigError', "The line configuration object is missing the 'visible' property."); - } - if (typeof line_config.visible !== 'boolean') { - throw new RuntimeError('StaveConfigError', "The line configuration objects 'visible' property must be true or false."); - } - this.options.line_config[line_number] = line_config; - return this; - } - setConfigForLines(lines_configuration) { - if (lines_configuration.length !== this.options.num_lines) { - throw new RuntimeError('StaveConfigError', 'The length of the lines configuration array must match the number of lines in the Stave'); - } - for (const line_config in lines_configuration) { - if (lines_configuration[line_config].visible == undefined) { - lines_configuration[line_config] = this.options.line_config[line_config]; - } - this.options.line_config[line_config] = Object.assign(Object.assign({}, this.options.line_config[line_config]), lines_configuration[line_config]); - } - this.options.line_config = lines_configuration; - return this; - } - static formatBegModifiers(staves) { - const adjustCategoryStartX = (category) => { - let minStartX = 0; - staves.forEach((stave) => { - const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); - if (modifiers.length > 0 && modifiers[0].getX() > minStartX) - minStartX = modifiers[0].getX(); - }); - let adjustX = 0; - staves.forEach((stave) => { - adjustX = 0; - const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, category); - modifiers.forEach((modifier) => { - if (minStartX - modifier.getX() > adjustX) - adjustX = minStartX - modifier.getX(); - }); - const allModifiers = stave.getModifiers(StaveModifierPosition.BEGIN); - let bAdjust = false; - allModifiers.forEach((modifier) => { - if (modifier.getCategory() === category) - bAdjust = true; - if (bAdjust && adjustX > 0) - modifier.setX(modifier.getX() + adjustX); - }); - stave.setNoteStartX(stave.getNoteStartX() + adjustX); - }); - }; - staves.forEach((stave) => { - if (!stave.formatted) - stave.format(); - }); - adjustCategoryStartX("Clef"); - adjustCategoryStartX("KeySignature"); - adjustCategoryStartX("TimeSignature"); - let maxX = 0; - staves.forEach((stave) => { - if (stave.getNoteStartX() > maxX) - maxX = stave.getNoteStartX(); - }); - staves.forEach((stave) => { - stave.setNoteStartX(maxX); - }); - maxX = 0; - staves.forEach((stave) => { - const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); - modifiers.forEach((modifier) => { - if (modifier.getType() == BarlineType.REPEAT_BEGIN) - if (modifier.getX() > maxX) - maxX = modifier.getX(); - }); - }); - staves.forEach((stave) => { - const modifiers = stave.getModifiers(StaveModifierPosition.BEGIN, "Barline"); - modifiers.forEach((modifier) => { - if (modifier.getType() == BarlineType.REPEAT_BEGIN) - modifier.setX(maxX); - }); - }); - } -} -Stave.TEXT_FONT = { - family: Font.SANS_SERIF, - size: 8, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/stavebarline.js b/build/esm/src/stavebarline.js deleted file mode 100644 index 3e85b4d3c8..0000000000 --- a/build/esm/src/stavebarline.js +++ /dev/null @@ -1,186 +0,0 @@ -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -export var BarlineType; -(function (BarlineType) { - BarlineType[BarlineType["SINGLE"] = 1] = "SINGLE"; - BarlineType[BarlineType["DOUBLE"] = 2] = "DOUBLE"; - BarlineType[BarlineType["END"] = 3] = "END"; - BarlineType[BarlineType["REPEAT_BEGIN"] = 4] = "REPEAT_BEGIN"; - BarlineType[BarlineType["REPEAT_END"] = 5] = "REPEAT_END"; - BarlineType[BarlineType["REPEAT_BOTH"] = 6] = "REPEAT_BOTH"; - BarlineType[BarlineType["NONE"] = 7] = "NONE"; -})(BarlineType || (BarlineType = {})); -export class Barline extends StaveModifier { - static get CATEGORY() { - return "Barline"; - } - static get type() { - return BarlineType; - } - static get typeString() { - return { - single: BarlineType.SINGLE, - double: BarlineType.DOUBLE, - end: BarlineType.END, - repeatBegin: BarlineType.REPEAT_BEGIN, - repeatEnd: BarlineType.REPEAT_END, - repeatBoth: BarlineType.REPEAT_BOTH, - none: BarlineType.NONE, - }; - } - constructor(type) { - super(); - this.thickness = Tables.STAVE_LINE_THICKNESS; - const TYPE = BarlineType; - this.widths = {}; - this.widths[TYPE.SINGLE] = 5; - this.widths[TYPE.DOUBLE] = 5; - this.widths[TYPE.END] = 5; - this.widths[TYPE.REPEAT_BEGIN] = 5; - this.widths[TYPE.REPEAT_END] = 5; - this.widths[TYPE.REPEAT_BOTH] = 5; - this.widths[TYPE.NONE] = 5; - this.paddings = {}; - this.paddings[TYPE.SINGLE] = 0; - this.paddings[TYPE.DOUBLE] = 0; - this.paddings[TYPE.END] = 0; - this.paddings[TYPE.REPEAT_BEGIN] = 15; - this.paddings[TYPE.REPEAT_END] = 15; - this.paddings[TYPE.REPEAT_BOTH] = 15; - this.paddings[TYPE.NONE] = 0; - this.layoutMetricsMap = {}; - this.layoutMetricsMap[TYPE.SINGLE] = { - xMin: 0, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.DOUBLE] = { - xMin: -3, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.END] = { - xMin: -5, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_END] = { - xMin: -10, - xMax: 1, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = { - xMin: -2, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.REPEAT_BOTH] = { - xMin: -10, - xMax: 10, - paddingLeft: 5, - paddingRight: 5, - }; - this.layoutMetricsMap[TYPE.NONE] = { - xMin: 0, - xMax: 0, - paddingLeft: 5, - paddingRight: 5, - }; - this.setPosition(StaveModifierPosition.BEGIN); - this.setType(type); - } - getType() { - return this.type; - } - setType(type) { - this.type = typeof type === 'string' ? Barline.typeString[type] : type; - this.setWidth(this.widths[this.type]); - this.setPadding(this.paddings[this.type]); - this.setLayoutMetrics(this.layoutMetricsMap[this.type]); - return this; - } - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('stavebarline', this.getAttribute('id')); - switch (this.type) { - case BarlineType.SINGLE: - this.drawVerticalBar(stave, this.x, false); - break; - case BarlineType.DOUBLE: - this.drawVerticalBar(stave, this.x, true); - break; - case BarlineType.END: - this.drawVerticalEndBar(stave, this.x); - break; - case BarlineType.REPEAT_BEGIN: - this.drawRepeatBar(stave, this.x, true); - if (stave.getX() !== this.x) { - this.drawVerticalBar(stave, stave.getX()); - } - break; - case BarlineType.REPEAT_END: - this.drawRepeatBar(stave, this.x, false); - break; - case BarlineType.REPEAT_BOTH: - this.drawRepeatBar(stave, this.x, false); - this.drawRepeatBar(stave, this.x, true); - break; - default: - break; - } - ctx.closeGroup(); - this.restoreStyle(ctx); - } - drawVerticalBar(stave, x, double_bar) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - if (double_bar) { - staveCtx.fillRect(x - 3, topY, 1, botY - topY); - } - staveCtx.fillRect(x, topY, 1, botY - topY); - } - drawVerticalEndBar(stave, x) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - staveCtx.fillRect(x - 5, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - } - drawRepeatBar(stave, x, begin) { - const staveCtx = stave.checkContext(); - const topY = stave.getTopLineTopY(); - const botY = stave.getBottomLineBottomY(); - let x_shift = 3; - if (!begin) { - x_shift = -5; - } - staveCtx.fillRect(x + x_shift, topY, 1, botY - topY); - staveCtx.fillRect(x - 2, topY, 3, botY - topY); - const dot_radius = 2; - if (begin) { - x_shift += 4; - } - else { - x_shift -= 4; - } - const dot_x = x + x_shift + dot_radius / 2; - let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines(); - y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2; - let dot_y = topY + y_offset + dot_radius / 2; - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - dot_y += stave.getSpacingBetweenLines(); - staveCtx.beginPath(); - staveCtx.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false); - staveCtx.fill(); - } -} diff --git a/build/esm/src/staveconnector.js b/build/esm/src/staveconnector.js deleted file mode 100644 index 5ed4a5e4e2..0000000000 --- a/build/esm/src/staveconnector.js +++ /dev/null @@ -1,199 +0,0 @@ -import { Element } from './element.js'; -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { Tables } from './tables.js'; -import { RuntimeError } from './util.js'; -function drawBoldDoubleLine(ctx, type, topX, topY, botY) { - if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) { - throw new RuntimeError('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'); - } - let x_shift = 3; - let variableWidth = 3.5; - const thickLineOffset = 2; - if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) { - x_shift = -5; - variableWidth = 3; - } - ctx.fillRect(topX + x_shift, topY, 1, botY - topY); - ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY); -} -export class StaveConnector extends Element { - static get CATEGORY() { - return "StaveConnector"; - } - constructor(top_stave, bottom_stave) { - super(); - this.thickness = Tables.STAVE_LINE_THICKNESS; - this.width = 3; - this.top_stave = top_stave; - this.bottom_stave = bottom_stave; - this.type = StaveConnector.type.DOUBLE; - this.resetFont(); - this.x_shift = 0; - this.texts = []; - } - setType(type) { - const newType = typeof type === 'string' ? StaveConnector.typeString[type] : type; - if (Object.values(StaveConnector.type).includes(newType)) { - this.type = newType; - } - return this; - } - getType() { - return this.type; - } - setText(text, options = {}) { - this.texts.push({ - content: text, - options: Object.assign({ shift_x: 0, shift_y: 0 }, options), - }); - return this; - } - setXShift(x_shift) { - if (typeof x_shift !== 'number') { - throw new RuntimeError('InvalidType', 'x_shift must be a Number'); - } - this.x_shift = x_shift; - return this; - } - getXShift() { - return this.x_shift; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let topY = this.top_stave.getYForLine(0); - let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness; - let width = this.width; - let topX = this.top_stave.getX(); - const isRightSidedConnector = this.type === StaveConnector.type.SINGLE_RIGHT || - this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT || - this.type === StaveConnector.type.THIN_DOUBLE; - if (isRightSidedConnector) { - topX = this.top_stave.getX() + this.top_stave.getWidth(); - } - let attachment_height = botY - topY; - switch (this.type) { - case StaveConnector.type.SINGLE: - width = 1; - break; - case StaveConnector.type.SINGLE_LEFT: - width = 1; - break; - case StaveConnector.type.SINGLE_RIGHT: - width = 1; - break; - case StaveConnector.type.DOUBLE: - topX -= this.width + 2; - topY -= this.thickness; - attachment_height += 0.5; - break; - case StaveConnector.type.BRACE: { - width = 12; - const x1 = this.top_stave.getX() - 2 + this.x_shift; - const y1 = topY; - const x3 = x1; - const y3 = botY; - const x2 = x1 - width; - const y2 = y1 + attachment_height / 2.0; - const cpx1 = x2 - 0.9 * width; - const cpy1 = y1 + 0.2 * attachment_height; - const cpx2 = x1 + 1.1 * width; - const cpy2 = y2 - 0.135 * attachment_height; - const cpx3 = cpx2; - const cpy3 = y2 + 0.135 * attachment_height; - const cpx4 = cpx1; - const cpy4 = y3 - 0.2 * attachment_height; - const cpx5 = x2 - width; - const cpy5 = cpy4; - const cpx6 = x1 + 0.4 * width; - const cpy6 = y2 + 0.135 * attachment_height; - const cpx7 = cpx6; - const cpy7 = y2 - 0.135 * attachment_height; - const cpx8 = cpx5; - const cpy8 = cpy1; - ctx.beginPath(); - ctx.moveTo(x1, y1); - ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); - ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3); - ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2); - ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1); - ctx.fill(); - ctx.stroke(); - break; - } - case StaveConnector.type.BRACKET: - topY -= 6; - botY += 6; - attachment_height = botY - topY; - Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop'); - Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom'); - topX -= this.width + 2; - break; - case StaveConnector.type.BOLD_DOUBLE_LEFT: - drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness); - break; - case StaveConnector.type.BOLD_DOUBLE_RIGHT: - drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness); - break; - case StaveConnector.type.THIN_DOUBLE: - width = 1; - attachment_height -= this.thickness; - break; - case StaveConnector.type.NONE: - break; - default: - throw new RuntimeError('InvalidType', `The provided StaveConnector.type (${this.type}) is invalid.`); - } - if (this.type !== StaveConnector.type.BRACE && - this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT && - this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT && - this.type !== StaveConnector.type.NONE) { - ctx.fillRect(topX, topY, width, attachment_height); - } - if (this.type === StaveConnector.type.THIN_DOUBLE) { - ctx.fillRect(topX - 3, topY, width, attachment_height); - } - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - for (let i = 0; i < this.texts.length; i++) { - const text = this.texts[i]; - const text_width = ctx.measureText('' + text.content).width; - const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x; - const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y; - ctx.fillText('' + text.content, x, y + 4); - } - ctx.restore(); - } -} -StaveConnector.TEXT_FONT = { - family: Font.SERIF, - size: 16, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, -}; -StaveConnector.type = { - SINGLE_RIGHT: 0, - SINGLE_LEFT: 1, - SINGLE: 1, - DOUBLE: 2, - BRACE: 3, - BRACKET: 4, - BOLD_DOUBLE_LEFT: 5, - BOLD_DOUBLE_RIGHT: 6, - THIN_DOUBLE: 7, - NONE: 8, -}; -StaveConnector.typeString = { - singleRight: StaveConnector.type.SINGLE_RIGHT, - singleLeft: StaveConnector.type.SINGLE_LEFT, - single: StaveConnector.type.SINGLE, - double: StaveConnector.type.DOUBLE, - brace: StaveConnector.type.BRACE, - bracket: StaveConnector.type.BRACKET, - boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT, - boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT, - thinDouble: StaveConnector.type.THIN_DOUBLE, - none: StaveConnector.type.NONE, -}; diff --git a/build/esm/src/stavehairpin.js b/build/esm/src/stavehairpin.js deleted file mode 100644 index 619f53e5bd..0000000000 --- a/build/esm/src/stavehairpin.js +++ /dev/null @@ -1,120 +0,0 @@ -import { Element } from './element.js'; -import { Modifier } from './modifier.js'; -import { RuntimeError } from './util.js'; -export class StaveHairpin extends Element { - static get CATEGORY() { - return "StaveHairpin"; - } - static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) { - var _a, _b; - const ppt = formatter.pixelsPerTick; - if (ppt == null) { - throw new RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.'); - } - const l_shift_px = ppt * ((_a = options.left_shift_ticks) !== null && _a !== void 0 ? _a : 0); - const r_shift_px = ppt * ((_b = options.right_shift_ticks) !== null && _b !== void 0 ? _b : 0); - const hairpin_options = { - height: options.height, - y_shift: options.y_shift, - left_shift_px: l_shift_px, - right_shift_px: r_shift_px, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - new StaveHairpin({ - first_note: notes.first_note, - last_note: notes.last_note, - }, type) - .setContext(ctx) - .setRenderOptions(hairpin_options) - .setPosition(position) - .draw(); - } - constructor(notes, type) { - super(); - this.setNotes(notes); - this.hairpin = type; - this.position = Modifier.Position.BELOW; - this.render_options = { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, - right_shift_ticks: 0, - left_shift_ticks: 0, - }; - } - setPosition(position) { - if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) { - this.position = position; - } - return this; - } - setRenderOptions(options) { - if (options.height != null && - options.y_shift != null && - options.left_shift_px != null && - options.right_shift_px != null) { - this.render_options = options; - } - return this; - } - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.last_note = notes.last_note; - return this; - } - renderHairpin(params) { - const ctx = this.checkContext(); - let dis = this.render_options.y_shift + 20; - let y_shift = params.first_y; - if (this.position === Modifier.Position.ABOVE) { - dis = -dis + 30; - y_shift = params.first_y - params.staff_height; - } - const l_shift = this.render_options.left_shift_px; - const r_shift = this.render_options.right_shift_px; - ctx.beginPath(); - switch (this.hairpin) { - case StaveHairpin.type.CRESC: - ctx.moveTo(params.last_x + r_shift, y_shift + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis); - break; - case StaveHairpin.type.DECRESC: - ctx.moveTo(params.first_x + l_shift, y_shift + dis); - ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height / 2 + dis); - ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis); - break; - default: - break; - } - ctx.stroke(); - ctx.closePath(); - } - draw() { - this.checkContext(); - this.setRendered(); - const firstNote = this.first_note; - const lastNote = this.last_note; - if (!firstNote || !lastNote) - throw new RuntimeError('NoNote', 'Notes required to draw'); - const start = firstNote.getModifierStartXY(this.position, 0); - const end = lastNote.getModifierStartXY(this.position, 0); - this.renderHairpin({ - first_x: start.x, - last_x: end.x, - first_y: firstNote.checkStave().getY() + firstNote.checkStave().getHeight(), - last_y: lastNote.checkStave().getY() + lastNote.checkStave().getHeight(), - staff_height: firstNote.checkStave().getHeight(), - }); - } -} -StaveHairpin.type = { - CRESC: 1, - DECRESC: 2, -}; diff --git a/build/esm/src/staveline.js b/build/esm/src/staveline.js deleted file mode 100644 index c65a1bf5b1..0000000000 --- a/build/esm/src/staveline.js +++ /dev/null @@ -1,215 +0,0 @@ -import { Element } from './element.js'; -import { Tables } from './tables.js'; -import { TextJustification } from './textnote.js'; -import { RuntimeError } from './util.js'; -function drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) { - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.lineTo(x0, y0); - ctx.closePath(); - ctx.fill(); -} -export class StaveLine extends Element { - static get CATEGORY() { - return "StaveLine"; - } - constructor(notes) { - super(); - this.setNotes(notes); - this.text = ''; - this.resetFont(); - this.render_options = { - padding_left: 4, - padding_right: 3, - line_width: 1, - line_dash: undefined, - rounded_end: true, - color: undefined, - draw_start_arrow: false, - draw_end_arrow: false, - arrowhead_length: 10, - arrowhead_angle: Math.PI / 8, - text_position_vertical: StaveLine.TextVerticalPosition.TOP, - text_justification: StaveLine.TextJustification.CENTER, - }; - } - setText(text) { - this.text = text; - return this; - } - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new RuntimeError('BadArguments', 'Notes needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) - notes.first_indices = [0]; - if (!notes.last_indices) - notes.last_indices = [0]; - if (notes.first_indices.length !== notes.last_indices.length) { - throw new RuntimeError('BadArguments', 'Connected notes must have same number of indices.'); - } - this.notes = notes; - this.first_note = notes.first_note; - this.first_indices = notes.first_indices; - this.last_note = notes.last_note; - this.last_indices = notes.last_indices; - return this; - } - applyLineStyle() { - const ctx = this.checkContext(); - const render_options = this.render_options; - if (render_options.line_dash) { - ctx.setLineDash(render_options.line_dash); - } - if (render_options.line_width) { - ctx.setLineWidth(render_options.line_width); - } - if (render_options.rounded_end) { - ctx.setLineCap('round'); - } - else { - ctx.setLineCap('square'); - } - } - applyFontStyle() { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - const render_options = this.render_options; - const color = render_options.color; - if (color) { - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - } - } - drawArrowLine(ctx, pt1, pt2) { - const both_arrows = this.render_options.draw_start_arrow && this.render_options.draw_end_arrow; - const x1 = pt1.x; - const y1 = pt1.y; - const x2 = pt2.x; - const y2 = pt2.y; - const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); - const ratio = (distance - this.render_options.arrowhead_length / 3) / distance; - let end_x; - let end_y; - let start_x; - let start_y; - if (this.render_options.draw_end_arrow || both_arrows) { - end_x = Math.round(x1 + (x2 - x1) * ratio); - end_y = Math.round(y1 + (y2 - y1) * ratio); - } - else { - end_x = x2; - end_y = y2; - } - if (this.render_options.draw_start_arrow || both_arrows) { - start_x = x1 + (x2 - x1) * (1 - ratio); - start_y = y1 + (y2 - y1) * (1 - ratio); - } - else { - start_x = x1; - start_y = y1; - } - if (this.render_options.color) { - ctx.setStrokeStyle(this.render_options.color); - ctx.setFillStyle(this.render_options.color); - } - ctx.beginPath(); - ctx.moveTo(start_x, start_y); - ctx.lineTo(end_x, end_y); - ctx.stroke(); - ctx.closePath(); - const line_angle = Math.atan2(y2 - y1, x2 - x1); - const h = Math.abs(this.render_options.arrowhead_length / Math.cos(this.render_options.arrowhead_angle)); - let angle1; - let angle2; - let top_x; - let top_y; - let bottom_x; - let bottom_y; - if (this.render_options.draw_end_arrow || both_arrows) { - angle1 = line_angle + Math.PI + this.render_options.arrowhead_angle; - top_x = x2 + Math.cos(angle1) * h; - top_y = y2 + Math.sin(angle1) * h; - angle2 = line_angle + Math.PI - this.render_options.arrowhead_angle; - bottom_x = x2 + Math.cos(angle2) * h; - bottom_y = y2 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y); - } - if (this.render_options.draw_start_arrow || both_arrows) { - angle1 = line_angle + this.render_options.arrowhead_angle; - top_x = x1 + Math.cos(angle1) * h; - top_y = y1 + Math.sin(angle1) * h; - angle2 = line_angle - this.render_options.arrowhead_angle; - bottom_x = x1 + Math.cos(angle2) * h; - bottom_y = y1 + Math.sin(angle2) * h; - drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y); - } - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const first_note = this.first_note; - const last_note = this.last_note; - const render_options = this.render_options; - ctx.save(); - this.applyLineStyle(); - let start_position = { x: 0, y: 0 }; - let end_position = { x: 0, y: 0 }; - this.first_indices.forEach((first_index, i) => { - const last_index = this.last_indices[i]; - start_position = first_note.getModifierStartXY(2, first_index); - end_position = last_note.getModifierStartXY(1, last_index); - const upwards_slope = start_position.y > end_position.y; - start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left; - end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right; - const notehead_width = first_note.getGlyphProps().getWidth(); - const first_displaced = first_note.getKeyProps()[first_index].displaced; - if (first_displaced && first_note.getStemDirection() === 1) { - start_position.x += notehead_width + render_options.padding_left; - } - const last_displaced = last_note.getKeyProps()[last_index].displaced; - if (last_displaced && last_note.getStemDirection() === -1) { - end_position.x -= notehead_width + render_options.padding_right; - } - start_position.y += upwards_slope ? -3 : 1; - end_position.y += upwards_slope ? 2 : 0; - this.drawArrowLine(ctx, start_position, end_position); - }); - ctx.restore(); - const text_width = ctx.measureText(this.text).width; - const justification = render_options.text_justification; - let x = 0; - if (justification === StaveLine.TextJustification.LEFT) { - x = start_position.x; - } - else if (justification === StaveLine.TextJustification.CENTER) { - const delta_x = end_position.x - start_position.x; - const center_x = delta_x / 2 + start_position.x; - x = center_x - text_width / 2; - } - else if (justification === StaveLine.TextJustification.RIGHT) { - x = end_position.x - text_width; - } - let y = 0; - const vertical_position = render_options.text_position_vertical; - if (vertical_position === StaveLine.TextVerticalPosition.TOP) { - y = first_note.checkStave().getYForTopText(); - } - else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) { - y = first_note.checkStave().getYForBottomText(Tables.TEXT_HEIGHT_OFFSET_HACK); - } - ctx.save(); - this.applyFontStyle(); - ctx.fillText(this.text, x, y); - ctx.restore(); - return this; - } -} -StaveLine.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); -StaveLine.TextVerticalPosition = { - TOP: 1, - BOTTOM: 2, -}; -StaveLine.TextJustification = TextJustification; diff --git a/build/esm/src/stavemodifier.js b/build/esm/src/stavemodifier.js deleted file mode 100644 index ea7e8a6c25..0000000000 --- a/build/esm/src/stavemodifier.js +++ /dev/null @@ -1,77 +0,0 @@ -import { Element } from './element.js'; -import { defined } from './util.js'; -export var StaveModifierPosition; -(function (StaveModifierPosition) { - StaveModifierPosition[StaveModifierPosition["CENTER"] = 0] = "CENTER"; - StaveModifierPosition[StaveModifierPosition["LEFT"] = 1] = "LEFT"; - StaveModifierPosition[StaveModifierPosition["RIGHT"] = 2] = "RIGHT"; - StaveModifierPosition[StaveModifierPosition["ABOVE"] = 3] = "ABOVE"; - StaveModifierPosition[StaveModifierPosition["BELOW"] = 4] = "BELOW"; - StaveModifierPosition[StaveModifierPosition["BEGIN"] = 5] = "BEGIN"; - StaveModifierPosition[StaveModifierPosition["END"] = 6] = "END"; -})(StaveModifierPosition || (StaveModifierPosition = {})); -export class StaveModifier extends Element { - static get CATEGORY() { - return "StaveModifier"; - } - static get Position() { - return StaveModifierPosition; - } - constructor() { - super(); - this.width = 0; - this.x = 0; - this.padding = 10; - this.position = StaveModifierPosition.ABOVE; - } - getPosition() { - return this.position; - } - setPosition(position) { - this.position = position; - return this; - } - getStave() { - return this.stave; - } - checkStave() { - return defined(this.stave, 'NoStave', 'No stave attached to instance.'); - } - setStave(stave) { - this.stave = stave; - return this; - } - getWidth() { - return this.width; - } - setWidth(width) { - this.width = width; - return this; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - return this; - } - placeGlyphOnLine(glyph, stave, line, customShift = 0) { - glyph.setYShift(stave.getYForLine(line !== null && line !== void 0 ? line : 0) - stave.getYForGlyphs() + customShift); - } - getPadding(index) { - return index !== undefined && index < 2 ? 0 : this.padding; - } - setPadding(padding) { - this.padding = padding; - return this; - } - setLayoutMetrics(layoutMetrics) { - this.layoutMetrics = layoutMetrics; - return this; - } - getLayoutMetrics() { - return this.layoutMetrics; - } - draw(...args) { - } -} diff --git a/build/esm/src/stavenote.js b/build/esm/src/stavenote.js deleted file mode 100644 index 6ad7fab1b7..0000000000 --- a/build/esm/src/stavenote.js +++ /dev/null @@ -1,887 +0,0 @@ -import { BoundingBox } from './boundingbox.js'; -import { Modifier } from './modifier.js'; -import { NoteHead } from './notehead.js'; -import { Stem } from './stem.js'; -import { StemmableNote } from './stemmablenote.js'; -import { Tables } from './tables.js'; -import { defined, log, midLine, RuntimeError } from './util.js'; -function showDeprecationWarningForNoteHeads() { - console.warn('StaveNote.note_heads is deprecated. Use StaveNote.noteHeads instead.', 'This accessor will be removed in VexFlow 5.0.'); -} -function L(...args) { - if (StaveNote.DEBUG) - log('Vex.Flow.StaveNote', args); -} -const isInnerNoteIndex = (note, index) => index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0); -function shiftRestVertical(rest, note, dir) { - const delta = dir; - rest.line += delta; - rest.maxLine += delta; - rest.minLine += delta; - rest.note.setKeyLine(0, rest.note.getKeyLine(0) + delta); -} -function centerRest(rest, noteU, noteL) { - const delta = rest.line - midLine(noteU.minLine, noteL.maxLine); - rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta); - rest.line -= delta; - rest.maxLine -= delta; - rest.minLine -= delta; -} -export class StaveNote extends StemmableNote { - static get CATEGORY() { - return "StaveNote"; - } - static get STEM_UP() { - return Stem.UP; - } - static get STEM_DOWN() { - return Stem.DOWN; - } - static get LEDGER_LINE_OFFSET() { - return 3; - } - static get minNoteheadPadding() { - const musicFont = Tables.currentMusicFont(); - return musicFont.lookupMetric('noteHead.minPadding'); - } - static format(notes, state) { - if (!notes || notes.length < 2) - return false; - const notesList = []; - for (let i = 0; i < notes.length; i++) { - const props = notes[i].sortedKeyProps; - const line = props[0].keyProps.line; - let minL = props[props.length - 1].keyProps.line; - const stemDirection = notes[i].getStemDirection(); - const stemMax = notes[i].getStemLength() / 10; - const stemMin = notes[i].getStemMinimumLength() / 10; - let maxL; - if (notes[i].isRest()) { - maxL = line + notes[i].glyphProps.line_above; - minL = line - notes[i].glyphProps.line_below; - } - else { - maxL = - stemDirection === 1 ? props[props.length - 1].keyProps.line + stemMax : props[props.length - 1].keyProps.line; - minL = stemDirection === 1 ? props[0].keyProps.line : props[0].keyProps.line - stemMax; - } - notesList.push({ - line: props[0].keyProps.line, - maxLine: maxL, - minLine: minL, - isrest: notes[i].isRest(), - stemDirection: stemDirection, - stemMax, - stemMin, - voice_shift: notes[i].getVoiceShiftWidth(), - is_displaced: notes[i].isDisplaced(), - note: notes[i], - }); - } - let voices = 0; - let noteU = undefined; - let noteM = undefined; - let noteL = undefined; - const draw = [false, false, false]; - for (let i = 0; i < notesList.length; i++) { - draw[i] = notesList[i].note.render_options.draw == false ? false : true; - } - if (draw[0] && draw[1] && draw[2]) { - voices = 3; - noteU = notesList[0]; - noteM = notesList[1]; - noteL = notesList[2]; - } - else if (draw[0] && draw[1]) { - voices = 2; - noteU = notesList[0]; - noteL = notesList[1]; - } - else if (draw[0] && draw[2]) { - voices = 2; - noteU = notesList[0]; - noteL = notesList[2]; - } - else if (draw[1] && draw[2]) { - voices = 2; - noteU = notesList[1]; - noteL = notesList[2]; - } - else { - return true; - } - if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) { - noteU = notesList[1]; - noteL = notesList[0]; - } - const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift); - let xShift = 0; - if (voices === 2) { - const lineSpacing = noteU.note.hasStem() && noteL.note.hasStem() && noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; - if (noteL.isrest && noteU.isrest && noteU.note.duration === noteL.note.duration) { - noteL.note.render_options.draw = false; - } - else if (noteU.minLine <= noteL.maxLine + lineSpacing) { - if (noteU.isrest) { - shiftRestVertical(noteU, noteL, 1); - } - else if (noteL.isrest) { - shiftRestVertical(noteL, noteU, -1); - } - else { - const lineDiff = Math.abs(noteU.line - noteL.line); - if (noteU.note.hasStem() && noteL.note.hasStem()) { - let whiteNoteHeadCount = 0; - let blackNoteHeadCount = 0; - if (Tables.durationToNumber(noteU.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (Tables.durationToNumber(noteU.note.duration) > 2) { - blackNoteHeadCount++; - } - if (Tables.durationToNumber(noteL.note.duration) === 2) { - whiteNoteHeadCount++; - } - else if (Tables.durationToNumber(noteL.note.duration) > 2) { - blackNoteHeadCount++; - } - if ((whiteNoteHeadCount !== 2 && blackNoteHeadCount !== 2) || - noteU.note.getModifiersByType("Dot").length !== noteL.note.getModifiersByType("Dot").length) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - noteU.note.setXShift(xShift); - } - else { - noteL.note.setXShift(xShift); - } - } - else if (lineDiff < 1 && lineDiff > 0) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - noteU.note.setXShift(xShift); - } - else { - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.voice !== noteL.note.voice) { - if (noteU.stemDirection === noteL.stemDirection) { - if (noteU.line != noteL.line) { - xShift = voiceXShift + 2; - noteU.note.setXShift(xShift); - } - else { - if (noteL.stemDirection === 1) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - } - } - } - } - else if (lineDiff < 1) { - xShift = voiceXShift + 2; - if (noteU.stemDirection === noteL.stemDirection) { - noteU.note.setXShift(xShift); - } - else { - noteL.note.setXShift(xShift); - } - } - else if (noteU.note.hasStem()) { - noteU.stemDirection = -noteU.note.getStemDirection(); - noteU.note.setStemDirection(noteU.stemDirection); - } - else if (noteL.note.hasStem()) { - noteL.stemDirection = -noteL.note.getStemDirection(); - noteL.note.setStemDirection(noteL.stemDirection); - } - } - } - state.right_shift += xShift; - return true; - } - if (!noteM) - throw new RuntimeError('InvalidState', 'noteM not defined.'); - if (noteM.isrest && !noteU.isrest && !noteL.isrest) { - if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) { - const restHeight = noteM.maxLine - noteM.minLine; - const space = noteU.minLine - noteL.maxLine; - if (restHeight < space) { - centerRest(noteM, noteU, noteL); - } - else { - xShift = voiceXShift + 2; - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - state.right_shift += xShift; - return true; - } - } - if (noteU.isrest && noteM.isrest && noteL.isrest) { - noteU.note.render_options.draw = false; - noteL.note.render_options.draw = false; - state.right_shift += xShift; - return true; - } - if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) { - noteM.note.render_options.draw = false; - } - if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) { - noteM.note.render_options.draw = false; - } - if (noteU.isrest && noteU.minLine <= noteM.maxLine) { - shiftRestVertical(noteU, noteM, 1); - } - if (noteL.isrest && noteM.minLine <= noteL.maxLine) { - shiftRestVertical(noteL, noteM, -1); - } - if (noteU.minLine <= noteM.maxLine + 0.5 || noteM.minLine <= noteL.maxLine) { - xShift = voiceXShift + 2; - noteM.note.setXShift(xShift); - if (noteL.note.hasBeam() === false) { - noteL.stemDirection = -1; - noteL.note.setStemDirection(-1); - } - if (noteU.minLine <= noteL.maxLine && noteU.note.hasBeam() === false) { - noteU.stemDirection = 1; - noteU.note.setStemDirection(1); - } - } - state.right_shift += xShift; - return true; - } - static postFormat(notes) { - if (!notes) - return false; - notes.forEach((note) => note.postFormat()); - return true; - } - constructor(noteStruct) { - var _a, _b, _c; - super(noteStruct); - this.minLine = 0; - this.maxLine = 0; - this.sortedKeyProps = []; - this.ledgerLineStyle = {}; - this.clef = (_a = noteStruct.clef) !== null && _a !== void 0 ? _a : 'treble'; - this.octave_shift = (_b = noteStruct.octave_shift) !== null && _b !== void 0 ? _b : 0; - this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); - defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - this.displaced = false; - this.dot_shiftY = 0; - this.use_default_head_x = false; - this._noteHeads = []; - this.modifiers = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: noteStruct.glyph_font_scale || Tables.NOTATION_FONT_SCALE, stroke_px: noteStruct.stroke_px || StaveNote.LEDGER_LINE_OFFSET }); - this.calculateKeyProps(); - this.buildStem(); - if (noteStruct.auto_stem) { - this.autoStem(); - } - else { - this.setStemDirection((_c = noteStruct.stem_direction) !== null && _c !== void 0 ? _c : Stem.UP); - } - this.reset(); - this.buildFlag(); - } - reset() { - super.reset(); - const noteHeadStyles = this._noteHeads.map((noteHead) => noteHead.getStyle()); - this.buildNoteHeads(); - this._noteHeads.forEach((noteHead, index) => { - const noteHeadStyle = noteHeadStyles[index]; - if (noteHeadStyle) - noteHead.setStyle(noteHeadStyle); - }); - const stave = this.stave; - if (stave) { - this._noteHeads.forEach((head) => head.setStave(stave)); - } - this.calcNoteDisplacements(); - return this; - } - setBeam(beam) { - this.beam = beam; - this.calcNoteDisplacements(); - if (this.stem) { - this.stem.setExtension(this.getStemExtension()); - } - return this; - } - buildStem() { - this.setStem(new Stem({ hide: !!this.isRest() })); - return this; - } - buildNoteHeads() { - this._noteHeads = []; - const stemDirection = this.getStemDirection(); - const keys = this.getKeys(); - let lastLine = undefined; - let lineDiff = undefined; - let displaced = false; - let start; - let end; - let step; - if (stemDirection === Stem.UP) { - start = 0; - end = keys.length; - step = 1; - } - else { - start = keys.length - 1; - end = -1; - step = -1; - } - for (let i = start; i !== end; i += step) { - const noteProps = this.sortedKeyProps[i].keyProps; - const line = noteProps.line; - if (lastLine === undefined) { - lastLine = line; - } - else { - lineDiff = Math.abs(lastLine - line); - if (lineDiff === 0 || lineDiff === 0.5) { - displaced = !displaced; - } - else { - displaced = false; - this.use_default_head_x = true; - } - } - lastLine = line; - const notehead = new NoteHead({ - duration: this.duration, - note_type: this.noteType, - displaced, - stem_direction: stemDirection, - custom_glyph_code: noteProps.code, - glyph_font_scale: this.render_options.glyph_font_scale, - x_shift: noteProps.shift_right, - stem_up_x_offset: noteProps.stem_up_x_offset, - stem_down_x_offset: noteProps.stem_down_x_offset, - line: noteProps.line, - }); - this.addChildElement(notehead); - this._noteHeads[this.sortedKeyProps[i].index] = notehead; - } - } - autoStem() { - this.setStemDirection(this.calculateOptimalStemDirection()); - } - calculateOptimalStemDirection() { - this.minLine = this.sortedKeyProps[0].keyProps.line; - this.maxLine = this.sortedKeyProps[this.keyProps.length - 1].keyProps.line; - const MIDDLE_LINE = 3; - const decider = (this.minLine + this.maxLine) / 2; - const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN; - return stemDirection; - } - calculateKeyProps() { - let lastLine; - for (let i = 0; i < this.keys.length; ++i) { - const key = this.keys[i]; - if (this.glyphProps.rest) - this.glyphProps.position = key; - const options = { octave_shift: this.octave_shift || 0, duration: this.duration }; - const props = Tables.keyProperties(key, this.clef, options); - if (!props) { - throw new RuntimeError('BadArguments', `Invalid key for note properties: ${key}`); - } - if (props.key === 'R') { - if (this.duration === '1' || this.duration === 'w') { - props.line = 4; - } - else { - props.line = 3; - } - } - const line = props.line; - if (lastLine == undefined) { - lastLine = line; - } - else { - if (Math.abs(lastLine - line) === 0.5) { - this.displaced = true; - props.displaced = true; - if (this.keyProps.length > 0) { - this.keyProps[i - 1].displaced = true; - } - } - } - lastLine = line; - this.keyProps.push(props); - } - this.keyProps.forEach((keyProps, index) => { - this.sortedKeyProps.push({ keyProps, index }); - }); - this.sortedKeyProps.sort((a, b) => a.keyProps.line - b.keyProps.line); - } - getBoundingBox() { - var _a, _b; - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call getBoundingBox on an unformatted note."); - } - const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics(); - const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx; - let minY = 0; - let maxY = 0; - const halfLineSpacing = ((_b = (_a = this.getStave()) === null || _a === void 0 ? void 0 : _a.getSpacingBetweenLines()) !== null && _b !== void 0 ? _b : 0) / 2; - const lineSpacing = halfLineSpacing * 2; - if (this.isRest()) { - const y = this.ys[0]; - const frac = Tables.durationToFraction(this.duration); - if (frac.equals(1) || frac.equals(2)) { - minY = y - halfLineSpacing; - maxY = y + halfLineSpacing; - } - else { - minY = y - this.glyphProps.line_above * lineSpacing; - maxY = y + this.glyphProps.line_below * lineSpacing; - } - } - else if (this.glyphProps.stem) { - const ys = this.getStemExtents(); - ys.baseY += halfLineSpacing * this.getStemDirection(); - minY = Math.min(ys.topY, ys.baseY); - maxY = Math.max(ys.topY, ys.baseY); - } - else { - minY = 0; - maxY = 0; - for (let i = 0; i < this.ys.length; ++i) { - const yy = this.ys[i]; - if (i === 0) { - minY = yy; - maxY = yy; - } - else { - minY = Math.min(yy, minY); - maxY = Math.max(yy, maxY); - } - } - minY -= halfLineSpacing; - maxY += halfLineSpacing; - } - return new BoundingBox(x, minY, w, maxY - minY); - } - getLineNumber(isTopNote) { - if (!this.keyProps.length) { - throw new RuntimeError('NoKeyProps', "Can't get bottom note line, because note is not initialized properly."); - } - let resultLine = this.keyProps[0].line; - for (let i = 0; i < this.keyProps.length; i++) { - const thisLine = this.keyProps[i].line; - if (isTopNote) { - if (thisLine > resultLine) - resultLine = thisLine; - } - else { - if (thisLine < resultLine) - resultLine = thisLine; - } - } - return resultLine; - } - isRest() { - return this.glyphProps.rest; - } - isChord() { - return !this.isRest() && this.keys.length > 1; - } - hasStem() { - return this.glyphProps.stem; - } - hasFlag() { - return super.hasFlag() && !this.isRest(); - } - getStemX() { - if (this.noteType === 'r') { - return this.getCenterGlyphX(); - } - else { - return super.getStemX() + (this.stem_direction ? Stem.WIDTH / (2 * -this.stem_direction) : 0); - } - } - getYForTopText(textLine) { - const extents = this.getStemExtents(); - return Math.min(this.checkStave().getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - getYForBottomText(textLine) { - const extents = this.getStemExtents(); - return Math.max(this.checkStave().getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - setStave(stave) { - super.setStave(stave); - const ys = this._noteHeads.map((notehead) => { - notehead.setStave(stave); - return notehead.getY(); - }); - this.setYs(ys); - if (this.stem) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - this.stem.setYBounds(y_top, y_bottom); - } - return this; - } - isDisplaced() { - return this.displaced; - } - setNoteDisplaced(displaced) { - this.displaced = displaced; - return this; - } - getTieRightX() { - let tieStartX = this.getAbsoluteX(); - tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx; - if (this.modifierContext) - tieStartX += this.modifierContext.getRightShift(); - return tieStartX; - } - getTieLeftX() { - let tieEndX = this.getAbsoluteX(); - tieEndX += this.x_shift - this.leftDisplacedHeadPx; - return tieEndX; - } - getLineForRest() { - let restLine = this.keyProps[0].line; - if (this.keyProps.length > 1) { - const lastLine = this.keyProps[this.keyProps.length - 1].line; - const top = Math.max(restLine, lastLine); - const bot = Math.min(restLine, lastLine); - restLine = midLine(top, bot); - } - return restLine; - } - getModifierStartXY(position, index, options = {}) { - var _a, _b; - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position; - let x = 0; - if (position === LEFT) { - x = -1 * 2; - } - else if (position === RIGHT) { - x = this.getGlyphWidth() + this.x_shift + 2; - if (this.stem_direction === Stem.UP && - this.hasFlag() && - (options.forceFlagRight || isInnerNoteIndex(this, index))) { - x += (_b = (_a = this === null || this === void 0 ? void 0 : this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().width) !== null && _b !== void 0 ? _b : 0; - } - } - else if (position === BELOW || position === ABOVE) { - x = this.getGlyphWidth() / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - setStyle(style) { - return super.setGroupStyle(style); - } - setStemStyle(style) { - const stem = this.getStem(); - if (stem) - stem.setStyle(style); - return this; - } - getStemStyle() { - var _a; - return (_a = this.stem) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - setLedgerLineStyle(style) { - this.ledgerLineStyle = style; - } - getLedgerLineStyle() { - return this.ledgerLineStyle; - } - setFlagStyle(style) { - var _a; - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.setStyle(style); - } - getFlagStyle() { - var _a; - return (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getStyle(); - } - setKeyStyle(index, style) { - this._noteHeads[index].setStyle(style); - return this; - } - setKeyLine(index, line) { - this.keyProps[index].line = line; - this.reset(); - return this; - } - getKeyLine(index) { - return this.keyProps[index].line; - } - getVoiceShiftWidth() { - return this.getGlyphWidth() * (this.displaced ? 2 : 1); - } - calcNoteDisplacements() { - this.setLeftDisplacedHeadPx(this.displaced && this.stem_direction === Stem.DOWN ? this.getGlyphWidth() : 0); - this.setRightDisplacedHeadPx(!this.hasFlag() && this.displaced && this.stem_direction === Stem.UP ? this.getGlyphWidth() : 0); - } - preFormat() { - if (this.preFormatted) - return; - let noteHeadPadding = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - if (this.modifierContext.getWidth() === 0) { - noteHeadPadding = StaveNote.minNoteheadPadding; - } - } - let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx + noteHeadPadding; - if (this.shouldDrawFlag() && this.stem_direction === Stem.UP) { - width += this.getGlyphWidth(); - } - this.setWidth(width); - this.preFormatted = true; - } - getNoteHeadBounds() { - let yTop = +Infinity; - let yBottom = -Infinity; - let nonDisplacedX; - let displacedX; - let highestLine = this.checkStave().getNumLines(); - let lowestLine = 1; - let highestDisplacedLine; - let lowestDisplacedLine; - let highestNonDisplacedLine = highestLine; - let lowestNonDisplacedLine = lowestLine; - this._noteHeads.forEach((notehead) => { - const line = notehead.getLine(); - const y = notehead.getY(); - yTop = Math.min(y, yTop); - yBottom = Math.max(y, yBottom); - if (displacedX === undefined && notehead.isDisplaced()) { - displacedX = notehead.getAbsoluteX(); - } - if (nonDisplacedX === undefined && !notehead.isDisplaced()) { - nonDisplacedX = notehead.getAbsoluteX(); - } - highestLine = Math.max(line, highestLine); - lowestLine = Math.min(line, lowestLine); - if (notehead.isDisplaced()) { - highestDisplacedLine = highestDisplacedLine === undefined ? line : Math.max(line, highestDisplacedLine); - lowestDisplacedLine = lowestDisplacedLine === undefined ? line : Math.min(line, lowestDisplacedLine); - } - else { - highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine); - lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine); - } - }, this); - return { - y_top: yTop, - y_bottom: yBottom, - displaced_x: displacedX, - non_displaced_x: nonDisplacedX, - highest_line: highestLine, - lowest_line: lowestLine, - highest_displaced_line: highestDisplacedLine, - lowest_displaced_line: lowestDisplacedLine, - highest_non_displaced_line: highestNonDisplacedLine, - lowest_non_displaced_line: lowestNonDisplacedLine, - }; - } - getNoteHeadBeginX() { - return this.getAbsoluteX() + this.x_shift; - } - getNoteHeadEndX() { - const xBegin = this.getNoteHeadBeginX(); - return xBegin + this.getGlyphWidth(); - } - get noteHeads() { - return this._noteHeads.slice(); - } - get note_heads() { - showDeprecationWarningForNoteHeads(); - return this.noteHeads; - } - drawLedgerLines() { - const stave = this.checkStave(); - const { glyphProps, render_options: { stroke_px }, } = this; - const ctx = this.checkContext(); - const width = glyphProps.getWidth() + stroke_px * 2; - const doubleWidth = 2 * (glyphProps.getWidth() + stroke_px) - Stem.WIDTH / 2; - if (this.isRest()) - return; - if (!ctx) { - throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - const { highest_line, lowest_line, highest_displaced_line, highest_non_displaced_line, lowest_displaced_line, lowest_non_displaced_line, displaced_x, non_displaced_x, } = this.getNoteHeadBounds(); - if (highest_line < 6 && lowest_line > 0) - return; - const min_x = Math.min(displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0, non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0); - const drawLedgerLine = (y, normal, displaced) => { - let x; - if (displaced && normal) - x = min_x - stroke_px; - else if (normal) - x = (non_displaced_x !== null && non_displaced_x !== void 0 ? non_displaced_x : 0) - stroke_px; - else - x = (displaced_x !== null && displaced_x !== void 0 ? displaced_x : 0) - stroke_px; - const ledgerWidth = normal && displaced ? doubleWidth : width; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + ledgerWidth, y); - ctx.stroke(); - }; - const style = Object.assign(Object.assign({}, stave.getDefaultLedgerLineStyle()), this.getLedgerLineStyle()); - this.applyStyle(ctx, style); - for (let line = 6; line <= highest_line; ++line) { - const normal = non_displaced_x !== undefined && line <= highest_non_displaced_line; - const displaced = highest_displaced_line !== undefined && line <= highest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - for (let line = 0; line >= lowest_line; --line) { - const normal = non_displaced_x !== undefined && line >= lowest_non_displaced_line; - const displaced = lowest_displaced_line !== undefined && line >= lowest_displaced_line; - drawLedgerLine(stave.getYForNote(line), normal, displaced); - } - this.restoreStyle(ctx, style); - } - drawModifiers(noteheadParam) { - const ctx = this.checkContext(); - for (let i = 0; i < this.modifiers.length; i++) { - const modifier = this.modifiers[i]; - const index = modifier.checkIndex(); - const notehead = this._noteHeads[index]; - if (notehead == noteheadParam) { - const noteheadStyle = notehead.getStyle(); - notehead.applyStyle(ctx, noteheadStyle); - modifier.setContext(ctx); - modifier.drawWithStyle(); - notehead.restoreStyle(ctx, noteheadStyle); - } - } - } - shouldDrawFlag() { - const hasStem = this.stem !== undefined; - const hasFlag = this.glyphProps.flag == true; - const hasNoBeam = this.beam === undefined; - return hasStem && hasFlag && hasNoBeam; - } - drawFlag() { - var _a, _b, _c, _d, _e; - const ctx = this.checkContext(); - if (!ctx) { - throw new RuntimeError('NoCanvasContext', "Can't draw without a canvas context."); - } - if (this.shouldDrawFlag()) { - const { y_top, y_bottom } = this.getNoteHeadBounds(); - const noteStemHeight = this.stem.getHeight(); - const flagX = this.getStemX(); - const flagY = this.getStemDirection() === Stem.DOWN - ? - y_top - - noteStemHeight + - 2 - - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) * this.getStaveNoteScale() - - ((_b = (_a = this.flag) === null || _a === void 0 ? void 0 : _a.getMetrics().y_shift) !== null && _b !== void 0 ? _b : 0) * (1 - this.getStaveNoteScale()) - : - y_bottom - - noteStemHeight - - 2 + - (this.glyphProps ? this.glyphProps.stem_up_extension : 0) * this.getStaveNoteScale() - - ((_d = (_c = this.flag) === null || _c === void 0 ? void 0 : _c.getMetrics().y_shift) !== null && _d !== void 0 ? _d : 0) * (1 - this.getStaveNoteScale()); - (_e = this.flag) === null || _e === void 0 ? void 0 : _e.render(ctx, flagX, flagY); - } - } - drawNoteHeads() { - const ctx = this.checkContext(); - this._noteHeads.forEach((notehead) => { - notehead.applyStyle(ctx); - ctx.openGroup('notehead', notehead.getAttribute('id'), { pointerBBox: true }); - notehead.setContext(ctx).draw(); - this.drawModifiers(notehead); - ctx.closeGroup(); - notehead.restoreStyle(ctx); - }); - } - drawStem(stemOptions) { - const ctx = this.checkContext(); - if (stemOptions) { - this.setStem(new Stem(stemOptions)); - } - if (this.shouldDrawFlag() && this.stem) { - this.stem.adjustHeightForFlag(); - } - if (this.stem) { - this.stem.setContext(ctx).draw(); - } - } - getStaveNoteScale() { - return 1.0; - } - getStemExtension() { - const super_stem_extension = super.getStemExtension(); - if (!this.glyphProps.stem) { - return super_stem_extension; - } - const stem_direction = this.getStemDirection(); - if (stem_direction !== this.calculateOptimalStemDirection()) { - return super_stem_extension; - } - let mid_line_distance; - const MIDDLE_LINE = 3; - if (stem_direction === Stem.UP) { - mid_line_distance = MIDDLE_LINE - this.maxLine; - } - else { - mid_line_distance = this.minLine - MIDDLE_LINE; - } - const lines_over_octave_from_mid_line = mid_line_distance - 3.5; - if (lines_over_octave_from_mid_line <= 0) { - return super_stem_extension; - } - const stave = this.getStave(); - let spacing_between_lines = 10; - if (stave != undefined) { - spacing_between_lines = stave.getSpacingBetweenLines(); - } - return super_stem_extension + lines_over_octave_from_mid_line * spacing_between_lines; - } - draw() { - if (this.render_options.draw === false) - return; - if (this.ys.length === 0) { - throw new RuntimeError('NoYValues', "Can't draw note without Y values."); - } - const ctx = this.checkContext(); - const xBegin = this.getNoteHeadBeginX(); - const shouldRenderStem = this.hasStem() && !this.beam; - this._noteHeads.forEach((notehead) => notehead.setX(xBegin)); - if (this.stem) { - const stemX = this.getStemX(); - this.stem.setNoteHeadXBounds(stemX, stemX); - } - L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); - this.applyStyle(); - ctx.openGroup('stavenote', this.getAttribute('id')); - this.drawLedgerLines(); - if (shouldRenderStem) - this.drawStem(); - this.drawNoteHeads(); - this.drawFlag(); - ctx.closeGroup(); - this.restoreStyle(); - this.setRendered(); - } -} -StaveNote.DEBUG = false; diff --git a/build/esm/src/staverepetition.js b/build/esm/src/staverepetition.js deleted file mode 100644 index dd86b3054d..0000000000 --- a/build/esm/src/staverepetition.js +++ /dev/null @@ -1,155 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { StaveModifier } from './stavemodifier.js'; -import { Tables } from './tables.js'; -export class Repetition extends StaveModifier { - static get CATEGORY() { - return "Repetition"; - } - constructor(type, x, y_shift) { - super(); - this.symbol_type = type; - this.x = x; - this.x_shift = 0; - this.y_shift = y_shift; - this.resetFont(); - } - setShiftX(x) { - this.x_shift = x; - return this; - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - this.setRendered(); - switch (this.symbol_type) { - case Repetition.type.CODA_RIGHT: - this.drawCodaFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.CODA_LEFT: - this.drawSymbolText(stave, x, 'Coda', true); - break; - case Repetition.type.SEGNO_LEFT: - this.drawSignoFixed(stave, x); - break; - case Repetition.type.SEGNO_RIGHT: - this.drawSignoFixed(stave, x + stave.getWidth()); - break; - case Repetition.type.DC: - this.drawSymbolText(stave, x, 'D.C.', false); - break; - case Repetition.type.DC_AL_CODA: - this.drawSymbolText(stave, x, 'D.C. al', true); - break; - case Repetition.type.DC_AL_FINE: - this.drawSymbolText(stave, x, 'D.C. al Fine', false); - break; - case Repetition.type.DS: - this.drawSymbolText(stave, x, 'D.S.', false); - break; - case Repetition.type.DS_AL_CODA: - this.drawSymbolText(stave, x, 'D.S. al', true); - break; - case Repetition.type.DS_AL_FINE: - this.drawSymbolText(stave, x, 'D.S. al Fine', false); - break; - case Repetition.type.FINE: - this.drawSymbolText(stave, x, 'Fine', false); - break; - case Repetition.type.TO_CODA: - this.drawSymbolText(stave, x, 'To', true); - break; - default: - break; - } - return this; - } - drawCodaFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.coda.offsetY'), 40, 'coda', { category: 'coda' }); - return this; - } - drawSignoFixed(stave, x) { - const y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - Glyph.renderGlyph(stave.checkContext(), this.x + x + this.x_shift, y + Tables.currentMusicFont().lookupMetric('staveRepetition.segno.offsetY'), 30, 'segno', { category: 'segno' }); - return this; - } - drawSymbolText(stave, x, text, draw_coda) { - const ctx = stave.checkContext(); - ctx.save(); - ctx.setFont(this.textFont); - let text_x = 0; - let symbol_x = 0; - const modifierWidth = stave.getNoteStartX() - this.x; - switch (this.symbol_type) { - case Repetition.type.CODA_LEFT: - text_x = this.x + stave.getVerticalBarWidth(); - symbol_x = - text_x + - ctx.measureText(text).width + - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - case Repetition.type.DC: - case Repetition.type.DC_AL_FINE: - case Repetition.type.DS: - case Repetition.type.DS_AL_FINE: - case Repetition.type.FINE: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width; - break; - default: - text_x = - this.x + - x + - this.x_shift + - stave.getWidth() - - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.spacing') - - modifierWidth - - ctx.measureText(text).width - - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - symbol_x = - text_x + - ctx.measureText(text).width + - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetX'); - break; - } - const y = stave.getYForTopText(stave.getNumLines()) + - this.y_shift + - Tables.currentMusicFont().lookupMetric('staveRepetition.symbolText.offsetY'); - if (draw_coda) { - Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' }); - } - ctx.fillText(text, text_x, y + 5); - ctx.restore(); - return this; - } -} -Repetition.TEXT_FONT = { - family: Font.SERIF, - size: 12, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; -Repetition.type = { - NONE: 1, - CODA_LEFT: 2, - CODA_RIGHT: 3, - SEGNO_LEFT: 4, - SEGNO_RIGHT: 5, - DC: 6, - DC_AL_CODA: 7, - DC_AL_FINE: 8, - DS: 9, - DS_AL_CODA: 10, - DS_AL_FINE: 11, - FINE: 12, - TO_CODA: 13, -}; diff --git a/build/esm/src/stavesection.js b/build/esm/src/stavesection.js deleted file mode 100644 index 86b3153744..0000000000 --- a/build/esm/src/stavesection.js +++ /dev/null @@ -1,62 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { StaveModifier } from './stavemodifier.js'; -import { TextFormatter } from './textformatter.js'; -export class StaveSection extends StaveModifier { - static get CATEGORY() { - return "StaveSection"; - } - constructor(section, x, shift_y, drawRect = true) { - super(); - this.setWidth(16); - this.section = section; - this.x = x; - this.shift_x = 0; - this.shift_y = shift_y; - this.drawRect = drawRect; - this.resetFont(); - } - setStaveSection(section) { - this.section = section; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const borderWidth = 2; - const padding = 2; - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(borderWidth); - ctx.setFont(this.textFont); - const textFormatter = TextFormatter.create(this.textFont); - const textWidth = textFormatter.getWidthForTextInPx(this.section); - const textY = textFormatter.getYForStringInPx(this.section); - const textHeight = textY.height; - const headroom = -1 * textY.yMin; - const width = textWidth + 2 * padding; - const height = textHeight + 2 * padding; - const y = stave.getYForTopText(1.5) + this.shift_y; - const x = this.x + shift_x; - if (this.drawRect) { - ctx.beginPath(); - ctx.rect(x, y - height + headroom, width, height); - ctx.stroke(); - } - ctx.fillText(this.section, x + padding, y - padding); - ctx.restore(); - return this; - } -} -StaveSection.TEXT_FONT = { - family: Font.SANS_SERIF, - size: 10, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/stavetempo.js b/build/esm/src/stavetempo.js deleted file mode 100644 index 14baeaa006..0000000000 --- a/build/esm/src/stavetempo.js +++ /dev/null @@ -1,94 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -import { TextFormatter } from './textformatter.js'; -export class StaveTempo extends StaveModifier { - static get CATEGORY() { - return "StaveTempo"; - } - constructor(tempo, x, shift_y) { - super(); - this.render_options = { glyph_font_scale: 30 }; - this.tempo = tempo; - this.position = StaveModifierPosition.ABOVE; - this.x = x; - this.shift_x = 10; - this.shift_y = shift_y; - this.resetFont(); - } - setTempo(tempo) { - this.tempo = tempo; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - draw(stave, shift_x) { - const ctx = stave.checkContext(); - this.setRendered(); - const options = this.render_options; - const scale = options.glyph_font_scale / 38; - const name = this.tempo.name; - const duration = this.tempo.duration; - const dots = this.tempo.dots || 0; - const bpm = this.tempo.bpm; - let x = this.x + this.shift_x + shift_x; - const y = stave.getYForTopText(1) + this.shift_y; - ctx.save(); - const textFormatter = TextFormatter.create(this.textFont); - if (name) { - ctx.setFont(this.textFont); - ctx.fillText(name, x, y); - x += textFormatter.getWidthForTextInPx(name); - } - if (duration && bpm) { - const noteTextFont = Object.assign(Object.assign({}, this.textFont), { weight: 'normal', style: 'normal' }); - ctx.setFont(noteTextFont); - const noteTextFormatter = TextFormatter.create(noteTextFont); - if (name) { - x += noteTextFormatter.getWidthForTextInPx('|'); - ctx.fillText('(', x, y); - x += noteTextFormatter.getWidthForTextInPx('('); - } - const glyphProps = Tables.getGlyphProps(duration); - x += 3 * scale; - Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, glyphProps.code_head); - x += Glyph.getWidth(glyphProps.code_head, options.glyph_font_scale); - if (glyphProps.stem) { - let stem_height = 30; - if (glyphProps.beam_count) - stem_height += 3 * (glyphProps.beam_count - 1); - stem_height *= scale; - const y_top = y - stem_height; - ctx.fillRect(x - scale, y_top, scale, stem_height); - if (glyphProps.code && glyphProps.code_flag_upstem) { - const flagMetrics = Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale, glyphProps.code_flag_upstem, { - category: 'flag.staveTempo', - }); - x += (flagMetrics.width * Tables.NOTATION_FONT_SCALE) / flagMetrics.font.getData().resolution; - } - } - for (let i = 0; i < dots; i++) { - x += 6 * scale; - ctx.beginPath(); - ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false); - ctx.fill(); - } - ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y); - } - ctx.restore(); - return this; - } -} -StaveTempo.TEXT_FONT = { - family: Font.SERIF, - size: 14, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/stavetext.js b/build/esm/src/stavetext.js deleted file mode 100644 index 6c2438b7d5..0000000000 --- a/build/esm/src/stavetext.js +++ /dev/null @@ -1,82 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { TextJustification, TextNote } from './textnote.js'; -import { RuntimeError } from './util.js'; -export class StaveText extends StaveModifier { - static get CATEGORY() { - return "StaveText"; - } - constructor(text, position, options = {}) { - super(); - this.setWidth(16); - this.text = text; - this.position = position; - this.options = Object.assign({ shift_x: 0, shift_y: 0, justification: TextNote.Justification.CENTER }, options); - this.resetFont(); - } - setStaveText(text) { - this.text = text; - return this; - } - setShiftX(x) { - this.shift_x = x; - return this; - } - setShiftY(y) { - this.shift_y = y; - return this; - } - setText(text) { - this.text = text; - return this; - } - draw(stave) { - const ctx = stave.checkContext(); - this.setRendered(); - ctx.save(); - ctx.setLineWidth(2); - ctx.setFont(this.textFont); - const text_width = ctx.measureText('' + this.text).width; - let x; - let y; - switch (this.position) { - case StaveModifierPosition.LEFT: - case StaveModifierPosition.RIGHT: - y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y; - if (this.position === StaveModifierPosition.LEFT) { - x = stave.getX() - text_width - 24 + this.options.shift_x; - } - else { - x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x; - } - break; - case StaveModifierPosition.ABOVE: - case StaveModifierPosition.BELOW: - x = stave.getX() + this.options.shift_x; - if (this.options.justification === TextJustification.CENTER) { - x += stave.getWidth() / 2 - text_width / 2; - } - else if (this.options.justification === TextJustification.RIGHT) { - x += stave.getWidth() - text_width; - } - if (this.position === StaveModifierPosition.ABOVE) { - y = stave.getYForTopText(2) + this.options.shift_y; - } - else { - y = stave.getYForBottomText(2) + this.options.shift_y; - } - break; - default: - throw new RuntimeError('InvalidPosition', 'Value Must be in Modifier.Position.'); - } - ctx.fillText('' + this.text, x, y + 4); - ctx.restore(); - return this; - } -} -StaveText.TEXT_FONT = { - family: Font.SERIF, - size: 16, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/stavetie.js b/build/esm/src/stavetie.js deleted file mode 100644 index ee939c715a..0000000000 --- a/build/esm/src/stavetie.js +++ /dev/null @@ -1,146 +0,0 @@ -import { Element } from './element.js'; -import { RuntimeError } from './util.js'; -export class StaveTie extends Element { - static get CATEGORY() { - return "StaveTie"; - } - constructor(notes, text) { - super(); - this.setNotes(notes); - this.text = text; - this.render_options = { - cp1: 8, - cp2: 12, - text_shift_x: 0, - first_x_shift: 0, - last_x_shift: 0, - y_shift: 7, - tie_spacing: 0, - }; - this.resetFont(); - } - setDirection(direction) { - this.direction = direction; - return this; - } - setNotes(notes) { - if (!notes.first_note && !notes.last_note) { - throw new RuntimeError('BadArguments', 'Tie needs to have either first_note or last_note set.'); - } - if (!notes.first_indices) { - notes.first_indices = [0]; - } - if (!notes.last_indices) { - notes.last_indices = [0]; - } - if (notes.first_indices.length !== notes.last_indices.length) { - throw new RuntimeError('BadArguments', 'Tied notes must have same number of indices.'); - } - this.notes = notes; - return this; - } - isPartial() { - return !this.notes.first_note || !this.notes.last_note; - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - let cp1 = this.render_options.cp1; - let cp2 = this.render_options.cp2; - if (Math.abs(params.last_x_px - params.first_x_px) < 10) { - cp1 = 2; - cp2 = 8; - } - const first_x_shift = this.render_options.first_x_shift; - const last_x_shift = this.render_options.last_x_shift; - const y_shift = this.render_options.y_shift * params.direction; - const first_indices = this.notes.first_indices; - const last_indices = this.notes.last_indices; - this.applyStyle(); - ctx.openGroup('stavetie', this.getAttribute('id')); - for (let i = 0; i < first_indices.length; ++i) { - const cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2; - const first_y_px = params.first_ys[first_indices[i]] + y_shift; - const last_y_px = params.last_ys[last_indices[i]] + y_shift; - if (isNaN(first_y_px) || isNaN(last_y_px)) { - throw new RuntimeError('BadArguments', 'Bad indices for tie rendering.'); - } - const top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction; - const bottom_cp_y = (first_y_px + last_y_px) / 2 + cp2 * params.direction; - ctx.beginPath(); - ctx.moveTo(params.first_x_px + first_x_shift, first_y_px); - ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px); - ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px); - ctx.closePath(); - ctx.fill(); - } - ctx.closeGroup(); - this.restoreStyle(); - } - renderText(first_x_px, last_x_px) { - var _a, _b, _c; - if (!this.text) - return; - const ctx = this.checkContext(); - let center_x = (first_x_px + last_x_px) / 2; - center_x -= ctx.measureText(this.text).width / 2; - const stave = (_b = (_a = this.notes.first_note) === null || _a === void 0 ? void 0 : _a.checkStave()) !== null && _b !== void 0 ? _b : (_c = this.notes.last_note) === null || _c === void 0 ? void 0 : _c.checkStave(); - if (stave) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.text, center_x + this.render_options.text_shift_x, stave.getYForTopText() - 1); - ctx.restore(); - } - } - getNotes() { - return this.notes; - } - draw() { - this.checkContext(); - this.setRendered(); - const first_note = this.notes.first_note; - const last_note = this.notes.last_note; - let first_x_px = 0; - let last_x_px = 0; - let first_ys = [0]; - let last_ys = [0]; - let stem_direction = 0; - if (first_note) { - first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing; - stem_direction = first_note.getStemDirection(); - first_ys = first_note.getYs(); - } - else if (last_note) { - const stave = last_note.checkStave(); - first_x_px = stave.getTieStartX(); - first_ys = last_note.getYs(); - this.notes.first_indices = this.notes.last_indices; - } - if (last_note) { - last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing; - stem_direction = last_note.getStemDirection(); - last_ys = last_note.getYs(); - } - else if (first_note) { - const stave = first_note.checkStave(); - last_x_px = stave.getTieEndX(); - last_ys = first_note.getYs(); - this.notes.last_indices = this.notes.first_indices; - } - if (this.direction) { - stem_direction = this.direction; - } - this.renderTie({ - first_x_px, - last_x_px, - first_ys, - last_ys, - direction: stem_direction, - }); - this.renderText(first_x_px, last_x_px); - return true; - } -} -StaveTie.TEXT_FONT = Object.assign({}, Element.TEXT_FONT); diff --git a/build/esm/src/stavevolta.js b/build/esm/src/stavevolta.js deleted file mode 100644 index 2535060a5e..0000000000 --- a/build/esm/src/stavevolta.js +++ /dev/null @@ -1,67 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { StaveModifier } from './stavemodifier.js'; -export var VoltaType; -(function (VoltaType) { - VoltaType[VoltaType["NONE"] = 1] = "NONE"; - VoltaType[VoltaType["BEGIN"] = 2] = "BEGIN"; - VoltaType[VoltaType["MID"] = 3] = "MID"; - VoltaType[VoltaType["END"] = 4] = "END"; - VoltaType[VoltaType["BEGIN_END"] = 5] = "BEGIN_END"; -})(VoltaType || (VoltaType = {})); -export class Volta extends StaveModifier { - static get CATEGORY() { - return "Volta"; - } - static get type() { - return VoltaType; - } - constructor(type, number, x, y_shift) { - super(); - this.volta = type; - this.x = x; - this.y_shift = y_shift; - this.number = number; - this.resetFont(); - } - setShiftY(y) { - this.y_shift = y; - return this; - } - draw(stave, x) { - const ctx = stave.checkContext(); - this.setRendered(); - let width = stave.getWidth() - x; - const top_y = stave.getYForTopText(stave.getNumLines()) + this.y_shift; - const vert_height = 1.5 * stave.getSpacingBetweenLines(); - switch (this.volta) { - case VoltaType.BEGIN: - ctx.fillRect(this.x + x, top_y, 1, vert_height); - break; - case VoltaType.END: - width -= 5; - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - case VoltaType.BEGIN_END: - width -= 3; - ctx.fillRect(this.x + x, top_y, 1, vert_height); - ctx.fillRect(this.x + x + width, top_y, 1, vert_height); - break; - default: - break; - } - if (this.volta === VoltaType.BEGIN || this.volta === VoltaType.BEGIN_END) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText(this.number, this.x + x + 5, top_y + 15); - ctx.restore(); - } - ctx.fillRect(this.x + x, top_y, width, 1); - return this; - } -} -Volta.TEXT_FONT = { - family: Font.SANS_SERIF, - size: 9, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/stem.js b/build/esm/src/stem.js deleted file mode 100644 index a0bbb11e15..0000000000 --- a/build/esm/src/stem.js +++ /dev/null @@ -1,133 +0,0 @@ -import { Element } from './element.js'; -import { Tables } from './tables.js'; -import { log, RuntimeError } from './util.js'; -function L(...args) { - if (Stem.DEBUG) - log('Vex.Flow.Stem', args); -} -export class Stem extends Element { - static get CATEGORY() { - return "Stem"; - } - static get UP() { - return 1; - } - static get DOWN() { - return -1; - } - static get WIDTH() { - return Tables.STEM_WIDTH; - } - static get HEIGHT() { - return Tables.STEM_HEIGHT; - } - constructor(options) { - super(); - this.stem_up_y_offset = 0; - this.stem_down_y_offset = 0; - this.stem_up_y_base_offset = 0; - this.stem_down_y_base_offset = 0; - this.x_begin = (options === null || options === void 0 ? void 0 : options.x_begin) || 0; - this.x_end = (options === null || options === void 0 ? void 0 : options.x_end) || 0; - this.y_top = (options === null || options === void 0 ? void 0 : options.y_top) || 0; - this.y_bottom = (options === null || options === void 0 ? void 0 : options.y_bottom) || 0; - this.stem_extension = (options === null || options === void 0 ? void 0 : options.stem_extension) || 0; - this.stem_direction = (options === null || options === void 0 ? void 0 : options.stem_direction) || 0; - this.hide = (options === null || options === void 0 ? void 0 : options.hide) || false; - this.isStemlet = (options === null || options === void 0 ? void 0 : options.isStemlet) || false; - this.stemletHeight = (options === null || options === void 0 ? void 0 : options.stemletHeight) || 0; - this.renderHeightAdjustment = 0; - this.setOptions(options); - } - setOptions(options) { - this.stem_up_y_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_offset) || 0; - this.stem_down_y_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_offset) || 0; - this.stem_up_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_up_y_base_offset) || 0; - this.stem_down_y_base_offset = (options === null || options === void 0 ? void 0 : options.stem_down_y_base_offset) || 0; - } - setNoteHeadXBounds(x_begin, x_end) { - this.x_begin = x_begin; - this.x_end = x_end; - return this; - } - setDirection(direction) { - this.stem_direction = direction; - } - setExtension(ext) { - this.stem_extension = ext; - } - getExtension() { - return this.stem_extension; - } - setYBounds(y_top, y_bottom) { - this.y_top = y_top; - this.y_bottom = y_bottom; - } - getHeight() { - const y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; - const unsigned_height = this.y_bottom - this.y_top + (Stem.HEIGHT - y_offset + this.stem_extension); - return unsigned_height * this.stem_direction; - } - getBoundingBox() { - throw new RuntimeError('NotImplemented', 'getBoundingBox() not implemented.'); - } - getExtents() { - const isStemUp = this.stem_direction === Stem.UP; - const ys = [this.y_top, this.y_bottom]; - const stemHeight = Stem.HEIGHT + this.stem_extension; - const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys); - const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys); - const stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction; - return { topY: stemTipY, baseY: outerMostNoteheadY }; - } - setVisibility(isVisible) { - this.hide = !isVisible; - return this; - } - setStemlet(isStemlet, stemletHeight) { - this.isStemlet = isStemlet; - this.stemletHeight = stemletHeight; - return this; - } - adjustHeightForFlag() { - this.renderHeightAdjustment = Tables.currentMusicFont().lookupMetric('stem.heightAdjustmentForFlag', -3); - } - adjustHeightForBeam() { - this.renderHeightAdjustment = -Stem.WIDTH / 2; - } - draw() { - this.setRendered(); - if (this.hide) - return; - const ctx = this.checkContext(); - let stem_x; - let stem_y; - const stem_direction = this.stem_direction; - let y_base_offset = 0; - if (stem_direction === Stem.DOWN) { - stem_x = this.x_begin; - stem_y = this.y_top + this.stem_down_y_offset; - y_base_offset = this.stem_down_y_base_offset; - } - else { - stem_x = this.x_end; - stem_y = this.y_bottom - this.stem_up_y_offset; - y_base_offset = this.stem_up_y_base_offset; - } - const stemHeight = this.getHeight(); - L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom); - const stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; - ctx.save(); - this.applyStyle(); - ctx.openGroup('stem', this.getAttribute('id'), { pointerBBox: true }); - ctx.beginPath(); - ctx.setLineWidth(Stem.WIDTH); - ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset); - ctx.lineTo(stem_x, stem_y - stemHeight - this.renderHeightAdjustment * stem_direction); - ctx.stroke(); - ctx.closeGroup(); - this.restoreStyle(); - ctx.restore(); - } -} -Stem.DEBUG = false; diff --git a/build/esm/src/stemmablenote.js b/build/esm/src/stemmablenote.js deleted file mode 100644 index a2b371a185..0000000000 --- a/build/esm/src/stemmablenote.js +++ /dev/null @@ -1,195 +0,0 @@ -import { Glyph } from './glyph.js'; -import { Note } from './note.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { RuntimeError } from './util.js'; -export class StemmableNote extends Note { - static get CATEGORY() { - return "StemmableNote"; - } - constructor(noteStruct) { - super(noteStruct); - } - getStem() { - return this.stem; - } - checkStem() { - if (!this.stem) { - throw new RuntimeError('NoStem', 'No stem attached to instance'); - } - return this.stem; - } - setStem(stem) { - this.stem = stem; - this.addChildElement(stem); - return this; - } - buildStem() { - const stem = new Stem(); - this.setStem(stem); - return this; - } - buildFlag(category = 'flag') { - const { glyphProps } = this; - if (this.hasFlag()) { - const flagCode = this.getStemDirection() === Stem.DOWN ? glyphProps.code_flag_downstem : glyphProps.code_flag_upstem; - if (flagCode) - this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category }); - } - } - getBaseCustomNoteHeadGlyphProps() { - if (this.getStemDirection() === Stem.DOWN) { - return this.customGlyphs[this.customGlyphs.length - 1]; - } - else { - return this.customGlyphs[0]; - } - } - getStemLength() { - return Stem.HEIGHT + this.getStemExtension(); - } - getBeamCount() { - const glyphProps = this.getGlyphProps(); - if (glyphProps) { - return glyphProps.beam_count; - } - else { - return 0; - } - } - getStemMinimumLength() { - const frac = Tables.durationToFraction(this.duration); - let length = frac.value() <= 1 ? 0 : 20; - switch (this.duration) { - case '8': - if (this.beam == undefined) - length = 35; - break; - case '16': - length = this.beam == undefined ? 35 : 25; - break; - case '32': - length = this.beam == undefined ? 45 : 35; - break; - case '64': - length = this.beam == undefined ? 50 : 40; - break; - case '128': - length = this.beam == undefined ? 55 : 45; - break; - default: - break; - } - return length; - } - getStemDirection() { - if (!this.stem_direction) - throw new RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem_direction; - } - setStemDirection(direction) { - if (!direction) - direction = Stem.UP; - if (direction !== Stem.UP && direction !== Stem.DOWN) { - throw new RuntimeError('BadArgument', `Invalid stem direction: ${direction}`); - } - this.stem_direction = direction; - this.reset(); - if (this.hasFlag()) { - this.buildFlag(); - } - this.beam = undefined; - if (this.stem) { - this.stem.setDirection(direction); - this.stem.setExtension(this.getStemExtension()); - const glyphProps = this.getBaseCustomNoteHeadGlyphProps() || this.getGlyphProps(); - const offsets = Tables.currentMusicFont().lookupMetric(`stem.noteHead.${glyphProps.code_head}`, { - offsetYBaseStemUp: 0, - offsetYTopStemUp: 0, - offsetYBaseStemDown: 0, - offsetYTopStemDown: 0, - }); - this.stem.setOptions({ - stem_up_y_offset: offsets.offsetYTopStemUp, - stem_down_y_offset: offsets.offsetYTopStemDown, - stem_up_y_base_offset: offsets.offsetYBaseStemUp, - stem_down_y_base_offset: offsets.offsetYBaseStemDown, - }); - } - if (this.preFormatted) { - this.preFormat(); - } - return this; - } - getStemX() { - const x_begin = this.getAbsoluteX() + this.x_shift; - const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth(); - const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end; - return stem_x; - } - getCenterGlyphX() { - return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2; - } - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != undefined) { - return this.stem_extension_override; - } - if (this.beam) { - return glyphProps.stem_beam_extension; - } - if (glyphProps) { - return this.getStemDirection() === Stem.UP ? glyphProps.stem_up_extension : glyphProps.stem_down_extension; - } - return 0; - } - setStemLength(height) { - this.stem_extension_override = height - Stem.HEIGHT; - return this; - } - getStemExtents() { - if (!this.stem) - throw new RuntimeError('NoStem', 'No stem attached to this note.'); - return this.stem.getExtents(); - } - getYForTopText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.min(stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1)); - } - else { - return stave.getYForTopText(textLine); - } - } - getYForBottomText(textLine) { - const stave = this.checkStave(); - if (this.hasStem()) { - const extents = this.getStemExtents(); - if (!extents) - throw new RuntimeError('InvalidState', 'Stem does not have extents.'); - return Math.max(stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine); - } - else { - return stave.getYForBottomText(textLine); - } - } - hasFlag() { - return Tables.getGlyphProps(this.duration).flag == true && !this.beam; - } - postFormat() { - var _a; - (_a = this.beam) === null || _a === void 0 ? void 0 : _a.postFormat(); - this.postFormatted = true; - return this; - } - drawStem(stemOptions) { - var _a; - this.checkContext(); - this.setRendered(); - this.setStem(new Stem(stemOptions)); - (_a = this.stem) === null || _a === void 0 ? void 0 : _a.setContext(this.getContext()).draw(); - } -} diff --git a/build/esm/src/stringnumber.js b/build/esm/src/stringnumber.js deleted file mode 100644 index 23c1d67921..0000000000 --- a/build/esm/src/stringnumber.js +++ /dev/null @@ -1,244 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Modifier, ModifierPosition } from './modifier.js'; -import { Renderer } from './renderer.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { isStaveNote, isStemmableNote } from './typeguard.js'; -import { RuntimeError } from './util.js'; -export class StringNumber extends Modifier { - static get CATEGORY() { - return "StringNumber"; - } - static get metrics() { - var _a; - return ((_a = Tables.currentMusicFont().getMetrics().stringNumber) !== null && _a !== void 0 ? _a : { - verticalPadding: 0, - stemPadding: 0, - leftPadding: 0, - rightPadding: 0, - }); - } - static format(nums, state) { - const left_shift = state.left_shift; - const right_shift = state.right_shift; - const num_spacing = 1; - if (!nums || nums.length === 0) - return false; - const nums_list = []; - let prev_note = null; - let shift_left = 0; - let shift_right = 0; - const modLines = 0; - for (let i = 0; i < nums.length; ++i) { - const num = nums[i]; - const note = num.getNote(); - const pos = num.getPosition(); - if (!isStaveNote(note)) { - throw new RuntimeError('NoStaveNote'); - } - const index = num.checkIndex(); - const props = note.getKeyProps()[index]; - const mc = note.getModifierContext(); - const verticalSpaceNeeded = (num.radius * 2) / Tables.STAVE_LINE_DISTANCE + 0.5; - if (mc) { - if (pos === ModifierPosition.ABOVE) { - num.text_line = mc.getState().top_text_line; - state.top_text_line += verticalSpaceNeeded; - } - else if (pos === ModifierPosition.BELOW) { - num.text_line = mc.getState().text_line; - state.text_line += verticalSpaceNeeded; - } - } - if (note !== prev_note) { - for (let n = 0; n < note.keys.length; ++n) { - if (left_shift === 0) { - shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left); - } - if (right_shift === 0) { - shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right); - } - } - prev_note = note; - } - const glyphLine = modLines === 0 ? props.line : modLines; - nums_list.push({ - pos, - note, - num, - line: glyphLine, - shiftL: shift_left, - shiftR: shift_right, - }); - } - nums_list.sort((a, b) => b.line - a.line); - let num_shiftR = 0; - let x_widthL = 0; - let x_widthR = 0; - let last_line = null; - let last_note = null; - for (let i = 0; i < nums_list.length; ++i) { - let num_shift = 0; - const note = nums_list[i].note; - const pos = nums_list[i].pos; - const num = nums_list[i].num; - const line = nums_list[i].line; - const shiftR = nums_list[i].shiftR; - if (line !== last_line || note !== last_note) { - num_shiftR = right_shift + shiftR; - } - const num_width = num.getWidth() + num_spacing; - if (pos === Modifier.Position.LEFT) { - num.setXShift(left_shift); - num_shift = shift_left + num_width; - x_widthL = num_shift > x_widthL ? num_shift : x_widthL; - } - else if (pos === Modifier.Position.RIGHT) { - num.setXShift(num_shiftR); - num_shift += num_width; - x_widthR = num_shift > x_widthR ? num_shift : x_widthR; - } - last_line = line; - last_note = note; - } - state.left_shift += x_widthL; - state.right_shift += x_widthR; - return true; - } - constructor(number) { - super(); - this.string_number = number; - this.position = Modifier.Position.ABOVE; - this.x_shift = 0; - this.y_shift = 0; - this.text_line = 0; - this.stem_offset = 0; - this.x_offset = 0; - this.y_offset = 0; - this.dashed = true; - this.leg = Renderer.LineEndType.NONE; - this.radius = 8; - this.drawCircle = true; - this.setWidth(this.radius * 2 + 4); - this.resetFont(); - } - setLineEndType(leg) { - if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) { - this.leg = leg; - } - return this; - } - setStringNumber(number) { - this.string_number = number; - return this; - } - setOffsetX(x) { - this.x_offset = x; - return this; - } - setOffsetY(y) { - this.y_offset = y; - return this; - } - setLastNote(note) { - this.last_note = note; - return this; - } - setDashed(dashed) { - this.dashed = dashed; - return this; - } - setDrawCircle(drawCircle) { - this.drawCircle = drawCircle; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - const stemDirection = note.hasStem() ? note.getStemDirection() : Stem.UP; - let dot_x = start.x + this.x_shift + this.x_offset; - let stem_ext = {}; - if (note.hasStem()) { - stem_ext = note.checkStem().getExtents(); - } - let dot_y = start.y + this.y_shift + this.y_offset; - switch (this.position) { - case Modifier.Position.ABOVE: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a < b ? a : b)); - if (note.hasStem() && stemDirection == Stem.UP) { - dot_y = stem_ext.topY + StringNumber.metrics.stemPadding; - } - dot_y -= this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; - } - break; - case Modifier.Position.BELOW: - { - const ys = note.getYs(); - dot_y = ys.reduce((a, b) => (a > b ? a : b)); - if (note.hasStem() && stemDirection == Stem.DOWN) { - dot_y = stem_ext.topY - StringNumber.metrics.stemPadding; - } - dot_y += this.radius + StringNumber.metrics.verticalPadding + this.text_line * Tables.STAVE_LINE_DISTANCE; - } - break; - case Modifier.Position.LEFT: - dot_x -= this.radius / 2 + StringNumber.metrics.leftPadding; - break; - case Modifier.Position.RIGHT: - dot_x += this.radius / 2 + StringNumber.metrics.rightPadding; - break; - default: - throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid`); - } - ctx.save(); - if (this.drawCircle) { - ctx.beginPath(); - ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false); - ctx.setLineWidth(1.5); - ctx.stroke(); - } - ctx.setFont(this.textFont); - const x = dot_x - ctx.measureText(this.string_number).width / 2; - ctx.fillText('' + this.string_number, x, dot_y + 4.5); - const lastNote = this.last_note; - if (isStemmableNote(lastNote)) { - const end = lastNote.getStemX() - note.getX() + 5; - ctx.setStrokeStyle('#000000'); - ctx.setLineCap('round'); - ctx.setLineWidth(0.6); - if (this.dashed) { - Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]); - } - else { - Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]); - } - let len; - let pattern; - switch (this.leg) { - case Renderer.LineEndType.UP: - len = -10; - pattern = this.dashed ? [3, 3] : [3, 0]; - Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - case Renderer.LineEndType.DOWN: - len = 10; - pattern = this.dashed ? [3, 3] : [3, 0]; - Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern); - break; - default: - break; - } - } - ctx.restore(); - } -} -StringNumber.TEXT_FONT = { - family: Font.SANS_SERIF, - size: Font.SIZE, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, -}; diff --git a/build/esm/src/strokes.js b/build/esm/src/strokes.js deleted file mode 100644 index c9f850c7cf..0000000000 --- a/build/esm/src/strokes.js +++ /dev/null @@ -1,200 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { isNote, isStaveNote, isTabNote } from './typeguard.js'; -import { RuntimeError } from './util.js'; -export class Stroke extends Modifier { - static get CATEGORY() { - return "Stroke"; - } - static format(strokes, state) { - const left_shift = state.left_shift; - const stroke_spacing = 0; - if (!strokes || strokes.length === 0) - return false; - const strokeList = strokes.map((stroke) => { - const note = stroke.getNote(); - const index = stroke.checkIndex(); - if (isStaveNote(note)) { - const { line } = note.getKeyProps()[index]; - const shift = note.getLeftDisplacedHeadPx(); - return { line, shift, stroke }; - } - else if (isTabNote(note)) { - const { str: string } = note.getPositions()[index]; - return { line: string, shift: 0, stroke }; - } - else { - throw new RuntimeError('Internal', 'Unexpected instance.'); - } - }); - const strokeShift = left_shift; - const xShift = strokeList.reduce((xShift, { stroke, shift }) => { - stroke.setXShift(strokeShift + shift); - return Math.max(stroke.getWidth() + stroke_spacing, xShift); - }, 0); - state.left_shift += xShift; - return true; - } - constructor(type, options) { - super(); - this.options = Object.assign({ all_voices: true }, options); - this.all_voices = this.options.all_voices; - this.type = type; - this.position = Modifier.Position.LEFT; - this.render_options = { - font_scale: 38, - }; - this.resetFont(); - this.setXShift(0); - this.setWidth(10); - } - getPosition() { - return this.position; - } - addEndNote(note) { - this.note_end = note; - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(this.position, this.index); - let ys = note.getYs(); - let topY = start.y; - let botY = start.y; - const x = start.x - 5; - const line_space = note.checkStave().getSpacingBetweenLines(); - const notes = this.checkModifierContext().getMembers(note.getCategory()); - for (let i = 0; i < notes.length; i++) { - const note = notes[i]; - if (isNote(note)) { - ys = note.getYs(); - for (let n = 0; n < ys.length; n++) { - if (this.note === notes[i] || this.all_voices) { - topY = Math.min(topY, ys[n]); - botY = Math.max(botY, ys[n]); - } - } - } - } - let arrow = ''; - let arrow_shift_x = 0; - let arrow_y = 0; - let text_shift_x = 0; - let text_y = 0; - switch (this.type) { - case Stroke.Type.BRUSH_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - arrow_y = topY - line_space / 2 + 10; - botY += line_space / 2; - break; - case Stroke.Type.BRUSH_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = 0.5; - arrow_y = botY + line_space / 2; - topY -= line_space / 2; - break; - case Stroke.Type.ROLL_DOWN: - case Stroke.Type.RASQUEDO_DOWN: - arrow = 'arrowheadBlackUp'; - arrow_shift_x = -3; - text_shift_x = this.x_shift + arrow_shift_x - 2; - if (isStaveNote(note)) { - topY += 1.5 * line_space; - if ((botY - topY) % 2 !== 0) { - botY += 0.5 * line_space; - } - else { - botY += line_space; - } - arrow_y = topY - line_space; - text_y = botY + line_space + 2; - } - else { - topY += 1.5 * line_space; - botY += line_space; - arrow_y = topY - 0.75 * line_space; - text_y = botY + 0.25 * line_space; - } - break; - case Stroke.Type.ROLL_UP: - case Stroke.Type.RASQUEDO_UP: - arrow = 'arrowheadBlackDown'; - arrow_shift_x = -4; - text_shift_x = this.x_shift + arrow_shift_x - 1; - if (isStaveNote(note)) { - arrow_y = line_space / 2; - topY += 0.5 * line_space; - if ((botY - topY) % 2 === 0) { - botY += line_space / 2; - } - arrow_y = botY + 0.5 * line_space; - text_y = topY - 1.25 * line_space; - } - else { - topY += 0.25 * line_space; - botY += 0.5 * line_space; - arrow_y = botY + 0.25 * line_space; - text_y = topY - line_space; - } - break; - case Stroke.Type.ARPEGGIO_DIRECTIONLESS: - topY += 0.5 * line_space; - botY += line_space; - break; - default: - throw new RuntimeError('InvalidType', `The stroke type ${this.type} does not exist`); - } - let strokeLine = 'straight'; - if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) { - ctx.fillRect(x + this.x_shift, topY, 1, botY - topY); - } - else { - strokeLine = 'wiggly'; - if (isStaveNote(note)) { - for (let i = topY; i <= botY; i += line_space) { - Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - } - else { - let i; - for (i = topY; i <= botY; i += 10) { - Glyph.renderGlyph(ctx, x + this.x_shift - 4, i, this.render_options.font_scale, 'vexWiggleArpeggioUp'); - } - if (this.type === Stroke.Type.RASQUEDO_DOWN) { - text_y = i + 0.25 * line_space; - } - } - } - if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) { - return; - } - Glyph.renderGlyph(ctx, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, { - category: `stroke_${strokeLine}.${arrow}`, - }); - if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) { - ctx.save(); - ctx.setFont(this.textFont); - ctx.fillText('R', x + text_shift_x, text_y); - ctx.restore(); - } - } -} -Stroke.Type = { - BRUSH_DOWN: 1, - BRUSH_UP: 2, - ROLL_DOWN: 3, - ROLL_UP: 4, - RASQUEDO_DOWN: 5, - RASQUEDO_UP: 6, - ARPEGGIO_DIRECTIONLESS: 7, -}; -Stroke.TEXT_FONT = { - family: Font.SERIF, - size: Font.SIZE, - weight: FontWeight.BOLD, - style: FontStyle.ITALIC, -}; diff --git a/build/esm/src/svgcontext.js b/build/esm/src/svgcontext.js deleted file mode 100644 index 86b0381c24..0000000000 --- a/build/esm/src/svgcontext.js +++ /dev/null @@ -1,465 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { RenderContext } from './rendercontext.js'; -import { Tables } from './tables.js'; -import { normalizeAngle, prefix, RuntimeError } from './util.js'; -const ATTRIBUTES_TO_IGNORE = { - path: { - x: true, - y: true, - width: true, - height: true, - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - rect: { - 'font-family': true, - 'font-weight': true, - 'font-style': true, - 'font-size': true, - }, - text: { - width: true, - height: true, - }, -}; -const SVG_NS = 'http://www.w3.org/2000/svg'; -const TWO_PI = 2 * Math.PI; -class MeasureTextCache { - constructor() { - this.cache = {}; - } - lookup(text, svg, attributes) { - let entries = this.cache[text]; - if (entries === undefined) { - entries = {}; - this.cache[text] = entries; - } - const family = attributes['font-family']; - const size = attributes['font-size']; - const weight = attributes['font-weight']; - const style = attributes['font-style']; - const key = `${family}%${size}%${weight}%${style}`; - let entry = entries[key]; - if (entry === undefined) { - entry = this.measureImpl(text, svg, attributes); - entries[key] = entry; - } - return entry; - } - measureImpl(text, svg, attributes) { - let txt = this.txt; - if (!txt) { - txt = document.createElementNS(SVG_NS, 'text'); - this.txt = txt; - } - txt.textContent = text; - if (attributes['font-family']) - txt.setAttributeNS(null, 'font-family', attributes['font-family']); - if (attributes['font-size']) - txt.setAttributeNS(null, 'font-size', `${attributes['font-size']}`); - if (attributes['font-style']) - txt.setAttributeNS(null, 'font-style', attributes['font-style']); - if (attributes['font-weight']) - txt.setAttributeNS(null, 'font-weight', `${attributes['font-weight']}`); - svg.appendChild(txt); - const bbox = txt.getBBox(); - svg.removeChild(txt); - return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }; - } -} -export class SVGContext extends RenderContext { - constructor(element) { - super(); - this.width = 0; - this.height = 0; - this.precision = 1; - this.backgroundFillStyle = 'white'; - this.fontCSSString = ''; - this.element = element; - this.precision = Math.pow(10, Tables.RENDER_PRECISION_PLACES); - const svg = this.create('svg'); - this.element.appendChild(svg); - this.svg = svg; - this.parent = this.svg; - this.groups = [this.svg]; - this.path = ''; - this.pen = { x: NaN, y: NaN }; - this.lineWidth = 1.0; - const defaultFontAttributes = { - 'font-family': Font.SANS_SERIF, - 'font-size': Font.SIZE + 'pt', - 'font-weight': FontWeight.NORMAL, - 'font-style': FontStyle.NORMAL, - }; - this.state = Object.assign({ scaleX: 1, scaleY: 1 }, defaultFontAttributes); - this.attributes = Object.assign({ 'stroke-width': 0.3, 'stroke-dasharray': 'none', fill: 'black', stroke: 'black' }, defaultFontAttributes); - this.groupAttributes = []; - this.applyAttributes(svg, this.attributes); - this.groupAttributes.push(Object.assign({}, this.attributes)); - this.shadow_attributes = { - width: 0, - color: 'black', - }; - this.state_stack = []; - } - round(n) { - return Math.round(n * this.precision) / this.precision; - } - create(svgElementType) { - return document.createElementNS(SVG_NS, svgElementType); - } - openGroup(cls, id, attrs) { - const group = this.create('g'); - this.groups.push(group); - this.parent.appendChild(group); - this.parent = group; - if (cls) - group.setAttribute('class', prefix(cls)); - if (id) - group.setAttribute('id', prefix(id)); - if (attrs && attrs.pointerBBox) { - group.setAttribute('pointer-events', 'bounding-box'); - } - this.applyAttributes(group, this.attributes); - this.groupAttributes.push(Object.assign(Object.assign({}, this.groupAttributes[this.groupAttributes.length - 1]), this.attributes)); - return group; - } - closeGroup() { - this.groups.pop(); - this.groupAttributes.pop(); - this.parent = this.groups[this.groups.length - 1]; - } - add(elem) { - this.parent.appendChild(elem); - } - setFillStyle(style) { - this.attributes.fill = style; - return this; - } - setBackgroundFillStyle(style) { - this.backgroundFillStyle = style; - return this; - } - setStrokeStyle(style) { - this.attributes.stroke = style; - return this; - } - setShadowColor(color) { - this.shadow_attributes.color = color; - return this; - } - setShadowBlur(blur) { - this.shadow_attributes.width = blur; - return this; - } - setLineWidth(width) { - this.attributes['stroke-width'] = width; - this.lineWidth = width; - return this; - } - setLineDash(lineDash) { - if (Object.prototype.toString.call(lineDash) === '[object Array]') { - this.attributes['stroke-dasharray'] = lineDash.join(','); - return this; - } - else { - throw new RuntimeError('ArgumentError', 'lineDash must be an array of integers.'); - } - } - setLineCap(capType) { - this.attributes['stroke-linecap'] = capType; - return this; - } - resize(width, height) { - this.width = width; - this.height = height; - this.element.style.width = width.toString(); - this.svg.style.width = width.toString(); - this.svg.style.height = height.toString(); - const attributes = { - width, - height, - }; - this.applyAttributes(this.svg, attributes); - this.scale(this.state.scaleX, this.state.scaleY); - return this; - } - scale(x, y) { - this.state.scaleX = this.state.scaleX ? this.state.scaleX * x : x; - this.state.scaleY = this.state.scaleY ? this.state.scaleY * y : y; - const visibleWidth = this.width / this.state.scaleX; - const visibleHeight = this.height / this.state.scaleY; - this.setViewBox(0, 0, visibleWidth, visibleHeight); - return this; - } - setViewBox(viewBox_or_minX, minY, width, height) { - if (typeof viewBox_or_minX === 'string') { - this.svg.setAttribute('viewBox', viewBox_or_minX); - } - else { - const viewBoxString = viewBox_or_minX + ' ' + minY + ' ' + width + ' ' + height; - this.svg.setAttribute('viewBox', viewBoxString); - } - } - applyAttributes(element, attributes) { - const attrNamesToIgnore = ATTRIBUTES_TO_IGNORE[element.nodeName]; - for (const attrName in attributes) { - if (attrNamesToIgnore && attrNamesToIgnore[attrName]) { - continue; - } - if (attributes[attrName] && - (this.groupAttributes.length == 0 || - attributes[attrName] != this.groupAttributes[this.groupAttributes.length - 1][attrName])) - element.setAttributeNS(null, attrName, attributes[attrName]); - } - return element; - } - clear() { - while (this.svg.lastChild) { - this.svg.removeChild(this.svg.lastChild); - } - this.scale(this.state.scaleX, this.state.scaleY); - } - rect(x, y, width, height, attributes) { - if (height < 0) { - y += height; - height *= -1; - } - const rectangle = this.create('rect'); - attributes = attributes !== null && attributes !== void 0 ? attributes : { fill: 'none', 'stroke-width': this.lineWidth, stroke: 'black' }; - x = this.round(x); - y = this.round(y); - width = this.round(width); - height = this.round(height); - this.applyAttributes(rectangle, Object.assign({ x, y, width, height }, attributes)); - this.add(rectangle); - return this; - } - fillRect(x, y, width, height) { - const attributes = { fill: this.attributes.fill, stroke: 'none' }; - this.rect(x, y, width, height, attributes); - return this; - } - clearRect(x, y, width, height) { - this.rect(x, y, width, height, { fill: this.backgroundFillStyle, stroke: 'none' }); - return this; - } - beginPath() { - this.path = ''; - this.pen.x = NaN; - this.pen.y = NaN; - return this; - } - moveTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'M' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - lineTo(x, y) { - x = this.round(x); - y = this.round(y); - this.path += 'L' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - bezierCurveTo(x1, y1, x2, y2, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - x2 = this.round(x2); - y2 = this.round(y2); - this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - quadraticCurveTo(x1, y1, x, y) { - x = this.round(x); - y = this.round(y); - x1 = this.round(x1); - y1 = this.round(y1); - this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y; - this.pen.x = x; - this.pen.y = y; - return this; - } - arc(x, y, radius, startAngle, endAngle, counterclockwise) { - let x0 = x + radius * Math.cos(startAngle); - let y0 = y + radius * Math.sin(startAngle); - x0 = this.round(x0); - y0 = this.round(y0); - const tmpStartTest = normalizeAngle(startAngle); - const tmpEndTest = normalizeAngle(endAngle); - if ((!counterclockwise && endAngle - startAngle >= TWO_PI) || - (counterclockwise && startAngle - endAngle >= TWO_PI) || - tmpStartTest === tmpEndTest) { - let x1 = x + radius * Math.cos(startAngle + Math.PI); - let y1 = y + radius * Math.sin(startAngle + Math.PI); - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 0 0 ${x1} ${y1} `; - this.path += `A${radius} ${radius} 0 0 0 ${x0} ${y0}`; - this.pen.x = x0; - this.pen.y = y0; - } - else { - let x1 = x + radius * Math.cos(endAngle); - let y1 = y + radius * Math.sin(endAngle); - startAngle = tmpStartTest; - endAngle = tmpEndTest; - let large; - if (Math.abs(endAngle - startAngle) < Math.PI) { - large = counterclockwise; - } - else { - large = !counterclockwise; - } - if (startAngle > endAngle) { - large = !large; - } - const sweep = !counterclockwise; - x1 = this.round(x1); - y1 = this.round(y1); - radius = this.round(radius); - this.path += `M${x0} ${y0} A${radius} ${radius} 0 ${+large} ${+sweep} ${x1} ${y1}`; - this.pen.x = x1; - this.pen.y = y1; - } - return this; - } - closePath() { - this.path += 'Z'; - return this; - } - getShadowStyle() { - const sa = this.shadow_attributes; - return `filter: drop-shadow(0 0 ${sa.width / 1.5}px ${sa.color})`; - } - fill(attributes) { - const path = this.create('path'); - if (typeof attributes === 'undefined') { - attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none' }); - } - attributes.d = this.path; - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - stroke() { - const path = this.create('path'); - const attributes = Object.assign(Object.assign({}, this.attributes), { fill: 'none', 'stroke-width': this.lineWidth, d: this.path }); - if (this.shadow_attributes.width > 0) { - attributes.style = this.getShadowStyle(); - } - this.applyAttributes(path, attributes); - this.add(path); - return this; - } - measureText(text) { - return SVGContext.measureTextCache.lookup(text, this.svg, this.attributes); - } - fillText(text, x, y) { - if (!text || text.length <= 0) { - return this; - } - x = this.round(x); - y = this.round(y); - const attributes = Object.assign(Object.assign({}, this.attributes), { stroke: 'none', x, - y }); - const txt = this.create('text'); - txt.textContent = text; - this.applyAttributes(txt, attributes); - this.add(txt); - return this; - } - save() { - this.state_stack.push({ - state: { - 'font-family': this.state['font-family'], - 'font-weight': this.state['font-weight'], - 'font-style': this.state['font-style'], - 'font-size': this.state['font-size'], - scale: this.state.scale, - }, - attributes: { - 'font-family': this.attributes['font-family'], - 'font-weight': this.attributes['font-weight'], - 'font-style': this.attributes['font-style'], - 'font-size': this.attributes['font-size'], - fill: this.attributes.fill, - stroke: this.attributes.stroke, - 'stroke-width': this.attributes['stroke-width'], - 'stroke-dasharray': this.attributes['stroke-dasharray'], - }, - shadow_attributes: { - width: this.shadow_attributes.width, - color: this.shadow_attributes.color, - }, - lineWidth: this.lineWidth, - }); - return this; - } - restore() { - const savedState = this.state_stack.pop(); - if (savedState) { - const state = savedState; - this.state['font-family'] = state.state['font-family']; - this.state['font-weight'] = state.state['font-weight']; - this.state['font-style'] = state.state['font-style']; - this.state['font-size'] = state.state['font-size']; - this.state.scale = state.state.scale; - this.attributes['font-family'] = state.attributes['font-family']; - this.attributes['font-weight'] = state.attributes['font-weight']; - this.attributes['font-style'] = state.attributes['font-style']; - this.attributes['font-size'] = state.attributes['font-size']; - this.attributes.fill = state.attributes.fill; - this.attributes.stroke = state.attributes.stroke; - this.attributes['stroke-width'] = state.attributes['stroke-width']; - this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray']; - this.shadow_attributes.width = state.shadow_attributes.width; - this.shadow_attributes.color = state.shadow_attributes.color; - this.lineWidth = state.lineWidth; - } - return this; - } - set fillStyle(style) { - this.setFillStyle(style); - } - get fillStyle() { - return this.attributes.fill; - } - set strokeStyle(style) { - this.setStrokeStyle(style); - } - get strokeStyle() { - return this.attributes.stroke; - } - setFont(f, size, weight, style) { - const fontInfo = Font.validate(f, size, weight, style); - this.fontCSSString = Font.toCSSString(fontInfo); - const fontAttributes = { - 'font-family': fontInfo.family, - 'font-size': fontInfo.size, - 'font-weight': fontInfo.weight, - 'font-style': fontInfo.style, - }; - this.attributes = Object.assign(Object.assign({}, this.attributes), fontAttributes); - this.state = Object.assign(Object.assign({}, this.state), fontAttributes); - return this; - } - getFont() { - return this.fontCSSString; - } -} -SVGContext.measureTextCache = new MeasureTextCache(); diff --git a/build/esm/src/system.js b/build/esm/src/system.js deleted file mode 100644 index 7b0d8f562a..0000000000 --- a/build/esm/src/system.js +++ /dev/null @@ -1,161 +0,0 @@ -import { BoundingBox } from './boundingbox.js'; -import { Element } from './element.js'; -import { Formatter } from './formatter.js'; -import { Note } from './note.js'; -import { Stave } from './stave.js'; -import { RuntimeError } from './util.js'; -export class System extends Element { - static get CATEGORY() { - return "System"; - } - constructor(params = {}) { - super(); - this.setOptions(params); - this.partStaves = []; - this.partStaveInfos = []; - this.partVoices = []; - } - setOptions(options = {}) { - if (!options.factory) { - throw new RuntimeError('NoFactory', 'System.setOptions(options) requires a factory.'); - } - this.factory = options.factory; - this.options = Object.assign(Object.assign({ factory: this.factory, x: 10, y: 10, width: 500, spaceBetweenStaves: 12, autoWidth: false, noJustification: false, debugFormatter: false, formatIterations: 0, noPadding: false }, options), { details: Object.assign({ alpha: 0.5 }, options.details), formatOptions: Object.assign({}, options.formatOptions) }); - if (this.options.noJustification === false && typeof options.width === 'undefined') { - this.options.autoWidth = true; - } - } - getX() { - return this.options.x; - } - setX(x) { - this.options.x = x; - this.partStaves.forEach((s) => { - s.setX(x); - }); - } - getY() { - return this.options.y; - } - setY(y) { - this.options.y = y; - this.partStaves.forEach((s) => { - s.setY(y); - }); - } - getStaves() { - return this.partStaves; - } - getVoices() { - return this.partVoices; - } - setContext(context) { - super.setContext(context); - this.factory.setContext(context); - return this; - } - addConnector(type = 'double') { - this.connector = this.factory.StaveConnector({ - top_stave: this.partStaves[0], - bottom_stave: this.partStaves[this.partStaves.length - 1], - type, - }); - return this.connector; - } - addStave(params) { - var _a; - const staveOptions = Object.assign({ left_bar: false }, params.options); - const stave = (_a = params.stave) !== null && _a !== void 0 ? _a : this.factory.Stave({ x: this.options.x, y: this.options.y, width: this.options.width, options: staveOptions }); - const p = Object.assign(Object.assign({ spaceAbove: 0, spaceBelow: 0, debugNoteMetrics: false, noJustification: false }, params), { options: staveOptions }); - const ctx = this.getContext(); - p.voices.forEach((voice) => { - voice - .setContext(ctx) - .setStave(stave) - .getTickables() - .forEach((tickable) => tickable.setStave(stave)); - this.partVoices.push(voice); - }); - this.partStaves.push(stave); - this.partStaveInfos.push(p); - return stave; - } - addVoices(voices) { - const ctx = this.getContext(); - voices.forEach((voice) => { - voice.setContext(ctx); - this.partVoices.push(voice); - }); - } - format() { - const options_details = this.options.details; - let justifyWidth = 0; - const formatter = new Formatter(options_details); - this.formatter = formatter; - let y = this.options.y; - let startX = 0; - const debugNoteMetricsYs = []; - this.partStaves.forEach((part, index) => { - y = y + part.space(this.partStaveInfos[index].spaceAbove); - part.setY(y); - y = y + part.space(this.partStaveInfos[index].spaceBelow); - y = y + part.space(this.options.spaceBetweenStaves); - if (this.partStaveInfos[index].debugNoteMetrics) { - debugNoteMetricsYs.push({ y, stave: part }); - y += 15; - } - startX = Math.max(startX, part.getNoteStartX()); - }); - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - const stave = tickable.getStave(); - if (stave) - tickable.setStave(stave); - }); - }); - formatter.joinVoices(this.partVoices); - this.partStaves.forEach((part) => part.setNoteStartX(startX)); - if (this.options.autoWidth && this.partVoices.length > 0) { - justifyWidth = formatter.preCalculateMinTotalWidth(this.partVoices); - this.options.width = justifyWidth + Stave.rightPadding + (startX - this.options.x); - this.partStaves.forEach((part) => { - part.setWidth(this.options.width); - }); - } - else { - justifyWidth = this.options.noPadding - ? this.options.width - (startX - this.options.x) - : this.options.width - (startX - this.options.x) - Stave.defaultPadding; - } - if (this.partVoices.length > 0) { - formatter.format(this.partVoices, this.options.noJustification ? 0 : justifyWidth, this.options.formatOptions); - } - formatter.postFormat(); - for (let i = 0; i < this.options.formatIterations; i++) { - formatter.tune(options_details); - } - this.startX = startX; - this.debugNoteMetricsYs = debugNoteMetricsYs; - this.lastY = y; - this.boundingBox = new BoundingBox(this.options.x, this.options.y, this.options.width, this.lastY - this.options.y); - Stave.formatBegModifiers(this.partStaves); - } - draw() { - const ctx = this.checkContext(); - if (!this.formatter || !this.startX || !this.lastY || !this.debugNoteMetricsYs) { - throw new RuntimeError('NoFormatter', 'format() must be called before draw()'); - } - this.setRendered(); - if (this.options.debugFormatter) { - Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY); - } - this.debugNoteMetricsYs.forEach((d) => { - this.partVoices.forEach((voice) => { - voice.getTickables().forEach((tickable) => { - if (tickable.getStave() === d.stave) - Note.plotMetrics(ctx, tickable, d.y); - }); - }); - }); - } -} diff --git a/build/esm/src/tables.js b/build/esm/src/tables.js deleted file mode 100644 index 3b0c0d77c0..0000000000 --- a/build/esm/src/tables.js +++ /dev/null @@ -1,1213 +0,0 @@ -import { Fraction } from './fraction.js'; -import { Glyph } from './glyph.js'; -import { RuntimeError } from './util.js'; -const RESOLUTION = 16384; -const durations = { - '1/2': RESOLUTION * 2, - 1: RESOLUTION / 1, - 2: RESOLUTION / 2, - 4: RESOLUTION / 4, - 8: RESOLUTION / 8, - 16: RESOLUTION / 16, - 32: RESOLUTION / 32, - 64: RESOLUTION / 64, - 128: RESOLUTION / 128, - 256: RESOLUTION / 256, -}; -const durationAliases = { - w: '1', - h: '2', - q: '4', - b: '256', -}; -const keySignatures = { - C: { num: 0 }, - Am: { num: 0 }, - F: { acc: 'b', num: 1 }, - Dm: { acc: 'b', num: 1 }, - Bb: { acc: 'b', num: 2 }, - Gm: { acc: 'b', num: 2 }, - Eb: { acc: 'b', num: 3 }, - Cm: { acc: 'b', num: 3 }, - Ab: { acc: 'b', num: 4 }, - Fm: { acc: 'b', num: 4 }, - Db: { acc: 'b', num: 5 }, - Bbm: { acc: 'b', num: 5 }, - Gb: { acc: 'b', num: 6 }, - Ebm: { acc: 'b', num: 6 }, - Cb: { acc: 'b', num: 7 }, - Abm: { acc: 'b', num: 7 }, - G: { acc: '#', num: 1 }, - Em: { acc: '#', num: 1 }, - D: { acc: '#', num: 2 }, - Bm: { acc: '#', num: 2 }, - A: { acc: '#', num: 3 }, - 'F#m': { acc: '#', num: 3 }, - E: { acc: '#', num: 4 }, - 'C#m': { acc: '#', num: 4 }, - B: { acc: '#', num: 5 }, - 'G#m': { acc: '#', num: 5 }, - 'F#': { acc: '#', num: 6 }, - 'D#m': { acc: '#', num: 6 }, - 'C#': { acc: '#', num: 7 }, - 'A#m': { acc: '#', num: 7 }, -}; -const clefs = { - treble: { line_shift: 0 }, - bass: { line_shift: 6 }, - tenor: { line_shift: 4 }, - alto: { line_shift: 3 }, - soprano: { line_shift: 1 }, - percussion: { line_shift: 0 }, - 'mezzo-soprano': { line_shift: 2 }, - 'baritone-c': { line_shift: 5 }, - 'baritone-f': { line_shift: 5 }, - subbass: { line_shift: 7 }, - french: { line_shift: -1 }, -}; -const notesInfo = { - C: { index: 0, int_val: 0 }, - CN: { index: 0, int_val: 0, accidental: 'n' }, - 'C#': { index: 0, int_val: 1, accidental: '#' }, - 'C##': { index: 0, int_val: 2, accidental: '##' }, - CB: { index: 0, int_val: 11, accidental: 'b' }, - CBB: { index: 0, int_val: 10, accidental: 'bb' }, - D: { index: 1, int_val: 2 }, - DN: { index: 1, int_val: 2, accidental: 'n' }, - 'D#': { index: 1, int_val: 3, accidental: '#' }, - 'D##': { index: 1, int_val: 4, accidental: '##' }, - DB: { index: 1, int_val: 1, accidental: 'b' }, - DBB: { index: 1, int_val: 0, accidental: 'bb' }, - E: { index: 2, int_val: 4 }, - EN: { index: 2, int_val: 4, accidental: 'n' }, - 'E#': { index: 2, int_val: 5, accidental: '#' }, - 'E##': { index: 2, int_val: 6, accidental: '##' }, - EB: { index: 2, int_val: 3, accidental: 'b' }, - EBB: { index: 2, int_val: 2, accidental: 'bb' }, - F: { index: 3, int_val: 5 }, - FN: { index: 3, int_val: 5, accidental: 'n' }, - 'F#': { index: 3, int_val: 6, accidental: '#' }, - 'F##': { index: 3, int_val: 7, accidental: '##' }, - FB: { index: 3, int_val: 4, accidental: 'b' }, - FBB: { index: 3, int_val: 3, accidental: 'bb' }, - G: { index: 4, int_val: 7 }, - GN: { index: 4, int_val: 7, accidental: 'n' }, - 'G#': { index: 4, int_val: 8, accidental: '#' }, - 'G##': { index: 4, int_val: 9, accidental: '##' }, - GB: { index: 4, int_val: 6, accidental: 'b' }, - GBB: { index: 4, int_val: 5, accidental: 'bb' }, - A: { index: 5, int_val: 9 }, - AN: { index: 5, int_val: 9, accidental: 'n' }, - 'A#': { index: 5, int_val: 10, accidental: '#' }, - 'A##': { index: 5, int_val: 11, accidental: '##' }, - AB: { index: 5, int_val: 8, accidental: 'b' }, - ABB: { index: 5, int_val: 7, accidental: 'bb' }, - B: { index: 6, int_val: 11 }, - BN: { index: 6, int_val: 11, accidental: 'n' }, - 'B#': { index: 6, int_val: 12, accidental: '#' }, - 'B##': { index: 6, int_val: 13, accidental: '##' }, - BB: { index: 6, int_val: 10, accidental: 'b' }, - BBB: { index: 6, int_val: 9, accidental: 'bb' }, - R: { index: 6, rest: true }, - X: { - index: 6, - accidental: '', - octave: 4, - code: 'noteheadXBlack', - shift_right: 5.5, - }, -}; -const validNoteTypes = { - n: { name: 'note' }, - r: { name: 'rest' }, - h: { name: 'harmonic' }, - m: { name: 'muted' }, - s: { name: 'slash' }, - g: { name: 'ghost' }, - d: { name: 'diamond' }, - x: { name: 'x' }, - ci: { name: 'circled' }, - cx: { name: 'circle x' }, - sf: { name: 'slashed' }, - sb: { name: 'slashed backward' }, - sq: { name: 'square' }, - tu: { name: 'triangle up' }, - td: { name: 'triangle down' }, -}; -const accidentals = { - '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 }, - '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 }, - b: { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 }, - bb: { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 }, - n: { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 }, - '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 }, - '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 }, - db: { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 }, - d: { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 }, - '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 }, - '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 }, - '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 }, - bs: { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 }, - bss: { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 }, - o: { code: 'accidentalSori', parenRightPaddingAdjustment: -1 }, - k: { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 }, - bbs: { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 }, - '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 }, - ashs: { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 }, - afhf: { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaUp: { code: 'accSagittal5v7KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v7KleismaDown: { code: 'accSagittal5v7KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaUp: { code: 'accSagittal5CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5CommaDown: { code: 'accSagittal5CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaUp: { code: 'accSagittal7CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7CommaDown: { code: 'accSagittal7CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisUp: { code: 'accSagittal25SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal25SmallDiesisDown: { code: 'accSagittal25SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisUp: { code: 'accSagittal35MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35MediumDiesisDown: { code: 'accSagittal35MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisUp: { code: 'accSagittal11MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11MediumDiesisDown: { code: 'accSagittal11MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisUp: { code: 'accSagittal11LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11LargeDiesisDown: { code: 'accSagittal11LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisUp: { code: 'accSagittal35LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal35LargeDiesisDown: { code: 'accSagittal35LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SDown: { code: 'accSagittalSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SUp: { code: 'accSagittalFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CDown: { code: 'accSagittalSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CUp: { code: 'accSagittalFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CDown: { code: 'accSagittalSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CUp: { code: 'accSagittalFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kDown: { code: 'accSagittalSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kUp: { code: 'accSagittalFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp: { code: 'accSagittalSharp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat: { code: 'accSagittalFlat', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v7kUp: { code: 'accSagittalSharp5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v7kDown: { code: 'accSagittalFlat5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5CUp: { code: 'accSagittalSharp5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5CDown: { code: 'accSagittalFlat5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7CUp: { code: 'accSagittalSharp7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7CDown: { code: 'accSagittalFlat7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp25SUp: { code: 'accSagittalSharp25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat25SDown: { code: 'accSagittalFlat25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35MUp: { code: 'accSagittalSharp35MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35MDown: { code: 'accSagittalFlat35MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11MUp: { code: 'accSagittalSharp11MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11MDown: { code: 'accSagittalFlat11MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11LUp: { code: 'accSagittalSharp11LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11LDown: { code: 'accSagittalFlat11LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp35LUp: { code: 'accSagittalSharp35LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat35LDown: { code: 'accSagittalFlat35LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp25SDown: { code: 'accSagittalDoubleSharp25SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat25SUp: { code: 'accSagittalDoubleFlat25SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7CDown: { code: 'accSagittalDoubleSharp7CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7CUp: { code: 'accSagittalDoubleFlat7CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5CDown: { code: 'accSagittalDoubleSharp5CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5CUp: { code: 'accSagittalDoubleFlat5CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v7kDown: { code: 'accSagittalDoubleSharp5v7kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v7kUp: { code: 'accSagittalDoubleFlat5v7kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp: { code: 'accSagittalDoubleSharp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat: { code: 'accSagittalDoubleFlat', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaUp: { code: 'accSagittal7v11KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11KleismaDown: { code: 'accSagittal7v11KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaUp: { code: 'accSagittal17CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17CommaDown: { code: 'accSagittal17CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaUp: { code: 'accSagittal55CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal55CommaDown: { code: 'accSagittal55CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaUp: { code: 'accSagittal7v11CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v11CommaDown: { code: 'accSagittal7v11CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisUp: { code: 'accSagittal5v11SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v11SmallDiesisDown: { code: 'accSagittal5v11SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SDown: { code: 'accSagittalSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SUp: { code: 'accSagittalFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CDown: { code: 'accSagittalSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CUp: { code: 'accSagittalFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CDown: { code: 'accSagittalSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CUp: { code: 'accSagittalFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CDown: { code: 'accSagittalSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CUp: { code: 'accSagittalFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kDown: { code: 'accSagittalSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kUp: { code: 'accSagittalFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11kUp: { code: 'accSagittalSharp7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11kDown: { code: 'accSagittalFlat7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17CUp: { code: 'accSagittalSharp17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17CDown: { code: 'accSagittalFlat17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp55CUp: { code: 'accSagittalSharp55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat55CDown: { code: 'accSagittalFlat55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v11CUp: { code: 'accSagittalSharp7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v11CDown: { code: 'accSagittalFlat7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v11SUp: { code: 'accSagittalSharp5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v11SDown: { code: 'accSagittalFlat5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v11SDown: { code: 'accSagittalDoubleSharp5v11SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v11SUp: { code: 'accSagittalDoubleFlat5v11SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11CDown: { code: 'accSagittalDoubleSharp7v11CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11CUp: { code: 'accSagittalDoubleFlat7v11CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp55CDown: { code: 'accSagittalDoubleSharp55CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat55CUp: { code: 'accSagittalDoubleFlat55CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17CDown: { code: 'accSagittalDoubleSharp17CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17CUp: { code: 'accSagittalDoubleFlat17CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v11kDown: { code: 'accSagittalDoubleSharp7v11kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v11kUp: { code: 'accSagittalDoubleFlat7v11kUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaUp: { code: 'accSagittal23CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal23CommaDown: { code: 'accSagittal23CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaUp: { code: 'accSagittal5v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v19CommaDown: { code: 'accSagittal5v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisUp: { code: 'accSagittal5v23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v23SmallDiesisDown: { code: 'accSagittal5v23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SDown: { code: 'accSagittalSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SUp: { code: 'accSagittalFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CDown: { code: 'accSagittalSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CUp: { code: 'accSagittalFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CDown: { code: 'accSagittalSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CUp: { code: 'accSagittalFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23CUp: { code: 'accSagittalSharp23CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23CDown: { code: 'accSagittalFlat23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v19CUp: { code: 'accSagittalSharp5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v19CDown: { code: 'accSagittalFlat5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v23SUp: { code: 'accSagittalSharp5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v23SDown: { code: 'accSagittalFlat5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v23SDown: { code: 'accSagittalDoubleSharp5v23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v23SUp: { code: 'accSagittalDoubleFlat5v23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp5v19CDown: { code: 'accSagittalDoubleSharp5v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat5v19CUp: { code: 'accSagittalDoubleFlat5v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23CDown: { code: 'accSagittalDoubleSharp23CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23CUp: { code: 'accSagittalDoubleFlat23CUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaUp: { code: 'accSagittal19SchismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19SchismaDown: { code: 'accSagittal19SchismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaUp: { code: 'accSagittal17KleismaUp', parenRightPaddingAdjustment: -1 }, - accSagittal17KleismaDown: { code: 'accSagittal17KleismaDown', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaUp: { code: 'accSagittal143CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal143CommaDown: { code: 'accSagittal143CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaUp: { code: 'accSagittal11v49CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v49CommaDown: { code: 'accSagittal11v49CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaUp: { code: 'accSagittal19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal19CommaDown: { code: 'accSagittal19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaUp: { code: 'accSagittal7v19CommaUp', parenRightPaddingAdjustment: -1 }, - accSagittal7v19CommaDown: { code: 'accSagittal7v19CommaDown', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisUp: { code: 'accSagittal49SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49SmallDiesisDown: { code: 'accSagittal49SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisUp: { code: 'accSagittal23SmallDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal23SmallDiesisDown: { code: 'accSagittal23SmallDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisUp: { code: 'accSagittal5v13MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13MediumDiesisDown: { code: 'accSagittal5v13MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisUp: { code: 'accSagittal11v19MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19MediumDiesisDown: { code: 'accSagittal11v19MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisUp: { code: 'accSagittal49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49MediumDiesisDown: { code: 'accSagittal49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisUp: { code: 'accSagittal5v49MediumDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v49MediumDiesisDown: { code: 'accSagittal5v49MediumDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisUp: { code: 'accSagittal49LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal49LargeDiesisDown: { code: 'accSagittal49LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisUp: { code: 'accSagittal11v19LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal11v19LargeDiesisDown: { code: 'accSagittal11v19LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisUp: { code: 'accSagittal5v13LargeDiesisUp', parenRightPaddingAdjustment: -1 }, - accSagittal5v13LargeDiesisDown: { code: 'accSagittal5v13LargeDiesisDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SDown: { code: 'accSagittalSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SUp: { code: 'accSagittalFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SDown: { code: 'accSagittalSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SUp: { code: 'accSagittalFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CDown: { code: 'accSagittalSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CUp: { code: 'accSagittalFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CDown: { code: 'accSagittalSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CUp: { code: 'accSagittalFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CDown: { code: 'accSagittalSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CUp: { code: 'accSagittalFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CDown: { code: 'accSagittalSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CUp: { code: 'accSagittalFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kDown: { code: 'accSagittalSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kUp: { code: 'accSagittalFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sDown: { code: 'accSagittalSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sUp: { code: 'accSagittalFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19sUp: { code: 'accSagittalSharp19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19sDown: { code: 'accSagittalFlat19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp17kUp: { code: 'accSagittalSharp17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat17kDown: { code: 'accSagittalFlat17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp143CUp: { code: 'accSagittalSharp143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat143CDown: { code: 'accSagittalFlat143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v49CUp: { code: 'accSagittalSharp11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v49CDown: { code: 'accSagittalFlat11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp19CUp: { code: 'accSagittalSharp19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat19CDown: { code: 'accSagittalFlat19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp7v19CUp: { code: 'accSagittalSharp7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat7v19CDown: { code: 'accSagittalFlat7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49SUp: { code: 'accSagittalSharp49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49SDown: { code: 'accSagittalFlat49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp23SUp: { code: 'accSagittalSharp23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat23SDown: { code: 'accSagittalFlat23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13MUp: { code: 'accSagittalSharp5v13MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13MDown: { code: 'accSagittalFlat5v13MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19MUp: { code: 'accSagittalSharp11v19MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19MDown: { code: 'accSagittalFlat11v19MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49MUp: { code: 'accSagittalSharp49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49MDown: { code: 'accSagittalFlat49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v49MUp: { code: 'accSagittalSharp5v49MUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v49MDown: { code: 'accSagittalFlat5v49MDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp49LUp: { code: 'accSagittalSharp49LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat49LDown: { code: 'accSagittalFlat49LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp11v19LUp: { code: 'accSagittalSharp11v19LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat11v19LDown: { code: 'accSagittalFlat11v19LDown', parenRightPaddingAdjustment: -1 }, - accSagittalSharp5v13LUp: { code: 'accSagittalSharp5v13LUp', parenRightPaddingAdjustment: -1 }, - accSagittalFlat5v13LDown: { code: 'accSagittalFlat5v13LDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp23SDown: { code: 'accSagittalDoubleSharp23SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat23SUp: { code: 'accSagittalDoubleFlat23SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp49SDown: { code: 'accSagittalDoubleSharp49SDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat49SUp: { code: 'accSagittalDoubleFlat49SUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp7v19CDown: { code: 'accSagittalDoubleSharp7v19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat7v19CUp: { code: 'accSagittalDoubleFlat7v19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19CDown: { code: 'accSagittalDoubleSharp19CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19CUp: { code: 'accSagittalDoubleFlat19CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp11v49CDown: { code: 'accSagittalDoubleSharp11v49CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat11v49CUp: { code: 'accSagittalDoubleFlat11v49CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp143CDown: { code: 'accSagittalDoubleSharp143CDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat143CUp: { code: 'accSagittalDoubleFlat143CUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp17kDown: { code: 'accSagittalDoubleSharp17kDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat17kUp: { code: 'accSagittalDoubleFlat17kUp', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleSharp19sDown: { code: 'accSagittalDoubleSharp19sDown', parenRightPaddingAdjustment: -1 }, - accSagittalDoubleFlat19sUp: { code: 'accSagittalDoubleFlat19sUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftUp: { code: 'accSagittalShaftUp', parenRightPaddingAdjustment: -1 }, - accSagittalShaftDown: { code: 'accSagittalShaftDown', parenRightPaddingAdjustment: -1 }, - accSagittalAcute: { code: 'accSagittalAcute', parenRightPaddingAdjustment: -1 }, - accSagittalGrave: { code: 'accSagittalGrave', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaUp: { code: 'accSagittal1MinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1MinaDown: { code: 'accSagittal1MinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasUp: { code: 'accSagittal2MinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2MinasDown: { code: 'accSagittal2MinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaUp: { code: 'accSagittal1TinaUp', parenRightPaddingAdjustment: -1 }, - accSagittal1TinaDown: { code: 'accSagittal1TinaDown', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasUp: { code: 'accSagittal2TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal2TinasDown: { code: 'accSagittal2TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasUp: { code: 'accSagittal3TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal3TinasDown: { code: 'accSagittal3TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasUp: { code: 'accSagittal4TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal4TinasDown: { code: 'accSagittal4TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasUp: { code: 'accSagittal5TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal5TinasDown: { code: 'accSagittal5TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasUp: { code: 'accSagittal6TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal6TinasDown: { code: 'accSagittal6TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasUp: { code: 'accSagittal7TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal7TinasDown: { code: 'accSagittal7TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasUp: { code: 'accSagittal8TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal8TinasDown: { code: 'accSagittal8TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasUp: { code: 'accSagittal9TinasUp', parenRightPaddingAdjustment: -1 }, - accSagittal9TinasDown: { code: 'accSagittal9TinasDown', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaUp: { code: 'accSagittalFractionalTinaUp', parenRightPaddingAdjustment: -1 }, - accSagittalFractionalTinaDown: { code: 'accSagittalFractionalTinaDown', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlat: { code: 'accidentalNarrowReversedFlat', parenRightPaddingAdjustment: -1 }, - accidentalNarrowReversedFlatAndFlat: { - code: 'accidentalNarrowReversedFlatAndFlat', - parenRightPaddingAdjustment: -1, - }, - accidentalWilsonPlus: { code: 'accidentalWilsonPlus', parenRightPaddingAdjustment: -1 }, - accidentalWilsonMinus: { code: 'accidentalWilsonMinus', parenRightPaddingAdjustment: -1 }, -}; -const accidentalColumns = { - 1: { - a: [1], - b: [1], - }, - 2: { - a: [1, 2], - }, - 3: { - a: [1, 3, 2], - b: [1, 2, 1], - second_on_bottom: [1, 2, 3], - }, - 4: { - a: [1, 3, 4, 2], - b: [1, 2, 3, 1], - spaced_out_tetrachord: [1, 2, 1, 2], - }, - 5: { - a: [1, 3, 5, 4, 2], - b: [1, 2, 4, 3, 1], - spaced_out_pentachord: [1, 2, 3, 2, 1], - very_spaced_out_pentachord: [1, 2, 1, 2, 1], - }, - 6: { - a: [1, 3, 5, 6, 4, 2], - b: [1, 2, 4, 5, 3, 1], - spaced_out_hexachord: [1, 3, 2, 1, 3, 2], - very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2], - }, -}; -const articulations = { - 'a.': { code: 'augmentationDot', between_lines: true }, - av: { - aboveCode: 'articStaccatissimoAbove', - belowCode: 'articStaccatissimoBelow', - between_lines: true, - }, - 'a>': { - aboveCode: 'articAccentAbove', - belowCode: 'articAccentBelow', - between_lines: true, - }, - 'a-': { - aboveCode: 'articTenutoAbove', - belowCode: 'articTenutoBelow', - between_lines: true, - }, - 'a^': { - aboveCode: 'articMarcatoAbove', - belowCode: 'articMarcatoBelow', - between_lines: false, - }, - 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, - ao: { - aboveCode: 'pluckedSnapPizzicatoAbove', - belowCode: 'pluckedSnapPizzicatoBelow', - between_lines: false, - }, - ah: { code: 'stringsHarmonic', between_lines: false }, - 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, - 'a@a': { code: 'fermataAbove', between_lines: false }, - 'a@u': { code: 'fermataBelow', between_lines: false }, - 'a@s': { aboveCode: 'fermataShortAbove', belowCode: 'fermataShortBelow', between_lines: false }, - 'a@as': { code: 'fermataShortAbove', between_lines: false }, - 'a@us': { code: 'fermataShortBelow', between_lines: false }, - 'a@l': { aboveCode: 'fermataLongAbove', belowCode: 'fermataLongBelow', between_lines: false }, - 'a@al': { code: 'fermataLongAbove', between_lines: false }, - 'a@ul': { code: 'fermataLongBelow', between_lines: false }, - 'a@vl': { aboveCode: 'fermataVeryLongAbove', belowCode: 'fermataVeryLongBelow', between_lines: false }, - 'a@avl': { code: 'fermataVeryLongAbove', between_lines: false }, - 'a@uvl': { code: 'fermataVeryLongBelow', between_lines: false }, - 'a|': { code: 'stringsUpBow', between_lines: false }, - am: { code: 'stringsDownBow', between_lines: false }, - 'a,': { code: 'pictChokeCymbal', between_lines: false }, -}; -const ornaments = { - mordent: { code: 'ornamentShortTrill' }, - mordent_inverted: { code: 'ornamentMordent' }, - turn: { code: 'ornamentTurn' }, - turn_inverted: { code: 'ornamentTurnSlash' }, - tr: { code: 'ornamentTrill' }, - upprall: { code: 'ornamentPrecompSlideTrillDAnglebert' }, - downprall: { code: 'ornamentPrecompDoubleCadenceUpperPrefix' }, - prallup: { code: 'ornamentPrecompTrillSuffixDandrieu' }, - pralldown: { code: 'ornamentPrecompTrillLowerSuffix' }, - upmordent: { code: 'ornamentPrecompSlideTrillBach' }, - downmordent: { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' }, - lineprall: { code: 'ornamentPrecompAppoggTrill' }, - prallprall: { code: 'ornamentTremblement' }, - scoop: { code: 'brassScoop' }, - doit: { code: 'brassDoitMedium' }, - fall: { code: 'brassFallLipShort' }, - doitLong: { code: 'brassLiftMedium' }, - fallLong: { code: 'brassFallRoughMedium' }, - bend: { code: 'brassBend' }, - plungerClosed: { code: 'brassMuteClosed' }, - plungerOpen: { code: 'brassMuteOpen' }, - flip: { code: 'brassFlip' }, - jazzTurn: { code: 'brassJazzTurn' }, - smear: { code: 'brassSmear' }, -}; -export class Tables { - static currentMusicFont() { - if (Tables.MUSIC_FONT_STACK.length === 0) { - throw new RuntimeError('NoFonts', 'The font stack is empty. See: await Flow.fetchMusicFont(...); Flow.setMusicFont(...).'); - } - else { - return Tables.MUSIC_FONT_STACK[0]; - } - } - static clefProperties(clef) { - if (!clef || !(clef in clefs)) - throw new RuntimeError('BadArgument', 'Invalid clef: ' + clef); - return clefs[clef]; - } - static keyProperties(keyOctaveGlyph, clef = 'treble', params) { - let options = { octave_shift: 0, duration: '4' }; - if (typeof params === 'object') { - options = Object.assign(Object.assign({}, options), params); - } - const duration = Tables.sanitizeDuration(options.duration); - const pieces = keyOctaveGlyph.split('/'); - if (pieces.length < 2) { - throw new RuntimeError('BadArguments', `First argument must be note/octave or note/octave/glyph-code: ${keyOctaveGlyph}`); - } - const key = pieces[0].toUpperCase(); - const value = notesInfo[key]; - if (!value) - throw new RuntimeError('BadArguments', 'Invalid key name: ' + key); - if (value.octave) - pieces[1] = value.octave.toString(); - let octave = parseInt(pieces[1], 10); - octave += -1 * options.octave_shift; - const baseIndex = octave * 7 - 4 * 7; - let line = (baseIndex + value.index) / 2; - line += Tables.clefProperties(clef).line_shift; - let stroke = 0; - if (line <= 0 && (line * 2) % 2 === 0) - stroke = 1; - if (line >= 6 && (line * 2) % 2 === 0) - stroke = -1; - const int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : undefined; - const code = value.code; - const shift_right = value.shift_right; - let customNoteHeadProps = {}; - if (pieces.length > 2 && pieces[2]) { - const glyphName = pieces[2].toUpperCase(); - customNoteHeadProps = { code: this.codeNoteHead(glyphName, duration) } || {}; - } - return Object.assign({ key, - octave, - line, - int_value, accidental: value.accidental, code, - stroke, - shift_right, displaced: false }, customNoteHeadProps); - } - static integerToNote(integer) { - if (typeof integer === 'undefined' || integer < 0 || integer > 11) { - throw new RuntimeError('BadArguments', `integerToNote() requires an integer in the range [0, 11]: ${integer}`); - } - const table = { - 0: 'C', - 1: 'C#', - 2: 'D', - 3: 'D#', - 4: 'E', - 5: 'F', - 6: 'F#', - 7: 'G', - 8: 'G#', - 9: 'A', - 10: 'A#', - 11: 'B', - }; - const noteValue = table[integer]; - if (!noteValue) { - throw new RuntimeError('BadArguments', `Unknown note value for integer: ${integer}`); - } - return noteValue; - } - static tabToGlyphProps(fret, scale = 1.0) { - let glyph = undefined; - let width = 0; - let shift_y = 0; - if (fret.toUpperCase() === 'X') { - const glyphMetrics = new Glyph('accidentalDoubleSharp', Tables.TABLATURE_FONT_SCALE).getMetrics(); - glyph = 'accidentalDoubleSharp'; - if (glyphMetrics.width == undefined || glyphMetrics.height == undefined) - throw new RuntimeError('InvalidMetrics', 'Width and height required'); - width = glyphMetrics.width; - shift_y = -glyphMetrics.height / 2; - } - else { - width = Tables.textWidth(fret); - } - return { - text: fret, - code: glyph, - getWidth: () => width * scale, - shift_y, - }; - } - static textWidth(text) { - return 7 * text.toString().length; - } - static articulationCodes(artic) { - return articulations[artic]; - } - static accidentalCodes(acc) { - return accidentals[acc]; - } - static ornamentCodes(acc) { - return ornaments[acc]; - } - static keySignature(spec) { - const keySpec = keySignatures[spec]; - if (!keySpec) { - throw new RuntimeError('BadKeySignature', `Bad key signature spec: '${spec}'`); - } - if (!keySpec.acc) { - return []; - } - const accidentalList = { - b: [2, 0.5, 2.5, 1, 3, 1.5, 3.5], - '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2], - }; - const notes = accidentalList[keySpec.acc]; - const acc_list = []; - for (let i = 0; i < keySpec.num; ++i) { - const line = notes[i]; - acc_list.push({ type: keySpec.acc, line }); - } - return acc_list; - } - static getKeySignatures() { - return keySignatures; - } - static hasKeySignature(spec) { - return spec in keySignatures; - } - static sanitizeDuration(duration) { - const durationNumber = durationAliases[duration]; - if (durationNumber !== undefined) { - duration = durationNumber; - } - if (durations[duration] === undefined) { - throw new RuntimeError('BadArguments', `The provided duration is not valid: ${duration}`); - } - return duration; - } - static durationToFraction(duration) { - return new Fraction().parse(Tables.sanitizeDuration(duration)); - } - static durationToNumber(duration) { - return Tables.durationToFraction(duration).value(); - } - static durationToTicks(duration) { - duration = Tables.sanitizeDuration(duration); - const ticks = durations[duration]; - if (ticks === undefined) { - throw new RuntimeError('InvalidDuration'); - } - return ticks; - } - static codeNoteHead(type, duration) { - let code = ''; - switch (type) { - case 'D0': - code = 'noteheadDiamondWhole'; - break; - case 'D1': - code = 'noteheadDiamondHalf'; - break; - case 'D2': - code = 'noteheadDiamondBlack'; - break; - case 'D3': - code = 'noteheadDiamondBlack'; - break; - case 'T0': - code = 'noteheadTriangleUpWhole'; - break; - case 'T1': - code = 'noteheadTriangleUpHalf'; - break; - case 'T2': - code = 'noteheadTriangleUpBlack'; - break; - case 'T3': - code = 'noteheadTriangleUpBlack'; - break; - case 'X0': - code = 'noteheadXWhole'; - break; - case 'X1': - code = 'noteheadXHalf'; - break; - case 'X2': - code = 'noteheadXBlack'; - break; - case 'X3': - code = 'noteheadCircleX'; - break; - case 'S1': - code = 'noteheadSquareWhite'; - break; - case 'S2': - code = 'noteheadSquareBlack'; - break; - case 'R1': - code = 'vexNoteHeadRectWhite'; - break; - case 'R2': - code = 'vexNoteHeadRectBlack'; - break; - case 'DO': - code = 'noteheadTriangleUpBlack'; - break; - case 'RE': - code = 'noteheadMoonBlack'; - break; - case 'MI': - code = 'noteheadDiamondBlack'; - break; - case 'FA': - code = 'noteheadTriangleLeftBlack'; - break; - case 'FAUP': - code = 'noteheadTriangleRightBlack'; - break; - case 'SO': - code = 'noteheadBlack'; - break; - case 'LA': - code = 'noteheadSquareBlack'; - break; - case 'TI': - code = 'noteheadTriangleRoundDownBlack'; - break; - case 'D': - case 'H': - switch (duration) { - case '1/2': - code = 'noteheadDiamondDoubleWhole'; - break; - case '1': - code = 'noteheadDiamondWhole'; - break; - case '2': - code = 'noteheadDiamondHalf'; - break; - default: - code = 'noteheadDiamondBlack'; - break; - } - break; - case 'N': - case 'G': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWhole'; - break; - case '1': - code = 'noteheadWhole'; - break; - case '2': - code = 'noteheadHalf'; - break; - default: - code = 'noteheadBlack'; - break; - } - break; - case 'M': - case 'X': - switch (duration) { - case '1/2': - code = 'noteheadXDoubleWhole'; - break; - case '1': - code = 'noteheadXWhole'; - break; - case '2': - code = 'noteheadXHalf'; - break; - default: - code = 'noteheadXBlack'; - break; - } - break; - case 'CX': - switch (duration) { - case '1/2': - code = 'noteheadCircleXDoubleWhole'; - break; - case '1': - code = 'noteheadCircleXWhole'; - break; - case '2': - code = 'noteheadCircleXHalf'; - break; - default: - code = 'noteheadCircleX'; - break; - } - break; - case 'CI': - switch (duration) { - case '1/2': - code = 'noteheadCircledDoubleWhole'; - break; - case '1': - code = 'noteheadCircledWhole'; - break; - case '2': - code = 'noteheadCircledHalf'; - break; - default: - code = 'noteheadCircledBlack'; - break; - } - break; - case 'SQ': - switch (duration) { - case '1/2': - code = 'noteheadDoubleWholeSquare'; - break; - case '1': - code = 'noteheadSquareWhite'; - break; - case '2': - code = 'noteheadSquareWhite'; - break; - default: - code = 'noteheadSquareBlack'; - break; - } - break; - case 'TU': - switch (duration) { - case '1/2': - code = 'noteheadTriangleUpDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleUpWhole'; - break; - case '2': - code = 'noteheadTriangleUpHalf'; - break; - default: - code = 'noteheadTriangleUpBlack'; - break; - } - break; - case 'TD': - switch (duration) { - case '1/2': - code = 'noteheadTriangleDownDoubleWhole'; - break; - case '1': - code = 'noteheadTriangleDownWhole'; - break; - case '2': - code = 'noteheadTriangleDownHalf'; - break; - default: - code = 'noteheadTriangleDownBlack'; - break; - } - break; - case 'SF': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole1'; - break; - case '1': - code = 'noteheadSlashedWhole1'; - break; - case '2': - code = 'noteheadSlashedHalf1'; - break; - default: - code = 'noteheadSlashedBlack1'; - } - break; - case 'SB': - switch (duration) { - case '1/2': - code = 'noteheadSlashedDoubleWhole2'; - break; - case '1': - code = 'noteheadSlashedWhole2'; - break; - case '2': - code = 'noteheadSlashedHalf2'; - break; - default: - code = 'noteheadSlashedBlack2'; - } - break; - } - return code; - } - static getGlyphProps(duration, type = 'n') { - duration = Tables.sanitizeDuration(duration); - let code = durationCodes[duration]; - if (code === undefined) { - code = durationCodes['4']; - } - let glyphTypeProperties = code[type]; - const codeNoteHead = Tables.codeNoteHead(type.toUpperCase(), duration); - if (codeNoteHead != '') - glyphTypeProperties = Object.assign(Object.assign({}, glyphTypeProperties), { code_head: codeNoteHead, code: codeNoteHead }); - const code_head = glyphTypeProperties.code_head; - const getWidth = (scale = Tables.NOTATION_FONT_SCALE) => Glyph.getWidth(code_head, scale); - return Object.assign(Object.assign(Object.assign({}, code.common), { getWidth: getWidth }), glyphTypeProperties); - } -} -Tables.SOFTMAX_FACTOR = 10; -Tables.STEM_WIDTH = 1.5; -Tables.STEM_HEIGHT = 35; -Tables.STAVE_LINE_THICKNESS = 1; -Tables.RENDER_PRECISION_PLACES = 3; -Tables.RESOLUTION = RESOLUTION; -Tables.MUSIC_FONT_STACK = []; -Tables.NOTATION_FONT_SCALE = 39; -Tables.TABLATURE_FONT_SCALE = 39; -Tables.SLASH_NOTEHEAD_WIDTH = 15; -Tables.STAVE_LINE_DISTANCE = 10; -Tables.TEXT_HEIGHT_OFFSET_HACK = 1; -Tables.accidentalMap = accidentals; -Tables.accidentalColumnsTable = accidentalColumns; -Tables.unicode = { - sharp: String.fromCharCode(0x266f), - flat: String.fromCharCode(0x266d), - natural: String.fromCharCode(0x266e), - triangle: String.fromCharCode(0x25b3), - 'o-with-slash': String.fromCharCode(0x00f8), - degrees: String.fromCharCode(0x00b0), - circle: String.fromCharCode(0x25cb), -}; -Tables.validTypes = validNoteTypes; -Tables.TIME4_4 = { - num_beats: 4, - beat_value: 4, - resolution: RESOLUTION, -}; -const durationCodes = { - '1/2': { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'restDoubleWhole', - rest: true, - position: 'B/5', - dot_shiftY: 0.5, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 1: { - common: { - code_head: '', - stem: false, - flag: false, - stem_up_extension: -Tables.STEM_HEIGHT, - stem_down_extension: -Tables.STEM_HEIGHT, - tabnote_stem_up_extension: -Tables.STEM_HEIGHT, - tabnote_stem_down_extension: -Tables.STEM_HEIGHT, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'restWhole', - ledger_code_head: 'restWholeLegerLine', - rest: true, - position: 'D/5', - dot_shiftY: 0.5, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 2: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'restHalf', - ledger_code_head: 'restHalfLegerLine', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 4: { - common: { - code_head: '', - stem: true, - flag: false, - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'restQuarter', - stem: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.5, - line_below: 1.5, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 8: { - common: { - code_head: '', - stem: true, - flag: true, - beam_count: 1, - stem_beam_extension: 0, - code_flag_upstem: 'flag8thUp', - code_flag_downstem: 'flag8thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'rest8th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 1.0, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 16: { - common: { - code_head: '', - beam_count: 2, - stem_beam_extension: 0, - stem: true, - flag: true, - code_flag_upstem: 'flag16thUp', - code_flag_downstem: 'flag16thDown', - stem_up_extension: 0, - stem_down_extension: 0, - tabnote_stem_up_extension: 0, - tabnote_stem_down_extension: 0, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'rest16th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -0.5, - line_above: 1.0, - line_below: 2.0, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 32: { - common: { - code_head: '', - beam_count: 3, - stem_beam_extension: 7.5, - stem: true, - flag: true, - code_flag_upstem: 'flag32ndUp', - code_flag_downstem: 'flag32ndDown', - stem_up_extension: 9, - stem_down_extension: 9, - tabnote_stem_up_extension: 9, - tabnote_stem_down_extension: 9, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'rest32nd', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 2.0, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 64: { - common: { - code_head: '', - beam_count: 4, - stem_beam_extension: 15, - stem: true, - flag: true, - code_flag_upstem: 'flag64thUp', - code_flag_downstem: 'flag64thDown', - stem_up_extension: 13, - stem_down_extension: 13, - tabnote_stem_up_extension: 13, - tabnote_stem_down_extension: 13, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'rest64th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -1.5, - line_above: 2.0, - line_below: 3.0, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, - 128: { - common: { - code_head: '', - beam_count: 5, - stem_beam_extension: 22.5, - stem: true, - flag: true, - code_flag_upstem: 'flag128thUp', - code_flag_downstem: 'flag128thDown', - stem_up_extension: 22, - stem_down_extension: 22, - tabnote_stem_up_extension: 22, - tabnote_stem_down_extension: 22, - dot_shiftY: 0, - line_above: 0, - line_below: 0, - }, - r: { - code_head: 'rest128th', - stem: false, - flag: false, - rest: true, - position: 'B/4', - dot_shiftY: -2.5, - line_above: 3.0, - line_below: 3.0, - }, - s: { - getWidth: () => Tables.SLASH_NOTEHEAD_WIDTH, - position: 'B/4', - }, - }, -}; diff --git a/build/esm/src/tabnote.js b/build/esm/src/tabnote.js deleted file mode 100644 index f2a4a8359d..0000000000 --- a/build/esm/src/tabnote.js +++ /dev/null @@ -1,302 +0,0 @@ -import { Font } from './font.js'; -import { Glyph } from './glyph.js'; -import { Modifier } from './modifier.js'; -import { Stem } from './stem.js'; -import { StemmableNote } from './stemmablenote.js'; -import { Tables } from './tables.js'; -import { isDot } from './typeguard.js'; -import { defined, RuntimeError } from './util.js'; -function getUnusedStringGroups(num_lines, strings_used) { - const stem_through = []; - let group = []; - for (let string = 1; string <= num_lines; string++) { - const is_used = strings_used.indexOf(string) > -1; - if (!is_used) { - group.push(string); - } - else { - stem_through.push(group); - group = []; - } - } - if (group.length > 0) - stem_through.push(group); - return stem_through; -} -function getPartialStemLines(stem_y, unused_strings, stave, stem_direction) { - const up_stem = stem_direction !== 1; - const down_stem = stem_direction !== -1; - const line_spacing = stave.getSpacingBetweenLines(); - const total_lines = stave.getNumLines(); - const stem_lines = []; - unused_strings.forEach((strings) => { - const containsLastString = strings.indexOf(total_lines) > -1; - const containsFirstString = strings.indexOf(1) > -1; - if ((up_stem && containsFirstString) || (down_stem && containsLastString)) { - return; - } - if (strings.length === 1) { - strings.push(strings[0]); - } - const line_ys = []; - strings.forEach((string, index, strings) => { - const isTopBound = string === 1; - const isBottomBound = string === total_lines; - let y = stave.getYForLine(string - 1); - if (index === 0 && !isTopBound) { - y -= line_spacing / 2 - 1; - } - else if (index === strings.length - 1 && !isBottomBound) { - y += line_spacing / 2 - 1; - } - line_ys.push(y); - if (stem_direction === 1 && isTopBound) { - line_ys.push(stem_y - 2); - } - else if (stem_direction === -1 && isBottomBound) { - line_ys.push(stem_y + 2); - } - }); - stem_lines.push(line_ys.sort((a, b) => a - b)); - }); - return stem_lines; -} -export class TabNote extends StemmableNote { - static get CATEGORY() { - return "TabNote"; - } - constructor(noteStruct, draw_stem = false) { - super(noteStruct); - this.glyphPropsArr = []; - this.greatestString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a > b ? a : b)); - }; - this.leastString = () => { - return this.positions.map((x) => x.str).reduce((a, b) => (a < b ? a : b)); - }; - this.ghost = false; - this.positions = noteStruct.positions || []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_scale: Tables.TABLATURE_FONT_SCALE, draw_stem, draw_dots: draw_stem, draw_stem_through_stave: false, y_shift: 0, scale: 1.0, font: `${Font.SIZE}pt ${Font.SANS_SERIF}` }); - this.glyphProps = Tables.getGlyphProps(this.duration, this.noteType); - defined(this.glyphProps, 'BadArguments', `No glyph found for duration '${this.duration}' and type '${this.noteType}'`); - this.buildStem(); - if (noteStruct.stem_direction) { - this.setStemDirection(noteStruct.stem_direction); - } - else { - this.setStemDirection(Stem.UP); - } - this.ghost = false; - this.updateWidth(); - } - reset() { - super.reset(); - if (this.stave) - this.setStave(this.stave); - return this; - } - setGhost(ghost) { - this.ghost = ghost; - this.updateWidth(); - return this; - } - hasStem() { - if (this.render_options.draw_stem) - return true; - return false; - } - getStemExtension() { - const glyphProps = this.getGlyphProps(); - if (this.stem_extension_override != null) { - return this.stem_extension_override; - } - if (glyphProps) { - return this.getStemDirection() === Stem.UP - ? glyphProps.tabnote_stem_up_extension - : glyphProps.tabnote_stem_down_extension; - } - return 0; - } - updateWidth() { - this.glyphPropsArr = []; - this.width = 0; - for (let i = 0; i < this.positions.length; ++i) { - let fret = this.positions[i].fret; - if (this.ghost) - fret = '(' + fret + ')'; - const glyphProps = Tables.tabToGlyphProps(fret.toString(), this.render_options.scale); - this.glyphPropsArr.push(glyphProps); - this.width = Math.max(glyphProps.getWidth(), this.width); - } - this.glyphProps.getWidth = () => this.width; - } - setStave(stave) { - super.setStave(stave); - const ctx = stave.getContext(); - this.setContext(ctx); - if (ctx) { - this.width = 0; - for (let i = 0; i < this.glyphPropsArr.length; ++i) { - const glyphProps = this.glyphPropsArr[i]; - const text = '' + glyphProps.text; - if (text.toUpperCase() !== 'X') { - ctx.save(); - ctx.setFont(this.render_options.font); - glyphProps.width = ctx.measureText(text).width; - ctx.restore(); - glyphProps.getWidth = () => glyphProps.width; - } - this.width = Math.max(glyphProps.getWidth(), this.width); - } - this.glyphProps.getWidth = () => this.width; - } - const ys = this.positions.map(({ str: line }) => stave.getYForLine(Number(line) - 1)); - this.setYs(ys); - if (this.stem) { - this.stem.setYBounds(this.getStemY(), this.getStemY()); - } - return this; - } - getPositions() { - return this.positions; - } - getModifierStartXY(position, index) { - if (!this.preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note"); - } - if (this.ys.length === 0) { - throw new RuntimeError('NoYValues', 'No Y-Values calculated for this note.'); - } - let x = 0; - if (position === Modifier.Position.LEFT) { - x = -1 * 2; - } - else if (position === Modifier.Position.RIGHT) { - x = this.width + 2; - } - else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) { - const note_glyph_width = this.glyphProps.getWidth(); - x = note_glyph_width / 2; - } - return { - x: this.getAbsoluteX() + x, - y: this.ys[index], - }; - } - getLineForRest() { - return Number(this.positions[0].str); - } - preFormat() { - if (this.preFormatted) - return; - if (this.modifierContext) - this.modifierContext.preFormat(); - this.preFormatted = true; - } - getStemX() { - return this.getCenterGlyphX(); - } - getStemY() { - const num_lines = this.checkStave().getNumLines(); - const stemUpLine = -0.5; - const stemDownLine = num_lines - 0.5; - const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine; - return this.checkStave().getYForLine(stemStartLine); - } - getStemExtents() { - return this.checkStem().getExtents(); - } - drawFlag() { - var _a; - const { beam, glyphProps, render_options: { draw_stem }, } = this; - const context = this.checkContext(); - const shouldDrawFlag = beam == undefined && draw_stem; - if (glyphProps.flag && shouldDrawFlag) { - const flag_x = this.getStemX(); - const flag_y = this.getStemDirection() === Stem.DOWN - ? - this.getStemY() - this.checkStem().getHeight() - (this.glyphProps ? this.glyphProps.stem_down_extension : 0) - : - this.getStemY() - this.checkStem().getHeight() + (this.glyphProps ? this.glyphProps.stem_up_extension : 0); - (_a = this.flag) === null || _a === void 0 ? void 0 : _a.render(context, flag_x, flag_y); - } - } - drawModifiers() { - this.modifiers.forEach((modifier) => { - if (isDot(modifier) && !this.render_options.draw_dots) { - return; - } - modifier.setContext(this.getContext()); - modifier.drawWithStyle(); - }); - } - drawStemThrough() { - const stemX = this.getStemX(); - const stemY = this.getStemY(); - const ctx = this.checkContext(); - const drawStem = this.render_options.draw_stem; - const stemThrough = this.render_options.draw_stem_through_stave; - if (drawStem && stemThrough) { - const numLines = this.checkStave().getNumLines(); - const stringsUsed = this.positions.map((position) => Number(position.str)); - const unusedStrings = getUnusedStringGroups(numLines, stringsUsed); - const stemLines = getPartialStemLines(stemY, unusedStrings, this.checkStave(), this.getStemDirection()); - ctx.save(); - ctx.setLineWidth(Stem.WIDTH); - stemLines.forEach((bounds) => { - if (bounds.length === 0) - return; - ctx.beginPath(); - ctx.moveTo(stemX, bounds[0]); - ctx.lineTo(stemX, bounds[bounds.length - 1]); - ctx.stroke(); - ctx.closePath(); - }); - ctx.restore(); - } - } - drawPositions() { - var _a; - const ctx = this.checkContext(); - const x = this.getAbsoluteX(); - const ys = this.ys; - for (let i = 0; i < this.positions.length; ++i) { - const y = ys[i] + this.render_options.y_shift; - const glyphProps = this.glyphPropsArr[i]; - const note_glyph_width = this.glyphProps.getWidth(); - const tab_x = x + note_glyph_width / 2 - glyphProps.getWidth() / 2; - ctx.clearRect(tab_x - 2, y - 3, glyphProps.getWidth() + 4, 6); - if (glyphProps.code) { - Glyph.renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyphProps.code); - } - else { - ctx.save(); - ctx.setFont(this.render_options.font); - const text = (_a = glyphProps.text) !== null && _a !== void 0 ? _a : ''; - ctx.fillText(text, tab_x, y + 5 * this.render_options.scale); - ctx.restore(); - } - } - } - draw() { - const ctx = this.checkContext(); - if (this.ys.length === 0) { - throw new RuntimeError('NoYValues', "Can't draw note without Y values."); - } - this.setRendered(); - const render_stem = this.beam == undefined && this.render_options.draw_stem; - this.applyStyle(); - ctx.openGroup('tabnote', this.getAttribute('id'), { pointerBBox: true }); - this.drawPositions(); - this.drawStemThrough(); - if (this.stem && render_stem) { - const stem_x = this.getStemX(); - this.stem.setNoteHeadXBounds(stem_x, stem_x); - this.stem.setContext(ctx).draw(); - } - this.drawFlag(); - this.drawModifiers(); - ctx.closeGroup(); - this.restoreStyle(); - } -} diff --git a/build/esm/src/tabslide.js b/build/esm/src/tabslide.js deleted file mode 100644 index 5b196a360d..0000000000 --- a/build/esm/src/tabslide.js +++ /dev/null @@ -1,76 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { TabTie } from './tabtie.js'; -import { RuntimeError } from './util.js'; -export class TabSlide extends TabTie { - static get CATEGORY() { - return "TabSlide"; - } - static get SLIDE_UP() { - return 1; - } - static get SLIDE_DOWN() { - return -1; - } - static createSlideUp(notes) { - return new TabSlide(notes, TabSlide.SLIDE_UP); - } - static createSlideDown(notes) { - return new TabSlide(notes, TabSlide.SLIDE_DOWN); - } - constructor(notes, direction) { - super(notes, 'sl.'); - if (!direction) { - let first_fret = notes.first_note.getPositions()[0].fret; - if (typeof first_fret === 'string') { - first_fret = parseInt(first_fret, 10); - } - let last_fret = notes.last_note.getPositions()[0].fret; - if (typeof last_fret === 'string') { - last_fret = parseInt(last_fret, 10); - } - if (isNaN(first_fret) || isNaN(last_fret)) { - direction = TabSlide.SLIDE_UP; - } - else { - direction = first_fret > last_fret ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP; - } - } - this.direction = direction; - this.render_options.cp1 = 11; - this.render_options.cp2 = 14; - this.render_options.y_shift = 0.5; - this.resetFont(); - } - renderTie(params) { - if (params.first_ys.length === 0 || params.last_ys.length === 0) { - throw new RuntimeError('BadArguments', 'No Y-values to render'); - } - const ctx = this.checkContext(); - const first_x_px = params.first_x_px; - const first_ys = params.first_ys; - const last_x_px = params.last_x_px; - const direction = params.direction; - if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) { - throw new RuntimeError('BadSlide', 'Invalid slide direction'); - } - const first_indices = this.notes.first_indices; - for (let i = 0; i < first_indices.length; ++i) { - const slide_y = first_ys[first_indices[i]] + this.render_options.y_shift; - if (isNaN(slide_y)) { - throw new RuntimeError('BadArguments', 'Bad indices for slide rendering.'); - } - ctx.beginPath(); - ctx.moveTo(first_x_px, slide_y + 3 * direction); - ctx.lineTo(last_x_px, slide_y - 3 * direction); - ctx.closePath(); - ctx.stroke(); - } - this.setRendered(); - } -} -TabSlide.TEXT_FONT = { - family: Font.SERIF, - size: 10, - weight: FontWeight.BOLD, - style: FontStyle.ITALIC, -}; diff --git a/build/esm/src/tabstave.js b/build/esm/src/tabstave.js deleted file mode 100644 index e71d724a53..0000000000 --- a/build/esm/src/tabstave.js +++ /dev/null @@ -1,17 +0,0 @@ -import { Stave } from './stave.js'; -export class TabStave extends Stave { - static get CATEGORY() { - return "TabStave"; - } - constructor(x, y, width, options) { - const tab_options = Object.assign({ spacing_between_lines_px: 13, num_lines: 6, top_text_position: 1 }, options); - super(x, y, width, tab_options); - } - getYForGlyphs() { - return this.getYForLine(2.5); - } - addTabGlyph() { - this.addClef('tab'); - return this; - } -} diff --git a/build/esm/src/tabtie.js b/build/esm/src/tabtie.js deleted file mode 100644 index 18a303cc73..0000000000 --- a/build/esm/src/tabtie.js +++ /dev/null @@ -1,19 +0,0 @@ -import { StaveTie } from './stavetie.js'; -export class TabTie extends StaveTie { - static get CATEGORY() { - return "TabTie"; - } - static createHammeron(notes) { - return new TabTie(notes, 'H'); - } - static createPulloff(notes) { - return new TabTie(notes, 'P'); - } - constructor(notes, text) { - super(notes, text); - this.render_options.cp1 = 9; - this.render_options.cp2 = 11; - this.render_options.y_shift = 3; - this.direction = -1; - } -} diff --git a/build/esm/src/textbracket.js b/build/esm/src/textbracket.js deleted file mode 100644 index bf97ea8350..0000000000 --- a/build/esm/src/textbracket.js +++ /dev/null @@ -1,144 +0,0 @@ -import { Element } from './element.js'; -import { Font, FontStyle, FontWeight } from './font.js'; -import { Renderer } from './renderer.js'; -import { Tables } from './tables.js'; -import { log, RuntimeError } from './util.js'; -function L(...args) { - if (TextBracket.DEBUG) - log('Vex.Flow.TextBracket', args); -} -export var TextBracketPosition; -(function (TextBracketPosition) { - TextBracketPosition[TextBracketPosition["TOP"] = 1] = "TOP"; - TextBracketPosition[TextBracketPosition["BOTTOM"] = -1] = "BOTTOM"; -})(TextBracketPosition || (TextBracketPosition = {})); -export class TextBracket extends Element { - static get CATEGORY() { - return "TextBracket"; - } - static get Position() { - return TextBracketPosition; - } - static get PositionString() { - return { - top: TextBracketPosition.TOP, - bottom: TextBracketPosition.BOTTOM, - }; - } - static get Positions() { - L('Positions is deprecated, use TextBracketPosition instead.'); - return TextBracketPosition; - } - static get PositionsString() { - L('PositionsString is deprecated, use PositionString instead.'); - return TextBracket.PositionString; - } - constructor({ start, stop, text = '', superscript = '', position = TextBracketPosition.TOP }) { - super(); - this.start = start; - this.stop = stop; - this.text = text; - this.superscript = superscript; - this.position = typeof position === 'string' ? TextBracket.PositionString[position] : position; - this.line = 1; - this.resetFont(); - this.render_options = { - dashed: true, - dash: [5], - color: 'black', - line_width: 1, - show_bracket: true, - bracket_height: 8, - underline_superscript: true, - }; - } - applyStyle(ctx) { - ctx.setFont(this.font); - const options = this.render_options; - ctx.setStrokeStyle(options.color); - ctx.setFillStyle(options.color); - ctx.setLineWidth(options.line_width); - return this; - } - setDashed(dashed, dash) { - this.render_options.dashed = dashed; - if (dash) - this.render_options.dash = dash; - return this; - } - setLine(line) { - this.line = line; - return this; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - let y = 0; - switch (this.position) { - case TextBracketPosition.TOP: - y = this.start.checkStave().getYForTopText(this.line); - break; - case TextBracketPosition.BOTTOM: - y = this.start.checkStave().getYForBottomText(this.line + Tables.TEXT_HEIGHT_OFFSET_HACK); - break; - default: - throw new RuntimeError('InvalidPosition', `The position ${this.position} is invalid.`); - } - const start = { x: this.start.getAbsoluteX(), y }; - const stop = { x: this.stop.getAbsoluteX(), y }; - L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y); - const bracket_height = this.render_options.bracket_height * this.position; - ctx.save(); - this.applyStyle(ctx); - ctx.fillText(this.text, start.x, start.y); - const main_measure = ctx.measureText(this.text); - const main_width = main_measure.width; - const main_height = main_measure.height; - const super_y = start.y - main_height / 2.5; - const { family, size, weight, style } = this.textFont; - const smallerFontSize = Font.scaleSize(size, 0.714286); - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, start.x + main_width + 1, super_y); - const super_measure = ctx.measureText(this.superscript); - const super_width = super_measure.width; - const super_height = super_measure.height; - let start_x = start.x; - let line_y = super_y; - const end_x = stop.x + this.stop.getGlyphProps().getWidth(); - if (this.position === TextBracketPosition.TOP) { - start_x += main_width + super_width + 5; - line_y -= super_height / 2.7; - } - else if (this.position === TextBracketPosition.BOTTOM) { - line_y += super_height / 2.7; - start_x += main_width + 2; - if (!this.render_options.underline_superscript) { - start_x += super_width; - } - } - if (this.render_options.dashed) { - Renderer.drawDashedLine(ctx, start_x, line_y, end_x, line_y, this.render_options.dash); - if (this.render_options.show_bracket) { - Renderer.drawDashedLine(ctx, end_x, line_y + 1 * this.position, end_x, line_y + bracket_height, this.render_options.dash); - } - } - else { - ctx.beginPath(); - ctx.moveTo(start_x, line_y); - ctx.lineTo(end_x, line_y); - if (this.render_options.show_bracket) { - ctx.lineTo(end_x, line_y + bracket_height); - } - ctx.stroke(); - ctx.closePath(); - } - ctx.restore(); - } -} -TextBracket.DEBUG = false; -TextBracket.TEXT_FONT = { - family: Font.SERIF, - size: 15, - weight: FontWeight.NORMAL, - style: FontStyle.ITALIC, -}; diff --git a/build/esm/src/textdynamics.js b/build/esm/src/textdynamics.js deleted file mode 100644 index 17c64715f9..0000000000 --- a/build/esm/src/textdynamics.js +++ /dev/null @@ -1,81 +0,0 @@ -import { Glyph } from './glyph.js'; -import { Note } from './note.js'; -import { defined, log, RuntimeError } from './util.js'; -function L(...args) { - if (TextDynamics.DEBUG) - log('Vex.Flow.TextDynamics', args); -} -export class TextDynamics extends Note { - static get CATEGORY() { - return "TextDynamics"; - } - static get GLYPHS() { - return { - f: { - code: 'dynamicForte', - width: 12, - }, - p: { - code: 'dynamicPiano', - width: 14, - }, - m: { - code: 'dynamicMezzo', - width: 17, - }, - s: { - code: 'dynamicSforzando', - width: 10, - }, - z: { - code: 'dynamicZ', - width: 12, - }, - r: { - code: 'dynamicRinforzando', - width: 12, - }, - }; - } - constructor(noteStruct) { - super(noteStruct); - this.sequence = (noteStruct.text || '').toLowerCase(); - this.line = noteStruct.line || 0; - this.glyphs = []; - this.render_options = Object.assign(Object.assign({}, this.render_options), { glyph_font_size: 40 }); - L('New Dynamics Text: ', this.sequence); - } - setLine(line) { - this.line = line; - return this; - } - preFormat() { - let total_width = 0; - this.glyphs = []; - this.sequence.split('').forEach((letter) => { - const glyph_data = TextDynamics.GLYPHS[letter]; - if (!glyph_data) - throw new RuntimeError('Invalid dynamics character: ' + letter); - const size = defined(this.render_options.glyph_font_size); - const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' }); - this.glyphs.push(glyph); - total_width += glyph_data.width; - }); - this.setWidth(total_width); - this.preFormatted = true; - return this; - } - draw() { - this.setRendered(); - const x = this.getAbsoluteX(); - const y = this.checkStave().getYForLine(this.line + -3); - L('Rendering Dynamics: ', this.sequence); - let letter_x = x; - this.glyphs.forEach((glyph, index) => { - const current_letter = this.sequence[index]; - glyph.render(this.checkContext(), letter_x, y); - letter_x += TextDynamics.GLYPHS[current_letter].width; - }); - } -} -TextDynamics.DEBUG = false; diff --git a/build/esm/src/textformatter.js b/build/esm/src/textformatter.js deleted file mode 100644 index 64eb492e8f..0000000000 --- a/build/esm/src/textformatter.js +++ /dev/null @@ -1,218 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { log } from './util.js'; -function L(...args) { - if (TextFormatter.DEBUG) - log('Vex.Flow.TextFormatter', args); -} -const textWidthCache = {}; -const textHeightCache = {}; -const registry = {}; -export class TextFormatter { - static getFontFamilies() { - const registeredFonts = []; - for (const fontFamily in registry) { - const formatterInfo = registry[fontFamily]; - registeredFonts.push(Object.assign({}, formatterInfo)); - } - return registeredFonts; - } - static create(requestedFont = {}) { - L('create: ', requestedFont); - if (!requestedFont.family) { - requestedFont.family = Font.SANS_SERIF; - } - const candidates = []; - const requestedFamilies = requestedFont.family.split(/\s*,\s*/); - for (const requestedFamily of requestedFamilies) { - for (const fontFamily in registry) { - if (fontFamily.startsWith(requestedFamily)) { - candidates.push(registry[fontFamily]); - } - } - if (candidates.length > 0) { - break; - } - } - let formatter; - if (candidates.length === 0) { - formatter = new TextFormatter(Object.values(registry)[0]); - } - else if (candidates.length === 1) { - formatter = new TextFormatter(candidates[0]); - } - else { - const bold = Font.isBold(requestedFont.weight); - const italic = Font.isItalic(requestedFont.style); - const perfectMatch = candidates.find((f) => f.bold === bold && f.italic === italic); - if (perfectMatch) { - formatter = new TextFormatter(perfectMatch); - } - else { - const partialMatch = candidates.find((f) => f.italic === italic || f.bold === bold); - if (partialMatch) { - formatter = new TextFormatter(partialMatch); - } - else { - formatter = new TextFormatter(candidates[0]); - } - } - } - const fontSize = requestedFont.size; - if (typeof fontSize !== 'undefined') { - const fontSizeInPt = Font.convertSizeToPointValue(fontSize); - formatter.setFontSize(fontSizeInPt); - } - return formatter; - } - static getInfo(fontFamily) { - return registry[fontFamily]; - } - static registerInfo(info, overwrite = false) { - L('registerInfo: ', info, overwrite); - const fontFamily = info.family; - const currFontInfo = registry[fontFamily]; - if (currFontInfo === undefined || overwrite) { - registry[fontFamily] = info; - } - } - constructor(formatterInfo) { - this.family = ''; - this.size = 14; - this.resolution = 1000; - this.glyphs = {}; - this.serifs = false; - this.monospaced = false; - this.italic = false; - this.bold = false; - this.superscriptOffset = 0; - this.subscriptOffset = 0; - this.maxSizeGlyph = '@'; - this.cacheKey = ''; - this.updateParams(formatterInfo); - } - get localHeightCache() { - var _a; - if (textHeightCache[this.cacheKey] === undefined) { - textHeightCache[this.cacheKey] = {}; - } - return (_a = textHeightCache[this.cacheKey]) !== null && _a !== void 0 ? _a : {}; - } - updateParams(params) { - if (params.family) - this.family = params.family; - if (params.resolution) - this.resolution = params.resolution; - if (params.glyphs) - this.glyphs = params.glyphs; - if (params.serifs) - this.serifs = params.serifs; - if (params.monospaced) - this.monospaced = params.monospaced; - if (params.italic) - this.italic = params.italic; - if (params.bold) - this.bold = params.bold; - if (params.maxSizeGlyph) - this.maxSizeGlyph = params.maxSizeGlyph; - if (params.superscriptOffset) - this.superscriptOffset = params.superscriptOffset; - if (params.subscriptOffset) - this.subscriptOffset = params.subscriptOffset; - this.updateCacheKey(); - } - updateCacheKey() { - const family = this.family.replace(/\s+/g, '_'); - const size = this.size; - const weight = this.bold ? FontWeight.BOLD : FontWeight.NORMAL; - const style = this.italic ? FontStyle.ITALIC : FontStyle.NORMAL; - this.cacheKey = `${family}%${size}%${weight}%${style}`; - } - getGlyphMetrics(character) { - if (this.glyphs[character]) { - return this.glyphs[character]; - } - else { - return this.glyphs[this.maxSizeGlyph]; - } - } - get maxHeight() { - const metrics = this.getGlyphMetrics(this.maxSizeGlyph); - return (metrics.ha / this.resolution) * this.fontSizeInPixels; - } - getWidthForCharacterInEm(c) { - var _a; - const metrics = this.getGlyphMetrics(c); - if (!metrics) { - return 0.65; - } - else { - const advanceWidth = (_a = metrics.advanceWidth) !== null && _a !== void 0 ? _a : 0; - return advanceWidth / this.resolution; - } - } - getYForCharacterInPx(c) { - const metrics = this.getGlyphMetrics(c); - const rv = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - if (!metrics) { - return rv; - } - else { - if (typeof metrics.y_min === 'number') { - rv.yMin = (metrics.y_min / this.resolution) * this.fontSizeInPixels; - } - if (typeof metrics.y_max === 'number') { - rv.yMax = (metrics.y_max / this.resolution) * this.fontSizeInPixels; - } - rv.height = rv.yMax - rv.yMin; - return rv; - } - } - getYForStringInPx(str) { - const entry = this.localHeightCache; - const extent = { yMin: 0, yMax: this.maxHeight, height: this.maxHeight }; - const cache = entry[str]; - if (cache !== undefined) { - return cache; - } - for (let i = 0; i < str.length; ++i) { - const curY = this.getYForCharacterInPx(str[i]); - extent.yMin = Math.min(extent.yMin, curY.yMin); - extent.yMax = Math.max(extent.yMax, curY.yMax); - extent.height = extent.yMax - extent.yMin; - } - entry[str] = extent; - return extent; - } - getWidthForTextInEm(text) { - const key = this.cacheKey; - let cachedWidths = textWidthCache[key]; - if (cachedWidths === undefined) { - cachedWidths = {}; - textWidthCache[key] = cachedWidths; - } - let width = cachedWidths[text]; - if (width === undefined) { - width = 0; - for (let i = 0; i < text.length; ++i) { - width += this.getWidthForCharacterInEm(text[i]); - } - cachedWidths[text] = width; - } - return width; - } - getWidthForTextInPx(text) { - return this.getWidthForTextInEm(text) * this.fontSizeInPixels; - } - setFontSize(size) { - this.size = size; - this.updateCacheKey(); - return this; - } - get fontSizeInPixels() { - return this.size * Font.scaleToPxFrom.pt; - } - getResolution() { - return this.resolution; - } -} -TextFormatter.DEBUG = false; diff --git a/build/esm/src/textnote.js b/build/esm/src/textnote.js deleted file mode 100644 index 260786d9ca..0000000000 --- a/build/esm/src/textnote.js +++ /dev/null @@ -1,180 +0,0 @@ -import { Font, FontStyle, FontWeight } from './font.js'; -import { Glyph } from './glyph.js'; -import { Note } from './note.js'; -import { RuntimeError } from './util.js'; -export var TextJustification; -(function (TextJustification) { - TextJustification[TextJustification["LEFT"] = 1] = "LEFT"; - TextJustification[TextJustification["CENTER"] = 2] = "CENTER"; - TextJustification[TextJustification["RIGHT"] = 3] = "RIGHT"; -})(TextJustification || (TextJustification = {})); -export class TextNote extends Note { - static get CATEGORY() { - return "TextNote"; - } - static get GLYPHS() { - return { - segno: { - code: 'segno', - }, - tr: { - code: 'ornamentTrill', - }, - mordent: { - code: 'ornamentMordent', - }, - mordent_upper: { - code: 'ornamentShortTrill', - }, - mordent_lower: { - code: 'ornamentMordent', - }, - f: { - code: 'dynamicForte', - }, - p: { - code: 'dynamicPiano', - }, - m: { - code: 'dynamicMezzo', - }, - s: { - code: 'dynamicSforzando', - }, - z: { - code: 'dynamicZ', - }, - coda: { - code: 'coda', - }, - pedal_open: { - code: 'keyboardPedalPed', - }, - pedal_close: { - code: 'keyboardPedalUp', - }, - caesura_straight: { - code: 'caesura', - }, - caesura_curved: { - code: 'caesuraCurved', - }, - breath: { - code: 'breathMarkComma', - }, - tick: { - code: 'breathMarkTick', - }, - turn: { - code: 'ornamentTurn', - }, - turn_inverted: { - code: 'ornamentTurnSlash', - }, - }; - } - constructor(noteStruct) { - super(noteStruct); - this.text = noteStruct.text || ''; - this.superscript = noteStruct.superscript; - this.subscript = noteStruct.subscript; - this.setFont(noteStruct.font); - this.line = noteStruct.line || 0; - this.smooth = noteStruct.smooth || false; - this.ignore_ticks = noteStruct.ignore_ticks || false; - this.justification = TextJustification.LEFT; - if (noteStruct.glyph) { - const struct = TextNote.GLYPHS[noteStruct.glyph]; - if (!struct) - throw new RuntimeError('Invalid glyph type: ' + noteStruct.glyph); - this.glyph = new Glyph(struct.code, 40, { category: 'textNote' }); - this.setWidth(this.glyph.getMetrics().width); - } - else { - this.glyph = undefined; - } - } - setJustification(just) { - this.justification = just; - return this; - } - setLine(line) { - this.line = line; - return this; - } - getLine() { - return this.line; - } - getText() { - return this.text; - } - preFormat() { - if (this.preFormatted) - return; - const tickContext = this.checkTickContext(`Can't preformat without a TickContext.`); - if (this.smooth) { - this.setWidth(0); - } - else { - if (this.glyph) { - } - else { - const ctx = this.checkContext(); - ctx.setFont(this.textFont); - this.setWidth(ctx.measureText(this.text).width); - } - } - if (this.justification === TextJustification.CENTER) { - this.leftDisplacedHeadPx = this.width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - this.leftDisplacedHeadPx = this.width; - } - this.rightDisplacedHeadPx = tickContext.getMetrics().glyphPx / 2; - this.preFormatted = true; - } - draw() { - const ctx = this.checkContext(); - const stave = this.checkStave(); - const tickContext = this.checkTickContext(`Can't draw without a TickContext.`); - this.setRendered(); - let x = this.getAbsoluteX() + tickContext.getMetrics().glyphPx / 2; - const width = this.getWidth(); - if (this.justification === TextJustification.CENTER) { - x -= width / 2; - } - else if (this.justification === TextJustification.RIGHT) { - x -= width; - } - let y; - if (this.glyph) { - y = stave.getYForLine(this.line + -3); - this.glyph.render(ctx, x, y); - } - else { - y = stave.getYForLine(this.line + -3); - this.applyStyle(ctx); - ctx.setFont(this.textFont); - ctx.fillText(this.text, x, y); - const height = ctx.measureText(this.text).height; - const { family, size, weight, style } = this.textFont; - const smallerFontSize = Font.scaleSize(size, 0.769231); - if (this.superscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.superscript, x + this.width + 2, y - height / 2.2); - } - if (this.subscript) { - ctx.setFont(family, smallerFontSize, weight, style); - ctx.fillText(this.subscript, x + this.width + 2, y + height / 2.2 - 1); - } - this.restoreStyle(ctx); - } - } -} -TextNote.TEXT_FONT = { - family: Font.SANS_SERIF, - size: 12, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, -}; -TextNote.Justification = TextJustification; diff --git a/build/esm/src/tickable.js b/build/esm/src/tickable.js deleted file mode 100644 index 48b67427b0..0000000000 --- a/build/esm/src/tickable.js +++ /dev/null @@ -1,214 +0,0 @@ -import { Element } from './element.js'; -import { Fraction } from './fraction.js'; -import { Tables } from './tables.js'; -import { defined, RuntimeError } from './util.js'; -export class Tickable extends Element { - static get CATEGORY() { - return "Tickable"; - } - constructor() { - super(); - this._preFormatted = false; - this._postFormatted = false; - this.ticks = new Fraction(0, 1); - this.intrinsicTicks = 0; - this.tickMultiplier = new Fraction(1, 1); - this.width = 0; - this.x_shift = 0; - this.modifiers = []; - this.tupletStack = []; - this.align_center = false; - this.center_x_shift = 0; - this.ignore_ticks = false; - this.formatterMetrics = { - freedom: { left: 0, right: 0 }, - duration: '', - iterations: 0, - space: { - used: 0, - mean: 0, - deviation: 0, - }, - }; - } - reset() { - return this; - } - getTicks() { - return this.ticks; - } - shouldIgnoreTicks() { - return this.ignore_ticks; - } - setIgnoreTicks(flag) { - this.ignore_ticks = flag; - return this; - } - setWidth(width) { - this.width = width; - } - getWidth() { - if (!this._preFormatted) { - throw new RuntimeError('UnformattedNote', "Can't call GetWidth on an unformatted note."); - } - return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0); - } - setXShift(x) { - this.x_shift = x; - return this; - } - getXShift() { - return this.x_shift; - } - getX() { - const tickContext = this.checkTickContext(`Can't getX() without a TickContext.`); - return tickContext.getX() + this.x_shift; - } - getFormatterMetrics() { - return this.formatterMetrics; - } - getCenterXShift() { - if (this.isCenterAligned()) { - return this.center_x_shift; - } - return 0; - } - setCenterXShift(centerXShift) { - this.center_x_shift = centerXShift; - return this; - } - isCenterAligned() { - return this.align_center; - } - setCenterAlignment(align_center) { - this.align_center = align_center; - return this; - } - getVoice() { - return defined(this.voice, 'NoVoice', 'Tickable has no voice.'); - } - setVoice(voice) { - this.voice = voice; - } - getTuplet() { - return this.tuplet; - } - getTupletStack() { - return this.tupletStack; - } - resetTuplet(tuplet) { - let noteCount; - let notesOccupied; - if (tuplet) { - const i = this.tupletStack.indexOf(tuplet); - if (i !== -1) { - this.tupletStack.splice(i, 1); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - while (this.tupletStack.length) { - tuplet = this.tupletStack.pop(); - noteCount = tuplet.getNoteCount(); - notesOccupied = tuplet.getNotesOccupied(); - this.applyTickMultiplier(noteCount, notesOccupied); - } - return this; - } - setTuplet(tuplet) { - if (tuplet) { - this.tupletStack.push(tuplet); - const noteCount = tuplet.getNoteCount(); - const notesOccupied = tuplet.getNotesOccupied(); - this.applyTickMultiplier(notesOccupied, noteCount); - } - this.tuplet = tuplet; - return this; - } - addToModifierContext(mc) { - this.modifierContext = mc; - for (let i = 0; i < this.modifiers.length; ++i) { - this.modifierContext.addMember(this.modifiers[i]); - } - this.modifierContext.addMember(this); - this._preFormatted = false; - return this; - } - addModifier(modifier, index = 0) { - this.modifiers.push(modifier); - this._preFormatted = false; - return this; - } - getModifiers() { - return this.modifiers; - } - setTickContext(tc) { - this.tickContext = tc; - this._preFormatted = false; - } - checkTickContext(message = 'Tickable has no tick context.') { - return defined(this.tickContext, 'NoTickContext', message); - } - preFormat() { - if (this._preFormatted) - return; - this.width = 0; - if (this.modifierContext) { - this.modifierContext.preFormat(); - this.width += this.modifierContext.getWidth(); - } - } - set preFormatted(value) { - this._preFormatted = value; - } - get preFormatted() { - return this._preFormatted; - } - postFormat() { - if (this._postFormatted) - return this; - this._postFormatted = true; - return this; - } - set postFormatted(value) { - this._postFormatted = value; - } - get postFormatted() { - return this._postFormatted; - } - getIntrinsicTicks() { - return this.intrinsicTicks; - } - setIntrinsicTicks(intrinsicTicks) { - this.intrinsicTicks = intrinsicTicks; - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - getTickMultiplier() { - return this.tickMultiplier; - } - applyTickMultiplier(numerator, denominator) { - this.tickMultiplier.multiply(numerator, denominator); - this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks); - } - setDuration(duration) { - const ticks = duration.numerator * (Tables.RESOLUTION / duration.denominator); - this.ticks = this.tickMultiplier.clone().multiply(ticks); - this.intrinsicTicks = this.ticks.value(); - } - getAbsoluteX() { - const tickContext = this.checkTickContext(`Can't getAbsoluteX() without a TickContext.`); - return tickContext.getX(); - } - setModifierContext(mc) { - this.modifierContext = mc; - return this; - } - getModifierContext() { - return this.modifierContext; - } - checkModifierContext() { - return defined(this.modifierContext, 'NoModifierContext', 'No modifier context attached to this tickable.'); - } -} diff --git a/build/esm/src/tickcontext.js b/build/esm/src/tickcontext.js deleted file mode 100644 index 4e281e369e..0000000000 --- a/build/esm/src/tickcontext.js +++ /dev/null @@ -1,170 +0,0 @@ -import { Fraction } from './fraction.js'; -import { RuntimeError } from './util.js'; -export class TickContext { - static getNextContext(tContext) { - const contexts = tContext.tContexts; - const index = contexts.indexOf(tContext); - if (index + 1 < contexts.length) - return contexts[index + 1]; - } - constructor(options) { - this.preFormatted = false; - this.postFormatted = false; - this.tickID = options && options.tickID ? options.tickID : 0; - this.currentTick = new Fraction(0, 1); - this.maxTicks = new Fraction(0, 1); - this.maxTickable = undefined; - this.minTicks = undefined; - this.minTickable = undefined; - this.padding = 1; - this.x = 0; - this.xBase = 0; - this.xOffset = 0; - this.tickables = []; - this.tickablesByVoice = {}; - this.notePx = 0; - this.glyphPx = 0; - this.leftDisplacedHeadPx = 0; - this.rightDisplacedHeadPx = 0; - this.modLeftPx = 0; - this.modRightPx = 0; - this.totalLeftPx = 0; - this.totalRightPx = 0; - this.tContexts = []; - this.width = 0; - this.formatterMetrics = { - freedom: { left: 0, right: 0 }, - }; - } - getTickID() { - return this.tickID; - } - getX() { - return this.x; - } - setX(x) { - this.x = x; - this.xBase = x; - this.xOffset = 0; - return this; - } - getXBase() { - return this.xBase; - } - setXBase(xBase) { - this.xBase = xBase; - this.x = xBase + this.xOffset; - } - getXOffset() { - return this.xOffset; - } - setXOffset(xOffset) { - this.xOffset = xOffset; - this.x = this.xBase + xOffset; - } - getWidth() { - return this.width + this.padding * 2; - } - setPadding(padding) { - this.padding = padding; - return this; - } - getMaxTicks() { - return this.maxTicks; - } - getMinTicks() { - return this.minTicks; - } - getMaxTickable() { - return this.maxTickable; - } - getMinTickable() { - return this.minTickable; - } - getTickables() { - return this.tickables; - } - getTickableForVoice(voiceIndex) { - return this.tickablesByVoice[voiceIndex]; - } - getTickablesByVoice() { - return this.tickablesByVoice; - } - getCenterAlignedTickables() { - return this.tickables.filter((tickable) => tickable.isCenterAligned()); - } - getMetrics() { - const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx, } = this; - return { - width, - glyphPx, - notePx, - leftDisplacedHeadPx, - rightDisplacedHeadPx, - modLeftPx, - modRightPx, - totalLeftPx, - totalRightPx, - }; - } - getCurrentTick() { - return this.currentTick; - } - setCurrentTick(tick) { - this.currentTick = tick; - this.preFormatted = false; - } - addTickable(tickable, voiceIndex) { - if (!tickable) { - throw new RuntimeError('BadArgument', 'Invalid tickable added.'); - } - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - if (ticks.greaterThan(this.maxTicks)) { - this.maxTicks = ticks.clone(); - this.maxTickable = tickable; - } - if (this.minTicks == null) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - else if (ticks.lessThan(this.minTicks)) { - this.minTicks = ticks.clone(); - this.minTickable = tickable; - } - } - tickable.setTickContext(this); - this.tickables.push(tickable); - this.tickablesByVoice[voiceIndex || 0] = tickable; - this.preFormatted = false; - return this; - } - preFormat() { - if (this.preFormatted) - return this; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - tickable.preFormat(); - const metrics = tickable.getMetrics(); - this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx); - this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx); - this.notePx = Math.max(this.notePx, metrics.notePx); - this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth || 0); - this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx); - this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx); - this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx); - this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx); - this.width = this.notePx + this.totalLeftPx + this.totalRightPx; - } - return this; - } - postFormat() { - if (this.postFormatted) - return this; - this.postFormatted = true; - return this; - } - getFormatterMetrics() { - return this.formatterMetrics; - } -} diff --git a/build/esm/src/timesigglyph.js b/build/esm/src/timesigglyph.js deleted file mode 100644 index 81fad8c19d..0000000000 --- a/build/esm/src/timesigglyph.js +++ /dev/null @@ -1,85 +0,0 @@ -import { Glyph } from './glyph.js'; -import { defined } from './util.js'; -export class TimeSignatureGlyph extends Glyph { - constructor(timeSignature, topDigits, botDigits, code, point, options) { - var _a; - super(code, point, options); - this.timeSignature = timeSignature; - this.topGlyphs = []; - this.botGlyphs = []; - let topWidth = 0; - for (let i = 0; i < topDigits.length; ++i) { - let timeSigType = topDigits[i]; - switch (topDigits[i]) { - case '-': - timeSigType = 'Minus'; - break; - case '+': - timeSigType = botDigits.length > 0 ? 'PlusSmall' : 'Plus'; - break; - case '(': - timeSigType = botDigits.length > 0 ? 'ParensLeftSmall' : 'ParensLeft'; - break; - case ')': - timeSigType = botDigits.length > 0 ? 'ParensRightSmall' : 'ParensRight'; - break; - } - const topGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.topGlyphs.push(topGlyph); - topWidth += (_a = topGlyph.getMetrics().width) !== null && _a !== void 0 ? _a : 0; - } - let botWidth = 0; - for (let i = 0; i < botDigits.length; ++i) { - let timeSigType = botDigits[i]; - switch (botDigits[i]) { - case '+': - timeSigType = 'PlusSmall'; - break; - case '(': - timeSigType = 'ParensLeftSmall'; - break; - case ')': - timeSigType = 'ParensRightSmall'; - break; - } - const botGlyph = new Glyph('timeSig' + timeSigType, this.timeSignature.point); - this.botGlyphs.push(botGlyph); - botWidth += defined(botGlyph.getMetrics().width); - } - this.width = Math.max(topWidth, botWidth); - this.xMin = this.getMetrics().x_min; - this.topStartX = (this.width - topWidth) / 2.0; - this.botStartX = (this.width - botWidth) / 2.0; - this.reset(); - } - getMetrics() { - return { - x_min: this.xMin, - x_max: this.xMin + this.width, - width: this.width, - }; - } - renderToStave(x) { - const stave = this.checkStave(); - const ctx = this.checkContext(); - let start_x = x + this.topStartX; - let y = 0; - if (this.botGlyphs.length > 0) - y = stave.getYForLine(this.timeSignature.topLine); - else - y = (stave.getYForLine(this.timeSignature.topLine) + stave.getYForLine(this.timeSignature.bottomLine)) / 2; - for (let i = 0; i < this.topGlyphs.length; ++i) { - const glyph = this.topGlyphs[i]; - Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + this.x_shift, y); - start_x += defined(glyph.getMetrics().width); - } - start_x = x + this.botStartX; - y = stave.getYForLine(this.timeSignature.bottomLine); - for (let i = 0; i < this.botGlyphs.length; ++i) { - const glyph = this.botGlyphs[i]; - this.timeSignature.placeGlyphOnLine(glyph, stave, this.timeSignature.getLine()); - Glyph.renderOutline(ctx, glyph.getMetrics().outline, this.scale, start_x + glyph.getMetrics().x_shift, y); - start_x += defined(glyph.getMetrics().width); - } - } -} diff --git a/build/esm/src/timesignature.js b/build/esm/src/timesignature.js deleted file mode 100644 index 9be44a584a..0000000000 --- a/build/esm/src/timesignature.js +++ /dev/null @@ -1,121 +0,0 @@ -import { Glyph } from './glyph.js'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier.js'; -import { Tables } from './tables.js'; -import { TimeSignatureGlyph } from './timesigglyph.js'; -import { defined, RuntimeError } from './util.js'; -const assertIsValidTimeSig = (timeSpec) => { - const numbers = timeSpec.split('/'); - if (numbers.length !== 2 && numbers[0] !== '+' && numbers[0] !== '-') { - throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must be in the form "/"`); - } - numbers.forEach((number) => { - if (/^[0-9+\-()]+$/.test(number) == false) { - throw new RuntimeError('BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain valid signatures.`); - } - }); -}; -export class TimeSignature extends StaveModifier { - static get CATEGORY() { - return "TimeSignature"; - } - static get glyphs() { - return { - C: { - code: 'timeSigCommon', - point: 40, - line: 2, - }, - 'C|': { - code: 'timeSigCutCommon', - point: 40, - line: 2, - }, - }; - } - constructor(timeSpec = '4/4', customPadding = 15, validate_args = true) { - super(); - this.timeSpec = '4/4'; - this.line = 0; - this.is_numeric = true; - this.validate_args = validate_args; - const padding = customPadding; - const musicFont = Tables.currentMusicFont(); - this.point = musicFont.lookupMetric('digits.point'); - const fontLineShift = musicFont.lookupMetric('digits.shiftLine', 0); - this.topLine = 2 + fontLineShift; - this.bottomLine = 4 + fontLineShift; - this.setPosition(StaveModifierPosition.BEGIN); - this.setTimeSig(timeSpec); - this.setPadding(padding); - } - parseTimeSpec(timeSpec) { - var _a, _b; - if (timeSpec === 'C' || timeSpec === 'C|') { - const { line, code, point } = TimeSignature.glyphs[timeSpec]; - return { - line, - num: false, - glyph: new Glyph(code, point), - }; - } - if (this.validate_args) { - assertIsValidTimeSig(timeSpec); - } - const parts = timeSpec.split('/'); - return { - line: 0, - num: true, - glyph: this.makeTimeSignatureGlyph((_a = parts[0]) !== null && _a !== void 0 ? _a : '', (_b = parts[1]) !== null && _b !== void 0 ? _b : ''), - }; - } - makeTimeSignatureGlyph(topDigits, botDigits) { - return new TimeSignatureGlyph(this, topDigits, botDigits, 'timeSig0', this.point); - } - getInfo() { - const { line, is_numeric, glyph } = this; - return { line, num: is_numeric, glyph }; - } - setTimeSig(timeSpec) { - this.timeSpec = timeSpec; - const info = this.parseTimeSpec(timeSpec); - this.setGlyph(info.glyph); - this.is_numeric = info.num; - this.line = info.line; - return this; - } - getTimeSpec() { - return this.timeSpec; - } - getLine() { - return this.line; - } - setLine(line) { - this.line = line; - } - getGlyph() { - return this.glyph; - } - setGlyph(glyph) { - this.glyph = glyph; - this.setWidth(defined(this.glyph.getMetrics().width)); - } - getIsNumeric() { - return this.is_numeric; - } - setIsNumeric(isNumeric) { - this.is_numeric = isNumeric; - } - draw() { - const stave = this.checkStave(); - const ctx = stave.checkContext(); - this.setRendered(); - this.applyStyle(ctx); - ctx.openGroup('timesignature', this.getAttribute('id')); - this.glyph.setStave(stave); - this.glyph.setContext(ctx); - this.placeGlyphOnLine(this.glyph, stave, this.line); - this.glyph.renderToStave(this.x); - ctx.closeGroup(); - this.restoreStyle(ctx); - } -} diff --git a/build/esm/src/timesignote.js b/build/esm/src/timesignote.js deleted file mode 100644 index bf55236ec5..0000000000 --- a/build/esm/src/timesignote.js +++ /dev/null @@ -1,32 +0,0 @@ -import { Note } from './note.js'; -import { TimeSignature } from './timesignature.js'; -export class TimeSigNote extends Note { - static get CATEGORY() { - return "TimeSigNote"; - } - constructor(timeSpec, customPadding) { - super({ duration: 'b' }); - this.timeSig = new TimeSignature(timeSpec, customPadding); - this.setWidth(this.timeSig.getGlyph().getMetrics().width); - this.ignore_ticks = true; - } - addToModifierContext(mc) { - return this; - } - preFormat() { - this.preFormatted = true; - return this; - } - draw() { - const stave = this.checkStave(); - const ctx = this.checkContext(); - this.setRendered(); - const tsGlyph = this.timeSig.getGlyph(); - if (!tsGlyph.getContext()) { - tsGlyph.setContext(ctx); - } - tsGlyph.setStave(stave); - tsGlyph.setYShift(stave.getYForLine(2) - stave.getYForGlyphs()); - tsGlyph.renderToStave(this.getAbsoluteX()); - } -} diff --git a/build/esm/src/tremolo.js b/build/esm/src/tremolo.js deleted file mode 100644 index b1232171e6..0000000000 --- a/build/esm/src/tremolo.js +++ /dev/null @@ -1,47 +0,0 @@ -import { Glyph } from './glyph.js'; -import { GraceNote } from './gracenote.js'; -import { Modifier } from './modifier.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { isGraceNote } from './typeguard.js'; -export class Tremolo extends Modifier { - static get CATEGORY() { - return "Tremolo"; - } - constructor(num) { - super(); - this.num = num; - this.position = Modifier.Position.CENTER; - this.code = 'tremolo1'; - this.y_spacing_scale = 1; - this.extra_stroke_scale = 1; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const stemDirection = note.getStemDirection(); - const start = note.getModifierStartXY(this.position, this.index); - let x = start.x; - const gn = isGraceNote(note); - const scale = gn ? GraceNote.SCALE : 1; - const category = `tremolo.${gn ? 'grace' : 'default'}`; - const musicFont = Tables.currentMusicFont(); - let y_spacing = musicFont.lookupMetric(`${category}.spacing`) * stemDirection; - y_spacing *= this.y_spacing_scale; - const height = this.num * y_spacing; - let y = note.getStemExtents().baseY - height; - if (stemDirection < 0) { - y += musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale; - } - else { - y += musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale; - } - const fontScale = musicFont.lookupMetric(`${category}.point`); - x += musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`); - for (let i = 0; i < this.num; ++i) { - Glyph.renderGlyph(ctx, x, y, fontScale, this.code, { category, scale: this.extra_stroke_scale }); - y += y_spacing; - } - } -} diff --git a/build/esm/src/tuning.js b/build/esm/src/tuning.js deleted file mode 100644 index 616edd9292..0000000000 --- a/build/esm/src/tuning.js +++ /dev/null @@ -1,55 +0,0 @@ -import { Tables } from './tables.js'; -import { RuntimeError } from './util.js'; -export class Tuning { - static get names() { - return { - standard: 'E/5,B/4,G/4,D/4,A/3,E/3', - dagdad: 'D/5,A/4,G/4,D/4,A/3,D/3', - dropd: 'E/5,B/4,G/4,D/4,A/3,D/3', - eb: 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3', - standardBanjo: 'D/5,B/4,G/4,D/4,G/5', - }; - } - constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') { - this.tuningValues = []; - this.setTuning(tuningString); - } - noteToInteger(noteString) { - var _a; - return (_a = Tables.keyProperties(noteString).int_value) !== null && _a !== void 0 ? _a : -1; - } - setTuning(tuningString) { - if (Tuning.names[tuningString]) { - tuningString = Tuning.names[tuningString]; - } - this.tuningValues = []; - const keys = tuningString.split(/\s*,\s*/); - if (keys.length === 0) { - throw new RuntimeError('BadArguments', `Invalid tuning string: ${tuningString}`); - } - for (let i = 0; i < keys.length; ++i) { - this.tuningValues[i] = this.noteToInteger(keys[i]); - } - } - getValueForString(stringNum) { - const s = Number(stringNum); - if (s < 1 || s > this.tuningValues.length) { - throw new RuntimeError('BadArguments', `String number must be between 1 and ${this.tuningValues.length}:${stringNum}`); - } - return this.tuningValues[s - 1]; - } - getValueForFret(fretNum, stringNum) { - const stringValue = this.getValueForString(stringNum); - const f = Number(fretNum); - if (f < 0) { - throw new RuntimeError('BadArguments', `Fret number must be 0 or higher: ${fretNum}`); - } - return stringValue + f; - } - getNoteForFret(fretNum, stringNum) { - const noteValue = this.getValueForFret(fretNum, stringNum); - const octave = Math.floor(noteValue / 12); - const value = noteValue % 12; - return `${Tables.integerToNote(value)}/${octave}`; - } -} diff --git a/build/esm/src/tuplet.js b/build/esm/src/tuplet.js deleted file mode 100644 index 173e51ce76..0000000000 --- a/build/esm/src/tuplet.js +++ /dev/null @@ -1,243 +0,0 @@ -import { Element } from './element.js'; -import { Formatter } from './formatter.js'; -import { Glyph } from './glyph.js'; -import { Stem } from './stem.js'; -import { Tables } from './tables.js'; -import { defined, RuntimeError } from './util.js'; -export class Tuplet extends Element { - static get CATEGORY() { - return "Tuplet"; - } - static get LOCATION_TOP() { - return 1; - } - static get LOCATION_BOTTOM() { - return -1; - } - static get NESTING_OFFSET() { - return 15; - } - static get metrics() { - const tupletMetrics = Tables.currentMusicFont().getMetrics().tuplet; - if (!tupletMetrics) - throw new RuntimeError('BadMetrics', `tuplet missing`); - return tupletMetrics; - } - constructor(notes, options = {}) { - super(); - this.numerator_glyphs = []; - this.denom_glyphs = []; - if (!notes || !notes.length) { - throw new RuntimeError('BadArguments', 'No notes provided for tuplet.'); - } - this.options = options; - this.notes = notes; - this.num_notes = this.options.num_notes != undefined ? this.options.num_notes : notes.length; - if (this.options.beats_occupied) { - this.beatsOccupiedDeprecationWarning(); - } - this.notes_occupied = this.options.notes_occupied || this.options.beats_occupied || 2; - if (this.options.bracketed != undefined) { - this.bracketed = this.options.bracketed; - } - else { - this.bracketed = notes.some((note) => !note.hasBeam()); - } - this.ratioed = - this.options.ratioed != undefined ? this.options.ratioed : Math.abs(this.notes_occupied - this.num_notes) > 1; - this.point = Tables.currentMusicFont().lookupMetric('digits.tupletPoint'); - this.y_pos = 16; - this.x_pos = 100; - this.width = 200; - this.setTupletLocation(this.options.location || Tuplet.LOCATION_TOP); - Formatter.AlignRestsToNotes(notes, true, true); - this.resolveGlyphs(); - this.attach(); - } - attach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.setTuplet(this); - } - } - detach() { - for (let i = 0; i < this.notes.length; i++) { - const note = this.notes[i]; - note.resetTuplet(this); - } - } - setBracketed(bracketed) { - this.bracketed = !!bracketed; - return this; - } - setRatioed(ratioed) { - this.ratioed = !!ratioed; - return this; - } - setTupletLocation(location) { - if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) { - console.warn(`Invalid tuplet location [${location}]. Using Tuplet.LOCATION_TOP.`); - location = Tuplet.LOCATION_TOP; - } - this.location = location; - return this; - } - getNotes() { - return this.notes; - } - getNoteCount() { - return this.num_notes; - } - beatsOccupiedDeprecationWarning() { - console.warn('beats_occupied has been deprecated as an option for tuplets. Please use notes_occupied instead.', 'Calls to getBeatsOccupied / setBeatsOccupied should now be routed to getNotesOccupied / setNotesOccupied.', 'The old methods will be removed in VexFlow 5.0.'); - } - getBeatsOccupied() { - this.beatsOccupiedDeprecationWarning(); - return this.getNotesOccupied(); - } - setBeatsOccupied(beats) { - this.beatsOccupiedDeprecationWarning(); - return this.setNotesOccupied(beats); - } - getNotesOccupied() { - return this.notes_occupied; - } - setNotesOccupied(notes) { - this.detach(); - this.notes_occupied = notes; - this.resolveGlyphs(); - this.attach(); - } - resolveGlyphs() { - this.numerator_glyphs = []; - let n = this.num_notes; - while (n >= 1) { - this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - this.denom_glyphs = []; - n = this.notes_occupied; - while (n >= 1) { - this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point)); - n = parseInt((n / 10).toString(), 10); - } - } - getNestedTupletCount() { - const location = this.location; - const first_note = this.notes[0]; - let maxTupletCount = countTuplets(first_note, location); - let minTupletCount = countTuplets(first_note, location); - function countTuplets(note, location) { - return note.getTupletStack().filter((tuplet) => tuplet.location === location).length; - } - this.notes.forEach((note) => { - const tupletCount = countTuplets(note, location); - maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount; - minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount; - }); - return maxTupletCount - minTupletCount; - } - getYPosition() { - const nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; - const y_offset = this.options.y_offset || 0; - const first_note = this.notes[0]; - let y_pos; - if (this.location === Tuplet.LOCATION_TOP) { - y_pos = first_note.checkStave().getYForLine(0) - Tuplet.metrics.topModifierOffset; - for (let i = 0; i < this.notes.length; ++i) { - const note = this.notes[i]; - let modLines = 0; - const mc = note.getModifierContext(); - if (mc) { - modLines = Math.max(modLines, mc.getState().top_text_line); - } - const modY = note.getYForTopText(modLines) - Tuplet.metrics.noteHeadOffset; - if (note.hasStem() || note.isRest()) { - const top_y = note.getStemDirection() === Stem.UP - ? note.getStemExtents().topY - Tuplet.metrics.stemOffset - : note.getStemExtents().baseY - Tuplet.metrics.noteHeadOffset; - y_pos = Math.min(top_y, y_pos); - if (modLines > 0) { - y_pos = Math.min(modY, y_pos); - } - } - } - } - else { - let lineCheck = Tuplet.metrics.bottomLine; - this.notes.forEach((nn) => { - const mc = nn.getModifierContext(); - if (mc) { - lineCheck = Math.max(lineCheck, mc.getState().text_line + 1); - } - }); - y_pos = first_note.checkStave().getYForLine(lineCheck) + Tuplet.metrics.noteHeadOffset; - for (let i = 0; i < this.notes.length; ++i) { - if (this.notes[i].hasStem() || this.notes[i].isRest()) { - const bottom_y = this.notes[i].getStemDirection() === Stem.UP - ? this.notes[i].getStemExtents().baseY + Tuplet.metrics.noteHeadOffset - : this.notes[i].getStemExtents().topY + Tuplet.metrics.stemOffset; - if (bottom_y > y_pos) { - y_pos = bottom_y; - } - } - } - } - return y_pos + nested_tuplet_y_offset + y_offset; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const first_note = this.notes[0]; - const last_note = this.notes[this.notes.length - 1]; - if (!this.bracketed) { - this.x_pos = first_note.getStemX(); - this.width = last_note.getStemX() - this.x_pos; - } - else { - this.x_pos = first_note.getTieLeftX() - 5; - this.width = last_note.getTieRightX() - this.x_pos + 5; - } - this.y_pos = this.getYPosition(); - const addGlyphWidth = (width, glyph) => width + defined(glyph.getMetrics().width); - let width = this.numerator_glyphs.reduce(addGlyphWidth, 0); - if (this.ratioed) { - width = this.denom_glyphs.reduce(addGlyphWidth, width); - width += this.point * 0.32; - } - const notation_center_x = this.x_pos + this.width / 2; - const notation_start_x = notation_center_x - width / 2; - if (this.bracketed) { - const line_width = this.width / 2 - width / 2 - 5; - if (line_width > 0) { - ctx.fillRect(this.x_pos, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1); - ctx.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - ctx.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM ? 1 : 0), 1, this.location * 10); - } - } - const shiftY = Tables.currentMusicFont().lookupMetric('digits.shiftY', 0); - let x_offset = 0; - this.numerator_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += defined(glyph.getMetrics().width); - }); - if (this.ratioed) { - const colon_x = notation_start_x + x_offset + this.point * 0.16; - const colon_radius = this.point * 0.06; - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - ctx.beginPath(); - ctx.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, false); - ctx.closePath(); - ctx.fill(); - x_offset += this.point * 0.32; - this.denom_glyphs.forEach((glyph) => { - glyph.render(ctx, notation_start_x + x_offset, this.y_pos + this.point / 3 - 2 + shiftY); - x_offset += defined(glyph.getMetrics().width); - }); - } - } -} diff --git a/build/esm/src/typeguard.js b/build/esm/src/typeguard.js deleted file mode 100644 index bc5cfbd703..0000000000 --- a/build/esm/src/typeguard.js +++ /dev/null @@ -1,30 +0,0 @@ -export function isCategory(obj, category, checkAncestors = true) { - if (typeof obj !== 'object' || obj === null) { - return false; - } - let constructorFcn = obj.constructor; - if (checkAncestors) { - while (obj !== null) { - constructorFcn = obj.constructor; - if ('CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category) { - return true; - } - obj = Object.getPrototypeOf(obj); - } - return false; - } - else { - return 'CATEGORY' in constructorFcn && constructorFcn.CATEGORY === category; - } -} -export const isAccidental = (obj) => isCategory(obj, "Accidental"); -export const isAnnotation = (obj) => isCategory(obj, "Annotation"); -export const isBarline = (obj) => isCategory(obj, "Barline"); -export const isDot = (obj) => isCategory(obj, "Dot"); -export const isGraceNote = (obj) => isCategory(obj, "GraceNote"); -export const isGraceNoteGroup = (obj) => isCategory(obj, "GraceNoteGroup"); -export const isNote = (obj) => isCategory(obj, "Note"); -export const isRenderContext = (obj) => isCategory(obj, "RenderContext"); -export const isStaveNote = (obj) => isCategory(obj, "StaveNote"); -export const isStemmableNote = (obj) => isCategory(obj, "StemmableNote"); -export const isTabNote = (obj) => isCategory(obj, "TabNote"); diff --git a/build/esm/src/util.js b/build/esm/src/util.js deleted file mode 100644 index 812b789577..0000000000 --- a/build/esm/src/util.js +++ /dev/null @@ -1,61 +0,0 @@ -export class RuntimeError extends Error { - constructor(code, message = '') { - super('[RuntimeError] ' + code + ': ' + message); - this.code = code; - } -} -export function globalObject() { - if (typeof globalThis !== 'undefined') { - return globalThis; - } - if (typeof self !== 'undefined') { - return self; - } - if (typeof window !== 'undefined') { - return window; - } - if (typeof global !== 'undefined') { - return global; - } - return Function('return this')(); -} -export function defined(x, code = 'undefined', message = '') { - if (x === undefined) { - throw new RuntimeError(code, message); - } - return x; -} -export function log(block, ...args) { - if (!args) - return; - const line = Array.prototype.slice.call(args).join(' '); - globalObject().console.log(block + ': ' + line); -} -export function warn(...args) { - const line = args.join(' '); - const err = new Error(); - globalObject().console.log('Warning: ', line, err.stack); -} -function roundN(x, n) { - return x % n >= n / 2 ? parseInt(`${x / n}`, 10) * n + n : parseInt(`${x / n}`, 10) * n; -} -export function midLine(a, b) { - let mid_line = b + (a - b) / 2; - if (mid_line % 2 > 0) { - mid_line = roundN(mid_line * 10, 5) / 10; - } - return mid_line; -} -export function prefix(text) { - return `vf-${text}`; -} -export function normalizeAngle(a) { - a = a % (2 * Math.PI); - if (a < 0) { - a += 2 * Math.PI; - } - return a; -} -export function sumArray(arr) { - return arr.reduce((a, b) => a + b, 0); -} diff --git a/build/esm/src/version.js b/build/esm/src/version.js deleted file mode 100644 index dd84b0080a..0000000000 --- a/build/esm/src/version.js +++ /dev/null @@ -1,3 +0,0 @@ -export const VERSION = '4.2.0-beta.1'; -export const ID = '0882a0dadf7dc89b98f0b26593d26ed4d8e34341'; -export const DATE = '2023-01-10T00:21:01.976Z'; \ No newline at end of file diff --git a/build/esm/src/vex.js b/build/esm/src/vex.js deleted file mode 100644 index fbb7026a5b..0000000000 --- a/build/esm/src/vex.js +++ /dev/null @@ -1,51 +0,0 @@ -import { Flow } from './flow.js'; -import { log, RuntimeError } from './util.js'; -export class Vex { - static sortAndUnique(arr, cmp, eq) { - if (arr.length > 1) { - const newArr = []; - let last; - arr.sort(cmp); - for (let i = 0; i < arr.length; ++i) { - if (i === 0 || !eq(arr[i], last)) { - newArr.push(arr[i]); - } - last = arr[i]; - } - return newArr; - } - else { - return arr; - } - } - static contains(arr, obj) { - let i = arr.length; - while (i--) { - if (arr[i] === obj) { - return true; - } - } - return false; - } - static getCanvasContext(canvasSelector) { - if (!canvasSelector) { - throw new RuntimeError('BadArgument', 'Invalid canvas selector: ' + canvasSelector); - } - const canvas = document.getElementById(canvasSelector); - if (!(canvas && canvas.getContext)) { - throw new RuntimeError('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'); - } - return canvas.getContext('2d'); - } - static benchmark(s, f) { - const start_time = new Date().getTime(); - f(); - const elapsed = new Date().getTime() - start_time; - log(s, elapsed + 'ms'); - } - static stackTrace() { - const err = new Error(); - return err.stack; - } -} -Vex.Flow = Flow; diff --git a/build/esm/src/vibrato.js b/build/esm/src/vibrato.js deleted file mode 100644 index 36bbb54258..0000000000 --- a/build/esm/src/vibrato.js +++ /dev/null @@ -1,100 +0,0 @@ -import { Bend } from './bend.js'; -import { Modifier } from './modifier.js'; -import { Tables } from './tables.js'; -export class Vibrato extends Modifier { - static get CATEGORY() { - return "Vibrato"; - } - static format(vibratos, state, context) { - if (!vibratos || vibratos.length === 0) - return false; - let text_line = state.top_text_line; - let width = 0; - let shift = state.right_shift - 7; - const bends = context.getMembers(Bend.CATEGORY); - if (bends && bends.length > 0) { - const bendHeight = bends.map((bb) => bb.getTextHeight()).reduce((a, b) => (a > b ? a : b)) / Tables.STAVE_LINE_DISTANCE; - text_line = text_line - (bendHeight + 1); - } - else { - state.top_text_line += 1; - } - for (let i = 0; i < vibratos.length; ++i) { - const vibrato = vibratos[i]; - vibrato.setXShift(shift); - vibrato.setTextLine(text_line); - width += vibrato.getWidth(); - shift += width; - } - state.right_shift += width; - return true; - } - constructor() { - super(); - this.position = Modifier.Position.RIGHT; - this.render_options = { - harsh: false, - vibrato_width: 20, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - }; - this.setVibratoWidth(this.render_options.vibrato_width); - } - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - setVibratoWidth(width) { - this.render_options.vibrato_width = width; - this.setWidth(width); - return this; - } - draw() { - const ctx = this.checkContext(); - const note = this.checkAttachedNote(); - this.setRendered(); - const start = note.getModifierStartXY(Modifier.Position.RIGHT, this.index); - const vx = start.x + this.x_shift; - const vy = note.getYForTopText(this.text_line) + 2; - Vibrato.renderVibrato(ctx, vx, vy, this.render_options); - } - static renderVibrato(ctx, x, y, opts) { - const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts; - const num_waves = vibrato_width / wave_width; - ctx.beginPath(); - let i; - if (harsh) { - ctx.moveTo(x, y + wave_girth + 1); - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x + wave_width, y - wave_height / 2); - x += wave_width; - ctx.lineTo(x + wave_width, y + wave_height / 2); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.lineTo(x - wave_width, y - wave_height / 2 + wave_girth + 1); - x -= wave_width; - ctx.lineTo(x - wave_width, y + wave_height / 2 + wave_girth + 1); - x -= wave_width; - } - ctx.fill(); - } - else { - ctx.moveTo(x, y + wave_girth); - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x + wave_width / 2, y - wave_height / 2, x + wave_width, y); - x += wave_width; - ctx.quadraticCurveTo(x + wave_width / 2, y + wave_height / 2, x + wave_width, y); - x += wave_width; - } - for (i = 0; i < num_waves / 2; ++i) { - ctx.quadraticCurveTo(x - wave_width / 2, y + wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - ctx.quadraticCurveTo(x - wave_width / 2, y - wave_height / 2 + wave_girth, x - wave_width, y + wave_girth); - x -= wave_width; - } - ctx.fill(); - } - } -} diff --git a/build/esm/src/vibratobracket.js b/build/esm/src/vibratobracket.js deleted file mode 100644 index 8c8b86b6db..0000000000 --- a/build/esm/src/vibratobracket.js +++ /dev/null @@ -1,50 +0,0 @@ -import { Element } from './element.js'; -import { log } from './util.js'; -import { Vibrato } from './vibrato.js'; -function L(...args) { - if (VibratoBracket.DEBUG) - log('Vex.Flow.VibratoBracket', args); -} -export class VibratoBracket extends Element { - static get CATEGORY() { - return "VibratoBracket"; - } - constructor(bracket_data) { - super(); - if (bracket_data.start) - this.start = bracket_data.start; - if (bracket_data.stop) - this.stop = bracket_data.stop; - this.line = 1; - this.render_options = { - harsh: false, - wave_height: 6, - wave_width: 4, - wave_girth: 2, - vibrato_width: 0, - }; - } - setLine(line) { - this.line = line; - return this; - } - setHarsh(harsh) { - this.render_options.harsh = harsh; - return this; - } - draw() { - const ctx = this.checkContext(); - this.setRendered(); - const y = (this.start && this.start.checkStave().getYForTopText(this.line)) || - (this.stop && this.stop.checkStave().getYForTopText(this.line)) || - 0; - const start_x = (this.start && this.start.getAbsoluteX()) || (this.stop && this.stop.checkStave().getTieStartX()) || 0; - const stop_x = (this.stop && this.stop.getAbsoluteX() - this.stop.getWidth() - 5) || - (this.start && this.start.checkStave().getTieEndX() - 10) || - 0; - this.render_options.vibrato_width = stop_x - start_x; - L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y); - Vibrato.renderVibrato(ctx, start_x, y, this.render_options); - } -} -VibratoBracket.DEBUG = false; diff --git a/build/esm/src/voice.js b/build/esm/src/voice.js deleted file mode 100644 index 1ca8752608..0000000000 --- a/build/esm/src/voice.js +++ /dev/null @@ -1,191 +0,0 @@ -import { Element } from './element.js'; -import { Fraction } from './fraction.js'; -import { Tables } from './tables.js'; -import { defined, RuntimeError, sumArray } from './util.js'; -export var VoiceMode; -(function (VoiceMode) { - VoiceMode[VoiceMode["STRICT"] = 1] = "STRICT"; - VoiceMode[VoiceMode["SOFT"] = 2] = "SOFT"; - VoiceMode[VoiceMode["FULL"] = 3] = "FULL"; -})(VoiceMode || (VoiceMode = {})); -export class Voice extends Element { - static get CATEGORY() { - return "Voice"; - } - static get Mode() { - return VoiceMode; - } - constructor(time) { - super(); - this.resolutionMultiplier = 1; - this.mode = VoiceMode.STRICT; - this.preFormatted = false; - this.ticksUsed = new Fraction(0, 1); - this.largestTickWidth = 0; - this.tickables = []; - this.options = { - softmaxFactor: Tables.SOFTMAX_FACTOR, - }; - let voiceTime; - if (typeof time === 'string') { - const match = time.match(/(\d+)\/(\d+)/); - if (match) { - voiceTime = { - num_beats: parseInt(match[1]), - beat_value: parseInt(match[2]), - }; - } - } - else { - voiceTime = time; - } - this.time = Object.assign({ num_beats: 4, beat_value: 4, resolution: Tables.RESOLUTION }, voiceTime); - this.totalTicks = new Fraction(this.time.num_beats * (this.time.resolution / this.time.beat_value), 1); - this.smallestTickCount = this.totalTicks.clone(); - } - getTotalTicks() { - return this.totalTicks; - } - getTicksUsed() { - return this.ticksUsed; - } - getLargestTickWidth() { - return this.largestTickWidth; - } - getSmallestTickCount() { - return this.smallestTickCount; - } - getTickables() { - return this.tickables; - } - getMode() { - return this.mode; - } - setMode(mode) { - this.mode = mode; - return this; - } - getResolutionMultiplier() { - return this.resolutionMultiplier; - } - getActualResolution() { - return this.resolutionMultiplier * this.time.resolution; - } - setStave(stave) { - this.stave = stave; - this.boundingBox = undefined; - return this; - } - getStave() { - return this.stave; - } - getBoundingBox() { - if (!this.boundingBox) { - const stave = this.checkStave(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - if (!tickable.getStave()) - tickable.setStave(stave); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - } - this.boundingBox = boundingBox; - } - return this.boundingBox; - } - setStrict(strict) { - this.mode = strict ? VoiceMode.STRICT : VoiceMode.SOFT; - return this; - } - isComplete() { - if (this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) { - return this.ticksUsed.equals(this.totalTicks); - } - else { - return true; - } - } - setSoftmaxFactor(factor) { - this.options.softmaxFactor = factor; - this.expTicksUsed = 0; - return this; - } - reCalculateExpTicksUsed() { - const totalTicks = this.ticksUsed.value(); - const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks); - this.expTicksUsed = sumArray(this.tickables.map(exp)); - return this.expTicksUsed; - } - softmax(tickValue) { - if (!this.expTicksUsed) { - this.expTicksUsed = this.reCalculateExpTicksUsed(); - } - const totalTicks = this.ticksUsed.value(); - const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks); - const sm = exp(tickValue) / this.expTicksUsed; - return sm; - } - addTickable(tickable) { - if (!tickable.shouldIgnoreTicks()) { - const ticks = tickable.getTicks(); - this.ticksUsed.add(ticks); - this.expTicksUsed = 0; - if ((this.mode === VoiceMode.STRICT || this.mode === VoiceMode.FULL) && - this.ticksUsed.greaterThan(this.totalTicks)) { - this.ticksUsed.subtract(ticks); - throw new RuntimeError('BadArgument', 'Too many ticks.'); - } - if (ticks.lessThan(this.smallestTickCount)) { - this.smallestTickCount = ticks.clone(); - } - this.resolutionMultiplier = this.ticksUsed.denominator; - this.totalTicks.add(0, this.ticksUsed.denominator); - } - this.tickables.push(tickable); - tickable.setVoice(this); - return this; - } - addTickables(tickables) { - for (let i = 0; i < tickables.length; ++i) { - this.addTickable(tickables[i]); - } - return this; - } - preFormat() { - if (this.preFormatted) - return this; - const stave = this.checkStave(); - this.tickables.forEach((tickable) => { - if (!tickable.getStave()) { - tickable.setStave(stave); - } - }); - this.preFormatted = true; - return this; - } - checkStave() { - return defined(this.stave, 'NoStave', 'No stave attached to instance.'); - } - draw(context = this.checkContext(), stave) { - stave = stave !== null && stave !== void 0 ? stave : this.stave; - this.setRendered(); - let boundingBox = undefined; - for (let i = 0; i < this.tickables.length; ++i) { - const tickable = this.tickables[i]; - if (stave) { - tickable.setStave(stave); - } - defined(tickable.getStave(), 'MissingStave', 'The voice cannot draw tickables without staves.'); - const bb = tickable.getBoundingBox(); - if (bb) { - boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb; - } - tickable.setContext(context); - tickable.drawWithStyle(); - } - this.boundingBox = boundingBox; - } -} diff --git a/build/esm/src/web.js b/build/esm/src/web.js deleted file mode 100644 index f27804df9c..0000000000 --- a/build/esm/src/web.js +++ /dev/null @@ -1,15 +0,0 @@ -import { globalObject } from './util.js'; -export function isHTMLCanvas(element) { - if (!element) - return false; - const global = globalObject(); - return ((typeof global.HTMLCanvasElement === 'function' && element instanceof global.HTMLCanvasElement) || - (typeof element.getContext === 'function' && typeof element.toDataURL === 'function')); -} -export function isHTMLDiv(element) { - if (!element) - return false; - const global = globalObject(); - return ((typeof global.HTMLDivElement === 'function' && element instanceof global.HTMLDivElement) || - (typeof element.appendChild === 'function' && typeof element.style === 'object')); -} diff --git a/build/esm/tests/accidental_tests.js b/build/esm/tests/accidental_tests.js deleted file mode 100644 index fd374f8050..0000000000 --- a/build/esm/tests/accidental_tests.js +++ /dev/null @@ -1,974 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Beam } from '../src/beam.js'; -import { Dot } from '../src/dot.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { ModifierContext } from '../src/modifiercontext.js'; -import { Note } from '../src/note.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Stem } from '../src/stem.js'; -import { TickContext } from '../src/tickcontext.js'; -import { TimeSigNote } from '../src/timesignote.js'; -import { isAccidental } from '../src/typeguard.js'; -import { Voice } from '../src/voice.js'; -const AccidentalTests = { - Start() { - QUnit.module('Accidental'); - test('Automatic Accidentals - Simple Tests', autoAccidentalWorking); - const run = VexFlowTests.runTests; - run('Accidental Padding', formatAccidentalSpaces); - run('Basic', basic); - run('Stem Down', basicStemDown); - run('Cautionary Accidental', cautionary); - run('Accidental Arrangement Special Cases', specialCases); - run('Multi Voice', multiVoice); - run('Microtonal', microtonal); - run('Microtonal (Iranian)', microtonal_iranian); - run('Sagittal', sagittal); - run('Automatic Accidentals', automaticAccidentals0); - run('Automatic Accidentals - C major scale in Ab', automaticAccidentals1); - run('Automatic Accidentals - No Accidentals Necessary', automaticAccidentals2); - run('Automatic Accidentals - No Accidentals Necessary (EasyScore)', automaticAccidentals3); - run('Automatic Accidentals - Multi Voice Inline', automaticAccidentalsMultiVoiceInline); - run('Automatic Accidentals - Multi Voice Offset', automaticAccidentalsMultiVoiceOffset); - run('Automatic Accidentals - Key C, Single Octave', automaticAccidentalsCornerCases1); - run('Automatic Accidentals - Key C, Two Octaves', automaticAccidentalsCornerCases2); - run('Automatic Accidentals - Key C#, Single Octave', automaticAccidentalsCornerCases3); - run('Automatic Accidentals - Key C#, Two Octaves', automaticAccidentalsCornerCases4); - run('Factory API', factoryAPI); - }, -}; -function hasAccidental(note) { - return note.getModifiers().some((modifier) => isAccidental(modifier)); -} -function makeNewAccid(factory) { - return (type) => factory.Accidental({ type }); -} -function autoAccidentalWorking() { - const createStaveNote = (noteStruct) => new StaveNote(noteStruct); - let notes = [ - { keys: ['bb/4'], duration: '4' }, - { keys: ['bb/4'], duration: '4' }, - { keys: ['g#/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['a#/4'], duration: '4' }, - { keys: ['g#/4'], duration: '4' }, - ].map(createStaveNote); - let voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'F'); - equal(hasAccidental(notes[0]), false, 'No flat because of key signature'); - equal(hasAccidental(notes[1]), false, 'No flat because of key signature'); - equal(hasAccidental(notes[2]), true, 'Added a sharp'); - equal(hasAccidental(notes[3]), true, 'Back to natural'); - equal(hasAccidental(notes[4]), true, 'Back to natural'); - equal(hasAccidental(notes[5]), false, 'Natural remembered'); - equal(hasAccidental(notes[6]), true, 'Added sharp'); - equal(hasAccidental(notes[7]), true, 'Added sharp'); - notes = [ - { keys: ['e#/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['fb/4'], duration: '4' }, - { keys: ['b#/4'], duration: '4' }, - { keys: ['b#/4'], duration: '4' }, - { keys: ['cb/5'], duration: '4' }, - { keys: ['fb/5'], duration: '4' }, - { keys: ['e#/4'], duration: '4' }, - ].map(createStaveNote); - voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'A'); - equal(hasAccidental(notes[0]), true, 'Added sharp'); - equal(hasAccidental(notes[1]), true, 'Added flat'); - equal(hasAccidental(notes[2]), true, 'Added flat'); - equal(hasAccidental(notes[3]), true, 'Added sharp'); - equal(hasAccidental(notes[4]), false, 'Sharp remembered'); - equal(hasAccidental(notes[5]), true, 'Added flat(different octave)'); - equal(hasAccidental(notes[6]), true, 'Added flat(different octave)'); - equal(hasAccidental(notes[7]), false, 'sharp remembered'); - notes = [ - { keys: ['c/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['cb/4'], duration: '4' }, - { keys: ['c#/4'], duration: '4' }, - { keys: ['c#/4'], duration: '4' }, - { keys: ['cbb/4'], duration: '4' }, - { keys: ['cbb/4'], duration: '4' }, - { keys: ['c##/4'], duration: '4' }, - { keys: ['c##/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - ].map(createStaveNote); - voice = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'C'); - equal(hasAccidental(notes[0]), false, 'No accidental'); - equal(hasAccidental(notes[1]), true, 'Added flat'); - equal(hasAccidental(notes[2]), false, 'Flat remembered'); - equal(hasAccidental(notes[3]), true, 'Sharp added'); - equal(hasAccidental(notes[4]), false, 'Sharp remembered'); - equal(hasAccidental(notes[5]), true, 'Added doubled flat'); - equal(hasAccidental(notes[6]), false, 'Double flat remembered'); - equal(hasAccidental(notes[7]), true, 'Added double sharp'); - equal(hasAccidental(notes[8]), false, 'Double sharp rememberd'); - equal(hasAccidental(notes[9]), true, 'Added natural'); - equal(hasAccidental(notes[10]), false, 'Natural remembered'); -} -function formatAccidentalSpaces(options) { - const f = VexFlowTests.makeFactory(options, 750, 280); - const context = f.getContext(); - const softmaxFactor = 100; - const notes = [ - new StaveNote({ - keys: ['e##/5'], - duration: '8d', - }).addModifier(new Accidental('##'), 0), - new StaveNote({ - keys: ['b/4'], - duration: '16', - }).addModifier(new Accidental('b'), 0), - new StaveNote({ - keys: ['f/3'], - duration: '8', - }), - new StaveNote({ - keys: ['a/3'], - duration: '16', - }), - new StaveNote({ - keys: ['e/4', 'g/4'], - duration: '16', - }) - .addModifier(new Accidental('bb'), 0) - .addModifier(new Accidental('bb'), 1), - new StaveNote({ - keys: ['d/4'], - duration: '16', - }), - new StaveNote({ - keys: ['e/4', 'g/4'], - duration: '16', - }) - .addModifier(new Accidental('#'), 0) - .addModifier(new Accidental('#'), 1), - new StaveNote({ - keys: ['g/4'], - duration: '32', - }), - new StaveNote({ - keys: ['a/4'], - duration: '32', - }), - new StaveNote({ - keys: ['g/4'], - duration: '16', - }), - new StaveNote({ - keys: ['d/4'], - duration: 'q', - }), - ]; - Dot.buildAndAttach([notes[0]], { all: true }); - const beams = Beam.generateBeams(notes); - const voice = new Voice({ - num_beats: 4, - beat_value: 4, - }); - voice.addTickables(notes); - const formatter = new Formatter({ softmaxFactor }).joinVoices([voice]); - const width = formatter.preCalculateMinTotalWidth([voice]); - const stave = new Stave(10, 40, width + 20); - stave.setContext(context).draw(); - formatter.format([voice], width); - voice.draw(context, stave); - beams.forEach((b) => b.setContext(context).draw()); - notes.forEach((note) => Note.plotMetrics(context, note, 30)); - VexFlowTests.plotLegendForNoteWidth(context, 300, 150); - ok(true); -} -function basic(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - f - .StaveNote({ keys: ['e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5', 'd/4'], duration: '2' }) - .addModifier(accid('##'), 6) - .addModifier(accid('n'), 0) - .addModifier(accid('bb'), 1) - .addModifier(accid('b'), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('n'), 4) - .addModifier(accid('bb'), 5), - f - .StaveNote({ keys: ['g/5', 'f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5'], duration: '16' }) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('b'), 4) - .addModifier(accid('bb'), 5) - .addModifier(accid('##'), 6) - .addModifier(accid('#'), 0), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('##').setAsCautionary(), 1) - .addModifier(accid('#').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb').setAsCautionary(), 4) - .addModifier(accid('b').setAsCautionary(), 5), - ]; - Formatter.SimpleFormat(notes, 10, { paddingBetween: 45 }); - notes.forEach((note, index) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function cautionary(options) { - const staveCount = 12; - const scale = 0.85; - const staveWidth = 840; - let i = 0; - let j = 0; - const f = VexFlowTests.makeFactory(options, staveWidth + 10, 175 * staveCount + 10); - f.getContext().scale(scale, scale); - const accids = Object.keys(Flow.accidentalMap).filter((accid) => accid !== '{' && accid !== '}'); - const mod = Math.round(accids.length / staveCount); - for (i = 0; i < staveCount; ++i) { - const stave = f.Stave({ x: 0, y: 10 + 200 * i, width: staveWidth / scale }); - const score = f.EasyScore(); - const rowMap = []; - for (j = 0; j < mod && j + i * staveCount < accids.length; ++j) { - rowMap.push(accids[j + i * staveCount]); - } - const notes = rowMap.map((accidType) => f - .StaveNote({ keys: ['a/4'], duration: '4', stem_direction: Stem.UP }) - .addModifier(f.Accidental({ type: accidType }), 0)); - const voice = score.voice(notes, { time: rowMap.length + '/4' }); - voice.getTickables().forEach((tickable) => { - tickable - .getModifiers() - .filter((modifier) => modifier.getAttribute('type') === Accidental.CATEGORY) - .forEach((accid) => accid.setAsCautionary()); - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - ok(true, 'Must successfully render cautionary accidentals'); -} -function specialCases(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['f/4', 'd/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('b'), 1), - f - .StaveNote({ keys: ['c/4', 'g/4'], duration: '2' }) - .addModifier(accid('##'), 0) - .addModifier(accid('##'), 1), - f - .StaveNote({ keys: ['b/3', 'd/4', 'f/4'], duration: '16' }) - .addModifier(accid('#'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('##'), 2), - f - .StaveNote({ keys: ['g/4', 'a/4', 'c/5', 'e/5'], duration: '16' }) - .addModifier(accid('b'), 0) - .addModifier(accid('b'), 1) - .addModifier(accid('n'), 3), - f - .StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4' }) - .addModifier(accid('b').setAsCautionary(), 0) - .addModifier(accid('b').setAsCautionary(), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3), - f - .StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5', 'g/5'], duration: '8' }) - .addModifier(accid('bb'), 0) - .addModifier(accid('b').setAsCautionary(), 1) - .addModifier(accid('n').setAsCautionary(), 2) - .addModifier(accid('#'), 3) - .addModifier(accid('n').setAsCautionary(), 4), - ]; - Formatter.SimpleFormat(notes, 0, { paddingBetween: 20 }); - notes.forEach((note, index) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function basicStemDown(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - f.Stave({ x: 10, y: 10, width: 550 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('##'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('n'), 5) - .addModifier(accid('bb'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: -1 }) - .addModifier(accid('n'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - ]; - Formatter.SimpleFormat(notes, 0, { paddingBetween: 30 }); - notes.forEach((note, noteIndex) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + noteIndex + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, accidIndex) => { - ok(accid.getWidth() > 0, 'Accidental ' + accidIndex + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(f.getContext(), 480, 140); - ok(true, 'Full Accidental'); -} -function multiVoice(options) { - function showNotes(note1, note2, stave, ctx, x) { - const modifierContext = new ModifierContext(); - note1.addToModifierContext(modifierContext); - note2.addToModifierContext(modifierContext); - new TickContext().addTickable(note1).addTickable(note2).preFormat().setX(x); - note1.setContext(ctx).draw(); - note2.setContext(ctx).draw(); - Note.plotMetrics(ctx, note1, 180); - Note.plotMetrics(ctx, note2, 15); - } - const f = VexFlowTests.makeFactory(options, 460, 250); - const accid = makeNewAccid(f); - const stave = f.Stave({ x: 10, y: 45, width: 420 }); - const ctx = f.getContext(); - stave.draw(); - let note1 = f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - let note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('bb'), 1) - .addModifier(accid('##'), 2) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 60); - note1 = f - .StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 150); - note1 = f - .StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }) - .addModifier(accid('b'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('#'), 2) - .setStave(stave); - note2 = f - .StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }) - .addModifier(accid('b'), 0) - .setStave(stave); - showNotes(note1, note2, stave, ctx, 250); - VexFlowTests.plotLegendForNoteWidth(ctx, 350, 150); - ok(true, 'Full Accidental'); -} -function microtonal(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('db'), 0) - .addModifier(accid('d'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) - .addModifier(accid('bbs'), 0) - .addModifier(accid('++'), 1) - .addModifier(accid('+'), 2) - .addModifier(accid('d'), 3) - .addModifier(accid('db'), 4) - .addModifier(accid('+'), 5) - .addModifier(accid('##'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('++'), 0) - .addModifier(accid('bbs'), 1) - .addModifier(accid('+'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('db'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('db').setAsCautionary(), 1) - .addModifier(accid('bbs').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('++').setAsCautionary(), 4) - .addModifier(accid('d').setAsCautionary(), 5), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'd/5', 'g/5'], duration: '16' }) - .addModifier(accid('++-'), 0) - .addModifier(accid('+-'), 1) - .addModifier(accid('bs'), 2) - .addModifier(accid('bss'), 3) - .addModifier(accid('afhf'), 4) - .addModifier(accid('ashs'), 5), - ]; - Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); - notes.forEach((note, index) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Microtonal Accidental'); -} -function microtonal_iranian(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '1' }) - .addModifier(accid('k'), 0) - .addModifier(accid('o'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }) - .addModifier(accid('b'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('n'), 2) - .addModifier(accid('o'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('bb'), 5) - .addModifier(accid('##'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('o'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('n'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: '1' }) - .addModifier(accid('#'), 0) - .addModifier(accid('o').setAsCautionary(), 1) - .addModifier(accid('n').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('k').setAsCautionary(), 4), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '16' }) - .addModifier(accid('k'), 0) - .addModifier(accid('k'), 1) - .addModifier(accid('k'), 2) - .addModifier(accid('k'), 3), - ]; - Formatter.SimpleFormat(notes, 0, { paddingBetween: 35 }); - notes.forEach((note, index) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Microtonal Accidental (Iranian)'); -} -function sagittal(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - const accid = makeNewAccid(f); - const ctx = f.getContext(); - f.Stave({ x: 10, y: 10, width: 650 }); - const notes = [ - f - .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal11MediumDiesisUp'), 1) - .addModifier(accid('accSagittal5CommaDown'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('accSagittal7CommaDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal35LargeDiesisDown'), 2), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) - .addModifier(accid('b'), 1) - .addModifier(accid('accSagittal7CommaDown'), 1) - .addModifier(accid('accSagittal11LargeDiesisDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'b/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal11MediumDiesisUp'), 1) - .addModifier(accid('accSagittal5CommaDown'), 2) - .addModifier(accid('accSagittalFlat7CDown'), 3), - f - .StaveNote({ keys: ['d/4', 'f/4', 'a/4', 'b/4'], duration: '4' }) - .addModifier(accid('accSagittal35LargeDiesisDown'), 2), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5'], duration: '8' }).addModifier(accid('accSagittal5CommaDown'), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'b/4'], duration: '8' }) - .addModifier(accid('accSagittalFlat7CDown'), 1) - .addModifier(accid('accSagittal11LargeDiesisDown'), 3), - ]; - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - }); - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [3], - last_indices: [3], - options: { - direction: Stem.DOWN, - }, - }); - f.StaveTie({ - from: notes[4], - to: notes[5], - first_indices: [0, 1], - last_indices: [0, 1], - }); - f.StaveTie({ - from: notes[4], - to: notes[5], - first_indices: [3], - last_indices: [3], - options: { - direction: Stem.DOWN, - }, - }); - f.Beam({ notes: notes.slice(2, 4) }); - f.Beam({ notes: notes.slice(6, 8) }); - Formatter.SimpleFormat(notes); - notes.forEach((note, index) => { - Note.plotMetrics(f.getContext(), note, 140); - ok(note.getModifiersByType('Accidental').length > 0, 'Note ' + index + ' has accidentals'); - note.getModifiersByType('Accidental').forEach((accid, index) => { - ok(accid.getWidth() > 0, 'Accidental ' + index + ' has set width'); - }); - }); - f.draw(); - VexFlowTests.plotLegendForNoteWidth(ctx, 580, 140); - ok(true, 'Sagittal'); -} -function automaticAccidentals0(options) { - const f = VexFlowTests.makeFactory(options, 700, 200); - const stave = f.Stave(); - const notes = [ - { keys: ['c/4', 'c/5'], duration: '4' }, - { keys: ['c#/4', 'c#/5'], duration: '4' }, - { keys: ['c#/4', 'c#/5'], duration: '4' }, - { keys: ['c##/4', 'c##/5'], duration: '4' }, - { keys: ['c##/4', 'c##/5'], duration: '4' }, - { keys: ['c/4', 'c/5'], duration: '4' }, - { keys: ['cn/4', 'cn/5'], duration: '4' }, - { keys: ['cbb/4', 'cbb/5'], duration: '4' }, - { keys: ['cbb/4', 'cbb/5'], duration: '4' }, - { keys: ['cb/4', 'cb/5'], duration: '4' }, - { keys: ['cb/4', 'cb/5'], duration: '4' }, - { keys: ['c/4', 'c/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const gracenotes = [{ keys: ['d#/4'], duration: '16', slash: true }].map(f.GraceNote.bind(f)); - notes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0); - const voice = f - .Voice() - .setMode(Voice.Mode.SOFT) - .addTickable(new TimeSigNote('12/4').setStave(stave)) - .addTickables(notes); - Accidental.applyAccidentals([voice], 'C'); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals1(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Ab'); - const notes = [ - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '4' }, - { keys: ['e/4'], duration: '4' }, - { keys: ['f/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['c/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'Ab'); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals2(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('A'); - const notes = [ - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['c#/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f#/5'], duration: '4' }, - { keys: ['g#/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'A'); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentals3(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('A'); - const score = f.EasyScore(); - score.set({ time: '8/4' }); - const notes = score.notes('A4/q, B4/q, C#5/q, D5/q, E5/q,F#5/q, G#5/q, A5/q', { stem: 'UP' }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - Accidental.applyAccidentals([voice], 'A'); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsMultiVoiceInline(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Ab'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['d/4'], duration: '4', stem_direction: -1 }, - { keys: ['e/4'], duration: '4', stem_direction: -1 }, - { keys: ['f/4'], duration: '4', stem_direction: -1 }, - { keys: ['g/4'], duration: '4', stem_direction: -1 }, - { keys: ['a/4'], duration: '4', stem_direction: -1 }, - { keys: ['b/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const notes1 = [ - { keys: ['c/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f/5'], duration: '4' }, - { keys: ['g/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - { keys: ['b/5'], duration: '4' }, - { keys: ['c/6'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); - Accidental.applyAccidentals([voice0, voice1], 'Ab'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[3]), false); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[7]), false); - equal(hasAccidental(notes1[0]), false); - equal(hasAccidental(notes1[1]), true); - equal(hasAccidental(notes1[2]), true); - equal(hasAccidental(notes1[3]), false); - equal(hasAccidental(notes1[4]), false); - equal(hasAccidental(notes1[5]), true); - equal(hasAccidental(notes1[6]), true); - equal(hasAccidental(notes1[7]), false); - new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsMultiVoiceOffset(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('Cb'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['d/4'], duration: '4', stem_direction: -1 }, - { keys: ['e/4'], duration: '4', stem_direction: -1 }, - { keys: ['f/4'], duration: '4', stem_direction: -1 }, - { keys: ['g/4'], duration: '4', stem_direction: -1 }, - { keys: ['a/4'], duration: '4', stem_direction: -1 }, - { keys: ['b/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const notes1 = [ - { keys: ['c/5'], duration: '8' }, - { keys: ['c/5'], duration: '4' }, - { keys: ['d/5'], duration: '4' }, - { keys: ['e/5'], duration: '4' }, - { keys: ['f/5'], duration: '4' }, - { keys: ['g/5'], duration: '4' }, - { keys: ['a/5'], duration: '4' }, - { keys: ['b/5'], duration: '4' }, - { keys: ['c/6'], duration: '4' }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); - Accidental.applyAccidentals([voice0, voice1], 'Cb'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), true); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[7]), false, 'Natural Remembered'); - equal(hasAccidental(notes1[0]), true); - equal(hasAccidental(notes1[1]), false); - equal(hasAccidental(notes1[2]), true); - equal(hasAccidental(notes1[3]), true); - equal(hasAccidental(notes1[4]), true); - equal(hasAccidental(notes1[5]), true); - equal(hasAccidental(notes1[6]), true); - equal(hasAccidental(notes1[7]), true); - new Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases1(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - Accidental.applyAccidentals([voice0], 'C'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[8]), false); - new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases2(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - Accidental.applyAccidentals([voice0], 'C'); - equal(hasAccidental(notes0[0]), false); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[8]), false); - equal(hasAccidental(notes0[10]), true); - equal(hasAccidental(notes0[12]), false); - equal(hasAccidental(notes0[14]), true); - equal(hasAccidental(notes0[16]), false); - equal(hasAccidental(notes0[1]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[5]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[9]), false); - equal(hasAccidental(notes0[11]), true); - equal(hasAccidental(notes0[13]), false); - equal(hasAccidental(notes0[15]), true); - equal(hasAccidental(notes0[17]), false); - new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases3(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C#'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - Accidental.applyAccidentals([voice0], 'C#'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[2]), false); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[5]), true); - equal(hasAccidental(notes0[6]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[8]), false); - new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function automaticAccidentalsCornerCases4(options) { - const f = VexFlowTests.makeFactory(options, 700, 150); - const stave = f.Stave().addKeySignature('C#'); - const notes0 = [ - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c#/4'], duration: '4', stem_direction: -1 }, - { keys: ['c#/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['cb/4'], duration: '4', stem_direction: -1 }, - { keys: ['cb/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - { keys: ['c/4'], duration: '4', stem_direction: -1 }, - { keys: ['c/5'], duration: '4', stem_direction: -1 }, - ].map(f.StaveNote.bind(f)); - const voice0 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes0); - Accidental.applyAccidentals([voice0], 'C#'); - equal(hasAccidental(notes0[0]), true); - equal(hasAccidental(notes0[2]), true); - equal(hasAccidental(notes0[4]), false); - equal(hasAccidental(notes0[6]), true); - equal(hasAccidental(notes0[8]), false); - equal(hasAccidental(notes0[10]), true); - equal(hasAccidental(notes0[12]), false); - equal(hasAccidental(notes0[14]), true); - equal(hasAccidental(notes0[16]), false); - equal(hasAccidental(notes0[1]), true); - equal(hasAccidental(notes0[3]), true); - equal(hasAccidental(notes0[5]), false); - equal(hasAccidental(notes0[7]), true); - equal(hasAccidental(notes0[9]), false); - equal(hasAccidental(notes0[11]), true); - equal(hasAccidental(notes0[13]), false); - equal(hasAccidental(notes0[15]), true); - equal(hasAccidental(notes0[17]), false); - new Formatter().joinVoices([voice0]).formatToStave([voice0], stave); - f.draw(); - ok(true); -} -function factoryAPI(options) { - const f = VexFlowTests.makeFactory(options, 700, 240); - f.Stave({ x: 10, y: 10, width: 550 }); - const accid = makeNewAccid(f); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }) - .addModifier(accid('b'), 0) - .addModifier(accid('#'), 1), - f - .StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: 'h' }) - .addModifier(accid('##'), 0) - .addModifier(accid('n'), 1) - .addModifier(accid('bb'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('#'), 4) - .addModifier(accid('n'), 5) - .addModifier(accid('bb'), 6), - f - .StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16' }) - .addModifier(accid('n'), 0) - .addModifier(accid('#'), 1) - .addModifier(accid('#'), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb'), 4) - .addModifier(accid('##'), 5) - .addModifier(accid('#'), 6), - f - .StaveNote({ keys: ['a/3', 'c/4', 'e/4', 'b/4', 'd/5', 'g/5'], duration: 'w' }) - .addModifier(accid('#'), 0) - .addModifier(accid('##').setAsCautionary(), 1) - .addModifier(accid('#').setAsCautionary(), 2) - .addModifier(accid('b'), 3) - .addModifier(accid('bb').setAsCautionary(), 4) - .addModifier(accid('b').setAsCautionary(), 5), - ]; - Formatter.SimpleFormat(notes); - notes.forEach((n, i) => { - ok(n.getModifiersByType('Accidental').length > 0, 'Note ' + i + ' has accidentals'); - n.getModifiersByType('Accidental').forEach((accid, i) => { - ok(accid.getWidth() > 0, 'Accidental ' + i + ' has set width'); - }); - }); - f.draw(); - ok(true, 'Factory API'); -} -VexFlowTests.register(AccidentalTests); -export { AccidentalTests }; diff --git a/build/esm/tests/annotation_tests.js b/build/esm/tests/annotation_tests.js deleted file mode 100644 index 5973e087e0..0000000000 --- a/build/esm/tests/annotation_tests.js +++ /dev/null @@ -1,372 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; -import { Articulation } from '../src/articulation.js'; -import { Beam } from '../src/beam.js'; -import { Bend } from '../src/bend.js'; -import { Flow } from '../src/flow.js'; -import { Font, FontStyle, FontWeight } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { ModifierPosition } from '../src/modifier.js'; -import { Registry } from '../src/registry.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Stem } from '../src/stem.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { Vibrato } from '../src/vibrato.js'; -import { Voice } from '../src/voice.js'; -const AnnotationTests = { - Start() { - QUnit.module('Annotation'); - const run = VexFlowTests.runTests; - run('Placement', placement); - run('Lyrics', lyrics); - run('Simple Annotation', simple); - run('Styled Annotation', styling); - run('Standard Notation Annotation', standard); - run('Harmonics', harmonic); - run('Fingerpicking', picking); - run('Bottom Annotation', bottom); - run('Bottom Annotations with Beams', bottomWithBeam); - run('Test Justification Annotation Stem Up', justificationStemUp); - run('Test Justification Annotation Stem Down', justificationStemDown); - run('TabNote Annotations', tabNotes); - }, -}; -const FONT_SIZE = VexFlowTests.Font.size; -const tabNote = (noteStruct) => new TabNote(noteStruct); -const staveNote = (noteStruct) => new StaveNote(noteStruct); -function lyrics(options) { - let fontSize = FONT_SIZE; - let x = 10; - let width = 170; - let ratio = 1; - const registry = new Registry(); - Registry.enableDefaultRegistry(registry); - const f = VexFlowTests.makeFactory(options, 750, 260); - for (let i = 0; i < 3; ++i) { - const score = f.EasyScore(); - score.set({ time: '3/4' }); - const system = f.System({ width, x }); - system.addStave({ - voices: [ - score.voice(score.notes('(C4 F4)/2[id="n0"]').concat(score.beam(score.notes('(C4 A4)/8[id="n1"], (C4 A4)/8[id="n2"]')))), - ], - }); - ['hand,', 'and', 'me', 'pears', 'lead', 'the'].forEach((text, ix) => { - const verse = Math.floor(ix / 3); - const noteGroupID = 'n' + (ix % 3); - const noteGroup = registry.getElementById(noteGroupID); - const lyricsAnnotation = f.Annotation({ text }).setFont('Roboto Slab', fontSize); - lyricsAnnotation.setPosition(ModifierPosition.BELOW); - noteGroup.addModifier(lyricsAnnotation, verse); - }); - system.addStave({ - voices: [score.voice(score.notes('(F4 D5)/2').concat(score.beam(score.notes('(F4 F5)/8, (F4 F5)/8'))))], - }); - f.draw(); - ratio = (fontSize + 2) / fontSize; - width = width * ratio; - x = x + width; - fontSize = fontSize + 2; - } - ok(true); -} -function simple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial, sans-serif'; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new Annotation('T'), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new Bend('Full').setTap('T'), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Annotation'); -} -function standard(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); - const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic'); - const notes = [ - staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet'), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro'), 2), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Standard Notation Annotation'); -} -function styling(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new Stave(10, 10, 450).addClef('treble').setContext(ctx).draw(); - const annotation = (text, style) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, 'normal', 'italic').setStyle(style); - const notes = [ - staveNote({ keys: ['c/4', 'e/4'], duration: 'h' }).addModifier(annotation('quiet', { fillStyle: '#0F0' }), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'h' }).addModifier(annotation('Allegro', { fillStyle: '#00F' }), 2), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Standard Notation Annotation'); -} -function harmonic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 12 }, - { str: 3, fret: 12 }, - ], - duration: 'h', - }).addModifier(new Annotation('Harm.'), 0), - tabNote({ - positions: [{ str: 2, fret: 9 }], - duration: 'h', - }) - .addModifier(new Annotation('(8va)').setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC), 0) - .addModifier(new Annotation('A.H.'), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Annotation'); -} -function picking(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.setFont(Font.SANS_SERIF, FONT_SIZE); - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE, FontWeight.NORMAL, FontStyle.ITALIC); - const notes = [ - tabNote({ - positions: [ - { str: 1, fret: 0 }, - { str: 2, fret: 1 }, - { str: 3, fret: 2 }, - { str: 4, fret: 2 }, - { str: 5, fret: 0 }, - ], - duration: 'h', - }).addModifier(new Vibrato().setVibratoWidth(40), 0), - tabNote({ - positions: [{ str: 6, fret: 9 }], - duration: '8', - }).addModifier(annotation('p').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 3, fret: 9 }], - duration: '8', - }).addModifier(annotation('i').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 2, fret: 9 }], - duration: '8', - }).addModifier(annotation('m').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), - tabNote({ - positions: [{ str: 1, fret: 9 }], - duration: '8', - }).addModifier(annotation('a').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Fingerpicking'); -} -function placement(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const annotation = (text, fontSize, vj) => new Annotation(text).setFont(Font.SERIF, fontSize).setVerticalJustification(vj); - const notes = [ - staveNote({ keys: ['e/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['c/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 10, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(annotation('v1', 14, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 14, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 11, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(annotation('v1', 11, AnnotationVerticalJustify.TOP), 0) - .addModifier(annotation('v2', 20, AnnotationVerticalJustify.TOP), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(annotation('v1', 12, AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 12, AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(annotation('v1', 10, AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 20, AnnotationVerticalJustify.BOTTOM), 0), - staveNote({ keys: ['f/5'], duration: 'w' }) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) - .addModifier(annotation('v1', 11, AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(annotation('v2', 16, AnnotationVerticalJustify.BOTTOM), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement'); -} -function bottom(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); - const annotation = (text) => new Annotation(text).setFont(Font.SERIF, FONT_SIZE).setVerticalJustification(Annotation.VerticalJustify.BOTTOM); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'w' }).addModifier(annotation('F'), 0), - staveNote({ keys: ['a/4'], duration: 'w' }).addModifier(annotation('A'), 0), - staveNote({ keys: ['c/5'], duration: 'w' }).addModifier(annotation('C'), 0), - staveNote({ keys: ['e/5'], duration: 'w' }).addModifier(annotation('E'), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Bottom Annotation'); -} -function bottomWithBeam(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - const stave = new Stave(10, 10, 300).addClef('treble').setContext(ctx).draw(); - const notes = [ - new StaveNote({ keys: ['a/3'], duration: '8' }).addModifier(new Annotation('good').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), - new StaveNote({ keys: ['g/3'], duration: '8' }).addModifier(new Annotation('even').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), - new StaveNote({ keys: ['c/4'], duration: '8' }).addModifier(new Annotation('under').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), - new StaveNote({ keys: ['d/4'], duration: '8' }).addModifier(new Annotation('beam').setVerticalJustification(Annotation.VerticalJustify.BOTTOM)), - ]; - const beam = new Beam(notes.slice(1)); - Formatter.FormatAndDraw(ctx, stave, notes); - beam.setContext(ctx).draw(); - ok(true, 'Bottom Annotation with Beams'); -} -function justificationStemUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 650, 950); - ctx.scale(1.5, 1.5); - const annotation = (text, hJustification, vJustification) => new Annotation(text) - .setFont(Font.SANS_SERIF, FONT_SIZE) - .setJustification(hJustification) - .setVerticalJustification(vJustification); - for (let v = 1; v <= 4; ++v) { - const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['c/3'], duration: 'q' }).addModifier(annotation('Text', 1, v), 0), - staveNote({ keys: ['c/4'], duration: 'q' }).addModifier(annotation('Text', 2, v), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q' }).addModifier(annotation('Text', 3, v), 0), - staveNote({ keys: ['c/6'], duration: 'q' }).addModifier(annotation('Text', 4, v), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - ok(true, 'Test Justification Annotation'); -} -function justificationStemDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 650, 1000); - ctx.scale(1.5, 1.5); - const annotation = (text, hJustification, vJustification) => new Annotation(text) - .setFont(Font.SANS_SERIF, FONT_SIZE) - .setJustification(hJustification) - .setVerticalJustification(vJustification); - for (let v = 1; v <= 4; ++v) { - const stave = new Stave(10, (v - 1) * 150 + 40, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['c/3'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 1, v), 0), - staveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 2, v), 0), - staveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 3, v), 0), - staveNote({ keys: ['c/6'], duration: 'q', stem_direction: -1 }).addModifier(annotation('Text', 4, v), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - ok(true, 'Test Justification Annotation'); -} -function tabNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial, sans-serif'; - const stave = new TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '8', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - ]; - const notes1 = specs.map((noteSpec) => { - const note = new TabNote(noteSpec); - note.render_options.draw_stem = true; - return note; - }); - const notes2 = specs.map((noteSpec) => { - const note = new TabNote(noteSpec); - note.render_options.draw_stem = true; - note.setStemDirection(-1); - return note; - }); - const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); - notes1[0].addModifier(new Annotation('Text').setJustification(1).setVerticalJustification(1)); - notes1[1].addModifier(new Annotation('Text').setJustification(2).setVerticalJustification(2)); - notes1[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); - notes1[3].addModifier(new Annotation('Text').setJustification(4).setVerticalJustification(4)); - notes2[0].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(1)); - notes2[1].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(2)); - notes2[2].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(3)); - notes2[3].addModifier(new Annotation('Text').setJustification(3).setVerticalJustification(4)); - notes3[0].addModifier(new Annotation('Text').setVerticalJustification(1)); - notes3[1].addModifier(new Annotation('Text').setVerticalJustification(2)); - notes3[2].addModifier(new Annotation('Text').setVerticalJustification(3)); - notes3[3].addModifier(new Annotation('Text').setVerticalJustification(4)); - const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); - voice.addTickables(notes1); - voice.addTickables(notes2); - voice.addTickables(notes3); - new Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave }); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -VexFlowTests.register(AnnotationTests); -export { AnnotationTests }; diff --git a/build/esm/tests/articulation_tests.js b/build/esm/tests/articulation_tests.js deleted file mode 100644 index 9ec4aae9b6..0000000000 --- a/build/esm/tests/articulation_tests.js +++ /dev/null @@ -1,424 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Articulation } from '../src/articulation.js'; -import { Beam } from '../src/beam.js'; -import { Flow } from '../src/flow.js'; -import { Font } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { ModifierPosition } from '../src/modifier.js'; -import { Stave } from '../src/stave.js'; -import { Barline } from '../src/stavebarline.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Stem } from '../src/stem.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { Voice } from '../src/voice.js'; -const ArticulationTests = { - Start() { - QUnit.module('Articulation'); - const run = VexFlowTests.runTests; - run('Articulation - Vertical Placement', verticalPlacement); - run('Articulation - Vertical Placement (Glyph codes)', verticalPlacement2); - run('Articulation - Staccato/Staccatissimo', drawArticulations, { sym1: 'a.', sym2: 'av' }); - run('Articulation - Accent/Tenuto', drawArticulations, { sym1: 'a>', sym2: 'a-' }); - run('Articulation - Marcato/L.H. Pizzicato', drawArticulations, { sym1: 'a^', sym2: 'a+' }); - run('Articulation - Snap Pizzicato/Fermata', drawArticulations, { sym1: 'ao', sym2: 'ao' }); - run('Articulation - Up-stroke/Down-Stroke', drawArticulations, { sym1: 'a|', sym2: 'am' }); - run('Articulation - Fermata Above/Below', drawFermata, { sym1: 'a@a', sym2: 'a@u' }); - run('Articulation - Fermata Short Above/Below', drawFermata, { sym1: 'a@as', sym2: 'a@us' }); - run('Articulation - Fermata Long Above/Below', drawFermata, { sym1: 'a@al', sym2: 'a@ul' }); - run('Articulation - Fermata Very Long Above/Below', drawFermata, { sym1: 'a@avl', sym2: 'a@uvl' }); - run('Articulation - Inline/Multiple', drawArticulations2, { sym1: 'a.', sym2: 'a.' }); - run('TabNote Articulation', tabNotes, { sym1: 'a.', sym2: 'a.' }); - }, -}; -function drawArticulations(options) { - const sym1 = options.params.sym1; - const sym2 = options.params.sym2; - const width = 125 - Stave.defaultPadding; - const f = VexFlowTests.makeFactory(options, 675, 195); - const ctx = f.getContext(); - expect(0); - let x = 10; - const y = 30; - const score = f.EasyScore(); - const formatAndDrawToWidth = (x, y, width, notes, barline) => { - const voices = [score.voice(notes, { time: '4/4' })]; - const formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); - formatter.format(voices, nwidth); - const stave = f - .Stave({ x, y, width: nwidth + Stave.defaultPadding }) - .setEndBarType(barline) - .setContext(ctx) - .draw(); - voices.forEach((voice) => voice.draw(ctx, stave)); - return stave.getWidth(); - }; - const notesBar1 = [ - f.StaveNote({ keys: ['a/3'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - ]; - notesBar1[0].addModifier(new Articulation(sym1).setPosition(4), 0); - notesBar1[1].addModifier(new Articulation(sym1).setPosition(4), 0); - notesBar1[2].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar1[3].addModifier(new Articulation(sym1).setPosition(3), 0); - x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); - const notesBar2 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar2[2].addModifier(new Articulation(sym1).setPosition(4), 0); - notesBar2[3].addModifier(new Articulation(sym1).setPosition(4), 0); - x += formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); - const notesBar3 = [ - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - ]; - notesBar3[0].addModifier(new Articulation(sym2).setPosition(4), 0); - notesBar3[1].addModifier(new Articulation(sym2).setPosition(4), 0); - notesBar3[2].addModifier(new Articulation(sym2).setPosition(3), 0); - notesBar3[3].addModifier(new Articulation(sym2).setPosition(3), 0); - x += formatAndDrawToWidth(x, y, width, notesBar3, Barline.type.NONE); - const notesBar4 = [ - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar4[0].addModifier(new Articulation(sym2).setPosition(3), 0); - notesBar4[1].addModifier(new Articulation(sym2).setPosition(3), 0); - notesBar4[2].addModifier(new Articulation(sym2).setPosition(4), 0); - notesBar4[3].addModifier(new Articulation(sym2).setPosition(4), 0); - formatAndDrawToWidth(x, y, width, notesBar4, Barline.type.END); -} -function drawFermata(options) { - const sym1 = options.params.sym1; - const sym2 = options.params.sym2; - const f = VexFlowTests.makeFactory(options, 400, 195); - const ctx = f.getContext(); - const score = f.EasyScore(); - const width = 150 - Stave.defaultPadding; - let x = 50; - const y = 30; - const formatAndDrawToWidth = (x, y, width, notes, barline) => { - const voices = [score.voice(notes, { time: '4/4' })]; - const formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - const nwidth = Math.max(formatter.preCalculateMinTotalWidth(voices), width); - formatter.format(voices, nwidth); - const stave = f - .Stave({ x, y, width: nwidth + Stave.defaultPadding }) - .setEndBarType(barline) - .setContext(ctx) - .draw(); - voices.forEach((voice) => voice.draw(ctx, stave)); - return stave.getWidth(); - }; - expect(0); - const notesBar1 = [ - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/4'], duration: 'q', stem_direction: -1 }), - ]; - notesBar1[0].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar1[1].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar1[2].addModifier(new Articulation(sym2).setPosition(4), 0); - notesBar1[3].addModifier(new Articulation(sym2).setPosition(4), 0); - x += formatAndDrawToWidth(x, y, width, notesBar1, Barline.type.NONE); - const notesBar2 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - notesBar2[0].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar2[1].addModifier(new Articulation(sym1).setPosition(3), 0); - notesBar2[2].addModifier(new Articulation(sym2).setPosition(4), 0); - notesBar2[3].addModifier(new Articulation(sym2).setPosition(4), 0); - formatAndDrawToWidth(x, y, width, notesBar2, Barline.type.DOUBLE); -} -function verticalPlacement(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const staveNote = (noteStruct) => new StaveNote(noteStruct); - const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a-').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a@a').setPosition(ModifierPosition.ABOVE), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement'); -} -function verticalPlacement2(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const staveNote = (noteStruct) => new StaveNote(noteStruct); - const stave = new Stave(10, 50, 750).addClef('treble').setContext(ctx).draw(); - const notes = [ - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new Articulation('fermataBelow'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('fermataShortBelow'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new Articulation('fermataLongBelow'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('articTenutoBelow'), 0), - staveNote({ keys: ['f/4'], duration: 'q' }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('articTenutoBelow'), 0) - .addModifier(new Articulation('fermataVeryShortBelow'), 0), - staveNote({ keys: ['g/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('articTenutoBelow'), 0) - .addModifier(new Articulation('fermataVeryLongBelow'), 0), - staveNote({ keys: ['c/5'], duration: 'q' }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.BELOW).setBetweenLines(), 0) - .addModifier(new Articulation('articTenutoBelow').setBetweenLines(), 0) - .addModifier(new Articulation('fermataBelow'), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('fermataAbove'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new Articulation('fermataShortAbove'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('fermataLongAbove'), 0) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('articTenutoAbove'), 0), - staveNote({ keys: ['a/5'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('articTenutoAbove'), 0) - .addModifier(new Articulation('fermataVeryShortAbove'), 0), - staveNote({ keys: ['f/5'], duration: 'q' }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('articTenutoAbove'), 0) - .addModifier(new Articulation('fermataVeryLongAbove'), 0), - staveNote({ keys: ['b/4'], duration: 'q', stem_direction: Stem.DOWN }) - .addModifier(new Articulation('augmentationDot').setPosition(ModifierPosition.ABOVE).setBetweenLines(), 0) - .addModifier(new Articulation('articTenutoAbove').setBetweenLines(), 0) - .addModifier(new Articulation('fermataAbove'), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, ' Annotation Placement (Glyph codes)'); -} -function drawArticulations2(options) { - expect(0); - const scale = 0.8; - const f = VexFlowTests.makeFactory(options, 1500, 195); - const ctx = f.getContext(); - ctx.scale(scale, scale); - const stave1 = new Stave(10, 50, 500).setContext(ctx).draw(); - const notesBar1 = [ - f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['b/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['c/6'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['d/6'], duration: '16', stem_direction: -1 }), - ]; - let i; - for (i = 0; i < 16; i++) { - notesBar1[i].addModifier(new Articulation('a.').setPosition(4), 0); - notesBar1[i].addModifier(new Articulation('a>').setPosition(4), 0); - if (i === 15) { - notesBar1[i].addModifier(new Articulation('a@u').setPosition(4), 0); - } - } - const beam1 = new Beam(notesBar1.slice(0, 8)); - const beam2 = new Beam(notesBar1.slice(8, 16)); - Formatter.FormatAndDraw(ctx, stave1, notesBar1); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - const stave2 = new Stave(510, 50, 500).setContext(ctx).draw(); - const notesBar2 = [ - f.StaveNote({ keys: ['f/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['a/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['b/3'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['c/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['d/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['e/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '16', stem_direction: 1 }), - f.StaveNote({ keys: ['g/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['a/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['b/4'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['d/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['e/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['f/5'], duration: '16', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5'], duration: '16', stem_direction: -1 }), - ]; - for (i = 0; i < 16; i++) { - notesBar2[i].addModifier(new Articulation('a-').setPosition(3), 0); - notesBar2[i].addModifier(new Articulation('a^').setPosition(3), 0); - if (i === 15) { - notesBar2[i].addModifier(new Articulation('a@u').setPosition(4), 0); - } - } - const beam3 = new Beam(notesBar2.slice(0, 8)); - const beam4 = new Beam(notesBar2.slice(8, 16)); - Formatter.FormatAndDraw(ctx, stave2, notesBar2); - beam3.setContext(ctx).draw(); - beam4.setContext(ctx).draw(); - const stave3 = new Stave(1010, 50, 100).setContext(ctx).draw(); - const notesBar3 = [f.StaveNote({ keys: ['c/4'], duration: 'w', stem_direction: 1 })]; - notesBar3[0].addModifier(new Articulation('a-').setPosition(3), 0); - notesBar3[0].addModifier(new Articulation('a>').setPosition(3), 0); - notesBar3[0].addModifier(new Articulation('a@a').setPosition(3), 0); - Formatter.FormatAndDraw(ctx, stave3, notesBar3); - const stave4 = new Stave(1110, 50, 250).setContext(ctx).draw(); - const notesBar4 = [ - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: 'q', stem_direction: -1 }), - f.StaveNote({ keys: ['a/5'], duration: 'q', stem_direction: -1 }), - ]; - for (i = 0; i < 4; i++) { - let position1 = 3; - if (i > 1) { - position1 = 4; - } - notesBar4[i].addModifier(new Articulation('a-').setPosition(position1), 0); - } - Formatter.FormatAndDraw(ctx, stave4, notesBar4); -} -function tabNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt ' + Font.SANS_SERIF; - const stave = new TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '8', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }, - ]; - const notes1 = specs.map((noteSpec) => { - const tabNote = new TabNote(noteSpec); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - const notes2 = specs.map((noteSpec) => { - const tabNote = new TabNote(noteSpec); - tabNote.render_options.draw_stem = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - const notes3 = specs.map((noteSpec) => new TabNote(noteSpec)); - notes1[0].addModifier(new Articulation('a>').setPosition(3), 0); - notes1[1].addModifier(new Articulation('a>').setPosition(4), 0); - notes1[2].addModifier(new Articulation('a.').setPosition(3), 0); - notes1[3].addModifier(new Articulation('a.').setPosition(4), 0); - notes2[0].addModifier(new Articulation('a>').setPosition(3), 0); - notes2[1].addModifier(new Articulation('a>').setPosition(4), 0); - notes2[2].addModifier(new Articulation('a.').setPosition(3), 0); - notes2[3].addModifier(new Articulation('a.').setPosition(4), 0); - notes3[0].addModifier(new Articulation('a>').setPosition(3), 0); - notes3[1].addModifier(new Articulation('a>').setPosition(4), 0); - notes3[2].addModifier(new Articulation('a.').setPosition(3), 0); - notes3[3].addModifier(new Articulation('a.').setPosition(4), 0); - const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.SOFT); - voice.addTickables(notes1); - voice.addTickables(notes2); - voice.addTickables(notes3); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -VexFlowTests.register(ArticulationTests); -export { ArticulationTests }; diff --git a/build/esm/tests/auto_beam_formatting_tests.js b/build/esm/tests/auto_beam_formatting_tests.js deleted file mode 100644 index 810e275237..0000000000 --- a/build/esm/tests/auto_beam_formatting_tests.js +++ /dev/null @@ -1,551 +0,0 @@ -import { concat, VexFlowTests } from './vexflow_test_helpers.js'; -import { Beam } from '../src/beam.js'; -import { Fraction } from '../src/fraction.js'; -import { Stave } from '../src/stave.js'; -import { Stem } from '../src/stem.js'; -const AutoBeamFormattingTests = { - Start() { - QUnit.module('Auto-Beaming'); - const run = VexFlowTests.runTests; - run('Simple Auto Beaming', simpleAuto); - run('Auto Beaming With Overflow Group', simpleAutoWithOverflowGroup); - run('Even Group Stem Directions', evenGroupStemDirections); - run('Odd Group Stem Directions', oddGroupStemDirections); - run('Odd Beam Groups Auto Beaming', oddBeamGroups); - run('More Simple Auto Beaming 0', moreSimple0); - run('More Simple Auto Beaming 1', moreSimple1); - run('Beam Across All Rests', beamAcrossAllRests); - run('Beam Across All Rests with Stemlets', beamAcrossAllRestsWithStemlets); - run('Break Beams on Middle Rests Only', beamAcrossMiddleRests); - run('Break Beams on Rest', breakBeamsOnRests); - run('Maintain Stem Directions', maintainStemDirections); - run('Maintain Stem Directions - Beam Over Rests', maintainStemDirectionsBeamAcrossRests); - run('Beat group with unbeamable note - 2/2', groupWithUnbeamableNote); - run('Offset beat grouping - 6/8 ', groupWithUnbeamableNote1); - run('Odd Time - Guessing Default Beam Groups', autoOddBeamGroups); - run('Custom Beam Groups', customBeamGroups); - run('Simple Tuplet Auto Beaming', simpleTuplets); - run('More Simple Tuplet Auto Beaming', moreSimpleTuplets); - run('More Automatic Beaming', moreBeaming); - run('Automatic Beaming 4/4 with 3, 3, 2 Pattern', beamingWithSeveralGroups1); - run('Automatic Beaming 4/4 with 3, 3, 2 Pattern and Overflow', beamingWithSeveralGroupsOverflow); - run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 2 Overflows', beamingWithSeveralGroupsOverflow2); - run('Automatic Beaming 8/4 with 3, 2, 3 Pattern and 3 Overflows', beamingWithSeveralGroupsOverflow3); - run('Duration-Based Secondary Beam Breaks', secondaryBreaks1); - run('Duration-Based Secondary Beam Breaks 2', secondaryBreaks2); - run('Flat Beams Up', flatBeamsUp); - run('Flat Beams Down', flatBeamsDown); - run('Flat Beams Mixed Direction', flatBeamsMixed); - run('Flat Beams Up (uniform)', flatBeamsUpUniform); - run('Flat Beams Down (uniform)', flatBeamsDownUniform); - run('Flat Beams Up Bounds', flatBeamsUpBounds); - run('Flat Beams Down Bounds', flatBeamsDownBounds); - }, -}; -function simpleAuto(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5/8, e5, d5, c5/16, c5, d5/8, e5, f5, f5/32, f5, f5, f5'), { time: '4/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function simpleAutoWithOverflowGroup(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5/4., e5/8, d5/8, d5/16, c5/16, c5/16, c5/16, f5/16, f5/32, f5/32'), { - time: '4/4', - }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function evenGroupStemDirections(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4, g4, c5, f4, d5, e4, e5, b4, b4, g4, d5'), { time: '6/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - equal(beams[0].getStemDirection(), Stem.UP); - equal(beams[1].getStemDirection(), Stem.UP); - equal(beams[2].getStemDirection(), Stem.UP); - equal(beams[3].getStemDirection(), Stem.UP); - equal(beams[4].getStemDirection(), Stem.DOWN); - equal(beams[5].getStemDirection(), Stem.DOWN); - ok(true, 'Auto Beaming Applicator Test'); -} -function oddGroupStemDirections(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('g4/8, b4, d5, c5, f4, d5, e4, g5, g4, b4, g4, d5, a4, c5, a4'), { - time: '15/8', - }); - const groups = [new Fraction(3, 8)]; - const beams = Beam.applyAndGetBeams(voice, undefined, groups); - equal(beams[0].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); - equal(beams[1].getStemDirection(), Stem.DOWN); - equal(beams[2].getStemDirection(), Stem.UP); - equal(beams[3].getStemDirection(), Stem.DOWN, 'Notes are equidistant from middle line'); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beaming Applicator Test'); -} -function oddBeamGroups(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5, e5, d5, c5, c5, d5, e5, f5, f5, f4, f3, f5/16, f5'), { time: '6/4' }); - const groups = [new Fraction(2, 8), new Fraction(3, 8), new Fraction(1, 8)]; - const beams = Beam.applyAndGetBeams(voice, undefined, groups); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimple0(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4, c5, g5, a5, c4, d4, a5'), { time: '4/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimple1(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function breakBeamsOnRests(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: false, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossAllRestsWithStemlets(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - show_stemlets: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossAllRests(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamAcrossMiddleRests(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/16, g5, c5, c5/r, c5/r, (c4 e4 g4), d4, a5, c4, g4, c5, b4/r, (c4 e4), b4/r, b4/r, a4'), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - beam_middle_only: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function maintainStemDirections(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'b4/16, b4, b4[stem="down"], b4/r', - 'b4/r, b4[stem="down"], b4, b4', - 'b4[stem="down"], b4[stem="down"], b4, b4/r', - 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', - ].join(', '), { stem: 'up' }), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function maintainStemDirectionsBeamAcrossRests(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'b4/16, b4, b4[stem="down"], b4/r', - 'b4/r, b4[stem="down"], b4, b4', - 'b4[stem="down"], b4[stem="down"], b4, b4/r', - 'b4/32, b4[stem="down"], b4[stem="down"], b4, b4/16/r, b4', - ].join(', '), { stem: 'up' }), { time: '4/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - beam_rests: true, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function groupWithUnbeamableNote(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave().addTimeSignature('2/4'); - const score = f.EasyScore(); - const voice = score.voice(score.notes('b4/16, b4, b4/4, b4/16, b4'), { time: '2/4' }); - const beams = Beam.generateBeams(voice.getTickables(), { - groups: [new Fraction(2, 2)], - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function groupWithUnbeamableNote1(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave().addTimeSignature('6/8'); - const score = f.EasyScore(); - const voice = score.voice(score.notes('b4/4, b4/4, b4/8, b4/8'), { time: '6/8' }); - const beams = Beam.generateBeams(voice.getTickables(), { - groups: [new Fraction(3, 8)], - beam_rests: false, - maintain_stem_directions: true, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function autoOddBeamGroups(options) { - const f = VexFlowTests.makeFactory(options, 450, 400); - const score = f.EasyScore(); - const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); - const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); - const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); - const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); - const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); - const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { - time: '13/16', - }); - const beams = [ - ...Beam.applyAndGetBeams(voice1, undefined, Beam.getDefaultBeamGroups('5/4')), - ...Beam.applyAndGetBeams(voice2, undefined, Beam.getDefaultBeamGroups('5/8')), - ...Beam.applyAndGetBeams(voice3, undefined, Beam.getDefaultBeamGroups('13/16')), - ]; - f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); - Stave.formatBegModifiers([stave1, stave2, stave3]); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function customBeamGroups(options) { - const f = VexFlowTests.makeFactory(options, 450, 400); - const score = f.EasyScore(); - const stave1 = f.Stave({ y: 10 }).addTimeSignature('5/4'); - const voice1 = score.voice(score.notes('c5/8, g5, c5, b4, b4, c4, d4, a5, c4, g4'), { time: '5/4' }); - const stave2 = f.Stave({ y: 150 }).addTimeSignature('5/8'); - const voice2 = score.voice(score.notes('c5/8, g5, c5, b4, b4'), { time: '5/8' }); - const stave3 = f.Stave({ y: 290 }).addTimeSignature('13/16'); - const voice3 = score.voice(score.notes('c5/16, g5, c5, b4, b4, c5, g5, c5, b4, b4, c5, b4, b4'), { time: '13/16' }); - const group1 = [new Fraction(5, 8)]; - const group2 = [new Fraction(3, 8), new Fraction(2, 8)]; - const group3 = [new Fraction(7, 16), new Fraction(2, 16), new Fraction(4, 16)]; - const beams = [ - ...Beam.applyAndGetBeams(voice1, undefined, group1), - ...Beam.applyAndGetBeams(voice2, undefined, group2), - ...Beam.applyAndGetBeams(voice3, undefined, group3), - ]; - f.Formatter().formatToStave([voice1], stave1).formatToStave([voice2], stave2).formatToStave([voice3], stave3); - Stave.formatBegModifiers([stave1, stave2, stave3]); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function createShortcuts(score) { - return { - notes: score.notes.bind(score), - tuplet: score.tuplet.bind(score), - }; -} -function simpleTuplets(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4, c5')), - ...notes('g5/8, a5'), - ...tuplet(notes('a5/16, (c5 e5), a5, d5, a5'), { ratioed: false, notes_occupied: 4 }), - ], { time: '3/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreSimpleTuplets(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([...tuplet(notes('d4/4, g4, c5')), ...notes('g5/16, a5, a5, (c5 e5)')], { time: '3/4' }); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function moreBeaming(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4, c5/8., g5/16, a5/4, a5/16, (c5 e5)/16, a5/8'), { time: '9/8' }); - const beams = Beam.applyAndGetBeams(voice, undefined, Beam.getDefaultBeamGroups('9/8')); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroups1(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4, c5/8, g5, a5, a5, f5'), { time: '4/4' }); - const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/8, g4/4., c5/8, g5, a5, a5'), { time: '4/4' }); - const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(3, 8), new Fraction(2, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow2(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/16, g4/2, f4/16, c5/8, a4/16, c4/16, g4/8, b4, c5, g5, f5, e5, c5, a4/4'), { - time: '8/4', - }); - const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function beamingWithSeveralGroupsOverflow3(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c4/16, g4/1, f4/16, c5/8, g5, f5, e5, c5, a4/4'), { time: '8/4' }); - const beams = Beam.applyAndGetBeams(voice, undefined, [new Fraction(3, 8), new Fraction(2, 8), new Fraction(3, 8)]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Auto Beam Applicator Test'); -} -function secondaryBreaks1(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'f5/32, f5, f5, f5, f5/16., f5/32', - 'f5/16, f5/8, f5/16', - 'f5/32, f5/16., f5., f5/32', - 'f5/16., f5/32, f5, f5/16.', - ].join(','))); - const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Duration-Based Secondary Breaks Test'); -} -function secondaryBreaks2(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - tuplet(notes('e5/16, f5, f5')), - tuplet(notes('f5/16, f5, c5')), - notes('a4/16., f4/32'), - tuplet(notes('d4/16, d4, d4')), - tuplet(notes('a5/8, (e5 g5), a5')), - tuplet(notes('f5/16, f5, f5')), - tuplet(notes('f5/16, f5, a4')), - ].reduce(concat)); - const beams = Beam.generateBeams(voice.getTickables(), { secondary_breaks: '8' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Duration-Based Secondary Breaks Test'); -} -function flatBeamsUp(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - tuplet(notes('c4/8, g4, f5')), - notes('d5/8'), - tuplet(notes('c5/16, (c4 e4 g4), f4')), - notes('d5/8, e5, c4, f5/32, f5, f5, f5'), - ].reduce(concat)); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up Test'); -} -function flatBeamsDown(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, g5, a6/32, a6, a6, g4/64, g4')); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down Test'); -} -function flatBeamsMixed(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, d5, e5, c5, f5, c5, a5, c5, a5/8, g5, (d4 f4 a4)/16, d4, d5/8, e5, c4, a4/32, a4, a4, g4/64, g4')); - const beams = Beam.generateBeams(voice.getTickables(), { flat_beams: true }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Mixed Direction Test'); -} -function flatBeamsUpUniform(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4, g5')), - ...notes('d5/8, c5/16, (c4 e4 g4), d5/8, e5, c4, f5/32, f5, f5, f5'), - ]); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 50, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up (uniform) Test'); -} -function flatBeamsDownUniform(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('c5/64, c5, c5, c5, c5, c5, c5, c5, a5/8, g5, (e4 g4 b4)/16, e5, d5/8, e5/8, g5/8, a6/32, a6, a6, g4/64, g4')); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 155, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down (uniform) Test'); -} -function flatBeamsUpBounds(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const { notes, tuplet } = createShortcuts(score); - const voice = score.voice([ - ...tuplet(notes('c4/8, g4/8, g5/8')), - ...notes('d5/8, c5/16, (c4 e4 g4)/16, d5/8, e5/8, c4/8, f5/32, f5/32, f5/32, f5/32'), - ]); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 60, - stem_direction: 1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Up (uniform) Test'); -} -function flatBeamsDownBounds(options) { - const f = VexFlowTests.makeFactory(options, 450, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'g5/8, a6/32, a6/32, a6/32, g4/64, g4/64', - 'c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, c5/64, a5/8', - 'g5/8, (e4 g4 b4)/16, e5/16', - 'd5/8, e5/8', - ].join(','), { stem: 'down' })); - const beams = Beam.generateBeams(voice.getTickables(), { - flat_beams: true, - flat_beam_offset: 145, - stem_direction: -1, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'Flat Beams Down (uniform) Test'); -} -VexFlowTests.register(AutoBeamFormattingTests); -export { AutoBeamFormattingTests }; diff --git a/build/esm/tests/bach_tests.js b/build/esm/tests/bach_tests.js deleted file mode 100644 index 857789e1a3..0000000000 --- a/build/esm/tests/bach_tests.js +++ /dev/null @@ -1,335 +0,0 @@ -import { concat, VexFlowTests } from './vexflow_test_helpers.js'; -import { BarlineType, Registry } from '../src/index.js'; -const BachDemoTests = { - Start() { - QUnit.module('Bach Demo'); - VexFlowTests.runTests('Minuet 1', minuet1); - }, -}; -function minuet1(options) { - const registry = new Registry(); - Registry.enableDefaultRegistry(registry); - const id = (id) => registry.getElementById(id); - const f = VexFlowTests.makeFactory(options, 1100, 900); - const score = f.EasyScore({ throwOnError: true }); - const voice = score.voice.bind(score); - const notes = score.notes.bind(score); - const beam = score.beam.bind(score); - let x = 120; - let y = 80; - function appendSystem(width) { - const system = f.System({ x, y, width, spaceBetweenStaves: 10 }); - x += width; - return system; - } - score.set({ time: '3/4' }); - let system = appendSystem(220); - system - .addStave({ - voices: [ - voice([notes('D5/q[id="m1a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), - voice([f.TextDynamics({ text: 'p', duration: 'h', dots: 1, line: 9 })]), - ], - }) - .addClef('treble') - .addKeySignature('G') - .addTimeSignature('3/4') - .setTempo({ name: 'Allegretto', duration: 'h', dots: 1, bpm: 66 }, -30); - system - .addStave({ voices: [voice(notes('(G3 B3 D4)/h, A3/q', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G') - .addTimeSignature('3/4'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m1a').addModifier(f.Fingering({ number: '5' }), 0); - system = appendSystem(150); - system.addStave({ voices: [voice(notes('D5/q[id="m2a"], G4[id="m2b"], G4[id="m2c"]'))] }); - system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m2a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m2b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m2c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - f.Curve({ - from: id('m1a'), - to: id('m2a'), - options: { - cps: [ - { x: 0, y: 40 }, - { x: 0, y: 40 }, - ], - }, - }); - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('E5/q[id="m3a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], - }); - id('m3a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - system = appendSystem(150); - system.addStave({ voices: [voice(notes('G5/q[id="m4a"], G4[id="m4b"], G4[id="m4c"]'))] }); - system.addStave({ voices: [voice(notes('B3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m4a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m4b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m4c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - f.Curve({ - from: id('m3a'), - to: id('m4a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - }, - }); - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('C5/q[id="m5a"]'), beam(notes('D5/8, C5, B4, A4', { stem: 'down' }))].reduce(concat))], - }); - id('m5a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('A3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('B4/q'), beam(notes('C5/8, B4, A4, G4[id="m6a"]', { stem: 'up' }))].reduce(concat))], - }); - system.addStave({ voices: [voice(notes('G3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - f.Curve({ - from: id('m5a'), - to: id('m6a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - invert: true, - position_end: 'nearTop', - y_shift: 20, - }, - }); - x = 20; - y += 230; - system = appendSystem(220); - system - .addStave({ - voices: [ - voice([notes('F4/q[id="m7a"]'), beam(notes('G4/8[id="m7b"], A4, B4, G4', { stem: 'up' }))].reduce(concat)), - ], - }) - .addClef('treble') - .addKeySignature('G'); - system - .addStave({ voices: [voice(notes('D4/q, B3[id="m7c"], G3', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m7a').addModifier(f.Fingering({ number: '2', position: 'below' }), 0); - id('m7b').addModifier(f.Fingering({ number: '1' }), 0); - id('m7c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system = appendSystem(180); - const grace = f.GraceNote({ keys: ['d/3'], clef: 'bass', duration: '8', slash: true }); - system.addStave({ voices: [voice(notes('A4/h.[id="m8c"]'))] }); - system.addStave({ - voices: [ - score - .set({ clef: 'bass' }) - .voice([notes('D4/q[id="m8a"]'), beam(notes('D3/8, C4, B3[id="m8b"], A3', { stem: 'down' }))].reduce(concat)), - ], - }); - system.addConnector('singleRight'); - id('m8b').addModifier(f.Fingering({ number: '1', position: 'above' }), 0); - id('m8c').addModifier(f.GraceNoteGroup({ notes: [grace] }), 0); - f.Curve({ - from: id('m7a'), - to: id('m8c'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - invert: true, - position: 'nearTop', - position_end: 'nearTop', - }, - }); - f.StaveTie({ from: grace, to: id('m8c') }); - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('D5/q[id="m9a"]'), beam(notes('G4/8, A4, B4, C5', { stem: 'up' }))].reduce(concat)), - ], - }); - system.addStave({ voices: [voice(notes('B3/h, A3/q', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m9a').addModifier(f.Fingering({ number: '5' }), 0); - system = appendSystem(170); - system.addStave({ voices: [voice(notes('D5/q[id="m10a"], G4[id="m10b"], G4[id="m10c"]'))] }); - system.addStave({ voices: [voice(notes('G3/q[id="m10d"], B3, G3', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m10a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m10b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m10c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m10d').addModifier(f.Fingering({ number: '4' }), 0); - f.Curve({ - from: id('m9a'), - to: id('m10a'), - options: { - cps: [ - { x: 0, y: 40 }, - { x: 0, y: 40 }, - ], - }, - }); - system = appendSystem(150); - system.addStave({ - voices: [voice([notes('E5/q[id="m11a"]'), beam(notes('C5/8, D5, E5, F5', { stem: 'down' }))].reduce(concat))], - }); - id('m11a').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system.addStave({ voices: [voice(notes('C4/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - system = appendSystem(170); - system.addStave({ voices: [voice(notes('G5/q[id="m12a"], G4[id="m12b"], G4[id="m12c"]'))] }); - system.addStave({ - voices: [ - score - .set({ clef: 'bass' }) - .voice([notes('B3/q[id="m12d"]'), beam(notes('C4/8, B3, A3, G3[id="m12e"]', { stem: 'down' }))].reduce(concat)), - ], - }); - system.addConnector('singleRight'); - id('m12a').addModifier(f.Articulation({ type: 'a.', position: 'above' }), 0); - id('m12b').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m12c').addModifier(f.Articulation({ type: 'a.', position: 'below' }), 0); - id('m12d').addModifier(f.Fingering({ number: '2', position: 'above' }), 0); - id('m12e').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - f.Curve({ - from: id('m11a'), - to: id('m12a'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 20 }, - ], - }, - }); - x = 20; - y += 230; - system = appendSystem(220); - system - .addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('c5/q[id="m13a"]'), beam(notes('d5/8, c5, b4, a4', { stem: 'down' }))].reduce(concat)), - ], - }) - .addClef('treble') - .addKeySignature('G'); - system - .addStave({ voices: [voice(notes('a3/h[id="m13b"], f3/q[id="m13c"]', { clef: 'bass' }))] }) - .addClef('bass') - .addKeySignature('G'); - system.addConnector('brace'); - system.addConnector('singleRight'); - system.addConnector('singleLeft'); - id('m13a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - id('m13b').addModifier(f.Fingering({ number: '1' }), 0); - id('m13c').addModifier(f.Fingering({ number: '3', position: 'above' }), 0); - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('B4/q'), beam(notes('C5/8, b4, a4, g4', { stem: 'up' }))].reduce(concat)), - ], - }); - system.addStave({ voices: [voice(notes('g3/h[id="m14a"], b3/q[id="m14b"]', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m14a').addModifier(f.Fingering({ number: '2' }), 0); - id('m14b').addModifier(f.Fingering({ number: '1' }), 0); - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('a4/q'), beam(notes('b4/8, a4, g4, f4[id="m15a"]', { stem: 'up' }))].reduce(concat)), - ], - }); - system.addStave({ voices: [voice(notes('c4/q[id="m15b"], d4, d3', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m15a').addModifier(f.Fingering({ number: '2' }), 0); - id('m15b').addModifier(f.Fingering({ number: '2' }), 0); - system = appendSystem(130); - system - .addStave({ - voices: [score.set({ clef: 'treble' }).voice([notes('g4/h.[id="m16a"]')].reduce(concat))], - }) - .setEndBarType(BarlineType.REPEAT_END); - system - .addStave({ voices: [voice(notes('g3/h[id="m16b"], g2/q', { clef: 'bass' }))] }) - .setEndBarType(BarlineType.REPEAT_END); - system.addConnector('boldDoubleRight'); - id('m16a').addModifier(f.Fingering({ number: '1' }), 0); - id('m16b').addModifier(f.Fingering({ number: '1' }), 0); - f.Curve({ - from: id('m13a'), - to: id('m16a'), - options: { - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 20 }, - ], - invert: true, - position_end: 'nearTop', - }, - }); - system = appendSystem(180); - system - .addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('b5/q[id="m17a"]'), beam(notes('g5/8, a5, b5, g5', { stem: 'down' }))].reduce(concat)), - voice([f.TextDynamics({ text: 'mf', duration: 'h', dots: 1, line: 10 })]), - ], - }) - .setBegBarType(BarlineType.REPEAT_BEGIN); - system.addStave({ voices: [voice(notes('g3/h.', { clef: 'bass' }))] }).setBegBarType(BarlineType.REPEAT_BEGIN); - system.addConnector('boldDoubleLeft'); - system.addConnector('singleRight'); - id('m17a').addModifier(f.Fingering({ number: '5', position: 'above' }), 0); - system = appendSystem(180); - system.addStave({ - voices: [ - score - .set({ clef: 'treble' }) - .voice([notes('a5/q[id="m18a"]'), beam(notes('d5/8, e5, f5, d5[id="m18b"]', { stem: 'down' }))].reduce(concat)), - ], - }); - system.addStave({ voices: [voice(notes('f3/h.', { clef: 'bass' }))] }); - system.addConnector('singleRight'); - id('m18a').addModifier(f.Fingering({ number: '4', position: 'above' }), 0); - f.Curve({ - from: id('m17a'), - to: id('m18b'), - options: { - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 30 }, - ], - }, - }); - f.draw(); - Registry.disableDefaultRegistry(); - ok(true, 'Bach Minuet 1'); -} -VexFlowTests.register(BachDemoTests); -export { BachDemoTests }; diff --git a/build/esm/tests/barline_tests.js b/build/esm/tests/barline_tests.js deleted file mode 100644 index 73d2d18e4a..0000000000 --- a/build/esm/tests/barline_tests.js +++ /dev/null @@ -1,52 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Barline, BarlineType } from '../src/stavebarline.js'; -const BarlineTests = { - Start() { - QUnit.module('Barline'); - test('Enums', enums); - const run = VexFlowTests.runTests; - run('Simple BarNotes', simple); - run('Style BarNotes', style); - }, -}; -function enums() { - equal(Barline.type, BarlineType); - const a = BarlineType['DOUBLE']; - const b = BarlineType.DOUBLE; - equal(a, b); -} -function simple(options) { - const f = VexFlowTests.makeFactory(options, 380, 160); - const stave = f.Stave(); - const notes = [ - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), - f.BarNote({ type: 'single' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]; - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function style(options) { - const f = VexFlowTests.makeFactory(options, 380, 160); - const stave = f.Stave(); - const notes = [ - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '2' }), - f.BarNote({ type: 'single' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '2' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]; - notes[1].setStyle({ shadowBlur: 15, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Style'); -} -VexFlowTests.register(BarlineTests); -export { BarlineTests }; diff --git a/build/esm/tests/beam_tests.js b/build/esm/tests/beam_tests.js deleted file mode 100644 index 55d8ee4137..0000000000 --- a/build/esm/tests/beam_tests.js +++ /dev/null @@ -1,651 +0,0 @@ -import { concat, VexFlowTests } from './vexflow_test_helpers.js'; -import { AnnotationVerticalJustify, Beam, Dot, Font, FontStyle, FontWeight, Stem, Voice, } from '../src/index.js'; -const BeamTests = { - Start() { - QUnit.module('Beam'); - const run = VexFlowTests.runTests; - run('Simple Beam', simple); - run('Multi Beam', multi); - run('Sixteenth Beam', sixteenth); - run('Slopey Beam', slopey); - run('Auto-stemmed Beam', autoStem); - run('Mixed Beam 1', mixed); - run('Mixed Beam 2', mixed2); - run('Dotted Beam', dotted); - run('Partial Beam', partial); - run('Close Trade-offs Beam', tradeoffs); - run('Insane Beam', insane); - run('Lengthy Beam', lenghty); - run('Outlier Beam', outlier); - run('Break Secondary Beams', breakSecondaryBeams); - run('Partial Beam Direction', partialBeamDirection); - run('TabNote Beams Up', tabBeamsUp); - run('TabNote Beams Down', tabBeamsDown); - run('TabNote Auto Create Beams', autoTabBeams); - run('TabNote Beams Auto Stem', tabBeamsAutoStem); - run('Complex Beams with Annotations', complexWithAnnotation); - run('Complex Beams with Articulations', complexWithArticulation); - run('Complex Beams with Articulations two Staves', complexWithArticulation2); - }, -}; -function simple(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voice = score.voice([ - notes('(cb4 e#4 a4)/2'), - beam(notes('(cb4 e#4 a4)/8, (d4 f4 a4), (ebb4 g##4 b4), (f4 a4 c5)', { stem: 'up' })), - ].reduce(concat), { time: '2/2' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function multi(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([beam(notes('f5/8, e5, d5, c5', { stem: 'up' })), beam(notes('c5, d5, e5, f5', { stem: 'up' }))].reduce(concat)), - voice([beam(notes('f4/8, e4, d4, c4', { stem: 'down' })), beam(notes('c4/8, d4, e4, f4', { stem: 'down' }))].reduce(concat)), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Multi Test'); -} -function sixteenth(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - beam(notes('f5/16, f5, d5, c5', { stem: 'up' })), - beam(notes('c5/16, d5, f5, e5', { stem: 'up' })), - notes('f5/2', { stem: 'up' }), - ].reduce(concat)), - voice([ - beam(notes('f4/16, e4/16, d4/16, c4/16', { stem: 'down' })), - beam(notes('c4/16, d4/16, f4/16, e4/16', { stem: 'down' })), - notes('f4/2', { stem: 'down' }), - ].reduce(concat)), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Sixteenth Test'); -} -function breakSecondaryBeams(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - beam(notes('f5/16., f5/32, c5/16., d5/32, c5/16., d5/32', { stem: 'up' }), { secondaryBeamBreaks: [1, 3] }), - beam(notes('f5/16, e5, e5, e5, e5, e5', { stem: 'up' }), { secondaryBeamBreaks: [2] }), - ].reduce(concat), { time: '3/4' }), - voice([ - beam(notes('f4/32, d4, e4, c4, d4, c4, f4, d4, e4, c4, c4, d4', { stem: 'down' }), { - secondaryBeamBreaks: [3, 7], - }), - beam(notes('d4/16, f4, d4, e4, e4, e4', { stem: 'down' }), { secondaryBeamBreaks: [3] }), - ].reduce(concat), { time: '3/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Breaking Secondary Beams Test'); -} -function partialBeamDirection(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice.bind(score); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voices = [ - voice([ - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' })), - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'R' } }), - beam(notes('f4/8, f4/16, f4/8, f4/16', { stem: 'up' }), { partialBeamDirections: { '1': 'L' } }), - ].reduce(concat), { time: '9/8' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Partial beam direction test'); -} -function slopey(options) { - const f = VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const beam = score.beam.bind(score); - const notes = score.notes.bind(score); - const voice = score.voice([ - beam(notes('c4/8, f4/8, d5/8, g5/8', { stem: 'up' })), - beam(notes('d6/8, f5/8, d4/8, g3/8', { stem: 'up' })), - ].reduce(concat)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Slopey Test'); -} -function autoStem(options) { - const f = VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4/8, g4/8, c5/8, f4/8, d5/8, e4/8, e5/8, b4/8, b4/8, g4/8, d5/8'), { - time: '6/4', - }); - const notes = voice.getTickables(); - const beams = [ - f.Beam({ notes: notes.slice(0, 2), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(2, 4), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(4, 6), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(6, 8), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(8, 10), options: { autoStem: true } }), - f.Beam({ notes: notes.slice(10, 12), options: { autoStem: true } }), - ]; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - const UP = Stem.UP; - const DOWN = Stem.DOWN; - equal(beams[0].getStemDirection(), UP); - equal(beams[1].getStemDirection(), UP); - equal(beams[2].getStemDirection(), UP); - equal(beams[3].getStemDirection(), UP); - equal(beams[4].getStemDirection(), DOWN); - equal(beams[5].getStemDirection(), DOWN); - f.draw(); - ok(true, 'AutoStem Beam Test'); -} -function mixed(options) { - const f = VexFlowTests.makeFactory(options, 350, 140); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice1 = score.voice(score.notes('f5/8, d5/16, c5/16, c5/16, d5/16, e5/8, f5/8, d5/16, c5/16, c5/16, d5/16, e5/8', { stem: 'up' })); - const voice2 = score.voice(score.notes('f4/16, e4/8, d4/16, c4/16, d4/8, f4/16, f4/16, e4/8, d4/16, c4/16, d4/8, f4/16', { stem: 'down' })); - [ - [0, 4], - [4, 8], - [8, 12], - ].forEach((range) => f.Beam({ notes: voice1.getTickables().slice(range[0], range[1]) })); - [ - [0, 4], - [4, 8], - [8, 12], - ].forEach((range) => f.Beam({ notes: voice2.getTickables().slice(range[0], range[1]) })); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true, 'Multi Test'); -} -function mixed2(options) { - const f = VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('f5/32, d5/16, c5/32, c5/64, d5/128, e5/8, f5/16, d5/32, c5/64, c5/32, d5/16, e5/128', { - stem: 'up', - }), { time: '31/64' }); - const voice2 = score.voice(score.notes('f4/32, d4/16, c4/32, c4/64, d4/128, e4/8, f4/16, d4/32, c4/64, c4/32, d4/16, e4/128', { - stem: 'down', - }), { time: '31/64' }); - f.Beam({ notes: voice.getTickables().slice(0, 12) }); - f.Beam({ notes: voice2.getTickables().slice(0, 12) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - ok(true, 'Multi Test'); -} -function dotted(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('d4/8, b3/8., a3/16, a3/8, b3/8., c4/16, d4/8, b3/8, a3/8., a3/16, b3/8., c4/16', { stem: 'up' }), { time: '6/4' }); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes.slice(8, 12) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Dotted Test'); -} -function partial(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('d4/8, b3/32, c4/16., d4/16., e4/8, c4/64, c4/32, a3/8., b3/32., c4/8, e4/64, b3/16., b3/64, f4/8, e4/8, g4/64, e4/8'), { time: '89/64' }); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 3) }); - f.Beam({ notes: notes.slice(3, 9) }); - f.Beam({ notes: notes.slice(9, 13) }); - f.Beam({ notes: notes.slice(13, 17) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Partial Test'); -} -function tradeoffs(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave(); - const score = f.EasyScore(); - const voice = score.voice(score.notes('a4/8, b4/8, c4/8, d4/8, g4/8, a4/8, b4/8, c4/8', { stem: 'up' })); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Close Trade-offs Test'); -} -function insane(options) { - const f = VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes('g4/8, g5/8, c4/8, b5/8, g4/8[stem="down"], a5[stem="down"], b4[stem="down"], c4/8', { stem: 'up' })); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 7) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Insane Test'); -} -function lenghty(options) { - const f = VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.beam(score.notes('g4/8, g4, g4, a4', { stem: 'up' })), { time: '2/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Lengthy Test'); -} -function outlier(options) { - const f = VexFlowTests.makeFactory(options, 450, 180); - const stave = f.Stave({ y: 20 }); - const score = f.EasyScore(); - const voice = score.voice(score.notes([ - 'g4/8[stem="up"], f4[stem="up"], d5[stem="up"], e4[stem="up"]', - 'd5/8[stem="down"], d5[stem="down"], c5[stem="down"], d5[stem="down"]', - ].join())); - const notes = voice.getTickables(); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - f.draw(); - ok(true, 'Outlier Test'); -} -function tabBeamsUp(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave = f.TabStave({ y: 20 }); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - { positions: [{ str: 3, fret: 6 }], duration: '8' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - f.Beam({ notes: notes.slice(1, 7) }); - f.Beam({ notes: notes.slice(8, 11) }); - f.Tuplet({ notes: notes.slice(8, 11), options: { ratioed: true } }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function tabBeamsDown(options) { - const f = VexFlowTests.makeFactory(options, 600, 250); - const stave = f.TabStave({ options: { num_lines: 10 } }); - const specs = [ - { - stem_direction: -1, - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - stem_direction: -1, - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8dd', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - stem_direction: -1, - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 1, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 7, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, - { stem_direction: -1, positions: [{ str: 10, fret: 6 }], duration: '8' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - Dot.buildAndAttach([notes[1], notes[1]]); - f.Beam({ notes: notes.slice(1, 7) }); - f.Beam({ notes: notes.slice(8, 11) }); - f.Tuplet({ notes: notes.slice(8, 11), options: { location: -1 } }); - f.Tuplet({ notes: notes.slice(11, 14), options: { location: -1 } }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function autoTabBeams(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave = f.TabStave(); - const specs = [ - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 1, fret: 6 }], duration: '32' }, - { positions: [{ str: 6, fret: 6 }], duration: '32' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - { positions: [{ str: 6, fret: 6 }], duration: '16' }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - const beams = Beam.applyAndGetBeams(voice, -1); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - beams.forEach((beam) => beam.setContext(f.getContext()).draw()); - ok(true, 'All objects have been drawn'); -} -function tabBeamsAutoStem(options) { - const f = VexFlowTests.makeFactory(options, 600, 300); - const stave = f.TabStave(); - const specs = [ - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - stem_direction: 1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: 1, - }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: 1 }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 1, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 6, fret: 6 }], duration: '32', stem_direction: -1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: 1 }, - { positions: [{ str: 6, fret: 6 }], duration: '16', stem_direction: -1 }, - ]; - const notes = specs.map((struct) => { - const tabNote = f.TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_dots = true; - return tabNote; - }); - f.Beam({ notes: notes.slice(0, 8), options: { autoStem: true } }); - f.Beam({ notes: notes.slice(8, 12), options: { autoStem: true } }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'All objects have been drawn'); -} -function complexWithAnnotation(options) { - const factory = VexFlowTests.makeFactory(options, 500, 200); - const stave = factory.Stave({ y: 40 }); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const font = { - family: Font.SERIF, - size: 14, - weight: FontWeight.BOLD, - style: FontStyle.ITALIC, - }; - const notes1 = s1.map((struct) => factory - .StaveNote(struct) - .addModifier(factory.Annotation({ text: '1', vJustify: AnnotationVerticalJustify.TOP, font }), 0)); - const notes2 = s2.map((struct) => factory - .StaveNote(struct) - .addModifier(factory.Annotation({ text: '3', vJustify: AnnotationVerticalJustify.BOTTOM, font }), 0)); - factory.Beam({ notes: notes1 }); - factory.Beam({ notes: notes2 }); - const voice = factory.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - factory.draw(); - ok(true, 'Complex beam annotations'); -} -function complexWithArticulation(options) { - const f = VexFlowTests.makeFactory(options, 500, 200); - const stave = f.Stave({ y: 40 }); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - f.Beam({ notes: notes1 }); - f.Beam({ notes: notes2 }); - const voice = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave, { stave: stave }); - f.draw(); - ok(true, 'Complex beam articulations'); -} -function complexWithArticulation2(options) { - const f = VexFlowTests.makeFactory(options, 500, 300); - const system = f.System(); - const s1 = [ - { keys: ['e/4'], duration: '128', stem_direction: 1 }, - { keys: ['d/4'], duration: '16', stem_direction: 1 }, - { keys: ['e/4'], duration: '8', stem_direction: 1 }, - { keys: ['c/4', 'g/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - { keys: ['c/4'], duration: '32', stem_direction: 1 }, - ]; - const s2 = [ - { keys: ['e/5'], duration: '128', stem_direction: -1 }, - { keys: ['d/5'], duration: '16', stem_direction: -1 }, - { keys: ['e/5'], duration: '8', stem_direction: -1 }, - { keys: ['c/5', 'g/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - { keys: ['c/5'], duration: '32', stem_direction: -1 }, - ]; - const notes1 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes2 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - const notes3 = s1.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'am', position: 'above' }), 0)); - const notes4 = s2.map((struct) => f.StaveNote(struct).addModifier(f.Articulation({ type: 'a>', position: 'below' }), 0)); - f.Beam({ notes: notes1 }); - f.Beam({ notes: notes2 }); - f.Beam({ notes: notes3 }); - f.Beam({ notes: notes4 }); - const voice1 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes1).addTickables(notes2); - const voice2 = f.Voice().setMode(Voice.Mode.SOFT).addTickables(notes3).addTickables(notes4); - system.addStave({ voices: [voice1] }); - system.addStave({ voices: [voice2] }); - f.draw(); - ok(true, 'Complex beam articulations two staves'); -} -VexFlowTests.register(BeamTests); -export { BeamTests }; diff --git a/build/esm/tests/bend_tests.js b/build/esm/tests/bend_tests.js deleted file mode 100644 index c48221659a..0000000000 --- a/build/esm/tests/bend_tests.js +++ /dev/null @@ -1,209 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Bend } from '../src/bend.js'; -import { Font } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { ModifierContext } from '../src/modifiercontext.js'; -import { Note } from '../src/note.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { TickContext } from '../src/tickcontext.js'; -const BendTests = { - Start() { - QUnit.module('Bend'); - const run = VexFlowTests.runTests; - run('Double Bends', doubleBends); - run('Reverse Bends', reverseBends); - run('Bend Phrase', bendPhrase); - run('Double Bends With Release', doubleBendsWithRelease); - run('Whako Bend', whackoBends); - }, -}; -const note = (noteStruct) => new TabNote(noteStruct); -const bendWithText = (text, release = false) => new Bend(text, release); -const bendWithPhrase = (phrase) => new Bend('', false, phrase); -function doubleBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('Full'), 0) - .addModifier(bendWithText('1/2'), 1), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/4'), 0) - .addModifier(bendWithText('1/4'), 1), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'h', - }), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); - ok(true, 'Double Bends'); -} -function doubleBendsWithRelease(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 240); - ctx.scale(1.0, 1.0); - ctx.setBackgroundFillStyle('#FFF'); - ctx.setFont('Arial', VexFlowTests.Font.size); - const stave = new TabStave(10, 10, 550).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 1, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/2', true), 0) - .addModifier(bendWithText('Full', true), 1), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - { str: 4, fret: 5 }, - ], - duration: 'q', - }) - .addModifier(bendWithText('1/4', true), 0) - .addModifier(bendWithText('Monstrous', true), 1) - .addModifier(bendWithText('1/4', true), 2), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'q', - }), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'q', - }), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - notes.forEach((note) => Note.plotMetrics(ctx, note, 140)); - ok(true, 'Bend Release'); -} -function reverseBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.setFont('10pt Arial'); - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'w', - }) - .addModifier(bendWithText('Full'), 1) - .addModifier(bendWithText('1/2'), 0), - note({ - positions: [ - { str: 2, fret: 5 }, - { str: 3, fret: 5 }, - ], - duration: 'w', - }) - .addModifier(bendWithText('1/4'), 1) - .addModifier(bendWithText('1/4'), 0), - note({ - positions: [{ str: 4, fret: 7 }], - duration: 'w', - }), - ]; - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const mc = new ModifierContext(); - note.addToModifierContext(mc); - const tickContext = new TickContext(); - tickContext - .addTickable(note) - .preFormat() - .setX(75 * i); - note.setStave(stave).setContext(ctx).draw(); - Note.plotMetrics(ctx, note, 140); - ok(true, 'Bend ' + i); - } -} -function bendPhrase(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = Font.SIZE + 'pt ' + Font.SANS_SERIF; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const phrase1 = [ - { type: Bend.UP, text: 'Full' }, - { type: Bend.DOWN, text: 'Monstrous' }, - { type: Bend.UP, text: '1/2' }, - { type: Bend.DOWN, text: '' }, - ]; - const bend1 = bendWithPhrase(phrase1).setContext(ctx); - const notes = [ - note({ - positions: [{ str: 2, fret: 10 }], - duration: 'w', - }).addModifier(bend1, 0), - ]; - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.addToModifierContext(new ModifierContext()); - const tickContext = new TickContext(); - tickContext - .addTickable(note) - .preFormat() - .setX(75 * i); - note.setStave(stave).setContext(ctx).draw(); - Note.plotMetrics(ctx, note, 140); - ok(true, 'Bend ' + i); - } -} -function whackoBends(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 240); - ctx.scale(1.0, 1.0); - ctx.setBackgroundFillStyle('#FFF'); - ctx.setFont('Arial', VexFlowTests.Font.size); - const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(ctx).draw(); - const phrase1 = [ - { type: Bend.UP, text: 'Full' }, - { type: Bend.DOWN, text: '' }, - { type: Bend.UP, text: '1/2' }, - { type: Bend.DOWN, text: '' }, - ]; - const phrase2 = [ - { type: Bend.UP, text: 'Full' }, - { type: Bend.UP, text: 'Full' }, - { type: Bend.UP, text: '1/2' }, - { type: Bend.DOWN, text: '' }, - { type: Bend.DOWN, text: 'Full' }, - { type: Bend.DOWN, text: 'Full' }, - { type: Bend.UP, text: '1/2' }, - { type: Bend.DOWN, text: '' }, - ]; - const notes = [ - note({ - positions: [ - { str: 2, fret: 10 }, - { str: 3, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(bendWithPhrase(phrase1), 0) - .addModifier(bendWithPhrase(phrase2), 1), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - Note.plotMetrics(ctx, notes[0], 140); - ok(true, 'Whacko Bend & Release'); -} -VexFlowTests.register(BendTests); -export { BendTests }; diff --git a/build/esm/tests/boundingbox_tests.js b/build/esm/tests/boundingbox_tests.js deleted file mode 100644 index 9ee34301c4..0000000000 --- a/build/esm/tests/boundingbox_tests.js +++ /dev/null @@ -1,53 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { BoundingBox } from '../src/index.js'; -const BoundingBoxTests = { - Start() { - QUnit.module('BoundingBox'); - test('Initialization Test', initialization); - test('Merging Text', merging); - }, -}; -function initialization() { - const bb = new BoundingBox(4, 5, 6, 7); - equal(bb.getX(), 4, 'Bad X'); - equal(bb.getY(), 5, 'Bad Y'); - equal(bb.getW(), 6, 'Bad W'); - equal(bb.getH(), 7, 'Bad H'); - bb.setX(5); - equal(bb.getX(), 5, 'Bad X'); -} -function merging() { - const tests = [ - { - type: 'Intersection', - bb1: new BoundingBox(10, 10, 10, 10), - bb2: new BoundingBox(15, 20, 10, 10), - merged: new BoundingBox(10, 10, 15, 20), - }, - { - type: '1 contains 2', - bb1: new BoundingBox(10, 10, 30, 30), - bb2: new BoundingBox(15, 15, 10, 10), - merged: new BoundingBox(10, 10, 30, 30), - }, - { - type: '2 contains 1', - bb1: new BoundingBox(15, 15, 10, 10), - bb2: new BoundingBox(10, 10, 30, 30), - merged: new BoundingBox(10, 10, 30, 30), - }, - ]; - tests.forEach((test) => { - const type = test.type; - const bb1 = test.bb1; - const bb2 = test.bb2; - const merged = test.merged; - bb1.mergeWith(bb2); - equal(bb1.getX(), merged.getX(), type + ' - Bad X'); - equal(bb1.getY(), merged.getY(), type + ' - Bad Y'); - equal(bb1.getW(), merged.getW(), type + ' - Bad W'); - equal(bb1.getH(), merged.getH(), type + ' - Bad H'); - }); -} -VexFlowTests.register(BoundingBoxTests); -export { BoundingBoxTests }; diff --git a/build/esm/tests/boundingboxcomputation_tests.js b/build/esm/tests/boundingboxcomputation_tests.js deleted file mode 100644 index f4f9d51b30..0000000000 --- a/build/esm/tests/boundingboxcomputation_tests.js +++ /dev/null @@ -1,183 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { BoundingBoxComputation, Glyph } from '../src/index.js'; -const BoundingBoxComputationTests = { - Start() { - QUnit.module('BoundingBoxComputation'); - test('Point Test', point); - const run = VexFlowTests.runTests; - quadraticParams.forEach((params, index) => { - run(`Quadratic Test ${index}`, quadratic, params); - }); - cubicParams.forEach((params, index) => { - run(`Cubic Test ${index}`, cubic, params); - }); - }, -}; -function point() { - const bboxComp = new BoundingBoxComputation(); - bboxComp.addPoint(2, 3); - equal(bboxComp.getX1(), 2, 'Bad X1'); - equal(bboxComp.getY1(), 3, 'Bad Y1'); - equal(bboxComp.width(), 0, 'Bad width'); - equal(bboxComp.height(), 0, 'Bad height'); - bboxComp.addPoint(-5, 7); - equal(bboxComp.getX1(), -5, 'Bad X1'); - equal(bboxComp.getY1(), 3, 'Bad Y1'); - equal(bboxComp.width(), 7, 'Bad width'); - equal(bboxComp.height(), 4, 'Bad height'); -} -function createContext(options) { - const points = options.params.points; - let w = points[0]; - let h = points[1]; - for (let i = 2; i < points.length; i += 2) { - w = Math.max(w, points[i]); - h = Math.max(h, points[i + 1]); - } - const f = VexFlowTests.makeFactory(options, w + 20, h + 20); - const ctx = f.getContext(); - ctx.setLineCap('square'); - return ctx; -} -function rect(ctx, style, lineWidth, x, y, w, h) { - ctx.strokeStyle = style; - ctx.setLineWidth(lineWidth); - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + w, y); - ctx.lineTo(x + w, y + h); - ctx.lineTo(x, y + h); - ctx.lineTo(x, y); - ctx.stroke(); -} -const quadraticParams = [ - { - points: [10, 10, 100, 20, 110, 110], - box: [10, 10, 100, 100], - }, - { - points: [110, 10, 60, 110, 10, 20], - box: [10, 10, 100, 52.63], - }, - { - points: [10, 10, 30, 20, 50, 30], - box: [10, 10, 40, 20], - }, - { - points: [100, 30, 30, 110, 20, 30], - box: [20, 30, 80, 40], - }, -]; -function quadratic(options) { - const points = options.params.points; - const box = options.params.box; - const ctx = createContext(options); - const [x0, y0, x1, y1, x2, y2] = points; - let [bx, by, bw, bh] = box; - rect(ctx, '#0f0', 5, bx, by, bw, bh); - const bboxComp = new BoundingBoxComputation(); - bboxComp.addQuadraticCurve(x0, y0, x1, y1, x2, y2); - [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; - rect(ctx, '#00f', 3, bx, by, bw, bh); - const o = [0, x0, -y0, 2, x2, -y2, x1, -y1]; - const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); - rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); - ctx.setLineWidth(1); - ctx.fillStyle = '#000'; - Glyph.renderOutline(ctx, o, 1, 0, 0); - ctx.strokeStyle = '#f00'; - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.stroke(); - ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); - ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); - ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); - ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); - ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); - ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); - ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); - ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); -} -const cubicParams = [ - { - points: [10, 10, 60, 20, 100, 60, 110, 110], - box: [10, 10, 100, 100], - }, - { - points: [10, 10, 35, 110, 85, 110, 110, 10], - box: [10, 10, 100, 75], - }, - { - points: [10, 110, 90, 10, 30, 10, 110, 110], - box: [10, 35, 100, 75], - }, - { - points: [10, 10, 110, 110, 110, 10, 10, 110], - box: [10, 10, 75, 100], - }, - { - points: [10, 10, 130, 110, -10, 110, 110, 10], - box: [10, 10, 100, 75], - }, - { - points: [50, 10, 10, 110, 110, 110, 74, 10], - box: [40.38, 10, 41.59, 75], - }, - { - points: [10, 30, 35, 60, 110, 110, 60, 10], - box: [10, 10, 66.82, 59.37], - }, - { - points: [210, 70, 10, 10, 190, 10, 120, 90], - box: [112.02, 27.23, 97.98, 62.77], - }, - { - points: [20, 10, 210, 90, 10, 90, 100, 38], - box: [20, 10, 85.33, 64.06], - }, - { - points: [60, 14, 10, 14, 90, 14, 70, 14], - box: [43.28, 14, 30.01, 0], - }, - { - points: [10, 60, 20, 100, 100, 20, 110, 60], - box: [10, 48.45, 100, 23.1], - }, -]; -function cubic(options) { - const points = options.params.points; - const box = options.params.box; - const ctx = createContext(options); - const [x0, y0, x1, y1, x2, y2, x3, y3] = points; - let [bx, by, bw, bh] = box; - rect(ctx, '#0f0', 5, bx, by, bw, bh); - const bboxComp = new BoundingBoxComputation(); - bboxComp.addBezierCurve(x0, y0, x1, y1, x2, y2, x3, y3); - [bx, by, bw, bh] = [bboxComp.getX1(), bboxComp.getY1(), bboxComp.width(), bboxComp.height()]; - rect(ctx, '#00f', 3, bx, by, bw, bh); - const o = [0, x0, -y0, 3, x3, -y3, x1, -y1, x2, -y2]; - const bbox = Glyph.getOutlineBoundingBox(o, 1, 0, 0); - rect(ctx, '#fa0', 1, bbox.getX(), bbox.getY(), bbox.getW(), bbox.getH()); - ctx.setLineWidth(1); - ctx.fillStyle = '#000'; - Glyph.renderOutline(ctx, o, 1, 0, 0); - ctx.strokeStyle = '#f00'; - ctx.beginPath(); - ctx.moveTo(x0, y0); - ctx.lineTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.lineTo(x3, y3); - ctx.stroke(); - ok(Math.abs(bboxComp.getX1() - box[0]) < 0.01, `Bad X1: ${bboxComp.getX1()}`); - ok(Math.abs(bboxComp.getY1() - box[1]) < 0.01, `Bad Y1: ${bboxComp.getY1()}`); - ok(Math.abs(bboxComp.width() - box[2]) < 0.01, `Bad width: ${bboxComp.width()}`); - ok(Math.abs(bboxComp.height() - box[3]) < 0.01, `Bad height: ${bboxComp.height()}`); - ok(Math.abs(bbox.getX() - box[0]) < 0.01, `Bad X: ${bbox.getX()}`); - ok(Math.abs(bbox.getY() - box[1]) < 0.01, `Bad Y: ${bbox.getY()}`); - ok(Math.abs(bbox.getW() - box[2]) < 0.01, `Bad W: ${bbox.getW()}`); - ok(Math.abs(bbox.getH() - box[3]) < 0.01, `Bad H: ${bbox.getH()}`); -} -VexFlowTests.register(BoundingBoxComputationTests); -export { BoundingBoxComputationTests }; diff --git a/build/esm/tests/chordsymbol_tests.js b/build/esm/tests/chordsymbol_tests.js deleted file mode 100644 index 4a22d4ed05..0000000000 --- a/build/esm/tests/chordsymbol_tests.js +++ /dev/null @@ -1,387 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { ChordSymbol } from '../src/chordsymbol.js'; -import { Font } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { Ornament } from '../src/ornament.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Tables } from '../src/tables.js'; -const ChordSymbolTests = { - Start() { - QUnit.module('ChordSymbol'); - const run = VexFlowTests.runTests; - run('Chord Symbol With Modifiers', withModifiers); - run('Chord Symbol Font Size Tests', fontSize); - run('Chord Symbol Kerning Tests', kern); - run('Top Chord Symbols', top); - run('Top Chord Symbols Justified', topJustify); - run('Bottom Chord Symbols', bottom); - run('Bottom Stem Down Chord Symbols', bottomStemDown); - run('Double Bottom Chord Symbols', doubleBottom); - }, -}; -const superscript = { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }; -const subscript = { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }; -const note = (factory, keys, duration, chordSymbol) => factory.StaveNote({ keys, duration }).addModifier(chordSymbol, 0); -function getGlyphWidth(glyphName) { - const musicFont = Tables.currentMusicFont(); - const glyph = musicFont.getGlyphs()[glyphName]; - const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); - return widthInEm * 38 * Font.scaleToPxFrom.pt; -} -function withModifiers(options) { - const f = VexFlowTests.makeFactory(options, 750, 580); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const notes = [ - note(f, ['c/4'], 'q', chords[0]).addModifier(new Ornament('doit')), - note(f, ['c/4'], 'q', chords[1]), - note(f, ['c/4'], 'q', chords[2]).addModifier(new Ornament('fall')), - note(f, ['c/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - const formatter = f.Formatter(); - formatter.joinVoices([voice]); - const voiceW = formatter.preCalculateMinTotalWidth([voice]); - const staffW = voiceW + Stave.defaultPadding + getGlyphWidth('gClef'); - formatter.format([voice], voiceW); - const staff = f.Stave({ x: 10, y, width: staffW }).addClef('treble').draw(); - voice.draw(ctx, staff); - } - let chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall')); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('b9', superscript).addGlyphOrText('#11', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 14 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('add 3', superscript) - .addGlyphOrText('omit 9', subscript) - .addGlyph('rightParenTall')); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall')); - draw(chords, 40); - chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .setFontSize(10) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .setFontSize(16) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - draw(chords, 140); - chords = [ - f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - ]; - draw(chords, 240); - ok(true, 'Font Size Chord Symbol'); -} -function fontSize(options) { - const f = VexFlowTests.makeFactory(options, 750, 580); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble'); - const notes = [ - note(f, ['c/4'], 'q', chords[0]), - note(f, ['c/4'], 'q', chords[1]), - note(f, ['c/4'], 'q', chords[2]), - note(f, ['c/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 12 }) - .addText('F7') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 14 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('add 3', superscript) - .addGlyphOrText('omit 9', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .addText('F7') - .addGlyph('leftParenTall') - .addGlyphOrText('b9', superscript) - .addGlyphOrText('#11', subscript) - .addGlyph('rightParenTall') - .setReportWidth(false)); - draw(chords, 40); - chords = []; - chords.push(f - .ChordSymbol({ fontSize: 10 }) - .setFontSize(10) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 12 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f.ChordSymbol({ fontSize: 14 }).addText('F7').addGlyphOrText('#11', superscript).addGlyphOrText('b9', subscript)); - chords.push(f - .ChordSymbol({ fontSize: 16 }) - .setFontSize(16) - .addText('F7') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript)); - draw(chords, 140); - chords = [ - f.ChordSymbol({ fontSize: 10 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 14 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 16 }).addGlyphOrText('Ab').addGlyphOrText('7(#11b9)', superscript), - f.ChordSymbol({ fontSize: 18 }).addGlyphOrText('C#').addGlyphOrText('7(#11b9)', superscript), - ]; - draw(chords, 240); - ok(true, 'Font Size Chord Symbol'); -} -function kern(options) { - const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['C/4'], 'q', chords[0]), - note(f, ['C/4'], 'q', chords[1]), - note(f, ['C/4'], 'q', chords[2]), - note(f, ['C/4'], 'q', chords[3]), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chords = [ - f.ChordSymbol().addText('A').addGlyphSuperscript('dim').setReportWidth(false), - f.ChordSymbol({ kerning: false, reportWidth: false }).addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol({ hJustify: 'left', reportWidth: false }).addText('C').addGlyph('halfDiminished', superscript), - f.ChordSymbol({ reportWidth: false }).addText('D').addGlyph('halfDiminished', superscript), - ]; - draw(chords, 10); - chords = [ - f.ChordSymbol().addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol({ kerning: false }).addText('A').addGlyphSuperscript('dim'), - f.ChordSymbol().addText('A').addGlyphSuperscript('+').addTextSuperscript('5'), - f.ChordSymbol().addText('G').addGlyphSuperscript('+').addTextSuperscript('5'), - ]; - draw(chords, 110); - chords = [ - f.ChordSymbol().addText('A').addGlyph('-'), - f.ChordSymbol().addText('E').addGlyph('-'), - f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), - ]; - draw(chords, 210); - chords = [ - f.ChordSymbol().addGlyphOrText('F/B').addGlyphOrText('b', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('V/V'), - f.ChordSymbol().addText('A').addGlyphOrText('(#11)', superscript), - f.ChordSymbol().addText('E').addGlyphOrText('(#9)', superscript), - ]; - draw(chords, 310); - ok(true, 'Chord Symbol Kerning Tests'); -} -function top(options) { - const f = VexFlowTests.makeFactory(options, 650 * 1.5, 650); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - const note = (factory, keys, duration, chordSymbol, direction) => factory.StaveNote({ keys, duration, stem_direction: direction }).addModifier(chordSymbol, 0); - function draw(c1, c2, y) { - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['e/4', 'a/4', 'd/5'], 'h', c1, 1).addModifier(new Accidental('b'), 0), - note(f, ['c/5', 'e/5', 'c/6'], 'h', c2, -1), - ]; - const score = f.EasyScore(); - const voice = score.voice(notes, { time: '4/4' }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - } - let chord1 = f - .ChordSymbol({ reportWidth: false }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', superscript); - let chord2 = f - .ChordSymbol({ reportWidth: false }) - .addText('C') - .setHorizontal('left') - .addGlyphSuperscript('majorSeventh'); - draw(chord1, chord2, 40); - chord1 = f - .ChordSymbol() - .addText('F7') - .addTextSuperscript('(') - .addGlyphOrText('#11b9', superscript) - .addTextSuperscript(')'); - chord2 = f.ChordSymbol().addText('C').setHorizontal('left').addTextSuperscript('Maj.'); - draw(chord1, chord2, 140); - chord1 = f - .ChordSymbol() - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol().addText('C').addTextSuperscript('sus4'); - draw(chord1, chord2, 240); - ok(true, 'Top Chord Symbol'); -} -function topJustify(options) { - const f = VexFlowTests.makeFactory(options, 500 * 1.5, 680); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chord1, chord2, y) { - const stave = new Stave(10, y, 450).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['e/4', 'a/4', 'd/5'], 'h', chord1).addModifier(new Accidental('b'), 0), - note(f, ['c/4', 'e/4', 'B/4'], 'h', chord2), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - let chord1 = f.ChordSymbol().addText('F7').setHorizontal('left').addGlyphOrText('(#11b9)', superscript); - let chord2 = f.ChordSymbol({ hJustify: 'left' }).addText('C').addGlyphSuperscript('majorSeventh'); - draw(chord1, chord2, 40); - chord1 = f - .ChordSymbol({ hJustify: 'center' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', superscript); - chord2 = f.ChordSymbol({ hJustify: 'center' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 140); - chord1 = f - .ChordSymbol({ hJustify: 'right' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol({ hJustify: 'right' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 240); - chord1 = f - .ChordSymbol({ hJustify: 'left' }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', superscript) - .addGlyphOrText('b9', subscript); - chord2 = f.ChordSymbol({ hJustify: 'centerStem' }).addText('C').addTextSuperscript('Maj.'); - draw(chord1, chord2, 340); - ok(true, 'Top Chord Justified'); -} -function bottom(options) { - const f = VexFlowTests.makeFactory(options, 600 * 1.5, 230); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[0]), - note(f, ['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), - note(f, ['c/4', 'e/4', 'g/4'], 'q', chords[2]), - note(f, ['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), - ]; - draw(chords, 10); - ok(true, 'Bottom Chord Symbol'); -} -function bottomStemDown(options) { - const f = VexFlowTests.makeFactory(options, 600 * 1.5, 330); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, y) { - const note = (keys, duration, chordSymbol) => new StaveNote({ keys, duration, stem_direction: -1 }).addModifier(chordSymbol, 0); - const stave = new Stave(10, y, 400).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(['c/4', 'f/4', 'a/4'], 'q', chords[0]), - note(['c/4', 'e/4', 'b/4'], 'q', chords[1]).addModifier(new Accidental('b'), 2), - note(['c/4', 'e/4', 'g/4'], 'q', chords[2]), - note(['c/4', 'f/4', 'a/4'], 'q', chords[3]).addModifier(new Accidental('#'), 1), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords = [ - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('F'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('C7'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addText('A').addGlyphSuperscript('dim'), - ]; - draw(chords, 10); - ok(true, 'Bottom Stem Down Chord Symbol'); -} -function doubleBottom(options) { - const f = VexFlowTests.makeFactory(options, 600 * 1.5, 260); - const ctx = f.getContext(); - ctx.scale(1.5, 1.5); - function draw(chords, chords2, y) { - const note = (keys, duration, chordSymbol1, chordSymbol2) => new StaveNote({ keys, duration }).addModifier(chordSymbol1, 0).addModifier(chordSymbol2, 0); - const stave = f.Stave({ x: 10, y, width: 450 }).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(['c/4', 'f/4', 'a/4'], 'q', chords[0], chords2[0]), - note(['c/4', 'e/4', 'b/4'], 'q', chords[1], chords2[1]).addModifier(f.Accidental({ type: 'b' }), 2), - note(['c/4', 'e/4', 'g/4'], 'q', chords[2], chords2[2]), - note(['c/4', 'f/4', 'a/4'], 'q', chords[3], chords2[3]).addModifier(f.Accidental({ type: '#' }), 1), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - } - const chords1 = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('I').addTextSuperscript('6').addTextSubscript('4'), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V'), - f.ChordSymbol({ vJustify: 'bottom' }).addLine(12), - f.ChordSymbol({ vJustify: 'bottom' }).addGlyphOrText('V/V'), - ]; - const chords2 = [ - f.ChordSymbol({ vJustify: 'bottom' }).addText('T'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('D'), - f.ChordSymbol({ vJustify: 'bottom' }).addText('SD'), - ]; - draw(chords1, chords2, 10); - ok(true, '2 Bottom Chord Symbol'); -} -VexFlowTests.register(ChordSymbolTests); -export { ChordSymbolTests }; diff --git a/build/esm/tests/clef_tests.js b/build/esm/tests/clef_tests.js deleted file mode 100644 index 230c60d2d9..0000000000 --- a/build/esm/tests/clef_tests.js +++ /dev/null @@ -1,131 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -const ClefTests = { - Start() { - QUnit.module('Clef'); - const run = VexFlowTests.runTests; - run('Clef Test', draw); - run('Clef End Test', drawEnd); - run('Small Clef Test', drawSmall); - run('Small Clef End Test', drawSmallEnd); - run('Clef Change Test', drawClefChange); - }, -}; -function draw(options) { - const f = VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('treble') - .addClef('treble', 'default', '8va') - .addClef('treble', 'default', '8vb') - .addClef('alto') - .addClef('tenor') - .addClef('soprano') - .addClef('bass') - .addClef('bass', 'default', '8vb') - .addClef('mezzo-soprano') - .addClef('baritone-c') - .addClef('baritone-f') - .addClef('subbass') - .addClef('percussion') - .addClef('french') - .addEndClef('treble'); - f.draw(); - ok(true, 'all pass'); -} -function drawEnd(options) { - const f = VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('bass') - .addEndClef('treble') - .addEndClef('treble', 'default', '8va') - .addEndClef('treble', 'default', '8vb') - .addEndClef('alto') - .addEndClef('tenor') - .addEndClef('soprano') - .addEndClef('bass') - .addEndClef('bass', 'default', '8vb') - .addEndClef('mezzo-soprano') - .addEndClef('baritone-c') - .addEndClef('baritone-f') - .addEndClef('subbass') - .addEndClef('percussion') - .addEndClef('french'); - f.draw(); - ok(true, 'all pass'); -} -function drawSmall(options) { - const f = VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('treble', 'small') - .addClef('treble', 'small', '8va') - .addClef('treble', 'small', '8vb') - .addClef('alto', 'small') - .addClef('tenor', 'small') - .addClef('soprano', 'small') - .addClef('bass', 'small') - .addClef('bass', 'small', '8vb') - .addClef('mezzo-soprano', 'small') - .addClef('baritone-c', 'small') - .addClef('baritone-f', 'small') - .addClef('subbass', 'small') - .addClef('percussion', 'small') - .addClef('french', 'small') - .addEndClef('treble', 'small'); - f.draw(); - ok(true, 'all pass'); -} -function drawSmallEnd(options) { - const f = VexFlowTests.makeFactory(options, 800, 120); - f.Stave() - .addClef('bass', 'small') - .addEndClef('treble', 'small') - .addEndClef('treble', 'small', '8va') - .addEndClef('treble', 'small', '8vb') - .addEndClef('alto', 'small') - .addEndClef('tenor', 'small') - .addEndClef('soprano', 'small') - .addEndClef('bass', 'small') - .addEndClef('bass', 'small', '8vb') - .addEndClef('mezzo-soprano', 'small') - .addEndClef('baritone-c', 'small') - .addEndClef('baritone-f', 'small') - .addEndClef('subbass', 'small') - .addEndClef('percussion', 'small') - .addEndClef('french', 'small'); - f.draw(); - ok(true, 'all pass'); -} -function drawClefChange(options) { - const f = VexFlowTests.makeFactory(options, 800, 180); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.ClefNote({ type: 'alto', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'alto' }), - f.ClefNote({ type: 'tenor', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'tenor' }), - f.ClefNote({ type: 'soprano', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'soprano' }), - f.ClefNote({ type: 'bass', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'bass' }), - f.ClefNote({ type: 'mezzo-soprano', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'mezzo-soprano' }), - f.ClefNote({ type: 'baritone-c', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-c' }), - f.ClefNote({ type: 'baritone-f', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'baritone-f' }), - f.ClefNote({ type: 'subbass', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'subbass' }), - f.ClefNote({ type: 'french', options: { size: 'small' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'french' }), - f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8vb' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: -1 }), - f.ClefNote({ type: 'treble', options: { size: 'small', annotation: '8va' } }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble', octave_shift: 1 }), - ]; - const voice = f.Voice({ time: '12/4' }).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(ClefTests); -export { ClefTests }; diff --git a/build/esm/tests/crossbeam_tests.js b/build/esm/tests/crossbeam_tests.js deleted file mode 100644 index a3ee3e1d0f..0000000000 --- a/build/esm/tests/crossbeam_tests.js +++ /dev/null @@ -1,306 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Stave } from '../src/stave.js'; -const CrossBeamTests = { - Start() { - QUnit.module('CrossBeam'); - const run = VexFlowTests.runTests; - const crossStaveTests = []; - crossStaveTests.push({ - title: 'Single clef mixed 1', - time: '3/4', - voices: [ - { - notes: [{ notestring: 'g4/16, f4/16, a6/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0, 0, 0], - beammask: [1, 1, -1, -1, 0, -1, 1], - clef: 'treble', - }, - ], - }); - crossStaveTests.push({ - title: 'Single clef mixed 2', - time: '3/4', - voices: [ - { - notes: [{ notestring: 'g4/16, f6/16, a4/16, g6/16, b4/4/r, g6/8, g4/8 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0, 0, 0], - beammask: [1, -1, 1, -1, 0, -1, 1], - clef: 'treble', - }, - ], - }); - crossStaveTests.push({ - title: 'Mixed clef voice middle', - time: '2/4', - voices: [ - { - notes: [{ notestring: 'e#5/4, b4/16/r, b4/16, d5/16., c5/32 ', clef: 'treble' }], - stavemask: [0, 0, 0, 0, 0], - beammask: [0, 0, 1, 1, 1], - clef: 'treble', - }, - { - notes: [ - { notestring: 'C3/16, B3/16, C4/16', clef: 'bass' }, - { notestring: 'E#4/16', clef: 'treble' }, - { notestring: 'C4/4', clef: 'bass' }, - ], - stavemask: [1, 1, 1, 0, 1], - beammask: [1, 1, 1, -1, 0], - clef: 'bass', - }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam up4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, 1, 1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam down4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, -1, -1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle1)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle2)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/8, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle3)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/16, B4/q, A4/8, E4/8', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.push({ - title: 'Vertical alignment - cross stave (beam middle4)', - time: '4/4', - voices: [ - { - notes: [ - { notestring: 'C#5/q, C5/8, B4/q, A4/8, E4/16', clef: 'treble' }, - { notestring: 'C4/16, D4/8', clef: 'bass' }, - ], - beammask: [0, 0, 0, -1, -1, 1, 1], - stavemask: [0, 0, 0, 0, 0, 1, 1], - clef: 'treble', - }, - { notes: [{ notestring: '', clef: 'bass' }], beammask: [], stavemask: [], clef: 'bass' }, - ], - }); - crossStaveTests.forEach((cst) => { - run(cst.title, crossClef, cst); - }); - }, -}; -function crossClef(options) { - const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - details: { softmaxFactor: 100 }, - autoWidth: true, - debugFormatter: false, - }); - const testdata = options.params; - const voicedata = testdata.voices; - const stavemap = []; - for (let i = 0; i < voicedata.length; ++i) { - const clef = voicedata[i].clef; - stavemap.push(system.addStave({ voices: [] }).addClef(clef).addTimeSignature(testdata.time)); - } - for (let i = 0; i < voicedata.length; ++i) { - const stavemask = voicedata[i].stavemask; - let scoreNotes = []; - const voicenotes = voicedata[i].notes; - for (let k = 0; k < voicenotes.length; ++k) { - scoreNotes = scoreNotes.concat(score.notes(voicenotes[k].notestring, { clef: voicenotes[k].clef })); - } - const beammask = voicedata[i].beammask; - let curGroup = []; - const beamGroups = []; - for (let j = 0; j < scoreNotes.length; ++j) { - const note = scoreNotes[j]; - note.setStave(stavemap[stavemask[j]]); - if (beammask[j] !== 0) { - note.setStemDirection(beammask[j]); - curGroup.push(note); - } - else { - if (curGroup.length) { - beamGroups.push(curGroup); - curGroup = []; - } - } - } - if (curGroup.length) { - beamGroups.push(curGroup); - } - beamGroups.forEach((bg) => { - score.beam(bg); - }); - if (scoreNotes.length > 0) { - const voice = score.voice(scoreNotes, { time: testdata.time }); - system.addVoices([voice]); - } - } - f.draw(); - ok(true); -} -VexFlowTests.register(CrossBeamTests); -export { CrossBeamTests }; diff --git a/build/esm/tests/curve_tests.js b/build/esm/tests/curve_tests.js deleted file mode 100644 index 2a6f501162..0000000000 --- a/build/esm/tests/curve_tests.js +++ /dev/null @@ -1,118 +0,0 @@ -import { concat, VexFlowTests } from './vexflow_test_helpers.js'; -import { CurvePosition } from '../src/curve.js'; -const CurveTests = { - Start() { - QUnit.module('Curve'); - const run = VexFlowTests.runTests; - run('Simple Curve', simple); - run('Rounded Curve', rounded); - run('Thick Thin Curves', thickThin); - run('Top Curve', top); - }, -}; -function createTest(noteGroup1, noteGroup2, setupCurves) { - return (options) => { - const factory = VexFlowTests.makeFactory(options, 350, 200); - const stave = factory.Stave({ y: 50 }); - const score = factory.EasyScore(); - const staveNotes = [ - score.beam(score.notes(...noteGroup1)), - score.beam(score.notes(...noteGroup2)), - ].reduce(concat); - setupCurves(factory, staveNotes); - const voices = [score.voice(staveNotes, { time: '4/4' })]; - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - ok('Simple Curve'); - }; -} -const simple = createTest(['c4/8, f5, d5, g5', { stem: 'up' }], ['d6/8, f5, d5, g5', { stem: 'down' }], (f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - cps: [ - { x: 0, y: 10 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - cps: [ - { x: 0, y: 10 }, - { x: 0, y: 20 }, - ], - }, - }); -}); -const rounded = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - x_shift: -10, - y_shift: 30, - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 50 }, - ], - }, - }); -}); -const thickThin = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { - f.Curve({ - from: notes[0], - to: notes[3], - options: { - thickness: 10, - x_shift: -10, - y_shift: 30, - cps: [ - { x: 0, y: 20 }, - { x: 0, y: 50 }, - ], - }, - }); - f.Curve({ - from: notes[4], - to: notes[7], - options: { - thickness: 0, - cps: [ - { x: 0, y: 50 }, - { x: 0, y: 50 }, - ], - }, - }); -}); -const top = createTest(['c5/8, f4, d4, g5', { stem: 'up' }], ['d5/8, d6, d6, g5', { stem: 'down' }], (f, notes) => { - f.Curve({ - from: notes[0], - to: notes[7], - options: { - x_shift: -3, - y_shift: 10, - position: CurvePosition.NEAR_TOP, - position_end: CurvePosition.NEAR_HEAD, - cps: [ - { x: 0, y: 20 }, - { x: 40, y: 80 }, - ], - }, - }); -}); -VexFlowTests.register(CurveTests); -export { CurveTests }; diff --git a/build/esm/tests/dot_tests.js b/build/esm/tests/dot_tests.js deleted file mode 100644 index eafb9a2b85..0000000000 --- a/build/esm/tests/dot_tests.js +++ /dev/null @@ -1,119 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Beam } from '../src/beam.js'; -import { Dot } from '../src/dot.js'; -import { Formatter } from '../src/formatter.js'; -import { ModifierContext } from '../src/modifiercontext.js'; -import { Note } from '../src/note.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { TickContext } from '../src/tickcontext.js'; -import { Voice } from '../src/voice.js'; -const DotTests = { - Start() { - QUnit.module('Dot'); - const run = VexFlowTests.runTests; - run('Basic', basic); - run('Multi Voice', multiVoice); - }, -}; -function showOneNote(note1, stave, ctx, x) { - const modifierContext = new ModifierContext(); - note1.setStave(stave).addToModifierContext(modifierContext); - new TickContext().addTickable(note1).preFormat().setX(x); - note1.setContext(ctx).draw(); - Note.plotMetrics(ctx, note1, 140); -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 1000, 240); - const stave = new Stave(10, 10, 975); - stave.setContext(ctx); - stave.draw(); - const notes = [ - new StaveNote({ keys: ['c/4', 'e/4', 'a/4', 'b/4'], duration: 'w' }), - new StaveNote({ keys: ['a/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['g/4', 'a/4', 'b/4'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['e/4', 'f/4', 'b/4', 'c/5'], duration: '4' }), - new StaveNote({ - keys: ['g/4', 'a/4', 'd/5', 'e/5', 'g/5'], - duration: '4', - stem_direction: -1, - }), - new StaveNote({ keys: ['g/4', 'b/4', 'd/5', 'e/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['e/4', 'g/4', 'b/4', 'c/5'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['d/4', 'e/4', 'f/4', 'a/4', 'c/5', 'e/5', 'g/5'], duration: '2' }), - new StaveNote({ - keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], - duration: '16', - stem_direction: -1, - }), - new StaveNote({ keys: ['f/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'g/5'], duration: '16', stem_direction: 1 }), - new StaveNote({ - keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5', 'e/5', 'f/5'], - duration: '16', - stem_direction: 1, - }), - new StaveNote({ - keys: ['e/4', 'g/4', 'a/4', 'b/4', 'c/5'], - duration: '16', - stem_direction: 1, - }), - new StaveNote({ keys: ['e/4', 'a/4', 'b/4', 'c/5'], duration: '16', stem_direction: 1 }), - ]; - Dot.buildAndAttach(notes, { all: true }); - Dot.buildAndAttach([notes[7], notes[8], notes[9]], { all: true }); - Dot.buildAndAttach([notes[8], notes[9]], { all: true }); - const beam = new Beam(notes.slice(notes.length - 2)); - for (let i = 0; i < notes.length; i++) { - showOneNote(notes[i], stave, ctx, 30 + i * 65); - const dots = notes[i].getModifiersByType('Dot'); - ok(dots.length > 0, 'Note ' + i + ' has dots'); - for (let j = 0; j < dots.length; ++j) { - ok(dots[j].getWidth() > 0, 'Dot ' + j + ' has width set'); - } - } - beam.setContext(ctx).draw(); - VexFlowTests.plotLegendForNoteWidth(ctx, 890, 140); - ok(true, 'Full Dot'); -} -function multiVoice(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 750, 300); - const stave = new Stave(30, 45, 700).setContext(ctx).draw(); - const notes1 = [ - new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: '2', stem_direction: -1 }), - new StaveNote({ keys: ['c/4', 'e/4', 'c/5'], duration: '2', stem_direction: -1 }), - new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '2', stem_direction: -1 }), - new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), - new StaveNote({ keys: ['d/4', 'c/5', 'd/5'], duration: '8', stem_direction: -1 }), - ]; - Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); - Dot.buildAndAttach([notes1[0], notes1[2], notes1[3], notes1[4]], { all: true }); - Dot.buildAndAttach([notes1[1]], { index: 0 }); - Dot.buildAndAttach([notes1[1]], { index: 0 }); - Dot.buildAndAttach([notes1[1]], { index: 1 }); - Dot.buildAndAttach([notes1[1]], { index: 1 }); - Dot.buildAndAttach([notes1[1]], { index: 2 }); - Dot.buildAndAttach([notes1[1]], { index: 2 }); - Dot.buildAndAttach([notes1[1]], { index: 2 }); - Dot.buildAndAttach([notes1[2], notes1[3], notes1[4]]); - const notes2 = [ - new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '2', stem_direction: 1 }), - new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['d/5', 'g/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), - new StaveNote({ keys: ['d/5', 'a/5', 'b/5'], duration: '8', stem_direction: 1 }), - ]; - Dot.buildAndAttach(notes2, { all: true }); - Dot.buildAndAttach([notes2[1]], { all: true }); - const voice1 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes1); - const voice2 = new Voice().setMode(Voice.Mode.SOFT).addTickables(notes2); - const formatter = new Formatter().joinVoices([voice1, voice2]); - formatter.format([voice1, voice2], 700); - voice1.draw(ctx, stave); - voice2.draw(ctx, stave); - notes1.forEach((note) => Note.plotMetrics(ctx, note, 190)); - notes2.forEach((note) => Note.plotMetrics(ctx, note, 20)); - VexFlowTests.plotLegendForNoteWidth(ctx, 620, 220); - ok(true, 'Full Dot'); -} -VexFlowTests.register(DotTests); -export { DotTests }; diff --git a/build/esm/tests/easyscore_tests.js b/build/esm/tests/easyscore_tests.js deleted file mode 100644 index 9935fdb647..0000000000 --- a/build/esm/tests/easyscore_tests.js +++ /dev/null @@ -1,488 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Articulation } from '../src/articulation.js'; -import { EasyScore } from '../src/easyscore.js'; -import { FretHandFinger } from '../src/frethandfinger.js'; -import { Modifier } from '../src/modifier.js'; -import { Parenthesis } from '../src/parenthesis.js'; -import { StaveConnector } from '../src/staveconnector.js'; -import { Stem } from '../src/stem.js'; -import { Tuplet } from '../src/tuplet.js'; -const EasyScoreTests = { - Start() { - QUnit.module('EasyScore'); - test('Basic', basic); - test('Accidentals', accidentals); - test('Durations', durations); - test('Chords', chords); - test('Dots', dots); - test('Types', types); - test('Options', options); - const run = VexFlowTests.runTests; - run('Draw Basic', drawBasicTest); - run('Draw Different KeySignature', drawDiffKeysig); - run('Draw Basic Muted', drawBasicMutedTest); - run('Draw Basic Harmonic', drawBasicHarmonicTest); - run('Draw Basic Slash', drawBasicSlashTest); - run('Draw Ghostnote Basic', drawGhostBasicTest); - run('Draw Ghostnote Dotted', drawGhostDottedTest); - run('Draw Parenthesised', drawParenthesisedTest); - run('Draw Accidentals', drawAccidentalsTest); - run('Draw Beams', drawBeamsTest); - run('Draw Tuplets', drawTupletsTest); - run('Draw Dots', drawDotsTest); - run('Draw Options', drawOptionsTest); - run('Draw Fingerings', drawFingeringsTest); - run('Keys', keys); - }, -}; -function createShortcuts(score) { - return { - voice: score.voice.bind(score), - notes: score.notes.bind(score), - beam: score.beam.bind(score), - tuplet: score.tuplet.bind(score), - }; -} -function basic() { - const score = new EasyScore(); - const mustPass = ['c4', 'c#4', 'c4/r', 'c#5', 'c3/m', 'c3//m', 'c3//h', 'c3/s', 'c3//s', 'c3/g', 'c3//g']; - const mustFail = ['', '()', '7', '(c#4 e5 g6']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function accidentals() { - const score = new EasyScore(); - const mustPass = [ - 'c3', - 'c##3, cb3', - 'Cn3', - 'f3//m', - '(c##3 cbb3 cn3), cb3', - 'cbbs7', - 'cbb7', - 'cbss7', - 'cbs7', - 'cb7', - 'cdb7', - 'cd7', - 'c##7', - 'c#7', - 'cn7', - 'c++-7', - 'c++7', - 'c+-7', - 'c+7', - '(cbs3 bbs3 dbs3), ebs3', - '(cd7 cbb3 cn3), cb3', - 'co7', - 'ck7', - ]; - const mustFail = [ - 'ct3', - 'cdbb7', - '(cq cbb3 cn3), cb3', - '(cdd7 cbb3 cn3), cb3', - 'cbbbs7', - 'cbbss7', - 'cbsss7', - 'csbs7', - 'cddb7', - 'cddbb7', - 'cdd7', - 'c##b7', - 'c#bs7', - 'cnb#7', - 'c+#+b-d7', - 'c+--7', - 'c++--7', - 'c+++7', - 'cbk7', - 'cok7', - 'cko7', - 'c#s7', - ]; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function durations() { - const score = new EasyScore(); - const mustPass = ['c3/4', 'c##3/w, cb3', 'c##3/w, cb3/q', 'c##3/q, cb3/32', '(c##3 cbb3 cn3), cb3']; - const mustFail = ['Cn3/]', '/', '(cq cbb3 cn3), cb3', '(cdd7 cbb3 cn3), cb3']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function chords() { - const score = new EasyScore(); - const mustPass = [ - '(c5)', - '(c3 e0 g9)', - '(c##4 cbb4 cn4)/w, (c#5 cb2 a3)/32', - '(d##4 cbb4 cn4)/w/r, (c#5 cb2 a3)', - '(c##4 cbb4 cn4)/4, (c#5 cb2 a3)', - '(c##4 cbb4 cn4)/m, (c#5 cb2 a3)', - ]; - const mustFail = ['(c)']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function dots() { - const score = new EasyScore(); - const mustPass = [ - 'c3/4.', - 'c##3/w.., cb3', - 'f##3/s, cb3/q...', - 'c##3/q, cb3/32', - '(c##3 cbb3 cn3)., cb3', - '(c5).', - '(c##4 cbb4 cn4)/w.., (c#5 cb2 a3)/32', - ]; - const mustFail = ['.', 'c.#', 'c#4./4']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function types() { - const score = new EasyScore(); - const mustPass = ['c3/4/m.', 'c##3//r.., cb3', 'c##3/m.., cb3', 'c##3/r.., cb3', 'd##3/w/s, cb3/q...', 'Fb4']; - const mustFail = ['c4/q/U', '(c##4, cbb4 cn4)/w.., (c#5 cb2 a3)/32', 'z#3']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function options() { - const score = new EasyScore(); - const mustPass = [ - 'c3/4.[foo="bar"]', - 'c##3/w.., cb3[id="blah"]', - 'c##3/q, cb3/32', - '(c##3 cbb3 cn3).[blah="bod4o"], cb3', - '(c5)[fooooo="booo"]', - 'c#5[id="foobar"]', - ]; - const mustFail = ['.[', 'f##3/w[], cb3/q...']; - mustPass.forEach((line) => equal(score.parse(line).success, true, line)); - mustFail.forEach((line) => equal(score.parse(line).success, false, line)); -} -function drawBasicTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice(notes('c#5/h., c5/q', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawDiffKeysig(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice(notes('c5/h., c5/q', { stem: 'up' })), - ], - }) - .addClef('treble') - .addTimeSignature('4/4') - .addKeySignature('D'); - system - .addStave({ - voices: [voice(notes('c#3/q, cn3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass') - .addTimeSignature('4/4'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicMutedTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/m, c4/q/m, c4/q/r, c4/q/m', { stem: 'down' })), - voice(notes('c#5/h/m., c5/q/m', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/m, cn3/q/m, bb3/q/m, d##3/q/m', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicHarmonicTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/h, c4/q/h, c4/q/r, c4/q/h', { stem: 'down' })), - voice(notes('c#5/h/h., c5/q/h', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/h, cn3/q/h, bb3/q/h, d##3/q/h', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBasicSlashTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(d4 e4 g4)/q/s, c4/q/s, c4/q/r, c4/q/s', { stem: 'down' })), - voice(notes('c#5/h/s., c5/q/s', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c#3/q/s, cn3/q/s, bb3/q/s, d##3/q/s', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawGhostBasicTest(options) { - const f = VexFlowTests.makeFactory(options, 550); - const score = f.EasyScore(); - const system = f.System(); - system.addStave({ - voices: [ - score.voice([ - ...score.notes('f#5/4, f5, db5, c5', { stem: 'up' }), - ...score.beam(score.notes('c5/8, d5, fn5, e5', { stem: 'up' })), - ...score.beam(score.notes('d5, c5', { stem: 'up' })), - ], { time: '7/4' }), - score.voice(score.notes('c4/h/g, f4/4, c4/4/g, e4/4, c4/8/g, d##4/8, c4/8, c4/8', { stem: 'down' }), { - time: '7/4', - }), - ], - }); - f.draw(); - expect(0); -} -function drawGhostDottedTest(options) { - const f = VexFlowTests.makeFactory(options, 550); - const score = f.EasyScore(); - const system = f.System(); - system.addStave({ - voices: [ - score.voice([ - ...score.notes('c4/4/g., fbb5/8, d5/4', { stem: 'up' }), - ...score.beam(score.notes('c5/8, c#5/16, d5/16', { stem: 'up' })), - ...score.notes('c4/2/g.., fn5/8', { stem: 'up' }), - ], { time: '8/4' }), - score.voice([ - ...score.notes('f#4/4', { stem: 'down' }), - ...score.beam(score.notes('e4/8, d4/8', { stem: 'down' })), - ...score.notes('c4/4/g.., cb4/16, c#4/h, d4/4', { stem: 'down' }), - ...score.beam(score.notes('fn4/8, e4/8', { stem: 'down' })), - ], { time: '8/4' }), - ], - }); - f.draw(); - expect(0); -} -function drawParenthesisedTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - const notes1 = notes('(d4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' }); - Parenthesis.buildAndAttach([notes1[0], notes1[3]]); - const notes2 = notes('c#5/h., c5/q', { stem: 'down' }); - Parenthesis.buildAndAttach([notes2[0], notes2[1]]); - system - .addStave({ - voices: [voice(notes1), voice(notes2)], - }) - .addClef('treble'); - const notes3 = notes('c#3/q, cn3/q, bb3/q, d##3/q', { stem: 'down' }); - Parenthesis.buildAndAttach(notes3); - system - .addStave({ - voices: [voice(notes3)], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawAccidentalsTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 350); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(cbbs4 ebb4 gbss4)/q, cbs4/q, cdb4/q/r, cd4/q', { stem: 'down' })), - voice(notes('c++-5/h., c++5/q', { stem: 'up' })), - ], - }) - .addClef('treble'); - system - .addStave({ - voices: [voice(notes('c+-3/q, c+3/q, bb3/q, d##3/q', { clef: 'bass' }))], - }) - .addClef('bass'); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - expect(0); -} -function drawBeamsTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes, beam } = createShortcuts(score); - system - .addStave({ - voices: [ - voice(notes('(c4 e4 g4)/q, c4/q, c4/q/r, c4/q', { stem: 'down' })), - voice([...notes('c#5/h.', { stem: 'up' }), ...beam(notes('c5/8, c5/8', { stem: 'up' }))]), - ], - }) - .addClef('treble'); - f.draw(); - expect(0); -} -function drawTupletsTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes, tuplet, beam } = createShortcuts(score); - const v1_tuplet = tuplet(notes('(c4 e4 g4)/q, cbb4/q, c4/q', { stem: 'down' }), { - location: Tuplet.LOCATION_BOTTOM, - }); - const v1_halfNote = notes('c4/h', { stem: 'down' }); - const v1 = voice([...v1_tuplet, ...v1_halfNote]); - const v2_halfNote = notes('c#5/h.', { stem: 'up' }); - const v2_tuplet = tuplet(beam(notes('cb5/8, cn5/8, c5/8', { stem: 'up' }))); - const v2 = voice([...v2_halfNote, ...v2_tuplet]); - system.addStave({ voices: [v1, v2] }).addClef('treble'); - f.draw(); - expect(0); -} -function drawDotsTest(options) { - const f = VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const system = f.System(); - const { voice, notes } = createShortcuts(score); - system - .addStave({ - voices: [voice(notes('(c4 e4 g4)/8., (c4 e4 g4)/8.., (c4 e4 g4)/8..., (c4 e4 g4)/8...., (c4 e4 g4)/16...'))], - }) - .addClef('treble'); - f.draw(); - expect(0); -} -function drawOptionsTest(options) { - const f = VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('B4/h[id="foobar", class="red,bold", stem="up", articulations="staccato.below,tenuto"], B4/q[articulations="accent.above"], B4/q[stem="down"]'); - system.addStave({ voices: [score.voice(notes)] }); - f.draw(); - const note0 = notes[0]; - const note1 = notes[1]; - const note0_modifier0 = note0.getModifiers()[0]; - const note0_modifier1 = note0.getModifiers()[1]; - const note1_modifier0 = note1.getModifiers()[0]; - equal(note0.getAttribute('id'), 'foobar'); - ok(note0.hasClass('red')); - ok(note0.hasClass('bold')); - equal(note0_modifier0.getCategory(), Articulation.CATEGORY); - equal(note0_modifier0.type, 'a.'); - equal(note0_modifier0.getPosition(), Modifier.Position.BELOW); - equal(note0_modifier1.getCategory(), Articulation.CATEGORY); - equal(note0_modifier1.type, 'a-'); - equal(note0_modifier1.getPosition(), Modifier.Position.ABOVE); - equal(note0.getStemDirection(), Stem.UP); - equal(note1_modifier0.getCategory(), Articulation.CATEGORY); - equal(note1_modifier0.type, 'a>'); - equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); - equal(notes[2].getStemDirection(), Stem.DOWN); -} -function drawFingeringsTest(options) { - const f = VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('C4/q[fingerings="1"], E4[fingerings="3.above"], G4[fingerings="5.below"], (C4 E4 G4)[fingerings="1,3,5"]'); - system.addStave({ voices: [score.voice(notes)] }); - f.draw(); - const note0_modifier0 = notes[0].getModifiers()[0]; - equal(note0_modifier0.getCategory(), FretHandFinger.CATEGORY); - equal(note0_modifier0.getFretHandFinger(), '1'); - equal(note0_modifier0.getPosition(), Modifier.Position.LEFT); - const note1_modifier0 = notes[1].getModifiers()[0]; - equal(note1_modifier0.getCategory(), FretHandFinger.CATEGORY); - equal(note1_modifier0.getFretHandFinger(), '3'); - equal(note1_modifier0.getPosition(), Modifier.Position.ABOVE); - const note2_modifier0 = notes[2].getModifiers()[0]; - equal(note2_modifier0.getCategory(), FretHandFinger.CATEGORY); - equal(note2_modifier0.getFretHandFinger(), '5'); - equal(note2_modifier0.getPosition(), Modifier.Position.BELOW); - const note3_modifiers = notes[3].getModifiers(); - const note3_modifier0 = note3_modifiers[0]; - const note3_modifier1 = note3_modifiers[1]; - const note3_modifier2 = note3_modifiers[2]; - equal(note3_modifier0.getCategory(), FretHandFinger.CATEGORY); - equal(note3_modifier0.getFretHandFinger(), '1'); - equal(note3_modifier0.getPosition(), Modifier.Position.LEFT); - equal(note3_modifier1.getCategory(), FretHandFinger.CATEGORY); - equal(note3_modifier1.getFretHandFinger(), '3'); - equal(note3_modifier1.getPosition(), Modifier.Position.LEFT); - equal(note3_modifier2.getCategory(), FretHandFinger.CATEGORY); - equal(note3_modifier2.getFretHandFinger(), '5'); - equal(note3_modifier2.getPosition(), Modifier.Position.LEFT); -} -function keys(options) { - const f = VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - const system = f.System(); - const notes = score.notes('c#3/q, c##3, cb3, cbb3, cn3, c3, cbbs3, cbss3, cbs3, cdb3, cd3, c++-3, c++3, c+-3, c+3, co3, ck3', { clef: 'bass' }); - system.addStave({ voices: [f.Voice().setStrict(false).addTickables(notes)] }).addClef('bass'); - f.draw(); - equal(notes[0].keys, 'c#/3'); - equal(notes[1].keys, 'c##/3'); - equal(notes[2].keys, 'cb/3'); - equal(notes[3].keys, 'cbb/3'); - equal(notes[4].keys, 'cn/3'); - for (let i = 5; i < notes.length; i++) { - equal(notes[i].keys, 'c/3'); - } -} -VexFlowTests.register(EasyScoreTests); -export { EasyScoreTests }; diff --git a/build/esm/tests/factory_tests.js b/build/esm/tests/factory_tests.js deleted file mode 100644 index 0d03e28937..0000000000 --- a/build/esm/tests/factory_tests.js +++ /dev/null @@ -1,44 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Factory } from '../src/factory.js'; -import { Barline } from '../src/stavebarline.js'; -const FactoryTests = { - Start() { - QUnit.module('Factory'); - test('Defaults', defaults); - const run = VexFlowTests.runTests; - run('Draw', draw); - run('Draw Tab (repeat barlines must be aligned)', drawTab); - }, -}; -function defaults() { - throws(() => new Factory({ renderer: { elementId: '', width: 700, height: 500 } }), 'Empty string for elementId throws an exception.'); - const factory = new Factory({ - renderer: { elementId: null, width: 700, height: 500 }, - }); - const options = factory.options; - equal(options.renderer.width, 700); - equal(options.renderer.height, 500); - equal(options.renderer.elementId, null); - equal(options.stave.space, 10); -} -function draw(options) { - const f = Factory.newFromElementId(options.elementId); - f.Stave().setClef('treble'); - f.draw(); - expect(0); -} -function drawTab(options) { - const factory = VexFlowTests.makeFactory(options, 500, 400); - const system = factory.System({ width: 500 }); - const stave = factory.Stave().setClef('treble').setKeySignature('C#').setBegBarType(Barline.type.REPEAT_BEGIN); - const voices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; - system.addStave({ stave, voices }); - const tabStave = factory.TabStave().setClef('tab').setBegBarType(Barline.type.REPEAT_BEGIN); - const tabVoices = [factory.Voice().addTickables([factory.GhostNote({ duration: 'w' })])]; - system.addStave({ stave: tabStave, voices: tabVoices }); - factory.draw(); - equal(stave.getModifiers()[0].getX(), tabStave.getModifiers()[0].getX()); - expect(1); -} -VexFlowTests.register(FactoryTests); -export { FactoryTests }; diff --git a/build/esm/tests/font_tests.js b/build/esm/tests/font_tests.js deleted file mode 100644 index 510f724e16..0000000000 --- a/build/esm/tests/font_tests.js +++ /dev/null @@ -1,135 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Bend } from '../src/bend.js'; -import { CanvasContext } from '../src/canvascontext.js'; -import { Element } from '../src/element.js'; -import { Flow } from '../src/flow.js'; -import { Font, FontStyle, FontWeight } from '../src/font.js'; -import { PedalMarking } from '../src/pedalmarking.js'; -import { StaveNote } from '../src/stavenote.js'; -import { TextBracket } from '../src/textbracket.js'; -import { TextNote } from '../src/textnote.js'; -import { Voice } from '../src/voice.js'; -const FontTests = { - Start() { - QUnit.module('Font'); - test('setFont', setFont); - test('Parsing', fontParsing); - test('Sizes', fontSizes); - const run = VexFlowTests.runTests; - run('Set Text Font to Georgia', setTextFontToGeorgia); - run('Set Music Font to Petaluma', setMusicFontToPetaluma); - }, -}; -function setFont() { - const canvas = document.createElement('canvas'); - canvas.width = 800; - canvas.height = 400; - const ctx = new CanvasContext(canvas.getContext('2d')); - ctx.setFont('PetalumaScript', '100px', 'normal', 'italic'); - equal(ctx.font, 'italic 100px PetalumaScript'); - const voice = new Voice(); - propEqual(voice.fontInfo, Element.TEXT_FONT); - voice.setFont('bold 32pt Arial'); - const fontInfo = voice.fontInfo; - equal(fontInfo === null || fontInfo === void 0 ? void 0 : fontInfo.size, '32pt'); - const flat = new Accidental('b'); - equal(flat.textFont, undefined); - flat.setFont(undefined, undefined, undefined, FontStyle.ITALIC); - equal(flat.getFont(), 'italic 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, FontWeight.BOLD, undefined); - equal(flat.getFont(), 'bold 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, FontWeight.BOLD, FontStyle.ITALIC); - equal(flat.getFont(), 'italic bold 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, FontWeight.BOLD, 'oblique'); - equal(flat.getFont(), 'oblique bold 10pt Arial, sans-serif'); - flat.setFont(undefined, undefined, 'normal', ''); - equal(flat.getFont(), '10pt Arial, sans-serif'); -} -function fontParsing() { - const b = new Bend('1/2', true); - const bFont = b.fontInfo; - equal(bFont === null || bFont === void 0 ? void 0 : bFont.family, Font.SANS_SERIF); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.size, Font.SIZE); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.weight, FontWeight.NORMAL); - equal(bFont === null || bFont === void 0 ? void 0 : bFont.style, FontStyle.NORMAL); - const f1 = 'Roboto Slab, serif'; - const t = new TextNote({ duration: '4', font: { family: f1 } }); - equal(f1, t.fontInfo.family); - const n1 = new StaveNote({ keys: ['e/5'], duration: '4' }); - const n2 = new StaveNote({ keys: ['c/5'], duration: '4' }); - const tb = new TextBracket({ start: n1, stop: n2 }); - const f2 = tb.fontInfo; - equal(f2 === null || f2 === void 0 ? void 0 : f2.size, 15); - equal(f2 === null || f2 === void 0 ? void 0 : f2.style, FontStyle.ITALIC); - const f3 = Font.fromCSSString(`bold 1.5em/3 "Lucida Sans Typewriter", "Lucida Console", Consolas, monospace`); - const f3SizeInPx = Font.convertSizeToPixelValue(f3.size); - equal(f3SizeInPx, 24); -} -function fontSizes() { - { - const size = '17px'; - const sizeInEm = Font.convertSizeToPixelValue(size) / Font.scaleToPxFrom.em; - equal(sizeInEm, 1.0625); - } - { - const size = '2em'; - const sizeInPx = Font.convertSizeToPixelValue(size); - equal(sizeInPx, 32); - } - { - const pedal = new PedalMarking([]); - equal(pedal.getFont(), 'italic bold 12pt Times New Roman, serif'); - equal(pedal.fontSizeInPoints, 12); - equal(pedal.fontSizeInPixels, 16); - const doubledSizePx = pedal.fontSizeInPixels * 2; - equal(doubledSizePx, 32); - const doubledSizePt = Font.scaleSize(pedal.fontSizeInPoints, 2); - equal(doubledSizePt, 24); - equal(Font.scaleSize('1.5em', 3), '4.5em'); - } -} -function setTextFontToGeorgia(options) { - const factory = VexFlowTests.makeFactory(options, 400, 200); - const stave = factory.Stave({ y: 40 }); - const score = factory.EasyScore(); - const voice1 = score.voice([ - factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), - factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), - factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), - ]); - const defaultFont = TextNote.TEXT_FONT; - TextNote.TEXT_FONT = { - family: 'Georgia, Courier New, serif', - size: 14, - weight: 'bold', - style: 'italic', - }; - const voice2 = score.voice([ - factory - .TextNote({ text: 'Here are some fun lyrics...', duration: 'w' }) - .setJustification(TextNote.Justification.LEFT), - ]); - const formatter = factory.Formatter(); - formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - factory.draw(); - TextNote.TEXT_FONT = defaultFont; - ok(true); -} -function setMusicFontToPetaluma(options) { - Flow.setMusicFont('Petaluma'); - const factory = VexFlowTests.makeFactory(options, 400, 200); - const stave = factory.Stave({ y: 40 }); - const score = factory.EasyScore(); - const voice = score.voice([ - factory.StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }), - factory.StaveNote({ keys: ['d/4', 'f/4'], stem_direction: -1, duration: 'q' }), - factory.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }), - ]); - const formatter = factory.Formatter(); - formatter.joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); -} -VexFlowTests.register(FontTests); -export { FontTests }; diff --git a/build/esm/tests/formatter/framestack.js b/build/esm/tests/formatter/framestack.js deleted file mode 100644 index 87b85af75b..0000000000 --- a/build/esm/tests/formatter/framestack.js +++ /dev/null @@ -1,61 +0,0 @@ -"use strict"; -class FrameStack { - constructor(parentEl, numFrames, params) { - this.parentEl = parentEl; - this.numFrames = numFrames; - this.options = Object.assign({ prefix: 'vex-frame-', width: 700, height: 800, iterationCallback: null }, params); - this.frames = []; - this.currentFrame = 0; - document.getElementById(this.parentEl).innerHTML = ''; - for (let i = 0; i < this.numFrames; i++) { - const div = document.createElement('div'); - div.id = this.frameID(i); - div.style.position = 'absolute'; - div.style.top = 0; - div.style.left = 0; - div.style.width = `${this.options.width}px`; - div.style.height = `${this.options.height}px`; - div.style.display = 'none'; - this.frames[i] = div; - } - } - frameID(i) { - return `${this.options.prefix}${i}`; - } - install() { - this.show(0); - setTimeout(() => { - const fragment = document.createDocumentFragment(); - for (let i = 0; i < this.numFrames; i++) { - fragment.appendChild(this.frames[i]); - } - const parent = document.getElementById(this.parentEl); - parent.appendChild(fragment); - parent.style.width = `${this.options.width}px`; - parent.style.height = `${this.options.height}px`; - }, 0); - } - get(i) { - return this.frames[i]; - } - show(i) { - this.frames[this.currentFrame].style.display = 'none'; - this.frames[i].style.display = 'block'; - this.currentFrame = i; - } - start(params) { - const options = Object.assign({ start: 0, end: this.numFrames, intervalms: 100 }, params); - this.animationTimer = setInterval(() => { - const frame = this.currentFrame + 1 === this.numFrames ? 0 : this.currentFrame + 1; - this.show(frame); - if (this.options.iterationCallback) - this.options.iterationCallback(frame); - }, options.intervalms); - } - stop() { - clearInterval(this.animationTimer); - } -} -if (typeof module != 'undefined') { - module.exports = { FrameStack }; -} diff --git a/build/esm/tests/formatter/tests.js b/build/esm/tests/formatter/tests.js deleted file mode 100644 index 4140ad78db..0000000000 --- a/build/esm/tests/formatter/tests.js +++ /dev/null @@ -1,203 +0,0 @@ -"use strict"; -const VF = Vex.Flow; -function subgroup(el, iterations, params) { - const options = Object.assign({ systemWidth: 550, debug: true }, params); - const f = new VF.Factory({ - renderer: { - elementId: el, - width: options.width, - height: options.height, - }, - }); - f.StaveNote = f.StaveNote.bind(f); - const stave1 = f.Stave({ x: 15, y: 40, width: options.systemWidth }).setClef('treble'); - const notes1 = [ - { keys: ['f/5'], stem_direction: 1, duration: '4' }, - { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, - ].map(f.StaveNote); - const notes2 = [ - { keys: ['c/4'], stem_direction: -1, duration: '4' }, - { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, - ].map(f.StaveNote); - const stave2 = f.Stave({ x: 15, y: 160, width: options.systemWidth }).setClef('bass'); - const notes3 = [ - { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - ].map(f.StaveNote); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); - function addAccidental(note, acc) { - return note.addModifier(f.Accidental({ type: acc }), 0); - } - function addSubGroup(note, subNotes) { - return note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0); - } - f.Beam({ notes: notes3.slice(1, 4) }); - f.Beam({ notes: notes3.slice(5) }); - addAccidental(notes1[1], '#'); - addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); - addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); - addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); - addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); - addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); - addAccidental(notes3[0], '#'); - addAccidental(notes3[3], 'b'); - addAccidental(notes3[5], '#'); - addAccidental(notes1[2], 'b'); - addAccidental(notes2[3], '#'); - const voice = f.Voice().addTickables(notes1); - const voice2 = f.Voice().addTickables(notes2); - const voice3 = f.Voice().addTickables(notes3); - const formatter = f.Formatter(); - formatter.joinVoices([voice, voice2]).joinVoices([voice3]).formatToStave([voice, voice2, voice3], stave1); - for (let i = 0; i < iterations; i++) { - formatter.tune({ alpha: 0.01 }); - } - f.draw(); - if (options.debug) { - VF.Formatter.plotDebugging(f.getContext(), formatter, stave1.getNoteStartX(), 20, 320); - } -} -function tuplets(el, iterations, params) { - const options = Object.assign({ systemWidth: 500, debug: true }, params); - const f = new VF.Factory({ - renderer: { - elementId: el, - width: options.width, - height: options.height, - }, - }); - const system = f.System({ - x: 50, - width: options.systemWidth, - debugFormatter: options.debug, - formatIterations: iterations, - }); - const score = f.EasyScore(); - const newVoice = function (notes) { - return score.voice(notes, { time: '1/4' }); - }; - const newStave = function (voice) { - return system - .addStave({ voices: [voice], debugNoteMetrics: options.debug }) - .addClef('treble') - .addTimeSignature('1/4'); - }; - const voices = [ - score.notes('c5/8, c5'), - score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), - score.notes('c5/16, c5, c5, c5'), - score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), - score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), - ]; - voices.map(newVoice).forEach(newStave); - system.addConnector().setType(VF.StaveConnector.type.BRACKET); - f.draw(); -} -function multistave(el, iterations, params) { - const options = Object.assign({ systemWidth: 550, debug: true, justify: true, alpha: 0.1 }, params); - const f = new VF.Factory({ - renderer: { - elementId: el, - width: options.width, - height: options.height, - }, - }); - const score = f.EasyScore(); - const stave11 = f.Stave({ y: 20, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); - const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); - const voice11 = score.voice(notes11, { time: '6/8' }); - const stave21 = f.Stave({ y: 130, width: 275 }).addTrebleGlyph().addTimeSignature('6/8'); - const notes21 = score.notes('d4/8, d4, d4, d4, eb4, eb4'); - const voice21 = score.voice(notes21, { time: '6/8' }); - const stave31 = f.Stave({ y: 250, width: 275 }).addClef('bass').addTimeSignature('6/8'); - const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - const voice31 = score.voice(notes31, { time: '6/8' }); - f.StaveConnector({ - top_stave: stave21, - bottom_stave: stave31, - type: 'brace', - }); - f.Beam({ notes: notes21.slice(0, 3) }); - f.Beam({ notes: notes21.slice(3, 6) }); - f.Beam({ notes: notes31.slice(0, 3) }); - f.Beam({ notes: notes31.slice(3, 6) }); - let formatter = f.Formatter().joinVoices([voice11]).joinVoices([voice21]).joinVoices([voice31]); - if (options.justify) { - formatter.formatToStave([voice11, voice21, voice31], stave11); - } - else { - formatter.format([voice11, voice21, voice31], 0); - } - for (let i = 0; i < iterations; i++) { - formatter.tune({ alphs: options.alpha }); - } - if (options.debug) { - VF.Formatter.plotDebugging(f.getContext(), formatter, stave11.getNoteStartX(), 20, 320); - } - const stave12 = f.Stave({ - x: stave11.width + stave11.x, - y: stave11.y, - width: stave11.width, - }); - var notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); - var voice12 = score.voice(notes12, { time: '6/8' }); - f.Stave({ - x: stave21.width + stave21.x, - y: stave21.y, - width: stave21.width, - }); - var notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); - var voice22 = score.voice(notes22, { time: '6/8' }); - f.Stave({ - x: stave31.width + stave31.x, - y: stave31.y, - width: stave31.width, - }); - var notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - var voice32 = score.voice(notes32, { time: '6/8' }); - formatter = f.Formatter().joinVoices([voice12]).joinVoices([voice22]).joinVoices([voice32]); - if (options.justify) { - formatter.formatToStave([voice12, voice22, voice32], stave12); - } - else { - formatter.format([voice12, voice22, voice32], 0); - } - for (var j = 0; j < iterations; j++) { - formatter.tune({ alpha: options.alpha }); - } - f.Beam({ notes: notes32.slice(0, 3) }); - f.Beam({ notes: notes32.slice(3, 6) }); - f.draw(); - if (options.debug) { - VF.Formatter.plotDebugging(f.getContext(), formatter, stave12.getNoteStartX(), 20, 320); - } -} -const Tests = { - tuplets: { - options: { width: 600, height: 750, debug: true }, - fn: tuplets, - }, - subgroup: { - options: { width: 650, height: 350, debug: true }, - fn: subgroup, - }, - multistave: { - options: { width: 650, height: 350, debug: true }, - fn: multistave, - }, -}; -if (typeof module != 'undefined') { - module.exports = Tests; -} diff --git a/build/esm/tests/formatter_tests.js b/build/esm/tests/formatter_tests.js deleted file mode 100644 index f24076eb77..0000000000 --- a/build/esm/tests/formatter_tests.js +++ /dev/null @@ -1,721 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; -import { Articulation } from '../src/articulation.js'; -import { Beam } from '../src/beam.js'; -import { Bend } from '../src/bend.js'; -import { Dot } from '../src/dot.js'; -import { Flow } from '../src/flow.js'; -import { Font, FontWeight } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { FretHandFinger } from '../src/frethandfinger.js'; -import { ModifierPosition } from '../src/modifier.js'; -import { Note } from '../src/note.js'; -import { Registry } from '../src/registry.js'; -import { Stave } from '../src/stave.js'; -import { StaveConnector } from '../src/staveconnector.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Stem } from '../src/stem.js'; -import { StringNumber } from '../src/stringnumber.js'; -import { Tables } from '../src/tables.js'; -import { Tuplet } from '../src/tuplet.js'; -import { Voice } from '../src/voice.js'; -import { MockTickable } from './mocks.js'; -const FormatterTests = { - Start() { - QUnit.module('Formatter'); - test('TickContext Building', buildTickContexts); - const run = VexFlowTests.runTests; - run('Penultimate Note Padding', penultimateNote); - run('Whitespace and justify', rightJustify); - run('Notehead padding', noteHeadPadding); - run('Justification and alignment with accidentals', accidentalJustification); - run('Long measure taking full space', longMeasureProblems); - run('Vertical alignment - few unaligned beats', unalignedNoteDurations1); - run('Vertical alignment - many unaligned beats', unalignedNoteDurations2, { globalSoftmax: false }); - run('Vertical alignment - many unaligned beats (global softmax)', unalignedNoteDurations2, { globalSoftmax: true }); - run('Vertical alignment - many mixed elements', alignedMixedElements, { globalSoftmax: true }); - run('StaveNote - Justification', justifyStaveNotes); - run('Notes with Tab', notesWithTab); - run('Multiple Staves - Justified', multiStaves, { debug: true }); - run('Softmax', softMax); - run('Mixtime', mixTime); - run('Tight', tightNotes1); - run('Tight 2', tightNotes2); - run('Annotations', annotations); - run('Proportional Formatting - No Tuning', proportional, { debug: true, iterations: 0 }); - run('Proportional Formatting - No Justification', proportional, { justify: false, debug: true, iterations: 0 }); - run('Proportional Formatting (20 iterations)', proportional, { debug: true, iterations: 20, alpha: 0.5 }); - }, -}; -function getGlyphWidth(glyphName) { - const musicFont = Tables.currentMusicFont(); - const glyph = musicFont.getGlyphs()[glyphName]; - const widthInEm = (glyph.x_max - glyph.x_min) / musicFont.getResolution(); - return widthInEm * 38 * Font.scaleToPxFrom.pt; -} -function buildTickContexts() { - function createTickable(beat) { - return new MockTickable().setTicks(beat); - } - const BEAT = (1 * Flow.RESOLUTION) / 4; - const tickables1 = [ - createTickable(BEAT).setWidth(10), - createTickable(BEAT * 2).setWidth(20), - createTickable(BEAT).setWidth(30), - ]; - const tickables2 = [ - createTickable(BEAT * 2).setWidth(10), - createTickable(BEAT).setWidth(20), - createTickable(BEAT).setWidth(30), - ]; - const voice1 = new Voice(Flow.TIME4_4); - const voice2 = new Voice(Flow.TIME4_4); - voice1.addTickables(tickables1); - voice2.addTickables(tickables2); - const formatter = new Formatter(); - const tContexts = formatter.createTickContexts([voice1, voice2]); - equal(tContexts.list.length, 4, 'Voices should have four tick contexts'); - throws(() => formatter.getMinTotalWidth(), /NoMinTotalWidth/, 'Expected to throw exception'); - ok(formatter.preCalculateMinTotalWidth([voice1, voice2]), 'Successfully runs preCalculateMinTotalWidth'); - equal(formatter.getMinTotalWidth(), 88, 'Get minimum total width without passing voices'); - formatter.preFormat(); - equal(formatter.getMinTotalWidth(), 88, 'Minimum total width'); - equal(tickables1[0].getX(), tickables2[0].getX(), 'First notes of both voices have the same X'); - equal(tickables1[2].getX(), tickables2[2].getX(), 'Last notes of both voices have the same X'); - ok(tickables1[1].getX() < tickables2[1].getX(), 'Second note of voice 2 is to the right of the second note of voice 1'); -} -function rightJustify(options) { - const f = VexFlowTests.makeFactory(options, 1200, 150); - const getTickables = (time, n, duration, duration2) => { - const tickar = []; - let i = 0; - for (i = 0; i < n; ++i) { - const dd = i === n - 1 ? duration2 : duration; - tickar.push(new StaveNote({ keys: ['f/4'], duration: dd })); - } - return new Voice(time).addTickables(tickar); - }; - const renderTest = (time, n, duration, duration2, x, width) => { - const formatter = f.Formatter(); - const stave = f.Stave({ x, y: 20, width }); - const voice = getTickables(time, n, duration, duration2); - formatter.joinVoices([voice]).formatToStave([voice], stave); - stave.draw(); - voice.draw(f.getContext(), stave); - }; - renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '2', 10, 300); - renderTest({ num_beats: 4, beat_value: 4, resolution: 4 * 4096 }, 1, 'w', 'w', 310, 300); - renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 3, '4', '4', 610, 300); - renderTest({ num_beats: 3, beat_value: 4, resolution: 4 * 4096 }, 6, '8', '8', 910, 300); - ok(true); -} -function penultimateNote(options) { - const f = VexFlowTests.makeFactory(options, 500, 550); - const score = f.EasyScore(); - const staffWidth = 310; - let system = undefined; - let voices = []; - let notes = []; - let note = undefined; - let stave = undefined; - let y = 10; - const draw = (softmax) => { - system = f.System({ - width: staffWidth, - y, - formatOptions: { align_rests: true }, - details: { softmaxFactor: softmax }, - }); - notes = []; - voices = []; - note = score.notes('C4/8/r', { clef: 'bass' })[0]; - notes.push(note); - note = score.notes('A3/8', { stem: 'up', clef: 'bass' })[0]; - notes.push(note); - note = score.notes('C4/4', { stem: 'up', clef: 'bass' })[0]; - notes.push(note); - voices.push(score.voice(notes).setMode(2)); - notes = []; - note = score.notes('( F3 A3 )/4', { stem: 'down', clef: 'bass' })[0]; - notes.push(note); - note = score.notes('B4/4/r', {})[0]; - notes.push(note); - voices.push(score.voice(notes).setMode(2)); - notes = []; - stave = system.addStave({ voices: voices }); - stave.addClef('bass'); - stave.addTimeSignature('2/4'); - voices = []; - f.draw(); - f.getContext().fillText(`softmax: ${softmax.toString()}`, staffWidth + 20, y + 50); - y += 100; - }; - draw(15); - draw(10); - draw(5); - draw(2); - draw(1); - ok(true); -} -function noteHeadPadding(options) { - const registry = new Registry(); - Registry.enableDefaultRegistry(registry); - const f = VexFlowTests.makeFactory(options, 600, 300); - const score = f.EasyScore(); - score.set({ time: '9/8' }); - const notes1 = score.notes('(d5 f5)/8,(c5 e5)/8,(d5 f5)/8,(c5 e5)/2.'); - const beams = [new Beam(notes1.slice(0, 3), true)]; - const voice1 = new Voice().setMode(Voice.Mode.SOFT); - const notes2 = score.notes('(g4 an4)/2.,(g4 a4)/4.', { clef: 'treble' }); - const voice2 = new Voice().setMode(Voice.Mode.SOFT); - voice2.addTickables(notes2); - voice1.addTickables(notes1); - const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const staveWidth = width + Stave.defaultPadding; - const stave1 = f.Stave({ y: 50, width: staveWidth }); - const stave2 = f.Stave({ y: 150, width: staveWidth }); - stave1.draw(); - stave2.draw(); - voice1.draw(f.getContext(), stave1); - voice2.draw(f.getContext(), stave2); - beams.forEach((b) => b.setContext(f.getContext()).draw()); - ok(true); -} -function longMeasureProblems(options) { - const registry = new Registry(); - Registry.enableDefaultRegistry(registry); - const f = VexFlowTests.makeFactory(options, 1500, 300); - const score = f.EasyScore(); - score.set({ time: '4/4' }); - const notes1 = score.notes('b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/8,b4/8,b4/4,b4/4,b4/2,b4/2,b4/4,b4/2,b4/8,b4/8'); - const voice1 = new Voice().setMode(Voice.Mode.SOFT); - const notes2 = score.notes('d3/4,(ab3 f4)/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d3/4,ab3/2,d3/4,ab3/4,d3/2,ab3/4,d4/4,d4/2,d4/4', { clef: 'bass' }); - const voice2 = new Voice().setMode(Voice.Mode.SOFT); - voice2.addTickables(notes2); - voice1.addTickables(notes1); - const formatter = f.Formatter().joinVoices([voice1]).joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const stave1 = f.Stave({ y: 50, width: width + Stave.defaultPadding }); - const stave2 = f.Stave({ y: 200, width: width + Stave.defaultPadding }); - stave1.draw(); - stave2.draw(); - voice1.draw(f.getContext(), stave1); - voice2.draw(f.getContext(), stave2); - ok(true); -} -function accidentalJustification(options) { - const f = VexFlowTests.makeFactory(options, 600, 300); - const score = f.EasyScore(); - const notes11 = score.notes('a4/2, a4/4, a4/8, ab4/16, an4/16'); - const voice11 = score.voice(notes11, { time: '4/4' }); - const notes21 = score.notes('c4/2, d4/8, d4/8, e4/8, e4/8'); - const voice21 = score.voice(notes21, { time: '4/4' }); - let beams = Beam.generateBeams(notes11.slice(2)); - beams = beams.concat(beams, Beam.generateBeams(notes21.slice(1, 3))); - beams = beams.concat(Beam.generateBeams(notes21.slice(3))); - const formatter = f.Formatter({}).joinVoices([voice11]).joinVoices([voice21]); - const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); - const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); - const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); - formatter.format([voice11, voice21], width); - const ctx = f.getContext(); - stave11.setContext(ctx).draw(); - stave21.setContext(ctx).draw(); - voice11.draw(ctx, stave11); - voice21.draw(ctx, stave21); - beams.forEach((b) => b.setContext(ctx).draw()); - ok(true); -} -function unalignedNoteDurations1(options) { - const f = VexFlowTests.makeFactory(options, 600, 250); - const score = f.EasyScore(); - const notes11 = [ - new StaveNote({ keys: ['a/4'], duration: '8' }), - new StaveNote({ keys: ['b/4'], duration: '4' }), - new StaveNote({ keys: ['b/4'], duration: '8' }), - ]; - const notes21 = [ - new StaveNote({ keys: ['a/4'], duration: '16' }), - new StaveNote({ keys: ['b/4.'], duration: '4' }), - new StaveNote({ keys: ['a/4'], duration: '8d' }), - ]; - Dot.buildAndAttach([notes21[2]], { all: true }); - const ctx = f.getContext(); - const voice11 = score.voice(notes11, { time: '2/4' }).setMode(Voice.Mode.SOFT); - const voice21 = score.voice(notes21, { time: '2/4' }).setMode(Voice.Mode.SOFT); - const beams21 = Beam.generateBeams(notes21); - const beams11 = Beam.generateBeams(notes11); - const formatter = new Formatter(); - formatter.joinVoices([voice11]); - formatter.joinVoices([voice21]); - const width = formatter.preCalculateMinTotalWidth([voice11, voice21]); - const stave11 = f.Stave({ y: 20, width: width + Stave.defaultPadding }); - const stave21 = f.Stave({ y: 130, width: width + Stave.defaultPadding }); - formatter.format([voice11, voice21], width); - stave11.setContext(ctx).draw(); - stave21.setContext(ctx).draw(); - voice11.draw(ctx, stave11); - voice21.draw(ctx, stave21); - beams21.forEach((b) => b.setContext(ctx).draw()); - beams11.forEach((b) => b.setContext(ctx).draw()); - ok(voice11.getTickables()[1].getX() > voice21.getTickables()[1].getX()); -} -function unalignedNoteDurations2(options) { - const notes1 = [ - new StaveNote({ keys: ['b/4'], duration: '8r' }), - new StaveNote({ keys: ['g/4'], duration: '16' }), - new StaveNote({ keys: ['c/5'], duration: '16' }), - new StaveNote({ keys: ['e/5'], duration: '16' }), - new StaveNote({ keys: ['g/4'], duration: '16' }), - new StaveNote({ keys: ['c/5'], duration: '16' }), - new StaveNote({ keys: ['e/5'], duration: '16' }), - new StaveNote({ keys: ['b/4'], duration: '8r' }), - new StaveNote({ keys: ['g/4'], duration: '16' }), - new StaveNote({ keys: ['c/5'], duration: '16' }), - new StaveNote({ keys: ['e/5'], duration: '16' }), - new StaveNote({ keys: ['g/4'], duration: '16' }), - new StaveNote({ keys: ['c/5'], duration: '16' }), - new StaveNote({ keys: ['e/5'], duration: '16' }), - ]; - const notes2 = [ - new StaveNote({ keys: ['a/4'], duration: '16r' }), - new StaveNote({ keys: ['e/4.'], duration: '8d' }), - new StaveNote({ keys: ['e/4'], duration: '4' }), - new StaveNote({ keys: ['a/4'], duration: '16r' }), - new StaveNote({ keys: ['e/4.'], duration: '8d' }), - new StaveNote({ keys: ['e/4'], duration: '4' }), - ]; - const f = VexFlowTests.makeFactory(options, 750, 280); - const context = f.getContext(); - const voice1 = new Voice({ num_beats: 4, beat_value: 4 }); - voice1.addTickables(notes1); - const voice2 = new Voice({ num_beats: 4, beat_value: 4 }); - voice2.addTickables(notes2); - const formatter = new Formatter({ globalSoftmax: options.params.globalSoftmax }); - formatter.joinVoices([voice1]); - formatter.joinVoices([voice2]); - const width = formatter.preCalculateMinTotalWidth([voice1, voice2]); - formatter.format([voice1, voice2], width); - const stave1 = new Stave(10, 40, width + Stave.defaultPadding); - const stave2 = new Stave(10, 100, width + Stave.defaultPadding); - stave1.setContext(context).draw(); - stave2.setContext(context).draw(); - voice1.draw(context, stave1); - voice2.draw(context, stave2); - ok(voice1.getTickables()[1].getX() > voice2.getTickables()[1].getX()); -} -function alignedMixedElements(options) { - const f = VexFlowTests.makeFactory(options, 800, 500); - const context = f.getContext(); - const stave = new Stave(10, 200, 400); - const stave2 = new Stave(410, 200, 400); - const notes = [ - new StaveNote({ keys: ['c/5'], duration: '8' }) - .addModifier(new Accidental('##'), 0) - .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a^').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('am').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.BOTTOM), 0) - .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0) - .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.BOTTOM).setFont('sans-serif', 20), 0), - new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) - .addModifier(new StringNumber('3').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.BELOW), 0) - .addModifier(new Articulation('a>').setPosition(ModifierPosition.BELOW), 0), - new StaveNote({ keys: ['c/5'], duration: '8' }), - ]; - const notes2 = [ - new StaveNote({ keys: ['c/5'], duration: '8' }) - .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0), - new StaveNote({ keys: ['c/5'], duration: '8', stem_direction: Stem.DOWN }) - .addModifier(new FretHandFinger('4').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new StringNumber('3').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a.').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a>').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a^').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('am').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Articulation('a@u').setPosition(ModifierPosition.ABOVE), 0) - .addModifier(new Annotation('yyyy').setVerticalJustification(AnnotationVerticalJustify.TOP), 0) - .addModifier(new Annotation('xxxx').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0) - .addModifier(new Annotation('ttt').setVerticalJustification(AnnotationVerticalJustify.TOP).setFont('sans-serif', 20), 0), - new StaveNote({ keys: ['c/5'], duration: '8' }), - ]; - const tuplet = new Tuplet(notes).setTupletLocation(-1); - const tuplet2 = new Tuplet(notes2).setTupletLocation(1); - Formatter.FormatAndDraw(context, stave, notes); - Formatter.FormatAndDraw(context, stave2, notes2); - stave.setContext(context).draw(); - stave2.setContext(context).draw(); - tuplet.setContext(context).draw(); - tuplet2.setContext(context).draw(); - ok(true); -} -function justifyStaveNotes(options) { - const f = VexFlowTests.makeFactory(options, 520, 280); - const ctx = f.getContext(); - const score = f.EasyScore(); - let y = 30; - function justifyToWidth(width) { - f.Stave({ y: y }).addClef('treble'); - const voices = [ - score.voice(score.notes('(cbb4 en4 a4)/2, (d4 e4 f4)/8, (d4 f4 a4)/8, (cn4 f#4 a4)/4', { stem: 'down' })), - score.voice(score.notes('(bb4 e#5 a5)/4, (d5 e5 f5)/2, (c##5 fb5 a5)/4', { stem: 'up' })), - ]; - f.Formatter() - .joinVoices(voices) - .format(voices, width - (Stave.defaultPadding + getGlyphWidth('gClef'))); - voices[0].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y + 140)); - voices[1].getTickables().forEach((note) => Note.plotMetrics(ctx, note, y - 20)); - y += 210; - } - justifyToWidth(520); - f.draw(); - ok(true); -} -function notesWithTab(options) { - const f = VexFlowTests.makeFactory(options, 420, 580); - const score = f.EasyScore(); - let y = 10; - function justifyToWidth(width) { - const stave = f.Stave({ y: y }).addClef('treble'); - const voice = score.voice(score.notes('d#4/2, (c4 d4)/8, d4/8, (c#4 e4 a4)/4', { stem: 'up' })); - y += 100; - f.TabStave({ y: y }).addTabGlyph().setNoteStartX(stave.getNoteStartX()); - const tabVoice = score.voice([ - f.TabNote({ positions: [{ str: 3, fret: 6 }], duration: '2' }).addModifier(new Bend('Full'), 0), - f - .TabNote({ - positions: [ - { str: 2, fret: 3 }, - { str: 3, fret: 5 }, - ], - duration: '8', - }) - .addModifier(new Bend('Unison'), 1), - f.TabNote({ positions: [{ str: 3, fret: 7 }], duration: '8' }), - f.TabNote({ - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 2, fret: 5 }, - ], - duration: '4', - }), - ]); - f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).format([voice, tabVoice], width); - y += 150; - } - justifyToWidth(0); - justifyToWidth(300); - f.draw(); - ok(true); -} -function multiStaves(options) { - const f = VexFlowTests.makeFactory(options, 600, 400); - const ctx = f.getContext(); - const score = f.EasyScore(); - const notes11 = score.notes('f4/4, d4/8, g4/4, eb4/8'); - const notes21 = score.notes('d4/8, d4, d4, d4, e4, eb4'); - const notes31 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - let voices = [ - score.voice(notes11, { time: '6/8' }), - score.voice(notes21, { time: '6/8' }), - score.voice(notes31, { time: '6/8' }), - ]; - let formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - let width = formatter.preCalculateMinTotalWidth(voices); - formatter.format(voices, width); - let beams = [ - new Beam(notes21.slice(0, 3), true), - new Beam(notes21.slice(3, 6), true), - new Beam(notes31.slice(0, 3), true), - new Beam(notes31.slice(3, 6), true), - ]; - const staveYs = [20, 130, 250]; - let staveWidth = width + getGlyphWidth('gClef') + getGlyphWidth('timeSig8') + Stave.defaultPadding; - let staves = [ - f.Stave({ y: staveYs[0], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), - f.Stave({ y: staveYs[1], width: staveWidth }).addClef('treble').addTimeSignature('6/8'), - f.Stave({ y: staveYs[2], width: staveWidth }).addClef('bass').addTimeSignature('6/8'), - ]; - f.StaveConnector({ - top_stave: staves[1], - bottom_stave: staves[2], - type: 'brace', - }); - for (let i = 0; i < staves.length; ++i) { - staves[i].setContext(ctx).draw(); - voices[i].draw(ctx, staves[i]); - } - beams.forEach((beam) => beam.setContext(ctx).draw()); - const notes12 = score.notes('ab4/4, bb4/8, (cb5 eb5)/4[stem="down"], d5/8[stem="down"]'); - const notes22 = score.notes('(eb4 ab4)/4., (c4 eb4 ab4)/4, db5/8', { stem: 'up' }); - const notes32 = score.notes('a5/8, a5, a5, a5, a5, a5', { stem: 'down' }); - voices = [ - score.voice(notes12, { time: '6/8' }), - score.voice(notes22, { time: '6/8' }), - score.voice(notes32, { time: '6/8' }), - ]; - formatter = f.Formatter(); - voices.forEach((v) => formatter.joinVoices([v])); - width = formatter.preCalculateMinTotalWidth(voices); - const staveX = staves[0].getX() + staves[0].getWidth(); - staveWidth = width + Stave.defaultPadding; - staves = [ - f.Stave({ x: staveX, y: staveYs[0], width: staveWidth }), - f.Stave({ x: staveX, y: staveYs[1], width: staveWidth }), - f.Stave({ x: staveX, y: staveYs[2], width: staveWidth }), - ]; - formatter.format(voices, width); - beams = [ - new Beam(notes32.slice(0, 3), true), - new Beam(notes32.slice(3, 6), true), - ]; - for (let i = 0; i < staves.length; ++i) { - staves[i].setContext(ctx).draw(); - voices[i].draw(ctx, staves[i]); - voices[i].getTickables().forEach((note) => Note.plotMetrics(ctx, note, staveYs[i] - 20)); - } - beams.forEach((beam) => beam.setContext(ctx).draw()); - ok(true); -} -function proportional(options) { - const debug = options.params.debug; - Registry.enableDefaultRegistry(new Registry()); - const f = VexFlowTests.makeFactory(options, 775, 750); - const system = f.System({ - x: 50, - autoWidth: true, - debugFormatter: debug, - noJustification: !(options.params.justify === undefined && true), - formatIterations: options.params.iterations, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const voices = [ - score.notes('c5/8, c5'), - score.tuplet(score.notes('a4/8, a4, a4'), { notes_occupied: 2 }), - score.notes('c5/16, c5, c5, c5'), - score.tuplet(score.notes('a4/16, a4, a4, a4, a4'), { notes_occupied: 4 }), - score.tuplet(score.notes('a4/32, a4, a4, a4, a4, a4, a4'), { notes_occupied: 8 }), - ]; - const createVoice = (notes) => score.voice(notes, { time: '1/4' }); - const createStave = (voice) => system - .addStave({ voices: [voice], debugNoteMetrics: debug }) - .addClef('treble') - .addTimeSignature('1/4'); - voices.map(createVoice).forEach(createStave); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - Registry.disableDefaultRegistry(); - ok(true); -} -function softMax(options) { - const f = VexFlowTests.makeFactory(options, 550, 500); - const textX = 450 / 0.8; - f.getContext().scale(0.8, 0.8); - function draw(y, factor) { - const score = f.EasyScore(); - const system = f.System({ - x: 100, - y, - details: { softmaxFactor: factor }, - autoWidth: true, - }); - system - .addStave({ - voices: [ - score.voice(score - .notes('C#5/h, a4/q') - .concat(score.beam(score.notes('Abb4/8, A4/8'))) - .concat(score.beam(score.notes('A4/16, A#4, A4, Ab4/32, A4'))), { time: '5/4' }), - ], - }) - .addClef('treble') - .addTimeSignature('5/4'); - f.draw(); - f.getContext().fillText(`softmax: ${factor.toString()}`, textX, y + 50); - ok(true); - } - draw(50, 1); - draw(150, 2); - draw(250, 5); - draw(350, 10); - draw(450, 15); -} -function mixTime(options) { - const f = VexFlowTests.makeFactory(options, 400 + Stave.defaultPadding, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - details: {}, - autoWidth: true, - debugFormatter: true, - }); - system - .addStave({ - voices: [score.voice(score.notes('C#5/q, B4').concat(score.beam(score.notes('A4/8, E4, C4, D4'))))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [score.voice(score.notes('C#5/q, B4, B4').concat(score.tuplet(score.beam(score.notes('A4/8, E4, C4')))))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function tightNotes1(options) { - const f = VexFlowTests.makeFactory(options, 440, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - autoWidth: true, - debugFormatter: true, - details: { maxIterations: 10 }, - }); - system - .addStave({ - voices: [ - score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [ - score.voice(score.notes('B4/q, B4').concat(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function tightNotes2(options) { - const f = VexFlowTests.makeFactory(options, 440, 250); - f.getContext().scale(0.8, 0.8); - const score = f.EasyScore(); - const system = f.System({ - autoWidth: true, - debugFormatter: true, - }); - system - .addStave({ - voices: [ - score.voice(score.beam(score.notes('B4/16, B4, B4, B4, B4, B4, B4, B4')).concat(score.notes('B4/q, B4'))), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system - .addStave({ - voices: [score.voice(score.notes('B4/w'))], - }) - .addClef('treble') - .addTimeSignature('4/4'); - f.draw(); - ok(true); -} -function annotations(options) { - const pageWidth = 916; - const pageHeight = 600; - const f = VexFlowTests.makeFactory(options, pageWidth, pageHeight); - const context = f.getContext(); - const lyrics1 = ['ipso', 'ipso-', 'ipso', 'ipso', 'ipsoz', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; - const lyrics2 = ['ipso', 'ipso-', 'ipsoz', 'ipso', 'ipso', 'ipso-', 'ipso', 'ipso', 'ipso', 'ip', 'ipso']; - const smar = [ - { - sm: 5, - width: 550, - lyrics: lyrics1, - title: '550px,softMax:5', - }, - { - sm: 5, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:5,different word order', - }, - { - sm: 10, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:10', - }, - { - sm: 15, - width: 550, - lyrics: lyrics2, - title: '550px,softmax:15', - }, - ]; - const rowSize = 140; - const beats = 12; - const beatsPer = 8; - const beamGroup = 3; - const durations = ['8d', '16', '8', '8d', '16', '8', '8d', '16', '8', '4', '8']; - const beams = []; - let y = 40; - smar.forEach((sm) => { - const stave = new Stave(10, y, sm.width); - const notes = []; - let iii = 0; - context.fillText(sm.title, 100, y); - y += rowSize; - durations.forEach((dd) => { - const note = new StaveNote({ keys: ['b/4'], duration: dd }); - if (dd.indexOf('d') >= 0) { - Dot.buildAndAttach([note], { all: true }); - } - if (sm.lyrics.length > iii) { - note.addModifier(new Annotation(sm.lyrics[iii]) - .setVerticalJustification(Annotation.VerticalJustify.BOTTOM) - .setFont(Font.SERIF, 12, FontWeight.NORMAL)); - } - notes.push(note); - iii += 1; - }); - notes.forEach((note) => { - if (note.getDuration().indexOf('d') >= 0) { - Dot.buildAndAttach([note], { all: true }); - } - }); - let notesToBeam = []; - notes.forEach((note) => { - if (note.getIntrinsicTicks() < 4096) { - notesToBeam.push(note); - if (notesToBeam.length >= beamGroup) { - beams.push(new Beam(notesToBeam)); - notesToBeam = []; - } - } - else { - notesToBeam = []; - } - }); - const voice1 = new Voice({ num_beats: beats, beat_value: beatsPer }).setMode(Voice.Mode.SOFT).addTickables(notes); - const fmt = new Formatter({ softmaxFactor: sm.sm, maxIterations: 2 }).joinVoices([voice1]); - fmt.format([voice1], sm.width - 11); - stave.setContext(context).draw(); - voice1.draw(context, stave); - beams.forEach((b) => b.setContext(context).draw()); - }); - ok(true); -} -VexFlowTests.register(FormatterTests); -export { FormatterTests }; diff --git a/build/esm/tests/fraction_tests.js b/build/esm/tests/fraction_tests.js deleted file mode 100644 index 7094c607a7..0000000000 --- a/build/esm/tests/fraction_tests.js +++ /dev/null @@ -1,72 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Fraction } from '../src/fraction.js'; -const FractionTests = { - Start() { - QUnit.module('Fraction'); - test('Basic', basic); - test('With Other Fractions', withOtherFractions); - }, -}; -function basic() { - const f_1_2 = new Fraction(1, 2); - ok(f_1_2.equals(0.5), 'Fraction: 1/2 equals 0.5'); - ok(f_1_2.equals(new Fraction(1, 2)), 'Fraction: 1/2 equals 1/2'); - ok(f_1_2.equals(new Fraction(2, 4)), 'Fraction: 1/2 equals 2/4'); - notOk(f_1_2.greaterThan(1), 'Fraction: ! 1/2 > 1'); - ok(f_1_2.greaterThan(0.2), 'Fraction: 1/2 > 0.2'); - ok(f_1_2.greaterThanEquals(0.2), 'Fraction: 1/2 >= 0.2'); - ok(f_1_2.greaterThanEquals(0.5), 'Fraction: 1/2 >= 0.5'); - notOk(f_1_2.greaterThanEquals(1), 'Fraction: ! 1/2 >= 1'); - notOk(f_1_2.lessThan(0.5), 'Fraction: ! 1/2 < 0.5'); - ok(f_1_2.lessThan(1), 'Fraction: 1/2 < 1'); - ok(f_1_2.lessThanEquals(0.6), 'Fraction: 1/2 <= 0.6'); - ok(f_1_2.lessThanEquals(0.5), 'Fraction: 1/2 <= 0.5'); - notOk(f_1_2.lessThanEquals(0.4), 'Fraction: ! 1/2 <= 0.4'); - const f_05 = f_1_2.copy(0.5); - strictEqual(f_05, f_1_2, 'Fraction: f_05 === f_1_2'); - strictEqual(f_05.toString(), '0.5/1', 'Fraction: f_05.toString() === "0.5/1"'); - strictEqual(f_05.toSimplifiedString(), '1/2', 'Fraction: f_05.toSimplifiedString() === "1/2"'); - const tF_n = f_05.clone(); - notStrictEqual(tF_n, f_05, 'Fraction: tF_n !== f_05'); - notEqual(tF_n, f_05, 'Fraction: tF_n != f_05'); - deepEqual(tF_n, f_05, 'tF_n deepEqual f_05'); - notDeepEqual(tF_n, {}, 'tF_n notDeepEqual {}'); - tF_n.subtract(-0.5); - ok(tF_n.equals(1), 'Fraction: 0.5 -(-0.5) equals 1'); - tF_n.add(1); - ok(tF_n.equals(2), 'Fraction: 1 + 1 equals 2'); - tF_n.multiply(2); - ok(tF_n.equals(4), 'Fraction: 2 * 2 equals 4'); - tF_n.divide(2); - ok(tF_n.equals(2), 'Fraction: 4 / 2 equals 2'); - equal(Fraction.LCMM([]), 0); - equal(Fraction.LCMM([17]), 17); - equal(Fraction.LCMM([2, 5]), 10); - equal(Fraction.LCMM([15, 3, 5]), 15); - equal(Fraction.LCMM([2, 4, 6]), 12); - equal(Fraction.LCMM([2, 3, 4, 5]), 60); - equal(Fraction.LCMM([12, 15, 10, 75]), 300); - equal(Fraction.GCD(0, 0), 0); - equal(Fraction.GCD(0, 99), 99); - equal(Fraction.GCD(77, 0), 77); - equal(Fraction.GCD(42, 14), 14); - equal(Fraction.GCD(15, 10), 5); -} -function withOtherFractions() { - const f_1_2 = new Fraction(1, 2); - const f_1_4 = new Fraction(1, 4); - const f_1_8 = new Fraction(1, 8); - const f_2 = new Fraction(2, 1); - const a = f_1_2.clone().multiply(f_1_2); - ok(a.equals(f_1_4), '1/2 x 1/2 == 1/4'); - const b = f_1_2.clone().divide(f_1_4); - ok(b.equals(f_2), '1/2 / 1/4 == 2'); - const c = f_2.clone().subtract(f_1_2).subtract(f_1_2).subtract(f_1_4); - const d = f_1_8.clone().add(f_1_8).add(f_1_8).multiply(f_2); - ok(c.equals(d), '2-1/2-1/2-1/4 == (1/8+1/8+1/8)*(2/1)'); - equal(c.value(), 0.75, '3/4 == 0.75'); - const e = f_1_8.clone().add(f_1_4).add(f_1_8); - ok(e.equals(f_1_2), '1/8 + 1/4 + 1/8 == 1/2'); -} -VexFlowTests.register(FractionTests); -export { FractionTests }; diff --git a/build/esm/tests/ghostnote_tests.js b/build/esm/tests/ghostnote_tests.js deleted file mode 100644 index 76820b198d..0000000000 --- a/build/esm/tests/ghostnote_tests.js +++ /dev/null @@ -1,77 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -const GhostNoteTests = { - Start() { - QUnit.module('GhostNote'); - const run = VexFlowTests.runTests; - run('GhostNote Basic', basic); - run('GhostNote Dotted', dotted); - }, -}; -function createTest(addItems) { - return (options) => { - const factory = VexFlowTests.makeFactory(options, 550); - const stave = factory.Stave(); - const score = factory.EasyScore(); - addItems(factory, score); - const voices = factory.getVoices(); - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - ok(true, 'all pass'); - }; -} -const basic = createTest((f, score) => { - const voiceTop = score.voice(score.notes('f#5/4, f5, db5, c5, c5/8, d5, fn5, e5, d5, c5', { stem: 'up' }), { - time: '7/4', - }); - const notesTop = voiceTop.getTickables(); - f.Beam({ notes: notesTop.slice(4, 8) }); - f.Beam({ notes: notesTop.slice(8, 10) }); - score.voice([ - f.GhostNote({ duration: '2' }), - f.StaveNote({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - f.GhostNote({ duration: '4' }), - f.StaveNote({ keys: ['e/4'], stem_direction: -1, duration: '4' }), - f.GhostNote({ duration: '8' }), - f.StaveNote({ keys: ['d/4'], stem_direction: -1, duration: '8' }).addModifier(f.Accidental({ type: '##' }), 0), - f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4'], stem_direction: -1, duration: '8' }), - ], { time: '7/4' }); -}); -const dotted = createTest((f, score) => { - const voice1 = score.voice([ - f.GhostNote({ duration: '4d' }), - f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), - f.StaveNote({ duration: '4', keys: ['d/5'], stem_direction: 1 }), - f.StaveNote({ duration: '8', keys: ['c/5'], stem_direction: 1 }), - f.StaveNote({ duration: '16', keys: ['c/5'], stem_direction: 1 }), - f.StaveNote({ duration: '16', keys: ['d/5'], stem_direction: 1 }), - f.GhostNote({ duration: '2dd' }), - f.StaveNote({ duration: '8', keys: ['f/5'], stem_direction: 1 }), - ], { time: '8/4' }); - const voice2 = score.voice([ - f.StaveNote({ duration: '4', keys: ['f/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['d/4'], stem_direction: -1 }), - f.GhostNote({ duration: '4dd' }), - f.StaveNote({ duration: '16', keys: ['c/4'], stem_direction: -1 }), - f.StaveNote({ duration: '2', keys: ['c/4'], stem_direction: -1 }), - f.StaveNote({ duration: '4', keys: ['d/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['f/4'], stem_direction: -1 }), - f.StaveNote({ duration: '8', keys: ['e/4'], stem_direction: -1 }), - ], { time: '8/4' }); - const notes1 = voice1.getTickables(); - const notes2 = voice2.getTickables(); - const addAccidental = (note, type) => note.addModifier(f.Accidental({ type }), 0); - addAccidental(notes1[1], 'bb'); - addAccidental(notes1[4], '#'); - addAccidental(notes1[7], 'n'); - addAccidental(notes2[0], '#'); - addAccidental(notes2[4], 'b'); - addAccidental(notes2[5], '#'); - addAccidental(notes2[7], 'n'); - f.Beam({ notes: notes1.slice(3, 6) }); - f.Beam({ notes: notes2.slice(1, 3) }); - f.Beam({ notes: notes2.slice(7, 9) }); -}); -VexFlowTests.register(GhostNoteTests); -export { GhostNoteTests }; diff --git a/build/esm/tests/glyphnote_tests.js b/build/esm/tests/glyphnote_tests.js deleted file mode 100644 index 13e6b80429..0000000000 --- a/build/esm/tests/glyphnote_tests.js +++ /dev/null @@ -1,113 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { ChordSymbol } from '../src/chordsymbol.js'; -import { Glyph } from '../src/glyph.js'; -import { Registry } from '../src/registry.js'; -import { StaveConnector } from '../src/staveconnector.js'; -const GlyphNoteTests = { - Start() { - QUnit.module('GlyphNote'); - const run = VexFlowTests.runTests; - run('GlyphNote with ChordSymbols', chordChanges, { debug: false, noPadding: false }); - run('GlyphNote Positioning', basic, { debug: false, noPadding: false }); - run('GlyphNote No Stave Padding', basic, { debug: true, noPadding: true }); - run('GlyphNote RepeatNote', repeatNote, { debug: false, noPadding: true }); - }, -}; -function chordChanges(options) { - Registry.enableDefaultRegistry(new Registry()); - const f = VexFlowTests.makeFactory(options, 300, 200); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const notes = [ - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: 'q' }), - ]; - const chord1 = f - .ChordSymbol({ reportWidth: false }) - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('(#11b9)', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }); - const chord2 = f - .ChordSymbol() - .addText('F7') - .setHorizontal('left') - .addGlyphOrText('#11', { symbolModifier: ChordSymbol.symbolModifiers.SUPERSCRIPT }) - .addGlyphOrText('b9', { symbolModifier: ChordSymbol.symbolModifiers.SUBSCRIPT }); - notes[0].addModifier(chord1, 0); - notes[2].addModifier(chord2, 0); - const voice = score.voice(notes); - system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - Registry.disableDefaultRegistry(); - ok(true); -} -function basic(options) { - Registry.enableDefaultRegistry(new Registry()); - const f = VexFlowTests.makeFactory(options, 300, 400); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const newVoice = (notes) => score.voice(notes, { time: '1/4' }); - const newStave = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - const voices = [ - [f.GlyphNote(new Glyph('repeat1Bar', 40), { duration: 'q' }, { line: 4 })], - [f.GlyphNote(new Glyph('repeat2Bars', 40), { duration: 'q', align_center: true })], - [ - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), - f.GlyphNote(new Glyph('repeat4Bars', 40), { duration: '16' }), - f.GlyphNote(new Glyph('repeatBarSlash', 40), { duration: '16' }), - ], - ]; - voices.map(newVoice).forEach(newStave); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - Registry.disableDefaultRegistry(); - ok(true); -} -function repeatNote(options) { - Registry.enableDefaultRegistry(new Registry()); - const f = VexFlowTests.makeFactory(options, 300, 500); - const system = f.System({ - x: 50, - width: 250, - debugFormatter: options.params.debug, - noPadding: options.params.noPadding, - details: { alpha: options.params.alpha }, - }); - const score = f.EasyScore(); - const createVoice = (notes) => score.voice(notes, { time: '1/4' }); - const addStaveWithVoice = (voice) => system.addStave({ voices: [voice], debugNoteMetrics: options.params.debug }); - const voices = [ - [f.RepeatNote('1')], - [f.RepeatNote('2')], - [f.RepeatNote('4')], - [ - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - f.RepeatNote('slash', { duration: '16' }), - ], - ]; - voices.map(createVoice).forEach(addStaveWithVoice); - system.addConnector().setType(StaveConnector.type.BRACKET); - f.draw(); - Registry.disableDefaultRegistry(); - ok(true); -} -VexFlowTests.register(GlyphNoteTests); -export { GlyphNoteTests }; diff --git a/build/esm/tests/gracenote_tests.js b/build/esm/tests/gracenote_tests.js deleted file mode 100644 index 2b270a321f..0000000000 --- a/build/esm/tests/gracenote_tests.js +++ /dev/null @@ -1,413 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Annotation } from '../src/annotation.js'; -import { Articulation } from '../src/articulation.js'; -import { Dot } from '../src/dot.js'; -import { Formatter } from '../src/formatter.js'; -const GraceNoteTests = { - Start() { - QUnit.module('Grace Notes'); - const run = VexFlowTests.runTests; - run('Grace Note Basic', basic); - run('With Articulation and Annotation on Parent Note', graceNoteModifiers); - run('Grace Note Basic with Slurs', basicSlurred); - run('Grace Note Stem', stem); - run('Grace Note Stem with Beams 1', stemWithBeamed, { - keys1: ['g/4'], - stemDirection1: 1, - keys2: ['d/5'], - stemDirection2: -1, - }); - run('Grace Note Stem with Beams 2', stemWithBeamed, { - keys1: ['a/3'], - stemDirection1: 1, - keys2: ['a/5'], - stemDirection2: -1, - }); - run('Grace Note Stem with Beams 3', stemWithBeamed, { - keys1: ['c/4'], - stemDirection1: 1, - keys2: ['c/6'], - stemDirection2: -1, - }); - run('Grace Note Slash', slash); - run('Grace Note Slash with Beams', slashWithBeams); - run('Grace Notes Multiple Voices', multipleVoices); - run('Grace Notes Multiple Voices Multiple Draws', multipleVoicesMultipleDraws); - }, -}; -function basic(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['a/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4', 'g/4'], duration: '8' }, - { keys: ['a/4'], duration: '32' }, - { keys: ['b/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['g/4'], duration: '8' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - ].map(f.GraceNote.bind(f)); - gracenotes[1].addModifier(f.Accidental({ type: '##' }), 0); - gracenotes3[3].addModifier(f.Accidental({ type: 'bb' }), 0); - Dot.buildAndAttach([gracenotes4[0]], { all: true }); - const notes = [ - f - .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.GraceNoteGroup({ notes: gracenotes1 }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteBasic'); -} -function graceNoteModifiers(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const notes = [ - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new Articulation('a-').setPosition(3), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new Articulation('a-').setPosition(3), 0) - .addModifier(new Accidental('#')), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new Articulation('a-').setPosition(3), 0) - .addModifier(new Annotation('words')), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new Articulation('a-').setPosition(3), 0) - .addModifier(new Articulation('a>').setPosition(3), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0) - .addModifier(new Articulation('a-').setPosition(3), 0) - .addModifier(new Articulation('a>').setPosition(3), 0) - .addModifier(new Articulation('a@a').setPosition(3), 0), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteModifiers'); -} -function basicSlurred(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - const gracenotes0 = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['a/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], duration: '8', slash: false }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['b/4'], duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4', 'g/4'], duration: '8' }, - { keys: ['a/4'], duration: '32' }, - { keys: ['b/4'], duration: '32' }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['a/4'], duration: '8' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - ].map(f.GraceNote.bind(f)); - gracenotes0[1].addModifier(f.Accidental({ type: '#' }), 0); - gracenotes3[3].addModifier(f.Accidental({ type: 'b' }), 0); - gracenotes3[2].addModifier(f.Accidental({ type: 'n' }), 0); - Dot.buildAndAttach([gracenotes4[0]], { all: true }); - const notes = [ - f - .StaveNote({ keys: ['b/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes0, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5'], duration: '4', auto_stem: true }) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.GraceNoteGroup({ notes: gracenotes1, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['c/5', 'd/5'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes2, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes3, slur: true }).beamNotes(), 0), - f - .StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }) - .addModifier(f.GraceNoteGroup({ notes: gracenotes4, slur: true }).beamNotes(), 0), - f.StaveNote({ keys: ['a/4'], duration: '4', auto_stem: true }), - ]; - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteBasic'); -} -const createNoteForStemTest = (duration, noteBuilder, keys, stem_direction, slash = false) => { - const struct = { duration, slash }; - struct.stem_direction = stem_direction; - struct.keys = keys; - return noteBuilder(struct); -}; -const durationsForStemTest = ['8', '16', '32', '64', '128']; -function stem(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createNotes(noteBuilder, keys, stem_direction) { - return durationsForStemTest.map((duration) => createNoteForStemTest(duration, noteBuilder, keys, stem_direction)); - } - function createNoteBlock(keys, stem_direction) { - const staveNotes = createNotes(f.StaveNote.bind(f), keys, stem_direction); - const gracenotes = createNotes(f.GraceNote.bind(f), keys, stem_direction); - staveNotes[0].addModifier(f.GraceNoteGroup({ notes: gracenotes }), 0); - return staveNotes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['g/4'], 1)); - voice.addTickables(createNoteBlock(['d/5'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteStem'); -} -function stemWithBeamed(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createBeamedNotes(noteBuilder, keys, stem_direction, beams, isGrace = false, notesToBeam) { - const ret = []; - durationsForStemTest.map((duration) => { - const n0 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); - const n1 = createNoteForStemTest(duration, noteBuilder, keys, stem_direction); - ret.push(n0); - ret.push(n1); - if (notesToBeam) { - notesToBeam.push([n0, n1]); - } - if (!isGrace) { - beams.push(f.Beam({ notes: [n0, n1] })); - } - }); - return ret; - } - function createBeamedNoteBlock(keys, stem_direction, beams) { - const bnotes = createBeamedNotes(f.StaveNote.bind(f), keys, stem_direction, beams); - const notesToBeam = []; - const gracenotes = createBeamedNotes(f.GraceNote.bind(f), keys, stem_direction, beams, true, notesToBeam); - const graceNoteGroup = f.GraceNoteGroup({ notes: gracenotes }); - notesToBeam.map(graceNoteGroup.beamNotes.bind(graceNoteGroup)); - bnotes[0].addModifier(graceNoteGroup, 0); - return bnotes; - } - const beams = []; - const voice = f.Voice().setStrict(false); - voice.addTickables(createBeamedNoteBlock(options.params.keys1, options.params.stemDirection1, beams)); - voice.addTickables(createBeamedNoteBlock(options.params.keys2, options.params.stemDirection2, beams)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteStem'); -} -function slash(options) { - const f = VexFlowTests.makeFactory(options, 700, 130); - const stave = f.Stave({ x: 10, y: 10, width: 650 }); - function createNotes(noteT, keys, stem_direction, slash) { - return durationsForStemTest.map((d) => createNoteForStemTest(d, noteT, keys, stem_direction, slash)); - } - function createNoteBlock(keys, stem_direction) { - const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; - let graceNotes = createNotes(f.GraceNote.bind(f), keys, stem_direction, true); - const duration = '8'; - const gns = [ - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - ].map(f.GraceNote.bind(f)); - const notesToBeam = []; - notesToBeam.push([gns[0], gns[1], gns[2]]); - notesToBeam.push([gns[3], gns[4], gns[5]]); - notesToBeam.push([gns[6], gns[7], gns[8]]); - graceNotes = graceNotes.concat(gns); - const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes }); - notesToBeam.forEach((notes) => graceNoteGroup.beamNotes(notes)); - notes[0].addModifier(graceNoteGroup, 0); - return notes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteSlash'); -} -function slashWithBeams(options) { - const f = VexFlowTests.makeFactory(options, 800, 130); - const stave = f.Stave({ x: 10, y: 10, width: 750 }); - function createNoteBlock(keys, stem_direction) { - const notes = [f.StaveNote({ keys: ['f/4'], stem_direction, duration: '16' })]; - let allGraceNotes = []; - const graceNotesToBeam = []; - ['8', '16', '32', '64'].forEach(function (duration) { - const graceNotes = [ - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['d/4', 'a/4'], stem_direction, duration, slash: false }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: true }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: false }, - { keys: ['b/4', 'f/5'], stem_direction, duration, slash: true }, - { keys: ['e/4', 'a/4'], stem_direction, duration, slash: false }, - ].map(f.GraceNote.bind(f)); - graceNotesToBeam.push([graceNotes[0], graceNotes[1]]); - graceNotesToBeam.push([graceNotes[2], graceNotes[3]]); - graceNotesToBeam.push([graceNotes[4], graceNotes[5]]); - allGraceNotes = allGraceNotes.concat(graceNotes); - }); - const graceNoteGroup = f.GraceNoteGroup({ notes: allGraceNotes }); - graceNotesToBeam.forEach((g) => graceNoteGroup.beamNotes(g)); - notes[0].addModifier(graceNoteGroup, 0); - return notes; - } - const voice = f.Voice().setStrict(false); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], 1)); - voice.addTickables(createNoteBlock(['d/4', 'a/4'], -1)); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'GraceNoteSlashWithBeams'); -} -function multipleVoices(options) { - const f = VexFlowTests.makeFactory(options, 450, 140); - const stave = f.Stave({ x: 10, y: 10, width: 450 }); - const notes = [ - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['e/5'], stem_direction: 1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const notes2 = [ - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['f/4'], duration: '32', stem_direction: -1 }, - { keys: ['e/4'], duration: '32', stem_direction: -1 }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['f/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '8', stem_direction: 1 }, - ].map(f.GraceNote.bind(f)); - gracenotes2[0].setStemDirection(-1); - gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); - notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); - notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); - notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); - notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); - const voice = f.Voice().setStrict(false).addTickables(notes); - const voice2 = f.Voice().setStrict(false).addTickables(notes2); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - ok(true, 'Sixteenth Test'); -} -function multipleVoicesMultipleDraws(options) { - const f = VexFlowTests.makeFactory(options, 450, 140); - const stave = f.Stave({ x: 10, y: 10, width: 450 }); - const notes = [ - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['c/5'], stem_direction: 1, duration: '16' }, - { keys: ['d/5'], stem_direction: 1, duration: '16' }, - { keys: ['f/5'], stem_direction: 1, duration: '16' }, - { keys: ['e/5'], stem_direction: 1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const notes2 = [ - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['c/4'], stem_direction: -1, duration: '16' }, - { keys: ['d/4'], stem_direction: -1, duration: '16' }, - { keys: ['f/4'], stem_direction: -1, duration: '16' }, - { keys: ['e/4'], stem_direction: -1, duration: '16' }, - ].map(f.StaveNote.bind(f)); - const gracenotes1 = [{ keys: ['b/4'], stem_direction: 1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes2 = [{ keys: ['f/4'], stem_direction: -1, duration: '8', slash: true }].map(f.GraceNote.bind(f)); - const gracenotes3 = [ - { keys: ['f/4'], duration: '32', stem_direction: -1 }, - { keys: ['e/4'], duration: '32', stem_direction: -1 }, - ].map(f.GraceNote.bind(f)); - const gracenotes4 = [ - { keys: ['f/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '32', stem_direction: 1 }, - { keys: ['e/5'], duration: '8', stem_direction: 1 }, - ].map(f.GraceNote.bind(f)); - gracenotes2[0].setStemDirection(-1); - gracenotes2[0].addModifier(f.Accidental({ type: '#' }), 0); - notes[1].addModifier(f.GraceNoteGroup({ notes: gracenotes4 }).beamNotes(), 0); - notes[3].addModifier(f.GraceNoteGroup({ notes: gracenotes1 }), 0); - notes2[1].addModifier(f.GraceNoteGroup({ notes: gracenotes2 }).beamNotes(), 0); - notes2[5].addModifier(f.GraceNoteGroup({ notes: gracenotes3 }).beamNotes(), 0); - const voice = f.Voice().setStrict(false).addTickables(notes); - const voice2 = f.Voice().setStrict(false).addTickables(notes2); - f.Beam({ notes: notes.slice(0, 4) }); - f.Beam({ notes: notes.slice(4, 8) }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.Formatter().joinVoices([voice, voice2]).formatToStave([voice, voice2], stave); - f.draw(); - f.draw(); - ok(true, 'Seventeenth Test'); -} -VexFlowTests.register(GraceNoteTests); -export { GraceNoteTests }; diff --git a/build/esm/tests/gracetabnote_tests.js b/build/esm/tests/gracetabnote_tests.js deleted file mode 100644 index d1f8c40e55..0000000000 --- a/build/esm/tests/gracetabnote_tests.js +++ /dev/null @@ -1,79 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { GraceNoteGroup } from '../src/gracenotegroup.js'; -import { GraceTabNote } from '../src/gracetabnote.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { Voice } from '../src/voice.js'; -const GraceTabNoteTests = { - Start() { - QUnit.module('Grace Tab Notes'); - const run = VexFlowTests.runTests; - run('Grace Tab Note Simple', simple); - run('Grace Tab Note Slurred', slurred); - }, -}; -const tabNote = (noteStruct) => new TabNote(noteStruct); -const graceTabNote = (noteStruct) => new GraceTabNote(noteStruct); -function setupContext(opts, ctxBuilder) { - const context = ctxBuilder(opts.elementId, 350, 140); - const stave = new TabStave(10, 10, 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -function simple(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder); - const note0 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: '4' }); - const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: '4' }); - const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); - const note3 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: '4' }); - const gracenote_group0 = [{ positions: [{ str: 4, fret: 'x' }], duration: '8' }]; - const gracenote_group1 = [ - { positions: [{ str: 4, fret: 9 }], duration: '16' }, - { positions: [{ str: 4, fret: 10 }], duration: '16' }, - ]; - const gracenote_group2 = [{ positions: [{ str: 4, fret: 9 }], duration: '8' }]; - const gracenote_group3 = [ - { positions: [{ str: 5, fret: 10 }], duration: '8' }, - { positions: [{ str: 4, fret: 9 }], duration: '8' }, - ]; - const gracenotes0 = gracenote_group0.map(graceTabNote); - const gracenotes1 = gracenote_group1.map(graceTabNote); - const gracenotes2 = gracenote_group2.map(graceTabNote); - gracenotes2[0].setGhost(true); - const gracenotes3 = gracenote_group3.map(graceTabNote); - note0.addModifier(new GraceNoteGroup(gracenotes0), 0); - note1.addModifier(new GraceNoteGroup(gracenotes1), 0); - note2.addModifier(new GraceNoteGroup(gracenotes2), 0); - note3.addModifier(new GraceNoteGroup(gracenotes3), 0); - const voice = new Voice(Flow.TIME4_4); - voice.addTickables([note0, note1, note2, note3]); - new Formatter().joinVoices([voice]).format([voice], 250); - voice.draw(context, stave); - ok(true, 'Simple Test'); -} -function slurred(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder); - const note0 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }); - const note1 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); - const gracenote_group0 = [ - { positions: [{ str: 4, fret: 9 }], duration: '8' }, - { positions: [{ str: 4, fret: 10 }], duration: '8' }, - ]; - const gracenote_group1 = [ - { positions: [{ str: 4, fret: 7 }], duration: '16' }, - { positions: [{ str: 4, fret: 8 }], duration: '16' }, - { positions: [{ str: 4, fret: 9 }], duration: '16' }, - ]; - const gracenotes0 = gracenote_group0.map(graceTabNote); - const gracenotes1 = gracenote_group1.map(graceTabNote); - note0.addModifier(new GraceNoteGroup(gracenotes0, true), 0); - note1.addModifier(new GraceNoteGroup(gracenotes1, true), 0); - const voice = new Voice(Flow.TIME4_4); - voice.addTickables([note0, note1]); - new Formatter().joinVoices([voice]).format([voice], 200); - voice.draw(context, stave); - ok(true, 'Slurred Test'); -} -VexFlowTests.register(GraceTabNoteTests); -export { GraceTabNoteTests }; diff --git a/build/esm/tests/index.js b/build/esm/tests/index.js deleted file mode 100644 index 6c1ee8a213..0000000000 --- a/build/esm/tests/index.js +++ /dev/null @@ -1,69 +0,0 @@ -export * from './accidental_tests.js'; -export * from './annotation_tests.js'; -export * from './articulation_tests.js'; -export * from './auto_beam_formatting_tests.js'; -export * from './bach_tests.js'; -export * from './barline_tests.js'; -export * from './beam_tests.js'; -export * from './bend_tests.js'; -export * from './boundingbox_tests.js'; -export * from './boundingboxcomputation_tests.js'; -export * from './chordsymbol_tests.js'; -export * from './clef_tests.js'; -export * from './crossbeam_tests.js'; -export * from './curve_tests.js'; -export * from './dot_tests.js'; -export * from './easyscore_tests.js'; -export * from './factory_tests.js'; -export * from './font_tests.js'; -export * from './formatter_tests.js'; -export * from './fraction_tests.js'; -export * from './ghostnote_tests.js'; -export * from './glyphnote_tests.js'; -export * from './gracenote_tests.js'; -export * from './gracetabnote_tests.js'; -export * from './key_clef_tests.js'; -export * from './keymanager_tests.js'; -export * from './keysignature_tests.js'; -export * from './modifier_tests.js'; -export * from './multimeasurerest_tests.js'; -export * from './music_tests.js'; -export * from './notehead_tests.js'; -export * from './notesubgroup_tests.js'; -export * from './offscreencanvas_tests.js'; -export * from './ornament_tests.js'; -export * from './parser_tests.js'; -export * from './pedalmarking_tests.js'; -export * from './percussion_tests.js'; -export * from './registry_tests.js'; -export * from './renderer_tests.js'; -export * from './rests_tests.js'; -export * from './rhythm_tests.js'; -export * from './stave_tests.js'; -export * from './staveconnector_tests.js'; -export * from './stavehairpin_tests.js'; -export * from './staveline_tests.js'; -export * from './stavemodifier_tests.js'; -export * from './stavenote_tests.js'; -export * from './stavetie_tests.js'; -export * from './stringnumber_tests.js'; -export * from './strokes_tests.js'; -export * from './style_tests.js'; -export * from './tabnote_tests.js'; -export * from './tabslide_tests.js'; -export * from './tabstave_tests.js'; -export * from './tabtie_tests.js'; -export * from './textbracket_tests.js'; -export * from './textformatter_tests.js'; -export * from './textnote_tests.js'; -export * from './threevoice_tests.js'; -export * from './tickcontext_tests.js'; -export * from './timesignature_tests.js'; -export * from './tremolo_tests.js'; -export * from './tuning_tests.js'; -export * from './tuplet_tests.js'; -export * from './typeguard_tests.js'; -export * from './vf_prefix_tests.js'; -export * from './vibrato_tests.js'; -export * from './vibratobracket_tests.js'; -export * from './voice_tests.js'; diff --git a/build/esm/tests/key_clef_tests.js b/build/esm/tests/key_clef_tests.js deleted file mode 100644 index 42ddedf007..0000000000 --- a/build/esm/tests/key_clef_tests.js +++ /dev/null @@ -1,106 +0,0 @@ -import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; -import { Glyph } from '../src/glyph.js'; -import { KeySignature } from '../src/keysignature.js'; -import { Stave } from '../src/stave.js'; -const ClefKeySignatureTests = { - Start() { - QUnit.module('Clef Keys'); - const run = VexFlowTests.runTests; - run('Major Key Clef Test', keys, { majorKeys: true }); - run('Minor Key Clef Test', keys, { majorKeys: false }); - run('Stave Helper', staveHelper); - }, -}; -const fontWidths = () => { - const glyphScale = 39; - const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; - const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; - const ksPadding = 10; - const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; - const clefWidth = Glyph.getWidth('gClef', glyphScale); - return { sharpWidth, flatWidth, naturalWidth, clefWidth, ksPadding }; -}; -function keys(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; - const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; - const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 6 * w.ksPadding; - const clefs = [ - 'treble', - 'soprano', - 'mezzo-soprano', - 'alto', - 'tenor', - 'baritone-f', - 'baritone-c', - 'bass', - 'french', - 'subbass', - 'percussion', - ]; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 20 + 80 * 2 * clefs.length); - const staves = []; - const keys = options.params.majorKeys ? MAJOR_KEYS : MINOR_KEYS; - let i; - let flat; - let sharp; - let keySig; - const yOffsetForFlatStaves = 10 + 80 * clefs.length; - for (i = 0; i < clefs.length; i++) { - staves[i] = new Stave(10, 10 + 80 * i, flatTestWidth); - staves[i].addClef(clefs[i]); - staves[i + clefs.length] = new Stave(10, yOffsetForFlatStaves + 10 + 80 * i, sharpTestWidth); - staves[i + clefs.length].addClef(clefs[i]); - for (flat = 0; flat < 8; flat++) { - keySig = new KeySignature(keys[flat]); - keySig.addToStave(staves[i]); - } - for (sharp = 8; sharp < keys.length; sharp++) { - keySig = new KeySignature(keys[sharp]); - keySig.addToStave(staves[i + clefs.length]); - } - } - Stave.formatBegModifiers(staves); - for (i = 0; i < clefs.length; i++) { - staves[i].setContext(ctx); - staves[i].draw(); - staves[i + clefs.length].setContext(ctx); - staves[i + clefs.length].draw(); - } - ok(true, 'all pass'); -} -function staveHelper(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; - const sharpTestWidth = accidentalCount * w.sharpWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; - const flatTestWidth = accidentalCount * w.flatWidth + w.clefWidth + Stave.defaultPadding + 7 * w.ksPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 400); - const stave1 = new Stave(10, 10, flatTestWidth); - const stave2 = new Stave(10, 90, flatTestWidth); - const stave3 = new Stave(10, 170, sharpTestWidth); - const stave4 = new Stave(10, 260, sharpTestWidth); - const keys = MAJOR_KEYS; - stave1.addClef('treble'); - stave2.addClef('bass'); - stave3.addClef('alto'); - stave4.addClef('tenor'); - for (let n = 0; n < 8; ++n) { - stave1.addKeySignature(keys[n]); - stave2.addKeySignature(keys[n]); - } - for (let i = 8; i < keys.length; ++i) { - stave3.addKeySignature(keys[i]); - stave4.addKeySignature(keys[i]); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(ClefKeySignatureTests); -export { ClefKeySignatureTests }; diff --git a/build/esm/tests/keymanager_tests.js b/build/esm/tests/keymanager_tests.js deleted file mode 100644 index 6cc5f7a1b4..0000000000 --- a/build/esm/tests/keymanager_tests.js +++ /dev/null @@ -1,68 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { KeyManager } from '../src/index.js'; -const KeyManagerTests = { - Start() { - QUnit.module('KeyManager'); - test('Valid Notes', works); - test('Select Notes', selectNotes); - }, -}; -function works() { - const manager = new KeyManager('g'); - equal(manager.getAccidental('f').accidental, '#'); - manager.setKey('a'); - equal(manager.getAccidental('c').accidental, '#'); - equal(manager.getAccidental('a').accidental, null); - equal(manager.getAccidental('f').accidental, '#'); - manager.setKey('A'); - equal(manager.getAccidental('c').accidental, '#'); - equal(manager.getAccidental('a').accidental, null); - equal(manager.getAccidental('f').accidental, '#'); -} -function selectNotes() { - const manager = new KeyManager('f'); - equal(manager.selectNote('bb').note, 'bb'); - equal(manager.selectNote('bb').accidental, 'b'); - equal(manager.selectNote('g').note, 'g'); - equal(manager.selectNote('g').accidental, null); - equal(manager.selectNote('b').note, 'b'); - equal(manager.selectNote('b').accidental, null); - equal(manager.selectNote('a#').note, 'bb'); - equal(manager.selectNote('g#').note, 'g#'); - equal(manager.selectNote('g#').note, 'g#'); - equal(manager.selectNote('bb').note, 'bb'); - equal(manager.selectNote('bb').accidental, 'b'); - equal(manager.selectNote('g').note, 'g'); - equal(manager.selectNote('g').accidental, null); - equal(manager.selectNote('b').note, 'b'); - equal(manager.selectNote('b').accidental, null); - equal(manager.selectNote('a#').note, 'bb'); - equal(manager.selectNote('g#').note, 'g#'); - manager.reset(); - equal(manager.selectNote('g#').change, true); - equal(manager.selectNote('g#').change, false); - equal(manager.selectNote('g').change, true); - equal(manager.selectNote('g').change, false); - equal(manager.selectNote('g#').change, true); - manager.reset(); - let note = manager.selectNote('bb'); - equal(note.change, false); - equal(note.accidental, 'b'); - note = manager.selectNote('g'); - equal(note.change, false); - equal(note.accidental, null); - note = manager.selectNote('g#'); - equal(note.change, true); - equal(note.accidental, '#'); - note = manager.selectNote('g'); - equal(note.change, true); - equal(note.accidental, null); - note = manager.selectNote('g'); - equal(note.change, false); - equal(note.accidental, null); - note = manager.selectNote('g#'); - equal(note.change, true); - equal(note.accidental, '#'); -} -VexFlowTests.register(KeyManagerTests); -export { KeyManagerTests }; diff --git a/build/esm/tests/keysignature_tests.js b/build/esm/tests/keysignature_tests.js deleted file mode 100644 index e5c92135a0..0000000000 --- a/build/esm/tests/keysignature_tests.js +++ /dev/null @@ -1,308 +0,0 @@ -import { MAJOR_KEYS, MINOR_KEYS, VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Glyph } from '../src/glyph.js'; -import { KeySignature } from '../src/keysignature.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -const KeySignatureTests = { - Start() { - QUnit.module('KeySignature'); - test('Key Parser Test', parser); - const run = VexFlowTests.runTests; - run('Major Key Test', majorKeys); - run('Minor Key Test', minorKeys); - run('Stave Helper', staveHelper); - run('Cancelled key test', majorKeysCanceled); - run('Cancelled key (for each clef) test', keysCanceledForEachClef); - run('Altered key test', majorKeysAltered); - run('End key with clef test', endKeyWithClef); - run('Key Signature Change test', changeKey); - }, -}; -const fontWidths = () => { - const glyphScale = 39; - const sharpWidth = Glyph.getWidth('accidentalSharp', glyphScale) + 1; - const flatWidth = Glyph.getWidth('accidentalFlat', glyphScale) + 1; - const naturalWidth = Glyph.getWidth('accidentalNatural', glyphScale) + 2; - const clefWidth = Glyph.getWidth('gClef', glyphScale) * 2; - return { sharpWidth, flatWidth, naturalWidth, clefWidth }; -}; -function parser() { - expect(11); - function catchError(spec) { - throws(() => Flow.keySignature(spec), /BadKeySignature/); - } - catchError('asdf'); - catchError('D!'); - catchError('E#'); - catchError('D#'); - catchError('#'); - catchError('b'); - catchError('Kb'); - catchError('Fb'); - catchError('Dbm'); - catchError('B#m'); - Flow.keySignature('B'); - Flow.keySignature('C'); - Flow.keySignature('Fm'); - Flow.keySignature('Ab'); - Flow.keySignature('Abm'); - Flow.keySignature('F#'); - Flow.keySignature('G#m'); - ok(true, 'all pass'); -} -function majorKeys(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; - const casePadding = 10; - const testCases = 7; - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new Stave(10, 10, flatTestWidth); - const stave2 = new Stave(10, 90, sharpTestWidth); - const keys = MAJOR_KEYS; - let keySig = null; - for (let i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.addToStave(stave1); - } - for (let n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.addToStave(stave2); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function majorKeysCanceled(options, contextBuilder) { - const scale = 0.9; - const w = fontWidths(); - const flatPadding = 18; - const sharpPadding = 20; - const flatTestCases = 8; - const sharpTestCases = 7; - const sharpTestWidth = 28 * w.sharpWidth + 21 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; - const flatTestWidth = 28 * w.flatWidth + 28 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; - const eFlatTestWidth = 28 * w.flatWidth + 32 * w.naturalWidth + flatPadding * flatTestCases + Stave.defaultPadding + w.clefWidth; - const eSharpTestWidth = 28 * w.sharpWidth + 28 * w.naturalWidth + sharpPadding * sharpTestCases + Stave.defaultPadding + w.clefWidth; - const maxWidth = Math.max(Math.max(sharpTestWidth, flatTestWidth, Math.max(eSharpTestWidth, eFlatTestWidth))); - const ctx = contextBuilder(options.elementId, maxWidth + 100, 500); - ctx.scale(scale, scale); - const stave1 = new Stave(10, 10, flatTestWidth).addClef('treble'); - const stave2 = new Stave(10, 90, sharpTestWidth).addClef('treble'); - const stave3 = new Stave(10, 170, eFlatTestWidth).addClef('treble'); - const stave4 = new Stave(10, 250, eSharpTestWidth).addClef('treble'); - const keys = MAJOR_KEYS; - let keySig = null; - let i; - let n; - for (i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.cancelKey('Cb'); - keySig.setPadding(flatPadding); - keySig.addToStave(stave1); - } - for (n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.cancelKey('C#'); - keySig.setPadding(sharpPadding); - keySig.addToStave(stave2); - } - for (i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.cancelKey('E'); - keySig.setPadding(flatPadding); - keySig.addToStave(stave3); - } - for (n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.cancelKey('Ab'); - keySig.setPadding(sharpPadding); - keySig.addToStave(stave4); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -function keysCanceledForEachClef(options, contextBuilder) { - const scale = 0.8; - const w = fontWidths(); - const keyPadding = 10; - const keys = ['C#', 'Cb']; - const flatsKey = [7, 14]; - const sharpsKey = [14, 7]; - const natsKey = [7, 7]; - const max = 21 * Math.max(w.sharpWidth, w.flatWidth) * 2 + keyPadding * 6 + Stave.defaultPadding + w.clefWidth; - const ctx = contextBuilder(options.elementId, max + 100, 380); - ctx.scale(scale, scale); - const x = 20; - let y = 20; - let tx = x; - ['bass', 'tenor', 'soprano', 'mezzo-soprano', 'baritone-f'].forEach(function (clef) { - keys.forEach((key, keyIx) => { - const cancelKey = keys[(keyIx + 1) % 2]; - const width = flatsKey[keyIx] * w.flatWidth + - natsKey[keyIx] * w.naturalWidth + - sharpsKey[keyIx] * w.sharpWidth + - keyPadding * 3 + - w.clefWidth + - Stave.defaultPadding; - const stave = new Stave(tx, y, width); - stave.setClef(clef); - stave.addKeySignature(cancelKey); - stave.addKeySignature(key, cancelKey); - stave.addKeySignature(key); - stave.setContext(ctx).draw(); - tx += width; - }); - tx = x; - y += 80; - }); - ok(true, 'all pass'); -} -function majorKeysAltered(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 780, 500); - ctx.scale(0.9, 0.9); - const stave1 = new Stave(10, 10, 750).addClef('treble'); - const stave2 = new Stave(10, 90, 750).addClef('treble'); - const stave3 = new Stave(10, 170, 750).addClef('treble'); - const stave4 = new Stave(10, 250, 750).addClef('treble'); - const keys = MAJOR_KEYS; - let keySig = null; - let i; - let n; - for (i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.alterKey(['bs', 'bs']); - keySig.setPadding(18); - keySig.addToStave(stave1); - } - for (n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.alterKey(['+', '+', '+']); - keySig.setPadding(20); - keySig.addToStave(stave2); - } - for (i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.alterKey(['n', 'bs', 'bb']); - keySig.setPadding(18); - keySig.addToStave(stave3); - } - for (n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.alterKey(['++', '+', 'n', '+']); - keySig.setPadding(20); - keySig.addToStave(stave4); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - stave3.setContext(ctx); - stave3.draw(); - stave4.setContext(ctx); - stave4.draw(); - ok(true, 'all pass'); -} -function minorKeys(options, contextBuilder) { - const accidentalCount = 28; - const w = fontWidths(); - const casePadding = 10; - const testCases = 7; - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new Stave(10, 10, flatTestWidth); - const stave2 = new Stave(10, 90, sharpTestWidth); - const keys = MINOR_KEYS; - let keySig = null; - for (let i = 0; i < 8; ++i) { - keySig = new KeySignature(keys[i]); - keySig.addToStave(stave1); - } - for (let n = 8; n < keys.length; ++n) { - keySig = new KeySignature(keys[n]); - keySig.addToStave(stave2); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function endKeyWithClef(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 200); - ctx.scale(0.9, 0.9); - const stave1 = new Stave(10, 10, 350); - stave1 - .setKeySignature('G') - .setBegBarType(BarlineType.REPEAT_BEGIN) - .setEndBarType(BarlineType.REPEAT_END) - .setClef('treble') - .addTimeSignature('4/4') - .setEndClef('bass') - .setEndKeySignature('Cb'); - const stave2 = new Stave(10, 90, 350); - stave2.setKeySignature('Cb').setClef('bass').setEndClef('treble').setEndKeySignature('G'); - stave1.setContext(ctx).draw(); - stave2.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function staveHelper(options, contextBuilder) { - const w = fontWidths(); - const accidentalCount = 28; - const casePadding = 10; - const testCases = 7; - const sharpTestWidth = accidentalCount * w.sharpWidth + casePadding * testCases + Stave.defaultPadding; - const flatTestWidth = accidentalCount * w.flatWidth + casePadding * testCases + Stave.defaultPadding; - const ctx = contextBuilder(options.elementId, Math.max(sharpTestWidth, flatTestWidth) + 100, 240); - const stave1 = new Stave(10, 10, flatTestWidth); - const stave2 = new Stave(10, 90, sharpTestWidth); - const keys = MAJOR_KEYS; - for (let i = 0; i < 8; ++i) { - stave1.addKeySignature(keys[i]); - } - for (let n = 8; n < keys.length; ++n) { - stave2.addKeySignature(keys[n]); - } - stave1.setContext(ctx); - stave1.draw(); - stave2.setContext(ctx); - stave2.draw(); - ok(true, 'all pass'); -} -function changeKey(options) { - const f = VexFlowTests.makeFactory(options, 900); - const stave = f.Stave({ x: 10, y: 10, width: 800 }).addClef('treble').addTimeSignature('C|'); - const voice = f - .Voice() - .setStrict(false) - .addTickables([ - f.KeySigNote({ key: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'D', cancelKey: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'Bb' }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - f.BarNote(), - f.KeySigNote({ key: 'D', alterKey: ['b', 'n'] }), - f.StaveNote({ keys: ['c/4'], duration: '1' }), - ]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(KeySignatureTests); -export { KeySignatureTests }; diff --git a/build/esm/tests/mocks.js b/build/esm/tests/mocks.js deleted file mode 100644 index 64d6a6f680..0000000000 --- a/build/esm/tests/mocks.js +++ /dev/null @@ -1,71 +0,0 @@ -import { Fraction } from '../src/fraction.js'; -import { Tickable } from '../src/tickable.js'; -class MockTickable extends Tickable { - constructor() { - super(...arguments); - this.ticks = new Fraction(1, 1); - this.width = 0; - this.ignore_ticks = false; - } - init() { - } - getX() { - return this.tickContext.getX(); - } - getIntrinsicTicks() { - return this.ticks.value(); - } - getTicks() { - return this.ticks; - } - setTicks(t) { - this.ticks = new Fraction(t, 1); - return this; - } - getMetrics() { - return { - width: 0, - glyphWidth: 0, - notePx: this.width, - modLeftPx: 0, - modRightPx: 0, - leftDisplacedHeadPx: 0, - rightDisplacedHeadPx: 0, - glyphPx: 0, - }; - } - getWidth() { - return this.width; - } - setWidth(w) { - this.width = w; - return this; - } - setVoice(v) { - this.voice = v; - return this; - } - setStave(stave) { - this.stave = stave; - return this; - } - getStave() { - return this.stave; - } - setTickContext(tc) { - this.tickContext = tc; - return this; - } - setIgnoreTicks(flag) { - this.ignore_ticks = flag; - return this; - } - shouldIgnoreTicks() { - return this.ignore_ticks; - } - preFormat() { - } - draw(...args) { - } -} -export { MockTickable }; diff --git a/build/esm/tests/modifier_tests.js b/build/esm/tests/modifier_tests.js deleted file mode 100644 index 2b0c1a110d..0000000000 --- a/build/esm/tests/modifier_tests.js +++ /dev/null @@ -1,24 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Modifier, ModifierContext } from '../src/index.js'; -const ModifierContextTests = { - Start() { - QUnit.module('ModifierContext'); - test('Modifier Width Test', width); - test('Modifier Management', management); - }, -}; -function width() { - const mc = new ModifierContext(); - equal(mc.getWidth(), 0, 'New modifier context has no width'); -} -function management() { - const mc = new ModifierContext(); - const modifier1 = new Modifier(); - const modifier2 = new Modifier(); - mc.addMember(modifier1); - mc.addMember(modifier2); - const modifiers = mc.getMembers(Modifier.CATEGORY); - equal(modifiers.length, 2, 'Added two modifiers'); -} -VexFlowTests.register(ModifierContextTests); -export { ModifierContextTests }; diff --git a/build/esm/tests/multimeasurerest_tests.js b/build/esm/tests/multimeasurerest_tests.js deleted file mode 100644 index aa3043562b..0000000000 --- a/build/esm/tests/multimeasurerest_tests.js +++ /dev/null @@ -1,141 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Font } from '../src/font.js'; -const MultiMeasureRestTests = { - Start() { - QUnit.module('MultiMeasureRest'); - const run = VexFlowTests.runTests; - run('Simple Test', simple); - run('Stave with modifiers Test', staveWithModifiers); - }, -}; -function simple(options) { - const width = 910; - const f = VexFlowTests.makeFactory(options, width, 300); - const line_spacing_15px = { options: { spacing_between_lines_px: 15 } }; - const params = [ - [{}, { number_of_measures: 2, show_number: false }], - [{}, { number_of_measures: 2 }], - [{}, { number_of_measures: 2, line_thickness: 8, serif_thickness: 3 }], - [{}, { number_of_measures: 1, use_symbols: true }], - [{}, { number_of_measures: 2, use_symbols: true }], - [{}, { number_of_measures: 3, use_symbols: true }], - [{}, { number_of_measures: 4, use_symbols: true }], - [{}, { number_of_measures: 5, use_symbols: true }], - [{}, { number_of_measures: 6, use_symbols: true }], - [{}, { number_of_measures: 7, use_symbols: true }], - [{}, { number_of_measures: 8, use_symbols: true }], - [{}, { number_of_measures: 9, use_symbols: true }], - [{}, { number_of_measures: 10, use_symbols: true }], - [{}, { number_of_measures: 11, use_symbols: true }], - [{}, { number_of_measures: 11, use_symbols: false, padding_left: 20, padding_right: 20 }], - [{}, { number_of_measures: 11, use_symbols: true, symbol_spacing: 5 }], - [{}, { number_of_measures: 11, use_symbols: false, line: 3, number_line: 2 }], - [{}, { number_of_measures: 11, use_symbols: true, line: 3, number_line: 2 }], - [line_spacing_15px, { number_of_measures: 12 }], - [line_spacing_15px, { number_of_measures: 9, use_symbols: true }], - [line_spacing_15px, { number_of_measures: 12, spacing_between_lines_px: 15, number_glyph_point: 40 * 1.5 }], - [ - line_spacing_15px, - { - number_of_measures: 9, - spacing_between_lines_px: 15, - use_symbols: true, - number_glyph_point: 40 * 1.5, - }, - ], - [ - line_spacing_15px, - { - number_of_measures: 9, - spacing_between_lines_px: 15, - use_symbols: true, - number_glyph_point: 40 * 1.5, - semibreve_rest_glyph_scale: Flow.NOTATION_FONT_SCALE * 1.5, - }, - ], - ]; - const staveWidth = 100; - let x = 0; - let y = 0; - const mmRests = params.map((param) => { - if (x + staveWidth * 2 > width) { - x = 0; - y += 80; - } - const staveParams = param[0]; - const mmRestParams = param[1]; - staveParams.x = x; - staveParams.y = y; - staveParams.width = staveWidth; - x += staveWidth; - const stave = f.Stave(staveParams); - return f.MultiMeasureRest(mmRestParams).setStave(stave); - }); - f.draw(); - const xs = mmRests[0].getXs(); - const strY = mmRests[0].getStave().getYForLine(-0.5); - const str = 'TACET'; - const context = f.getContext(); - context.save(); - context.setFont(Font.SERIF, 16, 'bold'); - const metrics = context.measureText(str); - context.fillText(str, xs.left + (xs.right - xs.left) * 0.5 - metrics.width * 0.5, strY); - context.restore(); - ok(true, 'Simple Test'); -} -function staveWithModifiers(options) { - const width = 910; - const f = VexFlowTests.makeFactory(options, width, 200); - let x = 0; - let y = 0; - const params = [ - [{ clef: 'treble', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', timeSig: '4/4', keySig: 'G', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endClef: 'bass', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endKeySig: 'F', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], - [{ clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, { number_of_measures: 5 }], - [ - { clef: 'treble', endClef: 'bass', endTimeSig: '2/4', params: { width: 150 } }, - { number_of_measures: 5, use_symbols: true }, - ], - ]; - params.forEach((param) => { - const staveOptions = param[0]; - const staveParams = staveOptions.params; - const mmrestParams = param[1]; - if (x + staveParams.width > width) { - x = 0; - y += 80; - } - staveParams.x = x; - x += staveParams.width; - staveParams.y = y; - const stave = f.Stave(staveParams); - if (staveOptions.clef) { - stave.addClef(staveOptions.clef); - } - if (staveOptions.timeSig) { - stave.addTimeSignature(staveOptions.timeSig); - } - if (staveOptions.keySig) { - stave.addKeySignature(staveOptions.keySig); - } - if (staveOptions.endClef) { - stave.addEndClef(staveOptions.endClef); - } - if (staveOptions.endKeySig) { - stave.setEndKeySignature(staveOptions.endKeySig); - } - if (staveOptions.endTimeSig) { - stave.setEndTimeSignature(staveOptions.endTimeSig); - } - return f.MultiMeasureRest(mmrestParams).setStave(stave); - }); - f.draw(); - ok(true, 'Stave with modifiers Test'); -} -VexFlowTests.register(MultiMeasureRestTests); -export { MultiMeasureRestTests }; diff --git a/build/esm/tests/music_tests.js b/build/esm/tests/music_tests.js deleted file mode 100644 index 404d779b5b..0000000000 --- a/build/esm/tests/music_tests.js +++ /dev/null @@ -1,161 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { KeyManager } from '../src/keymanager.js'; -import { Music } from '../src/music.js'; -const MusicTests = { - Start() { - QUnit.module('MusicTests'); - test('Valid Notes', validNotes); - test('Valid Keys', validKeys); - test('Note Values', noteValue); - test('Interval Values', intervalValue); - test('Relative Notes', relativeNotes); - test('Relative Note Names', relativeNoteNames); - test('Canonical Notes', canonicalNotes); - test('Canonical Intervals', canonicalIntervals); - test('Scale Tones', scaleTones); - test('Scale Intervals', scaleIntervals); - }, -}; -function validNotes() { - expect(10); - const music = new Music(); - let parts = music.getNoteParts('c'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - parts = music.getNoteParts('C'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - parts = music.getNoteParts('c#'); - equal(parts.root, 'c'); - equal(parts.accidental, '#'); - parts = music.getNoteParts('c##'); - equal(parts.root, 'c'); - equal(parts.accidental, '##'); - throws(() => music.getNoteParts('r'), /BadArguments/, 'Invalid note: r'); - throws(() => music.getNoteParts(''), /BadArguments/, "Invalid note: ''"); -} -function validKeys() { - expect(18); - const music = new Music(); - let parts = music.getKeyParts('c'); - equal(parts.root, 'c'); - equal(parts.accidental, null); - equal(parts.type, 'M'); - parts = music.getKeyParts('d#'); - equal(parts.root, 'd'); - equal(parts.accidental, '#'); - equal(parts.type, 'M'); - parts = music.getKeyParts('fbm'); - equal(parts.root, 'f'); - equal(parts.accidental, 'b'); - equal(parts.type, 'm'); - parts = music.getKeyParts('c#mel'); - equal(parts.root, 'c'); - equal(parts.accidental, '#'); - equal(parts.type, 'mel'); - parts = music.getKeyParts('g#harm'); - equal(parts.root, 'g'); - equal(parts.accidental, '#'); - equal(parts.type, 'harm'); - throws(() => music.getKeyParts('r'), /BadArguments/, 'Invalid key: r'); - throws(() => music.getKeyParts(''), /BadArguments/, `Invalid key: ''`); - throws(() => music.getKeyParts('#m'), /BadArguments/, 'Invalid key: #m'); -} -function noteValue() { - expect(3); - const music = new Music(); - let note = music.getNoteValue('c'); - equal(note, 0); - throws(() => music.getNoteValue('r'), /BadArguments/, 'Invalid note name'); - note = music.getNoteValue('f#'); - equal(note, 6); -} -function intervalValue() { - expect(2); - const music = new Music(); - const value = music.getIntervalValue('b2'); - equal(value, 1); - throws(() => music.getIntervalValue('7'), /BadArguments/, 'Invalid interval name'); -} -function relativeNotes() { - expect(8); - const music = new Music(); - let value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b5')); - equal(value, 6); - throws(() => music.getRelativeNoteValue(music.getNoteValue('bc'), music.getIntervalValue('b2')), /BadArguments/, 'Invalid note'); - throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p3')), /BadArguments/, 'Invalid interval'); - value = music.getRelativeNoteValue(music.getNoteValue('d'), music.getIntervalValue('2'), -1); - equal(value, 0); - throws(() => music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('p4'), 0), /BadArguments/, 'Invalid direction: 0'); - value = music.getRelativeNoteValue(music.getNoteValue('b'), music.getIntervalValue('b5')); - equal(value, 5); - value = music.getRelativeNoteValue(music.getNoteValue('c'), music.getIntervalValue('b2'), -1); - equal(value, 11); - value = music.getRelativeNoteValue(music.getNoteValue('g'), music.getIntervalValue('p5')); - equal(value, 2); -} -function relativeNoteNames() { - expect(9); - const music = new Music(); - equal(music.getRelativeNoteName('b', music.getNoteValue('c#')), 'b##'); - equal(music.getRelativeNoteName('c', music.getNoteValue('c')), 'c'); - equal(music.getRelativeNoteName('c', music.getNoteValue('db')), 'c#'); - equal(music.getRelativeNoteName('c', music.getNoteValue('b')), 'cb'); - equal(music.getRelativeNoteName('c#', music.getNoteValue('db')), 'c#'); - equal(music.getRelativeNoteName('e', music.getNoteValue('f#')), 'e##'); - equal(music.getRelativeNoteName('e', music.getNoteValue('d#')), 'eb'); - equal(music.getRelativeNoteName('e', music.getNoteValue('fb')), 'e'); - throws(() => music.getRelativeNoteName('e', music.getNoteValue('g#')), /BadArguments/, 'Too far away. Notes not related.'); -} -function canonicalNotes() { - expect(3); - const music = new Music(); - equal(music.getCanonicalNoteName(0), 'c'); - equal(music.getCanonicalNoteName(2), 'd'); - throws(() => music.getCanonicalNoteName(-1), /BadArguments/, 'Invalid note value'); -} -function canonicalIntervals() { - expect(3); - const music = new Music(); - equal(music.getCanonicalIntervalName(0), 'unison'); - equal(music.getCanonicalIntervalName(2), 'M2'); - throws(() => music.getCanonicalIntervalName(-1), /BadArguments/, 'Invalid interval value'); -} -function scaleTones() { - expect(24); - const music = new Music(); - const manager = new KeyManager('CM'); - const c_major = music.getScaleTones(music.getNoteValue('c'), Music.scales.major); - let values = ['c', 'd', 'e', 'f', 'g', 'a', 'b']; - equal(c_major.length, 7); - for (let i = 0; i < c_major.length; ++i) { - equal(music.getCanonicalNoteName(c_major[i]), values[i]); - } - const c_dorian = music.getScaleTones(music.getNoteValue('c'), Music.scales.dorian); - values = ['c', 'd', 'eb', 'f', 'g', 'a', 'bb']; - let note = null; - equal(c_dorian.length, 7); - for (let i = 0; i < c_dorian.length; ++i) { - note = music.getCanonicalNoteName(c_dorian[i]); - equal(manager.selectNote(note).note, values[i]); - } - const c_mixolydian = music.getScaleTones(music.getNoteValue('c'), Music.scales.mixolydian); - values = ['c', 'd', 'e', 'f', 'g', 'a', 'bb']; - equal(c_mixolydian.length, 7); - for (let i = 0; i < c_mixolydian.length; ++i) { - note = music.getCanonicalNoteName(c_mixolydian[i]); - equal(manager.selectNote(note).note, values[i]); - } -} -function scaleIntervals() { - expect(6); - const m = new Music(); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('d'))), 'M2'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('g'), m.getNoteValue('c'))), 'p4'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('c'), m.getNoteValue('c'))), 'unison'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('f'), m.getNoteValue('cb'))), 'dim5'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), 1)), 'b7'); - equal(m.getCanonicalIntervalName(m.getIntervalBetween(m.getNoteValue('d'), m.getNoteValue('c'), -1)), 'M2'); -} -VexFlowTests.register(MusicTests); -export { MusicTests }; diff --git a/build/esm/tests/notehead_tests.js b/build/esm/tests/notehead_tests.js deleted file mode 100644 index 2ad1c11c6b..0000000000 --- a/build/esm/tests/notehead_tests.js +++ /dev/null @@ -1,221 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { NoteHead } from '../src/notehead.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { TickContext } from '../src/tickcontext.js'; -import { Voice } from '../src/voice.js'; -const NoteHeadTests = { - Start() { - QUnit.module('NoteHead'); - const run = VexFlowTests.runTests; - run('Basic', basic); - run('Various Note Heads 1', variousNoteHeads); - run('Various Note Heads 2', variousNoteHeads2); - run('Various Heads', variousHeads); - run('Drum Chord Heads', drumChordHeads); - run('Bounding Boxes', basicBoundingBoxes); - }, -}; -function setContextStyle(ctx) { - ctx.scale(0.9, 0.9); - ctx.scale(2.0, 2.0); - ctx.font = '10pt Arial'; -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 250); - setContextStyle(ctx); - const stave = new Stave(10, 0, 250).addClef('treble'); - stave.setContext(ctx).draw(); - const formatter = new Formatter(); - const voice = new Voice(Flow.TIME4_4).setStrict(false); - const note_head1 = new NoteHead({ duration: '4', line: 3 }); - const note_head2 = new NoteHead({ duration: '1', line: 2.5 }); - const note_head3 = new NoteHead({ duration: '2', line: 0 }); - voice.addTickables([note_head1, note_head2, note_head3]); - formatter.joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok('Basic NoteHead test'); -} -function showNote(noteStruct, stave, ctx, x) { - const note = new StaveNote(noteStruct).setStave(stave); - new TickContext().addTickable(note).preFormat().setX(x); - note.setContext(ctx).draw(); - return note; -} -function variousHeads(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d0'], duration: '4' }, - { keys: ['g/5/d1'], duration: '4' }, - { keys: ['g/5/d2'], duration: '4' }, - { keys: ['g/5/d3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/t0'], duration: '1' }, - { keys: ['g/5/t1'], duration: '4' }, - { keys: ['g/5/t2'], duration: '4' }, - { keys: ['g/5/t3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x0'], duration: '1' }, - { keys: ['g/5/x1'], duration: '4' }, - { keys: ['g/5/x2'], duration: '4' }, - { keys: ['g/5/x3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/s1'], duration: '4' }, - { keys: ['g/5/s2'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/r1'], duration: '4' }, - { keys: ['g/5/r2'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - for (let staveNum = 0; staveNum < 2; ++staveNum) { - const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) - .addClef('percussion') - .setContext(ctx) - .draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = staveNum === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function variousNoteHeads(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d'], duration: '1/2' }, - { keys: ['g/5/d'], duration: '1' }, - { keys: ['g/5/d'], duration: '2' }, - { keys: ['g/5/d'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x'], duration: '1/2' }, - { keys: ['g/5/x'], duration: '1' }, - { keys: ['g/5/x'], duration: '2' }, - { keys: ['g/5/x'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/cx'], duration: '1/2' }, - { keys: ['g/5/cx'], duration: '1' }, - { keys: ['g/5/cx'], duration: '2' }, - { keys: ['g/5/cx'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/tu'], duration: '1/2' }, - { keys: ['g/5/tu'], duration: '1' }, - { keys: ['g/5/tu'], duration: '2' }, - { keys: ['g/5/tu'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/td'], duration: '1/2' }, - { keys: ['g/5/td'], duration: '1' }, - { keys: ['g/5/td'], duration: '2' }, - { keys: ['g/5/td'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sf'], duration: '1/2' }, - { keys: ['g/5/sf'], duration: '1' }, - { keys: ['g/5/sf'], duration: '2' }, - { keys: ['g/5/sf'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sb'], duration: '1/2' }, - { keys: ['g/5/sb'], duration: '1' }, - { keys: ['g/5/sb'], duration: '2' }, - { keys: ['g/5/sb'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/ci'], duration: '1/2' }, - { keys: ['g/5/ci'], duration: '1' }, - { keys: ['g/5/ci'], duration: '2' }, - { keys: ['g/5/ci'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/sq'], duration: '1/2' }, - { keys: ['g/5/sq'], duration: '1' }, - { keys: ['g/5/sq'], duration: '2' }, - { keys: ['g/5/sq'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - for (let staveNum = 0; staveNum < 2; ++staveNum) { - const stave = new Stave(10, 10 + staveNum * 120, notes.length * 25 + 75) - .addClef('percussion') - .setContext(ctx) - .draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = staveNum === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function variousNoteHeads2(options, contextBuilder) { - const notes = [ - { keys: ['g/5/do'], duration: '4', auto_stem: true }, - { keys: ['g/5/re'], duration: '4', auto_stem: true }, - { keys: ['g/5/mi'], duration: '4', auto_stem: true }, - { keys: ['g/5/fa'], duration: '4', auto_stem: true }, - { keys: ['e/4/faup'], duration: '4', auto_stem: true }, - { keys: ['g/5/so'], duration: '4', auto_stem: true }, - { keys: ['g/5/la'], duration: '4', auto_stem: true }, - { keys: ['g/5/ti'], duration: '4', auto_stem: true }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - const stave = new Stave(10, 10, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drumChordHeads(options, contextBuilder) { - const notes = [ - { keys: ['a/4/d0', 'g/5/x3'], duration: '4' }, - { keys: ['a/4/x3', 'g/5/d0'], duration: '4' }, - { keys: ['a/4/d1', 'g/5/x2'], duration: '4' }, - { keys: ['a/4/x2', 'g/5/d1'], duration: '4' }, - { keys: ['a/4/d2', 'g/5/x1'], duration: '4' }, - { keys: ['a/4/x1', 'g/5/d2'], duration: '4' }, - { keys: ['a/4/d3', 'g/5/x0'], duration: '4' }, - { keys: ['a/4/x0', 'g/5/d3'], duration: '4' }, - { keys: ['a/4', 'g/5/d0'], duration: '4' }, - { keys: ['a/4/x3', 'g/5'], duration: '4' }, - { keys: ['a/4/t0', 'g/5/s1'], duration: '4' }, - { keys: ['a/4/s1', 'g/5/t0'], duration: '4' }, - { keys: ['a/4/t1', 'g/5/s2'], duration: '4' }, - { keys: ['a/4/s2', 'g/5/t1'], duration: '4' }, - { keys: ['a/4/t2', 'g/5/r1'], duration: '4' }, - { keys: ['a/4/r1', 'g/5/t2'], duration: '4' }, - { keys: ['a/4/t3', 'g/5/r2'], duration: '4' }, - { keys: ['a/4/r2', 'g/5/t3'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - for (let h = 0; h < 2; ++h) { - const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = h === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function basicBoundingBoxes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 250); - setContextStyle(ctx); - const stave = new Stave(10, 0, 250).addClef('treble'); - stave.setContext(ctx).draw(); - const formatter = new Formatter(); - const voice = new Voice(Flow.TIME4_4).setStrict(false); - const nh1 = new NoteHead({ duration: '4', line: 3 }); - const nh2 = new NoteHead({ duration: '2', line: 2.5 }); - const nh3 = new NoteHead({ duration: '1', line: 0 }); - voice.addTickables([nh1, nh2, nh3]); - formatter.joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - for (const bb of [nh1.getBoundingBox(), nh2.getBoundingBox(), nh3.getBoundingBox()]) { - ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - } - ctx.stroke(); - ok('NoteHead Bounding Boxes'); -} -VexFlowTests.register(NoteHeadTests); -export { NoteHeadTests }; diff --git a/build/esm/tests/notesubgroup_tests.js b/build/esm/tests/notesubgroup_tests.js deleted file mode 100644 index 36e2626389..0000000000 --- a/build/esm/tests/notesubgroup_tests.js +++ /dev/null @@ -1,149 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { BarNote } from '../src/barnote.js'; -import { Note } from '../src/note.js'; -import { BarlineType } from '../src/stavebarline.js'; -const NoteSubGroupTests = { - Start() { - QUnit.module('NoteSubGroup'); - const run = VexFlowTests.runTests; - run('Basic - ClefNote, TimeSigNote and BarNote', basic); - run('Multi Voice', multiVoiceSingleDraw); - run('Multi Voice Multiple Draws', multiVoiceDoubleDraw); - run('Multi Staff', multiStaff); - }, -}; -function createShortcuts(f) { - return { - createStaveNote: (noteStruct) => f.StaveNote(noteStruct), - addAccidental: (note, accid) => note.addModifier(f.Accidental({ type: accid }), 0), - addSubGroup: (note, subNotes) => note.addModifier(f.NoteSubGroup({ notes: subNotes }), 0), - }; -} -function basic(options) { - const f = VexFlowTests.makeFactory(options, 750, 200); - const ctx = f.getContext(); - const stave = f.Stave({ width: 600 }).addClef('treble'); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const notes = [ - { keys: ['f/5'], stem_direction: -1, duration: '4' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['g/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['a/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['c/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - { keys: ['c/3'], stem_direction: +1, duration: '4', clef: 'tenor' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'tenor' }, - ].map(createStaveNote); - addAccidental(notes[1], '#'); - addAccidental(notes[2], 'n'); - addSubGroup(notes[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); - addSubGroup(notes[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } })]); - addSubGroup(notes[4], [f.ClefNote({ type: 'tenor', options: { size: 'small' } }), new BarNote()]); - addSubGroup(notes[5], [f.TimeSigNote({ time: '6/8' })]); - addSubGroup(notes[6], [new BarNote(BarlineType.REPEAT_BEGIN)]); - addAccidental(notes[4], 'b'); - addAccidental(notes[6], 'bb'); - const voice = f.Voice().setStrict(false).addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - notes.forEach((note) => Note.plotMetrics(ctx, note, 150)); - VexFlowTests.plotLegendForNoteWidth(ctx, 620, 120); - ok(true, 'all pass'); -} -function multiVoiceSingleDraw(options) { - multiVoiceHelper(options, 1); -} -function multiVoiceDoubleDraw(options) { - multiVoiceHelper(options, 2); -} -function multiVoiceHelper(options, numDraws) { - const f = VexFlowTests.makeFactory(options, 550, 200); - const ctx = f.getContext(); - const stave = f.Stave().addClef('treble'); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const notes1 = [ - { keys: ['f/5'], stem_direction: 1, duration: '4' }, - { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const notes2 = [ - { keys: ['c/4'], stem_direction: -1, duration: '4' }, - { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - addAccidental(notes1[1], '#'); - addSubGroup(notes1[1], [ - f.ClefNote({ type: 'bass', options: { size: 'small' } }), - new BarNote(BarlineType.REPEAT_BEGIN), - f.TimeSigNote({ time: '3/4' }), - ]); - addSubGroup(notes2[2], [ - f.ClefNote({ type: 'alto', options: { size: 'small' } }), - f.TimeSigNote({ time: '9/8' }), - new BarNote(BarlineType.DOUBLE), - ]); - addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); - addAccidental(notes1[2], 'b'); - addAccidental(notes2[3], '#'); - const voices = [f.Voice().addTickables(notes1), f.Voice().addTickables(notes2)]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - for (let i = 0; i < numDraws; i++) { - f.draw(); - } - notes1.forEach((note) => Note.plotMetrics(ctx, note, 150)); - ok(true, 'all pass'); -} -function multiStaff(options) { - const f = VexFlowTests.makeFactory(options, 550, 400); - const { createStaveNote, addAccidental, addSubGroup } = createShortcuts(f); - const stave1 = f.Stave({ x: 15, y: 30, width: 500 }).setClef('treble'); - const notes1 = [ - { keys: ['f/5'], stem_direction: 1, duration: '4' }, - { keys: ['d/4'], stem_direction: 1, duration: '4', clef: 'bass' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'alto' }, - { keys: ['c/5'], stem_direction: 1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const notes2 = [ - { keys: ['c/4'], stem_direction: -1, duration: '4' }, - { keys: ['c/3'], stem_direction: -1, duration: '4', clef: 'bass' }, - { keys: ['d/4'], stem_direction: -1, duration: '4', clef: 'alto' }, - { keys: ['f/4'], stem_direction: -1, duration: '4', clef: 'soprano' }, - ].map(createStaveNote); - const stave2 = f.Stave({ x: 15, y: 150, width: 500 }).setClef('bass'); - const notes3 = [ - { keys: ['e/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['g/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['d/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['f/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['c/4'], duration: '8', stem_direction: 1, clef: 'treble' }, - { keys: ['g/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['d/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - { keys: ['f/3'], duration: '8', stem_direction: -1, clef: 'bass' }, - ].map(createStaveNote); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'brace' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleLeft' }); - f.StaveConnector({ top_stave: stave1, bottom_stave: stave2, type: 'singleRight' }); - f.Beam({ notes: notes3.slice(1, 4) }); - f.Beam({ notes: notes3.slice(5) }); - addAccidental(notes1[1], '#'); - addSubGroup(notes1[1], [f.ClefNote({ type: 'bass', options: { size: 'small' } }), f.TimeSigNote({ time: '3/4' })]); - addSubGroup(notes2[2], [f.ClefNote({ type: 'alto', options: { size: 'small' } }), f.TimeSigNote({ time: '9/8' })]); - addSubGroup(notes1[3], [f.ClefNote({ type: 'soprano', options: { size: 'small' } })]); - addSubGroup(notes3[1], [f.ClefNote({ type: 'treble', options: { size: 'small' } })]); - addSubGroup(notes3[5], [f.ClefNote({ type: 'bass', options: { size: 'small' } })]); - addAccidental(notes3[0], '#'); - addAccidental(notes3[3], 'b'); - addAccidental(notes3[5], '#'); - addAccidental(notes1[2], 'b'); - addAccidental(notes2[3], '#'); - const voice1 = f.Voice().addTickables(notes1); - const voice2 = f.Voice().addTickables(notes2); - const voice3 = f.Voice().addTickables(notes3); - f.Formatter().joinVoices([voice1, voice2]).joinVoices([voice3]).formatToStave([voice1, voice2, voice3], stave1); - f.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(NoteSubGroupTests); -export { NoteSubGroupTests }; diff --git a/build/esm/tests/offscreencanvas_tests.js b/build/esm/tests/offscreencanvas_tests.js deleted file mode 100644 index b1c3899b1a..0000000000 --- a/build/esm/tests/offscreencanvas_tests.js +++ /dev/null @@ -1,47 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { CanvasContext } from '../src/canvascontext.js'; -import { Formatter } from '../src/formatter.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -import { StaveNote } from '../src/stavenote.js'; -import { globalObject } from '../src/util.js'; -const OffscreenCanvasTests = { - Start() { - if (globalObject().OffscreenCanvas === undefined) { - return; - } - QUnit.module('OffscreenCanvas'); - test('Simple Test', simpleTest); - }, -}; -function simpleTest() { - const offscreenCanvas = new OffscreenCanvas(550, 200); - const offscreenCtx = offscreenCanvas.getContext('2d'); - if (offscreenCtx == null) { - throw new Error("Couldn't create offscreen context"); - } - const ctx = new CanvasContext(offscreenCtx); - const stave = new Stave(10, 50, 200); - stave.setEndBarType(BarlineType.END); - stave.addClef('treble').setContext(ctx).draw(); - const notes = [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'qr' }), - new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - const imgBmp = offscreenCanvas.transferToImageBitmap(); - const canvas = document.createElement('canvas'); - canvas.width = offscreenCanvas.width; - canvas.height = offscreenCanvas.height; - const canvasCtx = canvas.getContext('2d'); - if (canvasCtx == null) { - throw new Error("Couldn't create canvas context"); - } - canvasCtx.drawImage(imgBmp, 0, 0); - document.body.appendChild(canvas); - ok(true, 'all pass'); -} -VexFlowTests.register(OffscreenCanvasTests); -export { OffscreenCanvasTests }; diff --git a/build/esm/tests/ornament_tests.js b/build/esm/tests/ornament_tests.js deleted file mode 100644 index 8d4b904e2f..0000000000 --- a/build/esm/tests/ornament_tests.js +++ /dev/null @@ -1,300 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Beam } from '../src/beam.js'; -import { Dot } from '../src/dot.js'; -import { Formatter } from '../src/formatter.js'; -import { Glyph } from '../src/glyph.js'; -import { Ornament } from '../src/ornament.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Voice, VoiceMode } from '../src/voice.js'; -const OrnamentTests = { - Start() { - QUnit.module('Ornament'); - const run = VexFlowTests.runTests; - run('Ornaments', drawOrnaments); - run('Ornaments Vertically Shifted', drawOrnamentsDisplaced); - run('Ornaments - Delayed turns', drawOrnamentsDelayed); - run('Ornaments - Delayed turns, Multiple Draws', drawOrnamentsDelayedMultipleDraws); - run('Stacked', drawOrnamentsStacked); - run('With Upper/Lower Accidentals', drawOrnamentsWithAccidentals); - run('Jazz Ornaments', jazzOrnaments); - }, -}; -function drawOrnaments(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 750, 195); - const stave = new Stave(10, 30, 700); - stave.setContext(ctx).draw(); - const notes = [ - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(new Ornament('mordent'), 0); - notes[1].addModifier(new Ornament('mordent_inverted'), 0); - notes[2].addModifier(new Ornament('turn'), 0); - notes[3].addModifier(new Ornament('turn_inverted'), 0); - notes[4].addModifier(new Ornament('tr'), 0); - notes[5].addModifier(new Ornament('upprall'), 0); - notes[6].addModifier(new Ornament('downprall'), 0); - notes[7].addModifier(new Ornament('prallup'), 0); - notes[8].addModifier(new Ornament('pralldown'), 0); - notes[9].addModifier(new Ornament('upmordent'), 0); - notes[10].addModifier(new Ornament('downmordent'), 0); - notes[11].addModifier(new Ornament('lineprall'), 0); - notes[12].addModifier(new Ornament('prallprall'), 0); - Formatter.FormatAndDraw(ctx, stave, notes); -} -function drawOrnamentsDisplaced(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 750, 195); - const stave = new Stave(10, 30, 700); - stave.setContext(ctx).draw(); - const notes = [ - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/5'], duration: '4', stem_direction: -1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - new StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(new Ornament('mordent'), 0); - notes[1].addModifier(new Ornament('mordent_inverted'), 0); - notes[1].addModifier(new Ornament('mordent_inverted'), 0); - notes[2].addModifier(new Ornament('turn'), 0); - notes[3].addModifier(new Ornament('turn_inverted'), 0); - notes[4].addModifier(new Ornament('tr'), 0); - notes[5].addModifier(new Ornament('upprall'), 0); - notes[6].addModifier(new Ornament('downprall'), 0); - notes[7].addModifier(new Ornament('prallup'), 0); - notes[8].addModifier(new Ornament('pralldown'), 0); - notes[9].addModifier(new Ornament('upmordent'), 0); - notes[10].addModifier(new Ornament('downmordent'), 0); - notes[11].addModifier(new Ornament('lineprall'), 0); - notes[12].addModifier(new Ornament('prallprall'), 0); - Formatter.FormatAndDraw(ctx, stave, notes); -} -const addDelayedTurns = (f) => { - const context = f.getContext(); - const stave = f.Stave({ x: 10, y: 30, width: 500 }); - stave.setContext(context).draw(); - const notes = [ - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('turn', { delayed: true }), 0); - notes[1].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); - notes[2].addModifier(f.Ornament('turn_inverted', { delayed: true }), 0); - notes[3].addModifier(f.Ornament('turn', { delayed: true }), 0); - return { context, stave, notes }; -}; -function drawOrnamentsDelayed(options) { - expect(0); - const f = VexFlowTests.makeFactory(options, 550, 195); - const { context, stave, notes } = addDelayedTurns(f); - Formatter.FormatAndDraw(context, stave, notes); -} -function drawOrnamentsDelayedMultipleDraws(options) { - expect(0); - const f = VexFlowTests.makeFactory(options, 550, 195); - const { context, stave, notes } = addDelayedTurns(f); - Formatter.FormatAndDraw(context, stave, notes); - Formatter.FormatAndDraw(context, stave, notes); -} -function drawOrnamentsStacked(options) { - expect(0); - const f = VexFlowTests.makeFactory(options, 550, 195); - const ctx = f.getContext(); - const stave = f.Stave({ x: 10, y: 30, width: 500 }); - stave.setContext(ctx).draw(); - const notes = [ - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['a/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('mordent'), 0); - notes[1].addModifier(f.Ornament('turn_inverted'), 0); - notes[2].addModifier(f.Ornament('turn'), 0); - notes[3].addModifier(f.Ornament('turn_inverted'), 0); - notes[0].addModifier(f.Ornament('turn'), 0); - notes[1].addModifier(f.Ornament('prallup'), 0); - notes[2].addModifier(f.Ornament('upmordent'), 0); - notes[3].addModifier(f.Ornament('lineprall'), 0); - Formatter.FormatAndDraw(ctx, stave, notes); -} -function drawOrnamentsWithAccidentals(options) { - expect(0); - const f = VexFlowTests.makeFactory(options, 650, 250); - const ctx = f.getContext(); - const stave = f.Stave({ x: 10, y: 60, width: 600 }); - stave.setContext(ctx).draw(); - const notes = [ - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: 1 }), - ]; - notes[0].addModifier(f.Ornament('mordent', { lowerAccidental: '#', upperAccidental: '#' }), 0); - notes[1].addModifier(f.Ornament('turn_inverted', { lowerAccidental: 'b', upperAccidental: 'b' }), 0); - notes[2].addModifier(f.Ornament('turn', { upperAccidental: '##', lowerAccidental: '##' }), 0); - notes[3].addModifier(f.Ornament('mordent_inverted', { lowerAccidental: 'db', upperAccidental: 'db' }), 0); - notes[4].addModifier(f.Ornament('turn_inverted', { upperAccidental: '++', lowerAccidental: '++' }), 0); - notes[5].addModifier(f.Ornament('tr', { upperAccidental: 'n', lowerAccidental: 'n' }), 0); - notes[6].addModifier(f.Ornament('prallup', { upperAccidental: 'd', lowerAccidental: 'd' }), 0); - notes[7].addModifier(f.Ornament('lineprall', { upperAccidental: 'db', lowerAccidental: 'db' }), 0); - notes[8].addModifier(f.Ornament('upmordent', { upperAccidental: 'bbs', lowerAccidental: 'bbs' }), 0); - notes[9].addModifier(f.Ornament('prallprall', { upperAccidental: 'bb', lowerAccidental: 'bb' }), 0); - notes[10].addModifier(f.Ornament('turn_inverted', { upperAccidental: '+', lowerAccidental: '+' }), 0); - Formatter.FormatAndDraw(ctx, stave, notes); -} -function jazzOrnaments(options) { - const clefWidth = Glyph.getWidth('gClef', 38); - function draw(modifiers, keys, x, width, y, stemDirection) { - const note = (keys, duration, modifier, stemDirection) => { - const n = new StaveNote({ keys, duration, stem_direction: stemDirection }) - .addModifier(modifier, 0) - .addModifier(new Accidental('b'), 0); - const dot = duration.indexOf('d') >= 0; - if (dot) { - Dot.buildAndAttach([n], { all: true }); - } - return n; - }; - const stave = new Stave(x, y, width).addClef('treble').setContext(ctx).draw(); - const notes = [ - note(keys, '4d', modifiers[0], stemDirection), - note(keys, '8', modifiers[1], stemDirection), - note(keys, '4d', modifiers[2], stemDirection), - note(keys, '8', modifiers[3], stemDirection), - ]; - if (modifiers.length > 4) { - notes[3].addModifier(modifiers[4], 0); - } - Beam.generateBeams(notes); - const voice = new Voice({ - num_beats: 4, - beat_value: 4, - }).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - const formatter = new Formatter().joinVoices([voice]); - formatter.format([voice], width - Stave.defaultPadding - clefWidth); - stave.setContext(ctx).draw(); - voice.draw(ctx, stave); - } - expect(0); - const f = VexFlowTests.makeFactory(options, 950, 400); - const ctx = f.getContext(); - ctx.scale(1, 1); - const xStart = 10; - const width = 300; - const yStart = 50; - const staffHeight = 70; - let curX = xStart; - let curY = yStart; - let mods = [ - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['a/5'], curX, width, curY, -1); - curX += width; - mods = [ - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['a/5'], curX, width, curY, -1); - curX += width; - mods = [ - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['a/5'], curX, width, curY, 1); - curX = xStart; - curY += staffHeight; - mods = [ - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['e/5'], curX, width, curY); - curX += width; - mods = [ - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['e/5'], curX, width, curY); - curX += width; - mods = [ - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['e/5'], curX, width, curY); - curX = xStart; - curY += staffHeight; - mods = [ - f.Ornament('scoop'), - f.Ornament('doit'), - f.Ornament('fall'), - f.Ornament('doitLong'), - ]; - draw(mods, ['e/4'], curX, width, curY); - curX += width; - mods = [ - f.Ornament('fallLong'), - f.Ornament('bend'), - f.Ornament('plungerClosed'), - f.Ornament('plungerOpen'), - f.Ornament('bend'), - ]; - draw(mods, ['e/4'], curX, width, curY); - curX += width; - mods = [ - f.Ornament('flip'), - f.Ornament('jazzTurn'), - f.Ornament('smear'), - f.Ornament('doit'), - ]; - draw(mods, ['e/4'], curX, width, curY); -} -VexFlowTests.register(OrnamentTests); -export { OrnamentTests }; diff --git a/build/esm/tests/parser_tests.js b/build/esm/tests/parser_tests.js deleted file mode 100644 index 3682126413..0000000000 --- a/build/esm/tests/parser_tests.js +++ /dev/null @@ -1,122 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Parser } from '../src/parser.js'; -const ParserTests = { - Start() { - QUnit.module('Parser'); - test('Basic', basic); - test('Advanced', advanced); - test('Mixed', mixed); - test('Micro Score', microscore); - }, -}; -class TestGrammar { - begin() { - return () => ({ expect: this.expect }); - } - BIGORLITTLE() { - return { expect: [this.BIGLINE, this.LITTLELINE], or: true }; - } - BIGLINE() { - return { expect: [this.LBRACE, this.WORD, this.WORDS, this.MAYBEEXCLAIM, this.RBRACE] }; - } - LITTLELINE() { - return { expect: [this.WORD, this.WORDS] }; - } - WORDS() { - return { expect: [this.COMMA, this.WORD], zeroOrMore: true }; - } - MAYBEEXCLAIM() { - return { expect: [this.EXCLAIM], maybe: true }; - } - LBRACE() { - return { token: '[{]' }; - } - RBRACE() { - return { token: '[}]' }; - } - WORD() { - return { token: '[a-zA-Z]+' }; - } - COMMA() { - return { token: '[,]' }; - } - EXCLAIM() { - return { token: '[!]' }; - } - EOL() { - return { token: '$' }; - } -} -class MicroScoreGrammar { - constructor() { - this.ITEM = () => ({ expect: [this.PIANO_KEY_NUMBER, this.CHORD], or: true }); - this.MAYBE_MORE_ITEMS = () => ({ expect: [this.ITEM], zeroOrMore: true }); - this.PIANO_KEY_NUMBER = () => ({ expect: [this.NUM], oneOrMore: true }); - this.CHORD = () => ({ expect: [this.LEFT_BRACKET, this.PIANO_KEY_NUMBER, this.MORE_CHORD_PARTS, this.RIGHT_BRACKET] }); - this.MORE_CHORD_PARTS = () => ({ expect: [this.PERIOD, this.PIANO_KEY_NUMBER], oneOrMore: true }); - this.NUM = () => ({ token: '\\d+' }); - this.WHITESPACE = () => ({ token: '\\s+' }); - this.PERIOD = () => ({ token: '\\.' }); - this.LEFT_BRACKET = () => ({ token: '\\[' }); - this.RIGHT_BRACKET = () => ({ token: '\\]' }); - this.EOL = () => ({ token: '$' }); - } - begin() { - return () => ({ expect: [this.ITEM, this.MAYBE_MORE_ITEMS, this.EOL] }); - } -} -function fails(result, expectedErrorPos, msg) { - notOk(result.success, msg); - equal(result.errorPos, expectedErrorPos, msg); -} -function basic() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.LITTLELINE, grammar.EOL]; - const parser = new Parser(grammar); - const mustPass = ['first, second', 'first,second', 'first', 'first,second, third']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse(''), 0); - fails(parser.parse('first second'), 6); - fails(parser.parse('first,,'), 5); - fails(parser.parse('first,'), 5); - fails(parser.parse(',,'), 0); -} -function advanced() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.BIGLINE, grammar.EOL]; - const parser = new Parser(grammar); - const mustPass = ['{first}', '{first!}', '{first,second}', '{first,second!}', '{first,second,third!}']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse('{first,second,third,}'), 19); - fails(parser.parse('first,second,third'), 0); - fails(parser.parse('{first,second,third'), 19); - fails(parser.parse('{!}'), 1); -} -function mixed() { - const grammar = new TestGrammar(); - grammar.expect = [grammar.BIGORLITTLE, grammar.EOL]; - const parser = new Parser(grammar); - const mustPass = ['{first,second,third!}', 'first, second']; - mustPass.forEach((line) => equal(parser.parse(line).success, true, line)); - fails(parser.parse('first second'), 6); -} -function microscore() { - const grammar = new MicroScoreGrammar(); - const parser = new Parser(grammar); - const mustPass = [ - '40 42 44 45 47 49 51 52', - '[40.44.47] [45.49.52] [47.51.54] [49.52.56]', - '40 [40.44.47] 45 47 [44.47.51]', - ]; - mustPass.forEach((line) => { - var _a; - const result = parser.parse(line); - equal(result.success, true, line); - equal((_a = result.matches) === null || _a === void 0 ? void 0 : _a.length, 3, line); - }); - fails(parser.parse('40 42 44 45 47 49 5A 52'), 19); - fails(parser.parse('40.44.47] [45.49.52] [47.51.54] [49.52.56]'), 2); - fails(parser.parse('40 [40] 45 47 [44.47.51]'), 3); -} -VexFlowTests.register(ParserTests); -export { ParserTests }; diff --git a/build/esm/tests/pedalmarking_tests.js b/build/esm/tests/pedalmarking_tests.js deleted file mode 100644 index dee713e61d..0000000000 --- a/build/esm/tests/pedalmarking_tests.js +++ /dev/null @@ -1,64 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -const PedalMarkingTests = { - Start() { - QUnit.module('PedalMarking'); - const run = VexFlowTests.runTests; - run('Simple Pedal 1', simple1); - run('Simple Pedal 2', simple2); - run('Simple Pedal 3', simple3); - run('Release and Depress on Same Note 1', releaseDepress1); - run('Release and Depress on Same Note 2', releaseDepress2); - run('Custom Text 1', customTest1); - run('Custom Text 2', customTest2); - }, -}; -function createTest(makePedal) { - return (options) => { - const f = VexFlowTests.makeFactory(options, 550, 200); - const score = f.EasyScore(); - const stave0 = f.Stave({ width: 250 }).addClef('treble'); - const voice0 = score.voice(score.notes('b4/4, b4, b4, b4[stem="down"]', { stem: 'up' })); - f.Formatter().joinVoices([voice0]).formatToStave([voice0], stave0); - const stave1 = f.Stave({ width: 260, x: 250 }); - const voice1 = score.voice(score.notes('c4/4, c4, c4, c4', { stem: 'up' })); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - makePedal(f, voice0.getTickables(), voice1.getTickables()); - f.draw(); - ok(true, 'Must render'); - }; -} -function withSimplePedal(style) { - return (factory, notes0, notes1) => factory.PedalMarking({ - notes: [notes0[0], notes0[2], notes0[3], notes1[3]], - options: { style }, - }); -} -function withReleaseAndDepressedPedal(style) { - return (factory, notes0, notes1) => factory.PedalMarking({ - notes: [notes0[0], notes0[3], notes0[3], notes1[1], notes1[1], notes1[3]], - options: { style }, - }); -} -const simple1 = createTest(withSimplePedal('text')); -const simple2 = createTest(withSimplePedal('bracket')); -const simple3 = createTest(withSimplePedal('mixed')); -const releaseDepress1 = createTest(withReleaseAndDepressedPedal('bracket')); -const releaseDepress2 = createTest(withReleaseAndDepressedPedal('mixed')); -const customTest1 = createTest((factory, notes0, notes1) => { - const pedal = factory.PedalMarking({ - notes: [notes0[0], notes1[3]], - options: { style: 'text' }, - }); - pedal.setCustomText('una corda', 'tre corda'); - return pedal; -}); -const customTest2 = createTest((factory, notes0, notes1) => { - const pedal = factory.PedalMarking({ - notes: [notes0[0], notes1[3]], - options: { style: 'mixed' }, - }); - pedal.setCustomText('Sost. Ped.'); - return pedal; -}); -VexFlowTests.register(PedalMarkingTests); -export { PedalMarkingTests }; diff --git a/build/esm/tests/percussion_tests.js b/build/esm/tests/percussion_tests.js deleted file mode 100644 index 950dca6da9..0000000000 --- a/build/esm/tests/percussion_tests.js +++ /dev/null @@ -1,180 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Dot, Font, FontStyle, FontWeight, Stave, StaveNote, TickContext, Tremolo, } from '../src/index.js'; -const PercussionTests = { - Start() { - QUnit.module('Percussion'); - const run = VexFlowTests.runTests; - run('Percussion Clef', draw); - run('Percussion Notes', drawNotes); - run('Percussion Basic0', basic0); - run('Percussion Basic1', basic1); - run('Percussion Basic2', basic2); - run('Percussion Snare0', snare0); - run('Percussion Snare1', snare1); - run('Percussion Snare2', snare2); - run('Percussion Snare3', snare3); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300).addClef('percussion').setContext(ctx).draw(); - ok(true); -} -function showNote(struct, stave, ctx, x) { - const staveNote = new StaveNote(struct).setStave(stave); - new TickContext().addTickable(staveNote).preFormat().setX(x); - staveNote.setContext(ctx).draw(); - return staveNote; -} -function drawNotes(options, contextBuilder) { - const notes = [ - { keys: ['g/5/d0'], duration: '4' }, - { keys: ['g/5/d1'], duration: '4' }, - { keys: ['g/5/d2'], duration: '4' }, - { keys: ['g/5/d3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/t0'], duration: '1' }, - { keys: ['g/5/t1'], duration: '4' }, - { keys: ['g/5/t2'], duration: '4' }, - { keys: ['g/5/t3'], duration: '4' }, - { keys: ['x/'], duration: '1' }, - { keys: ['g/5/x0'], duration: '1' }, - { keys: ['g/5/x1'], duration: '4' }, - { keys: ['g/5/x2'], duration: '4' }, - { keys: ['g/5/x3'], duration: '4' }, - ]; - const ctx = contextBuilder(options.elementId, notes.length * 25 + 100, 240); - for (let h = 0; h < 2; ++h) { - const stave = new Stave(10, 10 + h * 120, notes.length * 25 + 75).addClef('percussion').setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - note.stem_direction = h === 0 ? -1 : 1; - const staveNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(staveNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(staveNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } - } -} -function createSingleMeasureTest(setup) { - return (options) => { - const f = VexFlowTests.makeFactory(options, 500); - const stave = f.Stave().addClef('percussion').setTimeSignature('4/4'); - setup(f); - f.Formatter().joinVoices(f.getVoices()).formatToStave(f.getVoices(), stave); - f.draw(); - ok(true); - }; -} -const basic0 = createSingleMeasureTest((f) => { - const voice0 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - ]); - const voice1 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - ]); - f.Beam({ notes: voice0.getTickables() }); - f.Beam({ notes: voice1.getTickables().slice(0, 2) }); - f.Beam({ notes: voice1.getTickables().slice(3, 5) }); -}); -const basic1 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - f.StaveNote({ keys: ['f/5/x2'], duration: '4' }), - ]); - f.Voice().addTickables([ - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - ]); -}); -const basic2 = createSingleMeasureTest((f) => { - const voice0 = f - .Voice() - .addTickables([ - f.StaveNote({ keys: ['a/5/x3'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5'], duration: '8' }), - f.StaveNote({ keys: ['g/4/n', 'g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - f.StaveNote({ keys: ['g/5/x2'], duration: '8' }), - ]); - f.Beam({ notes: voice0.getTickables().slice(1, 8) }); - const notes1 = [ - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '8', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['f/4'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['d/4/x2', 'c/5'], duration: '8d', stem_direction: -1 }), - f.StaveNote({ keys: ['c/5'], duration: '16', stem_direction: -1 }), - ]; - Dot.buildAndAttach([notes1[4]], { all: true }); - const voice1 = f.Voice().addTickables(notes1); - f.Beam({ notes: voice1.getTickables().slice(0, 2) }); - f.Beam({ notes: voice1.getTickables().slice(4, 6) }); -}); -const snare0 = createSingleMeasureTest((f) => { - const font = { - family: Font.SERIF, - size: 14, - weight: FontWeight.BOLD, - style: FontStyle.ITALIC, - }; - f.Voice().addTickables([ - f - .StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }) - .addModifier(f.Articulation({ type: 'a>' }), 0) - .addModifier(f.Annotation({ text: 'L', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'R', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(f.Annotation({ text: 'L', font }), 0), - ]); -}); -const snare1 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }), - f.StaveNote({ keys: ['g/5/x2'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'ah' }), 0), - f.StaveNote({ keys: ['a/5/x3'], duration: '4', stem_direction: -1 }).addModifier(f.Articulation({ type: 'a,' }), 0), - ]); -}); -const snare2 = createSingleMeasureTest((f) => { - f.Voice().addTickables([ - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), - f.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(1), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(3), 0), - f.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: -1 }).addModifier(new Tremolo(5), 0), - ]); -}); -const snare3 = createSingleMeasureTest((factory) => { - factory - .Voice() - .addTickables([ - factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), - factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(2), 0), - factory.GraceNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(3), 0), - factory.StaveNote({ keys: ['c/5'], duration: '4', stem_direction: 1 }).addModifier(new Tremolo(5), 0), - ]); -}); -VexFlowTests.register(PercussionTests); -export { PercussionTests }; diff --git a/build/esm/tests/registry_tests.js b/build/esm/tests/registry_tests.js deleted file mode 100644 index b8264f18f5..0000000000 --- a/build/esm/tests/registry_tests.js +++ /dev/null @@ -1,64 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { EasyScore, Factory, Registry, StaveNote } from '../src/index.js'; -const RegistryTests = { - Start() { - QUnit.module('Registry'); - test('Register and Clear', registerAndClear); - test('Default Registry', defaultRegistry); - test('Multiple Classes', classes); - }, -}; -function registerAndClear() { - const registry = new Registry(); - const score = new EasyScore({ factory: Factory.newFromElementId(null) }); - registry.register(score.notes('C4')[0], 'foobar'); - const foobar = registry.getElementById('foobar'); - ok(foobar); - equal(foobar.getAttribute('id'), 'foobar'); - registry.clear(); - notOk(registry.getElementById('foobar')); - throws(() => registry.register(score.notes('C4'))); - registry.clear(); - ok(registry.register(score.notes('C4[id="boobar"]')[0]).getElementById('boobar')); -} -function defaultRegistry() { - const registry = new Registry(); - const score = new EasyScore({ factory: Factory.newFromElementId(null) }); - Registry.enableDefaultRegistry(registry); - score.notes('C4[id="foobar"]'); - const note = registry.getElementById('foobar'); - ok(note); - note.setAttribute('id', 'boobar'); - ok(registry.getElementById('boobar')); - notOk(registry.getElementById('foobar')); - registry.clear(); - equal(registry.getElementsByType(StaveNote.CATEGORY).length, 0); - score.notes('C5'); - const elements = registry.getElementsByType(StaveNote.CATEGORY); - equal(elements.length, 1); -} -function classes() { - const registry = new Registry(); - const score = new EasyScore({ factory: Factory.newFromElementId(null) }); - Registry.enableDefaultRegistry(registry); - score.notes('C4[id="foobar"]'); - const note = registry.getElementById('foobar'); - note.addClass('foo'); - ok(note.hasClass('foo')); - notOk(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 1); - equal(registry.getElementsByClass('boo').length, 0); - note.addClass('boo'); - ok(note.hasClass('foo')); - ok(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 1); - equal(registry.getElementsByClass('boo').length, 1); - note.removeClass('boo'); - note.removeClass('foo'); - notOk(note.hasClass('foo')); - notOk(note.hasClass('boo')); - equal(registry.getElementsByClass('foo').length, 0); - equal(registry.getElementsByClass('boo').length, 0); -} -VexFlowTests.register(RegistryTests); -export { RegistryTests }; diff --git a/build/esm/tests/renderer_tests.js b/build/esm/tests/renderer_tests.js deleted file mode 100644 index 7439b1e122..0000000000 --- a/build/esm/tests/renderer_tests.js +++ /dev/null @@ -1,113 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { CanvasContext, Factory, Formatter, isHTMLCanvas, Renderer, RuntimeError, Stave, StaveNote, SVGContext, } from '../src/index.js'; -const STAVE_WIDTH = 700; -const STAVE_HEIGHT = 100; -const STAVE_RIGHT_MARGIN = 10; -const USE_RENDERER = { useRendererAPI: true }; -const USE_FACTORY = { useRendererAPI: false }; -const RendererTests = { - Start() { - QUnit.module('Renderer'); - const run = VexFlowTests.runTests; - run('Random', random); - run('Renderer API with element ID string', stringElementId, USE_RENDERER); - run('Renderer API with canvas or div', canvasOrDivElement, USE_RENDERER); - run('Renderer API with context', passRenderContext); - run('Factory API with element ID string', stringElementId, USE_FACTORY); - run('Factory API with canvas or div', canvasOrDivElement, USE_FACTORY); - }, -}; -function drawStave(stave, context) { - stave.addClef('bass').addTimeSignature('3/4').draw(); - Formatter.FormatAndDraw(context, stave, [ - new StaveNote({ keys: ['C/4'], duration: '4' }), - new StaveNote({ keys: ['E/4'], duration: '4' }), - new StaveNote({ keys: ['G/4'], duration: '4' }), - ]); -} -function random(options) { - const useElementIDString = Math.random() > 0.5; - const useRendererAPI = Math.random() > 0.5; - options.params = { useRendererAPI }; - if (useElementIDString) { - stringElementId(options); - } - else { - canvasOrDivElement(options); - } - const element = document.getElementById(options.elementId); - const colorForElementType = useElementIDString ? '#CCCCCC' : '#0074d9'; - const lineStyleForWhichAPI = useRendererAPI ? 'solid' : 'dashed'; - const borderStyle = `3px ${lineStyleForWhichAPI} ${colorForElementType}`; - let elementType; - if (options.backend === Renderer.Backends.CANVAS) { - element.style.border = borderStyle; - elementType = '<canvas> element object'; - } - else { - element.children[0].style.border = borderStyle; - elementType = '<svg> element object'; - } - if (useElementIDString) { - elementType = 'elementID string'; - } - const whichAPI = useRendererAPI ? 'Renderer API' : 'Factory API'; - element.parentElement.insertAdjacentHTML('beforeend', `
` + - `${whichAPI}` + - ` with ` + - `${elementType}` + - `

`); -} -function useRendererAPI(e, backend) { - const renderer = new Renderer(e, backend); - renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); - const context = renderer.getContext(); - drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); -} -function useFactoryAPI(e, backend) { - const opts = { - renderer: { elementId: e, width: STAVE_WIDTH, height: STAVE_HEIGHT, backend }, - }; - const factory = new Factory(opts); - drawStave(factory.Stave(), factory.getContext()); -} -function stringElementId(options) { - const elementId = options.elementId; - if (options.params.useRendererAPI) { - useRendererAPI(elementId, options.backend); - } - else { - useFactoryAPI(elementId, options.backend); - } - ok(true); -} -function canvasOrDivElement(options) { - const element = document.getElementById(options.elementId); - if (options.params.useRendererAPI) { - useRendererAPI(element, options.backend); - } - else { - useFactoryAPI(element, options.backend); - } - ok(true); -} -function passRenderContext(options) { - let context; - const element = document.getElementById(options.elementId); - if (isHTMLCanvas(element)) { - const ctx = element.getContext('2d'); - if (!ctx) { - throw new RuntimeError(`Couldn't get context from element "${options.elementId}"`); - } - context = new CanvasContext(ctx); - } - else { - context = new SVGContext(element); - } - const renderer = new Renderer(context); - renderer.resize(STAVE_WIDTH, STAVE_HEIGHT); - drawStave(new Stave(0, 0, STAVE_WIDTH - STAVE_RIGHT_MARGIN).setContext(context), context); - ok(true); -} -VexFlowTests.register(RendererTests); -export { RendererTests }; diff --git a/build/esm/tests/rests_tests.js b/build/esm/tests/rests_tests.js deleted file mode 100644 index d83913e587..0000000000 --- a/build/esm/tests/rests_tests.js +++ /dev/null @@ -1,260 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Beam } from '../src/beam.js'; -import { Dot } from '../src/dot.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Tuplet } from '../src/tuplet.js'; -import { Voice } from '../src/voice.js'; -const RestsTests = { - Start() { - QUnit.module('Rests'); - const run = VexFlowTests.runTests; - run('Outside Stave', ledgerRest); - run('Dotted', basic); - run('Auto Align - Beamed Notes Stems Up', beamsUp); - run('Auto Align - Beamed Notes Stems Down', beamsDown); - run('Auto Align - Tuplets Stems Up', tupletsUp); - run('Auto Align - Tuplets Stems Down', tupletsDown); - run('Auto Align - Single Voice (Default)', singleVoiceDefaultAlignment); - run('Auto Align - Single Voice (Align All)', singleVoiceAlignAll); - run('Auto Align - Multi Voice', multiVoice); - }, -}; -function setupContext(options, contextBuilder, width = 350, height = 150) { - const context = contextBuilder(options.elementId, width, height); - context.scale(0.9, 0.9); - context.font = '10pt Arial'; - const stave = new Stave(10, 30, width).addClef('treble').addTimeSignature('4/4').setContext(context).draw(); - return { context, stave }; -} -function basic(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 700); - const notes = [ - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '16r' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '32r' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '64r' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: '128r' }), - ]; - Dot.buildAndAttach(notes, { all: true }); - Formatter.FormatAndDraw(context, stave, notes); - ok(true, 'Dotted Rest Test'); -} -function ledgerRest(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 700); - const notes = [ - new StaveNote({ keys: ['a/5'], stem_direction: 1, duration: 'wr' }), - new StaveNote({ keys: ['c/6'], stem_direction: 1, duration: 'hr' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'hr' }), - new StaveNote({ keys: ['a/3'], stem_direction: 1, duration: 'wr' }), - new StaveNote({ keys: ['f/3'], stem_direction: 1, duration: 'hr' }), - new StaveNote({ keys: ['b/4'], stem_direction: 1, duration: 'wr' }), - ]; - Formatter.FormatAndDraw(context, stave, notes); - ok(true, 'Leger/Ledger Rest Test'); -} -const note = (noteStruct) => new StaveNote(noteStruct); -function beamsUp(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['e/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['c/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '8r' }), - note({ keys: ['c/4'], stem_direction: 1, duration: '8' }), - ]; - const beam1 = new Beam(notes.slice(0, 4)); - const beam2 = new Beam(notes.slice(4, 8)); - const beam3 = new Beam(notes.slice(8, 12)); - Formatter.FormatAndDraw(context, stave, notes); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - ok(true, 'Auto Align Rests - Beams Up Test'); -} -function beamsDown(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['c/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4', 'd/5', 'a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['e/4'], stem_direction: -1, duration: '8' }), - ]; - const beam1 = new Beam(notes.slice(0, 4)); - const beam2 = new Beam(notes.slice(4, 8)); - const beam3 = new Beam(notes.slice(8, 12)); - Formatter.FormatAndDraw(context, stave, notes); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - ok(true, 'Auto Align Rests - Beams Down Test'); -} -function tupletsUp(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - ]; - const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_TOP); - const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_TOP); - const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_TOP); - const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); - Formatter.FormatAndDraw(context, stave, notes); - tuplet1.setContext(context).draw(); - tuplet2.setContext(context).draw(); - tuplet3.setContext(context).draw(); - tuplet4.setContext(context).draw(); - ok(true, 'Auto Align Rests - Tuplets Stem Up Test'); -} -function tupletsDown(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - ]; - const beam1 = new Beam(notes.slice(0, 3)); - const beam2 = new Beam(notes.slice(3, 6)); - const beam3 = new Beam(notes.slice(6, 9)); - const beam4 = new Beam(notes.slice(9, 12)); - const tuplet1 = new Tuplet(notes.slice(0, 3)).setTupletLocation(Tuplet.LOCATION_BOTTOM); - const tuplet2 = new Tuplet(notes.slice(3, 6)).setTupletLocation(Tuplet.LOCATION_BOTTOM); - const tuplet3 = new Tuplet(notes.slice(6, 9)).setTupletLocation(Tuplet.LOCATION_BOTTOM); - const tuplet4 = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_BOTTOM); - Formatter.FormatAndDraw(context, stave, notes); - tuplet1.setContext(context).draw(); - tuplet2.setContext(context).draw(); - tuplet3.setContext(context).draw(); - tuplet4.setContext(context).draw(); - beam1.setContext(context).draw(); - beam2.setContext(context).draw(); - beam3.setContext(context).draw(); - beam4.setContext(context).draw(); - ok(true, 'Auto Align Rests - Tuplets Stem Down Test'); -} -function singleVoiceDefaultAlignment(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - ]; - const beam = new Beam(notes.slice(5, 9)); - const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); - Formatter.FormatAndDraw(context, stave, notes); - tuplet.setContext(context).draw(); - beam.setContext(context).draw(); - ok(true, 'Auto Align Rests - Default Test'); -} -function singleVoiceAlignAll(options, contextBuilder) { - const { context, stave } = setupContext(options, contextBuilder, 600, 160); - const notes = [ - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['f/4'], stem_direction: -1, duration: '4' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['a/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '8' }), - note({ keys: ['e/5'], stem_direction: -1, duration: '8' }), - note({ keys: ['a/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: 1, duration: '4r' }), - note({ keys: ['b/5'], stem_direction: 1, duration: '4' }), - note({ keys: ['d/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['g/5'], stem_direction: -1, duration: '4' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - note({ keys: ['b/4'], stem_direction: -1, duration: '4r' }), - ]; - const beam = new Beam(notes.slice(5, 9)); - const tuplet = new Tuplet(notes.slice(9, 12)).setTupletLocation(Tuplet.LOCATION_TOP); - Formatter.FormatAndDraw(context, stave, notes, { align_rests: true }); - tuplet.setContext(context).draw(); - beam.setContext(context).draw(); - ok(true, 'Auto Align Rests - Align All Test'); -} -function multiVoice(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - const stave = new Stave(50, 10, 500).addClef('treble').setContext(ctx).addTimeSignature('4/4').draw(); - const noteOnStave = (noteStruct) => new StaveNote(noteStruct).setStave(stave); - const notes1 = [ - noteOnStave({ keys: ['c/4', 'e/4', 'g/4'], duration: '4' }), - noteOnStave({ keys: ['b/4'], duration: '4r' }), - noteOnStave({ keys: ['c/4', 'd/4', 'a/4'], duration: '4' }), - noteOnStave({ keys: ['b/4'], duration: '4r' }), - ]; - const notes2 = [ - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['b/4'], stem_direction: -1, duration: '8r' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - noteOnStave({ keys: ['e/3'], stem_direction: -1, duration: '8' }), - ]; - const voice1 = new Voice(Flow.TIME4_4).addTickables(notes1); - const voice2 = new Voice(Flow.TIME4_4).addTickables(notes2); - new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave, { align_rests: true }); - const beam2_1 = new Beam(notes2.slice(0, 4)); - const beam2_2 = new Beam(notes2.slice(4, 8)); - voice2.draw(ctx); - voice1.draw(ctx); - beam2_1.setContext(ctx).draw(); - beam2_2.setContext(ctx).draw(); - ok(true, 'Strokes Test Multi Voice'); -} -VexFlowTests.register(RestsTests); -export { RestsTests }; diff --git a/build/esm/tests/rhythm_tests.js b/build/esm/tests/rhythm_tests.js deleted file mode 100644 index c2eca911de..0000000000 --- a/build/esm/tests/rhythm_tests.js +++ /dev/null @@ -1,357 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Annotation } from '../src/annotation.js'; -import { Beam } from '../src/beam.js'; -import { Formatter } from '../src/formatter.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -import { StaveNote } from '../src/stavenote.js'; -const RhythmTests = { - Start() { - QUnit.module('Rhythm'); - const run = VexFlowTests.runTests; - run('Rhythm Draw - slash notes', drawBasic); - run('Rhythm Draw - beamed slash notes', drawBeamedSlashNotes); - run('Rhythm Draw - beamed slash notes, some rests', drawSlashAndBeamAndRests); - run('Rhythm Draw - 16th note rhythm with scratches', drawSixtenthWithScratches); - run('Rhythm Draw - 32nd note rhythm with scratches', drawThirtySecondWithScratches); - }, -}; -function drawBasic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - const staveBar1 = new Stave(10, 30, 150); - staveBar1.setBegBarType(BarlineType.DOUBLE); - staveBar1.setEndBarType(BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('C'); - staveBar1.setContext(ctx).draw(); - const notesBar1 = [new StaveNote({ keys: ['b/4'], duration: '1s', stem_direction: -1 })]; - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 120); - staveBar2.setBegBarType(BarlineType.SINGLE); - staveBar2.setEndBarType(BarlineType.SINGLE); - staveBar2.setContext(ctx).draw(); - const notesBar2 = [ - new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), - new StaveNote({ keys: ['b/4'], duration: '2s', stem_direction: -1 }), - ]; - Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 170); - staveBar3.setContext(ctx).draw(); - const notesBar3 = [ - new StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '4s', - stem_direction: -1, - }), - ]; - Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); - const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 200); - staveBar4.setContext(ctx).draw(); - const notesBar4 = [ - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); - expect(0); -} -function drawBeamedSlashNotes(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - const staveBar1 = new Stave(10, 30, 300); - staveBar1.setBegBarType(BarlineType.DOUBLE); - staveBar1.setEndBarType(BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('C'); - staveBar1.setContext(ctx).draw(); - const notesBar1_part1 = [ - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - const notesBar1_part2 = [ - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - const beam1 = new Beam(notesBar1_part1); - const beam2 = new Beam(notesBar1_part2); - const notesBar1 = notesBar1_part1.concat(notesBar1_part2); - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - expect(0); -} -function drawSlashAndBeamAndRests(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - const staveBar1 = new Stave(10, 30, 300); - staveBar1.setBegBarType(BarlineType.DOUBLE); - staveBar1.setEndBarType(BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - const notesBar1_part1 = [ - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ keys: ['b/4'], duration: '8s', stem_direction: -1 }), - ]; - notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 2), 0); - const notesBar1_part2 = [ - new StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8r', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '8s', - stem_direction: -1, - }), - ]; - const beam1 = new Beam(notesBar1_part1); - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); - beam1.setContext(ctx).draw(); - const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 220); - staveBar2.setContext(ctx).draw(); - const notesBar2 = [ - new StaveNote({ - keys: ['b/4'], - duration: '1s', - stem_direction: -1, - }), - ]; - notesBar2[0].addModifier(new Annotation('F').setFont('Times', VexFlowTests.Font.size + 2), 0); - Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - expect(0); -} -function drawSixtenthWithScratches(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - const staveBar1 = new Stave(10, 30, 300); - staveBar1.setBegBarType(BarlineType.DOUBLE); - staveBar1.setEndBarType(BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - const notesBar1_part1 = [ - new StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16m', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - ]; - const notesBar1_part2 = [ - new StaveNote({ - keys: ['b/4'], - duration: '16m', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16r', - stem_direction: -1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '16s', - stem_direction: -1, - }), - ]; - notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); - const beam1 = new Beam(notesBar1_part1); - const beam2 = new Beam(notesBar1_part2); - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1.concat(notesBar1_part2)); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - expect(0); -} -function drawThirtySecondWithScratches(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - const staveBar1 = new Stave(10, 30, 300); - staveBar1.setBegBarType(BarlineType.DOUBLE); - staveBar1.setEndBarType(BarlineType.SINGLE); - staveBar1.addClef('treble'); - staveBar1.addTimeSignature('4/4'); - staveBar1.addKeySignature('F'); - staveBar1.setContext(ctx).draw(); - const notesBar1_part1 = [ - new StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32m', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32m', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32r', - stem_direction: 1, - }), - new StaveNote({ - keys: ['b/4'], - duration: '32s', - stem_direction: 1, - }), - ]; - notesBar1_part1[0].addModifier(new Annotation('C7').setFont('Times', VexFlowTests.Font.size + 3), 0); - const beam1 = new Beam(notesBar1_part1); - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1_part1); - beam1.setContext(ctx).draw(); - expect(0); -} -VexFlowTests.register(RhythmTests); -export { RhythmTests }; diff --git a/build/esm/tests/stave_tests.js b/build/esm/tests/stave_tests.js deleted file mode 100644 index 339c0e1019..0000000000 --- a/build/esm/tests/stave_tests.js +++ /dev/null @@ -1,560 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Beam } from '../src/beam.js'; -import { Clef } from '../src/clef.js'; -import { Formatter } from '../src/formatter.js'; -import { KeySignature } from '../src/keysignature.js'; -import { Modifier } from '../src/modifier.js'; -import { Stave } from '../src/stave.js'; -import { Barline, BarlineType } from '../src/stavebarline.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Repetition } from '../src/staverepetition.js'; -import { VoltaType } from '../src/stavevolta.js'; -import { TextJustification } from '../src/textnote.js'; -import { TimeSignature } from '../src/timesignature.js'; -const StaveTests = { - Start() { - QUnit.module('Stave'); - test('StaveModifiers SortByCategory', sortByCategory); - const run = VexFlowTests.runTests; - run('Stave Draw Test', draw); - run('Open Stave Draw Test', drawOpenStave); - run('Multiple Stave Barline Test', drawMultipleMeasures); - run('Multiple Stave Barline Test (14pt Section)', drawMultipleMeasures, { fontSize: 14 }); - run('Multiple Stave Repeats Test', drawRepeats); - run('Stave End Modifiers Test', drawEndModifiers); - run('Stave Repetition (CODA) Positioning', drawStaveRepetition, { yShift: 0 }); - run('Stave Repetition (CODA) Positioning (-20)', drawStaveRepetition, { yShift: -20 }); - run('Stave Repetition (CODA) Positioning (+10)', drawStaveRepetition, { yShift: +10 }); - run('Multiple Staves Volta Test', drawVolta); - run('Volta + Modifier Measure Test', drawVoltaModifier); - run('Tempo Test', drawTempo); - run('Single Line Configuration Test', configureSingleLine); - run('Batch Line Configuration Test', configureAllLines); - run('Stave Text Test', drawStaveText); - run('Multiple Line Stave Text Test', drawStaveTextMultiLine); - run('Factory API', factoryAPI); - }, -}; -function sortByCategory() { - const stave = new Stave(0, 0, 300); - const clef0 = new Clef('treble'); - const clef1 = new Clef('alto'); - const clef2 = new Clef('bass'); - const time0 = new TimeSignature('C'); - const time1 = new TimeSignature('C|'); - const time2 = new TimeSignature('9/8'); - const key0 = new KeySignature('G'); - const key1 = new KeySignature('F'); - const key2 = new KeySignature('D'); - const bar0 = new Barline(BarlineType.SINGLE); - const bar1 = new Barline(BarlineType.DOUBLE); - const bar2 = new Barline(BarlineType.NONE); - const order0 = { Barline: 0, Clef: 1, KeySignature: 2, TimeSignature: 3 }; - const order1 = { TimeSignature: 0, KeySignature: 1, Barline: 2, Clef: 3 }; - const sortAndCompare = (title, a, b, order) => { - stave.sortByCategory(a, order); - let isSame = true; - if (a.length !== b.length) - isSame = false; - for (let i = 0; i < a.length; ++i) { - if (a[i] !== b[i]) - isSame = false; - } - ok(isSame, title); - }; - sortAndCompare('Keep the original order 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [bar0, bar1, clef0, clef1, key0, key1, time0, time1], order0); - sortAndCompare('Keep the original order 2', [time0, time1, key0, key1, bar0, bar1, clef0, clef1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); - sortAndCompare('Sort and keep 1', [bar0, bar1, clef0, clef1, key0, key1, time0, time1], [time0, time1, key0, key1, bar0, bar1, clef0, clef1], order1); - sortAndCompare('Sort and keep 2', [bar0, clef0, key0, time0, key1, time1, clef1, bar1, time2, clef2, bar2, key2], [bar0, bar1, bar2, clef0, clef1, clef2, key0, key1, key2, time0, time1, time2], order0); - sortAndCompare('Sort and keep 3', [bar2, clef2, key2, time0, key0, time2, clef1, bar1, time1, clef0, bar0, key1], [time0, time2, time1, key2, key0, key1, bar2, bar1, bar0, clef2, clef1, clef0], order1); -} -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 150); - const stave = new Stave(10, 10, 300); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 100, 'getYForNote(0)'); - equal(stave.getYForLine(5), 100, 'getYForLine(5)'); - equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -function drawOpenStave(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 350); - let stave = new Stave(10, 10, 300, { left_bar: false }); - stave.setContext(ctx); - stave.draw(); - stave = new Stave(10, 150, 300, { right_bar: false }); - stave.setContext(ctx); - stave.draw(); - ok(true, 'all pass'); -} -function drawMultipleMeasures(options, contextBuilder) { - var _a, _b; - expect(0); - const ctx = contextBuilder(options.elementId, 550, 200); - const staveBar1 = new Stave(10, 50, 200); - staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); - staveBar1.setEndBarType(BarlineType.DOUBLE); - staveBar1.setSection('A', 0, 0, (_a = options.params) === null || _a === void 0 ? void 0 : _a.fontSize, false); - staveBar1.addClef('treble').setContext(ctx).draw(); - const notesBar1 = [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'qr' }), - new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 300); - staveBar2.setSection('B', 0, 0, (_b = options.params) === null || _b === void 0 ? void 0 : _b.fontSize); - staveBar2.setEndBarType(BarlineType.END); - staveBar2.setContext(ctx).draw(); - const notesBar2_part1 = [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - const notesBar2_part2 = [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - const beam1 = new Beam(notesBar2_part1); - const beam2 = new Beam(notesBar2_part2); - const notesBar2 = notesBar2_part1.concat(notesBar2_part2); - Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); -} -function drawRepeats(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 750, 120); - const staveBar1 = new Stave(10, 0, 250); - staveBar1.setBegBarType(BarlineType.REPEAT_BEGIN); - staveBar1.setEndBarType(BarlineType.REPEAT_END); - staveBar1.addClef('treble'); - staveBar1.addKeySignature('A'); - staveBar1.setContext(ctx).draw(); - const notesBar1 = [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'qr' }), - new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, staveBar1, notesBar1); - const staveBar2 = new Stave(staveBar1.getWidth() + staveBar1.getX(), staveBar1.getY(), 250); - staveBar2.setBegBarType(BarlineType.REPEAT_BEGIN); - staveBar2.setEndBarType(BarlineType.REPEAT_END); - staveBar2.setContext(ctx).draw(); - const notesBar2_part1 = [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - const notesBar2_part2 = [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]; - notesBar2_part2[0].addModifier(new Accidental('#'), 0); - notesBar2_part2[1].addModifier(new Accidental('#'), 0); - notesBar2_part2[3].addModifier(new Accidental('b'), 0); - const beam1 = new Beam(notesBar2_part1); - const beam2 = new Beam(notesBar2_part2); - const notesBar2 = notesBar2_part1.concat(notesBar2_part2); - Formatter.FormatAndDraw(ctx, staveBar2, notesBar2); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - const staveBar3 = new Stave(staveBar2.getWidth() + staveBar2.getX(), staveBar2.getY(), 50); - staveBar3.setContext(ctx).draw(); - const notesBar3 = [new StaveNote({ keys: ['d/5'], duration: 'wr' })]; - Formatter.FormatAndDraw(ctx, staveBar3, notesBar3); - const staveBar4 = new Stave(staveBar3.getWidth() + staveBar3.getX(), staveBar3.getY(), 250 - staveBar1.getModifierXShift()); - staveBar4.setBegBarType(BarlineType.REPEAT_BEGIN); - staveBar4.setEndBarType(BarlineType.REPEAT_END); - staveBar4.setContext(ctx).draw(); - const notesBar4 = [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'qr' }), - new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, staveBar4, notesBar4); -} -function drawEndModifiers(options, contextBuilder) { - expect(0); - const staveWidth = 230; - const blockHeight = 80; - let x = 10; - let y = 0; - const ctx = contextBuilder(options.elementId, 800, 700); - function drawStavesInTwoLines(endBarLine) { - function drawStave(x, y, width, begMods, endMods) { - const staveBar = new Stave(x, y, width - 10); - if (begMods) { - if (begMods.barLine !== undefined) { - staveBar.setBegBarType(begMods.barLine); - } - if (begMods.clef !== undefined) { - staveBar.addClef(begMods.clef); - } - if (begMods.keySig !== undefined) { - staveBar.addKeySignature(begMods.keySig); - } - if (begMods.timeSig !== undefined) { - staveBar.setTimeSignature(begMods.timeSig); - } - } - if (endMods) { - if (endMods.barLine !== undefined) { - staveBar.setEndBarType(endMods.barLine); - } - if (endMods.clef !== undefined) { - staveBar.addEndClef(endMods.clef); - } - if (endMods.keySig !== undefined) { - staveBar.setEndKeySignature(endMods.keySig); - } - if (endMods.timeSig !== undefined) { - staveBar.setEndTimeSignature(endMods.timeSig); - } - } - staveBar.setContext(ctx).draw(); - const notesBar = [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'qr' }), - new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, staveBar, notesBar); - } - drawStave(x, y, staveWidth + 50, { barLine: BarlineType.REPEAT_BEGIN, clef: 'treble', keySig: 'A' }, { barLine: endBarLine, clef: 'bass' }); - x += staveWidth + 50; - drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, keySig: 'E' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, timeSig: '2/4' }); - x += staveWidth; - x = 10; - y += blockHeight; - drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', timeSig: '2/4' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'treble', keySig: 'Ab' }); - x += staveWidth; - drawStave(x, y, staveWidth, { barLine: BarlineType.REPEAT_BEGIN }, { barLine: endBarLine, clef: 'bass', keySig: 'Ab', timeSig: '2/4' }); - x += staveWidth; - } - y = 0; - x = 10; - drawStavesInTwoLines(BarlineType.SINGLE); - y += blockHeight + 10; - x = 10; - drawStavesInTwoLines(BarlineType.DOUBLE); - y += blockHeight + 10; - x = 10; - drawStavesInTwoLines(BarlineType.REPEAT_END); - y += blockHeight + 10; - x = 10; - drawStavesInTwoLines(BarlineType.REPEAT_BOTH); -} -function drawStaveRepetition(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 725, 200); - const mm1 = new Stave(10, 50, 150); - mm1.addClef('treble'); - mm1.setRepetitionType(Repetition.type.DS_AL_FINE, options.params.yShift); - mm1.setMeasure(1); - mm1.setContext(ctx).draw(); - const notesmm1 = [ - new StaveNote({ keys: ['a/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, mm1, notesmm1); - const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 150); - mm2.setRepetitionType(Repetition.type.TO_CODA, options.params.yShift); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [ - new StaveNote({ keys: ['a/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, mm2, notesmm2); - const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 150); - mm3.setRepetitionType(Repetition.type.DS_AL_CODA, options.params.yShift); - mm3.setMeasure(3); - mm3.setContext(ctx).draw(); - const notesmm3 = [ - new StaveNote({ keys: ['a/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, mm3, notesmm3); - const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 150); - mm4.setRepetitionType(Repetition.type.CODA_LEFT, options.params.yShift); - mm4.setMeasure(4); - mm4.setContext(ctx).draw(); - const notesmm4 = [ - new StaveNote({ keys: ['a/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['f/4'], duration: 'q' }), - new StaveNote({ keys: ['a/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, mm4, notesmm4); -} -function drawVolta(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 725, 200); - const mm1 = new Stave(10, 50, 125); - mm1.setBegBarType(BarlineType.REPEAT_BEGIN); - mm1.setRepetitionType(Repetition.type.SEGNO_LEFT); - mm1.addClef('treble'); - mm1.addKeySignature('A'); - mm1.setMeasure(1); - mm1.setSection('A', 0); - mm1.setContext(ctx).draw(); - const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm1, notesmm1); - const mm2 = new Stave(mm1.getWidth() + mm1.getX(), mm1.getY(), 60); - mm2.setRepetitionType(Repetition.type.CODA_RIGHT); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [new StaveNote({ keys: ['d/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm2, notesmm2); - const mm3 = new Stave(mm2.getWidth() + mm2.getX(), mm1.getY(), 60); - mm3.setVoltaType(VoltaType.BEGIN, '1.', -5); - mm3.setMeasure(3); - mm3.setContext(ctx).draw(); - const notesmm3 = [new StaveNote({ keys: ['e/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm3, notesmm3); - const mm4 = new Stave(mm3.getWidth() + mm3.getX(), mm1.getY(), 60); - mm4.setVoltaType(VoltaType.MID, '', -5); - mm4.setMeasure(4); - mm4.setContext(ctx).draw(); - const notesmm4 = [new StaveNote({ keys: ['f/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm4, notesmm4); - const mm5 = new Stave(mm4.getWidth() + mm4.getX(), mm1.getY(), 60); - mm5.setEndBarType(BarlineType.REPEAT_END); - mm5.setVoltaType(VoltaType.END, '', -5); - mm5.setMeasure(5); - mm5.setContext(ctx).draw(); - const notesmm5 = [new StaveNote({ keys: ['g/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm5, notesmm5); - const mm6 = new Stave(mm5.getWidth() + mm5.getX(), mm1.getY(), 60); - mm6.setVoltaType(VoltaType.BEGIN_END, '2.', -5); - mm6.setEndBarType(BarlineType.DOUBLE); - mm6.setMeasure(6); - mm6.setContext(ctx).draw(); - const notesmm6 = [new StaveNote({ keys: ['a/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm6, notesmm6); - const mm7 = new Stave(mm6.getWidth() + mm6.getX(), mm1.getY(), 60); - mm7.setMeasure(7); - mm7.setSection('B', 0); - mm7.setContext(ctx).draw(); - const notesmm7 = [new StaveNote({ keys: ['b/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm7, notesmm7); - const mm8 = new Stave(mm7.getWidth() + mm7.getX(), mm1.getY(), 60); - mm8.setEndBarType(BarlineType.DOUBLE); - mm8.setRepetitionType(Repetition.type.DS_AL_CODA); - mm8.setMeasure(8); - mm8.setContext(ctx).draw(); - const notesmm8 = [new StaveNote({ keys: ['c/5'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm8, notesmm8); - const mm9 = new Stave(mm8.getWidth() + mm8.getX() + 20, mm1.getY(), 125); - mm9.setEndBarType(BarlineType.END); - mm9.setRepetitionType(Repetition.type.CODA_LEFT); - mm9.addClef('treble'); - mm9.addKeySignature('A'); - mm9.setMeasure(9); - mm9.setContext(ctx).draw(); - const notesmm9 = [new StaveNote({ keys: ['d/5'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm9, notesmm9); -} -function drawVoltaModifier(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 1100, 200); - const mm1 = new Stave(10, 50, 175); - mm1.setBegBarType(BarlineType.REPEAT_BEGIN); - mm1.setVoltaType(VoltaType.BEGIN_END, '1.', -5); - mm1.addClef('treble'); - mm1.addKeySignature('A'); - mm1.setMeasure(1); - mm1.setSection('A', 0); - mm1.setContext(ctx).draw(); - const notesmm1 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm1, notesmm1); - const mm2 = new Stave(mm1.getX() + mm1.getWidth(), mm1.getY(), 175); - mm2.setBegBarType(BarlineType.REPEAT_BEGIN); - mm2.setRepetitionType(Repetition.type.DS); - mm2.setVoltaType(VoltaType.BEGIN, '2.', -5); - mm2.addClef('treble'); - mm2.addKeySignature('A'); - mm2.setMeasure(2); - mm2.setContext(ctx).draw(); - const notesmm2 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm2, notesmm2); - const mm3 = new Stave(mm2.getX() + mm2.getWidth(), mm2.getY(), 175); - mm3.setVoltaType(VoltaType.MID, '', -5); - mm3.setRepetitionType(Repetition.type.DS); - mm3.addClef('treble'); - mm3.addKeySignature('B'); - mm3.setMeasure(3); - mm3.setSection('B', 0); - mm3.setContext(ctx).draw(); - const notesmm3 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm3, notesmm3); - const mm4 = new Stave(mm3.getX() + mm3.getWidth(), mm3.getY(), 175); - mm4.setVoltaType(VoltaType.END, '1.', -5); - mm4.setRepetitionType(Repetition.type.DS); - mm4.addClef('treble'); - mm4.addKeySignature('A'); - mm4.setMeasure(4); - mm4.setSection('C', 0); - mm4.setContext(ctx).draw(); - const notesmm4 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm4, notesmm4); - const mm5 = new Stave(mm4.getX() + mm4.getWidth(), mm4.getY(), 175); - mm5.setEndBarType(BarlineType.DOUBLE); - mm5.setRepetitionType(Repetition.type.DS); - mm5.addClef('treble'); - mm5.addKeySignature('A'); - mm5.setMeasure(5); - mm5.setSection('D', 0); - mm5.setContext(ctx).draw(); - const notesmm5 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm5, notesmm5); - const mm6 = new Stave(mm5.getX() + mm5.getWidth(), mm5.getY(), 175); - mm6.setRepetitionType(Repetition.type.DS); - mm6.setMeasure(6); - mm6.setSection('E', 0); - mm6.setContext(ctx).draw(); - const notesmm6 = [new StaveNote({ keys: ['c/4'], duration: 'w' })]; - Formatter.FormatAndDraw(ctx, mm6, notesmm6); -} -function drawTempo(options, contextBuilder) { - expect(0); - const ctx = contextBuilder(options.elementId, 725, 350); - const padding = 10; - let x = 0; - let y = 50; - function drawTempoStaveBar(width, tempo, tempo_y, notes) { - const staveBar = new Stave(padding + x, y, width); - if (x === 0) - staveBar.addClef('treble'); - staveBar.setTempo(tempo, tempo_y); - staveBar.setContext(ctx).draw(); - const notesBar = notes || [ - new StaveNote({ keys: ['c/4'], duration: 'q' }), - new StaveNote({ keys: ['d/4'], duration: 'q' }), - new StaveNote({ keys: ['b/4'], duration: 'q' }), - new StaveNote({ keys: ['c/4'], duration: 'q' }), - ]; - Formatter.FormatAndDraw(ctx, staveBar, notesBar); - x += width; - } - drawTempoStaveBar(120, { duration: 'q', dots: 1, bpm: 80 }, 0); - drawTempoStaveBar(100, { duration: '8', dots: 2, bpm: 90 }, 0); - drawTempoStaveBar(100, { duration: '16', dots: 1, bpm: 96 }, 0); - drawTempoStaveBar(100, { duration: '32', bpm: 70 }, 0); - drawTempoStaveBar(250, { name: 'Andante', bpm: 120 }, -20, [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/5'], duration: '8' }), - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]); - x = 0; - y += 150; - drawTempoStaveBar(120, { duration: 'w', bpm: 80 }, 0); - drawTempoStaveBar(100, { duration: 'h', bpm: 90 }, 0); - drawTempoStaveBar(100, { duration: 'q', bpm: 96 }, 0); - drawTempoStaveBar(100, { duration: '8', bpm: 70 }, 0); - drawTempoStaveBar(250, { name: 'Andante grazioso' }, 0, [ - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - new StaveNote({ keys: ['c/4'], duration: '8' }), - new StaveNote({ keys: ['d/4'], duration: '8' }), - new StaveNote({ keys: ['g/4'], duration: '8' }), - new StaveNote({ keys: ['e/4'], duration: '8' }), - ]); -} -function configureSingleLine(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new Stave(10, 10, 300); - stave - .setConfigForLine(0, { visible: true }) - .setConfigForLine(1, { visible: false }) - .setConfigForLine(2, { visible: true }) - .setConfigForLine(3, { visible: false }) - .setConfigForLine(4, { visible: true }); - stave.setContext(ctx).draw(); - const config = stave.getConfigForLines(); - equal(config[0].visible, true, 'getLinesConfiguration() - Line 0'); - equal(config[1].visible, false, 'getLinesConfiguration() - Line 1'); - equal(config[2].visible, true, 'getLinesConfiguration() - Line 2'); - equal(config[3].visible, false, 'getLinesConfiguration() - Line 3'); - equal(config[4].visible, true, 'getLinesConfiguration() - Line 4'); - ok(true, 'all pass'); -} -function configureAllLines(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new Stave(10, 10, 300); - stave - .setConfigForLines([{ visible: false }, {}, { visible: false }, { visible: true }, { visible: false }]) - .setContext(ctx) - .draw(); - const config = stave.getConfigForLines(); - equal(config[0].visible, false, 'getLinesConfiguration() - Line 0'); - equal(config[1].visible, true, 'getLinesConfiguration() - Line 1'); - equal(config[2].visible, false, 'getLinesConfiguration() - Line 2'); - equal(config[3].visible, true, 'getLinesConfiguration() - Line 3'); - equal(config[4].visible, false, 'getLinesConfiguration() - Line 4'); - ok(true, 'all pass'); -} -function drawStaveText(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 900, 140); - const stave = new Stave(300, 10, 300); - stave.setText('Violin', Modifier.Position.LEFT); - stave.setText('Right Text', Modifier.Position.RIGHT); - stave.setText('Above Text', Modifier.Position.ABOVE); - stave.setText('Below Text', Modifier.Position.BELOW); - stave.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function drawStaveTextMultiLine(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 900, 200); - const stave = new Stave(300, 40, 300); - stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); - stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); - stave.setText('Right Text', Modifier.Position.RIGHT, { shift_y: -10 }); - stave.setText('2nd line', Modifier.Position.RIGHT, { shift_y: 10 }); - stave.setText('Above Text', Modifier.Position.ABOVE, { shift_y: -10 }); - stave.setText('2nd line', Modifier.Position.ABOVE, { shift_y: 10 }); - stave.setText('Left Below Text', Modifier.Position.BELOW, { shift_y: -10, justification: TextJustification.LEFT }); - stave.setText('Right Below Text', Modifier.Position.BELOW, { shift_y: 10, justification: TextJustification.RIGHT }); - stave.setContext(ctx).draw(); - ok(true, 'all pass'); -} -function factoryAPI(options) { - const f = VexFlowTests.makeFactory(options, 900, 200); - const stave = f.Stave({ x: 300, y: 40, width: 300 }); - stave.setText('Violin', Modifier.Position.LEFT, { shift_y: -10 }); - stave.setText('2nd line', Modifier.Position.LEFT, { shift_y: 10 }); - f.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(StaveTests); -export { StaveTests }; diff --git a/build/esm/tests/staveconnector_tests.js b/build/esm/tests/staveconnector_tests.js deleted file mode 100644 index 76fb9b7e38..0000000000 --- a/build/esm/tests/staveconnector_tests.js +++ /dev/null @@ -1,402 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Modifier } from '../src/modifier.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -import { StaveConnector } from '../src/staveconnector.js'; -const StaveConnectorTests = { - Start() { - QUnit.module('StaveConnector'); - const run = VexFlowTests.runTests; - run('Single Draw Test', drawSingle); - run('Single Draw Test, 4px Stave Line Thickness', drawSingle4pxStaveLines); - run('Single Both Sides Test', drawSingleBoth); - run('Double Draw Test', drawDouble); - run('Bold Double Line Left Draw Test', drawRepeatBegin); - run('Bold Double Line Right Draw Test', drawRepeatEnd); - run('Thin Double Line Right Draw Test', drawThinDouble); - run('Bold Double Lines Overlapping Draw Test', drawRepeatAdjacent); - run('Bold Double Lines Offset Draw Test', drawRepeatOffset); - run('Bold Double Lines Offset Draw Test 2', drawRepeatOffset2); - run('Brace Draw Test', drawBrace); - run('Brace Wide Draw Test', drawBraceWide); - run('Bracket Draw Test', drawBracket); - run('Combined Draw Test', drawCombined); - }, -}; -function drawSingle(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - ok(true, 'all pass'); -} -function drawSingle4pxStaveLines(options, contextBuilder) { - const oldThickness = Flow.STAVE_LINE_THICKNESS; - Flow.STAVE_LINE_THICKNESS = 4; - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - Flow.STAVE_LINE_THICKNESS = oldThickness; - ok(true, 'all pass'); -} -function drawSingleBoth(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector1 = new StaveConnector(stave1, stave2); - connector1.setType(StaveConnector.type.SINGLE_LEFT); - connector1.setContext(ctx); - const connector2 = new StaveConnector(stave1, stave2); - connector2.setType(StaveConnector.type.SINGLE_RIGHT); - connector2.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector1.draw(); - connector2.draw(); - ok(true, 'all pass'); -} -function drawDouble(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - const line = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.DOUBLE); - connector.setContext(ctx); - line.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBrace(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 450, 300); - const stave1 = new Stave(100, 10, 300); - const stave2 = new Stave(100, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - const line = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.BRACE); - connector.setContext(ctx); - connector.setText('Piano'); - line.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBraceWide(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, -20, 300); - const stave2 = new Stave(25, 200, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - const line = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.BRACE); - connector.setContext(ctx); - line.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawBracket(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - const connector = new StaveConnector(stave1, stave2); - const line = new StaveConnector(stave1, stave2); - connector.setType(StaveConnector.type.BRACKET); - connector.setContext(ctx); - line.setType(StaveConnector.type.SINGLE); - connector.setContext(ctx); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - connector.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatBegin(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setBegBarType(BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(BarlineType.REPEAT_BEGIN); - const line = new StaveConnector(stave1, stave2); - line.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatEnd(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setEndBarType(BarlineType.REPEAT_END); - stave2.setEndBarType(BarlineType.REPEAT_END); - const line = new StaveConnector(stave1, stave2); - line.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawThinDouble(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 300); - const stave2 = new Stave(25, 120, 300); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave1.setEndBarType(BarlineType.DOUBLE); - stave2.setEndBarType(BarlineType.DOUBLE); - const line = new StaveConnector(stave1, stave2); - line.setType(StaveConnector.type.THIN_DOUBLE); - line.setContext(ctx); - stave1.draw(); - stave2.draw(); - line.draw(); - ok(true, 'all pass'); -} -function drawRepeatAdjacent(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 150); - const stave2 = new Stave(25, 120, 150); - const stave3 = new Stave(175, 10, 150); - const stave4 = new Stave(175, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.setEndBarType(BarlineType.REPEAT_END); - stave2.setEndBarType(BarlineType.REPEAT_END); - stave3.setEndBarType(BarlineType.END); - stave4.setEndBarType(BarlineType.END); - stave1.setBegBarType(BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(BarlineType.REPEAT_BEGIN); - const connector1 = new StaveConnector(stave1, stave2); - const connector2 = new StaveConnector(stave1, stave2); - const connector3 = new StaveConnector(stave3, stave4); - const connector4 = new StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - ok(true, 'all pass'); -} -function drawRepeatOffset2(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 150); - const stave2 = new Stave(25, 120, 150); - const stave3 = new Stave(175, 10, 150); - const stave4 = new Stave(175, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.addClef('treble'); - stave2.addClef('bass'); - stave3.addClef('alto'); - stave4.addClef('treble'); - stave1.addTimeSignature('4/4'); - stave2.addTimeSignature('4/4'); - stave3.addTimeSignature('6/8'); - stave4.addTimeSignature('6/8'); - stave1.setEndBarType(BarlineType.REPEAT_END); - stave2.setEndBarType(BarlineType.REPEAT_END); - stave3.setEndBarType(BarlineType.END); - stave4.setEndBarType(BarlineType.END); - stave1.setBegBarType(BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(BarlineType.REPEAT_BEGIN); - const connector1 = new StaveConnector(stave1, stave2); - const connector2 = new StaveConnector(stave1, stave2); - const connector3 = new StaveConnector(stave3, stave4); - const connector4 = new StaveConnector(stave3, stave4); - const connector5 = new StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector5.setContext(ctx); - connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector5.setType(StaveConnector.type.SINGLE_LEFT); - connector1.setXShift(stave1.getModifierXShift()); - connector3.setXShift(stave3.getModifierXShift()); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - connector5.draw(); - ok(true, 'all pass'); -} -function drawRepeatOffset(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 300); - const stave1 = new Stave(25, 10, 150); - const stave2 = new Stave(25, 120, 150); - const stave3 = new Stave(185, 10, 150); - const stave4 = new Stave(185, 120, 150); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave1.addClef('bass'); - stave2.addClef('alto'); - stave3.addClef('treble'); - stave4.addClef('tenor'); - stave3.addKeySignature('Ab'); - stave4.addKeySignature('Ab'); - stave1.addTimeSignature('4/4'); - stave2.addTimeSignature('4/4'); - stave3.addTimeSignature('6/8'); - stave4.addTimeSignature('6/8'); - stave1.setEndBarType(BarlineType.REPEAT_END); - stave2.setEndBarType(BarlineType.REPEAT_END); - stave3.setEndBarType(BarlineType.END); - stave4.setEndBarType(BarlineType.END); - stave1.setBegBarType(BarlineType.REPEAT_BEGIN); - stave2.setBegBarType(BarlineType.REPEAT_BEGIN); - stave3.setBegBarType(BarlineType.REPEAT_BEGIN); - stave4.setBegBarType(BarlineType.REPEAT_BEGIN); - const connector1 = new StaveConnector(stave1, stave2); - const connector2 = new StaveConnector(stave1, stave2); - const connector3 = new StaveConnector(stave3, stave4); - const connector4 = new StaveConnector(stave3, stave4); - const connector5 = new StaveConnector(stave3, stave4); - connector1.setContext(ctx); - connector2.setContext(ctx); - connector3.setContext(ctx); - connector4.setContext(ctx); - connector5.setContext(ctx); - connector1.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector2.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector3.setType(StaveConnector.type.BOLD_DOUBLE_LEFT); - connector4.setType(StaveConnector.type.BOLD_DOUBLE_RIGHT); - connector5.setType(StaveConnector.type.SINGLE_LEFT); - connector1.setXShift(stave1.getModifierXShift()); - connector3.setXShift(stave3.getModifierXShift()); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - connector1.draw(); - connector2.draw(); - connector3.draw(); - connector4.draw(); - connector5.draw(); - ok(true, 'all pass'); -} -function drawCombined(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 700); - const stave1 = new Stave(150, 10, 300); - const stave2 = new Stave(150, 100, 300); - const stave3 = new Stave(150, 190, 300); - const stave4 = new Stave(150, 280, 300); - const stave5 = new Stave(150, 370, 300); - const stave6 = new Stave(150, 460, 300); - const stave7 = new Stave(150, 560, 300); - stave1.setText('Violin', Modifier.Position.LEFT); - stave1.setContext(ctx); - stave2.setContext(ctx); - stave3.setContext(ctx); - stave4.setContext(ctx); - stave5.setContext(ctx); - stave6.setContext(ctx); - stave7.setContext(ctx); - const conn_single = new StaveConnector(stave1, stave7); - const conn_double = new StaveConnector(stave2, stave3); - const conn_bracket = new StaveConnector(stave4, stave7); - const conn_none = new StaveConnector(stave4, stave5); - const conn_brace = new StaveConnector(stave6, stave7); - conn_single.setType(StaveConnector.type.SINGLE); - conn_double.setType(StaveConnector.type.DOUBLE); - conn_bracket.setType(StaveConnector.type.BRACKET); - conn_brace.setType(StaveConnector.type.BRACE); - conn_brace.setXShift(-5); - conn_double.setText('Piano'); - conn_none.setText('Multiple', { shift_y: -15 }); - conn_none.setText('Line Text', { shift_y: 15 }); - conn_brace.setText('Harpsichord'); - conn_single.setContext(ctx); - conn_double.setContext(ctx); - conn_bracket.setContext(ctx); - conn_none.setContext(ctx); - conn_brace.setContext(ctx); - stave1.draw(); - stave2.draw(); - stave3.draw(); - stave4.draw(); - stave5.draw(); - stave6.draw(); - stave7.draw(); - conn_single.draw(); - conn_double.draw(); - conn_bracket.draw(); - conn_none.draw(); - conn_brace.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(StaveConnectorTests); -export { StaveConnectorTests }; diff --git a/build/esm/tests/stavehairpin_tests.js b/build/esm/tests/stavehairpin_tests.js deleted file mode 100644 index b176dec5fe..0000000000 --- a/build/esm/tests/stavehairpin_tests.js +++ /dev/null @@ -1,90 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { StaveHairpin } from '../src/stavehairpin.js'; -const StaveHairpinTests = { - Start() { - QUnit.module('StaveHairpin'); - const run = VexFlowTests.runTests; - run('Simple StaveHairpin', simple); - run('Horizontal Offset StaveHairpin', horizontal); - run('Vertical Offset StaveHairpin', vertical); - run('Height StaveHairpin', height); - }, -}; -function drawHairpin(first_note, last_note, ctx, type, position, options) { - const hairpin = new StaveHairpin({ first_note, last_note }, type); - hairpin.setContext(ctx); - hairpin.setPosition(position); - if (options) { - hairpin.setRenderOptions(options); - } - hairpin.draw(); -} -function createTest(drawTwoHairpins) { - return (options) => { - const factory = VexFlowTests.makeFactory(options); - const ctx = factory.getContext(); - const stave = factory.Stave(); - const notes = [ - factory - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(factory.Accidental({ type: 'b' }), 0) - .addModifier(factory.Accidental({ type: '#' }), 1), - factory.StaveNote({ keys: ['d/4'], stem_direction: 1, duration: '4' }), - factory.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), - factory.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '4' }), - ]; - const voice = factory.Voice().addTickables(notes); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - drawTwoHairpins(ctx, notes); - ok(true, 'Simple Test'); - }; -} -const simple = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4); - drawHairpin(notes[1], notes[3], ctx, 2, 3); -}); -const horizontal = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 3, { - height: 10, - vo: 20, - left_ho: 20, - right_ho: -20, - }); - drawHairpin(notes[3], notes[3], ctx, 2, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 120, - }); -}); -const vertical = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, - }); - drawHairpin(notes[2], notes[3], ctx, 2, 4, { - height: 10, - y_shift: -15, - left_shift_px: 2, - right_shift_px: 0, - }); -}); -const height = createTest((ctx, notes) => { - drawHairpin(notes[0], notes[2], ctx, 1, 4, { - height: 10, - y_shift: 0, - left_shift_px: 0, - right_shift_px: 0, - }); - drawHairpin(notes[2], notes[3], ctx, 2, 4, { - height: 15, - y_shift: 0, - left_shift_px: 2, - right_shift_px: 0, - }); -}); -VexFlowTests.register(StaveHairpinTests); -export { StaveHairpinTests }; diff --git a/build/esm/tests/staveline_tests.js b/build/esm/tests/staveline_tests.js deleted file mode 100644 index 2534aad5cd..0000000000 --- a/build/esm/tests/staveline_tests.js +++ /dev/null @@ -1,122 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Dot } from '../src/dot.js'; -import { Font, FontStyle } from '../src/font.js'; -const StaveLineTests = { - Start() { - QUnit.module('StaveLine'); - const run = VexFlowTests.runTests; - run('Simple StaveLine', simple0); - run('StaveLine Arrow Options', simple1); - }, -}; -function simple0(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['c/5'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['c/4', 'g/4', 'b/4'], duration: '4', clef: 'treble' }), - f.StaveNote({ keys: ['f/4', 'a/4', 'f/5'], duration: '4', clef: 'treble' }), - ]; - const voice = f.Voice().addTickables(notes); - f.StaveLine({ - from: notes[0], - to: notes[1], - first_indices: [0], - last_indices: [0], - options: { - font: { family: Font.SERIF, size: 12, style: FontStyle.ITALIC }, - text: 'gliss.', - }, - }); - const staveLine2 = f.StaveLine({ - from: notes[2], - to: notes[3], - first_indices: [2, 1, 0], - last_indices: [0, 1, 2], - }); - staveLine2.render_options.line_dash = [10, 10]; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function simple1(options) { - const f = VexFlowTests.makeFactory(options, 770); - const stave = f.Stave().addClef('treble'); - const notes = [ - f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', clef: 'treble' }), - f - .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) - .addModifier(f.Accidental({ type: '#' }), 2), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }).addModifier(f.Accidental({ type: '#' }), 0), - f.StaveNote({ keys: ['c#/5', 'd/5'], duration: '4', clef: 'treble', stem_direction: -1 }), - f.StaveNote({ keys: ['c/4', 'd/4', 'g/4'], duration: '4', clef: 'treble' }), - f - .StaveNote({ keys: ['f/4', 'a/4', 'c/5'], duration: '4', clef: 'treble' }) - .addModifier(f.Accidental({ type: '#' }), 2), - ]; - Dot.buildAndAttach([notes[0]], { all: true }); - const voice = f.Voice().setStrict(false).addTickables(notes); - const staveLine0 = f.StaveLine({ - from: notes[0], - to: notes[1], - first_indices: [0], - last_indices: [0], - options: { text: 'Left' }, - }); - const staveLine4 = f.StaveLine({ - from: notes[2], - to: notes[3], - first_indices: [1], - last_indices: [1], - options: { text: 'Right' }, - }); - const staveLine1 = f.StaveLine({ - from: notes[4], - to: notes[5], - first_indices: [0], - last_indices: [0], - options: { text: 'Center' }, - }); - const staveLine2 = f.StaveLine({ - from: notes[6], - to: notes[7], - first_indices: [1], - last_indices: [0], - }); - const staveLine3 = f.StaveLine({ - from: notes[6], - to: notes[7], - first_indices: [2], - last_indices: [2], - options: { text: 'Top' }, - }); - staveLine0.render_options.draw_end_arrow = true; - staveLine0.render_options.text_justification = 1; - staveLine0.render_options.text_position_vertical = 2; - staveLine1.render_options.draw_end_arrow = true; - staveLine1.render_options.arrowhead_length = 30; - staveLine1.render_options.line_width = 5; - staveLine1.render_options.text_justification = 2; - staveLine1.render_options.text_position_vertical = 2; - staveLine4.render_options.line_width = 2; - staveLine4.render_options.draw_end_arrow = true; - staveLine4.render_options.draw_start_arrow = true; - staveLine4.render_options.arrowhead_angle = 0.5; - staveLine4.render_options.arrowhead_length = 20; - staveLine4.render_options.text_justification = 3; - staveLine4.render_options.text_position_vertical = 2; - staveLine2.render_options.draw_start_arrow = true; - staveLine2.render_options.line_dash = [5, 4]; - staveLine3.render_options.draw_end_arrow = true; - staveLine3.render_options.draw_start_arrow = true; - staveLine3.render_options.color = 'red'; - staveLine3.render_options.text_position_vertical = 1; - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -VexFlowTests.register(StaveLineTests); -export { StaveLineTests }; diff --git a/build/esm/tests/stavemodifier_tests.js b/build/esm/tests/stavemodifier_tests.js deleted file mode 100644 index 89e4619003..0000000000 --- a/build/esm/tests/stavemodifier_tests.js +++ /dev/null @@ -1,51 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -import { StaveModifierPosition } from '../src/stavemodifier.js'; -const StaveModifierTests = { - Start() { - QUnit.module('StaveModifier'); - const run = VexFlowTests.runTests; - run('Stave Draw Test', draw); - run('Begin & End StaveModifier Test', drawBeginAndEnd); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - const stave = new Stave(10, 10, 300); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 100, 'getYForNote(0)'); - equal(stave.getYForLine(5), 100, 'getYForLine(5)'); - equal(stave.getYForLine(0), 50, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 90, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -function drawBeginAndEnd(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - const stave = new Stave(10, 10, 400); - stave.setContext(ctx); - stave.setTimeSignature('C|'); - stave.setKeySignature('Db'); - stave.setClef('treble'); - stave.setBegBarType(BarlineType.REPEAT_BEGIN); - stave.setEndClef('alto'); - stave.setEndTimeSignature('9/8'); - stave.setEndKeySignature('G', 'C#'); - stave.setEndBarType(BarlineType.DOUBLE); - stave.draw(); - const END = StaveModifierPosition.END; - stave.setY(100); - stave.setTimeSignature('3/4'); - stave.setKeySignature('G', 'C#'); - stave.setClef('bass'); - stave.setBegBarType(BarlineType.SINGLE); - stave.setClef('treble', undefined, undefined, END); - stave.setTimeSignature('C', undefined, END); - stave.setKeySignature('F', undefined, END); - stave.setEndBarType(BarlineType.SINGLE); - stave.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(StaveModifierTests); -export { StaveModifierTests }; diff --git a/build/esm/tests/stavenote_tests.js b/build/esm/tests/stavenote_tests.js deleted file mode 100644 index 3123117bf2..0000000000 --- a/build/esm/tests/stavenote_tests.js +++ /dev/null @@ -1,928 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental } from '../src/accidental.js'; -import { Annotation, AnnotationVerticalJustify } from '../src/annotation.js'; -import { Articulation } from '../src/articulation.js'; -import { Beam } from '../src/beam.js'; -import { Dot } from '../src/dot.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { Fraction } from '../src/fraction.js'; -import { FretHandFinger } from '../src/frethandfinger.js'; -import { Modifier } from '../src/modifier.js'; -import { ModifierContext } from '../src/modifiercontext.js'; -import { Stave } from '../src/stave.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Stem } from '../src/stem.js'; -import { StringNumber } from '../src/stringnumber.js'; -import { Stroke } from '../src/strokes.js'; -import { TickContext } from '../src/tickcontext.js'; -const StaveNoteTests = { - Start() { - QUnit.module('StaveNote'); - test('Tick', ticks); - test('Tick - New API', ticksNewAPI); - test('Stem', stem); - test('Automatic Stem Direction', autoStem); - test('Stem Extension Pitch', stemExtensionPitch); - test('Displacement after calling setStemDirection', setStemDirectionDisplacement); - test('StaveLine', staveLine); - test('Width', width); - test('TickContext', tickContext); - const run = VexFlowTests.runTests; - run('StaveNote Draw - Treble', drawBasic, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); - run('StaveNote BoundingBoxes - Treble', drawBoundingBoxes, { clef: 'treble', octaveShift: 0, restKey: 'r/4' }); - run('StaveNote Draw - Alto', drawBasic, { clef: 'alto', octaveShift: -1, restKey: 'r/4' }); - run('StaveNote Draw - Tenor', drawBasic, { clef: 'tenor', octaveShift: -1, restKey: 'r/3' }); - run('StaveNote Draw - Bass', drawBasic, { clef: 'bass', octaveShift: -2, restKey: 'r/3' }); - run('StaveNote Draw - Harmonic And Muted', drawHarmonicAndMuted); - run('StaveNote Draw - Slash', drawSlash); - run('Displacements', displacements); - run('StaveNote Draw - Bass 2', drawBass); - run('StaveNote Draw - Key Styles', drawKeyStyles); - run('StaveNote Draw - StaveNote Stem Styles', drawNoteStemStyles); - run('StaveNote Draw - StaveNote Stem Lengths', drawNoteStemLengths); - run('StaveNote Draw - StaveNote Flag Styles', drawNoteStylesWithFlag); - run('StaveNote Draw - StaveNote Styles', drawNoteStyles); - run('Stave, Ledger Line, Beam, Stem and Flag Styles', drawBeamStyles); - run('Flag and Dot Placement - Stem Up', dotsAndFlagsStemUp); - run('Flag and Dots Placement - Stem Down', dotsAndFlagsStemDown); - run('Beam and Dot Placement - Stem Up', dotsAndBeamsUp); - run('Beam and Dot Placement - Stem Down', dotsAndBeamsDown); - run('No Padding', noPadding); - run('Note Heads Placement - Simple', noteHeadsSimple); - run('Note Heads Placement - Hidden Notes', noteHeadsHidden); - run('Center Aligned Note', centerAlignedRest); - run('Center Aligned Note with Articulation', centerAlignedRestFermata); - run('Center Aligned Note with Annotation', centerAlignedRestAnnotation); - run('Center Aligned Note - Multi Voice', centerAlignedMultiVoice); - run('Center Aligned Note with Multiple Modifiers', centerAlignedNoteMultiModifiers); - VexFlowTests.runSVGTest('Interactive Mouseover StaveNote', drawBasic, { - clef: 'treble', - octaveShift: 0, - restKey: 'r/4', - ui: true, - }); - }, -}; -const staveNote = (struct) => new StaveNote(struct); -function draw(note, stave, context, x, drawBoundingBox = false, addModifierContext = true) { - note.setStave(stave); - if (addModifierContext) { - note.addToModifierContext(new ModifierContext()); - } - new TickContext().addTickable(note).preFormat().setX(x); - note.setContext(context).draw(); - if (drawBoundingBox) { - const bb = note.getBoundingBox(); - context.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - context.stroke(); - } - return note; -} -function ticks() { - const BEAT = (1 * Flow.RESOLUTION) / 4; - const tickTests = { - 'Breve note': ['1/2', 8.0, 'n'], - 'Whole note': ['w', 4.0, 'n'], - 'Quarter note': ['q', 1.0, 'n'], - 'Dotted half note': ['hd', 3.0, 'n'], - 'Doubled-dotted half note': ['hdd', 3.5, 'n'], - 'Triple-dotted half note': ['hddd', 3.75, 'n'], - 'Dotted half rest': ['hdr', 3.0, 'r'], - 'Double-dotted half rest': ['hddr', 3.5, 'r'], - 'Triple-dotted half rest': ['hdddr', 3.75, 'r'], - 'Dotted harmonic quarter note': ['qdh', 1.5, 'h'], - 'Double-dotted harmonic quarter note': ['qddh', 1.75, 'h'], - 'Triple-dotted harmonic quarter note': ['qdddh', 1.875, 'h'], - 'Dotted muted 8th note': ['8dm', 0.75, 'm'], - 'Double-dotted muted 8th note': ['8ddm', 0.875, 'm'], - 'Triple-dotted muted 8th note': ['8dddm', 0.9375, 'm'], - }; - Object.keys(tickTests).forEach((testName) => { - const testData = tickTests[testName]; - const durationString = testData[0]; - const expectedBeats = testData[1]; - const expectedNoteType = testData[2]; - const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: durationString }); - equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); - equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); - }); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); -} -function ticksNewAPI() { - const BEAT = (1 * Flow.RESOLUTION) / 4; - const tickTests = { - 'Breve note': [{ duration: '1/2' }, 8.0, 'n'], - 'Whole note': [{ duration: 'w' }, 4.0, 'n'], - 'Quarter note': [{ duration: 'q' }, 1.0, 'n'], - 'Dotted half note': [{ duration: 'h', dots: 1 }, 3.0, 'n'], - 'Doubled-dotted half note': [{ duration: 'h', dots: 2 }, 3.5, 'n'], - 'Triple-dotted half note': [{ duration: 'h', dots: 3 }, 3.75, 'n'], - 'Dotted half rest': [{ duration: 'h', dots: 1, type: 'r' }, 3.0, 'r'], - 'Double-dotted half rest': [{ duration: 'h', dots: 2, type: 'r' }, 3.5, 'r'], - 'Triple-dotted half rest': [{ duration: 'h', dots: 3, type: 'r' }, 3.75, 'r'], - 'Dotted harmonic quarter note': [{ duration: 'q', dots: 1, type: 'h' }, 1.5, 'h'], - 'Double-dotted harmonic quarter note': [{ duration: 'q', dots: 2, type: 'h' }, 1.75, 'h'], - 'Triple-dotted harmonic quarter note': [{ duration: 'q', dots: 3, type: 'h' }, 1.875, 'h'], - 'Dotted muted 8th note': [{ duration: '8', dots: 1, type: 'm' }, 0.75, 'm'], - 'Double-dotted muted 8th note': [{ duration: '8', dots: 2, type: 'm' }, 0.875, 'm'], - 'Triple-dotted muted 8th note': [{ duration: '8', dots: 3, type: 'm' }, 0.9375, 'm'], - }; - Object.keys(tickTests).forEach(function (testName) { - const testData = tickTests[testName]; - const noteData = testData[0]; - const expectedBeats = testData[1]; - const expectedNoteType = testData[2]; - noteData.keys = ['c/4', 'e/4', 'g/4']; - const note = new StaveNote(noteData); - equal(note.getTicks().value(), BEAT * expectedBeats, testName + ' must have ' + expectedBeats + ' beats'); - equal(note.getNoteType(), expectedNoteType, 'Note type must be ' + expectedNoteType); - }); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '8.7dddm' }), /BadArguments/, "Invalid note duration '8.7' throws BadArguments exception"); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2Z' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); - throws(() => new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '2dddZ' }), /BadArguments/, "Invalid note type 'Z' throws BadArguments exception"); -} -function stem() { - const note = new StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: 'w' }); - equal(note.getStemDirection(), Stem.UP, 'Default note has UP stem'); -} -function autoStem() { - const testData = [ - [['c/5', 'e/5', 'g/5'], Stem.DOWN], - [['e/4', 'g/4', 'c/5'], Stem.UP], - [['c/5'], Stem.DOWN], - [['a/4', 'e/5', 'g/5'], Stem.DOWN], - [['b/4'], Stem.DOWN], - ]; - testData.forEach((td) => { - const keys = td[0]; - const expectedStemDirection = td[1]; - const note = new StaveNote({ keys: keys, auto_stem: true, duration: '8' }); - equal(note.getStemDirection(), expectedStemDirection, 'Stem must be ' + (expectedStemDirection === Stem.UP ? 'up' : 'down')); - }); -} -function stemExtensionPitch() { - const testData = [ - [['c/5', 'e/5', 'g/5'], 0, 0], - [['e/4', 'g/4', 'c/5'], 0, 0], - [['c/5'], 0, 0], - [['f/3'], 15, 0], - [['f/3'], 15, Stem.UP], - [['f/3'], 0, Stem.DOWN], - [['f/3', 'e/5'], 0, 0], - [['g/6'], 25, 0], - [['g/6'], 25, Stem.DOWN], - [['g/6'], 0, Stem.UP], - ]; - testData.forEach((td) => { - const keys = td[0]; - const expectedStemExtension = td[1]; - const overrideStemDirection = td[2]; - let note; - if (overrideStemDirection === 0) { - note = new StaveNote({ keys: keys, auto_stem: true, duration: '4' }); - } - else { - note = new StaveNote({ keys: keys, duration: '4', stem_direction: overrideStemDirection }); - } - equal(note.getStemExtension(), expectedStemExtension, 'For ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension); - const stave = new Stave(10, 10, 300, { spacing_between_lines_px: 20 }); - note.setStave(stave); - equal(note.getStemExtension(), expectedStemExtension * 2, 'For wide staff ' + keys.toString() + ' StemExtension must be ' + expectedStemExtension * 2); - }); -} -function setStemDirectionDisplacement() { - function getDisplacements(note) { - return note.noteHeads.map((noteHead) => noteHead.isDisplaced()); - } - const stemUpDisplacements = [false, true, false]; - const stemDownDisplacements = [true, false, false]; - const note = new StaveNote({ keys: ['c/5', 'd/5', 'g/5'], stem_direction: Stem.UP, duration: '4' }); - deepEqual(getDisplacements(note), stemUpDisplacements); - note.setStemDirection(Stem.DOWN); - deepEqual(getDisplacements(note), stemDownDisplacements); - note.setStemDirection(Stem.UP); - deepEqual(getDisplacements(note), stemUpDisplacements); -} -function staveLine() { - const stave = new Stave(10, 10, 300); - const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); - note.setStave(stave); - const props = note.getKeyProps(); - equal(props[0].line, 0, 'C/4 on line 0'); - equal(props[1].line, 1, 'E/4 on line 1'); - equal(props[2].line, 2.5, 'A/4 on line 2.5'); - const ys = note.getYs(); - equal(ys.length, 3, 'Chord should be rendered on three lines'); - equal(ys[0], 100, 'Line for C/4'); - equal(ys[1], 90, 'Line for E/4'); - equal(ys[2], 75, 'Line for A/4'); -} -function width() { - const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }); - throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); -} -function tickContext() { - const stave = new Stave(10, 10, 400); - const note = new StaveNote({ keys: ['c/4', 'e/4', 'a/4'], duration: 'w' }).setStave(stave); - new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); - expect(0); -} -function drawBasic(options, contextBuilder) { - const clef = options.params.clef; - const octaveShift = options.params.octaveShift; - const restKey = options.params.restKey; - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new Stave(10, 30, 750); - stave.setContext(ctx); - stave.addClef(clef); - stave.draw(); - const lowerKeys = ['c/', 'e/', 'a/']; - const higherKeys = ['c/', 'e/', 'a/']; - for (let k = 0; k < lowerKeys.length; k++) { - lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); - higherKeys[k] = higherKeys[k] + (5 + octaveShift); - } - const restKeys = [restKey]; - const noteStructs = [ - { clef: clef, keys: higherKeys, duration: '1/2' }, - { clef: clef, keys: lowerKeys, duration: 'w' }, - { clef: clef, keys: higherKeys, duration: 'h' }, - { clef: clef, keys: lowerKeys, duration: 'q' }, - { clef: clef, keys: higherKeys, duration: '8' }, - { clef: clef, keys: lowerKeys, duration: '16' }, - { clef: clef, keys: higherKeys, duration: '32' }, - { clef: clef, keys: higherKeys, duration: '64' }, - { clef: clef, keys: higherKeys, duration: '128' }, - { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '128', stem_direction: Stem.DOWN }, - { clef: clef, keys: restKeys, duration: '1/2r' }, - { clef: clef, keys: restKeys, duration: 'wr' }, - { clef: clef, keys: restKeys, duration: 'hr' }, - { clef: clef, keys: restKeys, duration: 'qr' }, - { clef: clef, keys: restKeys, duration: '8r' }, - { clef: clef, keys: restKeys, duration: '16r' }, - { clef: clef, keys: restKeys, duration: '32r' }, - { clef: clef, keys: restKeys, duration: '64r' }, - { clef: clef, keys: restKeys, duration: '128r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - expect(noteStructs.length * 2); - const colorDescendants = (parentItem, color) => () => parentItem.querySelectorAll('*').forEach((child) => { - child.setAttribute('fill', color); - child.setAttribute('stroke', color); - }); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); - if (options.params.ui) { - const item = note.getSVGElement(); - if (item) { - item.addEventListener('mouseover', colorDescendants(item, 'green'), false); - item.addEventListener('mouseout', colorDescendants(item, 'black'), false); - } - } - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawBoundingBoxes(options, contextBuilder) { - const clef = options.params.clef; - const octaveShift = options.params.octaveShift; - const restKey = options.params.restKey; - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new Stave(10, 30, 750); - stave.setContext(ctx); - stave.addClef(clef); - stave.draw(); - const lowerKeys = ['c/', 'e/', 'a/']; - const higherKeys = ['c/', 'e/', 'a/']; - for (let k = 0; k < lowerKeys.length; k++) { - lowerKeys[k] = lowerKeys[k] + (4 + octaveShift); - higherKeys[k] = higherKeys[k] + (5 + octaveShift); - } - const restKeys = [restKey]; - const noteStructs = [ - { clef: clef, keys: higherKeys, duration: '1/2' }, - { clef: clef, keys: lowerKeys, duration: 'w' }, - { clef: clef, keys: higherKeys, duration: 'h' }, - { clef: clef, keys: lowerKeys, duration: 'q' }, - { clef: clef, keys: higherKeys, duration: '8' }, - { clef: clef, keys: lowerKeys, duration: '16' }, - { clef: clef, keys: higherKeys, duration: '32' }, - { clef: clef, keys: higherKeys, duration: '64' }, - { clef: clef, keys: higherKeys, duration: '128' }, - { clef: clef, keys: lowerKeys, duration: '1/2', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'w', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'h', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: 'q', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '8', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '16', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '32', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '64', stem_direction: Stem.DOWN }, - { clef: clef, keys: lowerKeys, duration: '128' }, - { clef: clef, keys: restKeys, duration: '1/2r' }, - { clef: clef, keys: restKeys, duration: 'wr' }, - { clef: clef, keys: restKeys, duration: 'hr' }, - { clef: clef, keys: restKeys, duration: 'qr' }, - { clef: clef, keys: restKeys, duration: '8r' }, - { clef: clef, keys: restKeys, duration: '16r' }, - { clef: clef, keys: restKeys, duration: '32r' }, - { clef: clef, keys: restKeys, duration: '64r' }, - { clef: clef, keys: restKeys, duration: '128r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25, true, false); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawBass(options, contextBuilder) { - expect(40); - const ctx = contextBuilder(options.elementId, 600, 280); - const stave = new Stave(10, 10, 650); - stave.setContext(ctx); - stave.addClef('bass'); - stave.draw(); - const noteStructs = [ - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '1/2' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'w' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: 'h' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '8' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16' }, - { clef: 'bass', keys: ['c/3', 'e/3', 'a/3'], duration: '32' }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'h', stem_direction: Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: 'q', stem_direction: Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '8', stem_direction: Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '16', stem_direction: Stem.DOWN }, - { clef: 'bass', keys: ['c/2', 'e/2', 'a/2'], duration: '32', stem_direction: Stem.DOWN }, - { keys: ['r/4'], duration: '1/2r' }, - { keys: ['r/4'], duration: 'wr' }, - { keys: ['r/4'], duration: 'hr' }, - { keys: ['r/4'], duration: 'qr' }, - { keys: ['r/4'], duration: '8r' }, - { keys: ['r/4'], duration: '16r' }, - { keys: ['r/4'], duration: '32r' }, - { keys: ['x/4'], duration: 'h' }, - ]; - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 25); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function displacements(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 700, 155); - ctx.scale(0.9, 0.9); - const stave = new Stave(10, 10, 675); - stave.setContext(ctx); - stave.draw(); - const noteStructs = [ - { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: '1/2' }, - { keys: ['g/3', 'a/3', 'c/4', 'd/4', 'e/4'], duration: 'w' }, - { keys: ['d/4', 'e/4', 'f/4'], duration: 'h' }, - { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: 'q' }, - { keys: ['e/3', 'b/3', 'c/4', 'e/4', 'f/4', 'g/5', 'a/5'], duration: '8' }, - { keys: ['a/3', 'c/4', 'e/4', 'g/4', 'a/4', 'b/4'], duration: '16' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32' }, - { keys: ['c/4', 'e/4', 'a/4', 'a/4'], duration: '64' }, - { keys: ['g/3', 'c/4', 'd/4', 'e/4'], duration: 'h', stem_direction: Stem.DOWN }, - { keys: ['d/4', 'e/4', 'f/4'], duration: 'q', stem_direction: Stem.DOWN }, - { keys: ['f/4', 'g/4', 'a/4', 'b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'd/4', 'e/4', 'f/4', 'g/4', 'a/4'], duration: '16', stem_direction: Stem.DOWN }, - { keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6'], duration: '32', stem_direction: Stem.DOWN }, - { - keys: ['b/3', 'c/4', 'e/4', 'a/4', 'b/5', 'c/6', 'e/6', 'e/6'], - duration: '64', - stem_direction: Stem.DOWN, - }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, (i + 1) * 45); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawHarmonicAndMuted(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 1000, 180); - const stave = new Stave(10, 10, 950); - stave.setContext(ctx); - stave.draw(); - const noteStructs = [ - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128h' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wh', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hh', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qh', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128h', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128m' }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '1/2m', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'wm', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'hm', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: 'qm', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '8m', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '16m', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '32m', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '64m', stem_direction: Stem.DOWN }, - { keys: ['c/4', 'e/4', 'a/4'], duration: '128m', stem_direction: Stem.DOWN }, - ]; - expect(noteStructs.length * 2); - for (let i = 0; i < noteStructs.length; ++i) { - const note = draw(staveNote(noteStructs[i]), stave, ctx, i * 25 + 5); - ok(note.getX() > 0, 'Note ' + i + ' has X value'); - ok(note.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawSlash(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 700, 180); - const stave = new Stave(10, 10, 650); - stave.setContext(ctx); - stave.draw(); - const notes = [ - { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: 'ws', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: 'hs', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: 'qs', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '16s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '32s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '64s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '128s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '1/2s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: 'ws', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: 'hs', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: 'qs', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '16s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '32s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '64s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '128s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '8s', stem_direction: Stem.UP }, - ]; - const stave_notes = notes.map((struct) => new StaveNote(struct)); - const beam1 = new Beam([stave_notes[16], stave_notes[17]]); - const beam2 = new Beam([stave_notes[18], stave_notes[19]]); - Formatter.FormatAndDraw(ctx, stave, stave_notes, false); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - ok('Slash Note Heads'); -} -function drawKeyStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - ctx.scale(3, 3); - const stave = new Stave(10, 0, 100); - const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) - .setStave(stave) - .addModifier(new Accidental('b'), 1) - .setKeyStyle(1, { shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue' }); - new TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawNoteStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) - .setStave(stave) - .addModifier(new Accidental('b'), 1); - note.setStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawNoteStemStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: 'q' }) - .setStave(stave) - .addModifier(new Accidental('b'), 1); - note.setStemStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok('Note Stem Style'); -} -function drawNoteStemLengths(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 975, 150); - const stave = new Stave(10, 10, 975); - stave.setContext(ctx).draw(); - const keys = [ - 'e/3', - 'f/3', - 'g/3', - 'a/3', - 'b/3', - 'c/4', - 'd/4', - 'e/4', - 'f/4', - 'g/4', - 'f/5', - 'g/5', - 'a/5', - 'b/5', - 'c/6', - 'd/6', - 'e/6', - 'f/6', - 'g/6', - 'a/6', - ]; - const notes = []; - let note; - let i; - for (i = 0; i < keys.length; i++) { - let duration = 'q'; - if (i % 2 === 1) { - duration = '8'; - } - note = new StaveNote({ keys: [keys[i]], duration, auto_stem: true }).setStave(stave); - new TickContext().addTickable(note); - note.setContext(ctx); - notes.push(note); - } - const whole_keys = ['e/3', 'a/3', 'f/5', 'a/5', 'd/6', 'a/6']; - for (i = 0; i < whole_keys.length; i++) { - note = new StaveNote({ keys: [whole_keys[i]], duration: 'w' }).setStave(stave); - new TickContext().addTickable(note); - note.setContext(ctx); - notes.push(note); - } - Formatter.FormatAndDraw(ctx, stave, notes); - ok('Note Stem Length'); -} -function drawNoteStylesWithFlag(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 300, 280); - const stave = new Stave(10, 0, 100); - ctx.scale(3, 3); - const note = new StaveNote({ keys: ['g/4', 'bb/4', 'd/5'], duration: '8' }) - .setStave(stave) - .addModifier(new Accidental('b'), 1); - note.setFlagStyle({ shadowBlur: 2, shadowColor: 'blue', fillStyle: 'blue', strokeStyle: 'blue' }); - new TickContext().addTickable(note).preFormat().setX(25); - stave.setContext(ctx).draw(); - note.setContext(ctx).draw(); - ok(note.getX() > 0, 'Note has X value'); - ok(note.getYs().length > 0, 'Note has Y values'); -} -function drawBeamStyles(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 160); - const stave = new Stave(10, 10, 380); - stave.setStyle({ strokeStyle: '#EEAAEE', lineWidth: 3 }); - stave.setContext(ctx); - stave.draw(); - const notes = [ - { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, - { keys: ['b/4'], duration: '8', stem_direction: Stem.UP }, - { keys: ['d/6'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['c/6', 'd/6'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['d/6', 'e/6'], duration: '8', stem_direction: Stem.DOWN }, - { keys: ['e/6', 'f/6'], duration: '8', stem_direction: Stem.DOWN }, - ]; - const staveNotes = notes.map((note) => new StaveNote(note)); - const beam1 = new Beam(staveNotes.slice(0, 2)); - const beam2 = new Beam(staveNotes.slice(3, 5)); - const beam3 = new Beam(staveNotes.slice(5, 7)); - const beam4 = new Beam(staveNotes.slice(7, 9)); - beam1.setStyle({ fillStyle: 'blue', strokeStyle: 'blue' }); - staveNotes[0].setKeyStyle(0, { fillStyle: 'purple' }); - staveNotes[0].setStemStyle({ strokeStyle: 'green' }); - staveNotes[1].setStemStyle({ strokeStyle: 'orange' }); - staveNotes[1].setKeyStyle(0, { fillStyle: 'darkturquoise' }); - staveNotes[5].setStyle({ fillStyle: 'tomato', strokeStyle: 'tomato' }); - beam3.setStyle({ shadowBlur: 4, shadowColor: 'blue' }); - staveNotes[9].setLedgerLineStyle({ fillStyle: 'lawngreen', strokeStyle: 'lawngreen', lineWidth: 1 }); - staveNotes[9].setFlagStyle({ fillStyle: 'orange', strokeStyle: 'orange' }); - Formatter.FormatAndDraw(ctx, stave, staveNotes, false); - beam1.setContext(ctx).draw(); - beam2.setContext(ctx).draw(); - beam3.setContext(ctx).draw(); - beam4.setContext(ctx).draw(); - ok('draw beam styles'); -} -function dotsAndFlagsStemUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - ctx.scale(1.0, 1.0); - const stave = new Stave(10, 10, 975); - const notes = [ - staveNote({ keys: ['f/4'], duration: '4', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '4', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '32' }), - staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), - ]; - Dot.buildAndAttach(notes, { all: true }); - Dot.buildAndAttach([notes[5], notes[11]], { all: true }); - stave.setContext(ctx).draw(); - for (let i = 0; i < notes.length; ++i) { - draw(notes[i], stave, ctx, i * 65); - } - ok(true, 'Full Dot'); -} -function dotsAndFlagsStemDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 160); - ctx.scale(1.0, 1.0); - const stave = new Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['e/5'], duration: '4', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '4', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), - ]; - Dot.buildAndAttach(staveNotes, { all: true }); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - ok(true, 'Full Dot'); -} -function dotsAndBeamsUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 150); - ctx.scale(1.0, 1.0); - const stave = new Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['f/4'], duration: '8', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '16', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '32', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '64', stem_direction: Stem.UP }), - staveNote({ keys: ['f/4'], duration: '128', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '8', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '16', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '32' }), - staveNote({ keys: ['g/4'], duration: '64', stem_direction: Stem.UP }), - staveNote({ keys: ['g/4'], duration: '128', stem_direction: Stem.UP }), - ]; - Dot.buildAndAttach(staveNotes, { all: true }); - Dot.buildAndAttach([staveNotes[4], staveNotes[9]], { all: true }); - const beam = new Beam(staveNotes); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - beam.setContext(ctx).draw(); - ok(true, 'Full Dot'); -} -function dotsAndBeamsDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 800, 160); - ctx.scale(1.0, 1.0); - const stave = new Stave(10, 10, 975); - const staveNotes = [ - staveNote({ keys: ['e/5'], duration: '8', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '16', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '32', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '64', stem_direction: Stem.DOWN }), - staveNote({ keys: ['e/5'], duration: '128', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '8', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '16', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '32', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '64', stem_direction: Stem.DOWN }), - staveNote({ keys: ['d/5'], duration: '128', stem_direction: Stem.DOWN }), - ]; - Dot.buildAndAttach(staveNotes, { all: true }); - const beam = new Beam(staveNotes); - stave.setContext(ctx).draw(); - for (let i = 0; i < staveNotes.length; ++i) { - draw(staveNotes[i], stave, ctx, i * 65); - } - beam.setContext(ctx).draw(); - ok(true, 'Full Dot'); -} -function noteHeadsSimple(options) { - const vf = VexFlowTests.makeFactory(options, 800, 250); - const score = vf.EasyScore(); - const system1 = vf.System({ y: 100, x: 50, width: 200 }); - system1 - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), - score.voice(score.notes('g4/w')), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - const system2 = vf.System({ y: 100, x: 250, width: 150 }); - system2.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(score.notes('b4/w'))], - }); - const system3 = vf.System({ y: 100, x: 400, width: 150 }); - system3.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], - }); - const system4 = vf.System({ y: 100, x: 550, width: 150 }); - system4.addStave({ - voices: [ - score.voice(score.notes('e4/q, e4/q/r, e4/h/r')), - score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r')), - ], - }); - vf.draw(); - expect(0); -} -function noPadding(options) { - const vf = VexFlowTests.makeFactory(options, 800, 500); - const score = vf.EasyScore(); - function newStave(y, noPadding) { - let system = vf.System({ y, x: 50, width: 200, noPadding }); - system - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q, a4/h')]), - score.voice(score.notes('g4/w')), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - system = vf.System({ y, x: 250, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h')), score.voice(score.notes('b4/w'))], - }); - system = vf.System({ y, x: 400, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h')), score.voice(score.notes('e4/w'))], - }); - system = vf.System({ y, x: 550, width: 150, noPadding }); - system.addStave({ - voices: [score.voice(score.notes('e4/q, e4/q, e4/h')), score.voice(score.notes('e4/8, e4/8, e4/q, e4/h'))], - }); - } - newStave(100, true); - newStave(200, false); - vf.draw(); - expect(0); -} -function noteHeadsHidden(options) { - const vf = VexFlowTests.makeFactory(options, 800, 250); - const score = vf.EasyScore(); - const system1 = vf.System({ y: 100, x: 50, width: 200 }); - const notes1 = score.notes('g4/w'); - notes1[0].render_options.draw = false; - system1 - .addStave({ - voices: [ - score.voice([...score.beam(score.notes('a4/8, b4/8', { stem: 'up' })), ...score.notes('a4/q/r, a4/h/r')]), - score.voice(notes1), - ], - }) - .addClef('treble') - .addTimeSignature('4/4'); - const system2 = vf.System({ y: 100, x: 250, width: 150 }); - const notes2 = score.notes('b4/w'); - notes2[0].render_options.draw = false; - system2.addStave({ - voices: [score.voice(score.notes('b4/h, b4/h/r')), score.voice(notes2)], - }); - const system3 = vf.System({ y: 100, x: 400, width: 150 }); - system3.addStave({ - voices: [score.voice(score.notes('d5/h, d5/h/r')), score.voice(score.notes('e4/w'))], - }); - const system4 = vf.System({ y: 100, x: 550, width: 150 }); - const notes4 = score.notes('e4/q, e4/q/r, e4/h/r'); - notes4[0].render_options.draw = false; - notes4[2].render_options.draw = false; - system4.addStave({ - voices: [score.voice(notes4), score.voice(score.notes('e4/8, e4/8/r, e4/q/r, e4/h/r'))], - }); - vf.draw(); - expect(0); -} -function centerAlignedRest(options) { - const f = VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f.StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedRestFermata(options) { - const f = VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f - .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) - .addModifier(new Articulation('a@a').setPosition(3), 0); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedRestAnnotation(options) { - const f = VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - const note = f - .StaveNote({ keys: ['b/4'], duration: '1r', align_center: true }) - .addModifier(new Annotation('Whole measure rest').setVerticalJustification(AnnotationVerticalJustify.TOP), 0); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedNoteMultiModifiers(options) { - const f = VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('4/4'); - function newFinger(num, pos) { - return new FretHandFinger(num).setPosition(pos); - } - const note = f - .StaveNote({ keys: ['c/4', 'e/4', 'g/4'], duration: '4', align_center: true }) - .addModifier(new Annotation('Test').setPosition(3), 0) - .addStroke(0, new Stroke(2)) - .addModifier(new Accidental('#'), 1) - .addModifier(newFinger('3', Modifier.Position.LEFT), 0) - .addModifier(newFinger('2', Modifier.Position.LEFT), 2) - .addModifier(newFinger('1', Modifier.Position.RIGHT), 1) - .addModifier(new StringNumber('4').setPosition(Modifier.Position.BELOW), 2); - Dot.buildAndAttach([note], { all: true }); - const voice = f.Voice().setStrict(false).addTickables([note]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function centerAlignedMultiVoice(options) { - const f = VexFlowTests.makeFactory(options, 400, 160); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addClef('treble').addTimeSignature('3/8'); - const custom_duration = new Fraction(3, 8); - const notes0 = [ - f.StaveNote({ - keys: ['c/4'], - duration: '1r', - align_center: true, - duration_override: custom_duration, - }), - ]; - const createStaveNote = (struct) => f.StaveNote(struct); - const notes1 = [ - { keys: ['b/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ].map(createStaveNote); - notes1[1].addModifier(f.Accidental({ type: '#' }), 0); - f.Beam({ notes: notes1 }); - const voice0 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes0); - const voice1 = f.Voice({ time: '3/8' }).setStrict(false).addTickables(notes1); - f.Formatter().joinVoices([voice0, voice1]).formatToStave([voice0, voice1], stave); - f.draw(); - ok(true); -} -VexFlowTests.register(StaveNoteTests); -export { StaveNoteTests }; diff --git a/build/esm/tests/stavetie_tests.js b/build/esm/tests/stavetie_tests.js deleted file mode 100644 index aacc43c620..0000000000 --- a/build/esm/tests/stavetie_tests.js +++ /dev/null @@ -1,108 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Stem } from '../src/stem.js'; -const StaveTieTests = { - Start() { - QUnit.module('StaveTie'); - const run = VexFlowTests.runTests; - run('Simple StaveTie', simple); - run('Chord StaveTie', chord); - run('Stem Up StaveTie', stemUp); - run('No End Note With Clef', noEndNote1); - run('No End Note', noEndNote2); - run('No Start Note With Clef', noStartNote1); - run('No Start Note', noStartNote2); - run('Set Direction Down', setDirectionDown); - run('Set Direction Up', setDirectionUp); - }, -}; -function createTest(notesData, setupTies) { - return (options) => { - const factory = VexFlowTests.makeFactory(options, 300); - const stave = factory.Stave(); - const score = factory.EasyScore(); - const notes = score.notes(notesData[0], notesData[1]); - const voice = score.voice(notes); - setupTies(factory, notes, stave); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); - }; -} -const simple = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - }); -}); -const chord = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1, 2], - last_indices: [0, 1, 2], - }); -}); -const stemUp = createTest(['(d4 e4 f4)/2, (cn4 f#4 a4)', { stem: 'up' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1, 2], - last_indices: [0, 1, 2], - }); -}); -const noEndNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { - stave.addEndClef('treble'); - f.StaveTie({ - from: notes[1], - first_indices: [2], - last_indices: [2], - text: 'slow.', - }); -}); -const noEndNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[1], - first_indices: [2], - last_indices: [2], - text: 'slow.', - }); -}); -const noStartNote1 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes, stave) => { - stave.addClef('treble'); - f.StaveTie({ - to: notes[0], - first_indices: [2], - last_indices: [2], - text: 'H', - }); -}); -const noStartNote2 = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - to: notes[0], - first_indices: [2], - last_indices: [2], - text: 'H', - }); -}); -const setDirectionDown = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - options: { direction: Stem.DOWN }, - }); -}); -const setDirectionUp = createTest(['(cb4 e#4 a4)/2, (d4 e4 f4)', { stem: 'down' }], (f, notes) => { - f.StaveTie({ - from: notes[0], - to: notes[1], - first_indices: [0, 1], - last_indices: [0, 1], - options: { direction: Stem.UP }, - }); -}); -VexFlowTests.register(StaveTieTests); -export { StaveTieTests }; diff --git a/build/esm/tests/stringnumber_tests.js b/build/esm/tests/stringnumber_tests.js deleted file mode 100644 index 687e868122..0000000000 --- a/build/esm/tests/stringnumber_tests.js +++ /dev/null @@ -1,264 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Glyph } from '../src/glyph.js'; -import { Renderer } from '../src/renderer.js'; -import { Stave } from '../src/stave.js'; -import { BarlineType } from '../src/stavebarline.js'; -import { Stroke } from '../src/strokes.js'; -const StringNumberTests = { - Start() { - QUnit.module('StringNumber'); - const run = VexFlowTests.runTests; - run('String Number In Notation', drawMultipleMeasures); - run('String Number In Notation - no circle', drawMultipleMeasures, { drawCircle: false }); - run('Fret Hand Finger In Notation', drawFretHandFingers); - run('Multi Voice With Strokes, String & Finger Numbers', multi); - run('Complex Measure With String & Finger Numbers', drawAccidentals); - }, -}; -function drawMultipleMeasures(options) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y; - const f = VexFlowTests.makeFactory(options, 775, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ width: 300 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); - const notes1 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/4, (c4 f4 g4)/4', { stem: 'down' }); - notes1[0] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_a = options.params) === null || _a === void 0 ? void 0 : _a.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_b = options.params) === null || _b === void 0 ? void 0 : _b.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_c = options.params) === null || _c === void 0 ? void 0 : _c.drawCircle), 2); - notes1[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_d = options.params) === null || _d === void 0 ? void 0 : _d.drawCircle), 0) - .addModifier(f.Accidental({ type: '#' }).setAsCautionary(), 1) - .addModifier(f - .StringNumber({ number: '3', position: 'above' }, (_e = options.params) === null || _e === void 0 ? void 0 : _e.drawCircle) - .setLastNote(notes1[3]) - .setLineEndType(Renderer.LineEndType.DOWN), 2); - notes1[2] - .addModifier(f.StringNumber({ number: '5', position: 'left' }, (_f = options.params) === null || _f === void 0 ? void 0 : _f.drawCircle), 0) - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_g = options.params) === null || _g === void 0 ? void 0 : _g.drawCircle), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes1[3] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_h = options.params) === null || _h === void 0 ? void 0 : _h.drawCircle).setOffsetY(7), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_j = options.params) === null || _j === void 0 ? void 0 : _j.drawCircle).setOffsetY(6), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_k = options.params) === null || _k === void 0 ? void 0 : _k.drawCircle).setOffsetY(-6), 2); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(BarlineType.DOUBLE); - const notes2 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'up' }); - notes2[0] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_l = options.params) === null || _l === void 0 ? void 0 : _l.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'left' }, (_m = options.params) === null || _m === void 0 ? void 0 : _m.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_o = options.params) === null || _o === void 0 ? void 0 : _o.drawCircle), 2); - notes2[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_p = options.params) === null || _p === void 0 ? void 0 : _p.drawCircle), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f - .StringNumber({ number: '3', position: 'above' }, (_q = options.params) === null || _q === void 0 ? void 0 : _q.drawCircle) - .setLastNote(notes2[3]) - .setDashed(false), 2); - notes2[2] - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_r = options.params) === null || _r === void 0 ? void 0 : _r.drawCircle), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes2[3] - .addModifier(f.StringNumber({ number: '5', position: 'right' }, (_s = options.params) === null || _s === void 0 ? void 0 : _s.drawCircle).setOffsetY(7), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_t = options.params) === null || _t === void 0 ? void 0 : _t.drawCircle).setOffsetY(6), 1) - .addModifier(f.StringNumber({ number: '3', position: 'right' }, (_u = options.params) === null || _u === void 0 ? void 0 : _u.drawCircle).setOffsetY(-6), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - const stave3 = f - .Stave({ x: stave2.getWidth() + stave2.getX(), y: stave2.getY(), width: 150 }) - .setEndBarType(BarlineType.END); - const notesBar3 = score.notes('(c4 e4 g4 a4)/1.'); - notesBar3[0] - .addModifier(f.StringNumber({ number: '5', position: 'below' }, (_v = options.params) === null || _v === void 0 ? void 0 : _v.drawCircle), 0) - .addModifier(f.StringNumber({ number: '4', position: 'right' }, (_w = options.params) === null || _w === void 0 ? void 0 : _w.drawCircle), 1) - .addModifier(f.StringNumber({ number: '3', position: 'left' }, (_x = options.params) === null || _x === void 0 ? void 0 : _x.drawCircle), 2) - .addModifier(f.StringNumber({ number: '2', position: 'above' }, (_y = options.params) === null || _y === void 0 ? void 0 : _y.drawCircle), 3); - const voice3 = score.voice(notesBar3, { time: '6/4' }); - f.Formatter().joinVoices([voice3]).formatToStave([voice3], stave3); - f.draw(); - ok(true, 'String Number'); -} -function drawFretHandFingers(options) { - const f = VexFlowTests.makeFactory(options, 725, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ width: 350 }).setEndBarType(BarlineType.DOUBLE).addClef('treble'); - const notes1 = score.notes('(c4 e4 g4)/4, (c5 e5 g5), (c4 f4 g4), (c4 f4 g4)', { stem: 'down' }); - notes1[0] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes1[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes1[2] - .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 2) - .addModifier(f.Accidental({ type: '#' }), 1); - notes1[3] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) - .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) - .addModifier(f.Fingering({ number: '0', position: 'right' }).setOffsetY(-5), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 350 }) - .setEndBarType(BarlineType.END); - const notes2 = score.notes('(c4 e4 g4)/4., (c5 e5 g5)/8, (c4 f4 g4)/8, (c4 f4 g4)/4.[stem="down"]', { - stem: 'up', - }); - notes2[0] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 2); - notes2[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2); - notes2[2] - .addModifier(f.Fingering({ number: '3', position: 'below' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '1', position: 'right' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2); - notes2[3] - .addModifier(f.Fingering({ number: '3', position: 'right' }), 0) - .addModifier(f.StringNumber({ number: '5', position: 'right' }).setOffsetY(7), 0) - .addModifier(f.Fingering({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }).setOffsetY(6), 1) - .addModifier(f.Fingering({ number: '1', position: 'right' }).setOffsetY(-6), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }).setOffsetY(-6), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'String Number'); -} -function multi(options) { - const f = VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - const stave = f.Stave(); - const notes1 = score.notes('(c4 e4 g4)/4, (a3 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); - notes1[0] - .addStroke(0, new Stroke(5)) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '4', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2); - notes1[1] - .addStroke(0, new Stroke(6)) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '3', position: 'above' }), 2) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2); - notes1[2] - .addStroke(0, new Stroke(2)) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'right' }), 1) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1) - .addModifier(f.Fingering({ number: '1', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 2); - notes1[3] - .addStroke(0, new Stroke(1)) - .addModifier(f.StringNumber({ number: '3', position: 'left' }), 2) - .addModifier(f.StringNumber({ number: '4', position: 'right' }), 1); - const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); - notes2[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.StringNumber({ number: '6', position: 'below' }), 0); - notes2[2].addModifier(f.Accidental({ type: '#' }), 0); - notes2[4].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); - notes2[4].addModifier(f.StringNumber({ number: '6', position: 'left' }).setOffsetX(15).setOffsetY(18), 0); - const voices = [score.voice(notes2), score.voice(notes1)]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - f.draw(); - ok(true, 'Strokes Test Multi Voice'); -} -function drawAccidentals(options) { - const f = VexFlowTests.makeFactory(options, 750); - const glyphScale = 39; - const clefWidth = Glyph.getWidth('gClef', glyphScale); - const notes = [ - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'c/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), - f.StaveNote({ keys: ['c/4', 'e/4', 'g/4', 'd/5', 'e/5', 'g/5'], stem_direction: -1, duration: '4' }), - ]; - notes[0] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[1] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[2] - .addModifier(f.Fingering({ number: '3', position: 'left' }), 0) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Fingering({ number: '2', position: 'left' }), 1) - .addModifier(f.StringNumber({ number: '2', position: 'left' }), 1) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 2) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Fingering({ number: '3', position: 'left' }), 3) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Fingering({ number: '2', position: 'right' }), 4) - .addModifier(f.StringNumber({ number: '3', position: 'right' }), 4) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 5) - .addModifier(f.Accidental({ type: '#' }), 5); - notes[3] - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4) - .addModifier(f.Accidental({ type: '#' }), 5); - const voice = f.Voice().addTickables(notes); - const ctx = f.getContext(); - const formatter = f.Formatter().joinVoices([voice]); - const stavePadding = clefWidth + Stave.defaultPadding + 10; - const nwidth = Math.max(formatter.preCalculateMinTotalWidth([voice]), 490 - stavePadding); - formatter.format([voice], nwidth); - const stave = f - .Stave({ x: 0, y: 0, width: nwidth + stavePadding }) - .setContext(ctx) - .setEndBarType(BarlineType.DOUBLE) - .addClef('treble') - .draw(); - voice.draw(ctx, stave); - ok(true, 'String Number'); -} -VexFlowTests.register(StringNumberTests); -export { StringNumberTests }; diff --git a/build/esm/tests/strokes_tests.js b/build/esm/tests/strokes_tests.js deleted file mode 100644 index 1a84f75a76..0000000000 --- a/build/esm/tests/strokes_tests.js +++ /dev/null @@ -1,275 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Barline, Beam, Bend, Stroke } from '../src/index.js'; -const StrokesTests = { - Start() { - QUnit.module('Strokes'); - const run = VexFlowTests.runTests; - run('Strokes - Brush/Roll/Rasquedo', brushRollRasquedo); - run('Strokes - Arpeggio directionless (without arrows)', arpeggioDirectionless); - run('Strokes - Multi Voice', multiVoice); - run('Strokes - Notation and Tab', notesWithTab); - run('Strokes - Multi-Voice Notation and Tab', multiNotationAndTab); - }, -}; -function brushRollRasquedo(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); - const notes1 = score.notes('(a3 e4 a4)/4, (c4 e4 g4), (c4 e4 g4), (c4 e4 g4)', { stem: 'up' }); - notes1[0].addStroke(0, new Stroke(1)); - notes1[1] - .addStroke(0, new Stroke(2)) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 0); - notes1[2].addStroke(0, new Stroke(1)); - notes1[3].addStroke(0, new Stroke(2)); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(Barline.type.DOUBLE); - const notes2 = score.notes('(c4 d4 g4)/4, (c4 d4 g4), (c4 d4 g4), (c4 d4 a4)', { stem: 'up' }); - notes2[0].addStroke(0, new Stroke(3)); - notes2[1].addStroke(0, new Stroke(4)); - notes2[2].addStroke(0, new Stroke(5)); - notes2[3] - .addStroke(0, new Stroke(6)) - .addModifier(f.Accidental({ type: 'bb' }), 0) - .addModifier(f.Accidental({ type: 'bb' }), 1) - .addModifier(f.Accidental({ type: 'bb' }), 2); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Brush/Roll/Rasquedo'); -} -function arpeggioDirectionless(options) { - const f = VexFlowTests.makeFactory(options, 700, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ x: 100, width: 500 }).setEndBarType(Barline.type.DOUBLE); - const notes1 = score.notes('(g4 b4 d5)/4, (g4 b4 d5 g5), (g4 b4 d5 g5), (g4 b4 d5)', { stem: 'up' }); - const graceNoteStructs = [ - { keys: ['e/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - ]; - const graceNotes = graceNoteStructs.map((graceNoteStruct) => f.GraceNote(graceNoteStruct)); - const graceNoteGroup = f.GraceNoteGroup({ notes: graceNotes, slur: false }); - graceNoteGroup.beamNotes(); - notes1[0].addStroke(0, new Stroke(7)); - notes1[1] - .addStroke(0, new Stroke(7)) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1) - .addModifier(f.Accidental({ type: '#' }), 2) - .addModifier(f.Accidental({ type: '#' }), 3); - notes1[2] - .addStroke(0, new Stroke(7)) - .addModifier(f.Accidental({ type: 'b' }), 1) - .addModifier(graceNoteGroup, 0); - notes1[3].addStroke(0, new Stroke(7)).addModifier(f.NoteSubGroup({ - notes: [f.ClefNote({ type: 'treble', options: { size: 'default', annotation: '8va' } })], - }), 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - f.draw(); - ok(true, 'Arpeggio directionless (without arrows)'); -} -function multiVoice(options) { - const f = VexFlowTests.makeFactory(options, 500, 200); - const score = f.EasyScore(); - const stave = f.Stave(); - const notes1 = score.notes('(c4 e4 g4)/4, (c4 e4 g4), (c4 d4 a4), (c4 d4 a4)', { stem: 'up' }); - notes1[0].addStroke(0, new Stroke(5)); - notes1[1] - .addStroke(0, new Stroke(6)) - .addModifier(f.Accidental({ type: '#' }), 0) - .addModifier(f.Accidental({ type: '#' }), 2); - notes1[2].addStroke(0, new Stroke(2)); - notes1[3].addStroke(0, new Stroke(1)); - const notes2 = score.notes('e3/8, e3, e3, e3, e3, e3, e3, e3', { stem: 'down' }); - f.Beam({ notes: notes2.slice(0, 4) }); - f.Beam({ notes: notes2.slice(4, 8) }); - const voices = [notes1, notes2].map((notes) => score.voice(notes)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Strokes Test Multi Voice'); -} -function multiNotationAndTab(options) { - const f = VexFlowTests.makeFactory(options, 400, 275); - const score = f.EasyScore(); - const stave = f.Stave().addClef('treble'); - const notes1 = score.notes('(g4 b4 e5)/4, (g4 b4 e5), (g4 b4 e5), (g4 b4 e5)', { stem: 'up' }); - notes1[0].addStroke(0, new Stroke(3, { all_voices: false })); - notes1[1].addStroke(0, new Stroke(6)); - notes1[2].addStroke(0, new Stroke(2, { all_voices: false })); - notes1[3].addStroke(0, new Stroke(1)); - const notes2 = score.notes('g3/4, g3, g3, g3', { stem: 'down' }); - f.TabStave({ y: 100 }).addClef('tab').setNoteStartX(stave.getNoteStartX()); - const tabNotes1 = [ - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 0 }, - { str: 2, fret: 0 }, - { str: 1, fret: 1 }, - ], - duration: '4', - }), - ]; - tabNotes1[0].addStroke(0, new Stroke(3, { all_voices: false })); - tabNotes1[1].addStroke(0, new Stroke(6)); - tabNotes1[2].addStroke(0, new Stroke(2, { all_voices: false })); - tabNotes1[3].addStroke(0, new Stroke(1)); - const tabNotes2 = [ - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - f.TabNote({ positions: [{ str: 6, fret: 3 }], duration: '4' }), - ]; - const voices = [notes1, notes2, tabNotes1, tabNotes2].map((notes) => score.voice(notes)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave); - f.draw(); - ok(true, 'Strokes Test Notation & Tab Multi Voice'); -} -function notesWithTab(options) { - const f = VexFlowTests.makeFactory(options, 500, 300); - const stave = f.Stave({ x: 15, y: 40, width: 450 }).addClef('treble'); - const notes = [ - f - .StaveNote({ keys: ['b/4', 'd/5', 'g/5'], stem_direction: -1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 1) - .addModifier(f.Accidental({ type: 'b' }), 0), - f.StaveNote({ keys: ['c/5', 'd/5'], stem_direction: -1, duration: '4' }), - f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), - f - .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'e/5', 'a/5'], stem_direction: 1, duration: '8' }) - .addModifier(f.Accidental({ type: '#' }), 3), - f.StaveNote({ keys: ['b/3', 'e/4', 'a/4', 'd/5'], stem_direction: 1, duration: '8' }), - f - .StaveNote({ keys: ['a/3', 'e/4', 'a/4', 'c/5', 'f/5', 'a/5'], stem_direction: 1, duration: '8' }) - .addModifier(f.Accidental({ type: '#' }), 3) - .addModifier(f.Accidental({ type: '#' }), 4), - ]; - const tabstave = f - .TabStave({ x: stave.getX(), y: 140, width: 450 }) - .addClef('tab') - .setNoteStartX(stave.getNoteStartX()); - const tabNotes = [ - f - .TabNote({ - positions: [ - { str: 1, fret: 3 }, - { str: 2, fret: 2 }, - { str: 3, fret: 3 }, - ], - duration: '4', - }) - .addModifier(new Bend('Full'), 0), - f - .TabNote({ - positions: [ - { str: 2, fret: 3 }, - { str: 3, fret: 5 }, - ], - duration: '4', - }) - .addModifier(new Bend('Unison'), 1), - f.TabNote({ - positions: [ - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 7 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 5 }, - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 5 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 3, fret: 7 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 7 }, - ], - duration: '8', - }), - f.TabNote({ - positions: [ - { str: 1, fret: 5 }, - { str: 2, fret: 5 }, - { str: 3, fret: 6 }, - { str: 4, fret: 7 }, - { str: 5, fret: 7 }, - { str: 6, fret: 5 }, - ], - duration: '8', - }), - ]; - notes[0].addStroke(0, new Stroke(1)); - notes[1].addStroke(0, new Stroke(2)); - notes[2].addStroke(0, new Stroke(3)); - notes[3].addStroke(0, new Stroke(4)); - notes[4].addStroke(0, new Stroke(5)); - notes[5].addStroke(0, new Stroke(6)); - tabNotes[0].addStroke(0, new Stroke(1)); - tabNotes[1].addStroke(0, new Stroke(2)); - tabNotes[2].addStroke(0, new Stroke(3)); - tabNotes[3].addStroke(0, new Stroke(4)); - tabNotes[4].addStroke(0, new Stroke(5)); - tabNotes[5].addStroke(0, new Stroke(6)); - f.StaveConnector({ - top_stave: stave, - bottom_stave: tabstave, - type: 'bracket', - }); - f.StaveConnector({ - top_stave: stave, - bottom_stave: tabstave, - type: 'single', - }); - const voice = f.Voice().addTickables(notes); - const tabVoice = f.Voice().addTickables(tabNotes); - const beams = Beam.applyAndGetBeams(voice); - f.Formatter().joinVoices([voice]).joinVoices([tabVoice]).formatToStave([voice, tabVoice], stave); - f.draw(); - beams.forEach(function (beam) { - beam.setContext(f.getContext()).draw(); - }); - ok(true); -} -VexFlowTests.register(StrokesTests); -export { StrokesTests }; diff --git a/build/esm/tests/style_tests.js b/build/esm/tests/style_tests.js deleted file mode 100644 index a3e85e0988..0000000000 --- a/build/esm/tests/style_tests.js +++ /dev/null @@ -1,96 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Annotation } from '../src/annotation.js'; -import { Articulation } from '../src/articulation.js'; -import { Bend } from '../src/bend.js'; -import { Formatter } from '../src/formatter.js'; -import { KeySignature } from '../src/keysignature.js'; -import { NoteSubGroup } from '../src/notesubgroup.js'; -import { Ornament } from '../src/ornament.js'; -import { StaveModifierPosition } from '../src/stavemodifier.js'; -import { Stroke } from '../src/strokes.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { TimeSignature } from '../src/timesignature.js'; -const StyleTests = { - Start() { - QUnit.module('Style'); - const run = VexFlowTests.runTests; - run('Basic Style', stave); - run('TabNote modifiers Style', tab); - }, -}; -function FS(fillStyle, strokeStyle) { - const ret = { fillStyle }; - if (strokeStyle) { - ret.strokeStyle = strokeStyle; - } - return ret; -} -function stave(options) { - const f = VexFlowTests.makeFactory(options, 600, 150); - const stave = f.Stave({ x: 25, y: 20, width: 500 }); - const keySig = new KeySignature('D'); - keySig.addToStave(stave); - keySig.setStyle(FS('blue')); - stave.addTimeSignature('4/4'); - const timeSig = stave.getModifiers(StaveModifierPosition.BEGIN, TimeSignature.CATEGORY); - timeSig[0].setStyle(FS('brown')); - const notes = [ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: '4' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['e/4'], stem_direction: 1, duration: '4' }), - f.StaveNote({ keys: ['f/4'], stem_direction: 1, duration: '8' }), - f.TextDynamics({ text: 'sfz', duration: '16' }).setStyle(FS('blue')), - f.GhostNote({ duration: '16' }).addModifier(new Annotation('GhostNote green text').setStyle(FS('green')), 0), - ]; - const notes0 = notes[0]; - const notes1 = notes[1]; - notes0.setKeyStyle(0, FS('red')); - notes1.setKeyStyle(0, FS('red')); - const mods1 = notes1.getModifiers(); - mods1[0].setStyle(FS('green')); - notes0.addModifier(new Articulation('a.').setPosition(4).setStyle(FS('green')), 0); - notes0.addModifier(new Ornament('mordent').setStyle(FS('lightgreen')), 0); - notes1.addModifier(new Annotation('blue').setStyle(FS('blue')), 0); - notes1.addModifier(new NoteSubGroup([f.ClefNote({ options: { size: 'small' } }).setStyle(FS('blue'))]), 0); - const voice = f.Voice().addTickables(notes); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Basic Style'); -} -function tab(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 140); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 450).addTabGlyph(); - stave.getModifiers()[2].setStyle(FS('blue')); - stave.setContext(ctx).draw(); - const tabNote = (noteStruct) => new TabNote(noteStruct); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new Annotation('green text').setStyle(FS('green')), 0), - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }) - .addModifier(new Bend('Full').setStyle(FS('brown')), 0) - .addStroke(0, new Stroke(1, { all_voices: false }).setStyle(FS('blue'))), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'TabNote Modifiers Style'); -} -VexFlowTests.register(StyleTests); -export { StyleTests }; diff --git a/build/esm/tests/support/qunit.js b/build/esm/tests/support/qunit.js deleted file mode 100644 index f3104a009e..0000000000 --- a/build/esm/tests/support/qunit.js +++ /dev/null @@ -1,2765 +0,0 @@ -"use strict"; -/*! - * QUnit 1.19.0 - * http://qunitjs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2015-09-01T15:00Z - */ -(function (global) { - var QUnit = {}; - var Date = global.Date; - var now = Date.now || - function () { - return new Date().getTime(); - }; - var setTimeout = global.setTimeout; - var clearTimeout = global.clearTimeout; - var window = global.window; - var defined = { - document: window && window.document !== undefined, - setTimeout: setTimeout !== undefined, - sessionStorage: (function () { - var x = 'qunit-test-string'; - try { - sessionStorage.setItem(x, x); - sessionStorage.removeItem(x); - return true; - } - catch (e) { - return false; - } - })(), - }; - var fileName = (sourceFromStacktrace(0) || '').replace(/(:\d+)+\)?/, '').replace(/.+\//, ''); - var globalStartCalled = false; - var runStarted = false; - var toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty; - function diff(a, b) { - var i, j, result = a.slice(); - for (i = 0; i < result.length; i++) { - for (j = 0; j < b.length; j++) { - if (result[i] === b[j]) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; - } - function inArray(elem, array) { - if (array.indexOf) { - return array.indexOf(elem); - } - for (var i = 0, length = array.length; i < length; i++) { - if (array[i] === elem) { - return i; - } - } - return -1; - } - function objectValues(obj) { - var key, val, vals = QUnit.is('array', obj) ? [] : {}; - for (key in obj) { - if (hasOwn.call(obj, key)) { - val = obj[key]; - vals[key] = val === Object(val) ? objectValues(val) : val; - } - } - return vals; - } - function extend(a, b, undefOnly) { - for (var prop in b) { - if (hasOwn.call(b, prop)) { - if (prop !== 'constructor' || a !== global) { - if (b[prop] === undefined) { - delete a[prop]; - } - else if (!(undefOnly && typeof a[prop] !== 'undefined')) { - a[prop] = b[prop]; - } - } - } - } - return a; - } - function objectType(obj) { - if (typeof obj === 'undefined') { - return 'undefined'; - } - if (obj === null) { - return 'null'; - } - var match = toString.call(obj).match(/^\[object\s(.*)\]$/), type = (match && match[1]) || ''; - switch (type) { - case 'Number': - if (isNaN(obj)) { - return 'nan'; - } - return 'number'; - case 'String': - case 'Boolean': - case 'Array': - case 'Set': - case 'Map': - case 'Date': - case 'RegExp': - case 'Function': - return type.toLowerCase(); - } - if (typeof obj === 'object') { - return 'object'; - } - return undefined; - } - function is(type, obj) { - return QUnit.objectType(obj) === type; - } - var getUrlParams = function () { - var i, current; - var urlParams = {}; - var location = window.location; - var params = location.search.slice(1).split('&'); - var length = params.length; - if (params[0]) { - for (i = 0; i < length; i++) { - current = params[i].split('='); - current[0] = decodeURIComponent(current[0]); - current[1] = current[1] ? decodeURIComponent(current[1]) : true; - if (urlParams[current[0]]) { - urlParams[current[0]] = [].concat(urlParams[current[0]], current[1]); - } - else { - urlParams[current[0]] = current[1]; - } - } - } - return urlParams; - }; - function extractStacktrace(e, offset) { - offset = offset === undefined ? 4 : offset; - var stack, include, i; - if (e.stack) { - stack = e.stack.split('\n'); - if (/^error$/i.test(stack[0])) { - stack.shift(); - } - if (fileName) { - include = []; - for (i = offset; i < stack.length; i++) { - if (stack[i].indexOf(fileName) !== -1) { - break; - } - include.push(stack[i]); - } - if (include.length) { - return include.join('\n'); - } - } - return stack[offset]; - } - else if (e.sourceURL) { - if (/qunit.js$/.test(e.sourceURL)) { - return; - } - return e.sourceURL + ':' + e.line; - } - } - function sourceFromStacktrace(offset) { - var error = new Error(); - if (!error.stack) { - try { - throw error; - } - catch (err) { - error = err; - } - } - return extractStacktrace(error, offset); - } - var config = { - queue: [], - blocking: true, - reorder: true, - altertitle: true, - scrolltop: true, - maxDepth: 5, - requireExpects: false, - urlConfig: [ - { - id: 'hidepassed', - label: 'Hide passed tests', - tooltip: 'Only show tests and assertions that fail. Stored as query-strings.', - }, - { - id: 'noglobals', - label: 'Check for Globals', - tooltip: 'Enabling this will test if any test introduces new properties on the ' + - 'global object (`window` in Browsers). Stored as query-strings.', - }, - { - id: 'notrycatch', - label: 'No try-catch', - tooltip: 'Enabling this will run tests outside of a try-catch block. Makes debugging ' + - 'exceptions in IE reasonable. Stored as query-strings.', - }, - ], - modules: [], - currentModule: { - name: '', - tests: [], - }, - callbacks: {}, - }; - var urlParams = defined.document ? getUrlParams() : {}; - config.modules.push(config.currentModule); - if (urlParams.filter === true) { - delete urlParams.filter; - } - config.filter = urlParams.filter; - config.testId = []; - if (urlParams.testId) { - urlParams.testId = decodeURIComponent(urlParams.testId).split(','); - for (var i = 0; i < urlParams.testId.length; i++) { - config.testId.push(urlParams.testId[i]); - } - } - var loggingCallbacks = {}; - function registerLoggingCallbacks(obj) { - var i, l, key, callbackNames = ['begin', 'done', 'log', 'testStart', 'testDone', 'moduleStart', 'moduleDone']; - function registerLoggingCallback(key) { - var loggingCallback = function (callback) { - if (objectType(callback) !== 'function') { - throw new Error('QUnit logging methods require a callback function as their first parameters.'); - } - config.callbacks[key].push(callback); - }; - loggingCallbacks[key] = loggingCallback; - return loggingCallback; - } - for (i = 0, l = callbackNames.length; i < l; i++) { - key = callbackNames[i]; - if (objectType(config.callbacks[key]) === 'undefined') { - config.callbacks[key] = []; - } - obj[key] = registerLoggingCallback(key); - } - } - function runLoggingCallbacks(key, args) { - var i, l, callbacks; - callbacks = config.callbacks[key]; - for (i = 0, l = callbacks.length; i < l; i++) { - callbacks[i](args); - } - } - function verifyLoggingCallbacks() { - var loggingCallback, userCallback; - for (loggingCallback in loggingCallbacks) { - if (QUnit[loggingCallback] !== loggingCallbacks[loggingCallback]) { - userCallback = QUnit[loggingCallback]; - QUnit[loggingCallback] = loggingCallbacks[loggingCallback]; - QUnit[loggingCallback](userCallback); - if (global.console && global.console.warn) { - global.console.warn('QUnit.' + - loggingCallback + - ' was replaced with a new value.\n' + - 'Please, check out the documentation on how to apply logging callbacks.\n' + - 'Reference: http://api.qunitjs.com/category/callbacks/'); - } - } - } - } - (function () { - if (!defined.document) { - return; - } - var onErrorFnPrev = window.onerror; - window.onerror = function (error, filePath, linerNr) { - var ret = false; - if (onErrorFnPrev) { - ret = onErrorFnPrev(error, filePath, linerNr); - } - if (ret !== true) { - if (QUnit.config.current) { - if (QUnit.config.current.ignoreGlobalErrors) { - return true; - } - QUnit.pushFailure(error, filePath + ':' + linerNr); - } - else { - QUnit.test('global failure', extend(function () { - QUnit.pushFailure(error, filePath + ':' + linerNr); - }, { validTest: true })); - } - return false; - } - return ret; - }; - })(); - QUnit.urlParams = urlParams; - QUnit.isLocal = !(defined.document && window.location.protocol !== 'file:'); - QUnit.version = '1.19.0'; - extend(QUnit, { - module: function (name, testEnvironment) { - var currentModule = { - name: name, - testEnvironment: testEnvironment, - tests: [], - }; - if (testEnvironment && testEnvironment.setup) { - testEnvironment.beforeEach = testEnvironment.setup; - delete testEnvironment.setup; - } - if (testEnvironment && testEnvironment.teardown) { - testEnvironment.afterEach = testEnvironment.teardown; - delete testEnvironment.teardown; - } - config.modules.push(currentModule); - config.currentModule = currentModule; - }, - asyncTest: asyncTest, - test: test, - skip: skip, - start: function (count) { - var globalStartAlreadyCalled = globalStartCalled; - if (!config.current) { - globalStartCalled = true; - if (runStarted) { - throw new Error('Called start() outside of a test context while already started'); - } - else if (globalStartAlreadyCalled || count > 1) { - throw new Error('Called start() outside of a test context too many times'); - } - else if (config.autostart) { - throw new Error('Called start() outside of a test context when ' + 'QUnit.config.autostart was true'); - } - else if (!config.pageLoaded) { - config.autostart = true; - return; - } - } - else { - config.current.semaphore -= count || 1; - if (config.current.semaphore > 0) { - return; - } - if (config.current.semaphore < 0) { - config.current.semaphore = 0; - QUnit.pushFailure("Called start() while already started (test's semaphore was 0 already)", sourceFromStacktrace(2)); - return; - } - } - resumeProcessing(); - }, - stop: function (count) { - if (!config.current) { - throw new Error('Called stop() outside of a test context'); - } - config.current.semaphore += count || 1; - pauseProcessing(); - }, - config: config, - is: is, - objectType: objectType, - extend: extend, - load: function () { - config.pageLoaded = true; - extend(config, { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: 0, - updateRate: 1000, - autostart: true, - filter: '', - }, true); - config.blocking = false; - if (config.autostart) { - resumeProcessing(); - } - }, - stack: function (offset) { - offset = (offset || 0) + 2; - return sourceFromStacktrace(offset); - }, - }); - registerLoggingCallbacks(QUnit); - function begin() { - var i, l, modulesLog = []; - if (!config.started) { - config.started = now(); - verifyLoggingCallbacks(); - if (config.modules[0].name === '' && config.modules[0].tests.length === 0) { - config.modules.shift(); - } - for (i = 0, l = config.modules.length; i < l; i++) { - modulesLog.push({ - name: config.modules[i].name, - tests: config.modules[i].tests, - }); - } - runLoggingCallbacks('begin', { - totalTests: Test.count, - modules: modulesLog, - }); - } - config.blocking = false; - process(true); - } - function process(last) { - function next() { - process(last); - } - var start = now(); - config.depth = (config.depth || 0) + 1; - while (config.queue.length && !config.blocking) { - if (!defined.setTimeout || config.updateRate <= 0 || now() - start < config.updateRate) { - if (config.current) { - config.current.usedAsync = false; - } - config.queue.shift()(); - } - else { - setTimeout(next, 13); - break; - } - } - config.depth--; - if (last && !config.blocking && !config.queue.length && config.depth === 0) { - done(); - } - } - function pauseProcessing() { - config.blocking = true; - if (config.testTimeout && defined.setTimeout) { - clearTimeout(config.timeout); - config.timeout = setTimeout(function () { - if (config.current) { - config.current.semaphore = 0; - QUnit.pushFailure('Test timed out', sourceFromStacktrace(2)); - } - else { - throw new Error('Test timed out'); - } - resumeProcessing(); - }, config.testTimeout); - } - } - function resumeProcessing() { - runStarted = true; - if (defined.setTimeout) { - setTimeout(function () { - if (config.current && config.current.semaphore > 0) { - return; - } - if (config.timeout) { - clearTimeout(config.timeout); - } - begin(); - }, 13); - } - else { - begin(); - } - } - function done() { - var runtime, passed; - config.autorun = true; - if (config.previousModule) { - runLoggingCallbacks('moduleDone', { - name: config.previousModule.name, - tests: config.previousModule.tests, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all, - runtime: now() - config.moduleStats.started, - }); - } - delete config.previousModule; - runtime = now() - config.started; - passed = config.stats.all - config.stats.bad; - runLoggingCallbacks('done', { - failed: config.stats.bad, - passed: passed, - total: config.stats.all, - runtime: runtime, - }); - } - function Test(settings) { - var i, l; - ++Test.count; - extend(this, settings); - this.assertions = []; - this.semaphore = 0; - this.usedAsync = false; - this.module = config.currentModule; - this.stack = sourceFromStacktrace(3); - for (i = 0, l = this.module.tests; i < l.length; i++) { - if (this.module.tests[i].name === this.testName) { - this.testName += ' '; - } - } - this.testId = generateHash(this.module.name, this.testName); - this.module.tests.push({ - name: this.testName, - testId: this.testId, - }); - if (settings.skip) { - this.callback = function () { }; - this.async = false; - this.expected = 0; - } - else { - this.assert = new Assert(this); - } - } - Test.count = 0; - Test.prototype = { - before: function () { - if (this.module !== config.previousModule || - !hasOwn.call(config, 'previousModule')) { - if (hasOwn.call(config, 'previousModule')) { - runLoggingCallbacks('moduleDone', { - name: config.previousModule.name, - tests: config.previousModule.tests, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all, - runtime: now() - config.moduleStats.started, - }); - } - config.previousModule = this.module; - config.moduleStats = { all: 0, bad: 0, started: now() }; - runLoggingCallbacks('moduleStart', { - name: this.module.name, - tests: this.module.tests, - }); - } - config.current = this; - if (this.module.testEnvironment) { - delete this.module.testEnvironment.beforeEach; - delete this.module.testEnvironment.afterEach; - } - this.testEnvironment = extend({}, this.module.testEnvironment); - this.started = now(); - runLoggingCallbacks('testStart', { - name: this.testName, - module: this.module.name, - testId: this.testId, - }); - if (!config.pollution) { - saveGlobal(); - } - }, - run: function () { - var promise; - config.current = this; - if (this.async) { - QUnit.stop(); - } - this.callbackStarted = now(); - if (config.notrycatch) { - promise = this.callback.call(this.testEnvironment, this.assert); - this.resolvePromise(promise); - return; - } - try { - promise = this.callback.call(this.testEnvironment, this.assert); - this.resolvePromise(promise); - } - catch (e) { - this.pushFailure('Died on test #' + (this.assertions.length + 1) + ' ' + this.stack + ': ' + (e.message || e), extractStacktrace(e, 0)); - saveGlobal(); - if (config.blocking) { - QUnit.start(); - } - } - }, - after: function () { - checkPollution(); - }, - queueHook: function (hook, hookName) { - var promise, test = this; - return function runHook() { - config.current = test; - if (config.notrycatch) { - promise = hook.call(test.testEnvironment, test.assert); - test.resolvePromise(promise, hookName); - return; - } - try { - promise = hook.call(test.testEnvironment, test.assert); - test.resolvePromise(promise, hookName); - } - catch (error) { - test.pushFailure(hookName + ' failed on ' + test.testName + ': ' + (error.message || error), extractStacktrace(error, 0)); - } - }; - }, - hooks: function (handler) { - var hooks = []; - if (this.skip) { - return hooks; - } - if (this.module.testEnvironment && QUnit.objectType(this.module.testEnvironment[handler]) === 'function') { - hooks.push(this.queueHook(this.module.testEnvironment[handler], handler)); - } - return hooks; - }, - finish: function () { - config.current = this; - if (config.requireExpects && this.expected === null) { - this.pushFailure('Expected number of assertions to be defined, but expect() was ' + 'not called.', this.stack); - } - else if (this.expected !== null && this.expected !== this.assertions.length) { - this.pushFailure('Expected ' + this.expected + ' assertions, but ' + this.assertions.length + ' were run', this.stack); - } - else if (this.expected === null && !this.assertions.length) { - this.pushFailure('Expected at least one assertion, but none were run - call ' + 'expect(0) to accept zero assertions.', this.stack); - } - var i, bad = 0; - this.runtime = now() - this.started; - config.stats.all += this.assertions.length; - config.moduleStats.all += this.assertions.length; - for (i = 0; i < this.assertions.length; i++) { - if (!this.assertions[i].result) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - runLoggingCallbacks('testDone', { - name: this.testName, - module: this.module.name, - skipped: !!this.skip, - failed: bad, - passed: this.assertions.length - bad, - total: this.assertions.length, - runtime: this.runtime, - assertions: this.assertions, - testId: this.testId, - source: this.stack, - duration: this.runtime, - }); - QUnit.reset(); - config.current = undefined; - }, - queue: function () { - var bad, test = this; - if (!this.valid()) { - return; - } - function run() { - synchronize([ - function () { - test.before(); - }, - test.hooks('beforeEach'), - function () { - test.run(); - }, - test.hooks('afterEach').reverse(), - function () { - test.after(); - }, - function () { - test.finish(); - }, - ]); - } - bad = - QUnit.config.reorder && - defined.sessionStorage && - +sessionStorage.getItem('qunit-test-' + this.module.name + '-' + this.testName); - if (bad) { - run(); - } - else { - synchronize(run, true); - } - }, - push: function (result, actual, expected, message, negative) { - var source, details = { - module: this.module.name, - name: this.testName, - result: result, - message: message, - actual: actual, - expected: expected, - testId: this.testId, - negative: negative || false, - runtime: now() - this.started, - }; - if (!result) { - source = sourceFromStacktrace(); - if (source) { - details.source = source; - } - } - runLoggingCallbacks('log', details); - this.assertions.push({ - result: !!result, - message: message, - }); - }, - pushFailure: function (message, source, actual) { - if (!(this instanceof Test)) { - throw new Error('pushFailure() assertion outside test context, was ' + sourceFromStacktrace(2)); - } - var details = { - module: this.module.name, - name: this.testName, - result: false, - message: message || 'error', - actual: actual || null, - testId: this.testId, - runtime: now() - this.started, - }; - if (source) { - details.source = source; - } - runLoggingCallbacks('log', details); - this.assertions.push({ - result: false, - message: message, - }); - }, - resolvePromise: function (promise, phase) { - var then, message, test = this; - if (promise != null) { - then = promise.then; - if (QUnit.objectType(then) === 'function') { - QUnit.stop(); - then.call(promise, function () { - QUnit.start(); - }, function (error) { - message = - 'Promise rejected ' + - (!phase ? 'during' : phase.replace(/Each$/, '')) + - ' ' + - test.testName + - ': ' + - (error.message || error); - test.pushFailure(message, extractStacktrace(error, 0)); - saveGlobal(); - QUnit.start(); - }); - } - } - }, - valid: function () { - var include, filter = config.filter && config.filter.toLowerCase(), module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(), fullName = (this.module.name + ': ' + this.testName).toLowerCase(); - if (this.callback && this.callback.validTest) { - return true; - } - if (config.testId.length > 0 && inArray(this.testId, config.testId) < 0) { - return false; - } - if (module && (!this.module.name || this.module.name.toLowerCase() !== module)) { - return false; - } - if (!filter) { - return true; - } - include = filter.charAt(0) !== '!'; - if (!include) { - filter = filter.slice(1); - } - if (fullName.indexOf(filter) !== -1) { - return include; - } - return !include; - }, - }; - QUnit.reset = function () { - if (!defined.document) { - return; - } - var fixture = defined.document && document.getElementById && document.getElementById('qunit-fixture'); - if (fixture) { - fixture.innerHTML = config.fixture; - } - }; - QUnit.pushFailure = function () { - if (!QUnit.config.current) { - throw new Error('pushFailure() assertion outside test context, in ' + sourceFromStacktrace(2)); - } - var currentTest = QUnit.config.current; - return currentTest.pushFailure.apply(currentTest, arguments); - }; - function generateHash(module, testName) { - var hex, i = 0, hash = 0, str = module + '\x1C' + testName, len = str.length; - for (; i < len; i++) { - hash = (hash << 5) - hash + str.charCodeAt(i); - hash |= 0; - } - hex = (0x100000000 + hash).toString(16); - if (hex.length < 8) { - hex = '0000000' + hex; - } - return hex.slice(-8); - } - function synchronize(callback, last) { - if (QUnit.objectType(callback) === 'array') { - while (callback.length) { - synchronize(callback.shift()); - } - return; - } - config.queue.push(callback); - if (config.autorun && !config.blocking) { - process(last); - } - } - function saveGlobal() { - config.pollution = []; - if (config.noglobals) { - for (var key in global) { - if (hasOwn.call(global, key)) { - if (/^qunit-test-output/.test(key)) { - continue; - } - config.pollution.push(key); - } - } - } - } - function checkPollution() { - var newGlobals, deletedGlobals, old = config.pollution; - saveGlobal(); - newGlobals = diff(config.pollution, old); - if (newGlobals.length > 0) { - QUnit.pushFailure('Introduced global variable(s): ' + newGlobals.join(', ')); - } - deletedGlobals = diff(old, config.pollution); - if (deletedGlobals.length > 0) { - QUnit.pushFailure('Deleted global variable(s): ' + deletedGlobals.join(', ')); - } - } - function asyncTest(testName, expected, callback) { - if (arguments.length === 2) { - callback = expected; - expected = null; - } - QUnit.test(testName, expected, callback, true); - } - function test(testName, expected, callback, async) { - var newTest; - if (arguments.length === 2) { - callback = expected; - expected = null; - } - newTest = new Test({ - testName: testName, - expected: expected, - async: async, - callback: callback, - }); - newTest.queue(); - } - function skip(testName) { - var test = new Test({ - testName: testName, - skip: true, - }); - test.queue(); - } - function Assert(testContext) { - this.test = testContext; - } - QUnit.assert = Assert.prototype = { - expect: function (asserts) { - if (arguments.length === 1) { - this.test.expected = asserts; - } - else { - return this.test.expected; - } - }, - async: function () { - var test = this.test, popped = false; - test.semaphore += 1; - test.usedAsync = true; - pauseProcessing(); - return function done() { - if (!popped) { - test.semaphore -= 1; - popped = true; - resumeProcessing(); - } - else { - test.pushFailure('Called the callback returned from `assert.async` more than once', sourceFromStacktrace(2)); - } - }; - }, - push: function () { - var assert = this, currentTest = (assert instanceof Assert && assert.test) || QUnit.config.current; - if (!currentTest) { - throw new Error('assertion outside test context, in ' + sourceFromStacktrace(2)); - } - if (currentTest.usedAsync === true && currentTest.semaphore === 0) { - currentTest.pushFailure('Assertion after the final `assert.async` was resolved', sourceFromStacktrace(2)); - } - if (!(assert instanceof Assert)) { - assert = currentTest.assert; - } - return assert.test.push.apply(assert.test, arguments); - }, - ok: function (result, message) { - message = - message || (result ? 'okay' : 'failed, expected argument to be truthy, was: ' + QUnit.dump.parse(result)); - this.push(!!result, result, true, message); - }, - notOk: function (result, message) { - message = - message || (!result ? 'okay' : 'failed, expected argument to be falsy, was: ' + QUnit.dump.parse(result)); - this.push(!result, result, false, message, true); - }, - equal: function (actual, expected, message) { - this.push(expected == actual, actual, expected, message); - }, - notEqual: function (actual, expected, message) { - this.push(expected != actual, actual, expected, message, true); - }, - propEqual: function (actual, expected, message) { - actual = objectValues(actual); - expected = objectValues(expected); - this.push(QUnit.equiv(actual, expected), actual, expected, message); - }, - notPropEqual: function (actual, expected, message) { - actual = objectValues(actual); - expected = objectValues(expected); - this.push(!QUnit.equiv(actual, expected), actual, expected, message, true); - }, - deepEqual: function (actual, expected, message) { - this.push(QUnit.equiv(actual, expected), actual, expected, message); - }, - notDeepEqual: function (actual, expected, message) { - this.push(!QUnit.equiv(actual, expected), actual, expected, message, true); - }, - strictEqual: function (actual, expected, message) { - this.push(expected === actual, actual, expected, message); - }, - notStrictEqual: function (actual, expected, message) { - this.push(expected !== actual, actual, expected, message, true); - }, - throws: function (block, expected, message) { - var actual, expectedType, expectedOutput = expected, ok = false, currentTest = (this instanceof Assert && this.test) || QUnit.config.current; - if (message == null && typeof expected === 'string') { - message = expected; - expected = null; - } - currentTest.ignoreGlobalErrors = true; - try { - block.call(currentTest.testEnvironment); - } - catch (e) { - actual = e; - } - currentTest.ignoreGlobalErrors = false; - if (actual) { - expectedType = QUnit.objectType(expected); - if (!expected) { - ok = true; - expectedOutput = null; - } - else if (expectedType === 'regexp') { - ok = expected.test(errorString(actual)); - } - else if (expectedType === 'string') { - ok = expected === errorString(actual); - } - else if (expectedType === 'function' && actual instanceof expected) { - ok = true; - } - else if (expectedType === 'object') { - ok = - actual instanceof expected.constructor && - actual.name === expected.name && - actual.message === expected.message; - } - else if (expectedType === 'function' && expected.call({}, actual) === true) { - expectedOutput = null; - ok = true; - } - } - currentTest.assert.push(ok, actual, expectedOutput, message); - }, - }; - (function () { - Assert.prototype.raises = Assert.prototype['throws']; - })(); - function errorString(error) { - var name, message, resultErrorString = error.toString(); - if (resultErrorString.substring(0, 7) === '[object') { - name = error.name ? error.name.toString() : 'Error'; - message = error.message ? error.message.toString() : ''; - if (name && message) { - return name + ': ' + message; - } - else if (name) { - return name; - } - else if (message) { - return message; - } - else { - return 'Error'; - } - } - else { - return resultErrorString; - } - } - QUnit.equiv = (function () { - function bindCallbacks(o, callbacks, args) { - var prop = QUnit.objectType(o); - if (prop) { - if (QUnit.objectType(callbacks[prop]) === 'function') { - return callbacks[prop].apply(callbacks, args); - } - else { - return callbacks[prop]; - } - } - } - var innerEquiv, callers = [], parents = [], parentsB = [], getProto = Object.getPrototypeOf || - function (obj) { - return obj.__proto__; - }, callbacks = (function () { - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - return a == b; - } - else { - return a === b; - } - } - return { - string: useStrictEquality, - boolean: useStrictEquality, - number: useStrictEquality, - null: useStrictEquality, - undefined: useStrictEquality, - nan: function (b) { - return isNaN(b); - }, - date: function (b, a) { - return QUnit.objectType(b) === 'date' && a.valueOf() === b.valueOf(); - }, - regexp: function (b, a) { - return (QUnit.objectType(b) === 'regexp' && - a.source === b.source && - a.global === b.global && - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline && - a.sticky === b.sticky); - }, - function: function () { - var caller = callers[callers.length - 1]; - return caller !== Object && typeof caller !== 'undefined'; - }, - array: function (b, a) { - var i, j, len, loop, aCircular, bCircular; - if (QUnit.objectType(b) !== 'array') { - return false; - } - len = a.length; - if (len !== b.length) { - return false; - } - parents.push(a); - parentsB.push(b); - for (i = 0; i < len; i++) { - loop = false; - for (j = 0; j < parents.length; j++) { - aCircular = parents[j] === a[i]; - bCircular = parentsB[j] === b[i]; - if (aCircular || bCircular) { - if (a[i] === b[i] || (aCircular && bCircular)) { - loop = true; - } - else { - parents.pop(); - parentsB.pop(); - return false; - } - } - } - if (!loop && !innerEquiv(a[i], b[i])) { - parents.pop(); - parentsB.pop(); - return false; - } - } - parents.pop(); - parentsB.pop(); - return true; - }, - set: function (b, a) { - var aArray, bArray; - if (QUnit.objectType(b) !== 'set') { - return false; - } - aArray = []; - a.forEach(function (v) { - aArray.push(v); - }); - bArray = []; - b.forEach(function (v) { - bArray.push(v); - }); - return innerEquiv(bArray, aArray); - }, - map: function (b, a) { - var aArray, bArray; - if (QUnit.objectType(b) !== 'map') { - return false; - } - aArray = []; - a.forEach(function (v, k) { - aArray.push([k, v]); - }); - bArray = []; - b.forEach(function (v, k) { - bArray.push([k, v]); - }); - return innerEquiv(bArray, aArray); - }, - object: function (b, a) { - var i, j, loop, aCircular, bCircular, eq = true, aProperties = [], bProperties = []; - if (a.constructor !== b.constructor) { - if (!((getProto(a) === null && getProto(b) === Object.prototype) || - (getProto(b) === null && getProto(a) === Object.prototype))) { - return false; - } - } - callers.push(a.constructor); - parents.push(a); - parentsB.push(b); - for (i in a) { - loop = false; - for (j = 0; j < parents.length; j++) { - aCircular = parents[j] === a[i]; - bCircular = parentsB[j] === b[i]; - if (aCircular || bCircular) { - if (a[i] === b[i] || (aCircular && bCircular)) { - loop = true; - } - else { - eq = false; - break; - } - } - } - aProperties.push(i); - if (!loop && !innerEquiv(a[i], b[i])) { - eq = false; - break; - } - } - parents.pop(); - parentsB.pop(); - callers.pop(); - for (i in b) { - bProperties.push(i); - } - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - }, - }; - })(); - innerEquiv = function () { - var args = [].slice.apply(arguments); - if (args.length < 2) { - return true; - } - return ((function (a, b) { - if (a === b) { - return true; - } - else if (a === null || - b === null || - typeof a === 'undefined' || - typeof b === 'undefined' || - QUnit.objectType(a) !== QUnit.objectType(b)) { - return false; - } - else { - return bindCallbacks(a, callbacks, [b, a]); - } - })(args[0], args[1]) && innerEquiv.apply(this, args.splice(1, args.length - 1))); - }; - return innerEquiv; - })(); - QUnit.dump = (function () { - function quote(str) { - return '"' + str.toString().replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'; - } - function literal(o) { - return o + ''; - } - function join(pre, arr, post) { - var s = dump.separator(), base = dump.indent(), inner = dump.indent(1); - if (arr.join) { - arr = arr.join(',' + s + inner); - } - if (!arr) { - return pre + post; - } - return [pre, inner + arr, base + post].join(s); - } - function array(arr, stack) { - var i = arr.length, ret = new Array(i); - if (dump.maxDepth && dump.depth > dump.maxDepth) { - return '[object Array]'; - } - this.up(); - while (i--) { - ret[i] = this.parse(arr[i], undefined, stack); - } - this.down(); - return join('[', ret, ']'); - } - var reName = /^function (\w+)/, dump = { - parse: function (obj, objType, stack) { - stack = stack || []; - var res, parser, parserType, inStack = inArray(obj, stack); - if (inStack !== -1) { - return 'recursion(' + (inStack - stack.length) + ')'; - } - objType = objType || this.typeOf(obj); - parser = this.parsers[objType]; - parserType = typeof parser; - if (parserType === 'function') { - stack.push(obj); - res = parser.call(this, obj, stack); - stack.pop(); - return res; - } - return parserType === 'string' ? parser : this.parsers.error; - }, - typeOf: function (obj) { - var type; - if (obj === null) { - type = 'null'; - } - else if (typeof obj === 'undefined') { - type = 'undefined'; - } - else if (QUnit.is('regexp', obj)) { - type = 'regexp'; - } - else if (QUnit.is('date', obj)) { - type = 'date'; - } - else if (QUnit.is('function', obj)) { - type = 'function'; - } - else if (obj.setInterval !== undefined && obj.document !== undefined && obj.nodeType === undefined) { - type = 'window'; - } - else if (obj.nodeType === 9) { - type = 'document'; - } - else if (obj.nodeType) { - type = 'node'; - } - else if (toString.call(obj) === '[object Array]' || - (typeof obj.length === 'number' && - obj.item !== undefined && - (obj.length ? obj.item(0) === obj[0] : obj.item(0) === null && obj[0] === undefined))) { - type = 'array'; - } - else if (obj.constructor === Error.prototype.constructor) { - type = 'error'; - } - else { - type = typeof obj; - } - return type; - }, - separator: function () { - return this.multiline ? (this.HTML ? '
' : '\n') : this.HTML ? ' ' : ' '; - }, - indent: function (extra) { - if (!this.multiline) { - return ''; - } - var chr = this.indentChar; - if (this.HTML) { - chr = chr.replace(/\t/g, ' ').replace(/ /g, ' '); - } - return new Array(this.depth + (extra || 0)).join(chr); - }, - up: function (a) { - this.depth += a || 1; - }, - down: function (a) { - this.depth -= a || 1; - }, - setParser: function (name, parser) { - this.parsers[name] = parser; - }, - quote: quote, - literal: literal, - join: join, - depth: 1, - maxDepth: QUnit.config.maxDepth, - parsers: { - window: '[Window]', - document: '[Document]', - error: function (error) { - return 'Error("' + error.message + '")'; - }, - unknown: '[Unknown]', - null: 'null', - undefined: 'undefined', - function: function (fn) { - var ret = 'function', name = 'name' in fn ? fn.name : (reName.exec(fn) || [])[1]; - if (name) { - ret += ' ' + name; - } - ret += '( '; - ret = [ret, dump.parse(fn, 'functionArgs'), '){'].join(''); - return join(ret, dump.parse(fn, 'functionCode'), '}'); - }, - array: array, - nodelist: array, - arguments: array, - object: function (map, stack) { - var keys, key, val, i, nonEnumerableProperties, ret = []; - if (dump.maxDepth && dump.depth > dump.maxDepth) { - return '[object Object]'; - } - dump.up(); - keys = []; - for (key in map) { - keys.push(key); - } - nonEnumerableProperties = ['message', 'name']; - for (i in nonEnumerableProperties) { - key = nonEnumerableProperties[i]; - if (key in map && inArray(key, keys) < 0) { - keys.push(key); - } - } - keys.sort(); - for (i = 0; i < keys.length; i++) { - key = keys[i]; - val = map[key]; - ret.push(dump.parse(key, 'key') + ': ' + dump.parse(val, undefined, stack)); - } - dump.down(); - return join('{', ret, '}'); - }, - node: function (node) { - var len, i, val, open = dump.HTML ? '<' : '<', close = dump.HTML ? '>' : '>', tag = node.nodeName.toLowerCase(), ret = open + tag, attrs = node.attributes; - if (attrs) { - for (i = 0, len = attrs.length; i < len; i++) { - val = attrs[i].nodeValue; - if (val && val !== 'inherit') { - ret += ' ' + attrs[i].nodeName + '=' + dump.parse(val, 'attribute'); - } - } - } - ret += close; - if (node.nodeType === 3 || node.nodeType === 4) { - ret += node.nodeValue; - } - return ret + open + '/' + tag + close; - }, - functionArgs: function (fn) { - var args, l = fn.length; - if (!l) { - return ''; - } - args = new Array(l); - while (l--) { - args[l] = String.fromCharCode(97 + l); - } - return ' ' + args.join(', ') + ' '; - }, - key: quote, - functionCode: '[code]', - attribute: quote, - string: quote, - date: quote, - regexp: literal, - number: literal, - boolean: literal, - }, - HTML: false, - indentChar: ' ', - multiline: true, - }; - return dump; - })(); - QUnit.jsDump = QUnit.dump; - if (defined.document) { - (function () { - var i, assertions = Assert.prototype; - function applyCurrent(current) { - return function () { - var assert = new Assert(QUnit.config.current); - current.apply(assert, arguments); - }; - } - for (i in assertions) { - QUnit[i] = applyCurrent(assertions[i]); - } - })(); - (function () { - var i, l, keys = [ - 'test', - 'module', - 'expect', - 'asyncTest', - 'start', - 'stop', - 'ok', - 'notOk', - 'equal', - 'notEqual', - 'propEqual', - 'notPropEqual', - 'deepEqual', - 'notDeepEqual', - 'strictEqual', - 'notStrictEqual', - 'throws', - ]; - for (i = 0, l = keys.length; i < l; i++) { - window[keys[i]] = QUnit[keys[i]]; - } - })(); - window.QUnit = QUnit; - } - if (typeof module !== 'undefined' && module && module.exports) { - module.exports = QUnit; - module.exports.QUnit = QUnit; - } - if (typeof exports !== 'undefined' && exports) { - exports.QUnit = QUnit; - } - if (typeof define === 'function' && define.amd) { - define(function () { - return QUnit; - }); - QUnit.config.autostart = false; - } - QUnit.diff = (function () { - function DiffMatchPatch() { } - var DIFF_DELETE = -1, DIFF_INSERT = 1, DIFF_EQUAL = 0; - DiffMatchPatch.prototype.DiffMain = function (text1, text2, optChecklines) { - var deadline, checklines, commonlength, commonprefix, commonsuffix, diffs; - deadline = new Date().getTime() + 1000; - if (text1 === null || text2 === null) { - throw new Error('Null input. (DiffMain)'); - } - if (text1 === text2) { - if (text1) { - return [[DIFF_EQUAL, text1]]; - } - return []; - } - if (typeof optChecklines === 'undefined') { - optChecklines = true; - } - checklines = optChecklines; - commonlength = this.diffCommonPrefix(text1, text2); - commonprefix = text1.substring(0, commonlength); - text1 = text1.substring(commonlength); - text2 = text2.substring(commonlength); - commonlength = this.diffCommonSuffix(text1, text2); - commonsuffix = text1.substring(text1.length - commonlength); - text1 = text1.substring(0, text1.length - commonlength); - text2 = text2.substring(0, text2.length - commonlength); - diffs = this.diffCompute(text1, text2, checklines, deadline); - if (commonprefix) { - diffs.unshift([DIFF_EQUAL, commonprefix]); - } - if (commonsuffix) { - diffs.push([DIFF_EQUAL, commonsuffix]); - } - this.diffCleanupMerge(diffs); - return diffs; - }; - DiffMatchPatch.prototype.diffCleanupEfficiency = function (diffs) { - var changes, equalities, equalitiesLength, lastequality, pointer, preIns, preDel, postIns, postDel; - changes = false; - equalities = []; - equalitiesLength = 0; - lastequality = null; - pointer = 0; - preIns = false; - preDel = false; - postIns = false; - postDel = false; - while (pointer < diffs.length) { - if (diffs[pointer][0] === DIFF_EQUAL) { - if (diffs[pointer][1].length < 4 && (postIns || postDel)) { - equalities[equalitiesLength++] = pointer; - preIns = postIns; - preDel = postDel; - lastequality = diffs[pointer][1]; - } - else { - equalitiesLength = 0; - lastequality = null; - } - postIns = postDel = false; - } - else { - if (diffs[pointer][0] === DIFF_DELETE) { - postDel = true; - } - else { - postIns = true; - } - if (lastequality && - ((preIns && preDel && postIns && postDel) || - (lastequality.length < 2 && preIns + preDel + postIns + postDel === 3))) { - diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); - diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; - equalitiesLength--; - lastequality = null; - if (preIns && preDel) { - postIns = postDel = true; - equalitiesLength = 0; - } - else { - equalitiesLength--; - pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; - postIns = postDel = false; - } - changes = true; - } - } - pointer++; - } - if (changes) { - this.diffCleanupMerge(diffs); - } - }; - DiffMatchPatch.prototype.diffPrettyHtml = function (diffs) { - var op, data, x, html = []; - for (x = 0; x < diffs.length; x++) { - op = diffs[x][0]; - data = diffs[x][1]; - switch (op) { - case DIFF_INSERT: - html[x] = '' + data + ''; - break; - case DIFF_DELETE: - html[x] = '' + data + ''; - break; - case DIFF_EQUAL: - html[x] = '' + data + ''; - break; - } - } - return html.join(''); - }; - DiffMatchPatch.prototype.diffCommonPrefix = function (text1, text2) { - var pointermid, pointermax, pointermin, pointerstart; - if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) { - return 0; - } - pointermin = 0; - pointermax = Math.min(text1.length, text2.length); - pointermid = pointermax; - pointerstart = 0; - while (pointermin < pointermid) { - if (text1.substring(pointerstart, pointermid) === text2.substring(pointerstart, pointermid)) { - pointermin = pointermid; - pointerstart = pointermin; - } - else { - pointermax = pointermid; - } - pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); - } - return pointermid; - }; - DiffMatchPatch.prototype.diffCommonSuffix = function (text1, text2) { - var pointermid, pointermax, pointermin, pointerend; - if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) { - return 0; - } - pointermin = 0; - pointermax = Math.min(text1.length, text2.length); - pointermid = pointermax; - pointerend = 0; - while (pointermin < pointermid) { - if (text1.substring(text1.length - pointermid, text1.length - pointerend) === - text2.substring(text2.length - pointermid, text2.length - pointerend)) { - pointermin = pointermid; - pointerend = pointermin; - } - else { - pointermax = pointermid; - } - pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin); - } - return pointermid; - }; - DiffMatchPatch.prototype.diffCompute = function (text1, text2, checklines, deadline) { - var diffs, longtext, shorttext, i, hm, text1A, text2A, text1B, text2B, midCommon, diffsA, diffsB; - if (!text1) { - return [[DIFF_INSERT, text2]]; - } - if (!text2) { - return [[DIFF_DELETE, text1]]; - } - longtext = text1.length > text2.length ? text1 : text2; - shorttext = text1.length > text2.length ? text2 : text1; - i = longtext.indexOf(shorttext); - if (i !== -1) { - diffs = [ - [DIFF_INSERT, longtext.substring(0, i)], - [DIFF_EQUAL, shorttext], - [DIFF_INSERT, longtext.substring(i + shorttext.length)], - ]; - if (text1.length > text2.length) { - diffs[0][0] = diffs[2][0] = DIFF_DELETE; - } - return diffs; - } - if (shorttext.length === 1) { - return [ - [DIFF_DELETE, text1], - [DIFF_INSERT, text2], - ]; - } - hm = this.diffHalfMatch(text1, text2); - if (hm) { - text1A = hm[0]; - text1B = hm[1]; - text2A = hm[2]; - text2B = hm[3]; - midCommon = hm[4]; - diffsA = this.DiffMain(text1A, text2A, checklines, deadline); - diffsB = this.DiffMain(text1B, text2B, checklines, deadline); - return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB); - } - if (checklines && text1.length > 100 && text2.length > 100) { - return this.diffLineMode(text1, text2, deadline); - } - return this.diffBisect(text1, text2, deadline); - }; - DiffMatchPatch.prototype.diffHalfMatch = function (text1, text2) { - var longtext, shorttext, dmp, text1A, text2B, text2A, text1B, midCommon, hm1, hm2, hm; - longtext = text1.length > text2.length ? text1 : text2; - shorttext = text1.length > text2.length ? text2 : text1; - if (longtext.length < 4 || shorttext.length * 2 < longtext.length) { - return null; - } - dmp = this; - function diffHalfMatchI(longtext, shorttext, i) { - var seed, j, bestCommon, prefixLength, suffixLength, bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB; - seed = longtext.substring(i, i + Math.floor(longtext.length / 4)); - j = -1; - bestCommon = ''; - while ((j = shorttext.indexOf(seed, j + 1)) !== -1) { - prefixLength = dmp.diffCommonPrefix(longtext.substring(i), shorttext.substring(j)); - suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i), shorttext.substring(0, j)); - if (bestCommon.length < suffixLength + prefixLength) { - bestCommon = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength); - bestLongtextA = longtext.substring(0, i - suffixLength); - bestLongtextB = longtext.substring(i + prefixLength); - bestShorttextA = shorttext.substring(0, j - suffixLength); - bestShorttextB = shorttext.substring(j + prefixLength); - } - } - if (bestCommon.length * 2 >= longtext.length) { - return [bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB, bestCommon]; - } - else { - return null; - } - } - hm1 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 4)); - hm2 = diffHalfMatchI(longtext, shorttext, Math.ceil(longtext.length / 2)); - if (!hm1 && !hm2) { - return null; - } - else if (!hm2) { - hm = hm1; - } - else if (!hm1) { - hm = hm2; - } - else { - hm = hm1[4].length > hm2[4].length ? hm1 : hm2; - } - text1A, text1B, text2A, text2B; - if (text1.length > text2.length) { - text1A = hm[0]; - text1B = hm[1]; - text2A = hm[2]; - text2B = hm[3]; - } - else { - text2A = hm[0]; - text2B = hm[1]; - text1A = hm[2]; - text1B = hm[3]; - } - midCommon = hm[4]; - return [text1A, text1B, text2A, text2B, midCommon]; - }; - DiffMatchPatch.prototype.diffLineMode = function (text1, text2, deadline) { - var a, diffs, linearray, pointer, countInsert, countDelete, textInsert, textDelete, j; - a = this.diffLinesToChars(text1, text2); - text1 = a.chars1; - text2 = a.chars2; - linearray = a.lineArray; - diffs = this.DiffMain(text1, text2, false, deadline); - this.diffCharsToLines(diffs, linearray); - this.diffCleanupSemantic(diffs); - diffs.push([DIFF_EQUAL, '']); - pointer = 0; - countDelete = 0; - countInsert = 0; - textDelete = ''; - textInsert = ''; - while (pointer < diffs.length) { - switch (diffs[pointer][0]) { - case DIFF_INSERT: - countInsert++; - textInsert += diffs[pointer][1]; - break; - case DIFF_DELETE: - countDelete++; - textDelete += diffs[pointer][1]; - break; - case DIFF_EQUAL: - if (countDelete >= 1 && countInsert >= 1) { - diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert); - pointer = pointer - countDelete - countInsert; - a = this.DiffMain(textDelete, textInsert, false, deadline); - for (j = a.length - 1; j >= 0; j--) { - diffs.splice(pointer, 0, a[j]); - } - pointer = pointer + a.length; - } - countInsert = 0; - countDelete = 0; - textDelete = ''; - textInsert = ''; - break; - } - pointer++; - } - diffs.pop(); - return diffs; - }; - DiffMatchPatch.prototype.diffBisect = function (text1, text2, deadline) { - var text1Length, text2Length, maxD, vOffset, vLength, v1, v2, x, delta, front, k1start, k1end, k2start, k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2; - text1Length = text1.length; - text2Length = text2.length; - maxD = Math.ceil((text1Length + text2Length) / 2); - vOffset = maxD; - vLength = 2 * maxD; - v1 = new Array(vLength); - v2 = new Array(vLength); - for (x = 0; x < vLength; x++) { - v1[x] = -1; - v2[x] = -1; - } - v1[vOffset + 1] = 0; - v2[vOffset + 1] = 0; - delta = text1Length - text2Length; - front = delta % 2 !== 0; - k1start = 0; - k1end = 0; - k2start = 0; - k2end = 0; - for (d = 0; d < maxD; d++) { - if (new Date().getTime() > deadline) { - break; - } - for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) { - k1Offset = vOffset + k1; - if (k1 === -d || (k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1])) { - x1 = v1[k1Offset + 1]; - } - else { - x1 = v1[k1Offset - 1] + 1; - } - y1 = x1 - k1; - while (x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1)) { - x1++; - y1++; - } - v1[k1Offset] = x1; - if (x1 > text1Length) { - k1end += 2; - } - else if (y1 > text2Length) { - k1start += 2; - } - else if (front) { - k2Offset = vOffset + delta - k1; - if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) { - x2 = text1Length - v2[k2Offset]; - if (x1 >= x2) { - return this.diffBisectSplit(text1, text2, x1, y1, deadline); - } - } - } - } - for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) { - k2Offset = vOffset + k2; - if (k2 === -d || (k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1])) { - x2 = v2[k2Offset + 1]; - } - else { - x2 = v2[k2Offset - 1] + 1; - } - y2 = x2 - k2; - while (x2 < text1Length && - y2 < text2Length && - text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1)) { - x2++; - y2++; - } - v2[k2Offset] = x2; - if (x2 > text1Length) { - k2end += 2; - } - else if (y2 > text2Length) { - k2start += 2; - } - else if (!front) { - k1Offset = vOffset + delta - k2; - if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) { - x1 = v1[k1Offset]; - y1 = vOffset + x1 - k1Offset; - x2 = text1Length - x2; - if (x1 >= x2) { - return this.diffBisectSplit(text1, text2, x1, y1, deadline); - } - } - } - } - } - return [ - [DIFF_DELETE, text1], - [DIFF_INSERT, text2], - ]; - }; - DiffMatchPatch.prototype.diffBisectSplit = function (text1, text2, x, y, deadline) { - var text1a, text1b, text2a, text2b, diffs, diffsb; - text1a = text1.substring(0, x); - text2a = text2.substring(0, y); - text1b = text1.substring(x); - text2b = text2.substring(y); - diffs = this.DiffMain(text1a, text2a, false, deadline); - diffsb = this.DiffMain(text1b, text2b, false, deadline); - return diffs.concat(diffsb); - }; - DiffMatchPatch.prototype.diffCleanupSemantic = function (diffs) { - var changes, equalities, equalitiesLength, lastequality, pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1, lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2; - changes = false; - equalities = []; - equalitiesLength = 0; - lastequality = null; - pointer = 0; - lengthInsertions1 = 0; - lengthDeletions1 = 0; - lengthInsertions2 = 0; - lengthDeletions2 = 0; - while (pointer < diffs.length) { - if (diffs[pointer][0] === DIFF_EQUAL) { - equalities[equalitiesLength++] = pointer; - lengthInsertions1 = lengthInsertions2; - lengthDeletions1 = lengthDeletions2; - lengthInsertions2 = 0; - lengthDeletions2 = 0; - lastequality = diffs[pointer][1]; - } - else { - if (diffs[pointer][0] === DIFF_INSERT) { - lengthInsertions2 += diffs[pointer][1].length; - } - else { - lengthDeletions2 += diffs[pointer][1].length; - } - if (lastequality && - lastequality.length <= Math.max(lengthInsertions1, lengthDeletions1) && - lastequality.length <= Math.max(lengthInsertions2, lengthDeletions2)) { - diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]); - diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT; - equalitiesLength--; - equalitiesLength--; - pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1; - lengthInsertions1 = 0; - lengthDeletions1 = 0; - lengthInsertions2 = 0; - lengthDeletions2 = 0; - lastequality = null; - changes = true; - } - } - pointer++; - } - if (changes) { - this.diffCleanupMerge(diffs); - } - pointer = 1; - while (pointer < diffs.length) { - if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) { - deletion = diffs[pointer - 1][1]; - insertion = diffs[pointer][1]; - overlapLength1 = this.diffCommonOverlap(deletion, insertion); - overlapLength2 = this.diffCommonOverlap(insertion, deletion); - if (overlapLength1 >= overlapLength2) { - if (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) { - diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]); - diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1); - diffs[pointer + 1][1] = insertion.substring(overlapLength1); - pointer++; - } - } - else { - if (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) { - diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]); - diffs[pointer - 1][0] = DIFF_INSERT; - diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2); - diffs[pointer + 1][0] = DIFF_DELETE; - diffs[pointer + 1][1] = deletion.substring(overlapLength2); - pointer++; - } - } - pointer++; - } - pointer++; - } - }; - DiffMatchPatch.prototype.diffCommonOverlap = function (text1, text2) { - var text1Length, text2Length, textLength, best, length, pattern, found; - text1Length = text1.length; - text2Length = text2.length; - if (text1Length === 0 || text2Length === 0) { - return 0; - } - if (text1Length > text2Length) { - text1 = text1.substring(text1Length - text2Length); - } - else if (text1Length < text2Length) { - text2 = text2.substring(0, text1Length); - } - textLength = Math.min(text1Length, text2Length); - if (text1 === text2) { - return textLength; - } - best = 0; - length = 1; - while (true) { - pattern = text1.substring(textLength - length); - found = text2.indexOf(pattern); - if (found === -1) { - return best; - } - length += found; - if (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) { - best = length; - length++; - } - } - }; - DiffMatchPatch.prototype.diffLinesToChars = function (text1, text2) { - var lineArray, lineHash, chars1, chars2; - lineArray = []; - lineHash = {}; - lineArray[0] = ''; - function diffLinesToCharsMunge(text) { - var chars, lineStart, lineEnd, lineArrayLength, line; - chars = ''; - lineStart = 0; - lineEnd = -1; - lineArrayLength = lineArray.length; - while (lineEnd < text.length - 1) { - lineEnd = text.indexOf('\n', lineStart); - if (lineEnd === -1) { - lineEnd = text.length - 1; - } - line = text.substring(lineStart, lineEnd + 1); - lineStart = lineEnd + 1; - if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== undefined) { - chars += String.fromCharCode(lineHash[line]); - } - else { - chars += String.fromCharCode(lineArrayLength); - lineHash[line] = lineArrayLength; - lineArray[lineArrayLength++] = line; - } - } - return chars; - } - chars1 = diffLinesToCharsMunge(text1); - chars2 = diffLinesToCharsMunge(text2); - return { - chars1: chars1, - chars2: chars2, - lineArray: lineArray, - }; - }; - DiffMatchPatch.prototype.diffCharsToLines = function (diffs, lineArray) { - var x, chars, text, y; - for (x = 0; x < diffs.length; x++) { - chars = diffs[x][1]; - text = []; - for (y = 0; y < chars.length; y++) { - text[y] = lineArray[chars.charCodeAt(y)]; - } - diffs[x][1] = text.join(''); - } - }; - DiffMatchPatch.prototype.diffCleanupMerge = function (diffs) { - var pointer, countDelete, countInsert, textInsert, textDelete, commonlength, changes, diffPointer, position; - diffs.push([DIFF_EQUAL, '']); - pointer = 0; - countDelete = 0; - countInsert = 0; - textDelete = ''; - textInsert = ''; - commonlength; - while (pointer < diffs.length) { - switch (diffs[pointer][0]) { - case DIFF_INSERT: - countInsert++; - textInsert += diffs[pointer][1]; - pointer++; - break; - case DIFF_DELETE: - countDelete++; - textDelete += diffs[pointer][1]; - pointer++; - break; - case DIFF_EQUAL: - if (countDelete + countInsert > 1) { - if (countDelete !== 0 && countInsert !== 0) { - commonlength = this.diffCommonPrefix(textInsert, textDelete); - if (commonlength !== 0) { - if (pointer - countDelete - countInsert > 0 && - diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL) { - diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(0, commonlength); - } - else { - diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]); - pointer++; - } - textInsert = textInsert.substring(commonlength); - textDelete = textDelete.substring(commonlength); - } - commonlength = this.diffCommonSuffix(textInsert, textDelete); - if (commonlength !== 0) { - diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1]; - textInsert = textInsert.substring(0, textInsert.length - commonlength); - textDelete = textDelete.substring(0, textDelete.length - commonlength); - } - } - if (countDelete === 0) { - diffs.splice(pointer - countInsert, countDelete + countInsert, [DIFF_INSERT, textInsert]); - } - else if (countInsert === 0) { - diffs.splice(pointer - countDelete, countDelete + countInsert, [DIFF_DELETE, textDelete]); - } - else { - diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert, [DIFF_DELETE, textDelete], [DIFF_INSERT, textInsert]); - } - pointer = pointer - countDelete - countInsert + (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1; - } - else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) { - diffs[pointer - 1][1] += diffs[pointer][1]; - diffs.splice(pointer, 1); - } - else { - pointer++; - } - countInsert = 0; - countDelete = 0; - textDelete = ''; - textInsert = ''; - break; - } - } - if (diffs[diffs.length - 1][1] === '') { - diffs.pop(); - } - changes = false; - pointer = 1; - while (pointer < diffs.length - 1) { - if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) { - diffPointer = diffs[pointer][1]; - position = diffPointer.substring(diffPointer.length - diffs[pointer - 1][1].length); - if (position === diffs[pointer - 1][1]) { - diffs[pointer][1] = - diffs[pointer - 1][1] + - diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length); - diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1]; - diffs.splice(pointer - 1, 1); - changes = true; - } - else if (diffPointer.substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1]) { - diffs[pointer - 1][1] += diffs[pointer + 1][1]; - diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1]; - diffs.splice(pointer + 1, 1); - changes = true; - } - } - pointer++; - } - if (changes) { - this.diffCleanupMerge(diffs); - } - }; - return function (o, n) { - var diff, output, text; - diff = new DiffMatchPatch(); - output = diff.DiffMain(o, n); - diff.diffCleanupEfficiency(output); - text = diff.diffPrettyHtml(output); - return text; - }; - })(); -})((function () { - return this; -})()); -(function () { - if (typeof window === 'undefined' || !window.document) { - return; - } - QUnit.init = function () { - var tests, banner, result, qunit, config = QUnit.config; - config.stats = { all: 0, bad: 0 }; - config.moduleStats = { all: 0, bad: 0 }; - config.started = 0; - config.updateRate = 1000; - config.blocking = false; - config.autostart = true; - config.autorun = false; - config.filter = ''; - config.queue = []; - if (typeof window === 'undefined') { - return; - } - qunit = id('qunit'); - if (qunit) { - qunit.innerHTML = - "

" + - escapeText(document.title) + - '

' + - "

" + - "
" + - "

" + - "
    "; - } - tests = id('qunit-tests'); - banner = id('qunit-banner'); - result = id('qunit-testresult'); - if (tests) { - tests.innerHTML = ''; - } - if (banner) { - banner.className = ''; - } - if (result) { - result.parentNode.removeChild(result); - } - if (tests) { - result = document.createElement('p'); - result.id = 'qunit-testresult'; - result.className = 'result'; - tests.parentNode.insertBefore(result, tests); - result.innerHTML = 'Running...
     '; - } - }; - var config = QUnit.config, hasOwn = Object.prototype.hasOwnProperty, defined = { - document: window.document !== undefined, - sessionStorage: (function () { - var x = 'qunit-test-string'; - try { - sessionStorage.setItem(x, x); - sessionStorage.removeItem(x); - return true; - } - catch (e) { - return false; - } - })(), - }, modulesList = []; - function escapeText(s) { - if (!s) { - return ''; - } - s = s + ''; - return s.replace(/['"<>&]/g, function (s) { - switch (s) { - case "'": - return '''; - case '"': - return '"'; - case '<': - return '<'; - case '>': - return '>'; - case '&': - return '&'; - } - }); - } - function addEvent(elem, type, fn) { - if (elem.addEventListener) { - elem.addEventListener(type, fn, false); - } - else if (elem.attachEvent) { - elem.attachEvent('on' + type, function () { - var event = window.event; - if (!event.target) { - event.target = event.srcElement || document; - } - fn.call(elem, event); - }); - } - } - function addEvents(elems, type, fn) { - var i = elems.length; - while (i--) { - addEvent(elems[i], type, fn); - } - } - function hasClass(elem, name) { - return (' ' + elem.className + ' ').indexOf(' ' + name + ' ') >= 0; - } - function addClass(elem, name) { - if (!hasClass(elem, name)) { - elem.className += (elem.className ? ' ' : '') + name; - } - } - function toggleClass(elem, name) { - if (hasClass(elem, name)) { - removeClass(elem, name); - } - else { - addClass(elem, name); - } - } - function removeClass(elem, name) { - var set = ' ' + elem.className + ' '; - while (set.indexOf(' ' + name + ' ') >= 0) { - set = set.replace(' ' + name + ' ', ' '); - } - elem.className = typeof set.trim === 'function' ? set.trim() : set.replace(/^\s+|\s+$/g, ''); - } - function id(name) { - return defined.document && document.getElementById && document.getElementById(name); - } - function getUrlConfigHtml() { - var i, j, val, escaped, escapedTooltip, selection = false, len = config.urlConfig.length, urlConfigHtml = ''; - for (i = 0; i < len; i++) { - val = config.urlConfig[i]; - if (typeof val === 'string') { - val = { - id: val, - label: val, - }; - } - escaped = escapeText(val.id); - escapedTooltip = escapeText(val.tooltip); - if (config[val.id] === undefined) { - config[val.id] = QUnit.urlParams[val.id]; - } - if (!val.value || typeof val.value === 'string') { - urlConfigHtml += - "'; - } - else { - urlConfigHtml += - "'; - } - } - return urlConfigHtml; - } - function toolbarChanged() { - var updatedUrl, value, field = this, params = {}; - if ('selectedIndex' in field) { - value = field.options[field.selectedIndex].value || undefined; - } - else { - value = field.checked ? field.defaultValue || true : undefined; - } - params[field.name] = value; - updatedUrl = setUrl(params); - if ('hidepassed' === field.name && 'replaceState' in window.history) { - config[field.name] = value || false; - if (value) { - addClass(id('qunit-tests'), 'hidepass'); - } - else { - removeClass(id('qunit-tests'), 'hidepass'); - } - window.history.replaceState(null, '', updatedUrl); - } - else { - window.location = updatedUrl; - } - } - function setUrl(params) { - var key, querystring = '?'; - params = QUnit.extend(QUnit.extend({}, QUnit.urlParams), params); - for (key in params) { - if (hasOwn.call(params, key)) { - if (params[key] === undefined) { - continue; - } - querystring += encodeURIComponent(key); - if (params[key] !== true) { - querystring += '=' + encodeURIComponent(params[key]); - } - querystring += '&'; - } - } - return location.protocol + '//' + location.host + location.pathname + querystring.slice(0, -1); - } - function applyUrlParams() { - var selectedModule, modulesList = id('qunit-modulefilter'), filter = id('qunit-filter-input').value; - selectedModule = modulesList ? decodeURIComponent(modulesList.options[modulesList.selectedIndex].value) : undefined; - window.location = setUrl({ - module: selectedModule === '' ? undefined : selectedModule, - filter: filter === '' ? undefined : filter, - testId: undefined, - }); - } - function toolbarUrlConfigContainer() { - var urlConfigContainer = document.createElement('span'); - urlConfigContainer.innerHTML = getUrlConfigHtml(); - addClass(urlConfigContainer, 'qunit-url-config'); - addEvents(urlConfigContainer.getElementsByTagName('input'), 'click', toolbarChanged); - addEvents(urlConfigContainer.getElementsByTagName('select'), 'change', toolbarChanged); - return urlConfigContainer; - } - function toolbarLooseFilter() { - var filter = document.createElement('form'), label = document.createElement('label'), input = document.createElement('input'), button = document.createElement('button'); - addClass(filter, 'qunit-filter'); - label.innerHTML = 'Filter: '; - input.type = 'text'; - input.value = config.filter || ''; - input.name = 'filter'; - input.id = 'qunit-filter-input'; - button.innerHTML = 'Go'; - label.appendChild(input); - filter.appendChild(label); - filter.appendChild(button); - addEvent(filter, 'submit', function (ev) { - applyUrlParams(); - if (ev && ev.preventDefault) { - ev.preventDefault(); - } - return false; - }); - return filter; - } - function toolbarModuleFilterHtml() { - var i, moduleFilterHtml = ''; - if (!modulesList.length) { - return false; - } - modulesList.sort(function (a, b) { - return a.localeCompare(b); - }); - moduleFilterHtml += - "" + - "'; - return moduleFilterHtml; - } - function toolbarModuleFilter() { - var toolbar = id('qunit-testrunner-toolbar'), moduleFilter = document.createElement('span'), moduleFilterHtml = toolbarModuleFilterHtml(); - if (!toolbar || !moduleFilterHtml) { - return false; - } - moduleFilter.setAttribute('id', 'qunit-modulefilter-container'); - moduleFilter.innerHTML = moduleFilterHtml; - addEvent(moduleFilter.lastChild, 'change', applyUrlParams); - toolbar.appendChild(moduleFilter); - } - function appendToolbar() { - var toolbar = id('qunit-testrunner-toolbar'); - if (toolbar) { - toolbar.appendChild(toolbarUrlConfigContainer()); - toolbar.appendChild(toolbarLooseFilter()); - } - } - function appendHeader() { - var header = id('qunit-header'); - if (header) { - header.innerHTML = - "" + - header.innerHTML + - ' '; - } - } - function appendBanner() { - var banner = id('qunit-banner'); - if (banner) { - banner.className = ''; - } - } - function appendTestResults() { - var tests = id('qunit-tests'), result = id('qunit-testresult'); - if (result) { - result.parentNode.removeChild(result); - } - if (tests) { - tests.innerHTML = ''; - result = document.createElement('p'); - result.id = 'qunit-testresult'; - result.className = 'result'; - tests.parentNode.insertBefore(result, tests); - result.innerHTML = 'Running...
     '; - } - } - function storeFixture() { - var fixture = id('qunit-fixture'); - if (fixture) { - config.fixture = fixture.innerHTML; - } - } - function appendUserAgent() { - var userAgent = id('qunit-userAgent'); - if (userAgent) { - userAgent.innerHTML = ''; - userAgent.appendChild(document.createTextNode('QUnit ' + QUnit.version + '; ' + navigator.userAgent)); - } - } - function appendTestsList(modules) { - var i, l, x, z, test, moduleObj; - for (i = 0, l = modules.length; i < l; i++) { - moduleObj = modules[i]; - if (moduleObj.name) { - modulesList.push(moduleObj.name); - } - for (x = 0, z = moduleObj.tests.length; x < z; x++) { - test = moduleObj.tests[x]; - appendTest(test.name, test.testId, moduleObj.name); - } - } - } - function appendTest(name, testId, moduleName) { - var title, rerunTrigger, testBlock, assertList, tests = id('qunit-tests'); - if (!tests) { - return; - } - title = document.createElement('strong'); - title.innerHTML = getNameHtml(name, moduleName); - rerunTrigger = document.createElement('a'); - rerunTrigger.innerHTML = 'Rerun'; - rerunTrigger.href = setUrl({ testId: testId }); - testBlock = document.createElement('li'); - testBlock.appendChild(title); - testBlock.appendChild(rerunTrigger); - testBlock.id = 'qunit-test-output-' + testId; - assertList = document.createElement('ol'); - assertList.className = 'qunit-assert-list'; - testBlock.appendChild(assertList); - tests.appendChild(testBlock); - } - QUnit.begin(function (details) { - var qunit = id('qunit'); - storeFixture(); - if (qunit) { - qunit.innerHTML = - "

    " + - escapeText(document.title) + - '

    ' + - "

    " + - "
    " + - "

    " + - "
      "; - } - appendHeader(); - appendBanner(); - appendTestResults(); - appendUserAgent(); - appendToolbar(); - appendTestsList(details.modules); - toolbarModuleFilter(); - if (qunit && config.hidepassed) { - addClass(qunit.lastChild, 'hidepass'); - } - }); - QUnit.done(function (details) { - var i, key, banner = id('qunit-banner'), tests = id('qunit-tests'), html = [ - 'Tests completed in ', - details.runtime, - ' milliseconds.
      ', - "", - details.passed, - " assertions of ", - details.total, - " passed, ", - details.failed, - ' failed.', - ].join(''); - if (banner) { - banner.className = details.failed ? 'qunit-fail' : 'qunit-pass'; - } - if (tests) { - id('qunit-testresult').innerHTML = html; - } - if (config.altertitle && defined.document && document.title) { - document.title = [details.failed ? '\u2716' : '\u2714', document.title.replace(/^[\u2714\u2716] /i, '')].join(' '); - } - if (config.reorder && defined.sessionStorage && details.failed === 0) { - for (i = 0; i < sessionStorage.length; i++) { - key = sessionStorage.key(i++); - if (key.indexOf('qunit-test-') === 0) { - sessionStorage.removeItem(key); - } - } - } - if (config.scrolltop && window.scrollTo) { - window.scrollTo(0, 0); - } - }); - function getNameHtml(name, module) { - var nameHtml = ''; - if (module) { - nameHtml = "" + escapeText(module) + ': '; - } - nameHtml += "" + escapeText(name) + ''; - return nameHtml; - } - QUnit.testStart(function (details) { - var running, testBlock, bad; - testBlock = id('qunit-test-output-' + details.testId); - if (testBlock) { - testBlock.className = 'running'; - } - else { - appendTest(details.name, details.testId, details.module); - } - running = id('qunit-testresult'); - if (running) { - bad = - QUnit.config.reorder && - defined.sessionStorage && - +sessionStorage.getItem('qunit-test-' + details.module + '-' + details.name); - running.innerHTML = - (bad ? 'Rerunning previously failed test:
      ' : 'Running:
      ') + - getNameHtml(details.name, details.module); - } - }); - function stripHtml(string) { - return string - .replace(/<\/?[^>]+(>|$)/g, '') - .replace(/\"/g, '') - .replace(/\s+/g, ''); - } - QUnit.log(function (details) { - var assertList, assertLi, message, expected, actual, diff, showDiff = false, testItem = id('qunit-test-output-' + details.testId); - if (!testItem) { - return; - } - message = escapeText(details.message) || (details.result ? 'okay' : 'failed'); - message = "" + message + ''; - message += "@ " + details.runtime + ' ms'; - if (!details.result && hasOwn.call(details, 'expected')) { - if (details.negative) { - expected = escapeText('NOT ' + QUnit.dump.parse(details.expected)); - } - else { - expected = escapeText(QUnit.dump.parse(details.expected)); - } - actual = escapeText(QUnit.dump.parse(details.actual)); - message += "'; - if (actual !== expected) { - message += "'; - if (!/^(true|false)$/.test(actual) && !/^(true|false)$/.test(expected)) { - diff = QUnit.diff(expected, actual); - showDiff = stripHtml(diff).length !== stripHtml(expected).length + stripHtml(actual).length; - } - if (showDiff) { - message += "'; - } - } - else if (expected.indexOf('[object Array]') !== -1 || expected.indexOf('[object Object]') !== -1) { - message += - "'; - } - if (details.source) { - message += - "'; - } - message += '
      Expected:
      " + expected + '
      Result:
      " + actual + '
      Diff:
      " + diff + '
      Message: " + - 'Diff suppressed as the depth of object is more than current max depth (' + - QUnit.config.maxDepth + - ').

      Hint: Use QUnit.dump.maxDepth to ' + - " run with a higher max depth or " + - 'Rerun without max depth.

      Source:
      " + escapeText(details.source) + '
      '; - } - else if (!details.result && details.source) { - message += - '' + - "' + - '
      Source:
      " +
      -                    escapeText(details.source) +
      -                    '
      '; - } - assertList = testItem.getElementsByTagName('ol')[0]; - assertLi = document.createElement('li'); - assertLi.className = details.result ? 'pass' : 'fail'; - assertLi.innerHTML = message; - assertList.appendChild(assertLi); - }); - QUnit.testDone(function (details) { - var testTitle, time, testItem, assertList, good, bad, testCounts, skipped, sourceName, tests = id('qunit-tests'); - if (!tests) { - return; - } - testItem = id('qunit-test-output-' + details.testId); - assertList = testItem.getElementsByTagName('ol')[0]; - good = details.passed; - bad = details.failed; - if (config.reorder && defined.sessionStorage) { - if (bad) { - sessionStorage.setItem('qunit-test-' + details.module + '-' + details.name, bad); - } - else { - sessionStorage.removeItem('qunit-test-' + details.module + '-' + details.name); - } - } - if (bad === 0) { - addClass(assertList, 'qunit-collapsed'); - } - testTitle = testItem.firstChild; - testCounts = bad ? "" + bad + ', ' + "" + good + ', ' : ''; - testTitle.innerHTML += " (" + testCounts + details.assertions.length + ')'; - if (details.skipped) { - testItem.className = 'skipped'; - skipped = document.createElement('em'); - skipped.className = 'qunit-skipped-label'; - skipped.innerHTML = 'skipped'; - testItem.insertBefore(skipped, testTitle); - } - else { - addEvent(testTitle, 'click', function () { - toggleClass(assertList, 'qunit-collapsed'); - }); - testItem.className = bad ? 'fail' : 'pass'; - time = document.createElement('span'); - time.className = 'runtime'; - time.innerHTML = details.runtime + ' ms'; - testItem.insertBefore(time, assertList); - } - if (details.source) { - sourceName = document.createElement('p'); - sourceName.innerHTML = 'Source: ' + details.source; - addClass(sourceName, 'qunit-source'); - if (bad === 0) { - addClass(sourceName, 'qunit-collapsed'); - } - addEvent(testTitle, 'click', function () { - toggleClass(sourceName, 'qunit-collapsed'); - }); - testItem.appendChild(sourceName); - } - }); - if (defined.document) { - var notPhantom = (function (p) { - return !(p && p.version && p.version.major > 0); - })(window.phantom); - if (notPhantom && document.readyState === 'complete') { - QUnit.load(); - } - else { - addEvent(window, 'load', QUnit.load); - } - } - else { - config.pageLoaded = true; - config.autorun = true; - } -})(); diff --git a/build/esm/tests/tabnote_tests.js b/build/esm/tests/tabnote_tests.js deleted file mode 100644 index 1cfbba3a6f..0000000000 --- a/build/esm/tests/tabnote_tests.js +++ /dev/null @@ -1,474 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Dot } from '../src/dot.js'; -import { Flow } from '../src/flow.js'; -import { Font, FontWeight } from '../src/font.js'; -import { Formatter } from '../src/formatter.js'; -import { Stave } from '../src/stave.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { TickContext } from '../src/tickcontext.js'; -import { Voice, VoiceMode } from '../src/voice.js'; -const TabNoteTests = { - Start() { - QUnit.module('TabNote'); - test('Tick', ticks); - test('TabStave Line', tabStaveLine); - test('Width', width); - test('TickContext', tickContext); - const run = VexFlowTests.runTests; - run('TabNote Draw', draw); - run('TabNote Stems Up', drawStemsUp); - run('TabNote Stems Down', drawStemsDown); - run('TabNote Stems Up Through Stave', drawStemsUpThrough); - run('TabNote Stems Down Through Stave', drawStemsDownThrough); - run('TabNote Stems with Dots', drawStemsDotted); - }, -}; -function ticks() { - const BEAT = (1 * Flow.RESOLUTION) / 4; - let note = new TabNote({ positions: [{ str: 6, fret: 6 }], duration: '1' }); - equal(note.getTicks().value(), BEAT * 4, 'Whole note has 4 beats'); - note = new TabNote({ positions: [{ str: 3, fret: 4 }], duration: '4' }); - equal(note.getTicks().value(), BEAT, 'Quarter note has 1 beat'); -} -function tabStaveLine() { - const note = new TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - const positions = note.getPositions(); - equal(positions[0].str, 6, 'String 6, Fret 6'); - equal(positions[0].fret, 6, 'String 6, Fret 6'); - equal(positions[1].str, 4, 'String 4, Fret 5'); - equal(positions[1].fret, 5, 'String 4, Fret 5'); - const stave = new Stave(10, 10, 300); - note.setStave(stave); - const ys = note.getYs(); - equal(ys.length, 2, 'Chord should be rendered on two lines'); - equal(ys[0], 100, 'Line for String 6, Fret 6'); - equal(ys[1], 80, 'Line for String 4, Fret 5'); -} -function width() { - expect(1); - const note = new TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - throws(() => note.getWidth(), /UnformattedNote/, 'Unformatted note should have no width'); -} -function tickContext() { - const note = new TabNote({ - positions: [ - { str: 6, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '1', - }); - const tickContext = new TickContext().addTickable(note).preFormat().setX(10).setPadding(0); - equal(tickContext.getWidth(), 7); -} -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 140); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const notes = [ - { positions: [{ str: 6, fret: 6 }], duration: '4' }, - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 'x' }, - { str: 5, fret: 15 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 'x' }, - { str: 5, fret: 5 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '4', - }, - { - positions: [ - { str: 6, fret: 0 }, - { str: 5, fret: 5 }, - { str: 4, fret: 5 }, - { str: 3, fret: 4 }, - { str: 2, fret: 3 }, - { str: 1, fret: 0 }, - ], - duration: '4', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '4', - }, - ]; - function showNote(noteStruct, stave, ctx, x) { - const tabNote = new TabNote(noteStruct); - const tickContext = new TickContext(); - tickContext.addTickable(tabNote).preFormat().setX(x); - tabNote.setContext(ctx).setStave(stave); - tabNote.draw(); - return tabNote; - } - for (let i = 0; i < notes.length; ++i) { - const note = notes[i]; - const tabNote = showNote(note, stave, ctx, (i + 1) * 25); - ok(tabNote.getX() > 0, 'Note ' + i + ' has X value'); - ok(tabNote.getYs().length > 0, 'Note ' + i + ' has Y values'); - } -} -function drawStemsUp(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 30, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new TabNote(struct); - tabNote.render_options.draw_stem = true; - return tabNote; - }); - const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -function drawStemsDown(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'All objects have been drawn'); -} -function drawStemsUpThrough(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 30, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_stem_through_stave = true; - return tabNote; - }); - ctx.setFont(Font.SANS_SERIF, 10, FontWeight.BOLD); - const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -function drawStemsDownThrough(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 250); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 550, { num_lines: 8 }); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - { str: 6, fret: 10 }, - ], - duration: '32', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '64', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 3, fret: 5 }, - { str: 5, fret: 5 }, - { str: 7, fret: 5 }, - ], - duration: '128', - }, - ]; - const notes = specs.map((struct) => { - const tabNote = new TabNote(struct); - tabNote.render_options.draw_stem = true; - tabNote.render_options.draw_stem_through_stave = true; - tabNote.setStemDirection(-1); - return tabNote; - }); - ctx.setFont('Arial', 10, 'bold'); - const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'All objects have been drawn'); -} -function drawStemsDotted(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 200); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 550); - stave.setContext(ctx); - stave.draw(); - const specs = [ - { - positions: [ - { str: 3, fret: 6 }, - { str: 4, fret: 25 }, - ], - duration: '4d', - }, - { - positions: [ - { str: 2, fret: 10 }, - { str: 5, fret: 12 }, - ], - duration: '8', - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '4dd', - stem_direction: -1, - }, - { - positions: [ - { str: 1, fret: 6 }, - { str: 4, fret: 5 }, - ], - duration: '16', - stem_direction: -1, - }, - ]; - const notes = specs.map((struct) => new TabNote(struct, true)); - Dot.buildAndAttach([notes[0], notes[2], notes[2]]); - const voice = new Voice(Flow.TIME4_4).setMode(VoiceMode.SOFT); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - voice.draw(ctx, stave); - ok(true, 'TabNotes successfully drawn'); -} -VexFlowTests.register(TabNoteTests); -export { TabNoteTests }; diff --git a/build/esm/tests/tabslide_tests.js b/build/esm/tests/tabslide_tests.js deleted file mode 100644 index 4d20c74549..0000000000 --- a/build/esm/tests/tabslide_tests.js +++ /dev/null @@ -1,133 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabSlide } from '../src/tabslide.js'; -import { TabStave } from '../src/tabstave.js'; -import { Voice } from '../src/voice.js'; -const TabSlideTests = { - Start() { - QUnit.module('TabSlide'); - const run = VexFlowTests.runTests; - run('Simple TabSlide', simple); - run('Slide Up', slideUp); - run('Slide Down', slideDown); - }, -}; -function tieNotes(notes, indices, stave, ctx) { - const voice = new Voice(Flow.TIME4_4); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).format([voice], 100); - voice.draw(ctx, stave); - const tie = new TabSlide({ - first_note: notes[0], - last_note: notes[1], - first_indices: indices, - last_indices: indices, - }, TabSlide.SLIDE_UP); - tie.setContext(ctx); - tie.draw(); -} -function setupContext(options, width) { - const context = options.contextBuilder(options.elementId, 350, 140); - context.scale(0.9, 0.9); - context.font = '10pt Arial'; - const stave = new TabStave(10, 10, width || 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -const tabNote = (noteStruct) => new TabNote(noteStruct); -function simple(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { stave, context } = setupContext(options); - tieNotes([ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }), - tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), - ], [0], stave, context); - ok(true, 'Simple Test'); -} -function multiTest(options, buildTabSlide) { - const { context, stave } = setupContext(options, 440); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ - positions: [ - { str: 4, fret: 4 }, - { str: 5, fret: 4 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 4, fret: 6 }, - { str: 5, fret: 6 }, - ], - duration: '8', - }), - tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), - tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), - tabNote({ - positions: [ - { str: 2, fret: 14 }, - { str: 3, fret: 14 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 2, fret: 16 }, - { str: 3, fret: 16 }, - ], - duration: '8', - }), - ]; - const voice = new Voice(Flow.TIME4_4).addTickables(notes); - new Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - buildTabSlide({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note'); - buildTabSlide({ - first_note: notes[2], - last_note: notes[3], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord'); - buildTabSlide({ - first_note: notes[4], - last_note: notes[5], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note high-fret'); - buildTabSlide({ - first_note: notes[6], - last_note: notes[7], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord high-fret'); -} -function slideUp(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, TabSlide.createSlideUp); -} -function slideDown(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, TabSlide.createSlideDown); -} -VexFlowTests.register(TabSlideTests); -export { TabSlideTests }; diff --git a/build/esm/tests/tabstave_tests.js b/build/esm/tests/tabstave_tests.js deleted file mode 100644 index 791d933fa7..0000000000 --- a/build/esm/tests/tabstave_tests.js +++ /dev/null @@ -1,23 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { TabStave } from '../src/tabstave.js'; -const TabStaveTests = { - Start() { - QUnit.module('TabStave'); - const run = VexFlowTests.runTests; - run('TabStave Draw Test', draw); - }, -}; -function draw(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 160); - const stave = new TabStave(10, 10, 300); - stave.setNumLines(6); - stave.setContext(ctx); - stave.draw(); - equal(stave.getYForNote(0), 127, 'getYForNote(0)'); - equal(stave.getYForLine(5), 127, 'getYForLine(5)'); - equal(stave.getYForLine(0), 62, 'getYForLine(0) - Top Line'); - equal(stave.getYForLine(4), 114, 'getYForLine(4) - Bottom Line'); - ok(true, 'all pass'); -} -VexFlowTests.register(TabStaveTests); -export { TabStaveTests }; diff --git a/build/esm/tests/tabtie_tests.js b/build/esm/tests/tabtie_tests.js deleted file mode 100644 index feee9c45b5..0000000000 --- a/build/esm/tests/tabtie_tests.js +++ /dev/null @@ -1,171 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Annotation } from '../src/annotation.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { TabNote } from '../src/tabnote.js'; -import { TabStave } from '../src/tabstave.js'; -import { TabTie } from '../src/tabtie.js'; -import { Voice } from '../src/voice.js'; -const TabTieTests = { - Start() { - QUnit.module('TabTie'); - const run = VexFlowTests.runTests; - run('Simple TabTie', simple); - run('Hammerons', simpleHammerOn); - run('Pulloffs', simplePullOff); - run('Tapping', tap); - run('Continuous', continuous); - }, -}; -const tabNote = (noteStruct) => new TabNote(noteStruct); -function setupContext(options, w = 0, h = 0) { - const context = options.contextBuilder(options.elementId, w || 350, h || 160); - context.setFont('Arial', VexFlowTests.Font.size); - const stave = new TabStave(10, 10, w || 350).addTabGlyph().setContext(context).draw(); - return { context, stave }; -} -function tieNotes(notes, indices, stave, ctx, text) { - const voice = new Voice(Flow.TIME4_4); - voice.addTickables(notes); - new Formatter().joinVoices([voice]).format([voice], 100); - voice.draw(ctx, stave); - const tie = new TabTie({ - first_note: notes[0], - last_note: notes[1], - first_indices: indices, - last_indices: indices, - }, text !== null && text !== void 0 ? text : 'Annotation'); - tie.setContext(ctx); - tie.draw(); -} -function simple(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options); - const note1 = tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'h' }); - const note2 = tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }); - tieNotes([note1, note2], [0], stave, context); - ok(true, 'Simple Test'); -} -function simpleHammerOn(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, TabTie.createHammeron); -} -function simplePullOff(options, contextBuilder) { - options.contextBuilder = contextBuilder; - multiTest(options, TabTie.createPulloff); -} -function multiTest(options, createTabTie) { - const { context, stave } = setupContext(options, 440, 140); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ positions: [{ str: 4, fret: 4 }], duration: '8' }), - tabNote({ - positions: [ - { str: 4, fret: 4 }, - { str: 5, fret: 4 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 4, fret: 6 }, - { str: 5, fret: 6 }, - ], - duration: '8', - }), - tabNote({ positions: [{ str: 2, fret: 14 }], duration: '8' }), - tabNote({ positions: [{ str: 2, fret: 16 }], duration: '8' }), - tabNote({ - positions: [ - { str: 2, fret: 14 }, - { str: 3, fret: 14 }, - ], - duration: '8', - }), - tabNote({ - positions: [ - { str: 2, fret: 16 }, - { str: 3, fret: 16 }, - ], - duration: '8', - }), - ]; - const voice = new Voice(Flow.TIME4_4).addTickables(notes); - new Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - createTabTie({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note'); - createTabTie({ - first_note: notes[2], - last_note: notes[3], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord'); - createTabTie({ - first_note: notes[4], - last_note: notes[5], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Single note high-fret'); - createTabTie({ - first_note: notes[6], - last_note: notes[7], - first_indices: [0, 1], - last_indices: [0, 1], - }) - .setContext(context) - .draw(); - ok(true, 'Chord high-fret'); -} -function tap(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options); - const note1 = tabNote({ positions: [{ str: 4, fret: 12 }], duration: 'h' }).addModifier(new Annotation('T'), 0); - const note2 = tabNote({ positions: [{ str: 4, fret: 10 }], duration: 'h' }); - tieNotes([note1, note2], [0], stave, context, 'P'); - ok(true, 'Tapping Test'); -} -function continuous(options, contextBuilder) { - options.contextBuilder = contextBuilder; - const { context, stave } = setupContext(options, 440, 140); - const notes = [ - tabNote({ positions: [{ str: 4, fret: 4 }], duration: 'q' }), - tabNote({ positions: [{ str: 4, fret: 5 }], duration: 'q' }), - tabNote({ positions: [{ str: 4, fret: 6 }], duration: 'h' }), - ]; - const voice = new Voice(Flow.TIME4_4).addTickables(notes); - new Formatter().joinVoices([voice]).format([voice], 300); - voice.draw(context, stave); - TabTie.createHammeron({ - first_note: notes[0], - last_note: notes[1], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - TabTie.createPulloff({ - first_note: notes[1], - last_note: notes[2], - first_indices: [0], - last_indices: [0], - }) - .setContext(context) - .draw(); - ok(true, 'Continuous Hammeron'); -} -VexFlowTests.register(TabTieTests); -export { TabTieTests }; diff --git a/build/esm/tests/textbracket_tests.js b/build/esm/tests/textbracket_tests.js deleted file mode 100644 index 16dd574984..0000000000 --- a/build/esm/tests/textbracket_tests.js +++ /dev/null @@ -1,100 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -const TextBracketTests = { - Start() { - QUnit.module('TextBracket'); - const run = VexFlowTests.runTests; - run('Simple TextBracket', simple0); - run('TextBracket Styles', simple1); - }, -}; -function simple0(options) { - const f = VexFlowTests.makeFactory(options, 550); - const stave = f.Stave(); - const score = f.EasyScore(); - const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); - const voice = score.voice(notes, { time: '5/4' }); - f.TextBracket({ - from: notes[0], - to: notes[4], - text: '15', - options: { - superscript: 'va', - position: 'top', - }, - }); - f.TextBracket({ - from: notes[0], - to: notes[4], - text: '8', - options: { - superscript: 'vb', - position: 'bottom', - line: 3, - }, - }); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function simple1(options) { - const f = VexFlowTests.makeFactory(options, 550); - const stave = f.Stave(); - const score = f.EasyScore(); - const notes = score.notes('c4/4, c4, c4, c4, c4', { stem: 'up' }); - const voice = score.voice(notes, { time: '5/4' }); - const topOctaves = [ - f.TextBracket({ - from: notes[0], - to: notes[1], - text: 'Cool notes', - options: { - superscript: '', - position: 'top', - }, - }), - f.TextBracket({ - from: notes[2], - to: notes[4], - text: 'Testing', - options: { - position: 'top', - superscript: 'superscript', - font: { family: 'Arial', size: 15, weight: 'normal', style: 'normal' }, - }, - }), - ]; - const bottomOctaves = [ - f.TextBracket({ - from: notes[0], - to: notes[1], - text: '8', - options: { - superscript: 'vb', - position: 'bottom', - line: 3, - font: { size: 30 }, - }, - }), - f.TextBracket({ - from: notes[2], - to: notes[4], - text: 'Not cool notes', - options: { - superscript: ' super uncool', - position: 'bottom', - line: 4, - }, - }), - ]; - topOctaves[1].render_options.line_width = 2; - topOctaves[1].render_options.show_bracket = false; - bottomOctaves[0].render_options.underline_superscript = false; - bottomOctaves[0].setDashed(false); - bottomOctaves[1].render_options.bracket_height = 40; - bottomOctaves[1].setDashed(true, [2, 2]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -VexFlowTests.register(TextBracketTests); -export { TextBracketTests }; diff --git a/build/esm/tests/textformatter_tests.js b/build/esm/tests/textformatter_tests.js deleted file mode 100644 index eee92e6d07..0000000000 --- a/build/esm/tests/textformatter_tests.js +++ /dev/null @@ -1,134 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Font, FontStyle, FontWeight } from '../src/font.js'; -import { TextFormatter } from '../src/textformatter.js'; -const TextFormatterTests = { - Start() { - QUnit.module('TextFormatter'); - test('Basic', basic); - const run = VexFlowTests.runTextTests; - run('Accuracy', accuracy); - run('Box Text', textBoxAccuracy); - }, -}; -function basic() { - var _a; - const registeredFamilies = TextFormatter.getFontFamilies(); - equal(registeredFamilies.length, 5, `There are five registered font families: 'Roboto Slab' & 'PetalumaScript' and default 'Serif', 'Serif-Bold' and 'Sans'`); - const petalumaFormatterInfo = TextFormatter.getInfo('PetalumaScript'); - equal((_a = petalumaFormatterInfo === null || petalumaFormatterInfo === void 0 ? void 0 : petalumaFormatterInfo.glyphs) === null || _a === void 0 ? void 0 : _a.C.advanceWidth, 623, 'PetalumaScript advanceWidth of C character is 623.'); - const formatterForPetalumaScript = TextFormatter.create({ family: 'PetalumaScript', size: '100px' }); - const metricsPetalumaScriptH = formatterForPetalumaScript.getGlyphMetrics('H'); - equal(metricsPetalumaScriptH.leftSideBearing, 37); - const formatterForRobotoSlab = TextFormatter.create({ family: 'Roboto Slab', size: '100px', style: 'italic' }); - const metricsRobotoSlabH = formatterForRobotoSlab.getGlyphMetrics('H'); - equal(metricsRobotoSlabH.advanceWidth, 1578); - equal(formatterForRobotoSlab.cacheKey, 'Roboto_Slab%75%normal%normal'); -} -function accuracy(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 500); - const lineHeight = 30; - const startX = 50; - const fonts = [ - { - family: Font.SERIF, - size: 14, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }, - { - family: 'Roboto Slab', - size: 14, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }, - { - family: Font.SANS_SERIF, - size: 14, - weight: FontWeight.BOLD, - style: FontStyle.NORMAL, - }, - ]; - let startY = 20; - for (let j = 0; j < fonts.length; ++j) { - const font = fonts[j]; - const textFormatter = TextFormatter.create(font); - ctx.setFont(font); - const texts = ['AVo(i)a', 'bghjIVex1/2', '@@@@@@@@', 'a very long String with Mixed Case Text,(0123456789)']; - for (let i = 0; i < texts.length; i++) { - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX, startY); - startY += 5; - ctx.setFillStyle('#3a2'); - ctx.fillRect(startX, startY, textFormatter.getWidthForTextInPx(texts[i]), 2); - ctx.setFillStyle('#32a'); - startY += 5; - ctx.fillRect(startX, startY, ctx.measureText(texts[i]).width, 2); - startY += lineHeight; - } - } - ok(true, 'all pass'); -} -function textBoxAccuracy(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 800); - let startY = 35; - const boxBorder = 2; - const boxPadding = 3; - const startX = 50; - const fonts = [ - { - family: Font.SERIF, - size: 14, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }, - { - family: 'Roboto Slab', - size: 14, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }, - { - family: Font.SANS_SERIF, - size: 14, - weight: FontWeight.NORMAL, - style: FontStyle.NORMAL, - }, - ]; - const texts = ['AVID', 'bghjIVex1/2', '@@@@@@@@']; - for (let j = 0; j < fonts.length; ++j) { - const font = fonts[j]; - const textFormatter = TextFormatter.create(font); - ctx.save(); - ctx.setFont(font); - for (let i = 0; i < texts.length; i++) { - const textY = textFormatter.getYForStringInPx(texts[i]); - const height = textY.height + 2 * boxPadding; - const headroom = -1 * textY.yMin; - const width = textFormatter.getWidthForTextInPx(texts[i]) + 2 * boxPadding; - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); - ctx.setLineWidth(boxBorder); - ctx.setStrokeStyle('#3a2'); - ctx.setFillStyle('#3a2'); - ctx.beginPath(); - ctx.rect(startX, startY - height + headroom, width, height); - ctx.stroke(); - startY += height * 1.5 + boxBorder * 3; - const measureBox = ctx.measureText(texts[i]); - const mwidth = measureBox.width + boxBorder * 2; - const mheight = measureBox.height + boxBorder * 2; - ctx.setFillStyle('black'); - ctx.fillText(texts[i], startX + boxPadding, startY - boxPadding); - ctx.setStrokeStyle('#32a'); - ctx.setFillStyle('#32a'); - ctx.beginPath(); - ctx.rect(startX, startY - mheight, mwidth, mheight); - ctx.stroke(); - startY += mheight * 1.5 + boxBorder * 3; - } - ctx.restore(); - } - ok(true, 'all pass'); -} -VexFlowTests.register(TextFormatterTests); -export { TextFormatterTests }; diff --git a/build/esm/tests/textnote_tests.js b/build/esm/tests/textnote_tests.js deleted file mode 100644 index a0a0886704..0000000000 --- a/build/esm/tests/textnote_tests.js +++ /dev/null @@ -1,217 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Crescendo } from '../src/crescendo.js'; -import { Flow } from '../src/flow.js'; -import { Font } from '../src/font.js'; -import { Note } from '../src/note.js'; -import { Stave } from '../src/stave.js'; -import { TextNote } from '../src/textnote.js'; -const TextNoteTests = { - Start() { - QUnit.module('TextNote'); - const run = VexFlowTests.runTests; - run('TextNote Formatting', formatTextNotes); - run('TextNote Formatting 2', formatTextNotes2); - run('TextNote Superscript and Subscript', superscriptAndSubscript); - run('TextNote Formatting With Glyphs 0', formatTextGlyphs0); - run('TextNote Formatting With Glyphs 1', formatTextGlyphs1); - run('Crescendo', crescendo); - run('Text Dynamics', textDynamics); - }, -}; -function formatTextNotes(options) { - const f = VexFlowTests.makeFactory(options, 400, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: 'q' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: 'q' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'Center Justification', duration: 'h' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ text: 'Left Line 1', duration: 'q' }).setLine(1), - f.TextNote({ text: 'Right', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), - ]); - const formatter = f.Formatter(); - formatter.joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextNotes2(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/5', 'a/5'], stem_direction: -1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: '16' }), - f.StaveNote({ keys: ['g/4', 'a/4'], stem_direction: 1, duration: 'q' }), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), - f.TextNote({ text: 'C', duration: '16' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ text: 'L', duration: '16' }), - f.TextNote({ text: 'R', duration: '16' }).setJustification(TextNote.Justification.RIGHT), - f.TextNote({ text: 'R', duration: 'q' }).setJustification(TextNote.Justification.RIGHT), - ]); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - voice2.getTickables().forEach((note) => Note.plotMetrics(f.getContext(), note, 170)); - f.draw(); - ok(true); -} -function superscriptAndSubscript(options) { - const f = VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: 1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: 1, duration: 'q' }), - f - .StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: 1, duration: 'q' }) - .addModifier(f.Accidental({ type: 'n' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - ]); - const notes2 = [ - f.TextNote({ text: Flow.unicode.flat + 'I', superscript: '+5', duration: '8' }), - f.TextNote({ text: 'D' + Flow.unicode.sharp + '/F', duration: '4d', superscript: 'sus2' }), - f.TextNote({ text: 'ii', superscript: '6', subscript: '4', duration: '8' }), - f.TextNote({ text: 'C', superscript: Flow.unicode.triangle + '7', subscript: '', duration: '8' }), - f.TextNote({ text: 'vii', superscript: Flow.unicode['o-with-slash'] + '7', duration: '8' }), - f.TextNote({ text: 'V', superscript: '7', duration: '8' }), - ]; - equal(notes2[0].getText(), Flow.unicode.flat + 'I', 'TextNote.getText() return .text'); - const voice2 = score.voice(notes2); - voice2.getTickables().forEach((note) => { - const textNote = note; - textNote.setFont({ family: Font.SERIF, size: 15 }); - textNote.setLine(13); - textNote.setJustification(TextNote.Justification.LEFT); - }); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextGlyphs0(options) { - const f = VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - ]); - const voice2 = score.voice([ - f.TextNote({ text: 'Center', duration: '8' }).setJustification(TextNote.Justification.CENTER), - f.TextNote({ glyph: 'f', duration: '8' }), - f.TextNote({ glyph: 'p', duration: '8' }), - f.TextNote({ glyph: 'm', duration: '8' }), - f.TextNote({ glyph: 'z', duration: '8' }), - f.TextNote({ glyph: 'mordent_upper', duration: '16' }), - f.TextNote({ glyph: 'mordent_lower', duration: '16' }), - f.TextNote({ glyph: 'segno', duration: '8' }), - f.TextNote({ glyph: 'coda', duration: '8' }), - ]); - voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function formatTextGlyphs1(options) { - const f = VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice1 = score.voice([ - f - .StaveNote({ keys: ['c/4', 'e/4', 'a/4'], stem_direction: -1, duration: 'h' }) - .addModifier(f.Accidental({ type: 'b' }), 0) - .addModifier(f.Accidental({ type: '#' }), 1), - f.StaveNote({ keys: ['d/4', 'e/4', 'f/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - f.StaveNote({ keys: ['c/4', 'f/4', 'a/4'], stem_direction: -1, duration: '8' }), - ]); - const voice2 = score.voice([ - f.TextNote({ glyph: 'turn', duration: '16' }), - f.TextNote({ glyph: 'turn_inverted', duration: '16' }), - f.TextNote({ glyph: 'pedal_open', duration: '8' }).setLine(10), - f.TextNote({ glyph: 'pedal_close', duration: '8' }).setLine(10), - f.TextNote({ glyph: 'caesura_curved', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'caesura_straight', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'breath', duration: '8' }).setLine(2), - f.TextNote({ glyph: 'tick', duration: '8' }).setLine(3), - f.TextNote({ glyph: 'tr', duration: '8', smooth: true }).setJustification(TextNote.Justification.CENTER), - ]); - voice2.getTickables().forEach((n) => n.setJustification(TextNote.Justification.CENTER)); - f.Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true); -} -function crescendo(options) { - const f = VexFlowTests.makeFactory(options, 600, 230); - const stave = f.Stave({ y: 40 }); - const score = f.EasyScore(); - const voice = score.voice([ - f.TextNote({ glyph: 'p', duration: '16' }), - new Crescendo({ duration: '4d' }).setLine(0).setHeight(25).setStave(stave), - f.TextNote({ glyph: 'f', duration: '16' }), - new Crescendo({ duration: '4' }).setLine(5).setStave(stave), - new Crescendo({ duration: '4' }).setLine(10).setDecrescendo(true).setHeight(5).setStave(stave), - ]); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true); -} -function textDynamics(options) { - const f = VexFlowTests.makeFactory(options, 600, 230); - const score = f.EasyScore(); - const voice = score.voice([ - f.TextDynamics({ text: 'sfz', duration: '4' }), - f.TextDynamics({ text: 'rfz', duration: '4' }), - f.TextDynamics({ text: 'mp', duration: '4' }), - f.TextDynamics({ text: 'ppp', duration: '4' }), - f.TextDynamics({ text: 'fff', duration: '4' }), - f.TextDynamics({ text: 'mf', duration: '4' }), - f.TextDynamics({ text: 'sff', duration: '4' }), - ], { time: '7/4' }); - const formatter = f.Formatter(); - formatter.joinVoices([voice]); - const width = formatter.preCalculateMinTotalWidth([voice]); - formatter.format([voice]); - const stave = f.Stave({ y: 40, width: width + Stave.defaultPadding }); - stave.draw(); - voice.draw(f.getContext(), stave); - ok(true); -} -VexFlowTests.register(TextNoteTests); -export { TextNoteTests }; diff --git a/build/esm/tests/threevoice_tests.js b/build/esm/tests/threevoice_tests.js deleted file mode 100644 index 9fe6ead737..0000000000 --- a/build/esm/tests/threevoice_tests.js +++ /dev/null @@ -1,132 +0,0 @@ -import { concat, VexFlowTests } from './vexflow_test_helpers.js'; -import { Beam } from '../src/beam.js'; -const ThreeVoicesTests = { - Start() { - QUnit.module('Three Voice Rests'); - const run = VexFlowTests.runTests; - run('Three Voices - #1', threeVoices1); - run('Three Voices - #2 Complex', threeVoices2); - run('Three Voices - #3', threeVoices3); - run('Auto Adjust Rest Positions - Two Voices', autoRestTwoVoices); - run('Auto Adjust Rest Positions - Three Voices #1', autoRestThreeVoices1); - run('Auto Adjust Rest Positions - Three Voices #2', autoRestThreeVoices2); - }, -}; -function createThreeVoicesTest(noteGroup1, noteGroup2, noteGroup3, setup) { - return (options) => { - const factory = VexFlowTests.makeFactory(options, 600, 200); - const stave = factory.Stave().addClef('treble').addTimeSignature('4/4'); - const score = factory.EasyScore(); - const noteGroups = [noteGroup1, noteGroup2, noteGroup3].map((args) => score.notes(...args)); - const voices = noteGroups.map((notes) => score.voice(notes)); - setup(factory, voices); - const beams = [ - Beam.applyAndGetBeams(voices[0], +1), - Beam.applyAndGetBeams(voices[1], -1), - Beam.applyAndGetBeams(voices[2], -1), - ].reduce(concat); - factory.Formatter().joinVoices(voices).formatToStave(voices, stave); - factory.draw(); - for (let i = 0; i < beams.length; i++) { - beams[i].setContext(factory.getContext()).draw(); - } - ok(true); - }; -} -const threeVoices1 = createThreeVoicesTest(['e5/2, e5', { stem: 'up' }], ['(d4 a4 d#5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/4, e3, f3, a3', { stem: 'down' }], (f, voices) => { - voices[0].getTickables()[0].addModifier(f.Fingering({ number: '0', position: 'left' }), 0); - voices[1] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); -}); -const threeVoices2 = createThreeVoicesTest(['(a4 e5)/16, e5, e5, e5, e5/8, e5, e5/2', { stem: 'up' }], ['(d4 d#5)/16, (b4 c5), d5, e5, (d4 a4 c5)/8, b4, (d4 a4 c5), b4, (d4 a4 c5), b4', { stem: 'down' }], ['b3/8, b3, e3/4, f3, a3', { stem: 'down' }], (f, voices) => { - voices[0] - .getTickables()[0] - .addModifier(f.Fingering({ number: '2', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'above' }), 1); - voices[1] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '4', position: 'left' }), 1); -}); -const threeVoices3 = createThreeVoicesTest(['(g4 e5)/4, e5, (g4 e5)/2', { stem: 'up' }], ['c#5/4, b4/8, b4/8/r, a4/4., g4/8', { stem: 'down' }], ['c4/4, b3, a3, g3', { stem: 'down' }], (f, voices) => { - voices[0] - .getTickables()[0] - .addModifier(f.Fingering({ number: '0', position: 'left' }), 0) - .addModifier(f.Fingering({ number: '0', position: 'left' }), 1); - voices[1].getTickables()[0].addModifier(f.Fingering({ number: '1', position: 'left' }), 0); - voices[2].getTickables()[0].addModifier(f.Fingering({ number: '3', position: 'left' }), 0); -}); -function autoRestTwoVoices(options) { - const f = VexFlowTests.makeFactory(options, 900, 200); - const score = f.EasyScore(); - let x = 10; - let beams = []; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - x += width; - const noteArrays = [ - score.notes('b4/8/r, e5/16, b4/r, b4/8/r, e5/16, b4/r, b4/8/r, d5/16, b4/r, e5/4', { stem: 'up' }), - score.notes('c5/16, c4, b4/r, d4, e4, f4, b4/r, g4, g4[stem="up"], a4[stem="up"], b4/r, b4[stem="up"], e4/4', { - stem: 'down', - }), - [f.TextNote({ text: measureTitle, line: -1, duration: '1', smooth: true })], - ]; - const voices = noteArrays.map((notes) => score.voice(notes)); - beams = beams.concat(Beam.applyAndGetBeams(voices[0], 1)).concat(Beam.applyAndGetBeams(voices[1], -1)); - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - for (let i = 0; i < beams.length; i++) { - beams[i].setContext(f.getContext()).draw(); - } - ok(true, 'Auto Adjust Rests - Two Voices'); -} -function autoRestThreeVoices1(options) { - const f = VexFlowTests.makeFactory(options, 850, 200); - const score = f.EasyScore(); - let x = 10; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - const voices = [ - score.voice(score.notes('b4/4/r, e5, e5/r, e5/r, e5, e5, e5, e5/r', { stem: 'up' }), { time: '8/4' }), - score.voice(score.notes('b4/4/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4', { stem: 'down' }), { time: '8/4' }), - score.voice(score.notes('e4/4/r, e4/r, f4, b4/r, g4, c4, e4/r, c4', { stem: 'down' }), { time: '8/4' }), - score.voice([ - f.TextNote({ text: measureTitle, duration: '1', line: -1, smooth: true }), - f.TextNote({ text: '', duration: '1', line: -1, smooth: true }), - ], { time: '8/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - x += width; - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - ok(true); -} -function autoRestThreeVoices2(options) { - const f = VexFlowTests.makeFactory(options, 850, 200); - const score = f.EasyScore(); - let x = 10; - function createMeasure(measureTitle, width, align_rests) { - const stave = f.Stave({ x: x, y: 50, width: width }).setBegBarType(1); - const voices = [ - score.voice(score.notes('b4/16/r, e5, e5/r, e5/r, e5, e5, e5, e5/r'), { time: '2/4' }), - score.voice(score.notes('b4/16/r, b4/r, b4/r, b4, b4/r, b4/r, b4, b4'), { time: '2/4' }), - score.voice(score.notes('e4/16/r, e4/r, f4, b4/r, g4, c4, e4/r, c4'), { time: '2/4' }), - score.voice([f.TextNote({ text: measureTitle, duration: 'h', line: -1, smooth: true })], { time: '2/4' }), - ]; - f.Formatter().joinVoices(voices).formatToStave(voices, stave, { align_rests }); - x += width; - } - createMeasure('Default Rest Positions', 400, false); - createMeasure('Rests Repositioned To Avoid Collisions', 400, true); - f.draw(); - ok(true); -} -VexFlowTests.register(ThreeVoicesTests); -export { ThreeVoicesTests }; diff --git a/build/esm/tests/tickcontext_tests.js b/build/esm/tests/tickcontext_tests.js deleted file mode 100644 index e9d325be9d..0000000000 --- a/build/esm/tests/tickcontext_tests.js +++ /dev/null @@ -1,36 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { TickContext } from '../src/tickcontext.js'; -import { MockTickable } from './mocks.js'; -const TickContextTests = { - Start() { - QUnit.module('TickContext'); - test('Current Tick Test', currentTick); - test('Tracking Test', tracking); - }, -}; -function currentTick() { - const tc = new TickContext(); - equal(tc.getCurrentTick().value(), 0, 'New tick context has no ticks'); -} -function tracking() { - const BEAT = (1 * Flow.RESOLUTION) / 4; - const tickables = [ - new MockTickable().setTicks(BEAT).setWidth(10), - new MockTickable().setTicks(BEAT * 2).setWidth(20), - new MockTickable().setTicks(BEAT).setWidth(30), - ]; - const tc = new TickContext(); - tc.setPadding(0); - tc.addTickable(tickables[0]); - equal(tc.getMaxTicks().value(), BEAT); - tc.addTickable(tickables[1]); - equal(tc.getMaxTicks().value(), BEAT * 2); - tc.addTickable(tickables[2]); - equal(tc.getMaxTicks().value(), BEAT * 2); - equal(tc.getWidth(), 0); - tc.preFormat(); - equal(tc.getWidth(), 30); -} -VexFlowTests.register(TickContextTests); -export { TickContextTests }; diff --git a/build/esm/tests/timesignature_tests.js b/build/esm/tests/timesignature_tests.js deleted file mode 100644 index 905c07dddf..0000000000 --- a/build/esm/tests/timesignature_tests.js +++ /dev/null @@ -1,143 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Stave } from '../src/stave.js'; -import { StaveConnector } from '../src/staveconnector.js'; -import { TimeSignature } from '../src/timesignature.js'; -const TimeSignatureTests = { - Start() { - QUnit.module('TimeSignature'); - test('Time Signature Parser', parser); - const run = VexFlowTests.runTests; - run('Basic Time Signatures', basic); - run('Big Signature Test', big); - run('Additive Signature Test', additive); - run('Alternating Signature Test', alternating); - run('Interchangeable Signature Test', interchangeable); - run('Aggregate Signature Test', agregate); - run('Complex Signature Test', complex); - run('Time Signature multiple staves alignment test', multiple); - run('Time Signature Change Test', change); - }, -}; -function parser() { - const timeSig = new TimeSignature(); - equal(timeSig.getTimeSpec(), '4/4', 'default time signature is 4/4'); - const mustFail = ['asdf', '123/', '/10', '/', '4567', 'C+', '1+', '+1', '(3+', '+3)', '()', '(+)']; - mustFail.forEach((invalidString) => { - throws(() => timeSig.parseTimeSpec(invalidString), /BadTimeSignature/); - }); - const mustPass = ['4/4', '10/12', '1/8', '1234567890/1234567890', 'C', 'C|', '+']; - mustPass.forEach((validString) => timeSig.parseTimeSpec(validString)); - timeSig.setTimeSig('4/4'); - equal(timeSig.getIsNumeric(), true, '4/4 is numeric'); - equal(timeSig.getLine(), 0, 'digits are on line 0'); - timeSig.setTimeSig('C|'); - equal(timeSig.getTimeSpec(), 'C|', 'timeSpec changed to C|'); - equal(timeSig.getIsNumeric(), false, 'cut time is not numeric'); - equal(timeSig.getLine(), 2, 'cut/common are on line 2'); - ok(true, 'all pass'); -} -function basic(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 600, 120); - new Stave(10, 10, 500) - .addTimeSignature('2/2') - .addTimeSignature('3/4') - .addTimeSignature('4/4') - .addTimeSignature('6/8') - .addTimeSignature('C') - .addTimeSignature('C|') - .addEndTimeSignature('2/2') - .addEndTimeSignature('3/4') - .addEndTimeSignature('4/4') - .addEndClef('treble') - .addEndTimeSignature('6/8') - .addEndTimeSignature('C') - .addEndTimeSignature('C|') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function big(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300) - .addTimeSignature('12/8') - .addTimeSignature('7/16') - .addTimeSignature('1234567/890') - .addTimeSignature('987/654321') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function additive(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300).addTimeSignature('2+3+2/8').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function alternating(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300).addTimeSignature('6/8').addTimeSignature('+').addTimeSignature('3/4').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function interchangeable(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300).addTimeSignature('3/4').addTimeSignature('-').addTimeSignature('2/4').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function agregate(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300) - .addTimeSignature('2/4') - .addTimeSignature('+') - .addTimeSignature('3/8') - .addTimeSignature('+') - .addTimeSignature('5/4') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function complex(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 120); - new Stave(10, 10, 300) - .addTimeSignature('(2+3)/16') - .addTimeSignature('+') - .addTimeSignature('3/8') - .setContext(ctx) - .draw(); - ok(true, 'all pass'); -} -function multiple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 400, 350); - const stave1LineConfig = [false, false, true, false, false].map((visible) => ({ visible })); - const stave1 = new Stave(15, 0, 300) - .setConfigForLines(stave1LineConfig) - .addClef('percussion') - .addTimeSignature('4/4', 25) - .setContext(ctx) - .draw(); - const stave2 = new Stave(15, 110, 300).addClef('treble').addTimeSignature('4/4').setContext(ctx).draw(); - const stave3 = new Stave(15, 220, 300).addClef('bass').addTimeSignature('4/4').setContext(ctx).draw(); - Stave.formatBegModifiers([stave1, stave2, stave3]); - new StaveConnector(stave1, stave2).setType('single').setContext(ctx).draw(); - new StaveConnector(stave2, stave3).setType('single').setContext(ctx).draw(); - new StaveConnector(stave2, stave3).setType('brace').setContext(ctx).draw(); - ok(true, 'all pass'); -} -function change(options) { - const f = VexFlowTests.makeFactory(options, 900); - const stave = f.Stave({ x: 0, y: 0 }).addClef('treble').addTimeSignature('C|'); - const tickables = [ - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - f.TimeSigNote({ time: '3/4' }), - f.StaveNote({ keys: ['d/4'], duration: '4', clef: 'alto' }), - f.StaveNote({ keys: ['b/3'], duration: '4r', clef: 'alto' }), - f.TimeSigNote({ time: 'C' }), - f.StaveNote({ keys: ['c/3', 'e/3', 'g/3'], duration: '4', clef: 'bass' }), - f.TimeSigNote({ time: '9/8' }), - f.StaveNote({ keys: ['c/4'], duration: '4', clef: 'treble' }), - ]; - const voice = f.Voice().setStrict(false).addTickables(tickables); - f.Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'all pass'); -} -VexFlowTests.register(TimeSignatureTests); -export { TimeSignatureTests }; diff --git a/build/esm/tests/tremolo_tests.js b/build/esm/tests/tremolo_tests.js deleted file mode 100644 index 23be8a1fc5..0000000000 --- a/build/esm/tests/tremolo_tests.js +++ /dev/null @@ -1,75 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Barline } from '../src/stavebarline.js'; -import { Tremolo } from '../src/tremolo.js'; -const TremoloTests = { - Start() { - QUnit.module('Tremolo'); - const run = VexFlowTests.runTests; - run('Tremolo - Basic', tremoloBasic); - run('Tremolo - Big', tremoloBig); - }, -}; -function tremoloBasic(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); - const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); - notes1[0].addModifier(new Tremolo(3), 0); - notes1[1].addModifier(new Tremolo(2), 0); - notes1[2].addModifier(new Tremolo(1), 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(Barline.type.DOUBLE); - const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); - notes2[1].addModifier(new Tremolo(1), 0); - notes2[2].addModifier(new Tremolo(2), 0); - notes2[3].addModifier(new Tremolo(3), 0); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Tremolo - Basic'); -} -function tremoloBig(options) { - const f = VexFlowTests.makeFactory(options, 600, 200); - const score = f.EasyScore(); - const stave1 = f.Stave({ width: 250 }).setEndBarType(Barline.type.DOUBLE); - const notes1 = score.notes('e4/4, e4, e4, e4', { stem: 'up' }); - const tremolo1 = new Tremolo(3); - tremolo1.extra_stroke_scale = 1.7; - tremolo1.y_spacing_scale = 1.5; - const tremolo2 = new Tremolo(2); - tremolo2.extra_stroke_scale = 1.7; - tremolo2.y_spacing_scale = 1.5; - const tremolo3 = new Tremolo(1); - tremolo3.extra_stroke_scale = 1.7; - tremolo3.y_spacing_scale = 1.5; - notes1[0].addModifier(tremolo1, 0); - notes1[1].addModifier(tremolo2, 0); - notes1[2].addModifier(tremolo3, 0); - const voice1 = score.voice(notes1); - f.Formatter().joinVoices([voice1]).formatToStave([voice1], stave1); - const stave2 = f - .Stave({ x: stave1.getWidth() + stave1.getX(), y: stave1.getY(), width: 300 }) - .setEndBarType(Barline.type.DOUBLE); - const notes2 = score.notes('e5/4, e5, e5, e5', { stem: 'down' }); - const tremolo4 = new Tremolo(1); - tremolo4.extra_stroke_scale = 1.7; - tremolo4.y_spacing_scale = 1.5; - const tremolo5 = new Tremolo(2); - tremolo5.extra_stroke_scale = 1.7; - tremolo5.y_spacing_scale = 1.5; - const tremolo6 = new Tremolo(3); - tremolo6.extra_stroke_scale = 1.7; - tremolo6.y_spacing_scale = 1.5; - notes2[1].addModifier(tremolo4, 0); - notes2[2].addModifier(tremolo5, 0); - notes2[3].addModifier(tremolo6, 0); - const voice2 = score.voice(notes2); - f.Formatter().joinVoices([voice2]).formatToStave([voice2], stave2); - f.draw(); - ok(true, 'Tremolo - Big'); -} -VexFlowTests.register(TremoloTests); -export { TremoloTests }; diff --git a/build/esm/tests/tuning_tests.js b/build/esm/tests/tuning_tests.js deleted file mode 100644 index b386ba8a60..0000000000 --- a/build/esm/tests/tuning_tests.js +++ /dev/null @@ -1,56 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Tuning } from '../src/tuning.js'; -const TuningTests = { - Start() { - QUnit.module('Tuning'); - test('Standard Tuning', standard); - test('Standard Banjo Tuning', banjo); - test('Return note for fret', noteForFret); - }, -}; -function checkStandard(tuning) { - throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); - throws(() => tuning.getValueForString(9), /BadArguments/, 'String 9'); - equal(tuning.getValueForString(6), 40, 'Low E string'); - equal(tuning.getValueForString(5), 45, 'A string'); - equal(tuning.getValueForString(4), 50, 'D string'); - equal(tuning.getValueForString(3), 55, 'G string'); - equal(tuning.getValueForString(2), 59, 'B string'); - equal(tuning.getValueForString(1), 64, 'High E string'); -} -function checkStandardBanjo(tuning) { - throws(() => tuning.getValueForString(0), /BadArguments/, 'String 0'); - throws(() => tuning.getValueForString(6), /BadArguments/, 'String 6'); - equal(tuning.getValueForString(5), 67, 'High G string'); - equal(tuning.getValueForString(4), 50, 'D string'); - equal(tuning.getValueForString(3), 55, 'G string'); - equal(tuning.getValueForString(2), 59, 'B string'); - equal(tuning.getValueForString(1), 62, 'High D string'); -} -function standard() { - expect(16); - const tuning = new Tuning(); - checkStandard(tuning); - tuning.setTuning('standard'); - checkStandard(tuning); -} -function banjo() { - expect(7); - const tuning = new Tuning(); - tuning.setTuning('standardBanjo'); - checkStandardBanjo(tuning); -} -function noteForFret() { - expect(8); - const tuning = new Tuning('E/5,B/4,G/4,D/4,A/3,E/3'); - throws(() => tuning.getNoteForFret(-1, 1), /BadArguments/, 'Fret = -1'); - throws(() => tuning.getNoteForFret(1, -1), /BadArguments/, 'String = -1'); - equal(tuning.getNoteForFret(0, 1), 'E/5', 'High E string'); - equal(tuning.getNoteForFret(5, 1), 'A/5', 'High E string, fret 5'); - equal(tuning.getNoteForFret(0, 2), 'B/4', 'B string'); - equal(tuning.getNoteForFret(0, 3), 'G/4', 'G string'); - equal(tuning.getNoteForFret(12, 2), 'B/5', 'B string, fret 12'); - equal(tuning.getNoteForFret(0, 6), 'E/3', 'Low E string'); -} -VexFlowTests.register(TuningTests); -export { TuningTests }; diff --git a/build/esm/tests/tuplet_tests.js b/build/esm/tests/tuplet_tests.js deleted file mode 100644 index d8aea22e7b..0000000000 --- a/build/esm/tests/tuplet_tests.js +++ /dev/null @@ -1,450 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Dot } from '../src/dot.js'; -import { Formatter } from '../src/formatter.js'; -import { Stem } from '../src/stem.js'; -import { Tuplet } from '../src/tuplet.js'; -const TupletTests = { - Start() { - QUnit.module('Tuplet'); - const run = VexFlowTests.runTests; - run('Simple Tuplet', simple); - run('Beamed Tuplet', beamed); - run('Ratioed Tuplet', ratio); - run('Bottom Tuplet', bottom); - run('Bottom Ratioed Tuplet', bottomRatio); - run('Awkward Tuplet', awkward); - run('Complex Tuplet', complex); - run('Mixed Stem Direction Tuplet', mixedTop); - run('Mixed Stem Direction Bottom Tuplet', mixedBottom); - run('Nested Tuplets', nested); - run('Single Tuplets', single); - }, -}; -const set = (key) => (value) => (object) => { - object[key] = value; - return object; -}; -const setStemDirection = set('stem_direction'); -const setStemUp = setStemDirection(Stem.UP); -const setStemDown = setStemDirection(Stem.DOWN); -const setDurationToQuarterNote = set('duration')('4'); -function simple(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/4'); - const notes = [ - { keys: ['g/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Tuplet({ notes: notes.slice(0, 3) }); - f.Tuplet({ notes: notes.slice(3, 6) }); - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Simple Test'); -} -function beamed(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('3/8'); - const notes = [ - { keys: ['b/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes.slice(0, 3) }); - f.Beam({ notes: notes.slice(3, 10) }); - f.Tuplet({ notes: notes.slice(0, 3) }); - f.Tuplet({ notes: notes.slice(3, 10) }); - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 8 } }) - .setStrict(true) - .addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Beamed Test'); -} -function ratio(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10, width: 350 }).addTimeSignature('4/4'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['b/4'], duration: '4' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { - ratioed: true, - notes_occupied: 4, - }, - }); - const voice = f.Voice().setStrict(true).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Ratioed Test'); -} -function bottom(options) { - const f = VexFlowTests.makeFactory(options, 350, 160); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('3/4'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['g/4'], duration: '4' }, - { keys: ['d/5'], duration: '8' }, - { keys: ['g/3'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ] - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { location: Tuplet.LOCATION_BOTTOM }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { location: Tuplet.LOCATION_BOTTOM }, - }); - const voice = f - .Voice({ time: { num_beats: 3, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Bottom Test'); -} -function bottomRatio(options) { - const f = VexFlowTests.makeFactory(options, 350, 160); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('5/8'); - const notes = [ - { keys: ['f/4'], duration: '4' }, - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '4' }, - { keys: ['d/5'], duration: '8' }, - { keys: ['g/5'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - ] - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(3, 6), - }); - f.Tuplet({ - notes: notes.slice(0, 3), - options: { - location: Tuplet.LOCATION_BOTTOM, - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(3, 6), - options: { - location: Tuplet.LOCATION_BOTTOM, - notes_occupied: 1, - }, - }); - const voice = f - .Voice({ time: { num_beats: 5, beat_value: 8 } }) - .setStrict(true) - .addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Bottom Ratioed Test'); -} -function awkward(options) { - const f = VexFlowTests.makeFactory(options, 370, 160); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['g/4'], duration: '16' }, - { keys: ['b/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4'], duration: '16' }, - { keys: ['c/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['e/4'], duration: '16' }, - { keys: ['c/4'], duration: '8' }, - { keys: ['d/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes.slice(0, 12) }); - f.Tuplet({ - notes: notes.slice(0, 12), - options: { - notes_occupied: 142, - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(12, 15), - options: { - ratioed: true, - }, - }).setBracketed(true); - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Awkward Test'); -} -function complex(options) { - const f = VexFlowTests.makeFactory(options, 600); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes1 = [ - { keys: ['b/4'], duration: '8d' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['b/4'], duration: '16r' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['g/4'], duration: '32' }, - { keys: ['f/4'], duration: '32' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['b/4'], duration: '8' }, - { keys: ['a/4'], duration: '8' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - Dot.buildAndAttach([notes1[0]], { all: true }); - const notes2 = [{ keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }, { keys: ['c/4'] }] - .map(setDurationToQuarterNote) - .map(setStemDown) - .map(f.StaveNote.bind(f)); - f.Beam({ notes: notes1.slice(0, 3) }); - f.Beam({ notes: notes1.slice(5, 9) }); - f.Beam({ notes: notes1.slice(11, 16) }); - f.Tuplet({ - notes: notes1.slice(0, 3), - }); - f.Tuplet({ - notes: notes1.slice(3, 11), - options: { - num_notes: 7, - notes_occupied: 4, - ratioed: false, - }, - }); - f.Tuplet({ - notes: notes1.slice(11, 16), - options: { - notes_occupied: 4, - }, - }); - const voice1 = f.Voice().setStrict(true).addTickables(notes1); - const voice2 = f.Voice().setStrict(true).addTickables(notes2); - new Formatter().joinVoices([voice1, voice2]).formatToStave([voice1, voice2], stave); - f.draw(); - ok(true, 'Complex Test'); -} -function mixedTop(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['c/6'], stem_direction: -1 }, - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['f/5'], stem_direction: 1 }, - { keys: ['a/4'], stem_direction: -1 }, - { keys: ['c/6'], stem_direction: -1 }, - ] - .map(setDurationToQuarterNote) - .map(f.StaveNote.bind(f)); - f.Tuplet({ - notes: notes.slice(0, 2), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 4), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(4, 6), - options: { - notes_occupied: 3, - }, - }); - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Mixed Stem Direction Tuplet'); -} -function mixedBottom(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }); - const notes = [ - { keys: ['f/3'], stem_direction: 1 }, - { keys: ['a/5'], stem_direction: -1 }, - { keys: ['a/4'], stem_direction: 1 }, - { keys: ['f/3'], stem_direction: 1 }, - { keys: ['a/4'], stem_direction: -1 }, - { keys: ['c/4'], stem_direction: -1 }, - ] - .map(setDurationToQuarterNote) - .map(f.StaveNote.bind(f)); - f.Tuplet({ - notes: notes.slice(0, 2), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 4), - options: { - notes_occupied: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(4, 6), - options: { - notes_occupied: 3, - }, - }); - const voice = f.Voice().setStrict(false).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Mixed Stem Direction Bottom Tuplet'); -} -function nested(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes = [ - { keys: ['b/4'], duration: '4' }, - { keys: ['a/4'], duration: '4' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['f/4'], duration: '16' }, - { keys: ['a/4'], duration: '16' }, - { keys: ['g/4'], duration: '16' }, - { keys: ['b/4'], duration: '2' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(2, 7), - }); - f.Tuplet({ - notes: notes.slice(0, 7), - options: { - notes_occupied: 2, - num_notes: 3, - }, - }); - f.Tuplet({ - notes: notes.slice(2, 7), - options: { - notes_occupied: 4, - num_notes: 5, - }, - }); - const voice = f.Voice().setStrict(true).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Nested Tuplets'); -} -function single(options) { - const f = VexFlowTests.makeFactory(options); - const stave = f.Stave({ x: 10, y: 10 }).addTimeSignature('4/4'); - const notes = [ - { keys: ['c/4'], duration: '4' }, - { keys: ['d/4'], duration: '8' }, - { keys: ['e/4'], duration: '8' }, - { keys: ['f/4'], duration: '8' }, - { keys: ['g/4'], duration: '8' }, - { keys: ['a/4'], duration: '2' }, - { keys: ['b/4'], duration: '4' }, - ] - .map(setStemUp) - .map(f.StaveNote.bind(f)); - f.Beam({ - notes: notes.slice(1, 4), - }); - f.Tuplet({ - notes: notes.slice(0, -1), - options: { - num_notes: 4, - notes_occupied: 3, - ratioed: true, - bracketed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(0, 1), - options: { - num_notes: 3, - notes_occupied: 2, - ratioed: true, - }, - }); - f.Tuplet({ - notes: notes.slice(1, 4), - options: { - num_notes: 3, - notes_occupied: 2, - }, - }); - f.Tuplet({ - notes: notes.slice(4, 5), - options: { - num_notes: 3, - notes_occupied: 2, - ratioed: true, - bracketed: true, - }, - }); - const voice = f - .Voice({ time: { num_beats: 4, beat_value: 4 } }) - .setStrict(true) - .addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - f.draw(); - ok(true, 'Nested Tuplets'); -} -VexFlowTests.register(TupletTests); -export { TupletTests }; diff --git a/build/esm/tests/typeguard_tests.js b/build/esm/tests/typeguard_tests.js deleted file mode 100644 index a985aa718b..0000000000 --- a/build/esm/tests/typeguard_tests.js +++ /dev/null @@ -1,82 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { CanvasContext } from '../src/canvascontext.js'; -import { StaveNote } from '../src/stavenote.js'; -import { StemmableNote } from '../src/stemmablenote.js'; -import { TabNote } from '../src/tabnote.js'; -import { isCategory, isNote, isRenderContext, isStaveNote, isStemmableNote, isTabNote } from '../src/typeguard.js'; -const TypeGuardTests = { - Start() { - QUnit.module('TypeGuard'); - test('Real VexFlow Types', real); - test('Fake VexFlow Types in ES5', fakeES5); - test('Fake VexFlow Types in ES6', fakeES6); - test('Edge Case ES5/ES6', edgeCaseES5vsES6); - }, -}; -function real() { - const s = new StaveNote({ keys: ['c/4'], duration: 'w' }); - ok(isStaveNote(s), 'isStaveNote helper function'); - ok(isCategory(s, 'StaveNote'), 'Use isCategory(s, "StaveNote") directly'); - notOk(isTabNote(s), 'isTabNote helper function. s is NOT a TabNote.'); - const t = new TabNote({ positions: [{ str: 2, fret: 1 }], duration: '1' }); - ok(isTabNote(t), 'isTabNote helper function'); - notOk(isStaveNote(t), 't is NOT a StaveNote'); - ok(isNote(s), 'StaveNote extends StemmableNote which extends Note, so s is a Note'); - ok(isStemmableNote(t), 'TabNote extends StemmableNote'); - ok(isNote(t), 'TabNote extends StemmableNote which extends Note, so t is a Note'); - const canvas = document.createElement('canvas'); - canvas.width = 800; - canvas.height = 400; - const ctx = new CanvasContext(canvas.getContext('2d')); - ok(isRenderContext(ctx), 'ctx is a RenderContext'); -} -function checkFakeObjects(fakeStemmableNote, fakeStaveNote) { - ok(isStemmableNote(fakeStemmableNote), 'Fake StemmableNote is a StemmableNote.'); - notOk(isNote(fakeStemmableNote), 'Fake StemmableNote is not a Note (no ancestors with the correct CATEGORY).'); - ok(isCategory(fakeStaveNote, 'StaveNote'), 'Fake StaveNote is a StaveNote.'); - ok(isStaveNote(fakeStaveNote), 'Fake StaveNote is a StaveNote (via helper function).'); - ok(isCategory(fakeStaveNote, 'StemmableNote'), 'Fake StaveNote is also a StemmableNote (via inheritance).'); - notOk(isNote(fakeStaveNote), 'Fake StaveNote is not a Note. CATEGORY does not match.'); -} -function fakeES5() { - function FakeStemmableNote() { - this.isFake = true; - } - FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; - function FakeStaveNote() { - FakeStemmableNote.call(this); - } - FakeStaveNote.CATEGORY = StaveNote.CATEGORY; - FakeStaveNote.prototype = Object.create(FakeStemmableNote.prototype); - FakeStaveNote.prototype.constructor = FakeStaveNote; - const fakeStemmableNote = new FakeStemmableNote(); - const fakeStaveNote = new FakeStaveNote(); - checkFakeObjects(fakeStemmableNote, fakeStaveNote); -} -function fakeES6() { - class FakeStemmableNote { - } - FakeStemmableNote.CATEGORY = StemmableNote.CATEGORY; - class FakeStaveNote extends FakeStemmableNote { - } - FakeStaveNote.CATEGORY = StaveNote.CATEGORY; - const fakeStemmableNote = new FakeStemmableNote(); - const fakeStaveNote = new FakeStaveNote(); - checkFakeObjects(fakeStemmableNote, fakeStaveNote); -} -function edgeCaseES5vsES6() { - class Z extends Object { - } - class Y extends Z { - } - class X extends Y { - } - const zInstance = new Z(); - const xInstance = new X(); - ok(xInstance instanceof Object, 'es5 & es6: x IS an instanceof Object'); - ok(zInstance instanceof Z, 'es6: z IS an instanceof Z'); - ok(xInstance instanceof Y, 'es6: x IS an instanceof Y'); - ok(xInstance instanceof Z, 'es6: x IS an instanceof Z'); -} -VexFlowTests.register(TypeGuardTests); -export { TypeGuardTests }; diff --git a/build/esm/tests/vexflow_test_helpers.js b/build/esm/tests/vexflow_test_helpers.js deleted file mode 100644 index 1f633daaa7..0000000000 --- a/build/esm/tests/vexflow_test_helpers.js +++ /dev/null @@ -1,295 +0,0 @@ -import { Factory, Flow, Font, Renderer } from '../src/index.js'; -import { globalObject } from '../src/util.js'; -const global = globalObject(); -let originalFontNames; -function useTempFontStack(fontName) { - originalFontNames = Flow.getMusicFont(); - Flow.setMusicFont(...VexFlowTests.FONT_STACKS[fontName]); -} -function restoreOriginalFontStack() { - Flow.setMusicFont(...originalFontNames); -} -if (!global.$) { - global.$ = (param) => { - let element; - if (typeof param !== 'string') { - element = param; - } - else if (param.startsWith('<')) { - const tagName = param.match(/[A-Za-z]+/g)[0]; - element = document.createElement(tagName); - } - else { - element = document.querySelector(param); - } - const $element = { - get(index) { - return element; - }, - addClass(c) { - element.classList.add(c); - return $element; - }, - text(t) { - element.textContent = t; - return $element; - }, - html(h) { - if (!h) { - return element.innerHTML; - } - else { - element.innerHTML = h; - return $element; - } - }, - append(...elementsToAppend) { - elementsToAppend.forEach((e) => { - element.appendChild(e); - }); - return $element; - }, - attr(attrName, val) { - element.setAttribute(attrName, val); - return $element; - }, - }; - return $element; - }; -} -function sanitizeName(name) { - return name.replace(/[^a-zA-Z0-9]/g, '_'); -} -const CANVAS_TEST_CONFIG = { - backend: Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'Canvas', - fontStacks: ['Bravura'], -}; -const CANVAS_TEXT_CONFIG = { - backend: Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'Canvas', - fontStacks: ['Bravura'], -}; -const SVG_TEST_CONFIG = { - backend: Renderer.Backends.SVG, - tagName: 'div', - testType: 'SVG', - fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], -}; -const SVG_TEXT_CONFIG = { - backend: Renderer.Backends.SVG, - tagName: 'div', - testType: 'SVG', - fontStacks: ['Bravura'], -}; -const NODE_TEST_CONFIG = { - backend: Renderer.Backends.CANVAS, - tagName: 'canvas', - testType: 'NodeCanvas', - fontStacks: ['Bravura', 'Gonville', 'Petaluma', 'Leland'], -}; -export class VexFlowTests { - static register(test) { - VexFlowTests.tests.push(test); - } - static parseJobOptions(runOptions) { - let { jobs, job } = runOptions || { jobs: 1, job: 0 }; - if (window) { - const { location } = window; - if (location) { - const sps = new URLSearchParams(location.search); - const jobsParam = sps.get('jobs'); - const jobParam = sps.get('job'); - if (jobsParam) { - jobs = parseInt(jobsParam, 10); - } - if (jobParam) { - job = parseInt(jobParam, 10); - } - } - } - return { - jobs, - job, - }; - } - static run(runOptions) { - const { jobs, job } = VexFlowTests.parseJobOptions(runOptions); - VexFlowTests.tests.forEach((test, idx) => { - if (jobs === 1 || idx % jobs === job) { - test.Start(); - } - }); - } - static set NODE_FONT_STACKS(fontStacks) { - NODE_TEST_CONFIG.fontStacks = fontStacks; - } - static generateTestID(prefix) { - return prefix + '_' + VexFlowTests.NEXT_TEST_ID++; - } - static runTests(name, testFunc, params) { - VexFlowTests.runCanvasTest(name, testFunc, params); - VexFlowTests.runSVGTest(name, testFunc, params); - VexFlowTests.runNodeTest(name, testFunc, params); - } - static runTextTests(name, testFunc, params) { - VexFlowTests.runCanvasText(name, testFunc, params); - VexFlowTests.runSVGText(name, testFunc, params); - } - static createTest(elementId, testTitle, tagName, titleId = '') { - const anchorTestTitle = `${testTitle}`; - const title = $('
      ').addClass('name').attr('id', titleId).html(anchorTestTitle).get(0); - const vexOutput = $(`<${tagName}/>`).addClass('vex-tabdiv').attr('id', elementId).get(0); - const container = $('
      ').addClass('testcanvas').append(title, vexOutput).get(0); - $('#vexflow_testoutput').append(container); - return vexOutput; - } - static makeFactory(options, width = 450, height = 140) { - const { elementId, backend } = options; - return new Factory({ renderer: { elementId, backend, width, height } }); - } - static runCanvasTest(name, testFunc, params) { - if (VexFlowTests.RUN_CANVAS_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - static runCanvasText(name, testFunc, params) { - if (VexFlowTests.RUN_CANVAS_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, CANVAS_TEXT_CONFIG), { name, testFunc, params, helper })); - } - } - static runSVGTest(name, testFunc, params) { - if (VexFlowTests.RUN_SVG_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - static runSVGText(name, testFunc, params) { - if (VexFlowTests.RUN_SVG_TESTS) { - const helper = null; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, SVG_TEXT_CONFIG), { name, testFunc, params, helper })); - } - } - static runNodeTest(name, testFunc, params) { - if (VexFlowTests.RUN_NODE_TESTS) { - const helper = VexFlowTests.runNodeTestHelper; - VexFlowTests.runWithParams(Object.assign(Object.assign({}, NODE_TEST_CONFIG), { name, testFunc, params, helper })); - } - } - static runNodeTestHelper(fontName, element) { - if (Renderer.lastContext !== undefined) { - const moduleName = sanitizeName(QUnit.current_module); - const testName = sanitizeName(QUnit.current_test); - const onlyBravura = NODE_TEST_CONFIG.fontStacks.length === 1 && fontName === 'Bravura'; - const fontInfo = onlyBravura ? '' : `.${fontName}`; - const fileName = `${VexFlowTests.NODE_IMAGEDIR}/${moduleName}.${testName}${fontInfo}.png`; - const imageData = element.toDataURL().split(';base64,').pop(); - const imageBuffer = Buffer.from(imageData, 'base64'); - VexFlowTests.shims.fs.writeFileSync(fileName, imageBuffer, { encoding: 'base64' }); - } - } - static runWithParams({ fontStacks, testFunc, name, params, backend, tagName, testType, helper }) { - if (name === undefined) { - throw new Error('Test name is undefined.'); - } - const testTypeLowerCase = testType.toLowerCase(); - fontStacks.forEach((fontStackName) => { - QUnit.test(name, (assert) => { - useTempFontStack(fontStackName); - const elementId = VexFlowTests.generateTestID(`${testTypeLowerCase}_` + fontStackName); - const moduleName = assert.test.module.name; - const title = moduleName + ' › ' + name + ` › ${testType} + ${fontStackName}`; - let prefix = ''; - if (testTypeLowerCase === 'canvas') { - prefix = testTypeLowerCase + '_'; - } - else { - } - const titleId = `${prefix}${sanitizeName(moduleName)}.${sanitizeName(name)}.${fontStackName}`; - const element = VexFlowTests.createTest(elementId, title, tagName, titleId); - const options = { elementId, params, assert, backend }; - const isSVG = backend === Renderer.Backends.SVG; - const contextBuilder = isSVG ? Renderer.getSVGContext : Renderer.getCanvasContext; - testFunc(options, contextBuilder); - restoreOriginalFontStack(); - if (helper) - helper(fontStackName, element); - }); - }); - } - static plotLegendForNoteWidth(ctx, x, y) { - ctx.save(); - ctx.setFont(Font.SANS_SERIF, 8); - const spacing = 12; - let lastY = y; - function legend(color, text) { - ctx.beginPath(); - ctx.setStrokeStyle(color); - ctx.setFillStyle(color); - ctx.setLineWidth(10); - ctx.moveTo(x, lastY - 4); - ctx.lineTo(x + 10, lastY - 4); - ctx.stroke(); - ctx.setFillStyle('black'); - ctx.fillText(text, x + 15, lastY); - lastY += spacing; - } - legend('green', 'Note + Flag'); - legend('red', 'Modifiers'); - legend('#999', 'Displaced Head'); - legend('#DDD', 'Formatter Shift'); - ctx.restore(); - } -} -VexFlowTests.tests = []; -VexFlowTests.RUN_CANVAS_TESTS = true; -VexFlowTests.RUN_SVG_TESTS = true; -VexFlowTests.RUN_NODE_TESTS = false; -VexFlowTests.Font = { size: 10 }; -VexFlowTests.FONT_STACKS = { - Bravura: ['Bravura', 'Gonville', 'Custom'], - Gonville: ['Gonville', 'Bravura', 'Custom'], - Petaluma: ['Petaluma', 'Gonville', 'Bravura', 'Custom'], - Leland: ['Leland', 'Bravura', 'Gonville', 'Custom'], -}; -VexFlowTests.NEXT_TEST_ID = 0; -export const concat = (a, b) => a.concat(b); -export const MAJOR_KEYS = [ - 'C', - 'F', - 'Bb', - 'Eb', - 'Ab', - 'Db', - 'Gb', - 'Cb', - 'G', - 'D', - 'A', - 'E', - 'B', - 'F#', - 'C#', -]; -export const MINOR_KEYS = [ - 'Am', - 'Dm', - 'Gm', - 'Cm', - 'Fm', - 'Bbm', - 'Ebm', - 'Abm', - 'Em', - 'Bm', - 'F#m', - 'C#m', - 'G#m', - 'D#m', - 'A#m', -]; -Flow.Test = VexFlowTests; diff --git a/build/esm/tests/vf_prefix_tests.js b/build/esm/tests/vf_prefix_tests.js deleted file mode 100644 index d21fe87882..0000000000 --- a/build/esm/tests/vf_prefix_tests.js +++ /dev/null @@ -1,115 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Accidental, Annotation, Articulation, Barline, BarNote, Beam, Bend, BoundingBox, BoundingBoxComputation, ChordSymbol, Clef, ClefNote, Crescendo, Curve, Dot, EasyScore, Element, Factory, Flow, Font, Formatter, Fraction, FretHandFinger, GhostNote, Glyph, GlyphNote, GraceNote, GraceNoteGroup, GraceTabNote, KeyManager, KeySignature, KeySigNote, Modifier, ModifierContext, MultiMeasureRest, Music, Note, NoteHead, NoteSubGroup, Ornament, Parser, PedalMarking, Registry, Renderer, RepeatNote, Repetition, Stave, StaveConnector, StaveHairpin, StaveLine, StaveModifier, StaveNote, StaveTempo, StaveText, StaveTie, Stem, StringNumber, Stroke, System, TabNote, TabSlide, TabStave, TabTie, TextBracket, TextDynamics, TextFormatter, TextNote, TickContext, TimeSignature, TimeSigNote, Tremolo, Tuning, Tuplet, Vibrato, VibratoBracket, Voice, Volta, } from '../src/index.js'; -const VFPrefixTests = { - Start() { - QUnit.module('VF.* API'); - test('VF.* API', VF_Prefix); - test('VF Alias', VF_Alias); - }, -}; -function VF_Prefix() { - const VF = Vex.Flow; - equal(Accidental, VF.Accidental); - equal(Annotation, VF.Annotation); - equal(Articulation, VF.Articulation); - equal(Barline, VF.Barline); - equal(BarNote, VF.BarNote); - equal(Beam, VF.Beam); - equal(Bend, VF.Bend); - equal(BoundingBox, VF.BoundingBox); - equal(BoundingBoxComputation, VF.BoundingBoxComputation); - equal(ChordSymbol, VF.ChordSymbol); - equal(Clef, VF.Clef); - equal(ClefNote, VF.ClefNote); - equal(Crescendo, VF.Crescendo); - equal(Curve, VF.Curve); - equal(Dot, VF.Dot); - equal(EasyScore, VF.EasyScore); - equal(Element, VF.Element); - equal(Factory, VF.Factory); - equal(Flow.RESOLUTION, VF.RESOLUTION); - equal(Font, VF.Font); - equal(Formatter, VF.Formatter); - propEqual(new Formatter(), new VF.Formatter(), 'new Formatter()'); - equal(Fraction, VF.Fraction); - equal(FretHandFinger, VF.FretHandFinger); - equal(GhostNote, VF.GhostNote); - equal(Glyph, VF.Glyph); - equal(GlyphNote, VF.GlyphNote); - equal(GraceNote, VF.GraceNote); - equal(GraceNoteGroup, VF.GraceNoteGroup); - equal(GraceTabNote, VF.GraceTabNote); - equal(KeyManager, VF.KeyManager); - equal(KeySignature, VF.KeySignature); - equal(KeySigNote, VF.KeySigNote); - equal(Modifier, VF.Modifier); - equal(ModifierContext, VF.ModifierContext); - equal(MultiMeasureRest, VF.MultiMeasureRest); - equal(Music, VF.Music); - equal(Note, VF.Note); - equal(NoteHead, VF.NoteHead); - equal(NoteSubGroup, VF.NoteSubGroup); - equal(Ornament, VF.Ornament); - equal(Parser, VF.Parser); - equal(PedalMarking, VF.PedalMarking); - equal(Registry, VF.Registry); - equal(Renderer, VF.Renderer); - equal(RepeatNote, VF.RepeatNote); - equal(Repetition, VF.Repetition); - equal(Stave, VF.Stave); - notEqual(Stave, VF.StaveNote); - equal(StaveConnector, VF.StaveConnector); - equal(StaveHairpin, VF.StaveHairpin); - equal(StaveLine, VF.StaveLine); - equal(StaveModifier, VF.StaveModifier); - equal(StaveNote, VF.StaveNote); - equal(StaveTempo, VF.StaveTempo); - equal(StaveText, VF.StaveText); - equal(StaveTie, VF.StaveTie); - equal(Stem, VF.Stem); - equal(StringNumber, VF.StringNumber); - equal(Stroke, VF.Stroke); - equal(System, VF.System); - equal(TabNote, VF.TabNote); - equal(TabSlide, VF.TabSlide); - equal(TabStave, VF.TabStave); - equal(TabTie, VF.TabTie); - equal(TextBracket, VF.TextBracket); - equal(TextDynamics, VF.TextDynamics); - equal(TextFormatter, VF.TextFormatter); - equal(TextNote, VF.TextNote); - equal(TickContext, VF.TickContext); - equal(TimeSignature, VF.TimeSignature); - equal(TimeSigNote, VF.TimeSigNote); - equal(Tremolo, VF.Tremolo); - equal(Tuning, VF.Tuning); - equal(Tuplet, VF.Tuplet); - equal(Vibrato, VF.Vibrato); - equal(VibratoBracket, VF.VibratoBracket); - equal(Voice, VF.Voice); - equal(Volta, VF.Volta); -} -function VF_Alias() { - const Flow = Vex.Flow; - const VFAliases = { - get VFAccidental() { - return Flow.Accidental; - }, - get VFAnnotation() { - return Flow.Annotation; - }, - get VFVibrato() { - return Flow.Vibrato; - }, - }; - const { VFVibrato, VFAccidental, VFAnnotation } = VFAliases; - equal(Accidental, VFAccidental); - equal(Annotation, VFAnnotation); - const vibrato = new VFVibrato(); - ok(vibrato); - const acc1 = new VFAccidental('##'); - const acc2 = new Accidental('##'); - equal(acc1.type, acc2.type); -} -VexFlowTests.register(VFPrefixTests); -export { VFPrefixTests }; diff --git a/build/esm/tests/vibrato_tests.js b/build/esm/tests/vibrato_tests.js deleted file mode 100644 index 39091e9b02..0000000000 --- a/build/esm/tests/vibrato_tests.js +++ /dev/null @@ -1,86 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Bend, Font, Formatter, TabNote, TabStave, Vibrato } from '../src/index.js'; -const VibratoTests = { - Start() { - QUnit.module('Vibrato'); - const run = VexFlowTests.runTests; - run('Simple Vibrato', simple); - run('Harsh Vibrato', harsh); - run('Vibrato with Bend', withBend); - }, -}; -const tabNote = (noteStruct) => new TabNote(noteStruct); -function simple(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new Vibrato(), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new Vibrato(), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Simple Vibrato'); -} -function harsh(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.5, 1.5); - ctx.font = '10pt Arial'; - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 10 }, - { str: 4, fret: 9 }, - ], - duration: 'h', - }).addModifier(new Vibrato().setHarsh(true), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new Vibrato().setHarsh(true), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Harsh Vibrato'); -} -function withBend(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 500, 240); - ctx.scale(1.3, 1.3); - ctx.setFont(Font.SANS_SERIF, VexFlowTests.Font.size); - const stave = new TabStave(10, 10, 450).addTabGlyph().setContext(ctx).draw(); - const notes = [ - tabNote({ - positions: [ - { str: 2, fret: 9 }, - { str: 3, fret: 9 }, - ], - duration: 'q', - }) - .addModifier(new Bend('1/2', true), 0) - .addModifier(new Bend('1/2', true), 1) - .addModifier(new Vibrato(), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'q', - }) - .addModifier(new Bend('Full', false), 0) - .addModifier(new Vibrato().setVibratoWidth(60), 0), - tabNote({ - positions: [{ str: 2, fret: 10 }], - duration: 'h', - }).addModifier(new Vibrato().setVibratoWidth(120).setHarsh(true), 0), - ]; - Formatter.FormatAndDraw(ctx, stave, notes); - ok(true, 'Vibrato with Bend'); -} -VexFlowTests.register(VibratoTests); -export { VibratoTests }; diff --git a/build/esm/tests/vibratobracket_tests.js b/build/esm/tests/vibratobracket_tests.js deleted file mode 100644 index 4d77ecad41..0000000000 --- a/build/esm/tests/vibratobracket_tests.js +++ /dev/null @@ -1,45 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -const VibratoBracketTests = { - Start() { - QUnit.module('VibratoBracket'); - const run = VexFlowTests.runTests; - run('Simple VibratoBracket', simple); - run('Harsh VibratoBracket Without End Note', withoutEndNote); - run('Harsh VibratoBracket Without Start Note', withoutStartNote); - }, -}; -function createTest(noteGroup, setupVibratoBracket) { - return (options) => { - const factory = VexFlowTests.makeFactory(options, 650, 200); - const stave = factory.Stave(); - const score = factory.EasyScore(); - const voice = score.voice(score.notes(noteGroup)); - setupVibratoBracket(factory, voice.getTickables()); - factory.Formatter().joinVoices([voice]).formatToStave([voice], stave); - factory.draw(); - ok(true); - }; -} -const simple = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: notes[0], - to: notes[3], - options: { line: 2 }, - }); -}); -const withoutEndNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: notes[2], - to: null, - options: { line: 2, harsh: true }, - }); -}); -const withoutStartNote = createTest('c4/4, c4, c4, c4', (factory, notes) => { - factory.VibratoBracket({ - from: null, - to: notes[2], - options: { line: 2, harsh: true }, - }); -}); -VexFlowTests.register(VibratoBracketTests); -export { VibratoBracketTests }; diff --git a/build/esm/tests/voice_tests.js b/build/esm/tests/voice_tests.js deleted file mode 100644 index 31c1967c6d..0000000000 --- a/build/esm/tests/voice_tests.js +++ /dev/null @@ -1,69 +0,0 @@ -import { VexFlowTests } from './vexflow_test_helpers.js'; -import { Flow } from '../src/flow.js'; -import { Formatter } from '../src/formatter.js'; -import { Stave } from '../src/stave.js'; -import { Barline } from '../src/stavebarline.js'; -import { StaveNote } from '../src/stavenote.js'; -import { Voice } from '../src/voice.js'; -import { MockTickable } from './mocks.js'; -const VoiceTests = { - Start() { - QUnit.module('Voice'); - test('Strict Test', strict); - test('Ignore Test', ignore); - VexFlowTests.runTests('Full Voice Mode Test', full); - }, -}; -const BEAT = (1 * Flow.RESOLUTION) / 4; -const createTickable = () => new MockTickable().setTicks(BEAT); -function strict() { - expect(8); - const tickables = [createTickable(), createTickable(), createTickable()]; - const voice = new Voice(Flow.TIME4_4); - equal(voice.getTotalTicks().value(), BEAT * 4, '4/4 Voice has 4 beats'); - equal(voice.getTicksUsed().value(), BEAT * 0, 'No beats in voice'); - voice.addTickables(tickables); - equal(voice.getTicksUsed().value(), BEAT * 3, 'Three beats in voice'); - voice.addTickable(createTickable()); - equal(voice.getTicksUsed().value(), BEAT * 4, 'Four beats in voice'); - equal(voice.isComplete(), true, 'Voice is complete'); - const numeratorBeforeException = voice.getTicksUsed().numerator; - throws(() => voice.addTickable(createTickable()), /BadArgument/, '"Too many ticks" exception'); - equal(voice.getTicksUsed().numerator, numeratorBeforeException, 'Revert `ticksUsed` after a "Too many ticks" exception'); - equal(voice.getSmallestTickCount().value(), BEAT, 'Smallest tick count is BEAT'); -} -function ignore() { - const tickables = [ - createTickable(), - createTickable(), - createTickable().setIgnoreTicks(true), - createTickable(), - createTickable().setIgnoreTicks(true), - createTickable(), - ]; - const voice = new Voice(Flow.TIME4_4); - voice.addTickables(tickables); - ok(true, 'all pass'); -} -function full(options, contextBuilder) { - const ctx = contextBuilder(options.elementId, 550, 200); - const stave = new Stave(10, 50, 500).addClef('treble').addTimeSignature('4/4').setEndBarType(Barline.type.END); - const notes = [ - new StaveNote({ keys: ['c/4'], duration: '4' }), - new StaveNote({ keys: ['d/4'], duration: '4' }), - new StaveNote({ keys: ['r/4'], duration: '4r' }), - ]; - notes.forEach((note) => note.setStave(stave)); - const voice = new Voice(Flow.TIME4_4).setMode(Voice.Mode.FULL).addTickables(notes); - new Formatter().joinVoices([voice]).formatToStave([voice], stave); - stave.setContext(ctx).draw(); - voice.draw(ctx); - const bb = voice.getBoundingBox(); - if (bb) { - ctx.rect(bb.getX(), bb.getY(), bb.getW(), bb.getH()); - } - ctx.stroke(); - throws(() => voice.addTickable(new StaveNote({ keys: ['c/4'], duration: '2' })), /BadArgument/, 'Voice cannot exceed full amount of ticks'); -} -VexFlowTests.register(VoiceTests); -export { VoiceTests }; diff --git a/build/types/entry/vexflow-bravura.d.ts b/build/types/entry/vexflow-bravura.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-bravura.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-core.d.ts b/build/types/entry/vexflow-core.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-core.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-debug.d.ts b/build/types/entry/vexflow-debug.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-debug.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-font-bravura.d.ts b/build/types/entry/vexflow-font-bravura.d.ts deleted file mode 100644 index 8a613419c7..0000000000 --- a/build/types/entry/vexflow-font-bravura.d.ts +++ /dev/null @@ -1,4058 +0,0 @@ -export declare const Font: { - data: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesis: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassScoop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassDoitMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallLipShort: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassLiftMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallRoughMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassBend: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFlip: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassJazzTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassSmear: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMinor: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiagonalArrangementSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v7KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v7KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal25SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal25SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp35MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat35MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp35LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat35LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal55CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal55CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v11SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v11SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v23SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v23SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19SchismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19SchismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal143CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal143CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v49CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v49CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v49MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v49MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v13MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v13MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v19MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v19MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v49MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v49MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v19LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v19LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v13LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v13LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalShaftUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalShaftDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalAcute: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalGrave: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1MinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1MinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2MinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2MinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1TinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1TinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal3TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal3TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal4TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal4TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal6TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal6TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal8TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal8TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal9TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal9TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFractionalTinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFractionalTinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; - }; - metrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentTurn: { - point: number; - }; - ornamentTurnSlash: { - point: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - restQuarterStemUp: { - point: number; - }; - restQuarterStemDown: { - point: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; - }; -}; -export default Font; diff --git a/build/types/entry/vexflow-font-custom.d.ts b/build/types/entry/vexflow-font-custom.d.ts deleted file mode 100644 index 33d33952cd..0000000000 --- a/build/types/entry/vexflow-font-custom.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -export declare const Font: { - data: { - resolution: number; - fontFamily: string; - glyphs: { - noteheadSquareWhite: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal1: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal2: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal3: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal4: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexNoteHeadRectBlack: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexNoteHeadRectWhite: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexWiggleArpeggioUp: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - }; - }; - metrics: { - name: string; - smufl: boolean; - glyphs: {}; - }; -}; -export default Font; diff --git a/build/types/entry/vexflow-font-gonville.d.ts b/build/types/entry/vexflow-font-gonville.d.ts deleted file mode 100644 index a478f20559..0000000000 --- a/build/types/entry/vexflow-font-gonville.d.ts +++ /dev/null @@ -1,1588 +0,0 @@ -export declare const Font: { - data: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; - }; - metrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - point: number; - tupletPoint: number; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - flag: { - shiftX: number; - flag8thDown: { - shiftX: number; - }; - flag16thDown: { - shiftX: number; - }; - flag32ndDown: { - shiftX: number; - shiftY: number; - }; - flag64thDown: { - shiftX: number; - shiftY: number; - }; - flag128thDown: { - shiftX: number; - shiftY: number; - }; - flag32ndUp: { - shiftY: number; - }; - flag64thUp: { - shiftY: number; - }; - flag128thUp: { - shiftY: number; - }; - }; - clef_default: { - point: number; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - textNote: { - point: number; - default: {}; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - ornament: { - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - tremolo: { - default: { - shiftY: number; - }; - grace: { - shiftY: number; - }; - }; - }; - }; -}; -export default Font; diff --git a/build/types/entry/vexflow-font-leland.d.ts b/build/types/entry/vexflow-font-leland.d.ts deleted file mode 100644 index 4287ca67ea..0000000000 --- a/build/types/entry/vexflow-font-leland.d.ts +++ /dev/null @@ -1,1706 +0,0 @@ -export declare const Font: { - data: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; - }; - metrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentTurn: { - point: number; - }; - ornamentTurnSlash: { - point: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - restQuarterStemUp: { - point: number; - }; - restQuarterStemDown: { - point: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; - }; -}; -export default Font; diff --git a/build/types/entry/vexflow-font-petaluma.d.ts b/build/types/entry/vexflow-font-petaluma.d.ts deleted file mode 100644 index b2e7e2f179..0000000000 --- a/build/types/entry/vexflow-font-petaluma.d.ts +++ /dev/null @@ -1,2176 +0,0 @@ -export declare const Font: { - data: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesis: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassScoop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassDoitMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallLipShort: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassLiftMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallRoughMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassBend: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFlip: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassJazzTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassSmear: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMinor: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiagonalArrangementSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; - }; - metrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - displacedShiftX: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - noteheadBlack: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - flag16thUp: { - shiftX: number; - }; - flag32ndUp: { - shiftX: number; - }; - flag64thUp: { - shiftX: number; - }; - flag128thUp: { - shiftX: number; - }; - flag16thDown: { - shiftX: number; - }; - flag32ndDown: { - shiftX: number; - }; - flag64thDown: { - shiftX: number; - }; - flag128thDown: { - shiftX: number; - }; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - noteheadBlackStemUp: { - shiftX: number; - }; - noteheadHalfStemUp: { - shiftX: number; - }; - noteheadWholeStemUp: { - shiftX: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; - }; -}; -export default Font; diff --git a/build/types/entry/vexflow-gonville.d.ts b/build/types/entry/vexflow-gonville.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-gonville.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-leland.d.ts b/build/types/entry/vexflow-leland.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-leland.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow-petaluma.d.ts b/build/types/entry/vexflow-petaluma.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow-petaluma.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/entry/vexflow.d.ts b/build/types/entry/vexflow.d.ts deleted file mode 100644 index a5193666d7..0000000000 --- a/build/types/entry/vexflow.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from '../src/index'; -export * as default from '../src/index'; diff --git a/build/types/src/accidental.d.ts b/build/types/src/accidental.d.ts deleted file mode 100644 index 2f4167f984..0000000000 --- a/build/types/src/accidental.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Glyph } from './glyph'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -import { Voice } from './voice'; -export type Line = { - column: number; - line: number; - flatLine: boolean; - dblSharpLine: boolean; - numAcc: number; - width: number; -}; -/** - * An `Accidental` inherits from `Modifier`, and is formatted within a - * `ModifierContext`. Accidentals are modifiers that can be attached to - * notes. Support is included for both western and microtonal accidentals. - * - * See `tests/accidental_tests.ts` for usage examples. - */ -export declare class Accidental extends Modifier { - /** Accidental code provided to the constructor. */ - readonly type: string; - /** To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`. */ - static DEBUG: boolean; - protected accidental: { - code: string; - parenRightPaddingAdjustment: number; - }; - render_options: { - parenLeftPadding: number; - font_scale: number; - parenRightPadding: number; - }; - protected cautionary: boolean; - protected glyph: Glyph; - protected parenRight?: Glyph; - protected parenLeft?: Glyph; - /** Accidentals category string. */ - static get CATEGORY(): string; - /** Arrange accidentals inside a ModifierContext. */ - static format(accidentals: Accidental[], state: ModifierContextState): void; - /** Helper function to determine whether two lines of accidentals collide vertically */ - static checkCollision(line1: Line, line2: Line): boolean; - /** - * Use this method to automatically apply accidentals to a set of `voices`. - * The accidentals will be remembered between all the voices provided. - * Optionally, you can also provide an initial `keySignature`. - */ - static applyAccidentals(voices: Voice[], keySignature: string): void; - /** - * Create accidental. - * @param type value from `Vex.Flow.accidentalCodes.accidentals` table in `tables.ts`. - * For example: `#`, `##`, `b`, `n`, etc. - */ - constructor(type: string); - protected reset(): void; - /** Get width in pixels. */ - getWidth(): number; - /** Attach this accidental to `note`, which must be a `StaveNote`. */ - setNote(note: Note): this; - /** If called, draws parenthesis around accidental. */ - setAsCautionary(): this; - /** Render accidental onto canvas. */ - draw(): void; -} diff --git a/build/types/src/annotation.d.ts b/build/types/src/annotation.d.ts deleted file mode 100644 index f94eb8d63b..0000000000 --- a/build/types/src/annotation.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { FontInfo } from './font'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -export declare enum AnnotationHorizontalJustify { - LEFT = 1, - CENTER = 2, - RIGHT = 3, - CENTER_STEM = 4 -} -export declare enum AnnotationVerticalJustify { - TOP = 1, - CENTER = 2, - BOTTOM = 3, - CENTER_STEM = 4 -} -/** - * Annotations are modifiers that can be attached to - * notes. - * - * See `tests/annotation_tests.ts` for usage examples. - */ -export declare class Annotation extends Modifier { - /** To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`. */ - static DEBUG: boolean; - /** Annotations category string. */ - static get CATEGORY(): string; - static TEXT_FONT: Required; - /** Text annotations can be positioned and justified relative to the note. */ - static HorizontalJustify: typeof AnnotationHorizontalJustify; - static HorizontalJustifyString: Record; - static VerticalJustify: typeof AnnotationVerticalJustify; - static VerticalJustifyString: Record; - static get minAnnotationPadding(): number; - /** Arrange annotations within a `ModifierContext` */ - static format(annotations: Annotation[], state: ModifierContextState): boolean; - protected horizontalJustification: AnnotationHorizontalJustify; - protected verticalJustification: AnnotationVerticalJustify; - protected text: string; - /** - * Annotations inherit from `Modifier` and is positioned correctly when - * in a `ModifierContext`. - * Create a new `Annotation` with the string `text`. - */ - constructor(text: string); - /** - * Set vertical position of text (above or below stave). - * @param just value in `AnnotationVerticalJustify`. - */ - setVerticalJustification(just: string | AnnotationVerticalJustify): this; - /** - * Get horizontal justification. - */ - getJustification(): AnnotationHorizontalJustify; - /** - * Set horizontal justification. - * @param justification value in `Annotation.Justify`. - */ - setJustification(just: string | AnnotationHorizontalJustify): this; - /** Render text beside the note. */ - draw(): void; -} diff --git a/build/types/src/articulation.d.ts b/build/types/src/articulation.d.ts deleted file mode 100644 index f9c7de7593..0000000000 --- a/build/types/src/articulation.d.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { Builder } from './easyscore'; -import { Glyph } from './glyph'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { StemmableNote } from './stemmablenote'; -export interface ArticulationStruct { - code?: string; - aboveCode?: string; - belowCode?: string; - between_lines: boolean; -} -/** - * Articulations and Accents are modifiers that can be - * attached to notes. The complete list of articulations is available in - * `tables.ts` under `Vex.Flow.articulationCodes`. - * - * See `tests/articulation_tests.ts` for usage examples. - */ -export declare class Articulation extends Modifier { - /** To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`. */ - static DEBUG: boolean; - /** Articulations category string. */ - static get CATEGORY(): string; - protected static readonly INITIAL_OFFSET: number; - /** Articulation code provided to the constructor. */ - readonly type: string; - render_options: { - font_scale: number; - }; - protected articulation: ArticulationStruct; - protected glyph: Glyph; - /** - * FIXME: - * Most of the complex formatting logic (ie: snapping to space) is - * actually done in .render(). But that logic belongs in this method. - * - * Unfortunately, this isn't possible because, by this point, stem lengths - * have not yet been finalized. Finalized stem lengths are required to determine the - * initial position of any stem-side articulation. - * - * This indicates that all objects should have their stave set before being - * formatted. It can't be an optional if you want accurate vertical positioning. - * Consistently positioned articulations that play nice with other modifiers - * won't be possible until we stop relying on render-time formatting. - * - * Ideally, when this function has completed, the vertical articulation positions - * should be ready to render without further adjustment. But the current state - * is far from this ideal. - */ - static format(articulations: Articulation[], state: ModifierContextState): boolean; - static easyScoreHook({ articulations }: { - articulations: string; - }, note: StemmableNote, builder: Builder): void; - /** - * Create a new articulation. - * @param type entry in `Vex.Flow.articulationCodes` in `tables.ts` or Glyph code. - * - * Notes (by default): - * - Glyph codes ending with 'Above' will be positioned ABOVE - * - Glyph codes ending with 'Below' will be positioned BELOW - */ - constructor(type: string); - protected reset(): void; - /** Set if articulation should be rendered between lines. */ - setBetweenLines(betweenLines?: boolean): this; - /** Render articulation in position next to note. */ - draw(): void; -} diff --git a/build/types/src/barnote.d.ts b/build/types/src/barnote.d.ts deleted file mode 100644 index b3175ff022..0000000000 --- a/build/types/src/barnote.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { ModifierContext } from './modifiercontext'; -import { Note } from './note'; -import { BarlineType } from './stavebarline'; -/** - * A `BarNote` is used to render bar lines (from `barline.ts`). `BarNote`s can - * be added to a voice and rendered in the middle of a stave. Since it has no - * duration, it consumes no `tick`s, and is dealt with appropriately by the formatter. - * - * See `tests/barnote_tests.ts` for usage examples. - */ -export declare class BarNote extends Note { - /** To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - protected metrics: { - widths: Record; - }; - protected type: BarlineType; - constructor(type?: string | BarlineType); - /** Get the type of bar note.*/ - getType(): BarlineType; - /** Set the type of bar note. */ - setType(type: string | BarlineType): this; - addToModifierContext(mc: ModifierContext): this; - /** Overridden to ignore. */ - preFormat(): this; - /** Render note to stave. */ - draw(): void; -} diff --git a/build/types/src/beam.d.ts b/build/types/src/beam.d.ts deleted file mode 100644 index 3ea8b54da6..0000000000 --- a/build/types/src/beam.d.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { Element } from './element'; -import { Fraction } from './fraction'; -import { RenderContext } from './rendercontext'; -import { StemmableNote } from './stemmablenote'; -import { Voice } from './voice'; -export declare const BEAM_LEFT = "L"; -export declare const BEAM_RIGHT = "R"; -export declare const BEAM_BOTH = "B"; -export type PartialBeamDirection = typeof BEAM_LEFT | typeof BEAM_RIGHT | typeof BEAM_BOTH; -/** `Beams` span over a set of `StemmableNotes`. */ -export declare class Beam extends Element { - static get CATEGORY(): string; - render_options: { - flat_beam_offset?: number; - flat_beams: boolean; - secondary_break_ticks?: number; - show_stemlets: boolean; - beam_width: number; - max_slope: number; - min_slope: number; - slope_iterations: number; - slope_cost: number; - stemlet_extension: number; - partial_beam_length: number; - min_flat_beam_offset: number; - }; - notes: StemmableNote[]; - postFormatted: boolean; - slope: number; - private readonly stem_direction; - private readonly ticks; - private y_shift; - private break_on_indices; - private beam_count; - private unbeamable?; - /** - * Overrides to default beam directions for secondary-level beams that do not - * connect to any other note. See further explanation at - * `setPartialBeamSideAt` - */ - private forcedPartialDirections; - /** Get the direction of the beam */ - getStemDirection(): number; - /** - * Get the default beam groups for a provided time signature. - * Attempt to guess if the time signature is not found in table. - * Currently this is fairly naive. - */ - static getDefaultBeamGroups(time_sig: string): Fraction[]; - /** - * A helper function to automatically build basic beams for a voice. For more - * complex auto-beaming use `Beam.generateBeams()`. - * @param voice the voice to generate the beams for - * @param stem_direction a stem direction to apply to the entire voice - * @param groups an array of `Fraction` representing beat groupings for the beam - */ - static applyAndGetBeams(voice: Voice, stem_direction?: number, groups?: Fraction[]): Beam[]; - /** - * A helper function to autimatically build beams for a voice with - * configuration options. - * - * Example configuration object: - * - * ``` - * config = { - * groups: [new Vex.Flow.Fraction(2, 8)], - * stem_direction: -1, - * beam_rests: true, - * beam_middle_only: true, - * show_stemlets: false - * }; - * ``` - * @param notes an array of notes to create the beams for - * @param config the configuration object - * @param config.stem_direction set to apply the same direction to all notes - * @param config.beam_rests set to `true` to include rests in the beams - * @param config.beam_middle_only set to `true` to only beam rests in the middle of the beat - * @param config.show_stemlets set to `true` to draw stemlets for rests - * @param config.maintain_stem_directions set to `true` to not apply new stem directions - * @param config.groups array of `Fractions` that represent the beat structure to beam the notes - * - */ - static generateBeams(notes: StemmableNote[], config?: { - flat_beam_offset?: number; - flat_beams?: boolean; - secondary_breaks?: string; - show_stemlets?: boolean; - maintain_stem_directions?: boolean; - beam_middle_only?: boolean; - beam_rests?: boolean; - groups?: Fraction[]; - stem_direction?: number; - }): Beam[]; - constructor(notes: StemmableNote[], auto_stem?: boolean); - /** Get the notes in this beam. */ - getNotes(): StemmableNote[]; - /** Get the max number of beams in the set of notes. */ - getBeamCount(): number; - /** Set which note `indices` to break the secondary beam at. */ - breakSecondaryAt(indices: number[]): this; - /** - * Forces the direction of a partial beam (a secondary-level beam that exists - * on one note only of the beam group). This is useful in rhythms such as 6/8 - * eighth-sixteenth-eighth-sixteenth, where the direction of the beam on the - * first sixteenth note can help imply whether the rhythm is to be felt as - * three groups of eighth notes (typical) or as two groups of three-sixteenths - * (less common): - * ``` - * ┌───┬──┬──┐ ┌──┬──┬──┐ - * │ ├─ │ ─┤ vs │ ─┤ │ ─┤ - * │ │ │ │ │ │ │ │ - * ``` - */ - setPartialBeamSideAt(noteIndex: number, side: PartialBeamDirection): this; - /** - * Restore the default direction of a partial beam (a secondary-level beam - * that does not connect to any other notes). - */ - unsetPartialBeamSideAt(noteIndex: number): this; - /** Return the y coordinate for linear function. */ - getSlopeY(x: number, first_x_px: number, first_y_px: number, slope: number): number; - /** Calculate the best possible slope for the provided notes. */ - calculateSlope(): void; - /** Calculate a slope and y-shift for flat beams. */ - calculateFlatSlope(): void; - /** Return the Beam y offset. */ - getBeamYToDraw(): number; - /** - * Create new stems for the notes in the beam, so that each stem - * extends into the beams. - */ - applyStemExtensions(): void; - /** Return upper level beam direction. */ - lookupBeamDirection(duration: string, prev_tick: number, tick: number, next_tick: number, noteIndex: number): PartialBeamDirection; - /** Get the x coordinates for the beam lines of specific `duration`. */ - getBeamLines(duration: string): { - start: number; - end?: number; - }[]; - /** Render the stems for each note. */ - protected drawStems(ctx: RenderContext): void; - protected drawBeamLines(ctx: RenderContext): void; - /** Pre-format the beam. */ - preFormat(): this; - /** - * Post-format the beam. This can only be called after - * the notes in the beam have both `x` and `y` values. ie: they've - * been formatted and have staves. - */ - postFormat(): void; - /** Render the beam to the canvas context */ - draw(): void; -} diff --git a/build/types/src/bend.d.ts b/build/types/src/bend.d.ts deleted file mode 100644 index a9a98cd821..0000000000 --- a/build/types/src/bend.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { FontInfo } from './font'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -export interface BendPhrase { - x?: number; - type: number; - text: string; - width?: number; - draw_width?: number; -} -/** Bend implements tablature bends. */ -export declare class Bend extends Modifier { - static get CATEGORY(): string; - static get UP(): number; - static get DOWN(): number; - /** Default text font. */ - static TEXT_FONT: Required; - static format(bends: Bend[], state: ModifierContextState): boolean; - protected text: string; - protected tap: string; - protected release: boolean; - protected phrase: BendPhrase[]; - render_options: { - line_width: number; - release_width: number; - bend_width: number; - line_style: string; - }; - /** - * Example of a phrase: - * ``` - * [{ - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "whole" - * width: 8; - * }, - * { - * type: UP, - * text: "half" - * width: 8; - * }, - * { - * type: UP, - * text: "whole" - * width: 8; - * }, - * { - * type: DOWN, - * text: "1 1/2" - * width: 8; - * }] - * ``` - * @param text text for bend ("Full", "Half", etc.) (DEPRECATED) - * @param release if true, render a release. (DEPRECATED) - * @param phrase if set, ignore "text" and "release", and use the more sophisticated phrase specified - */ - constructor(text: string, release?: boolean, phrase?: BendPhrase[]); - /** Set horizontal shift in pixels. */ - setXShift(value: number): this; - setTap(value: string): this; - /** Get text provided in the constructor. */ - getText(): string; - getTextHeight(): number; - /** Recalculate width. */ - protected updateWidth(): this; - /** Draw the bend on the rendering context. */ - draw(): void; -} diff --git a/build/types/src/boundingbox.d.ts b/build/types/src/boundingbox.d.ts deleted file mode 100644 index dfe3b3bce0..0000000000 --- a/build/types/src/boundingbox.d.ts +++ /dev/null @@ -1,42 +0,0 @@ -export interface Bounds { - x: number; - y: number; - w: number; - h: number; -} -export declare class BoundingBox implements Bounds { - x: number; - y: number; - w: number; - h: number; - /** - * Create a new copy. - */ - static copy(that: BoundingBox): BoundingBox; - constructor(x: number, y: number, w: number, h: number); - /** Get x position. */ - getX(): number; - /** Get y position. */ - getY(): number; - /** Get width. */ - getW(): number; - /** Get height. */ - getH(): number; - /** Set x position. */ - setX(x: number): this; - /** Set y position. */ - setY(y: number): this; - /** Set width. */ - setW(w: number): this; - /** Set height. */ - setH(h: number): this; - /** Move to position. */ - move(x: number, y: number): this; - /** Clone. */ - clone(): BoundingBox; - /** - * Merge my box with given box. Creates a bigger bounding box unless - * the given box is contained in this one. - */ - mergeWith(boundingBox: BoundingBox): this; -} diff --git a/build/types/src/boundingboxcomputation.d.ts b/build/types/src/boundingboxcomputation.d.ts deleted file mode 100644 index 3ad9086536..0000000000 --- a/build/types/src/boundingboxcomputation.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * BoundingBoxComputation computes metrics for a bounding box by continuously - * taking canvas path commands. - * - * Warning: This class is merely a crutch to get bounding box information without - * explicit metadata. This is likely to get deprecated following SMuFL support. - * - * based on: https://github.com/canvg/canvg/blob/master/src/BoundingBox.ts (MIT License) - */ -export declare class BoundingBoxComputation { - protected x1: number; - protected y1: number; - protected x2: number; - protected y2: number; - /** Get calculated X1. */ - getX1(): number; - /** Get calculated Y1. */ - getY1(): number; - /** Get calculated width. */ - width(): number; - /** Get calculated height. */ - height(): number; - /** Add point to BoundingBox. */ - addPoint(x: number, y: number): void; - /** Add X to BoundingBox. */ - addX(x: number): void; - /** Add Y to BoundingBox. */ - addY(y: number): void; - /** Add quadratic curve to BoundingBox. */ - addQuadraticCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number): void; - /** Add bezier curve to BoundingBox. */ - addBezierCurve(p0x: number, p0y: number, p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): void; -} diff --git a/build/types/src/canvascontext.d.ts b/build/types/src/canvascontext.d.ts deleted file mode 100644 index 66c63216fe..0000000000 --- a/build/types/src/canvascontext.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { FontInfo } from './font'; -import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; -interface OffscreenCanvas extends EventTarget { - width: number; - height: number; -} -interface OffscreenCanvasRenderingContext2D extends CanvasState, CanvasTransform, CanvasCompositing, CanvasImageSmoothing, CanvasFillStrokeStyles, CanvasShadowStyles, CanvasFilters, CanvasRect, CanvasDrawPath, CanvasText, CanvasDrawImage, CanvasImageData, CanvasPathDrawingStyles, CanvasTextDrawingStyles, CanvasPath { - readonly canvas: OffscreenCanvas; -} -/** - * A rendering context for the Canvas backend. This class serves as a proxy for the - * underlying CanvasRenderingContext2D object, part of the browser's API. - */ -export declare class CanvasContext extends RenderContext { - /** The 2D rendering context from the Canvas API. Forward method calls to this object. */ - context2D: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D; - /** - * The HTMLCanvasElement or OffscreenCanvas that is associated with the above context. - * If there was no associated `` element, just store the default WIDTH / HEIGHT. - */ - canvas: HTMLCanvasElement | OffscreenCanvas | { - width: number; - height: number; - }; - /** Height of one line of text (in pixels). */ - textHeight: number; - static get WIDTH(): number; - static get HEIGHT(): number; - static get CANVAS_BROWSER_SIZE_LIMIT(): number; - /** - * Ensure that width and height do not exceed the browser limit. - * @returns array of [width, height] clamped to the browser limit. - */ - static sanitizeCanvasDims(width: number, height: number): [number, number]; - constructor(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D); - /** - * Set all pixels to transparent black rgba(0,0,0,0). - */ - clear(): void; - openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; - closeGroup(): void; - add(child: any): void; - setFillStyle(style: string): this; - /** CanvasContext ignores `setBackgroundFillStyle()`. */ - setBackgroundFillStyle(style: string): this; - setStrokeStyle(style: string): this; - setShadowColor(color: string): this; - setShadowBlur(blur: number): this; - setLineWidth(width: number): this; - setLineCap(capType: CanvasLineCap): this; - setLineDash(dash: number[]): this; - scale(x: number, y: number): this; - resize(width: number, height: number): this; - rect(x: number, y: number, width: number, height: number): this; - fillRect(x: number, y: number, width: number, height: number): this; - /** - * Set the pixels in a rectangular area to transparent black rgba(0,0,0,0). - */ - clearRect(x: number, y: number, width: number, height: number): this; - beginPath(): this; - moveTo(x: number, y: number): this; - lineTo(x: number, y: number): this; - bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; - quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; - arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; - fill(): this; - stroke(): this; - closePath(): this; - measureText(text: string): TextMeasure; - fillText(text: string, x: number, y: number): this; - save(): this; - restore(): this; - set fillStyle(style: string | CanvasGradient | CanvasPattern); - get fillStyle(): string | CanvasGradient | CanvasPattern; - set strokeStyle(style: string | CanvasGradient | CanvasPattern); - get strokeStyle(): string | CanvasGradient | CanvasPattern; - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - */ - setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont(): string; -} -export {}; diff --git a/build/types/src/chordsymbol.d.ts b/build/types/src/chordsymbol.d.ts deleted file mode 100644 index b79a87991d..0000000000 --- a/build/types/src/chordsymbol.d.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { FontInfo } from './font'; -import { Glyph } from './glyph'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { TextFormatter } from './textformatter'; -export interface ChordSymbolBlock { - text: string; - symbolType: SymbolTypes; - symbolModifier: SymbolModifiers; - xShift: number; - yShift: number; - vAlign: boolean; - width: number; - glyph?: Glyph; -} -export interface ChordSymbolGlyphMetrics { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; -} -export interface ChordSymbolMetrics { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: Record; -} -export declare enum ChordSymbolHorizontalJustify { - LEFT = 1, - CENTER = 2, - RIGHT = 3, - CENTER_STEM = 4 -} -export declare enum ChordSymbolVerticalJustify { - TOP = 1, - BOTTOM = 2 -} -export declare enum SymbolTypes { - GLYPH = 1, - TEXT = 2, - LINE = 3 -} -export declare enum SymbolModifiers { - NONE = 1, - SUBSCRIPT = 2, - SUPERSCRIPT = 3 -} -/** - * ChordSymbol is a modifier that creates a chord symbol above/below a chord. - * As a modifier, it is attached to an existing note. - */ -export declare class ChordSymbol extends Modifier { - static DEBUG: boolean; - static get CATEGORY(): string; - static readonly HorizontalJustify: typeof ChordSymbolHorizontalJustify; - static readonly HorizontalJustifyString: Record; - static readonly VerticalJustify: typeof ChordSymbolVerticalJustify; - static readonly VerticalJustifyString: Record; - static get superSubRatio(): number; - /** Currently unused: Globally turn off text formatting, if the built-in formatting does not work for your font. */ - static set NO_TEXT_FORMAT(val: boolean); - static get NO_TEXT_FORMAT(): boolean; - static getMetricForGlyph(glyphCode: string): ChordSymbolGlyphMetrics | undefined; - static get engravingFontResolution(): number; - static get spacingBetweenBlocks(): number; - static getWidthForGlyph(glyph: Glyph): number; - static getYShiftForGlyph(glyph: Glyph): number; - static getXShiftForGlyph(glyph: Glyph): number; - static get superscriptOffset(): number; - static get subscriptOffset(): number; - static get kerningOffset(): number; - static readonly glyphs: Record; - static readonly symbolTypes: typeof SymbolTypes; - static readonly symbolModifiers: typeof SymbolModifiers; - static get metrics(): ChordSymbolMetrics; - static get lowerKerningText(): string[]; - static get upperKerningText(): string[]; - static isSuperscript(block: ChordSymbolBlock): boolean; - static isSubscript(block: ChordSymbolBlock): boolean; - static get minPadding(): number; - /** - * Estimate the width of the whole chord symbol, based on the sum of the widths of the individual blocks. - * Estimate how many lines above/below the staff we need. - */ - static format(symbols: ChordSymbol[], state: ModifierContextState): boolean; - /** Currently unused. */ - protected static noFormat: boolean; - protected symbolBlocks: ChordSymbolBlock[]; - protected horizontal: number; - protected vertical: number; - protected useKerning: boolean; - protected reportWidth: boolean; - protected textFormatter: TextFormatter; - constructor(); - /** - * Default text font. - * Choose a font family that works well with the current music engraving font. - * @override `Element.TEXT_FONT`. - */ - static get TEXT_FONT(): Required; - /** - * The offset is specified in `em`. Scale this value by the font size in pixels. - */ - get superscriptOffset(): number; - get subscriptOffset(): number; - setReportWidth(value: boolean): this; - getReportWidth(): boolean; - updateOverBarAdjustments(): void; - updateKerningAdjustments(): void; - /** Do some basic kerning so that letter chords like 'A' don't have the extensions hanging off to the right. */ - getKerningAdjustment(j: number): number; - /** - * ChordSymbol allows multiple blocks so we can mix glyphs and font text. - * Each block can have its own vertical orientation. - */ - getSymbolBlock(params?: any): ChordSymbolBlock; - /** Add a symbol to this chord, could be text, glyph or line. */ - addSymbolBlock(parameters: any): this; - /** Add a text block. */ - addText(text: string, parameters?: any): this; - /** Add a text block with superscript modifier. */ - addTextSuperscript(text: string): this; - /** Add a text block with subscript modifier. */ - addTextSubscript(text: string): this; - /** Add a glyph block with superscript modifier. */ - addGlyphSuperscript(glyph: string): this; - /** Add a glyph block. */ - addGlyph(glyph: string, params?: any): this; - /** - * Add a glyph for each character in 'text'. If the glyph is not available, use text from the font. - * e.g. `addGlyphOrText('(+5#11)')` will use text for the '5' and '11', and glyphs for everything else. - */ - addGlyphOrText(text: string, params?: any): this; - /** Add a line of the given width, used as a continuation of the previous symbol in analysis, or lyrics, etc. */ - addLine(width: number, params?: any): this; - /** - * Set the chord symbol's font family, size, weight, style (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * - * @override See: Element. - */ - setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; - setEnableKerning(val: boolean): this; - /** Set vertical position of text (above or below stave). */ - setVertical(vj: ChordSymbolVerticalJustify | string | number): this; - getVertical(): number; - /** Set horizontal justification. */ - setHorizontal(hj: ChordSymbolHorizontalJustify | string | number): this; - getHorizontal(): number; - getWidth(): number; - getYOffsetForText(text: string): number; - /** Render text and glyphs above/below the note. */ - draw(): void; -} diff --git a/build/types/src/clef.d.ts b/build/types/src/clef.d.ts deleted file mode 100644 index 3f5374537d..0000000000 --- a/build/types/src/clef.d.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Glyph } from './glyph'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export interface ClefType { - point: number; - code: string; - line: number; -} -export interface ClefAnnotatiomType extends ClefType { - x_shift: number; - code: string; - line: number; -} -export interface ClefMetrics { - width: number; - annotations: { - [key: string]: { - point: number; - [type: string]: { - line?: number; - shiftX?: number; - } | number; - }; - }; -} -/** - * Clef implements various types of clefs that can be rendered on a stave. - * - * See `tests/clef_tests.ts` for usage examples. - */ -export declare class Clef extends StaveModifier { - /** To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - annotation?: ClefAnnotatiomType; - /** - * The attribute `clef` must be a key from - * `Clef.types` - */ - clef: ClefType; - protected attachment?: Glyph; - protected size?: string; - protected type?: string; - /** - * Every clef name is associated with a glyph code from the font file - * and a default stave line number. - */ - static get types(): Record; - static get annotationSmufl(): Record; - /** Create a new clef. */ - constructor(type: string, size?: string, annotation?: string); - /** Set clef type, size and annotation. */ - setType(type: string, size?: string, annotation?: string): this; - /** Get clef width. */ - getWidth(): number; - /** Set associated stave. */ - setStave(stave: Stave): this; - /** Render clef. */ - draw(): void; -} diff --git a/build/types/src/clefnote.d.ts b/build/types/src/clefnote.d.ts deleted file mode 100644 index 76340ba8eb..0000000000 --- a/build/types/src/clefnote.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ClefAnnotatiomType, ClefType } from './clef'; -import { Note } from './note'; -/** ClefNote implements clef annotations in measures. */ -export declare class ClefNote extends Note { - static get CATEGORY(): string; - protected clef: ClefType; - protected annotation?: ClefAnnotatiomType; - protected type: string; - protected size: string; - constructor(type: string, size?: string, annotation?: string); - /** Set clef type, size and annotation. */ - setType(type: string, size: string, annotation: string): this; - /** Get associated clef. */ - getClef(): ClefType; - preFormat(): this; - /** Render clef note. */ - draw(): void; -} diff --git a/build/types/src/crescendo.d.ts b/build/types/src/crescendo.d.ts deleted file mode 100644 index af5069b5f4..0000000000 --- a/build/types/src/crescendo.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Note, NoteStruct } from './note'; -export interface CrescendoParams { - reverse: boolean; - height: number; - y: number; - end_x: number; - begin_x: number; -} -export declare class Crescendo extends Note { - static DEBUG: boolean; - /** Crescendo category string. */ - static get CATEGORY(): string; - protected decrescendo: boolean; - protected height: number; - protected line: number; - protected options: { - extend_left: number; - extend_right: number; - y_shift: number; - }; - constructor(noteStruct: NoteStruct); - setLine(line: number): this; - setHeight(height: number): this; - setDecrescendo(decresc: boolean): this; - preFormat(): this; - draw(): void; -} diff --git a/build/types/src/curve.d.ts b/build/types/src/curve.d.ts deleted file mode 100644 index 2742f3d30e..0000000000 --- a/build/types/src/curve.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Element } from './element'; -import { Note } from './note'; -export interface CurveOptions { - /** Two control points for the bezier curves. */ - cps?: { - x: number; - y: number; - }[]; - thickness?: number; - x_shift?: number; - y_shift?: number; - position?: string | number; - position_end?: string | number; - invert?: boolean; -} -export declare enum CurvePosition { - NEAR_HEAD = 1, - NEAR_TOP = 2 -} -export declare class Curve extends Element { - static get CATEGORY(): string; - render_options: Required; - protected from: Note; - protected to: Note; - static get Position(): typeof CurvePosition; - static get PositionString(): Record; - constructor(from: Note, to: Note, options: CurveOptions); - setNotes(from: Note, to: Note): this; - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial(): boolean; - renderCurve(params: { - last_y: number; - last_x: number; - first_y: number; - first_x: number; - direction: number; - }): void; - draw(): boolean; -} diff --git a/build/types/src/dot.d.ts b/build/types/src/dot.d.ts deleted file mode 100644 index 7cfff84e6f..0000000000 --- a/build/types/src/dot.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -export declare class Dot extends Modifier { - static get CATEGORY(): string; - protected radius: number; - protected dot_shiftY: number; - /** Returns the dots associated to a Note. */ - static getDots(note: Note): Dot[]; - /** Add a dot on the specified keys to the notes. */ - static buildAndAttach(notes: Note[], options?: { - index?: number; - all?: boolean; - }): void; - static format(dots: Dot[], state: ModifierContextState): boolean; - constructor(); - setNote(note: Note): this; - setDotShiftY(y: number): this; - draw(): void; -} diff --git a/build/types/src/easyscore.d.ts b/build/types/src/easyscore.d.ts deleted file mode 100644 index 7627c33d6d..0000000000 --- a/build/types/src/easyscore.d.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { Accidental } from './accidental'; -import { PartialBeamDirection } from './beam'; -import { Factory } from './factory'; -import { Note } from './note'; -import { Grammar, Match, Parser, Result, Rule, RuleFunction } from './parser'; -import { RenderContext } from './rendercontext'; -import { StemmableNote } from './stemmablenote'; -import { TupletOptions } from './tuplet'; -import { Voice } from './voice'; -export type CommitHook = (obj: any, note: StemmableNote, builder: Builder) => void; -export declare class EasyScoreGrammar implements Grammar { - builder: Builder; - constructor(builder: Builder); - begin(): RuleFunction; - LINE(): Rule; - PIECE(): Rule; - PIECES(): Rule; - PARAMS(): Rule; - CHORDORNOTE(): Rule; - CHORD(): Rule; - NOTES(): Rule; - NOTE(): Rule; - SINGLENOTE(): Rule; - ACCIDENTAL(): Rule; - DOTS(): Rule; - TYPE(): Rule; - DURATION(): Rule; - OPTS(): Rule; - KEYVALS(): Rule; - KEYVAL(): Rule; - VAL(): Rule; - KEY(): Rule; - DVAL(): Rule; - SVAL(): Rule; - NOTENAME(): Rule; - OCTAVE(): Rule; - ACCIDENTALS(): Rule; - MICROTONES(): Rule; - DURATIONS(): Rule; - TYPES(): Rule; - LPAREN(): Rule; - RPAREN(): Rule; - COMMA(): Rule; - DOT(): Rule; - SLASH(): Rule; - MAYBESLASH(): Rule; - EQUALS(): Rule; - LBRACKET(): Rule; - RBRACKET(): Rule; - EOL(): Rule; -} -export interface NotePiece { - key: string; - accid?: string | null; - octave?: string; -} -export declare class Piece { - chord: NotePiece[]; - duration: string; - dots: number; - type?: string; - options: { - [x: string]: string; - }; - constructor(duration: string); -} -export interface BuilderElements { - notes: StemmableNote[]; - accidentals: (Accidental | undefined)[][]; -} -export interface BuilderOptions extends Record { - stem?: string; - clef?: string; -} -export declare class Builder { - factory: Factory; - elements: BuilderElements; - options: BuilderOptions; - piece: Piece; - commitHooks: CommitHook[]; - rollingDuration: string; - constructor(factory: Factory); - reset(options?: BuilderOptions): void; - getFactory(): Factory; - getElements(): BuilderElements; - addCommitHook(commitHook: CommitHook): void; - resetPiece(): void; - setNoteDots(dots: Match[]): void; - setNoteDuration(duration?: string): void; - setNoteType(type?: string): void; - addNoteOption(key: string, value: string): void; - addNote(key?: string, accid?: string | null, octave?: string): void; - addSingleNote(key: string, accid?: string | null, octave?: string): void; - addChord(notes: Match[]): void; - commitPiece(): void; -} -export interface EasyScoreOptions { - factory?: Factory; - builder?: Builder; - commitHooks?: CommitHook[]; - throwOnError?: boolean; -} -export interface EasyScoreDefaults extends Record { - clef?: string; - time?: string; - stem?: string; -} -/** - * EasyScore implements a parser for a simple language to generate VexFlow objects. - */ -export declare class EasyScore { - static DEBUG: boolean; - defaults: EasyScoreDefaults; - options: EasyScoreOptions; - factory: Factory; - builder: Builder; - grammar: EasyScoreGrammar; - parser: Parser; - constructor(options?: EasyScoreOptions); - /** - * Set the score defaults. - * clef must be set appropriately to avoid errors when adding Staves. - * @param defaults.clef default clef ( treble | bass ...) see {@link Clef.types} - * @param defaults.time default time signature ( 4/4 | 9/8 ...) - * @param defaults.stem default stem arrangement (auto | up | down) - * @returns this - */ - set(defaults: EasyScoreDefaults): this; - /** - * @param options.factory is required. - * @returns this - */ - setOptions(options: EasyScoreOptions): this; - setContext(context: RenderContext): this; - parse(line: string, options?: BuilderOptions): Result; - beam(notes: StemmableNote[], options?: { - autoStem?: boolean; - secondaryBeamBreaks?: number[]; - partialBeamDirections?: { - [noteIndex: number]: PartialBeamDirection; - }; - }): StemmableNote[]; - tuplet(notes: StemmableNote[], options?: TupletOptions): StemmableNote[]; - notes(line: string, options?: BuilderOptions): StemmableNote[]; - voice(notes: Note[], options?: { - time?: string; - options?: { - softmaxFactor: number; - }; - }): Voice; - addCommitHook(commitHook: CommitHook): void; -} diff --git a/build/types/src/element.d.ts b/build/types/src/element.d.ts deleted file mode 100644 index 168bb42fcc..0000000000 --- a/build/types/src/element.d.ts +++ /dev/null @@ -1,229 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { FontInfo } from './font'; -import { Registry } from './registry'; -import { RenderContext } from './rendercontext'; -/** Element attributes. */ -export interface ElementAttributes { - [name: string]: string | undefined; - id: string; - type: string; - class: string; -} -/** Element style */ -export interface ElementStyle { - /** - * CSS color used for the shadow. - * - * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' - * - * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) - */ - shadowColor?: string; - /** - * Level of blur applied to shadows. - * - * Values that are not finite numbers greater than or equal to zero are ignored. - */ - shadowBlur?: number; - /** - * CSS color used with context fill command. - * - * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' - * - * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) - */ - fillStyle?: string; - /** - * CSS color used with context stroke command. - * - * Examples: 'red', '#ff0000', '#ff000010', 'rgb(255,0,0)' - * - * See [CSS Legal Color Values](https://www.w3schools.com/cssref/css_colors_legal.asp) - */ - strokeStyle?: string; - /** - * Line width, 1.0 by default. - */ - lineWidth?: number; -} -/** - * Element implements a generic base class for VexFlow, with implementations - * of general functions and properties that can be inherited by all VexFlow elements. - * - * The Element is an abstract class that needs to be subclassed to work. It handles - * style and text-font properties for the Element and any child elements, along with - * working with the Registry to create unique ids, but does not have any tools for - * formatting x or y positions or connections to a Stave. - */ -export declare abstract class Element { - static get CATEGORY(): string; - protected children: Element[]; - protected static ID: number; - protected static newID(): string; - /** - * Default font for text. This is not related to music engraving. Instead, see `Flow.setMusicFont(...fontNames)` - * to customize the font for musical symbols placed on the score. - */ - static TEXT_FONT: Required; - private context?; - protected rendered: boolean; - protected style?: ElementStyle; - private attrs; - protected boundingBox?: BoundingBox; - protected registry?: Registry; - /** - * Some elements include text. - * The `textFont` property contains information required to style the text (i.e., font family, size, weight, and style). - * It is undefined by default, and can be set using `setFont(...)` or `resetFont()`. - */ - protected textFont?: Required; - constructor(); - /** - * Adds a child Element to the Element, which lets it inherit the - * same style as the parent when setGroupStyle() is called. - * - * Examples of children are noteheads and stems. Modifiers such - * as Accidentals are generally not set as children. - * - * Note that StaveNote calls setGroupStyle() when setStyle() is called. - */ - addChildElement(child: Element): this; - getCategory(): string; - /** - * Set the element style used to render. - * - * Example: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.draw(); - * ``` - * Note: If the element draws additional sub-elements (ie.: Modifiers in a Stave), - * the style can be applied to all of them by means of the context: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.getContext().setFillStyle('red'); - * element.getContext().setStrokeStyle('red'); - * element.draw(); - * ``` - * or using drawWithStyle: - * ```typescript - * element.setStyle({ fillStyle: 'red', strokeStyle: 'red' }); - * element.drawWithStyle(); - * ``` - */ - setStyle(style: ElementStyle | undefined): this; - /** Set the element & associated children style used for rendering. */ - setGroupStyle(style: ElementStyle): this; - /** Get the element style used for rendering. */ - getStyle(): ElementStyle | undefined; - /** Apply the element style to `context`. */ - applyStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; - /** Restore the style of `context`. */ - restoreStyle(context?: RenderContext | undefined, style?: ElementStyle | undefined): this; - /** - * Draw the element and all its sub-elements (ie.: Modifiers in a Stave) - * with the element's style (see `getStyle()` and `setStyle()`) - */ - drawWithStyle(): void; - /** Draw an element. */ - abstract draw(...args: any[]): void; - /** Check if it has a class label (An element can have multiple class labels). */ - hasClass(className: string): boolean; - /** Add a class label (An element can have multiple class labels). */ - addClass(className: string): this; - /** Remove a class label (An element can have multiple class labels). */ - removeClass(className: string): this; - /** Call back from registry after the element is registered. */ - onRegister(registry: Registry): this; - /** Return the rendered status. */ - isRendered(): boolean; - /** Set the rendered status. */ - setRendered(rendered?: boolean): this; - /** Return the element attributes. */ - getAttributes(): ElementAttributes; - /** Return an attribute, such as 'id', 'type' or 'class'. */ - getAttribute(name: string): any; - /** Return associated SVGElement. */ - getSVGElement(suffix?: string): SVGElement | undefined; - /** Set an attribute such as 'id', 'class', or 'type'. */ - setAttribute(name: string, value: string | undefined): this; - /** Get the boundingBox. */ - getBoundingBox(): BoundingBox | undefined; - /** Return the context, such as an SVGContext or CanvasContext object. */ - getContext(): RenderContext | undefined; - /** Set the context to an SVGContext or CanvasContext object */ - setContext(context?: RenderContext): this; - /** Validate and return the rendering context. */ - checkContext(): RenderContext; - /** - * Provide a CSS compatible font string (e.g., 'bold 16px Arial') that will be applied - * to text (not glyphs). - */ - set font(f: string); - /** Returns the CSS compatible font string for the text font. */ - get font(): string; - /** - * Set the element's text font family, size, weight, style - * (e.g., `Arial`, `10pt`, `bold`, `italic`). - * - * This attribute does not determine the font used for musical Glyphs like treble clefs. - * - * @param font is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (at least one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). - * @param style is a string (e.g., 'italic', 'normal'). - * If no arguments are provided, then the font is set to the default font. - * Each Element subclass may specify its own default by overriding the static `TEXT_FONT` property. - */ - setFont(font?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; - /** - * Get the css string describing this Element's text font. e.g., - * 'bold 10pt Arial'. - */ - getFont(): string; - /** - * Reset the text font to the style indicated by the static `TEXT_FONT` property. - * Subclasses can call this to initialize `textFont` for the first time. - */ - resetFont(): void; - /** Return a copy of the current FontInfo object. */ - get fontInfo(): Required; - set fontInfo(fontInfo: FontInfo); - /** Change the font size, while keeping everything else the same. */ - setFontSize(size?: string | number): this; - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - * See Element.fontSizeInPixels or Element.fontSizeInPoints if you need to get a number for calculation purposes. - */ - getFontSize(): string; - /** - * The size is 1) a string of the form '10pt' or '16px', compatible with the CSS font-size property. - * or 2) a number, which is interpreted as a point size (i.e. 12 == '12pt'). - */ - set fontSize(size: string | number); - /** - * @returns a CSS font-size string (e.g., '18pt', '12px', '1em'). - */ - get fontSize(): string; - /** - * @returns the font size in `pt`. - */ - get fontSizeInPoints(): number; - /** - * @returns the font size in `px`. - */ - get fontSizeInPixels(): number; - /** - * @returns a CSS font-style string (e.g., 'italic'). - */ - get fontStyle(): string; - set fontStyle(style: string); - /** - * @returns a CSS font-weight string (e.g., 'bold'). - * As in CSS, font-weight is always returned as a string, even if it was set as a number. - */ - get fontWeight(): string; - set fontWeight(weight: string | number); -} diff --git a/build/types/src/factory.d.ts b/build/types/src/factory.d.ts deleted file mode 100644 index 981dabeebf..0000000000 --- a/build/types/src/factory.d.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { Accidental } from './accidental'; -import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; -import { Articulation } from './articulation'; -import { BarNote } from './barnote'; -import { Beam, PartialBeamDirection } from './beam'; -import { ChordSymbol } from './chordsymbol'; -import { ClefNote } from './clefnote'; -import { Curve, CurveOptions } from './curve'; -import { EasyScore, EasyScoreOptions } from './easyscore'; -import { Element } from './element'; -import { FontInfo } from './font'; -import { Formatter, FormatterOptions } from './formatter'; -import { FretHandFinger } from './frethandfinger'; -import { GhostNote } from './ghostnote'; -import { Glyph } from './glyph'; -import { GlyphNote, GlyphNoteOptions } from './glyphnote'; -import { GraceNote, GraceNoteStruct } from './gracenote'; -import { GraceNoteGroup } from './gracenotegroup'; -import { KeySigNote } from './keysignote'; -import { ModifierContext } from './modifiercontext'; -import { MultiMeasureRest, MultimeasureRestRenderOptions } from './multimeasurerest'; -import { Note, NoteStruct } from './note'; -import { NoteSubGroup } from './notesubgroup'; -import { Ornament } from './ornament'; -import { PedalMarking } from './pedalmarking'; -import { RenderContext } from './rendercontext'; -import { RepeatNote } from './repeatnote'; -import { Stave, StaveOptions } from './stave'; -import { BarlineType } from './stavebarline'; -import { StaveConnector, StaveConnectorType } from './staveconnector'; -import { StaveLine } from './staveline'; -import { StaveNote, StaveNoteStruct } from './stavenote'; -import { StaveTie } from './stavetie'; -import { StemmableNote } from './stemmablenote'; -import { StringNumber } from './stringnumber'; -import { System, SystemOptions } from './system'; -import { TabNote, TabNoteStruct } from './tabnote'; -import { TabStave } from './tabstave'; -import { TextBracket } from './textbracket'; -import { TextDynamics } from './textdynamics'; -import { TextNote, TextNoteStruct } from './textnote'; -import { TickContext } from './tickcontext'; -import { TimeSigNote } from './timesignote'; -import { Tuplet, TupletOptions } from './tuplet'; -import { VibratoBracket } from './vibratobracket'; -import { Voice, VoiceTime } from './voice'; -export interface FactoryOptions { - stave?: { - space: number; - }; - renderer?: { - elementId: string | null; - backend?: number; - width: number; - height: number; - background?: string; - }; - font?: FontInfo; -} -/** - * Factory implements a high level API around VexFlow. - */ -export declare class Factory { - /** To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`. */ - static DEBUG: boolean; - /** Default text font. */ - static TEXT_FONT: Required; - /** - * Static simplified function to access constructor without providing FactoryOptions - * - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = Vex.Flow.Factory.newFromElementId('boo', 1200, 600 );` - */ - static newFromElementId(elementId: string | null, width?: number, height?: number): Factory; - protected options: Required; - protected stave?: Stave; - protected context: RenderContext; - protected staves: Stave[]; - protected voices: Voice[]; - protected renderQ: Element[]; - protected systems: System[]; - /** - * Example: - * - * Create an SVG renderer and attach it to the DIV element named "boo" to render using 1200 and 600 - * - * `const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }});` - */ - constructor(options?: FactoryOptions); - reset(): void; - setOptions(options?: FactoryOptions): void; - initRenderer(): void; - getContext(): RenderContext; - setContext(context: RenderContext): this; - getStave(): Stave | undefined; - getVoices(): Voice[]; - /** Return pixels from current stave spacing. */ - Stave(params?: { - x?: number; - y?: number; - width?: number; - options?: StaveOptions; - }): Stave; - TabStave(params?: { - x?: number; - y?: number; - width?: number; - options?: StaveOptions; - }): TabStave; - StaveNote(noteStruct: StaveNoteStruct): StaveNote; - GlyphNote(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions): GlyphNote; - RepeatNote(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions): RepeatNote; - GhostNote(noteStruct: string | NoteStruct): GhostNote; - TextNote(noteStruct: TextNoteStruct): TextNote; - BarNote(params?: { - type?: BarlineType | string; - }): BarNote; - ClefNote(params?: { - type?: string; - options?: { - size?: string; - annotation?: string; - }; - }): ClefNote; - TimeSigNote(params?: { - time?: string; - }): TimeSigNote; - KeySigNote(params: { - key: string; - cancelKey?: string; - alterKey?: string[]; - }): KeySigNote; - TabNote(noteStruct: TabNoteStruct): TabNote; - GraceNote(noteStruct: GraceNoteStruct): GraceNote; - GraceNoteGroup(params: { - notes: StemmableNote[]; - slur?: boolean; - }): GraceNoteGroup; - Accidental(params: { - type: string; - }): Accidental; - Annotation(params?: { - text?: string; - hJustify?: string | AnnotationHorizontalJustify; - vJustify?: string | AnnotationVerticalJustify; - font?: FontInfo; - }): Annotation; - ChordSymbol(params?: { - vJustify?: string; - hJustify?: string; - kerning?: boolean; - reportWidth?: boolean; - fontFamily?: string; - fontSize?: number; - fontWeight?: string; - }): ChordSymbol; - Articulation(params?: { - betweenLines?: boolean; - type?: string; - position?: string | number; - }): Articulation; - Ornament(type: string, params?: { - position?: string | number; - upperAccidental?: string; - lowerAccidental?: string; - delayed?: boolean; - }): Ornament; - TextDynamics(params?: { - text?: string; - duration?: string; - dots?: number; - line?: number; - }): TextDynamics; - Fingering(params: { - number?: string; - position?: string; - }): FretHandFinger; - StringNumber(params: { - number: string; - position: string; - }, drawCircle?: boolean): StringNumber; - TickContext(): TickContext; - ModifierContext(): ModifierContext; - MultiMeasureRest(params: MultimeasureRestRenderOptions): MultiMeasureRest; - Voice(params?: { - time?: VoiceTime | string; - }): Voice; - StaveConnector(params: { - top_stave: Stave; - bottom_stave: Stave; - type: StaveConnectorType; - }): StaveConnector; - Formatter(options?: FormatterOptions): Formatter; - Tuplet(params?: { - notes?: Note[]; - options?: TupletOptions; - }): Tuplet; - Beam(params: { - notes: StemmableNote[]; - options?: { - autoStem?: boolean; - secondaryBeamBreaks?: number[]; - partialBeamDirections?: { - [noteIndex: number]: PartialBeamDirection; - }; - }; - }): Beam; - Curve(params: { - from: Note; - to: Note; - options: CurveOptions; - }): Curve; - StaveTie(params: { - from?: Note | null; - to?: Note | null; - first_indices?: number[]; - last_indices?: number[]; - text?: string; - options?: { - direction?: number; - }; - }): StaveTie; - StaveLine(params: { - from: StaveNote; - to: StaveNote; - first_indices: number[]; - last_indices: number[]; - options?: { - text?: string; - font?: FontInfo; - }; - }): StaveLine; - VibratoBracket(params: { - from: Note | null; - to: Note | null; - options: { - harsh?: boolean; - line?: number; - }; - }): VibratoBracket; - TextBracket(params: { - from: Note; - to: Note; - text: string; - options: { - superscript: string; - position: string; - line?: number; - font?: FontInfo; - }; - }): TextBracket; - System(params?: SystemOptions): System; - /** - * Creates EasyScore. Normally the first step after constructing a Factory. For example: - * ``` - * const vf: Factory = new Vex.Flow.Factory({renderer: { elementId: 'boo', width: 1200, height: 600 }}); - * const score: EasyScore = vf.EasyScore(); - * ``` - * @param options.factory optional instance of Factory - * @param options.builder instance of Builder - * @param options.commitHooks function to call after a note element is created - * @param options.throwOnError throw error in case of parsing error - */ - EasyScore(options?: EasyScoreOptions): EasyScore; - PedalMarking(params?: { - notes?: StaveNote[]; - options?: { - style: string; - }; - }): PedalMarking; - NoteSubGroup(params?: { - notes?: Note[]; - }): NoteSubGroup; - /** Render the score. */ - draw(): void; -} diff --git a/build/types/src/flow.d.ts b/build/types/src/flow.d.ts deleted file mode 100644 index cfe39cc2ff..0000000000 --- a/build/types/src/flow.d.ts +++ /dev/null @@ -1,264 +0,0 @@ -import { Accidental } from './accidental'; -import { Annotation, AnnotationHorizontalJustify, AnnotationVerticalJustify } from './annotation'; -import { Articulation } from './articulation'; -import { BarNote } from './barnote'; -import { Beam } from './beam'; -import { Bend } from './bend'; -import { BoundingBox } from './boundingbox'; -import { BoundingBoxComputation } from './boundingboxcomputation'; -import { CanvasContext } from './canvascontext'; -import { ChordSymbol, ChordSymbolHorizontalJustify, ChordSymbolVerticalJustify, SymbolModifiers, SymbolTypes } from './chordsymbol'; -import { Clef } from './clef'; -import { ClefNote } from './clefnote'; -import { Crescendo } from './crescendo'; -import { Curve, CurvePosition } from './curve'; -import { Dot } from './dot'; -import { EasyScore } from './easyscore'; -import { Element } from './element'; -import { Factory } from './factory'; -import { Font, FontModule, FontStyle, FontWeight } from './font'; -import { Formatter } from './formatter'; -import { Fraction } from './fraction'; -import { FretHandFinger } from './frethandfinger'; -import { GhostNote } from './ghostnote'; -import { Glyph } from './glyph'; -import { GlyphNote } from './glyphnote'; -import { GraceNote } from './gracenote'; -import { GraceNoteGroup } from './gracenotegroup'; -import { GraceTabNote } from './gracetabnote'; -import { KeyManager } from './keymanager'; -import { KeySignature } from './keysignature'; -import { KeySigNote } from './keysignote'; -import { Modifier, ModifierPosition } from './modifier'; -import { ModifierContext } from './modifiercontext'; -import { MultiMeasureRest } from './multimeasurerest'; -import { Music } from './music'; -import { Note } from './note'; -import { NoteHead } from './notehead'; -import { NoteSubGroup } from './notesubgroup'; -import { Ornament } from './ornament'; -import { Parenthesis } from './parenthesis'; -import { Parser } from './parser'; -import { PedalMarking } from './pedalmarking'; -import { Registry } from './registry'; -import { RenderContext } from './rendercontext'; -import { Renderer, RendererBackends, RendererLineEndType } from './renderer'; -import { RepeatNote } from './repeatnote'; -import { Stave } from './stave'; -import { Barline, BarlineType } from './stavebarline'; -import { StaveConnector } from './staveconnector'; -import { StaveHairpin } from './stavehairpin'; -import { StaveLine } from './staveline'; -import { StaveModifier, StaveModifierPosition } from './stavemodifier'; -import { StaveNote } from './stavenote'; -import { Repetition } from './staverepetition'; -import { StaveTempo } from './stavetempo'; -import { StaveText } from './stavetext'; -import { StaveTie } from './stavetie'; -import { Volta, VoltaType } from './stavevolta'; -import { Stem } from './stem'; -import { StringNumber } from './stringnumber'; -import { Stroke } from './strokes'; -import { SVGContext } from './svgcontext'; -import { System } from './system'; -import { TabNote } from './tabnote'; -import { TabSlide } from './tabslide'; -import { TabStave } from './tabstave'; -import { TabTie } from './tabtie'; -import { TextBracket, TextBracketPosition } from './textbracket'; -import { TextDynamics } from './textdynamics'; -import { TextFormatter } from './textformatter'; -import { TextJustification, TextNote } from './textnote'; -import { TickContext } from './tickcontext'; -import { TimeSignature } from './timesignature'; -import { TimeSigNote } from './timesignote'; -import { Tremolo } from './tremolo'; -import { Tuning } from './tuning'; -import { Tuplet } from './tuplet'; -import { Vibrato } from './vibrato'; -import { VibratoBracket } from './vibratobracket'; -import { Voice, VoiceMode } from './voice'; -export declare class Flow { - static get BUILD(): { - /** version number. */ - VERSION: string; - /** git commit ID that this library was built from. */ - ID: string; - /** The date when this library was compiled. */ - DATE: string; - }; - static Accidental: typeof Accidental; - static Annotation: typeof Annotation; - static Articulation: typeof Articulation; - static Barline: typeof Barline; - static BarNote: typeof BarNote; - static Beam: typeof Beam; - static Bend: typeof Bend; - static BoundingBox: typeof BoundingBox; - static BoundingBoxComputation: typeof BoundingBoxComputation; - static CanvasContext: typeof CanvasContext; - static ChordSymbol: typeof ChordSymbol; - static Clef: typeof Clef; - static ClefNote: typeof ClefNote; - static Crescendo: typeof Crescendo; - static Curve: typeof Curve; - static Dot: typeof Dot; - static EasyScore: typeof EasyScore; - static Element: typeof Element; - static Factory: typeof Factory; - static Font: typeof Font; - static Formatter: typeof Formatter; - static Fraction: typeof Fraction; - static FretHandFinger: typeof FretHandFinger; - static GhostNote: typeof GhostNote; - static Glyph: typeof Glyph; - static GlyphNote: typeof GlyphNote; - static GraceNote: typeof GraceNote; - static GraceNoteGroup: typeof GraceNoteGroup; - static GraceTabNote: typeof GraceTabNote; - static KeyManager: typeof KeyManager; - static KeySignature: typeof KeySignature; - static KeySigNote: typeof KeySigNote; - static Modifier: typeof Modifier; - static ModifierContext: typeof ModifierContext; - static MultiMeasureRest: typeof MultiMeasureRest; - static Music: typeof Music; - static Note: typeof Note; - static NoteHead: typeof NoteHead; - static NoteSubGroup: typeof NoteSubGroup; - static Ornament: typeof Ornament; - static Parenthesis: typeof Parenthesis; - static Parser: typeof Parser; - static PedalMarking: typeof PedalMarking; - static Registry: typeof Registry; - static RenderContext: typeof RenderContext; - static Renderer: typeof Renderer; - static RepeatNote: typeof RepeatNote; - static Repetition: typeof Repetition; - static Stave: typeof Stave; - static StaveConnector: typeof StaveConnector; - static StaveHairpin: typeof StaveHairpin; - static StaveLine: typeof StaveLine; - static StaveModifier: typeof StaveModifier; - static StaveNote: typeof StaveNote; - static StaveTempo: typeof StaveTempo; - static StaveText: typeof StaveText; - static StaveTie: typeof StaveTie; - static Stem: typeof Stem; - static StringNumber: typeof StringNumber; - static Stroke: typeof Stroke; - static SVGContext: typeof SVGContext; - static System: typeof System; - static TabNote: typeof TabNote; - static TabSlide: typeof TabSlide; - static TabStave: typeof TabStave; - static TabTie: typeof TabTie; - static TextBracket: typeof TextBracket; - static TextDynamics: typeof TextDynamics; - static TextFormatter: typeof TextFormatter; - static TextNote: typeof TextNote; - static TickContext: typeof TickContext; - static TimeSignature: typeof TimeSignature; - static TimeSigNote: typeof TimeSigNote; - static Tremolo: typeof Tremolo; - static Tuning: typeof Tuning; - static Tuplet: typeof Tuplet; - static Vibrato: typeof Vibrato; - static VibratoBracket: typeof VibratoBracket; - static Voice: typeof Voice; - static Volta: typeof Volta; - static AnnotationHorizontalJustify: typeof AnnotationHorizontalJustify; - static AnnotationVerticalJustify: typeof AnnotationVerticalJustify; - static ChordSymbolHorizontalJustify: typeof ChordSymbolHorizontalJustify; - static ChordSymbolVerticalJustify: typeof ChordSymbolVerticalJustify; - static SymbolTypes: typeof SymbolTypes; - static SymbolModifiers: typeof SymbolModifiers; - static CurvePosition: typeof CurvePosition; - static FontWeight: typeof FontWeight; - static FontStyle: typeof FontStyle; - static ModifierPosition: typeof ModifierPosition; - static RendererBackends: typeof RendererBackends; - static RendererLineEndType: typeof RendererLineEndType; - static BarlineType: typeof BarlineType; - static StaveModifierPosition: typeof StaveModifierPosition; - static VoltaType: typeof VoltaType; - static TextBracketPosition: typeof TextBracketPosition; - static TextJustification: typeof TextJustification; - static VoiceMode: typeof VoiceMode; - /** - * Examples: - * ``` - * Vex.Flow.setMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Bravura', 'Gonville'); - * ``` - * - * **CASE 1**: You are using `vexflow.js`, which includes all music fonts (Bravura, Gonville, Petaluma, Custom). - * In this case, calling this method is optional, since VexFlow already defaults to a music font stack of: - * 'Bravura', 'Gonville', 'Custom'. - * - * **CASE 2**: You are using `vexflow-bravura.js` or `vexflow-petaluma.js` or `vexflow-gonville.js`, - * which includes a single music font. Calling this method is unnecessary. - * - * **CASE 3**: You are using the light weight `vexflow-core.js` to take advantage of lazy loading for fonts. - * In this case, the default music font stack is empty. - * Example: - * ``` - * await Vex.Flow.fetchMusicFont('Petaluma'); - * Vex.Flow.setMusicFont('Petaluma'); - * ... (do VexFlow stuff) ... - * ``` - * See `demos/fonts/` for more examples. - * - * @returns an array of Font objects corresponding to the provided `fontNames`. - */ - static setMusicFont(...fontNames: string[]): Font[]; - /** - * Used with vexflow-core which supports dynamic font loading. - */ - static fetchMusicFont(fontName: string, fontModuleOrPath?: string | FontModule): Promise; - static getMusicFont(): string[]; - static get RENDER_PRECISION_PLACES(): number; - static set RENDER_PRECISION_PLACES(precision: number); - static get SOFTMAX_FACTOR(): number; - static set SOFTMAX_FACTOR(factor: number); - static get NOTATION_FONT_SCALE(): number; - static set NOTATION_FONT_SCALE(value: number); - static get TABLATURE_FONT_SCALE(): number; - static set TABLATURE_FONT_SCALE(value: number); - static get RESOLUTION(): number; - static set RESOLUTION(value: number); - static get SLASH_NOTEHEAD_WIDTH(): number; - static set SLASH_NOTEHEAD_WIDTH(value: number); - static get STAVE_LINE_DISTANCE(): number; - static set STAVE_LINE_DISTANCE(value: number); - static get STAVE_LINE_THICKNESS(): number; - static set STAVE_LINE_THICKNESS(value: number); - static get STEM_HEIGHT(): number; - static set STEM_HEIGHT(value: number); - static get STEM_WIDTH(): number; - static set STEM_WIDTH(value: number); - static get TIME4_4(): { - num_beats: number; - beat_value: number; - resolution: number; - }; - static get accidentalMap(): Record; - static get unicode(): Record; - static keySignature(spec: string): { - type: string; - line: number; - }[]; - static hasKeySignature(spec: string): boolean; - static getKeySignatures(): Record; - static clefProperties(clef: string): { - line_shift: number; - }; - static keyProperties(key: string, clef?: string, params?: any): any; - static durationToTicks(duration: string): number; -} diff --git a/build/types/src/font.d.ts b/build/types/src/font.d.ts deleted file mode 100644 index 70f4ded3f3..0000000000 --- a/build/types/src/font.d.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { ChordSymbolMetrics } from './chordsymbol'; -import { ClefMetrics } from './clef'; -import { NoteHeadMetrics } from './notehead'; -import { OrnamentMetrics } from './ornament'; -import { StringNumberMetrics } from './stringnumber'; -import { TupletMetrics } from './tuplet'; -export interface FontInfo { - /** CSS font-family, e.g., 'Arial', 'Helvetica Neue, Arial, sans-serif', 'Times, serif' */ - family?: string; - /** - * CSS font-size (e.g., '10pt', '12px'). - * For backwards compatibility with 3.0.9, plain numbers are assumed to be specified in 'pt'. - */ - size?: number | string; - /** `bold` or a number (e.g., 900) as inspired by CSS font-weight. */ - weight?: string | number; - /** `italic` as inspired by CSS font-style. */ - style?: string; -} -export type FontModule = { - data: FontData; - metrics: FontMetrics; -}; -export interface FontData { - glyphs: Record; - fontFamily?: string; - resolution: number; - generatedOn?: string; -} -/** Specified in the `xxx_metrics.ts` files. */ -export interface FontMetrics extends Record { - name: string; - smufl: boolean; - stave?: Record; - accidental?: Record; - clef_default?: ClefMetrics; - clef_small?: ClefMetrics; - pedalMarking?: Record>; - digits?: Record; - articulation?: Record>; - tremolo?: Record>; - chordSymbol?: ChordSymbolMetrics; - ornament?: Record; - noteHead?: NoteHeadMetrics; - stringNumber?: StringNumberMetrics; - tuplet?: TupletMetrics; - glyphs: Record; -} -export interface FontGlyph { - x_min: number; - x_max: number; - y_min?: number; - y_max?: number; - ha: number; - leftSideBearing?: number; - advanceWidth?: number; - o?: string; - cached_outline?: number[]; -} -export declare enum FontWeight { - NORMAL = "normal", - BOLD = "bold" -} -export declare enum FontStyle { - NORMAL = "normal", - ITALIC = "italic" -} -export declare class Font { - /** Default sans-serif font family. */ - static SANS_SERIF: string; - /** Default serif font family. */ - static SERIF: string; - /** Default font size in `pt`. */ - static SIZE: number; - /** Given a length (for units: pt, px, em, %, in, mm, cm) what is the scale factor to convert it to px? */ - static scaleToPxFrom: Record; - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of pixels that is equivalent to `fontSize` - */ - static convertSizeToPixelValue(fontSize?: string | number): number; - /** - * @param fontSize a font size to convert. Can be specified as a CSS length string (e.g., '16pt', '1em') - * or as a number (the unit is assumed to be 'pt'). See `Font.scaleToPxFrom` for the supported - * units (e.g., pt, em, %). - * @returns the number of points that is equivalent to `fontSize` - */ - static convertSizeToPointValue(fontSize?: string | number): number; - /** - * @param f - * @param size - * @param weight - * @param style - * @returns the `size` field will include the units (e.g., '12pt', '16px'). - */ - static validate(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): Required; - /** - * @param cssFontShorthand a string formatted as CSS font shorthand (e.g., 'italic bold 15pt Arial'). - */ - static fromCSSString(cssFontShorthand: string): Required; - /** - * @returns a CSS font shorthand string of the form `italic bold 16pt Arial`. - */ - static toCSSString(fontInfo?: FontInfo): string; - /** - * @param fontSize a number representing a font size, or a string font size with units. - * @param scaleFactor multiply the size by this factor. - * @returns size * scaleFactor (e.g., 16pt * 3 = 48pt, 8px * 0.5 = 4px, 24 * 2 = 48). - * If the fontSize argument was a number, the return value will be a number. - * If the fontSize argument was a string, the return value will be a string. - */ - static scaleSize(fontSize: T, scaleFactor: number): T; - /** - * @param weight a string (e.g., 'bold') or a number (e.g., 600 / semi-bold in the OpenType spec). - * @returns true if the font weight indicates bold. - */ - static isBold(weight?: string | number): boolean; - /** - * @param style - * @returns true if the font style indicates 'italic'. - */ - static isItalic(style?: string): boolean; - /** - * Customize this field to specify a different CDN for delivering web fonts. - * Alternative: https://cdn.jsdelivr.net/npm/vexflow-fonts@1.0.3/ - * Or you can use your own host. - */ - static WEB_FONT_HOST: string; - /** - * These font files will be loaded from the CDN specified by `Font.WEB_FONT_HOST` when - * `await Font.loadWebFonts()` is called. Customize this field to specify a different - * set of fonts to load. See: `Font.loadWebFonts()`. - */ - static WEB_FONT_FILES: Record; - /** - * @param fontName - * @param woffURL The absolute or relative URL to the woff file. - * @param includeWoff2 If true, we assume that a woff2 file is in - * the same folder as the woff file, and will append a `2` to the url. - */ - static loadWebFont(fontName: string, woffURL: string, includeWoff2?: boolean): Promise; - /** - * Load the web fonts that are used by ChordSymbol. For example, `flow.html` calls: - * `await Vex.Flow.Font.loadWebFonts();` - * Alternatively, you may load web fonts with a stylesheet link (e.g., from Google Fonts), - * and a @font-face { font-family: ... } rule in your CSS. - * If you do not load either of these fonts, ChordSymbol will fall back to Times or Arial, - * depending on the current music engraving font. - * - * You can customize `Font.WEB_FONT_HOST` and `Font.WEB_FONT_FILES` to load different fonts - * for your app. - */ - static loadWebFonts(): Promise; - /** - * @param fontName - * @param data optionally set the Font object's `.data` property. - * This is usually done when setting up a font for the first time. - * @param metrics optionally set the Font object's `.metrics` property. - * This is usually done when setting up a font for the first time. - * @returns a Font object with the given `fontName`. - * Reuse an existing Font object if a matching one is found. - */ - static load(fontName: string, data?: FontData, metrics?: FontMetrics): Font; - protected name: string; - protected data?: FontData; - protected metrics?: FontMetrics; - /** - * Use `Font.load(fontName)` to get a Font object. - * Do not call this constructor directly. - */ - private constructor(); - getName(): string; - getData(): FontData; - getMetrics(): FontMetrics; - setData(data: FontData): void; - setMetrics(metrics: FontMetrics): void; - hasData(): boolean; - getResolution(): number; - getGlyphs(): Record; - /** - * Use the provided key to look up a value in this font's metrics file (e.g., bravura_metrics.ts, petaluma_metrics.ts). - * @param key is a string separated by periods (e.g., stave.endPaddingMax, clef.lineCount.'5'.shiftY). - * @param defaultValue is returned if the lookup fails. - * @returns the retrieved value (or `defaultValue` if the lookup fails). - */ - lookupMetric(key: string, defaultValue?: Record | number): any; - /** For debugging. */ - toString(): string; -} diff --git a/build/types/src/fonts/bravura_glyphs.d.ts b/build/types/src/fonts/bravura_glyphs.d.ts deleted file mode 100644 index e96c095f36..0000000000 --- a/build/types/src/fonts/bravura_glyphs.d.ts +++ /dev/null @@ -1,3535 +0,0 @@ -export declare const BravuraFont: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesis: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassScoop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassDoitMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallLipShort: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassLiftMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallRoughMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassBend: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFlip: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassJazzTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassSmear: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMinor: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiagonalArrangementSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v7KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v7KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal25SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal25SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal35LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp35MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat35MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp35LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat35LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp25SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat25SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v7kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v7kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal55CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal55CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v11CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v11SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v11SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v11SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v11SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v11CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v11CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp55CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat55CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp17CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat17CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v11kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v11kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v23SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v23SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp5v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat5v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp23CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat23CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19SchismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19SchismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17KleismaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal17KleismaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal143CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal143CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v49CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v49CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v19CommaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7v19CommaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23SmallDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal23SmallDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v49MediumDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v49MediumDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal49LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal11v19LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13LargeDiesisUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5v13LargeDiesisDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v13MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v13MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v19MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v19MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v49MUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v49MDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp49LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat49LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp11v19LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat11v19LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalSharp5v13LUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFlat5v13LDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp23SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat23SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp49SDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat49SUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp7v19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat7v19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp19CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat19CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp11v49CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat11v49CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp143CDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat143CUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp17kDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat17kUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleSharp19sDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalDoubleFlat19sUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalShaftUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalShaftDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalAcute: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalGrave: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1MinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1MinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2MinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2MinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1TinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal1TinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal2TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal3TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal3TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal4TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal4TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal5TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal6TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal6TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal7TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal8TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal8TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal9TinasUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittal9TinasDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFractionalTinaUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accSagittalFractionalTinaDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/bravura_metrics.d.ts b/build/types/src/fonts/bravura_metrics.d.ts deleted file mode 100644 index f35b3f1b71..0000000000 --- a/build/types/src/fonts/bravura_metrics.d.ts +++ /dev/null @@ -1,524 +0,0 @@ -/** - * The Bravura font was created by Daniel Spreadbury @ Steinberg. - * https://github.com/steinbergmedia/bravura/ - */ -export declare const BravuraMetrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentTurn: { - point: number; - }; - ornamentTurnSlash: { - point: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - restQuarterStemUp: { - point: number; - }; - restQuarterStemDown: { - point: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; -}; diff --git a/build/types/src/fonts/custom_glyphs.d.ts b/build/types/src/fonts/custom_glyphs.d.ts deleted file mode 100644 index 30f155c6ac..0000000000 --- a/build/types/src/fonts/custom_glyphs.d.ts +++ /dev/null @@ -1,90 +0,0 @@ -export declare const CustomFont: { - resolution: number; - fontFamily: string; - glyphs: { - noteheadSquareWhite: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal1: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal2: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal3: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexAccidentalMicrotonal4: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexNoteHeadRectBlack: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexNoteHeadRectWhite: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - vexWiggleArpeggioUp: { - x_min: number; - x_max: number; - ha: number; - o: string; - }; - }; -}; diff --git a/build/types/src/fonts/custom_metrics.d.ts b/build/types/src/fonts/custom_metrics.d.ts deleted file mode 100644 index 3f88d3695f..0000000000 --- a/build/types/src/fonts/custom_metrics.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export declare const CustomMetrics: { - name: string; - smufl: boolean; - glyphs: {}; -}; diff --git a/build/types/src/fonts/gonville_glyphs.d.ts b/build/types/src/fonts/gonville_glyphs.d.ts deleted file mode 100644 index b58a8fc6f4..0000000000 --- a/build/types/src/fonts/gonville_glyphs.d.ts +++ /dev/null @@ -1,1103 +0,0 @@ -export declare const GonvilleSmuflFont: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arrowheadBlackDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/gonville_metrics.d.ts b/build/types/src/fonts/gonville_metrics.d.ts deleted file mode 100644 index dc91fff971..0000000000 --- a/build/types/src/fonts/gonville_metrics.d.ts +++ /dev/null @@ -1,486 +0,0 @@ -/** - * The Gonville font was created by Simon Tatham. - * https://www.chiark.greenend.org.uk/~sgtatham/gonville/ - */ -export declare const GonvilleMetrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - point: number; - tupletPoint: number; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - flag: { - shiftX: number; - flag8thDown: { - shiftX: number; - }; - flag16thDown: { - shiftX: number; - }; - flag32ndDown: { - shiftX: number; - shiftY: number; - }; - flag64thDown: { - shiftX: number; - shiftY: number; - }; - flag128thDown: { - shiftX: number; - shiftY: number; - }; - flag32ndUp: { - shiftY: number; - }; - flag64thUp: { - shiftY: number; - }; - flag128thUp: { - shiftY: number; - }; - }; - clef_default: { - point: number; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - textNote: { - point: number; - default: {}; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - ornament: { - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - tremolo: { - default: { - shiftY: number; - }; - grace: { - shiftY: number; - }; - }; - }; -}; diff --git a/build/types/src/fonts/leland_glyphs.d.ts b/build/types/src/fonts/leland_glyphs.d.ts deleted file mode 100644 index c257ad4c6c..0000000000 --- a/build/types/src/fonts/leland_glyphs.d.ts +++ /dev/null @@ -1,1183 +0,0 @@ -export declare const LelandFont: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/leland_metrics.d.ts b/build/types/src/fonts/leland_metrics.d.ts deleted file mode 100644 index 2a0909a460..0000000000 --- a/build/types/src/fonts/leland_metrics.d.ts +++ /dev/null @@ -1,520 +0,0 @@ -export declare const LelandMetrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentTurn: { - point: number; - }; - ornamentTurnSlash: { - point: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - restQuarterStemUp: { - point: number; - }; - restQuarterStemDown: { - point: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; -}; diff --git a/build/types/src/fonts/load_all.d.ts b/build/types/src/fonts/load_all.d.ts deleted file mode 100644 index c8159357a9..0000000000 --- a/build/types/src/fonts/load_all.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadAllMusicFonts(): void; diff --git a/build/types/src/fonts/load_bravura.d.ts b/build/types/src/fonts/load_bravura.d.ts deleted file mode 100644 index 368afa2244..0000000000 --- a/build/types/src/fonts/load_bravura.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadBravura(): void; diff --git a/build/types/src/fonts/load_custom.d.ts b/build/types/src/fonts/load_custom.d.ts deleted file mode 100644 index 2b3b5207a7..0000000000 --- a/build/types/src/fonts/load_custom.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadCustom(): void; diff --git a/build/types/src/fonts/load_gonville.d.ts b/build/types/src/fonts/load_gonville.d.ts deleted file mode 100644 index 1dad266116..0000000000 --- a/build/types/src/fonts/load_gonville.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadGonville(): void; diff --git a/build/types/src/fonts/load_leland.d.ts b/build/types/src/fonts/load_leland.d.ts deleted file mode 100644 index cd62e01095..0000000000 --- a/build/types/src/fonts/load_leland.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadLeland(): void; diff --git a/build/types/src/fonts/load_petaluma.d.ts b/build/types/src/fonts/load_petaluma.d.ts deleted file mode 100644 index db8a66540a..0000000000 --- a/build/types/src/fonts/load_petaluma.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadPetaluma(): void; diff --git a/build/types/src/fonts/petaluma_glyphs.d.ts b/build/types/src/fonts/petaluma_glyphs.d.ts deleted file mode 100644 index a00079c885..0000000000 --- a/build/types/src/fonts/petaluma_glyphs.d.ts +++ /dev/null @@ -1,1631 +0,0 @@ -export declare const PetalumaFont: { - glyphs: { - bracketTop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - bracketBottom: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - barlineTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkTick: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - segno: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - coda: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - gClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - cClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fClef: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - unpitchedPercussionClef1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - '6stringTabClef': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig0: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig3: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig4: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig5: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig6: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig7: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig8: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSig9: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigCutCommon: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigPlusSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensRightSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - timeSigParensLeftSmall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadXBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleXHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircleX: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadCircledBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDoubleWholeSquare: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareWhite: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSquareBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleUpBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedDoubleWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedWhole2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedHalf2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadSlashedBlack2: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadDiamondBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesis: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadParenthesisLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadMoonBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleLeftBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRightBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - noteheadTriangleRoundDownBlack: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - augmentationDot: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - tremolo1: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag8thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag16thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag32ndDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag64thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - flag128thDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNatural: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalDoubleFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensLeft: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalParensRight: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneFlatStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesFlatZimmermann: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalQuarterToneSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalThreeQuarterTonesSharpStein: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBuyukMucennebFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalBakiyeFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKomaSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKucukMucennebSharp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalKoron: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalSori: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articAccentBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articTenutoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articStaccatissimoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - articMarcatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryLongBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataVeryShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - fermataShortBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkComma: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - breathMarkUpbow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesura: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - caesuraCurved: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restMaxima: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restDoubleWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWhole: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restWholeLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalf: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restHalfLegerLine: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - restQuarter: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest8th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest16th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest32nd: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest64th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - rest128th: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicPiano: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicMezzo: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicForte: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicRinforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicSforzando: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - dynamicZ: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTurnSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentMordent: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentShortTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentTremblement: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompAppoggTrill: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillDAnglebert: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompSlideTrillBach: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillSuffixDandrieu: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompDoubleCadenceUpperPrefixTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - ornamentPrecompTrillLowerSuffix: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassScoop: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassDoitMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallLipShort: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassLiftMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFallRoughMedium: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassBend: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteClosed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassMuteOpen: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassFlip: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassJazzTurn: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - brassSmear: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsDownBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsUpBow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - stringsHarmonic: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoAbove: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedSnapPizzicatoBelow: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pluckedLeftHandPizzicato: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalPed: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - keyboardPedalUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - pictChokeCymbal: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - wiggleArpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoUp: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - arpeggiatoDown: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat1Bar: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat2Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeat4Bars: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - repeatBarSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymHalfDiminished: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymAugmented: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMajorSeventh: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymMinor: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketLeftTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymBracketRightTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensLeftVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymParensRightVeryTall: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - csymDiagonalArrangementSlash: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalNarrowReversedFlatAndFlat: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonPlus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - accidentalWilsonMinus: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - o: string; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/petaluma_metrics.d.ts b/build/types/src/fonts/petaluma_metrics.d.ts deleted file mode 100644 index 9ace87da7c..0000000000 --- a/build/types/src/fonts/petaluma_metrics.d.ts +++ /dev/null @@ -1,546 +0,0 @@ -/** - * The Petaluma font was created by Steinberg Media. - * https://github.com/steinbergmedia/petaluma - */ -export declare const PetalumaMetrics: { - name: string; - smufl: boolean; - stave: { - padding: number; - endPaddingMax: number; - endPaddingMin: number; - unalignedNotePadding: number; - }; - accidental: { - noteheadAccidentalPadding: number; - leftPadding: number; - accidentalSpacing: number; - }; - chordSymbol: { - global: { - superscriptOffset: number; - subscriptOffset: number; - kerningOffset: number; - lowerKerningText: string[]; - upperKerningText: string[]; - spacing: number; - superSubRatio: number; - }; - glyphs: { - csymDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymHalfDiminished: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymAugmented: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketLeftTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymBracketRightTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensLeftVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymParensRightVeryTall: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymDiagonalArrangementSlash: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMinor: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - csymMajorSeventh: { - leftSideBearing: number; - yOffset: number; - advanceWidth: number; - }; - accidentalSharp: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - accidentalFlat: { - leftSideBearing: number; - advanceWidth: number; - yOffset: number; - }; - }; - }; - clef_default: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - clef_small: { - width: number; - annotations: { - '8va': { - point: number; - treble: { - line: number; - shiftX: number; - }; - }; - '8vb': { - point: number; - treble: { - line: number; - shiftX: number; - }; - bass: { - line: number; - shiftX: number; - }; - }; - }; - }; - ornament: { - brassScoop: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassDoitMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallLipShort: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassLiftMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFallRoughMedium: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassBend: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteClosed: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassMuteOpen: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassFlip: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassJazzTurn: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - brassSmear: { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; - }; - }; - parenthesis: { - default: { - point: number; - width: number; - }; - gracenote: { - point: number; - width: number; - }; - }; - pedalMarking: { - up: { - point: number; - }; - down: { - point: number; - }; - }; - digits: { - shiftLine: number; - point: number; - tupletPoint: number; - shiftY: number; - }; - articulation: { - articStaccatissimoAbove: { - padding: number; - }; - articStaccatissimoBelow: { - padding: number; - }; - }; - tremolo: { - default: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - grace: { - point: number; - spacing: number; - offsetYStemUp: number; - offsetYStemDown: number; - offsetXStemUp: number; - offsetXStemDown: number; - }; - }; - staveRepetition: { - symbolText: { - offsetX: number; - offsetY: number; - spacing: number; - }; - coda: { - offsetY: number; - }; - segno: { - offsetY: number; - }; - }; - noteHead: { - minPadding: number; - displacedShiftX: number; - }; - stem: { - heightAdjustmentForFlag: number; - noteHead: { - noteheadTriangleUpHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadTriangleUpWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXHalf: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXBlack: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadXWhole: { - offsetYBaseStemUp: number; - offsetYBaseStemDown: number; - }; - noteheadHalf: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - noteheadBlack: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - noteheadSquareWhite: { - offsetYBaseStemDown: number; - offsetYBaseStemUp: number; - }; - }; - }; - stringNumber: { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; - }; - tuplet: { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; - }; - glyphs: { - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - segno: { - shiftX: number; - }; - flag: { - shiftX: number; - flag16thUp: { - shiftX: number; - }; - flag32ndUp: { - shiftX: number; - }; - flag64thUp: { - shiftX: number; - }; - flag128thUp: { - shiftX: number; - }; - flag16thDown: { - shiftX: number; - }; - flag32ndDown: { - shiftX: number; - }; - flag64thDown: { - shiftX: number; - }; - flag128thDown: { - shiftX: number; - }; - staveTempo: { - shiftX: number; - }; - }; - clef_default: { - point: number; - gClef: { - scale: number; - shiftY: number; - }; - fClef: { - shiftY: number; - }; - '6stringTabClef': { - point: number; - shiftY: number; - }; - }; - clef_small: { - point: number; - gClef: { - shiftY: number; - }; - }; - clefNote_default: { - point: number; - }; - clefNote_small: { - point: number; - }; - ornament: { - ornamentTurn: { - scale: number; - }; - ornamentTurnSlash: { - scale: number; - }; - brassScoop: { - scale: number; - }; - brassDoitMedium: { - scale: number; - }; - brassFallLipShort: { - scale: number; - }; - brassLiftMedium: { - scale: number; - }; - brassFallRoughMedium: { - scale: number; - }; - brassBend: { - scale: number; - }; - brassMuteClosed: { - scale: number; - }; - brassMuteOpen: { - scale: number; - }; - brassFlip: { - scale: number; - }; - brassJazzTurn: { - scale: number; - }; - brassSmear: { - scale: number; - }; - }; - stroke_straight: { - arrowheadBlackDown: { - shiftX: number; - }; - arrowheadBlackUp: { - shiftX: number; - }; - }; - stroke_wiggly: { - arrowheadBlackDown: { - shiftX: number; - shiftY: number; - }; - arrowheadBlackUp: { - shiftX: number; - shiftY: number; - }; - }; - textNote: { - point: number; - breathMarkTick: { - point: number; - shiftY: number; - }; - breathMarkComma: { - point: number; - }; - segno: { - point: number; - shiftX: number; - shiftY: number; - }; - coda: { - point: number; - shiftX: number; - shiftY: number; - }; - ornamentTrill: { - shiftX: number; - shiftY: number; - }; - ornamentMordent: { - shiftX: number; - }; - ornamentShortTrill: { - shiftX: number; - }; - }; - noteHead: { - noteheadBlackStemUp: { - shiftX: number; - }; - noteheadHalfStemUp: { - shiftX: number; - }; - noteheadWholeStemUp: { - shiftX: number; - }; - }; - chordSymbol: { - csymDiminished: { - scale: number; - }; - csymHalfDiminished: { - scale: number; - }; - csymAugmented: { - scale: number; - }; - csymParensLeftTall: { - scale: number; - }; - csymParensRightTall: { - scale: number; - }; - csymBracketLeftTall: { - scale: number; - }; - csymBracketRightTall: { - scale: number; - }; - csymParensLeftVeryTall: { - scale: number; - }; - csymParensRightVeryTall: { - scale: number; - }; - csymDiagonalArrangementSlash: { - scale: number; - }; - csymMinor: { - scale: number; - }; - csymMajorSeventh: { - scale: number; - }; - accidentalSharp: { - scale: number; - }; - accidentalFlat: { - scale: number; - }; - }; - }; -}; diff --git a/build/types/src/fonts/petalumascript_glyphs.d.ts b/build/types/src/fonts/petalumascript_glyphs.d.ts deleted file mode 100644 index 82295a6a3a..0000000000 --- a/build/types/src/fonts/petalumascript_glyphs.d.ts +++ /dev/null @@ -1,863 +0,0 @@ -export declare const PetalumaScriptFont: { - spacing: number; - glyphs: { - ' ': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '0': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '1': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '2': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '3': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '4': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '5': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '6': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '7': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '8': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '9': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '!': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '"': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '#': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - $: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '%': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '&': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - "'": { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '(': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ')': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '*': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '+': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ',': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '-': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '.': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '/': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ':': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ';': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '<': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '=': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '>': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '?': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '@': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - A: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - B: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - C: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - D: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - E: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - F: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - G: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - H: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - I: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - J: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - K: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - L: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - M: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - N: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - O: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - P: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - R: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - S: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - T: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - U: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - V: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - W: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - X: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '[': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '\\': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ']': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '^': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - _: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '`': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - a: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - b: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - c: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - d: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - e: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - f: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - g: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - h: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - i: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - j: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - k: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - l: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - m: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - n: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - o: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - p: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - r: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - s: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - t: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - u: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - v: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - w: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - x: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '{': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '|': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '}': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '~': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/robotoslab_glyphs.d.ts b/build/types/src/fonts/robotoslab_glyphs.d.ts deleted file mode 100644 index 3bfa79f006..0000000000 --- a/build/types/src/fonts/robotoslab_glyphs.d.ts +++ /dev/null @@ -1,863 +0,0 @@ -export declare const RobotoSlabFont: { - spacing: number; - glyphs: { - ' ': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '0': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '1': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '2': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '3': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '4': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '5': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '6': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '7': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '8': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '9': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '!': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '"': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '#': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - $: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '%': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '&': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - "'": { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '(': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ')': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '*': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '+': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ',': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '-': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '.': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '/': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ':': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ';': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '<': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '=': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '>': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '?': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '@': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - A: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - B: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - C: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - D: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - E: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - F: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - G: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - H: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - I: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - J: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - K: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - L: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - M: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - N: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - O: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - P: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - R: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - S: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - T: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - U: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - V: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - W: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - X: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '[': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '\\': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ']': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '^': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - _: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '`': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - a: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - b: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - c: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - d: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - e: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - f: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - g: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - h: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - i: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - j: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - k: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - l: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - m: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - n: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - o: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - p: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - r: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - s: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - t: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - u: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - v: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - w: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - x: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '{': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '|': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '}': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '~': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/sans_bold_text_metrics.d.ts b/build/types/src/fonts/sans_bold_text_metrics.d.ts deleted file mode 100644 index b33f6cdf66..0000000000 --- a/build/types/src/fonts/sans_bold_text_metrics.d.ts +++ /dev/null @@ -1,862 +0,0 @@ -export declare const SansFontBold: { - glyphs: { - '0': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '1': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '2': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '3': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '4': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '5': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '6': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '7': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '8': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '9': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ' ': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '!': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '"': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '#': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - $: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '%': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '&': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - "'": { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '(': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ')': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '*': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '+': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ',': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '-': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '.': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '/': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ':': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ';': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '<': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '=': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '>': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '?': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '@': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - A: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - B: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - C: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - D: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - E: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - F: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - G: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - H: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - I: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - J: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - K: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - L: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - M: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - N: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - O: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - P: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - R: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - S: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - T: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - U: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - V: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - W: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - X: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '[': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '\\': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ']': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '^': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - _: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '`': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - a: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - b: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - c: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - d: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - e: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - f: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - g: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - h: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - i: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - j: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - k: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - l: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - m: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - n: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - o: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - p: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - r: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - s: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - t: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - u: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - v: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - w: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - x: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '{': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '|': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '}': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '~': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/sans_text_metrics.d.ts b/build/types/src/fonts/sans_text_metrics.d.ts deleted file mode 100644 index 1d0036b8a5..0000000000 --- a/build/types/src/fonts/sans_text_metrics.d.ts +++ /dev/null @@ -1,870 +0,0 @@ -export declare const SansFont: { - smufl: boolean; - name: string; - spacing: number; - Description: string; - bold: boolean; - italic: boolean; - monospaced: boolean; - serifs: boolean; - glyphs: { - '0': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '1': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '2': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '3': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '4': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '5': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '6': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '7': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '8': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '9': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ' ': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '!': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '"': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '#': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - $: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '%': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '&': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - "'": { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '(': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ')': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '*': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '+': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ',': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '-': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '.': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '/': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ':': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ';': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '<': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '=': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '>': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '?': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '@': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - A: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - B: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - C: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - D: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - E: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - F: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - G: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - H: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - I: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - J: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - K: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - L: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - M: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - N: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - O: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - P: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - R: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - S: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - T: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - U: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - V: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - W: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - X: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '[': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '\\': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ']': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '^': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - _: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '`': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - a: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - b: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - c: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - d: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - e: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - f: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - g: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - h: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - i: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - j: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - k: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - l: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - m: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - n: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - o: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - p: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - r: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - s: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - t: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - u: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - v: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - w: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - x: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '{': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '|': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '}': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '~': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/serif_text_metrics.d.ts b/build/types/src/fonts/serif_text_metrics.d.ts deleted file mode 100644 index 3202b0e5a7..0000000000 --- a/build/types/src/fonts/serif_text_metrics.d.ts +++ /dev/null @@ -1,870 +0,0 @@ -export declare const SerifFont: { - smufl: boolean; - name: string; - spacing: number; - Description: string; - bold: boolean; - italic: boolean; - monospaced: boolean; - serifs: boolean; - glyphs: { - '0': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '1': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '2': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '3': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '4': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '5': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '6': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '7': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '8': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '9': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ' ': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '!': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '"': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '#': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - $: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '%': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '&': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - "'": { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '(': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ')': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '*': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '+': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ',': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '-': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '.': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '/': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ':': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ';': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '<': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '=': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '>': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '?': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '@': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - A: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - B: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - C: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - D: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - E: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - F: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - G: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - H: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - I: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - J: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - K: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - L: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - M: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - N: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - O: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - P: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - R: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - S: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - T: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - U: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - V: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - W: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - X: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - Z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '[': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '\\': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - ']': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '^': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - _: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '`': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - a: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - b: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - c: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - d: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - e: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - f: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - g: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - h: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - i: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - j: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - k: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - l: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - m: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - n: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - o: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - p: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - q: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - r: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - s: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - t: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - u: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - v: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - w: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - x: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - y: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - z: { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '{': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '|': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '}': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - '~': { - x_min: number; - x_max: number; - y_min: number; - y_max: number; - ha: number; - leftSideBearing: number; - advanceWidth: number; - }; - }; - fontFamily: string; - resolution: number; - generatedOn: string; -}; diff --git a/build/types/src/fonts/textfonts.d.ts b/build/types/src/fonts/textfonts.d.ts deleted file mode 100644 index a9a1721cd3..0000000000 --- a/build/types/src/fonts/textfonts.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function loadTextFonts(): void; diff --git a/build/types/src/formatter.d.ts b/build/types/src/formatter.d.ts deleted file mode 100644 index 4a447ad30c..0000000000 --- a/build/types/src/formatter.d.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { ModifierContext } from './modifiercontext'; -import { RenderContext } from './rendercontext'; -import { Stave } from './stave'; -import { StemmableNote } from './stemmablenote'; -import { TabNote } from './tabnote'; -import { TabStave } from './tabstave'; -import { Tickable } from './tickable'; -import { TickContext } from './tickcontext'; -import { Voice } from './voice'; -export interface FormatterOptions { - /** Defaults to 100. */ - softmaxFactor?: number; - /** Defaults to `false`. */ - globalSoftmax?: boolean; - /** Defaults to 5. */ - maxIterations?: number; -} -export interface FormatParams { - align_rests?: boolean; - stave?: Stave; - context?: RenderContext; - auto_beam?: boolean; -} -export interface AlignmentContexts { - list: number[]; - map: Record; - array: T[]; - resolutionMultiplier: number; -} -export interface AlignmentModifierContexts { - map: Map>; - array: ModifierContext[]; - resolutionMultiplier: number; -} -/** - * Format implements the formatting and layout algorithms that are used - * to position notes in a voice. The algorithm can align multiple voices both - * within a stave, and across multiple staves. - * - * To do this, the formatter breaks up voices into a grid of rational-valued - * `ticks`, to which each note is assigned. Then, minimum widths are assigned - * to each tick based on the widths of the notes and modifiers in that tick. This - * establishes the smallest amount of space required for each tick. - * - * Finally, the formatter distributes the left over space proportionally to - * all the ticks, setting the `x` values of the notes in each tick. - * - * See `tests/formatter_tests.ts` for usage examples. The helper functions included - * here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples. - */ -export declare class Formatter { - static DEBUG: boolean; - protected hasMinTotalWidth: boolean; - protected minTotalWidth: number; - protected contextGaps: { - total: number; - gaps: { - x1: number; - x2: number; - }[]; - }; - protected justifyWidth: number; - protected totalCost: number; - protected totalShift: number; - protected tickContexts: AlignmentContexts; - protected formatterOptions: Required; - protected modifierContexts: AlignmentModifierContexts[]; - protected voices: Voice[]; - protected lossHistory: number[]; - protected durationStats: Record; - /** - * Helper function to layout "notes" one after the other without - * regard for proportions. Useful for tests and debugging. - */ - static SimpleFormat(notes: Tickable[], x?: number, { paddingBetween }?: { - paddingBetween?: number | undefined; - }): void; - /** Helper function to plot formatter debug info. */ - static plotDebugging(ctx: RenderContext, formatter: Formatter, xPos: number, y1: number, y2: number, options?: { - stavePadding: number; - }): void; - /** - * Helper function to format and draw a single voice. Returns a bounding - * box for the notation. - * @param ctx the rendering context - * @param stave the stave to which to draw (`Stave` or `TabStave`) - * @param notes array of `Note` instances (`Note`, `TextNote`, `TabNote`, etc.) - * @param params one of below: - * * Setting `autobeam` only `(context, stave, notes, true)` or - * `(ctx, stave, notes, {autobeam: true})` - * * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})` - * * Setting both a struct is needed `(context, stave, notes, { - * autobeam: true, align_rests: true})` - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDraw(ctx: RenderContext, stave: Stave, notes: StemmableNote[], params?: FormatParams | boolean): BoundingBox | undefined; - /** - * Helper function to format and draw aligned tab and stave notes in two - * separate staves. - * @param ctx the rendering context - * @param tabstave a `TabStave` instance on which to render `TabNote`s. - * @param stave a `Stave` instance on which to render `Note`s. - * @param notes array of `Note` instances for the stave (`Note`, `BarNote`, etc.) - * @param tabnotes array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.) - * @param autobeam automatically generate beams. - * @param params a configuration object: - * * `autobeam` automatically generates beams for the notes. - * * `align_rests` aligns rests with nearby notes. - */ - static FormatAndDrawTab(ctx: RenderContext, tabstave: TabStave, stave: Stave, tabnotes: TabNote[], notes: Tickable[], autobeam: boolean, params: FormatParams): void; - /** - * Automatically set the vertical position of rests based on previous/next note positions. - * @param tickables an array of Tickables. - * @param alignAllNotes If `false`, only align rests that are within a group of beamed notes. - * @param alignTuplets If `false`, ignores tuplets. - */ - static AlignRestsToNotes(tickables: Tickable[], alignAllNotes: boolean, alignTuplets?: boolean): void; - constructor(options?: FormatterOptions); - /** - * Find all the rests in each of the `voices` and align them to neighboring notes. - * - * @param voices - * @param alignAllNotes If `false`, only align rests within beamed groups of notes. If `true`, align all rests. - */ - alignRests(voices: Voice[], alignAllNotes: boolean): void; - /** - * Estimate the width required to render 'voices'. This is done by: - * 1. Sum the widths of all the tick contexts - * 2. Estimate the padding. - * The latter is done by calculating the padding 3 different ways, and taking the - * greatest value: - * 1. the padding required for unaligned notes in different voices - * 2. the padding based on the stddev of the tickable widths - * 3. the padding based on the stddev of the tickable durations. - * - * The last 2 quantities estimate a 'width entropy', where notes might need more - * room than the proportional formatting gives them. A measure of all same duration - * and width will need no extra padding, and all these quantities will be - * zero in that case. - * - * Note: joinVoices has to be called before calling preCalculateMinTotalWidth. - * - * @param voices the voices that contain the notes - * @returns the estimated width in pixels - */ - preCalculateMinTotalWidth(voices: Voice[]): number; - /** - * Get minimum width required to render all voices. Either `format` or - * `preCalculateMinTotalWidth` must be called before this method. - */ - getMinTotalWidth(): number; - /** Calculate the resolution multiplier for `voices`. */ - static getResolutionMultiplier(voices: Voice[]): number; - /** Create a `ModifierContext` for each tick in `voices`. */ - createModifierContexts(voices: Voice[]): void; - /** - * Create a `TickContext` for each tick in `voices`. Also calculate the - * total number of ticks in voices. - */ - createTickContexts(voices: Voice[]): AlignmentContexts; - /** - * Get the AlignmentContexts of TickContexts that were created by createTickContexts. - * Returns undefined if createTickContexts has not yet been run. - */ - getTickContexts(): AlignmentContexts | undefined; - /** - * This is the core formatter logic. Format voices and justify them - * to `justifyWidth` pixels. `renderingContext` is required to justify elements - * that can't retrieve widths without a canvas. This method sets the `x` positions - * of all the tickables/notes in the formatter. - */ - preFormat(justifyWidth?: number, renderingContext?: RenderContext, voicesParam?: Voice[], stave?: Stave): number; - /** Calculate the total cost of this formatting decision. */ - evaluate(): number; - /** - * Run a single iteration of rejustification. At a high level, this method calculates - * the overall "loss" (or cost) of this layout, and repositions tickcontexts in an - * attempt to reduce the cost. You can call this method multiple times until it finds - * and oscillates around a global minimum. - * @param options[alpha] the "learning rate" for the formatter. It determines how much of a shift - * the formatter should make based on its cost function. - */ - tune(options?: { - alpha?: number; - }): number; - /** - * This is the top-level call for all formatting logic completed - * after `x` *and* `y` values have been computed for the notes - * in the voices. - */ - postFormat(): this; - /** - * Take all `voices` and create `ModifierContext`s out of them. This tells - * the formatters that the voices belong on a single stave. - */ - joinVoices(voices: Voice[]): this; - /** - * Align rests in voices, justify the contexts, and position the notes - * so voices are aligned and ready to render onto the stave. This method - * mutates the `x` positions of all tickables in `voices`. - * - * Voices are full justified to fit in `justifyWidth` pixels. - * - * Set `options.context` to the rendering context. Set `options.align_rests` - * to true to enable rest alignment. - */ - format(voices: Voice[], justifyWidth?: number, options?: FormatParams): this; - formatToStave(voices: Voice[], stave: Stave, optionsParam?: FormatParams): this; - getTickContext(tick: number): TickContext | undefined; -} diff --git a/build/types/src/fraction.d.ts b/build/types/src/fraction.d.ts deleted file mode 100644 index 41aad5c956..0000000000 --- a/build/types/src/fraction.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -/** Fraction represents a rational number. */ -export declare class Fraction { - static get CATEGORY(): string; - private static __staticFractionA; - private static __staticFractionB; - private static __staticFractionTmp; - /** - * GCD: Greatest common divisor using the Euclidean algorithm. - * Note: GCD(0, 0) => 0 and GCD(0, n) => n. - */ - static GCD(a: number, b: number): number; - /** LCM: Lowest common multiple. */ - static LCM(a: number, b: number): number; - /** Lowest common multiple for more than two numbers. */ - static LCMM(args: number[]): number; - numerator: number; - denominator: number; - /** Set the numerator and denominator. */ - constructor(numerator?: number, denominator?: number); - /** Set the numerator and denominator. */ - set(numerator?: number, denominator?: number): this; - /** Return the value of the fraction. */ - value(): number; - /** Simplify numerator and denominator using GCD. */ - simplify(): this; - /** Add value of another fraction. */ - add(param1?: Fraction | number, param2?: number): this; - /** Substract value of another fraction. */ - subtract(param1?: Fraction | number, param2?: number): this; - /** Multiply by value of another fraction. */ - multiply(param1?: Fraction | number, param2?: number): this; - /** Divide by value of another Fraction. */ - divide(param1?: Fraction | number, param2?: number): this; - /** Simplify both sides and check if they are equal. */ - equals(compare: Fraction | number): boolean; - /** Greater than operator. */ - greaterThan(compare: Fraction | number): boolean; - /** Greater than or equals operator. */ - greaterThanEquals(compare: Fraction | number): boolean; - /** Less than operator. */ - lessThan(compare: Fraction | number): boolean; - /** Less than or equals operator. */ - lessThanEquals(compare: Fraction | number): boolean; - /** Return a new copy with current values. */ - clone(): Fraction; - /** Copy value of another fraction. */ - copy(other: Fraction | number): this; - /** Return the integer component (eg. 5/2 => 2). */ - quotient(): number; - /** Return the remainder component (eg. 5/2 => 1). */ - remainder(): number; - /** Calculate absolute value. */ - makeAbs(): this; - /** Return a raw string representation (eg. "5/2"). */ - toString(): string; - /** Return a simplified string respresentation. */ - toSimplifiedString(): string; - /** Return string representation in mixed form. */ - toMixedString(): string; - /** Parse a fraction string. */ - parse(str: string): this; -} diff --git a/build/types/src/frethandfinger.d.ts b/build/types/src/frethandfinger.d.ts deleted file mode 100644 index d7946ce0b6..0000000000 --- a/build/types/src/frethandfinger.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Builder } from './easyscore'; -import { FontInfo } from './font'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { StemmableNote } from './stemmablenote'; -export declare class FretHandFinger extends Modifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - static format(nums: FretHandFinger[], state: ModifierContextState): boolean; - static easyScoreHook({ fingerings }: { - fingerings?: string | undefined; - } | undefined, note: StemmableNote, builder: Builder): void; - protected finger: string; - protected x_offset: number; - protected y_offset: number; - constructor(finger: string); - setFretHandFinger(finger: string): this; - getFretHandFinger(): string; - setOffsetX(x: number): this; - setOffsetY(y: number): this; - draw(): void; -} diff --git a/build/types/src/ghostnote.d.ts b/build/types/src/ghostnote.d.ts deleted file mode 100644 index ba30a4337b..0000000000 --- a/build/types/src/ghostnote.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ModifierContext } from './modifiercontext'; -import { NoteStruct } from './note'; -import { Stave } from './stave'; -import { StemmableNote } from './stemmablenote'; -export declare class GhostNote extends StemmableNote { - static get CATEGORY(): string; - constructor(parameter: string | NoteStruct); - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest(): boolean; - setStave(stave: Stave): this; - addToModifierContext(mc: ModifierContext): this; - preFormat(): this; - draw(): void; -} diff --git a/build/types/src/glyph.d.ts b/build/types/src/glyph.d.ts deleted file mode 100644 index 6bed039ec4..0000000000 --- a/build/types/src/glyph.d.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { Element } from './element'; -import { Font, FontGlyph } from './font'; -import { RenderContext } from './rendercontext'; -import { Stave } from './stave'; -export interface GlyphProps { - code_head: string; - ledger_code_head?: string; - dot_shiftY: number; - position: string; - rest: boolean; - line_below: number; - line_above: number; - stem_beam_extension: number; - stem_up_extension: number; - stem_down_extension: number; - stem: boolean; - code?: string; - code_flag_upstem?: string; - code_flag_downstem?: string; - flag?: boolean; - width?: number; - text?: string; - tabnote_stem_down_extension: number; - tabnote_stem_up_extension: number; - beam_count: number; - shift_y?: number; - getWidth(a?: number): number; -} -export interface GlyphOptions { - category?: string; -} -export interface GlyphMetrics { - width: number; - height: number; - x_min: number; - x_max: number; - x_shift: number; - y_shift: number; - scale: number; - ha: number; - outline: number[]; - font: Font; -} -export declare const enum OutlineCode { - MOVE = 0, - LINE = 1, - QUADRATIC = 2, - BEZIER = 3 -} -declare class GlyphCacheEntry { - metrics: GlyphMetrics; - bbox: BoundingBox; - point: number; - constructor(fontStack: Font[], code: string, category?: string); -} -declare class GlyphCache { - protected cache: Map>; - lookup(code: string, category?: string): GlyphCacheEntry; -} -export declare class Glyph extends Element { - static get CATEGORY(): string; - protected static cache: GlyphCache; - static CURRENT_CACHE_KEY: string; - static MUSIC_FONT_STACK: Font[]; - /** - * Pass a key of the form `glyphs.{category}.{code}.{key}` to Font.lookupMetric(). If the initial lookup fails, - * try again with the path `glyphs.{category}.{key}`. If the second lookup fails, return the defaultValue. - * - * @param font - * @param category any metric path under 'glyphs', so 'stem.up' could resolve to glyphs.stem.up.shiftX, glyphs.stem.up.shiftY, etc. - * @param code - * @param key - * @param defaultValue - */ - static lookupFontMetric(font: Font, category: string, code: string, key: string, defaultValue: number): number; - static lookupGlyph(fontStack: Font[], code: string): { - font: Font; - glyph: FontGlyph; - }; - static loadMetrics(fontStack: Font[], code: string, category?: string): GlyphMetrics; - /** - * Renders glyphs from the default font stack. - * - * @param ctx Canvas or SVG context - * @param x_pos x coordinate - * @param y_pos y coordinate - * @param point the point size of the font - * @param code the glyph code in font.getGlyphs() - * @param options - * @returns - */ - static renderGlyph(ctx: RenderContext, x_pos: number, y_pos: number, point: number, code: string, options?: { - category?: string; - scale?: number; - }): GlyphMetrics; - static renderOutline(ctx: RenderContext, outline: number[], scale: number, x_pos: number, y_pos: number): void; - static getOutlineBoundingBox(outline: number[], scale: number, x_pos: number, y_pos: number): BoundingBox; - static getWidth(code: string, point: number, category?: string): number; - bbox: BoundingBox; - code: string; - metrics: GlyphMetrics; - topGlyphs: Glyph[]; - botGlyphs: Glyph[]; - protected options: GlyphOptions; - protected originShift: { - x: number; - y: number; - }; - protected x_shift: number; - protected y_shift: number; - scale: number; - protected point: number; - protected stave?: Stave; - /** - * @param code - * @param point - * @param options - */ - constructor(code: string, point: number, options?: GlyphOptions); - draw(...args: any[]): void; - getCode(): string; - setOptions(options: any): void; - setPoint(point: number): this; - setStave(stave: Stave): this; - getXShift(): number; - setXShift(x_shift: number): this; - getYshift(): number; - setYShift(y_shift: number): this; - reset(): void; - checkMetrics(): GlyphMetrics; - getMetrics(): GlyphMetrics; - setOriginX(x: number): void; - setOriginY(y: number): void; - setOrigin(x: number, y: number): void; - render(ctx: RenderContext, x: number, y: number): void; - checkStave(): Stave; - renderToStave(x: number): void; -} -export {}; diff --git a/build/types/src/glyphnote.d.ts b/build/types/src/glyphnote.d.ts deleted file mode 100644 index b507cdf478..0000000000 --- a/build/types/src/glyphnote.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { Glyph } from './glyph'; -import { Note, NoteStruct } from './note'; -export interface GlyphNoteOptions { - ignoreTicks?: boolean; - line?: number; -} -export declare class GlyphNote extends Note { - static get CATEGORY(): string; - protected options: Required; - protected glyph: Glyph; - constructor(glyph: Glyph, noteStruct: NoteStruct, options?: GlyphNoteOptions); - setGlyph(glyph: Glyph): this; - getBoundingBox(): BoundingBox | undefined; - preFormat(): this; - drawModifiers(): void; - /** Get the glyph width. */ - getGlyphWidth(): number; - draw(): void; -} diff --git a/build/types/src/gracenote.d.ts b/build/types/src/gracenote.d.ts deleted file mode 100644 index 55c1f26593..0000000000 --- a/build/types/src/gracenote.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { StaveNote, StaveNoteStruct } from './stavenote'; -export interface GraceNoteStruct extends StaveNoteStruct { - slash?: boolean; -} -export declare class GraceNote extends StaveNote { - static get CATEGORY(): string; - static get LEDGER_LINE_OFFSET(): number; - static get SCALE(): number; - protected slash: boolean; - protected slur: boolean; - constructor(noteStruct: GraceNoteStruct); - getStemExtension(): number; - getStaveNoteScale(): number; - draw(): void; - calcBeamedNotesSlashBBox(slashStemOffset: number, slashBeamOffset: number, protrusions: { - beam: number; - stem: number; - }): Record; -} diff --git a/build/types/src/gracenotegroup.d.ts b/build/types/src/gracenotegroup.d.ts deleted file mode 100644 index 9b807374d1..0000000000 --- a/build/types/src/gracenotegroup.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Beam } from './beam'; -import { Formatter } from './formatter'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -import { StaveTie } from './stavetie'; -import { StemmableNote } from './stemmablenote'; -import { TabTie } from './tabtie'; -import { Voice } from './voice'; -/** GraceNoteGroup is used to format and render grace notes. */ -export declare class GraceNoteGroup extends Modifier { - static DEBUG: boolean; - static get CATEGORY(): string; - protected readonly voice: Voice; - protected readonly grace_notes: StemmableNote[]; - protected readonly show_slur?: boolean; - protected preFormatted: boolean; - protected formatter?: Formatter; - render_options: { - slur_y_shift: number; - }; - protected slur?: StaveTie | TabTie; - protected beams: Beam[]; - /** Arranges groups inside a `ModifierContext`. */ - static format(gracenote_groups: GraceNoteGroup[], state: ModifierContextState): boolean; - constructor(grace_notes: StemmableNote[], show_slur?: boolean); - preFormat(): void; - beamNotes(grace_notes?: StemmableNote[]): this; - setWidth(width: number): this; - getWidth(): number; - getGraceNotes(): Note[]; - draw(): void; -} diff --git a/build/types/src/gracetabnote.d.ts b/build/types/src/gracetabnote.d.ts deleted file mode 100644 index fe6bcf3819..0000000000 --- a/build/types/src/gracetabnote.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { TabNote, TabNoteStruct } from './tabnote'; -export declare class GraceTabNote extends TabNote { - static get CATEGORY(): string; - constructor(noteStruct: TabNoteStruct); -} diff --git a/build/types/src/index.d.ts b/build/types/src/index.d.ts deleted file mode 100644 index dfefbc7915..0000000000 --- a/build/types/src/index.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -export * from './accidental'; -export * from './annotation'; -export * from './articulation'; -export * from './barnote'; -export * from './beam'; -export * from './bend'; -export * from './boundingbox'; -export * from './boundingboxcomputation'; -export * from './canvascontext'; -export * from './chordsymbol'; -export * from './clef'; -export * from './clefnote'; -export * from './crescendo'; -export * from './curve'; -export * from './dot'; -export * from './easyscore'; -export * from './element'; -export * from './factory'; -export * from './flow'; -export * from './font'; -export * from './formatter'; -export * from './fraction'; -export * from './frethandfinger'; -export * from './ghostnote'; -export * from './glyph'; -export * from './glyphnote'; -export * from './gracenote'; -export * from './gracenotegroup'; -export * from './gracetabnote'; -export * from './keymanager'; -export * from './keysignature'; -export * from './keysignote'; -export * from './modifier'; -export * from './modifiercontext'; -export * from './multimeasurerest'; -export * from './music'; -export * from './note'; -export * from './notehead'; -export * from './notesubgroup'; -export * from './ornament'; -export * from './parenthesis'; -export * from './parser'; -export * from './pedalmarking'; -export * from './registry'; -export * from './rendercontext'; -export * from './renderer'; -export * from './repeatnote'; -export * from './stave'; -export * from './stavebarline'; -export * from './staveconnector'; -export * from './stavehairpin'; -export * from './staveline'; -export * from './stavemodifier'; -export * from './stavenote'; -export * from './staverepetition'; -export * from './stavesection'; -export * from './stavetempo'; -export * from './stavetext'; -export * from './stavetie'; -export * from './stavevolta'; -export * from './stem'; -export * from './stemmablenote'; -export * from './stringnumber'; -export * from './strokes'; -export * from './svgcontext'; -export * from './system'; -export * from './tabnote'; -export * from './tabslide'; -export * from './tabstave'; -export * from './tabtie'; -export * from './textbracket'; -export * from './textdynamics'; -export * from './textformatter'; -export * from './textnote'; -export * from './tickable'; -export * from './tickcontext'; -export * from './timesigglyph'; -export * from './timesignature'; -export * from './timesignote'; -export * from './tremolo'; -export * from './tuning'; -export * from './tuplet'; -export * from './typeguard'; -export * from './util'; -export * from './vex'; -export * from './vibrato'; -export * from './vibratobracket'; -export * from './voice'; -export * from './web'; diff --git a/build/types/src/keymanager.d.ts b/build/types/src/keymanager.d.ts deleted file mode 100644 index dfa97e269f..0000000000 --- a/build/types/src/keymanager.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { KeyParts, Music } from './music'; -export declare class KeyManager { - protected music: Music; - protected keyParts: KeyParts; - protected keyString: string; - protected key: string; - protected scale: number[]; - protected scaleMap: Record; - protected scaleMapByValue: Record; - protected originalScaleMapByValue: Record; - constructor(key: string); - setKey(key: string): this; - getKey(): string; - reset(): this; - getAccidental(key: string): { - note: string; - accidental?: string; - change?: boolean; - }; - selectNote(note: string): { - note: string; - accidental?: string; - change: boolean; - }; -} diff --git a/build/types/src/keysignature.d.ts b/build/types/src/keysignature.d.ts deleted file mode 100644 index fe68d97320..0000000000 --- a/build/types/src/keysignature.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Glyph } from './glyph'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export declare class KeySignature extends StaveModifier { - static get CATEGORY(): string; - protected glyphFontScale: number; - protected glyphs: Glyph[]; - protected xPositions: number[]; - protected paddingForced: boolean; - protected formatted?: boolean; - protected cancelKeySpec?: string; - protected accList: { - type: string; - line: number; - }[]; - protected keySpec?: string; - protected alterKeySpec?: string[]; - static accidentalSpacing: Record; - constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); - convertToGlyph(acc: { - type: string; - line: number; - }, nextAcc: { - type: string; - line: number; - }): void; - cancelKey(spec: string): this; - convertToCancelAccList(spec: string): { - type: string; - accList: { - type: string; - line: number; - }[]; - } | undefined; - addToStave(stave: Stave): this; - convertAccLines(clef: string, type?: string, accList?: { - type: string; - line: number; - }[]): void; - getPadding(index: number): number; - getWidth(): number; - setKeySig(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]): this; - alterKey(alterKeySpec: string[]): this; - convertToAlterAccList(alterKeySpec: string[]): void; - format(): void; - /** - * Return the Glyph objects making up this KeySignature. - */ - getGlyphs(): Glyph[]; - draw(): void; -} diff --git a/build/types/src/keysignote.d.ts b/build/types/src/keysignote.d.ts deleted file mode 100644 index 56032e4c37..0000000000 --- a/build/types/src/keysignote.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { KeySignature } from './keysignature'; -import { ModifierContext } from './modifiercontext'; -import { Note } from './note'; -export declare class KeySigNote extends Note { - static get CATEGORY(): string; - protected keySignature: KeySignature; - constructor(keySpec: string, cancelKeySpec?: string, alterKeySpec?: string[]); - addToModifierContext(mc: ModifierContext): this; - preFormat(): this; - draw(): void; -} diff --git a/build/types/src/modifier.d.ts b/build/types/src/modifier.d.ts deleted file mode 100644 index 73758e277a..0000000000 --- a/build/types/src/modifier.d.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Element } from './element'; -import { ModifierContext } from './modifiercontext'; -import { Note } from './note'; -export declare enum ModifierPosition { - CENTER = 0, - LEFT = 1, - RIGHT = 2, - ABOVE = 3, - BELOW = 4 -} -/** - * `Modifier` is an abstract interface for notational elements that modify - * a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc. - * - * For a `Modifier` instance to be positioned correctly, it must be part of - * a `ModifierContext`. All modifiers in the same context are rendered relative to - * one another. - * - * Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also, - * in multi-voice staves, all modifiers to notes on the same `tick` are part of the same - * `ModifierContext`. This ensures that multiple voices don't trample all over each other. - */ -export declare class Modifier extends Element { - /** - * Modifiers category string. Every modifier has a different category. - * The `ModifierContext` uses this to determine the type and order of the modifiers. - */ - static get CATEGORY(): string; - /** Modifiers can be positioned almost anywhere, relative to a note. */ - static get Position(): typeof ModifierPosition; - static get PositionString(): Record; - protected note?: Note; - protected index?: number; - protected width: number; - protected text_line: number; - protected position: ModifierPosition; - protected y_shift: number; - protected x_shift: number; - private spacingFromNextModifier; - private modifierContext?; - constructor(); - /** Called when position changes. */ - protected reset(): void; - /** Get modifier widths. */ - getWidth(): number; - /** Set modifier widths. */ - setWidth(width: number): this; - /** Get attached note (`StaveNote`, `TabNote`, etc.) */ - getNote(): Note; - /** - * Used in draw() to check and get the attached note (`StaveNote`, `TabNote`, etc.). - * Also verifies that the index is valid. - */ - checkAttachedNote(): Note; - /** - * Set attached note. - * @param note (`StaveNote`, `TabNote`, etc.) - */ - setNote(note: Note): this; - /** Get note index, which is a specific note in a chord. */ - getIndex(): number | undefined; - /** Check and get note index, which is a specific note in a chord. */ - checkIndex(): number; - /** Set note index, which is a specific note in a chord. */ - setIndex(index: number): this; - /** Get `ModifierContext`. */ - getModifierContext(): ModifierContext | undefined; - /** Check and get `ModifierContext`. */ - checkModifierContext(): ModifierContext; - /** Every modifier must be part of a `ModifierContext`. */ - setModifierContext(c: ModifierContext): this; - /** Get position. */ - getPosition(): number; - /** - * Set position. - * @param position CENTER | LEFT | RIGHT | ABOVE | BELOW - */ - setPosition(position: string | number): this; - /** Set the `text_line` for the modifier. */ - setTextLine(line: number): this; - /** Shift modifier down `y` pixels. Negative values shift up. */ - setYShift(y: number): this; - /** Set spacing from next modifier. */ - setSpacingFromNextModifier(x: number): void; - /** Get spacing from next modifier. */ - getSpacingFromNextModifier(): number; - /** - * Shift modifier `x` pixels in the direction of the modifier. Negative values - * shift reverse. - */ - setXShift(x: number): this; - /** Get shift modifier `x` */ - getXShift(): number; - /** Render the modifier onto the canvas. */ - draw(): void; - alignSubNotesWithNote(subNotes: Note[], note: Note): void; -} diff --git a/build/types/src/modifiercontext.d.ts b/build/types/src/modifiercontext.d.ts deleted file mode 100644 index 9456dbdf05..0000000000 --- a/build/types/src/modifiercontext.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Modifier } from './modifier'; -import { StaveNote } from './stavenote'; -import { TabNote } from './tabnote'; -import { Tickable } from './tickable'; -export interface ModifierContextState { - right_shift: number; - left_shift: number; - text_line: number; - top_text_line: number; -} -export interface ModifierContextMetrics { - width: number; - spacing: number; -} -export type ModifierContextMember = Tickable | Modifier | StaveNote | TabNote; -export declare class ModifierContext { - static DEBUG: boolean; - protected state: ModifierContextState; - protected members: Record; - protected preFormatted: boolean; - protected postFormatted: boolean; - protected formatted: boolean; - protected width: number; - protected spacing: number; - addModifier(member: ModifierContextMember): this; - /** - * this.members maps CATEGORY strings to arrays of Tickable | Modifier | StaveNote | TabNote. - * Here we add a new member to this.members, and create a new array if needed. - * @param member - * @returns this - */ - addMember(member: ModifierContextMember): this; - /** - * @deprecated - */ - getModifiers(category: string): ModifierContextMember[]; - getMembers(category: string): ModifierContextMember[]; - /** - * Get the width of the entire - */ - getWidth(): number; - getLeftShift(): number; - getRightShift(): number; - getState(): ModifierContextState; - getMetrics(): ModifierContextMetrics; - preFormat(): void; - postFormat(): void; -} diff --git a/build/types/src/multimeasurerest.d.ts b/build/types/src/multimeasurerest.d.ts deleted file mode 100644 index f63dee846d..0000000000 --- a/build/types/src/multimeasurerest.d.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { Element } from './element'; -import { RenderContext } from './rendercontext'; -import { Stave } from './stave'; -export interface MultimeasureRestRenderOptions { - /** Extracted by Factory.MultiMeasureRest() and passed to the MultiMeasureRest constructor. */ - number_of_measures: number; - /** Use rest symbols. Defaults to `false`, which renders a thick horizontal line with serifs at both ends. */ - use_symbols?: boolean; - /** Horizontal spacing between rest symbol glyphs (if `use_symbols` is `true`).*/ - symbol_spacing?: number; - /** Show the number of measures at the top. Defaults to `true`. */ - show_number?: boolean; - /** Vertical position of the "number of measures" text (measured in stave lines). Defaults to -0.5, which is above the stave. 6.5 is below the stave. */ - number_line?: number; - /** Font size of the "number of measures" text. */ - number_glyph_point?: number; - /** Left padding from `stave.getX()`. */ - padding_left?: number; - /** Right padding from `stave.getX() + stave.getWidth()` */ - padding_right?: number; - /** Vertical position of the rest line or symbols, expressed as stave lines. Default: 2. The top stave line is 1, and the bottom stave line is 5. */ - line?: number; - /** Defaults to the number of vertical pixels between stave lines. Used for serif height or 2-bar / 4-bar symbol height. */ - spacing_between_lines_px?: number; - /** Size of the semibreve (1-bar) rest symbol. Other symbols are scaled accordingly. */ - semibreve_rest_glyph_scale?: number; - /** Thickness of the rest line. Used when `use_symbols` is false. Defaults to half the space between stave lines. */ - line_thickness?: number; - /** Thickness of the rest line's serif. Used when `use_symbols` is false. */ - serif_thickness?: number; -} -export declare class MultiMeasureRest extends Element { - static get CATEGORY(): string; - render_options: Required; - protected xs: { - left: number; - right: number; - }; - protected number_of_measures: number; - protected stave?: Stave; - private hasPaddingLeft; - private hasPaddingRight; - private hasLineThickness; - private hasSymbolSpacing; - /** - * - * @param number_of_measures Number of measures. - * @param options The options object. - */ - constructor(number_of_measures: number, options: MultimeasureRestRenderOptions); - getXs(): { - left: number; - right: number; - }; - setStave(stave: Stave): this; - getStave(): Stave | undefined; - checkStave(): Stave; - drawLine(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; - drawSymbols(stave: Stave, ctx: RenderContext, left: number, right: number, spacingBetweenLines: number): void; - draw(): void; -} diff --git a/build/types/src/music.d.ts b/build/types/src/music.d.ts deleted file mode 100644 index a927c39ee6..0000000000 --- a/build/types/src/music.d.ts +++ /dev/null @@ -1,91 +0,0 @@ -export interface NoteAccidental { - note: number; - accidental: AccidentalValue; -} -export interface NoteParts { - root: string; - accidental: string; -} -export interface KeyParts { - root: string; - accidental: string; - type: string; -} -export type KeyValue = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11; -export type RootValue = 0 | 1 | 2 | 3 | 4 | 5 | 6; -export type AccidentalValue = -2 | -1 | 0 | 1 | 2; -export interface Key { - root_index: RootValue; - int_val: KeyValue; -} -/** Music implements some standard music theory routines. */ -export declare class Music { - /** Number of an canonical notes (12). */ - static get NUM_TONES(): number; - /** Names of root notes ('c', 'd',...) */ - static get roots(): string[]; - /** Values of the root notes.*/ - static get root_values(): KeyValue[]; - /** Indices of the root notes.*/ - static get root_indices(): Record; - /** Names of canonical notes ('c', 'c#', 'd',...). */ - static get canonical_notes(): string[]; - /** Names of diatonic intervals ('unison', 'm2', 'M2',...). */ - static get diatonic_intervals(): string[]; - /** NoteAccidental associated to diatonic intervals. */ - static get diatonic_accidentals(): Record; - /** Semitones shift associated to intervals .*/ - static get intervals(): Record; - /** Semitones shifts associated with scales. */ - static get scales(): Record; - /** Scales associated with m (minor) and M (major). */ - static get scaleTypes(): Record; - /** Accidentals abbreviations. */ - static get accidentals(): string[]; - /** Note values. */ - static get noteValues(): Record; - protected isValidNoteValue(note: number): boolean; - protected isValidIntervalValue(interval: number): boolean; - /** Return root and accidental associated to a note. */ - getNoteParts(noteString: string): NoteParts; - /** Return root, accidental and type associated to a key. */ - getKeyParts(keyString: string): KeyParts; - /** Note value associated to a note name. */ - getNoteValue(noteString: string): number; - /** Interval value associated to an interval name. */ - getIntervalValue(intervalString: string): number; - /** Canonical note name associated to a value. */ - getCanonicalNoteName(noteValue: number): string; - /** Interval name associated to a value. */ - getCanonicalIntervalName(intervalValue: number): string; - /** - * Given a note, interval, and interval direction, produce the relative note. - */ - getRelativeNoteValue(noteValue: number, intervalValue: number, direction?: number): number; - /** - * Given a root and note value, produce the relative note name. - */ - getRelativeNoteName(root: string, noteValue: number): string; - /** - * Return scale tones, given intervals. Each successive interval is - * relative to the previous one, e.g., Major Scale: - * - * TTSTTTS = [2,2,1,2,2,2,1] - * - * When used with key = 0, returns C scale (which is isomorphic to - * interval list). - */ - getScaleTones(key: number, intervals: number[]): number[]; - /** - * Return the interval of a note, given a diatonic scale. - * e.g., given the scale C, and the note E, returns M3. - */ - getIntervalBetween(note1: number, note2: number, direction?: number): number; - /** - * Create a scale map that represents the pitch state for a - * `keySignature`. For example, passing a `G` to `keySignature` would - * return a scale map with every note naturalized except for `F` which - * has an `F#` state. - */ - createScaleMap(keySignature: string): Record; -} diff --git a/build/types/src/note.d.ts b/build/types/src/note.d.ts deleted file mode 100644 index fa5c3bc40a..0000000000 --- a/build/types/src/note.d.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { Beam } from './beam'; -import { Fraction } from './fraction'; -import { GlyphProps } from './glyph'; -import { Modifier } from './modifier'; -import { RenderContext } from './rendercontext'; -import { Stave } from './stave'; -import { Stroke } from './strokes'; -import { Tickable } from './tickable'; -import { TickContext } from './tickcontext'; -import { Voice } from './voice'; -export interface KeyProps { - stem_down_x_offset?: number; - stem_up_x_offset?: number; - key: string; - octave: number; - line: number; - int_value?: number; - accidental?: string; - code?: string; - stroke: number; - shift_right?: number; - displaced: boolean; -} -export interface NoteMetrics { - /** The total width of the note (including modifiers). */ - width: number; - glyphWidth?: number; - /** The width of the note head only. */ - notePx: number; - /** Start `X` for left modifiers. */ - modLeftPx: number; - /** Start `X` for right modifiers. */ - modRightPx: number; - /** Extra space on left of note. */ - leftDisplacedHeadPx: number; - glyphPx: number; - /** Extra space on right of note. */ - rightDisplacedHeadPx: number; -} -export interface NoteDuration { - duration: string; - dots: number; - type: string; -} -export interface ParsedNote { - duration: string; - type: string; - customTypes: string[]; - dots: number; - ticks: number; -} -export interface NoteStruct { - /** Array of pitches, e.g: `['c/4', 'e/4', 'g/4']` */ - keys?: string[]; - /** The time length (e.g., `q` for quarter, `h` for half, `8` for eighth etc.). */ - duration: string; - line?: number; - /** The number of dots, which affects the duration. */ - dots?: number; - /** The note type (e.g., `r` for rest, `s` for slash notes, etc.). */ - type?: string; - align_center?: boolean; - duration_override?: Fraction; -} -/** - * Note implements an abstract interface for notes and chords that - * are rendered on a stave. Notes have some common properties: All of them - * have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.) - * - * Some notes have stems, heads, dots, etc. Most notational elements that - * surround a note are called *modifiers*, and every note has an associated - * array of them. All notes also have a rendering context and belong to a stave. - */ -export declare abstract class Note extends Tickable { - static get CATEGORY(): string; - /** Debug helper. Displays various note metrics for the given note. */ - static plotMetrics(ctx: RenderContext, note: Tickable, yPos: number): void; - protected static parseDuration(durationString?: string): NoteDuration | undefined; - protected static parseNoteStruct(noteStruct: NoteStruct): ParsedNote | undefined; - glyphProps: GlyphProps; - keys: string[]; - keyProps: KeyProps[]; - protected stave?: Stave; - render_options: { - draw_stem_through_stave?: boolean; - draw?: boolean; - draw_dots?: boolean; - draw_stem?: boolean; - y_shift: number; - extend_left?: number; - extend_right?: number; - glyph_font_scale: number; - annotation_spacing: number; - glyph_font_size?: number; - scale: number; - font: string; - stroke_px: number; - }; - protected duration: string; - protected leftDisplacedHeadPx: number; - protected rightDisplacedHeadPx: number; - protected noteType: string; - protected customGlyphs: GlyphProps[]; - protected ys: number[]; - protected customTypes: string[]; - protected playNote?: Note; - protected beam?: Beam; - /** - * Every note is a tickable, i.e., it can be mutated by the `Formatter` class for - * positioning and layout. - * - * @param noteStruct To create a new note you need to provide a `noteStruct`. - */ - constructor(noteStruct: NoteStruct); - /** - * Get the play note, which is arbitrary data that can be used by an - * audio player. - */ - getPlayNote(): Note | undefined; - /** - * Set the play note, which is arbitrary data that can be used by an - * audio player. - */ - setPlayNote(note: Note): this; - /** - * @returns true if this note is a type of rest. - * - * Rests don't have pitches, but take up space in the score. - * Subclasses should override this default implementation. - */ - isRest(): boolean; - /** Add stroke. */ - addStroke(index: number, stroke: Stroke): this; - /** Get the target stave. */ - getStave(): Stave | undefined; - /** Check and get the target stave. */ - checkStave(): Stave; - /** Set the target stave. */ - setStave(stave: Stave): this; - /** Get spacing to the left of the notes. */ - getLeftDisplacedHeadPx(): number; - /** Get spacing to the right of the notes. */ - getRightDisplacedHeadPx(): number; - /** Set spacing to the left of the notes. */ - setLeftDisplacedHeadPx(x: number): this; - /** Set spacing to the right of the notes. */ - setRightDisplacedHeadPx(x: number): this; - /** True if this note has no duration (e.g., bar notes, spacers, etc.). */ - shouldIgnoreTicks(): boolean; - /** Get the stave line number for the note. */ - getLineNumber(isTopNote?: boolean): number; - /** Get the stave line number for rest. */ - getLineForRest(): number; - /** - * @deprecated Use `getGlyphProps()` instead. - */ - getGlyph(): any; - /** Get the glyph associated with this note. */ - getGlyphProps(): GlyphProps; - /** Get the glyph width. */ - getGlyphWidth(): number; - /** - * Set Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - setYs(ys: number[]): this; - /** - * Get Y positions for this note. Each Y value is associated with - * an individual pitch/key within the note/chord. - */ - getYs(): number[]; - /** - * Get the Y position of the space above the stave onto which text can - * be rendered. - */ - getYForTopText(text_line: number): number; - /** Return the voice that this note belongs in. */ - getVoice(): Voice; - /** Attach this note to `voice`. */ - setVoice(voice: Voice): this; - /** Get the `TickContext` for this note. */ - getTickContext(): TickContext; - /** Set the `TickContext` for this note. */ - setTickContext(tc: TickContext): this; - /** Accessor to duration. */ - getDuration(): string; - /** Accessor to isDotted. */ - isDotted(): boolean; - /** Accessor to hasStem. */ - hasStem(): boolean; - /** Accessor to note type. */ - getNoteType(): string; - /** Get the beam. */ - getBeam(): Beam | undefined; - /** Check and get the beam. */ - checkBeam(): Beam; - /** Check it has a beam. */ - hasBeam(): boolean; - /** Set the beam. */ - setBeam(beam: Beam): this; - /** - * Attach a modifier to this note. - * @param modifier the Modifier to add. - * @param index of the key to modify. - * @returns this - */ - addModifier(modifier: Modifier, index?: number): this; - /** Get all modifiers of a specific type in `this.modifiers`. */ - getModifiersByType(type: string): Modifier[]; - /** Get the coordinates for where modifiers begin. */ - getModifierStartXY(position?: number, index?: number, options?: any): { - x: number; - y: number; - }; - getRightParenthesisPx(index: number): number; - getLeftParenthesisPx(index: number): number; - getFirstDotPx(): number; - /** Get the metrics for this note. */ - getMetrics(): NoteMetrics; - /** - * Get the absolute `X` position of this note's tick context. This - * excludes x_shift, so you'll need to factor it in if you're - * looking for the post-formatted x-position. - */ - getAbsoluteX(): number; - /** Get the direction of the stem. */ - getStemDirection(): number; - /** Get the top and bottom `y` values of the stem. */ - getStemExtents(): Record; - /** Get the `x` coordinate to the right of the note. */ - getTieRightX(): number; - /** Get the `x` coordinate to the left of the note. */ - getTieLeftX(): number; - getKeys(): string[]; - getKeyProps(): KeyProps[]; -} diff --git a/build/types/src/notehead.d.ts b/build/types/src/notehead.d.ts deleted file mode 100644 index ca85202677..0000000000 --- a/build/types/src/notehead.d.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { ElementStyle } from './element'; -import { Note, NoteStruct } from './note'; -import { Stave } from './stave'; -export interface NoteHeadMetrics { - minPadding?: number; - displacedShiftX?: number; -} -export interface NoteHeadStruct extends NoteStruct { - line?: number; - glyph_font_scale?: number; - slashed?: boolean; - style?: ElementStyle; - stem_down_x_offset?: number; - stem_up_x_offset?: number; - custom_glyph_code?: string; - x_shift?: number; - stem_direction?: number; - displaced?: boolean; - note_type?: string; - x?: number; - y?: number; - index?: number; -} -/** - * `NoteHeads` are typically not manipulated - * directly, but used internally in `StaveNote`. - * - * See `tests/notehead_tests.ts` for usage examples. - */ -export declare class NoteHead extends Note { - /** To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - glyph_code: string; - protected custom_glyph: boolean; - protected stem_up_x_offset: number; - protected stem_down_x_offset: number; - protected displaced: boolean; - protected stem_direction: number; - protected x: number; - protected y: number; - protected line: number; - protected index?: number; - protected slashed: boolean; - constructor(noteStruct: NoteHeadStruct); - /** Get the width of the notehead. */ - getWidth(): number; - /** Determine if the notehead is displaced. */ - isDisplaced(): boolean; - /** Set the X coordinate. */ - setX(x: number): this; - /** Get the Y coordinate. */ - getY(): number; - /** Set the Y coordinate. */ - setY(y: number): this; - /** Get the stave line the notehead is placed on. */ - getLine(): number; - /** Set the stave line the notehead is placed on. */ - setLine(line: number): this; - /** Get the canvas `x` coordinate position of the notehead. */ - getAbsoluteX(): number; - /** Get the `BoundingBox` for the `NoteHead`. */ - getBoundingBox(): BoundingBox; - /** Set notehead to a provided `stave`. */ - setStave(stave: Stave): this; - /** Pre-render formatting. */ - preFormat(): this; - /** Draw the notehead. */ - draw(): void; -} diff --git a/build/types/src/notesubgroup.d.ts b/build/types/src/notesubgroup.d.ts deleted file mode 100644 index 4bc695ed2f..0000000000 --- a/build/types/src/notesubgroup.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Formatter } from './formatter'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -import { Voice } from './voice'; -export declare class NoteSubGroup extends Modifier { - static get CATEGORY(): string; - static format(groups: NoteSubGroup[], state: ModifierContextState): boolean; - protected subNotes: Note[]; - protected preFormatted: boolean; - protected formatter: Formatter; - protected voice: Voice; - constructor(subNotes: Note[]); - preFormat(): void; - setWidth(width: number): this; - getWidth(): number; - draw(): void; -} diff --git a/build/types/src/ornament.d.ts b/build/types/src/ornament.d.ts deleted file mode 100644 index cf7d7b3301..0000000000 --- a/build/types/src/ornament.d.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Glyph } from './glyph'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -export interface OrnamentMetrics { - xOffset: number; - yOffset: number; - stemUpYOffset: number; - reportedWidth: number; -} -/** - * Ornament implements ornaments as modifiers that can be - * attached to notes. The complete list of ornaments is available in - * `tables.ts` under `Vex.Flow.ornamentCodes`. - * - * See `tests/ornament_tests.ts` for usage examples. - */ -export declare class Ornament extends Modifier { - /** To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`. */ - static DEBUG: boolean; - /** Ornaments category string. */ - static get CATEGORY(): string; - static get minPadding(): number; - protected ornament: { - code: string; - }; - protected stemUpYOffset: number; - protected ornamentAlignWithNoteHead: string[] | boolean; - protected type: string; - protected delayed: boolean; - protected reportedWidth: number; - protected adjustForStemDirection: boolean; - render_options: { - accidentalUpperPadding: number; - accidentalLowerPadding: number; - font_scale: number; - }; - protected glyph: Glyph; - protected accidentalUpper?: Glyph; - protected accidentalLower?: Glyph; - protected delayXShift?: number; - /** Arrange ornaments inside `ModifierContext` */ - static format(ornaments: Ornament[], state: ModifierContextState): boolean; - /** - * ornamentNoteTransition means the jazz ornament represents an effect from one note to another, - * these are generally on the top of the staff. - */ - static get ornamentNoteTransition(): string[]; - /** - * ornamentAttack indicates something that happens in the attach, placed before the note and - * any accidentals - */ - static get ornamentAttack(): string[]; - /** - * The ornament is aligned based on the note head, but without regard to whether the - * stem goes up or down. - */ - static get ornamentAlignWithNoteHead(): string[]; - /** - * An ornament that happens on the release of the note, generally placed after the - * note and overlapping the next beat/measure.. - */ - static get ornamentRelease(): string[]; - /** ornamentArticulation goes above/below the note based on space availablity */ - static get ornamentArticulation(): string[]; - /** - * Legacy ornaments have hard-coded metrics. If additional ornament types are - * added, get their metrics here. - */ - getMetrics(): OrnamentMetrics; - /** - * Create a new ornament of type `type`, which is an entry in - * `Vex.Flow.ornamentCodes` in `tables.ts`. - */ - constructor(type: string); - /** Set whether the ornament is to be delayed. */ - setDelayed(delayed: boolean): this; - /** Set the upper accidental for the ornament. */ - setUpperAccidental(accid: string): this; - /** Set the lower accidental for the ornament. */ - setLowerAccidental(accid: string): this; - /** Render ornament in position next to note. */ - draw(): void; -} diff --git a/build/types/src/parenthesis.d.ts b/build/types/src/parenthesis.d.ts deleted file mode 100644 index 5189a3edda..0000000000 --- a/build/types/src/parenthesis.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Modifier, ModifierPosition } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -/** Parenthesis implements parenthesis modifiers for notes. */ -export declare class Parenthesis extends Modifier { - static get CATEGORY(): string; - protected point: number; - /** Add parentheses to the notes. */ - static buildAndAttach(notes: Note[]): void; - /** Arrange parentheses inside a ModifierContext. */ - static format(parentheses: Parenthesis[], state: ModifierContextState): boolean; - /** - * Constructor - * - * @param position Modifier.Position.LEFT (default) or Modifier.Position.RIGHT - */ - constructor(position: ModifierPosition); - /** Set the associated note. */ - setNote(note: Note): this; - /** Render the parenthesis. */ - draw(): void; -} diff --git a/build/types/src/parser.d.ts b/build/types/src/parser.d.ts deleted file mode 100644 index bdf609f878..0000000000 --- a/build/types/src/parser.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -export type Match = string | Match[] | null; -export type RuleFunction = () => Rule; -export type TriggerFunction = (state?: { - matches: Match[]; -}) => void; -export interface Rule { - token?: string; - noSpace?: boolean; - expect?: RuleFunction[]; - zeroOrMore?: boolean; - oneOrMore?: boolean; - maybe?: boolean; - or?: boolean; - run?: TriggerFunction; -} -export interface Result { - success: boolean; - pos?: number; - incrementPos?: number; - matchedString?: string; - matches?: Match[]; - numMatches?: number; - results?: GroupedResults; - errorPos?: number; -} -export type GroupedResults = (Result | Result[])[]; -export interface Grammar { - begin(): RuleFunction; -} -export declare class Parser { - static DEBUG: boolean; - protected grammar: Grammar; - protected line: string; - protected pos: number; - protected errorPos: number; - constructor(grammar: Grammar); - parse(line: string): Result; - matchFail(returnPos: number): void; - matchSuccess(): void; - matchToken(token: string, noSpace?: boolean): Result; - expectOne(rule: Rule, maybe?: boolean): Result; - expectOneOrMore(rule: Rule, maybe?: boolean): Result; - expectZeroOrMore(rule: Rule): Result; - expect(ruleFunc: RuleFunction): Result; -} diff --git a/build/types/src/pedalmarking.d.ts b/build/types/src/pedalmarking.d.ts deleted file mode 100644 index 0cc5adb864..0000000000 --- a/build/types/src/pedalmarking.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Element } from './element'; -import { FontInfo } from './font'; -import { StaveNote } from './stavenote'; -/** - * PedalMarking implements different types of pedal markings. These notation - * elements indicate to the performer when to depress and release the a pedal. - * - * In order to create "Sostenuto", and "una corda" markings, you must set - * custom text for the release/depress pedal markings. - */ -export declare class PedalMarking extends Element { - /** To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - static TEXT_FONT: Required; - protected line: number; - protected type: number; - protected custom_depress_text: string; - protected custom_release_text: string; - render_options: { - color: string; - bracket_height: number; - text_margin_right: number; - bracket_line_width: number; - }; - protected notes: StaveNote[]; - /** Glyph data */ - static readonly GLYPHS: Record; - /** Pedal type as number. */ - static readonly type: { - TEXT: number; - BRACKET: number; - MIXED: number; - }; - /** Pedal type as string. */ - static readonly typeString: Record; - /** - * Create a sustain pedal marking. Returns the defaults PedalMarking. - * Which uses the traditional "Ped" and "*"" markings. - */ - static createSustain(notes: StaveNote[]): PedalMarking; - /** Create a sostenuto pedal marking */ - static createSostenuto(notes: StaveNote[]): PedalMarking; - /** Create an una corda pedal marking */ - static createUnaCorda(notes: StaveNote[]): PedalMarking; - constructor(notes: StaveNote[]); - /** Set pedal type. */ - setType(type: string | number): this; - /** - * Set custom text for the `depress`/`release` pedal markings. No text is - * set if the parameter is falsy. - */ - setCustomText(depress: string, release?: string): this; - /** Set the staff line to render the markings on. */ - setLine(line: number): this; - /** Draw the bracket based pedal markings. */ - drawBracketed(): void; - /** - * Draw the text based pedal markings. This defaults to the traditional - * "Ped" and "*"" symbols if no custom text has been provided. - */ - drawText(): void; - /** Render the pedal marking in position on the rendering context. */ - draw(): void; -} diff --git a/build/types/src/registry.d.ts b/build/types/src/registry.d.ts deleted file mode 100644 index 6959b79f28..0000000000 --- a/build/types/src/registry.d.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Element } from './element'; -declare class Index { - [key: string]: { - [key: string]: { - [key: string]: Element; - }; - }; - constructor(); -} -export interface RegistryUpdate { - id: string; - name: string; - value: string | undefined; - oldValue: string | undefined; -} -export declare class Registry { - private static defaultRegistry?; - static getDefaultRegistry(): Registry | undefined; - static enableDefaultRegistry(registry: Registry): void; - static disableDefaultRegistry(): void; - protected index: Index; - constructor(); - clear(): this; - setIndexValue(name: string, value: string, id: string, elem: Element): void; - updateIndex({ id, name, value, oldValue }: RegistryUpdate): void; - /** - * Register element `elem` with this registry. - * This adds the element to its index and watches it for attribute changes. - * @param elem - * @param id - * @returns this - */ - register(elem: Element, id?: string): this; - getElementById(id: string): Element | undefined; - getElementsByAttribute(attribute: string, value: string): Element[]; - getElementsByType(type: string): Element[]; - getElementsByClass(className: string): Element[]; - onUpdate(info: RegistryUpdate): this; -} -export {}; diff --git a/build/types/src/rendercontext.d.ts b/build/types/src/rendercontext.d.ts deleted file mode 100644 index e4bb0882ae..0000000000 --- a/build/types/src/rendercontext.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { FontInfo } from './font'; -export interface TextMeasure { - x: number; - y: number; - width: number; - height: number; -} -export interface GroupAttributes { - pointerBBox: boolean; -} -export declare abstract class RenderContext { - static get CATEGORY(): string; - abstract clear(): void; - abstract setFillStyle(style: string): this; - abstract setBackgroundFillStyle(style: string): this; - abstract setStrokeStyle(style: string): this; - abstract setShadowColor(color: string): this; - abstract setShadowBlur(blur: number): this; - abstract setLineWidth(width: number): this; - abstract setLineCap(capType: CanvasLineCap): this; - abstract setLineDash(dashPattern: number[]): this; - abstract scale(x: number, y: number): this; - abstract rect(x: number, y: number, width: number, height: number): this; - abstract resize(width: number, height: number): this; - abstract fillRect(x: number, y: number, width: number, height: number): this; - abstract clearRect(x: number, y: number, width: number, height: number): this; - abstract beginPath(): this; - abstract moveTo(x: number, y: number): this; - abstract lineTo(x: number, y: number): this; - abstract bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; - abstract quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; - abstract arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; - abstract fill(attributes?: any): this; - abstract stroke(): this; - abstract closePath(): this; - abstract fillText(text: string, x: number, y: number): this; - abstract save(): this; - abstract restore(): this; - abstract openGroup(cls?: string, id?: string, attrs?: GroupAttributes): any; - abstract closeGroup(): void; - abstract add(child: any): void; - abstract measureText(text: string): TextMeasure; - abstract set fillStyle(style: string | CanvasGradient | CanvasPattern); - abstract get fillStyle(): string | CanvasGradient | CanvasPattern; - abstract set strokeStyle(style: string | CanvasGradient | CanvasPattern); - abstract get strokeStyle(): string | CanvasGradient | CanvasPattern; - abstract setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; - abstract getFont(): string; - set font(f: string); - get font(): string; - /** - * This is kept for backwards compatibility with 3.0.9. - * @deprecated use `setFont(...)` instead since it now supports CSS font shorthand. - */ - setRawFont(f: string): this; -} -/** - * Draw a tiny dot marker on the specified context. A great debugging aid. - * @param ctx context - * @param x dot x coordinate - * @param y dot y coordinate - * @param color - */ -export declare function drawDot(ctx: RenderContext, x: number, y: number, color?: string): void; diff --git a/build/types/src/renderer.d.ts b/build/types/src/renderer.d.ts deleted file mode 100644 index de85d12e99..0000000000 --- a/build/types/src/renderer.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { RenderContext } from './rendercontext'; -export type ContextBuilder = typeof Renderer.getSVGContext | typeof Renderer.getCanvasContext; -export declare enum RendererBackends { - CANVAS = 1, - SVG = 2 -} -export declare enum RendererLineEndType { - NONE = 1, - UP = 2, - DOWN = 3 -} -/** - * Support Canvas & SVG rendering contexts. - */ -export declare class Renderer { - static Backends: typeof RendererBackends; - static LineEndType: typeof RendererLineEndType; - static lastContext?: RenderContext; - static buildContext(elementId: string | HTMLCanvasElement | HTMLDivElement, backend: number, width: number, height: number, background?: string): RenderContext; - static getCanvasContext(elementId: string, width: number, height: number, background?: string): RenderContext; - static getSVGContext(elementId: string, width: number, height: number, background?: string): RenderContext; - static drawDashedLine(context: RenderContext, fromX: number, fromY: number, toX: number, toY: number, dashPattern: number[]): void; - protected ctx: RenderContext; - /** - * @param canvasId can be: - * - a string element ID (of a canvas or div element) - * - a canvas element - * - a div element, which will contain the SVG output - * @param backend Renderer.Backends.CANVAS or Renderer.Backends.SVG - */ - constructor(context: RenderContext); - constructor(canvas: string | HTMLCanvasElement | HTMLDivElement, backend: number); - resize(width: number, height: number): this; - getContext(): RenderContext; -} diff --git a/build/types/src/repeatnote.d.ts b/build/types/src/repeatnote.d.ts deleted file mode 100644 index f3df63ab8c..0000000000 --- a/build/types/src/repeatnote.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { GlyphNote, GlyphNoteOptions } from './glyphnote'; -import { NoteStruct } from './note'; -export declare class RepeatNote extends GlyphNote { - static get CATEGORY(): string; - constructor(type: string, noteStruct?: NoteStruct, options?: GlyphNoteOptions); -} diff --git a/build/types/src/stave.d.ts b/build/types/src/stave.d.ts deleted file mode 100644 index c4f0b477fb..0000000000 --- a/build/types/src/stave.d.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { BoundingBox, Bounds } from './boundingbox'; -import { Element, ElementStyle } from './element'; -import { FontInfo } from './font'; -import { BarlineType } from './stavebarline'; -import { StaveModifier } from './stavemodifier'; -import { StaveTempoOptions } from './stavetempo'; -export interface StaveLineConfig { - visible?: boolean; -} -export interface StaveOptions { - bottom_text_position?: number; - line_config?: StaveLineConfig[]; - space_below_staff_ln?: number; - space_above_staff_ln?: number; - vertical_bar_width?: number; - fill_style?: string; - left_bar?: boolean; - right_bar?: boolean; - spacing_between_lines_px?: number; - top_text_position?: number; - num_lines?: number; -} -export declare class Stave extends Element { - static get CATEGORY(): string; - static TEXT_FONT: Required; - readonly options: Required; - protected start_x: number; - protected clef: string; - protected endClef?: string; - protected x: number; - protected y: number; - protected width: number; - protected height: number; - protected formatted: boolean; - protected end_x: number; - protected measure: number; - protected bounds: Bounds; - protected readonly modifiers: StaveModifier[]; - protected defaultLedgerLineStyle: ElementStyle; - static get defaultPadding(): number; - static get rightPadding(): number; - constructor(x: number, y: number, width: number, options?: StaveOptions); - /** Set default style for ledger lines. */ - setDefaultLedgerLineStyle(style: ElementStyle): void; - /** Get default style for ledger lines. */ - getDefaultLedgerLineStyle(): ElementStyle; - space(spacing: number): number; - resetLines(): void; - setNoteStartX(x: number): this; - getNoteStartX(): number; - getNoteEndX(): number; - getTieStartX(): number; - getTieEndX(): number; - getX(): number; - getNumLines(): number; - setNumLines(n: number): this; - setY(y: number): this; - getY(): number; - getTopLineTopY(): number; - getBottomLineBottomY(): number; - setX(x: number): this; - setWidth(width: number): this; - getWidth(): number; - getStyle(): ElementStyle; - /** - * Set the measure number of this Stave. - */ - setMeasure(measure: number): this; - /** - * Return the measure number of this Stave. - */ - getMeasure(): number; - /** - * Gets the pixels to shift from the beginning of the stave - * following the modifier at the provided index - * @param {Number} index The index from which to determine the shift - * @return {Number} The amount of pixels shifted - */ - getModifierXShift(index?: number): number; - /** Coda & Segno Symbol functions */ - setRepetitionType(type: number, yShift?: number): this; - setVoltaType(type: number, number_t: string, y: number): this; - setSection(section: string, y: number, xOffset?: number, fontSize?: number, drawRect?: boolean): this; - setTempo(tempo: StaveTempoOptions, y: number): this; - setText(text: string, position: number, options?: { - shift_x?: number; - shift_y?: number; - justification?: number; - }): this; - getHeight(): number; - getSpacingBetweenLines(): number; - getBoundingBox(): BoundingBox; - getBottomY(): number; - getBottomLineY(): number; - /** @returns the y for the *center* of a staff line */ - getYForLine(line: number): number; - getLineForY(y: number): number; - getYForTopText(line?: number): number; - getYForBottomText(line?: number): number; - getYForNote(line: number): number; - getYForGlyphs(): number; - addModifier(modifier: StaveModifier, position?: number): this; - addEndModifier(modifier: StaveModifier): this; - setBegBarType(type: number | BarlineType): this; - setEndBarType(type: number | BarlineType): this; - setClef(clefSpec: string, size?: string, annotation?: string, position?: number): this; - getClef(): string; - setEndClef(clefSpec: string, size?: string, annotation?: string): this; - getEndClef(): string | undefined; - setKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; - setEndKeySignature(keySpec: string, cancelKeySpec?: string): this; - setTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; - setEndTimeSignature(timeSpec: string, customPadding?: number): this; - /** - * Add a key signature to the stave. - * - * Example: - * `stave.addKeySignature('Db');` - * @param keySpec new key specification `[A-G][b|#]?` - * @param cancelKeySpec - * @param position - * @returns - */ - addKeySignature(keySpec: string, cancelKeySpec?: string, position?: number): this; - /** - * Add a clef to the stave. - * - * Example: - * - * stave.addClef('treble') - * @param clef clef (treble|bass|...) see {@link Clef.types} - * @param size - * @param annotation - * @param position - * @returns - */ - addClef(clef: string, size?: string, annotation?: string, position?: number): this; - addEndClef(clef: string, size?: string, annotation?: string): this; - /** - * Add a time signature to the stave - * - * Example: - * - * `stave.addTimeSignature('4/4');` - * @param timeSpec time signature specification `(C\||C|\d\/\d)` - * @param customPadding - * @param position - * @returns - */ - addTimeSignature(timeSpec: string, customPadding?: number, position?: number): this; - addEndTimeSignature(timeSpec: string, customPadding?: number): this; - addTrebleGlyph(): this; - /** - * @param position - * @param category - * @returns array of StaveModifiers that match the provided position and category. - */ - getModifiers(position?: number, category?: string): StaveModifier[]; - /** - * Use the modifier's `getCategory()` as a key for the `order` array. - * The retrieved value is used to sort modifiers from left to right (0 to to 3). - */ - sortByCategory(items: StaveModifier[], order: Record): void; - format(): void; - /** - * All drawing functions below need the context to be set. - */ - draw(): this; - getVerticalBarWidth(): number; - /** - * Get the current configuration for the Stave. - * @return {Array} An array of configuration objects. - */ - getConfigForLines(): StaveLineConfig[]; - /** - * Configure properties of the lines in the Stave - * @param line_number The index of the line to configure. - * @param line_config An configuration object for the specified line. - * @throws RuntimeError "StaveConfigError" When the specified line number is out of - * range of the number of lines specified in the constructor. - */ - setConfigForLine(line_number: number, line_config: StaveLineConfig): this; - /** - * Set the staff line configuration array for all of the lines at once. - * @param lines_configuration An array of line configuration objects. These objects - * are of the same format as the single one passed in to setLineConfiguration(). - * The caller can set null for any line config entry if it is desired that the default be used - * @throws RuntimeError "StaveConfigError" When the lines_configuration array does not have - * exactly the same number of elements as the num_lines configuration object set in - * the constructor. - */ - setConfigForLines(lines_configuration: StaveLineConfig[]): this; - static formatBegModifiers(staves: Stave[]): void; -} diff --git a/build/types/src/stavebarline.d.ts b/build/types/src/stavebarline.d.ts deleted file mode 100644 index 67b51bb437..0000000000 --- a/build/types/src/stavebarline.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Stave } from './stave'; -import { LayoutMetrics, StaveModifier } from './stavemodifier'; -export declare enum BarlineType { - SINGLE = 1, - DOUBLE = 2, - END = 3, - REPEAT_BEGIN = 4, - REPEAT_END = 5, - REPEAT_BOTH = 6, - NONE = 7 -} -export declare class Barline extends StaveModifier { - static get CATEGORY(): string; - protected widths: Record; - protected paddings: Record; - protected layoutMetricsMap: Record; - protected thickness: number; - protected type: BarlineType; - static get type(): typeof BarlineType; - static get typeString(): Record; - constructor(type: BarlineType | string); - getType(): number; - setType(type: string | number): this; - draw(stave: Stave): void; - drawVerticalBar(stave: Stave, x: number, double_bar?: boolean): void; - drawVerticalEndBar(stave: Stave, x: number): void; - drawRepeatBar(stave: Stave, x: number, begin: boolean): void; -} diff --git a/build/types/src/staveconnector.d.ts b/build/types/src/staveconnector.d.ts deleted file mode 100644 index 883549a35e..0000000000 --- a/build/types/src/staveconnector.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Element } from './element'; -import { FontInfo } from './font'; -import { Stave } from './stave'; -/** - * see {@link StaveConnector.type} & {@link StaveConnector.typeString} - */ -export type StaveConnectorType = 'singleRight' | 'singleLeft' | 'single' | 'double' | 'brace' | 'bracket' | 'boldDoubleLeft' | 'boldDoubleRight' | 'thinDouble' | 'none' | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; -/** StaveConnector implements the connector lines between staves of a system. */ -export declare class StaveConnector extends Element { - static get CATEGORY(): string; - static TEXT_FONT: Required; - /** - * SINGLE_LEFT and SINGLE are the same value for compatibility - * with older versions of vexflow which didn't have right sided - * stave connectors. - */ - static readonly type: Record>; - /** - * Connector type: - * * "singleRight" - * * "singleLeft" - * * "single" - * * "double" - * * "brace" - * * "bracket" - * * "boldDoubleLeft" - * * "boldDoubleRight" - * * "thinDouble" - * * "none" - */ - static readonly typeString: Record, Exclude>; - protected width: number; - protected texts: { - content: string; - options: { - shift_x: number; - shift_y: number; - }; - }[]; - protected type: typeof StaveConnector['type'][keyof typeof StaveConnector['type']]; - readonly top_stave: Stave; - readonly bottom_stave: Stave; - readonly thickness: number; - protected x_shift: number; - constructor(top_stave: Stave, bottom_stave: Stave); - /** - * Set type. - * @param type see {@link StaveConnector.type} & {@link StaveConnector.typeString} - */ - setType(type: StaveConnectorType): this; - /** - * Get type. - * @returns number {@link StaveConnector.type} - */ - getType(): number; - /** Set optional associated Text. */ - setText(text: string, options?: { - shift_x?: number; - shift_y?: number; - }): this; - setXShift(x_shift: number): this; - getXShift(): number; - /** Render connector and associated text. */ - draw(): void; -} diff --git a/build/types/src/stavehairpin.d.ts b/build/types/src/stavehairpin.d.ts deleted file mode 100644 index ef02eb2563..0000000000 --- a/build/types/src/stavehairpin.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Element } from './element'; -import { Note } from './note'; -import { RenderContext } from './rendercontext'; -export interface StaveHairpinRenderOptions { - right_shift_ticks?: number; - left_shift_ticks?: number; - left_shift_px: number; - right_shift_px: number; - height: number; - y_shift: number; -} -export declare class StaveHairpin extends Element { - static get CATEGORY(): string; - protected hairpin: number; - protected position: number; - render_options: StaveHairpinRenderOptions; - protected notes: Record; - protected first_note?: Note; - protected last_note?: Note; - static readonly type: { - CRESC: number; - DECRESC: number; - }; - static FormatByTicksAndDraw(ctx: RenderContext, formatter: { - pixelsPerTick: number; - }, notes: Record, type: number, position: number, options: StaveHairpinRenderOptions): void; - /** - * Create a new hairpin from the specified notes. - * - * @param {!Object} notes The notes to tie up. - * Notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * } - * @param {!Object} type The type of hairpin - */ - constructor(notes: Record, type: number); - setPosition(position: number): this; - setRenderOptions(options: StaveHairpinRenderOptions): this; - /** - * Set the notes to attach this hairpin to. - * - * @param {!Object} notes The start and end notes. - */ - setNotes(notes: Record): this; - renderHairpin(params: { - first_x: number; - last_x: number; - first_y: number; - last_y: number; - staff_height: number; - }): void; - draw(): void; -} diff --git a/build/types/src/staveline.d.ts b/build/types/src/staveline.d.ts deleted file mode 100644 index 16f0679234..0000000000 --- a/build/types/src/staveline.d.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Element } from './element'; -import { FontInfo } from './font'; -import { RenderContext } from './rendercontext'; -import { StaveNote } from './stavenote'; -import { TextJustification } from './textnote'; -export interface StaveLineNotes { - first_note: StaveNote; - first_indices: number[]; - last_note: StaveNote; - last_indices: number[]; -} -export declare class StaveLine extends Element { - static get CATEGORY(): string; - /** Default text font. */ - static TEXT_FONT: Required; - static readonly TextVerticalPosition: { - TOP: number; - BOTTOM: number; - }; - static readonly TextJustification: typeof TextJustification; - render_options: { - padding_left: number; - padding_right: number; - line_width: number; - line_dash?: number[]; - rounded_end: boolean; - color?: string; - draw_start_arrow: boolean; - draw_end_arrow: boolean; - arrowhead_length: number; - arrowhead_angle: number; - text_position_vertical: number; - text_justification: number; - }; - protected text: string; - protected notes: StaveLineNotes; - protected first_note: StaveNote; - protected first_indices: number[]; - protected last_note: StaveNote; - protected last_indices: number[]; - constructor(notes: StaveLineNotes); - setText(text: string): this; - setNotes(notes: StaveLineNotes): this; - applyLineStyle(): void; - applyFontStyle(): void; - protected drawArrowLine(ctx: RenderContext, pt1: { - x: number; - y: number; - }, pt2: { - x: number; - y: number; - }): void; - draw(): this; -} diff --git a/build/types/src/stavemodifier.d.ts b/build/types/src/stavemodifier.d.ts deleted file mode 100644 index e8b105f4b4..0000000000 --- a/build/types/src/stavemodifier.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Element } from './element'; -import { Glyph } from './glyph'; -import { Stave } from './stave'; -export interface LayoutMetrics { - xMin: number; - xMax: number; - paddingLeft: number; - paddingRight: number; -} -export declare enum StaveModifierPosition { - CENTER = 0, - LEFT = 1, - RIGHT = 2, - ABOVE = 3, - BELOW = 4, - BEGIN = 5, - END = 6 -} -export declare class StaveModifier extends Element { - static get CATEGORY(): string; - static get Position(): typeof StaveModifierPosition; - protected width: number; - protected x: number; - protected padding: number; - protected position: StaveModifierPosition; - protected stave?: Stave; - protected layoutMetrics?: LayoutMetrics; - constructor(); - getPosition(): number; - setPosition(position: number): this; - getStave(): Stave | undefined; - checkStave(): Stave; - setStave(stave: Stave): this; - getWidth(): number; - setWidth(width: number): this; - getX(): number; - setX(x: number): this; - /** - * Runs setYShift() for the Glyph object so that it matches the position of line for - * the Stave provided. A `customShift` can also be given (measured in the same units - * as `setYShift` not in lines) and this will be added after all other positions are - * calculated from the Stave. - * - * Note that this routine only sets the yShift; it does not actually "place" (meaning - * draw) the Glyph on the Stave. Call .draw() afterwards to do that. - */ - placeGlyphOnLine(glyph: Glyph, stave: Stave, line?: number, customShift?: number): void; - getPadding(index: number): number; - setPadding(padding: number): this; - setLayoutMetrics(layoutMetrics: LayoutMetrics): this; - getLayoutMetrics(): LayoutMetrics | undefined; - draw(...args: any[]): void; -} diff --git a/build/types/src/stavenote.d.ts b/build/types/src/stavenote.d.ts deleted file mode 100644 index 1284baea8d..0000000000 --- a/build/types/src/stavenote.d.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { Beam } from './beam'; -import { BoundingBox } from './boundingbox'; -import { ElementStyle } from './element'; -import { ModifierContextState } from './modifiercontext'; -import { Note, NoteStruct } from './note'; -import { NoteHead } from './notehead'; -import { Stave } from './stave'; -import { StemOptions } from './stem'; -import { StemmableNote } from './stemmablenote'; -export interface StaveNoteHeadBounds { - y_top: number; - y_bottom: number; - displaced_x?: number; - non_displaced_x?: number; - highest_line: number; - lowest_line: number; - highest_displaced_line?: number; - lowest_displaced_line?: number; - highest_non_displaced_line: number; - lowest_non_displaced_line: number; -} -export interface StaveNoteFormatSettings { - line: number; - maxLine: number; - minLine: number; - isrest: boolean; - stemDirection?: number; - stemMax: number; - stemMin: number; - voice_shift: number; - is_displaced: boolean; - note: StaveNote; -} -export interface StaveNoteStruct extends NoteStruct { - /** `Stem.UP` or `Stem.DOWN`. */ - stem_direction?: number; - auto_stem?: boolean; - stem_down_x_offset?: number; - stem_up_x_offset?: number; - stroke_px?: number; - glyph_font_scale?: number; - octave_shift?: number; - clef?: string; -} -export declare class StaveNote extends StemmableNote { - static DEBUG: boolean; - static get CATEGORY(): string; - /** - * @deprecated Use Stem.UP. - */ - static get STEM_UP(): number; - /** - * @deprecated Use Stem.DOWN. - */ - static get STEM_DOWN(): number; - static get LEDGER_LINE_OFFSET(): number; - static get minNoteheadPadding(): number; - /** Format notes inside a ModifierContext. */ - static format(notes: StaveNote[], state: ModifierContextState): boolean; - static postFormat(notes: Note[]): boolean; - minLine: number; - maxLine: number; - protected readonly clef: string; - protected readonly octave_shift?: number; - protected displaced: boolean; - protected dot_shiftY: number; - protected use_default_head_x: boolean; - protected ledgerLineStyle: ElementStyle; - private _noteHeads; - private sortedKeyProps; - constructor(noteStruct: StaveNoteStruct); - reset(): this; - setBeam(beam: Beam): this; - buildStem(): this; - buildNoteHeads(): void; - autoStem(): void; - calculateOptimalStemDirection(): number; - calculateKeyProps(): void; - getBoundingBox(): BoundingBox; - getLineNumber(isTopNote?: boolean): number; - /** - * @returns true if this note is a type of rest. Rests don't have pitches, but take up space in the score. - */ - isRest(): boolean; - isChord(): boolean; - hasStem(): boolean; - hasFlag(): boolean; - getStemX(): number; - getYForTopText(textLine: number): number; - getYForBottomText(textLine: number): number; - setStave(stave: Stave): this; - isDisplaced(): boolean; - setNoteDisplaced(displaced: boolean): this; - getTieRightX(): number; - getTieLeftX(): number; - getLineForRest(): number; - getModifierStartXY(position: number, index: number, options?: { - forceFlagRight?: boolean; - }): { - x: number; - y: number; - }; - setStyle(style: ElementStyle): this; - setStemStyle(style: ElementStyle): this; - getStemStyle(): ElementStyle | undefined; - setLedgerLineStyle(style: ElementStyle): void; - getLedgerLineStyle(): ElementStyle; - setFlagStyle(style: ElementStyle): void; - getFlagStyle(): ElementStyle | undefined; - setKeyStyle(index: number, style: ElementStyle): this; - setKeyLine(index: number, line: number): this; - getKeyLine(index: number): number; - getVoiceShiftWidth(): number; - calcNoteDisplacements(): void; - preFormat(): void; - /** - * @typedef {Object} noteHeadBounds - * @property {number} y_top the highest notehead bound - * @property {number} y_bottom the lowest notehead bound - * @property {number|Null} displaced_x the starting x for displaced noteheads - * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads - * @property {number} highest_line the highest notehead line in traditional music line - * numbering (bottom line = 1, top line = 5) - * @property {number} lowest_line the lowest notehead line - * @property {number|false} highest_displaced_line the highest staff line number - * for a displaced notehead - * @property {number|false} lowest_displaced_line - * @property {number} highest_non_displaced_line - * @property {number} lowest_non_displaced_line - */ - /** - * Get the staff line and y value for the highest & lowest noteheads - * @returns {noteHeadBounds} - */ - getNoteHeadBounds(): StaveNoteHeadBounds; - getNoteHeadBeginX(): number; - getNoteHeadEndX(): number; - get noteHeads(): NoteHead[]; - /** @deprecated use StaveNote.noteHeads instead. */ - get note_heads(): NoteHead[]; - drawLedgerLines(): void; - drawModifiers(noteheadParam: NoteHead): void; - shouldDrawFlag(): boolean; - drawFlag(): void; - drawNoteHeads(): void; - drawStem(stemOptions?: StemOptions): void; - /** Primarily used as the scaling factor for grace notes, GraceNote will return the required scale. */ - getStaveNoteScale(): number; - /** - * Override stemmablenote stem extension to adjust for distance from middle line. - */ - getStemExtension(): number; - draw(): void; -} diff --git a/build/types/src/staverepetition.d.ts b/build/types/src/staverepetition.d.ts deleted file mode 100644 index afa3bf95c0..0000000000 --- a/build/types/src/staverepetition.d.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { FontInfo } from './font'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export declare class Repetition extends StaveModifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - static readonly type: { - NONE: number; - CODA_LEFT: number; - CODA_RIGHT: number; - SEGNO_LEFT: number; - SEGNO_RIGHT: number; - DC: number; - DC_AL_CODA: number; - DC_AL_FINE: number; - DS: number; - DS_AL_CODA: number; - DS_AL_FINE: number; - FINE: number; - TO_CODA: number; - }; - protected symbol_type: number; - protected x_shift: number; - protected y_shift: number; - constructor(type: number, x: number, y_shift: number); - setShiftX(x: number): this; - setShiftY(y: number): this; - draw(stave: Stave, x: number): this; - drawCodaFixed(stave: Stave, x: number): this; - drawSignoFixed(stave: Stave, x: number): this; - drawSymbolText(stave: Stave, x: number, text: string, draw_coda: boolean): this; -} diff --git a/build/types/src/stavesection.d.ts b/build/types/src/stavesection.d.ts deleted file mode 100644 index b918b6e764..0000000000 --- a/build/types/src/stavesection.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { FontInfo } from './font'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export declare class StaveSection extends StaveModifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - protected section: string; - protected shift_x: number; - protected shift_y: number; - protected drawRect: boolean; - constructor(section: string, x: number, shift_y: number, drawRect?: boolean); - setStaveSection(section: string): this; - setShiftX(x: number): this; - setShiftY(y: number): this; - draw(stave: Stave, shift_x: number): this; -} diff --git a/build/types/src/stavetempo.d.ts b/build/types/src/stavetempo.d.ts deleted file mode 100644 index 6fe3003fd7..0000000000 --- a/build/types/src/stavetempo.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { FontInfo } from './font'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export interface StaveTempoOptions { - bpm?: number; - duration?: string; - dots?: number; - name?: string; -} -export declare class StaveTempo extends StaveModifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - protected tempo: StaveTempoOptions; - protected shift_x: number; - protected shift_y: number; - /** Font size for note. */ - render_options: { - glyph_font_scale: number; - }; - constructor(tempo: StaveTempoOptions, x: number, shift_y: number); - setTempo(tempo: StaveTempoOptions): this; - setShiftX(x: number): this; - setShiftY(y: number): this; - draw(stave: Stave, shift_x: number): this; -} diff --git a/build/types/src/stavetext.d.ts b/build/types/src/stavetext.d.ts deleted file mode 100644 index 23a01dd860..0000000000 --- a/build/types/src/stavetext.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { FontInfo } from './font'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export declare class StaveText extends StaveModifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - protected options: { - shift_x: number; - shift_y: number; - justification: number; - }; - protected text: string; - protected shift_x?: number; - protected shift_y?: number; - constructor(text: string, position: number, options?: { - shift_x?: number; - shift_y?: number; - justification?: number; - }); - setStaveText(text: string): this; - setShiftX(x: number): this; - setShiftY(y: number): this; - setText(text: string): this; - draw(stave: Stave): this; -} diff --git a/build/types/src/stavetie.d.ts b/build/types/src/stavetie.d.ts deleted file mode 100644 index 22a3a4541e..0000000000 --- a/build/types/src/stavetie.d.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Element } from './element'; -import { FontInfo } from './font'; -import { Note } from './note'; -export interface TieNotes { - first_note?: Note | null; - last_note?: Note | null; - first_indices?: number[]; - last_indices?: number[]; -} -export declare class StaveTie extends Element { - static get CATEGORY(): string; - /** Default text font. */ - static TEXT_FONT: Required; - render_options: { - cp2: number; - last_x_shift: number; - tie_spacing: number; - cp1: number; - first_x_shift: number; - text_shift_x: number; - y_shift: number; - }; - protected text?: string; - protected notes: TieNotes; - protected direction?: number; - /** - * @param notes is a struct that has: - * - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes: TieNotes, text?: string); - setDirection(direction: number): this; - /** - * Set the notes to attach this tie to. - * - * @param {!Object} notes The notes to tie up. - */ - setNotes(notes: TieNotes): this; - /** - * @return {boolean} Returns true if this is a partial bar. - */ - isPartial(): boolean; - renderTie(params: { - direction: number; - first_x_px: number; - last_x_px: number; - last_ys: number[]; - first_ys: number[]; - }): void; - renderText(first_x_px: number, last_x_px: number): void; - /** - * Returns the TieNotes structure of the first and last note this tie connects. - */ - getNotes(): TieNotes; - draw(): boolean; -} diff --git a/build/types/src/stavevolta.d.ts b/build/types/src/stavevolta.d.ts deleted file mode 100644 index d23dddce6c..0000000000 --- a/build/types/src/stavevolta.d.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { FontInfo } from './font'; -import { Stave } from './stave'; -import { StaveModifier } from './stavemodifier'; -export declare enum VoltaType { - NONE = 1, - BEGIN = 2, - MID = 3, - END = 4, - BEGIN_END = 5 -} -export declare class Volta extends StaveModifier { - static get CATEGORY(): string; - static get type(): typeof VoltaType; - static TEXT_FONT: Required; - protected volta: number; - protected number: string; - protected y_shift: number; - constructor(type: number, number: string, x: number, y_shift: number); - setShiftY(y: number): this; - draw(stave: Stave, x: number): this; -} diff --git a/build/types/src/stem.d.ts b/build/types/src/stem.d.ts deleted file mode 100644 index 727332e7bc..0000000000 --- a/build/types/src/stem.d.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { Element } from './element'; -export interface StemOptions { - stem_down_y_base_offset?: number; - stem_up_y_base_offset?: number; - stem_down_y_offset?: number; - stem_up_y_offset?: number; - stemletHeight?: number; - isStemlet?: boolean; - hide?: boolean; - stem_direction?: number; - stem_extension?: number; - y_bottom?: number; - y_top?: number; - x_end?: number; - x_begin?: number; -} -export declare class Stem extends Element { - /** To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - static get UP(): number; - static get DOWN(): number; - static get WIDTH(): number; - static get HEIGHT(): number; - protected hide: boolean; - protected isStemlet: boolean; - protected stemletHeight: number; - protected x_begin: number; - protected x_end: number; - protected y_top: number; - protected stem_up_y_offset: number; - protected y_bottom: number; - protected stem_down_y_offset: number; - protected stem_up_y_base_offset: number; - protected stem_down_y_base_offset: number; - protected stem_direction: number; - protected stem_extension: number; - protected renderHeightAdjustment: number; - constructor(options?: StemOptions); - setOptions(options?: StemOptions): void; - setNoteHeadXBounds(x_begin: number, x_end: number): this; - setDirection(direction: number): void; - setExtension(ext: number): void; - getExtension(): number; - setYBounds(y_top: number, y_bottom: number): void; - getHeight(): number; - getBoundingBox(): BoundingBox; - getExtents(): { - topY: number; - baseY: number; - }; - setVisibility(isVisible: boolean): this; - setStemlet(isStemlet: boolean, stemletHeight: number): this; - adjustHeightForFlag(): void; - adjustHeightForBeam(): void; - draw(): void; -} diff --git a/build/types/src/stemmablenote.d.ts b/build/types/src/stemmablenote.d.ts deleted file mode 100644 index 988d9c677e..0000000000 --- a/build/types/src/stemmablenote.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Glyph, GlyphProps } from './glyph'; -import { Note, NoteStruct } from './note'; -import { Stem, StemOptions } from './stem'; -export declare abstract class StemmableNote extends Note { - static get CATEGORY(): string; - stem_direction?: number; - stem?: Stem; - protected flag?: Glyph; - protected stem_extension_override?: number; - constructor(noteStruct: NoteStruct); - getStem(): Stem | undefined; - checkStem(): Stem; - setStem(stem: Stem): this; - buildStem(): this; - buildFlag(category?: string): void; - getBaseCustomNoteHeadGlyphProps(): GlyphProps; - getStemLength(): number; - getBeamCount(): number; - getStemMinimumLength(): number; - getStemDirection(): number; - setStemDirection(direction?: number): this; - getStemX(): number; - getCenterGlyphX(): number; - getStemExtension(): number; - setStemLength(height: number): this; - getStemExtents(): { - topY: number; - baseY: number; - }; - /** Gets the `y` value for the top modifiers at a specific `textLine`. */ - getYForTopText(textLine: number): number; - /** Gets the `y` value for the bottom modifiers at a specific `textLine`. */ - getYForBottomText(textLine: number): number; - hasFlag(): boolean; - /** Post formats the note. */ - postFormat(): this; - /** Renders the stem onto the canvas. */ - drawStem(stemOptions: StemOptions): void; -} diff --git a/build/types/src/stringnumber.d.ts b/build/types/src/stringnumber.d.ts deleted file mode 100644 index 0b509fc012..0000000000 --- a/build/types/src/stringnumber.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { FontInfo } from './font'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -export interface StringNumberMetrics { - verticalPadding: number; - stemPadding: number; - leftPadding: number; - rightPadding: number; -} -export declare class StringNumber extends Modifier { - static get CATEGORY(): string; - static TEXT_FONT: Required; - static get metrics(): StringNumberMetrics; - static format(nums: StringNumber[], state: ModifierContextState): boolean; - protected radius: number; - protected drawCircle: boolean; - protected last_note?: Note; - protected string_number: string; - protected x_offset: number; - protected y_offset: number; - protected text_line: number; - protected stem_offset: number; - protected dashed: boolean; - protected leg: number; - constructor(number: string); - setLineEndType(leg: number): this; - setStringNumber(number: string): this; - setOffsetX(x: number): this; - setOffsetY(y: number): this; - setLastNote(note: Note): this; - setDashed(dashed: boolean): this; - setDrawCircle(drawCircle: boolean): this; - draw(): void; -} diff --git a/build/types/src/strokes.d.ts b/build/types/src/strokes.d.ts deleted file mode 100644 index 8e6329489c..0000000000 --- a/build/types/src/strokes.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { FontInfo } from './font'; -import { Modifier } from './modifier'; -import { ModifierContextState } from './modifiercontext'; -import { Note } from './note'; -export declare class Stroke extends Modifier { - static get CATEGORY(): string; - static readonly Type: { - BRUSH_DOWN: number; - BRUSH_UP: number; - ROLL_DOWN: number; - ROLL_UP: number; - RASQUEDO_DOWN: number; - RASQUEDO_UP: number; - ARPEGGIO_DIRECTIONLESS: number; - }; - static TEXT_FONT: Required; - static format(strokes: Stroke[], state: ModifierContextState): boolean; - protected options: { - all_voices: boolean; - }; - protected all_voices: boolean; - protected type: number; - protected note_end?: Note; - render_options: { - font_scale: number; - }; - constructor(type: number, options?: { - all_voices: boolean; - }); - getPosition(): number; - addEndNote(note: Note): this; - draw(): void; -} diff --git a/build/types/src/svgcontext.d.ts b/build/types/src/svgcontext.d.ts deleted file mode 100644 index ef282fad1a..0000000000 --- a/build/types/src/svgcontext.d.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { FontInfo } from './font'; -import { GroupAttributes, RenderContext, TextMeasure } from './rendercontext'; -export type Attributes = { - [name: string]: string | number | undefined; - 'font-family'?: string; - 'font-size'?: string | number; - 'font-style'?: string; - 'font-weight'?: string | number; - scaleX?: number; - scaleY?: number; -}; -export interface State { - state: Attributes; - attributes: Attributes; - shadow_attributes: Attributes; - lineWidth: number; -} -declare class MeasureTextCache { - protected txt?: SVGTextElement; - protected cache: Record>; - lookup(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; - measureImpl(text: string, svg: SVGSVGElement, attributes: Attributes): TextMeasure; -} -/** - * SVG rendering context with an API similar to CanvasRenderingContext2D. - */ -export declare class SVGContext extends RenderContext { - protected static measureTextCache: MeasureTextCache; - element: HTMLElement; - svg: SVGSVGElement; - width: number; - height: number; - path: string; - pen: { - x: number; - y: number; - }; - lineWidth: number; - attributes: Attributes; - shadow_attributes: Attributes; - state: Attributes; - state_stack: State[]; - parent: SVGGElement; - groups: SVGGElement[]; - protected groupAttributes: Attributes[]; - protected precision: number; - backgroundFillStyle: string; - /** Formatted as CSS font shorthand (e.g., 'italic bold 12pt Arial') */ - protected fontCSSString: string; - constructor(element: HTMLElement); - protected round(n: number): number; - /** - * Use one of the overload signatures to create an SVG element of a specific type. - * The last overload accepts an arbitrary string, and is identical to the - * implementation signature. - * Feel free to add new overloads for other SVG element types as required. - */ - create(svgElementType: 'g'): SVGGElement; - create(svgElementType: 'path'): SVGPathElement; - create(svgElementType: 'rect'): SVGRectElement; - create(svgElementType: 'svg'): SVGSVGElement; - create(svgElementType: 'text'): SVGTextElement; - create(svgElementType: string): SVGElement; - openGroup(cls?: string, id?: string, attrs?: GroupAttributes): SVGGElement; - closeGroup(): void; - add(elem: SVGElement): void; - setFillStyle(style: string): this; - /** - * Used to set the fill color for `clearRect()`. This allows us to simulate - * cutting a "hole" into the SVG drawing. - */ - setBackgroundFillStyle(style: string): this; - setStrokeStyle(style: string): this; - setShadowColor(color: string): this; - /** - * @param blur A non-negative float specifying the level of shadow blur, where 0 - * represents no blur and larger numbers represent increasingly more blur. - * @returns this - */ - setShadowBlur(blur: number): this; - /** - * @param width - * @returns this - */ - setLineWidth(width: number): this; - /** - * @param lineDash an array of integers in the form of [dash, space, dash, space, etc...] - * @returns this - * - * See: [SVG `stroke-dasharray` attribute](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray) - */ - setLineDash(lineDash: number[]): this; - /** - * @param capType - * @returns this - */ - setLineCap(capType: CanvasLineCap): this; - resize(width: number, height: number): this; - scale(x: number, y: number): this; - /** - * 1 arg: string in the "x y w h" format - * 4 args: x:number, y:number, w:number, h:number - */ - setViewBox(viewBox_or_minX: string | number, minY?: number, width?: number, height?: number): void; - applyAttributes(element: SVGElement, attributes: Attributes): SVGElement; - clear(): void; - rect(x: number, y: number, width: number, height: number, attributes?: Attributes): this; - fillRect(x: number, y: number, width: number, height: number): this; - clearRect(x: number, y: number, width: number, height: number): this; - beginPath(): this; - moveTo(x: number, y: number): this; - lineTo(x: number, y: number): this; - bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): this; - quadraticCurveTo(x1: number, y1: number, x: number, y: number): this; - arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise: boolean): this; - closePath(): this; - private getShadowStyle; - fill(attributes?: Attributes): this; - stroke(): this; - measureText(text: string): TextMeasure; - fillText(text: string, x: number, y: number): this; - save(): this; - restore(): this; - set fillStyle(style: string | CanvasGradient | CanvasPattern); - get fillStyle(): string | CanvasGradient | CanvasPattern; - set strokeStyle(style: string | CanvasGradient | CanvasPattern); - get strokeStyle(): string | CanvasGradient | CanvasPattern; - /** - * @param f is 1) a `FontInfo` object or - * 2) a string formatted as CSS font shorthand (e.g., 'bold 10pt Arial') or - * 3) a string representing the font family (one of `size`, `weight`, or `style` must also be provided). - * @param size a string specifying the font size and unit (e.g., '16pt'), or a number (the unit is assumed to be 'pt'). - * @param weight is a string (e.g., 'bold', 'normal') or a number (100, 200, ... 900). It is inserted - * into the font-weight attribute (e.g., font-weight="bold") - * @param style is a string (e.g., 'italic', 'normal') that is inserted into the - * font-style attribute (e.g., font-style="italic") - */ - setFont(f?: string | FontInfo, size?: string | number, weight?: string | number, style?: string): this; - /** Return a string of the form `'italic bold 15pt Arial'` */ - getFont(): string; -} -export {}; diff --git a/build/types/src/system.d.ts b/build/types/src/system.d.ts deleted file mode 100644 index 59c4b0cfdf..0000000000 --- a/build/types/src/system.d.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { Element } from './element'; -import { Factory } from './factory'; -import { FormatParams, Formatter, FormatterOptions } from './formatter'; -import { RenderContext } from './rendercontext'; -import { Stave, StaveOptions } from './stave'; -import { StaveConnector, StaveConnectorType } from './staveconnector'; -import { Voice } from './voice'; -export interface SystemFormatterOptions extends FormatterOptions { - alpha?: number; -} -export interface SystemStave { - voices: Voice[]; - stave?: Stave; - noJustification?: boolean; - options?: StaveOptions; - spaceAbove?: number; - spaceBelow?: number; - debugNoteMetrics?: boolean; -} -interface StaveInfo { - noJustification: boolean; - options: StaveOptions; - spaceAbove: number; - spaceBelow: number; - debugNoteMetrics: boolean; -} -/** - * Formatting for systems created/drawn from factory: - * - * If width is provided, the system will use the specified width. - * - * If noJustification flag is 'true', there is no justification between voices - * Otherwise, autoWidth defaults to true. - * - * If autowidth is true, the system uses format.preCalculateMinWidth - * for the width of all voices, and default stave padding - */ -export interface SystemOptions { - factory?: Factory; - noPadding?: boolean; - debugFormatter?: boolean; - spaceBetweenStaves?: number; - formatIterations?: number; - autoWidth?: boolean; - x?: number; - width?: number; - y?: number; - details?: SystemFormatterOptions; - formatOptions?: FormatParams; - noJustification?: boolean; -} -/** - * System implements a musical system, which is a collection of staves, - * each which can have one or more voices. All voices across all staves in - * the system are formatted together. - */ -export declare class System extends Element { - static get CATEGORY(): string; - protected options: Required; - protected factory: Factory; - protected formatter?: Formatter; - protected startX?: number; - protected lastY?: number; - protected partStaves: Stave[]; - protected partStaveInfos: StaveInfo[]; - protected partVoices: Voice[]; - protected connector?: StaveConnector; - protected debugNoteMetricsYs?: { - y: number; - stave: Stave; - }[]; - constructor(params?: SystemOptions); - /** Set formatting options. */ - setOptions(options?: SystemOptions): void; - /** Get origin X. */ - getX(): number; - /** Set origin X. */ - setX(x: number): void; - /** Get origin y. */ - getY(): number; - /** Set origin y. */ - setY(y: number): void; - /** Get associated staves. */ - getStaves(): Stave[]; - /** Get associated voices. */ - getVoices(): Voice[]; - /** Set associated context. */ - setContext(context: RenderContext): this; - /** - * Add connector between staves. - * @param type see {@link StaveConnector.typeString} - */ - addConnector(type?: StaveConnectorType): StaveConnector; - /** - * Add a stave to the system. - * - * Example (one voice): - * - * `system.addStave({voices: [score.voice(score.notes('C#5/q, B4, A4, G#4'))]});` - * - * Example (two voices): - * - * `system.addStave({voices: [` - * `score.voice(score.notes('C#5/q, B4, A4, G#4', {stem: 'up'})),` - * `score.voice(score.notes('C#4/h, C#4', {stem: 'down'}))` - * `]});` - */ - addStave(params: SystemStave): Stave; - /** - * Add voices to the system with stave already assigned. - */ - addVoices(voices: Voice[]): void; - /** Format the system. */ - format(): void; - /** Render the system. */ - draw(): void; -} -export {}; diff --git a/build/types/src/tables.d.ts b/build/types/src/tables.d.ts deleted file mode 100644 index 04ddffaa03..0000000000 --- a/build/types/src/tables.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { ArticulationStruct } from './articulation'; -import { Font } from './font'; -import { Fraction } from './fraction'; -import { GlyphProps } from './glyph'; -import { KeyProps } from './note'; -export declare class Tables { - static SOFTMAX_FACTOR: number; - static STEM_WIDTH: number; - static STEM_HEIGHT: number; - static STAVE_LINE_THICKNESS: number; - static RENDER_PRECISION_PLACES: number; - static RESOLUTION: number; - /** - * Customize this by calling Flow.setMusicFont(...fontNames); - */ - static MUSIC_FONT_STACK: Font[]; - /** - * @returns the `Font` object at the head of the music font stack. - */ - static currentMusicFont(): Font; - static NOTATION_FONT_SCALE: number; - static TABLATURE_FONT_SCALE: number; - static SLASH_NOTEHEAD_WIDTH: number; - static STAVE_LINE_DISTANCE: number; - static TEXT_HEIGHT_OFFSET_HACK: number; - static clefProperties(clef: string): { - line_shift: number; - }; - /** - * @param keyOctaveGlyph a string in the format "key/octave" (e.g., "c/5") or "key/octave/custom-note-head-code" (e.g., "g/5/t3"). - * @param clef - * @param params a struct with one option, `octave_shift` for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.). - * @returns properties for the specified note. - */ - static keyProperties(keyOctaveGlyph: string, clef?: string, params?: { - octave_shift?: number; - }): KeyProps; - static integerToNote(integer?: number): string; - static tabToGlyphProps(fret: string, scale?: number): GlyphProps; - static textWidth(text: string): number; - static articulationCodes(artic: string): ArticulationStruct; - static accidentalMap: Record; - static accidentalCodes(acc: string): { - code: string; - parenRightPaddingAdjustment: number; - }; - static accidentalColumnsTable: Record; - static ornamentCodes(acc: string): { - code: string; - }; - static keySignature(spec: string): { - type: string; - line: number; - }[]; - static getKeySignatures(): Record; - static hasKeySignature(spec: string): boolean; - static unicode: { - sharp: string; - flat: string; - natural: string; - triangle: string; - 'o-with-slash': string; - degrees: string; - circle: string; - }; - /** - * Convert duration aliases to the number based duration. - * If the input isn't an alias, simply return the input. - * @param duration - * @returns Example: 'q' -> '4', '8' -> '8' - */ - static sanitizeDuration(duration: string): string; - /** Convert the `duration` to a fraction. */ - static durationToFraction(duration: string): Fraction; - /** Convert the `duration` to a number. */ - static durationToNumber(duration: string): number; - static durationToTicks(duration: string): number; - static codeNoteHead(type: string, duration: string): string; - static getGlyphProps(duration: string, type?: string): GlyphProps; - static validTypes: Record; - static TIME4_4: { - num_beats: number; - beat_value: number; - resolution: number; - }; -} diff --git a/build/types/src/tabnote.d.ts b/build/types/src/tabnote.d.ts deleted file mode 100644 index 8d88a546bf..0000000000 --- a/build/types/src/tabnote.d.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { GlyphProps } from './glyph'; -import { Stave } from './stave'; -import { StaveNoteStruct } from './stavenote'; -import { StemmableNote } from './stemmablenote'; -export interface TabNotePosition { - str: number; - fret: number | string; -} -export interface TabNoteStruct extends StaveNoteStruct { - positions: TabNotePosition[]; -} -export declare class TabNote extends StemmableNote { - static get CATEGORY(): string; - protected ghost: boolean; - protected glyphPropsArr: GlyphProps[]; - protected positions: TabNotePosition[]; - constructor(noteStruct: TabNoteStruct, draw_stem?: boolean); - greatestString: () => number; - leastString: () => number; - reset(): this; - setGhost(ghost: boolean): this; - hasStem(): boolean; - getStemExtension(): number; - updateWidth(): void; - setStave(stave: Stave): this; - getPositions(): TabNotePosition[]; - getModifierStartXY(position: number, index: number): { - x: number; - y: number; - }; - getLineForRest(): number; - preFormat(): void; - getStemX(): number; - getStemY(): number; - getStemExtents(): { - topY: number; - baseY: number; - }; - drawFlag(): void; - drawModifiers(): void; - drawStemThrough(): void; - drawPositions(): void; - draw(): void; -} diff --git a/build/types/src/tabslide.d.ts b/build/types/src/tabslide.d.ts deleted file mode 100644 index 553e52f321..0000000000 --- a/build/types/src/tabslide.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { FontInfo } from './font'; -import { TieNotes } from './stavetie'; -import { TabTie } from './tabtie'; -export declare class TabSlide extends TabTie { - static get CATEGORY(): string; - static TEXT_FONT: Required; - static get SLIDE_UP(): number; - static get SLIDE_DOWN(): number; - static createSlideUp(notes: TieNotes): TabSlide; - static createSlideDown(notes: TieNotes): TabSlide; - /** - * @param notes is a struct of the form: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * @param notes.first_note the starting note of the slide - * @param notes.last_note the ending note of the slide - * @param notes.first_indices specifies which string + fret positions of the TabNote are used in this slide. zero indexed. - * @param notes.last_indices currently unused. we assume it's the same as first_indices. - * - * @param direction TabSlide.SLIDE_UP or TabSlide.SLIDE_DOWN - */ - constructor(notes: TieNotes, direction?: number); - renderTie(params: { - direction: number; - first_x_px: number; - last_x_px: number; - last_ys: number[]; - first_ys: number[]; - }): void; -} diff --git a/build/types/src/tabstave.d.ts b/build/types/src/tabstave.d.ts deleted file mode 100644 index ac87718cd2..0000000000 --- a/build/types/src/tabstave.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Stave, StaveOptions } from './stave'; -export declare class TabStave extends Stave { - static get CATEGORY(): string; - constructor(x: number, y: number, width: number, options?: StaveOptions); - getYForGlyphs(): number; - addTabGlyph(): this; -} diff --git a/build/types/src/tabtie.d.ts b/build/types/src/tabtie.d.ts deleted file mode 100644 index bfc26fa027..0000000000 --- a/build/types/src/tabtie.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { StaveTie, TieNotes } from './stavetie'; -export declare class TabTie extends StaveTie { - static get CATEGORY(): string; - static createHammeron(notes: TieNotes): TabTie; - static createPulloff(notes: TieNotes): TabTie; - /** - * @param notes is a struct that has: - * { - * first_note: Note, - * last_note: Note, - * first_indices: [n1, n2, n3], - * last_indices: [n1, n2, n3] - * } - * - * @param text - */ - constructor(notes: TieNotes, text?: string); -} diff --git a/build/types/src/textbracket.d.ts b/build/types/src/textbracket.d.ts deleted file mode 100644 index 201f9d49fb..0000000000 --- a/build/types/src/textbracket.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Element } from './element'; -import { FontInfo } from './font'; -import { Note } from './note'; -import { RenderContext } from './rendercontext'; -export interface TextBracketParams { - start: Note; - stop: Note; - text?: string; - superscript?: string; - position?: number | string; -} -export declare enum TextBracketPosition { - TOP = 1, - BOTTOM = -1 -} -export declare class TextBracket extends Element { - static DEBUG: boolean; - static get CATEGORY(): string; - static TEXT_FONT: Required; - render_options: { - dashed: boolean; - color: string; - line_width: number; - underline_superscript: boolean; - show_bracket: boolean; - dash: number[]; - bracket_height: number; - }; - protected readonly text: string; - protected readonly superscript: string; - protected line: number; - readonly position: TextBracketPosition; - readonly start: Note; - readonly stop: Note; - static get Position(): typeof TextBracketPosition; - static get PositionString(): Record; - /** - * @deprecated Use `TextBracket.Position` instead. - */ - static get Positions(): typeof TextBracketPosition; - /** - * @deprecated Use `TextBracket.PositionString` instead. - */ - static get PositionsString(): Record; - constructor({ start, stop, text, superscript, position }: TextBracketParams); - /** - * Apply the text backet styling to the provided context. - * @param ctx - * @returns this - */ - applyStyle(ctx: RenderContext): this; - setDashed(dashed: boolean, dash?: number[]): this; - setLine(line: number): this; - draw(): void; -} diff --git a/build/types/src/textdynamics.d.ts b/build/types/src/textdynamics.d.ts deleted file mode 100644 index fa07c00a82..0000000000 --- a/build/types/src/textdynamics.d.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Glyph } from './glyph'; -import { Note } from './note'; -import { TextNoteStruct } from './textnote'; -/** - * `TextDynamics` renders traditional - * text dynamics markings, **ie: p, f, sfz, rfz, ppp** - * - * You can render any dynamics string that contains a combination of - * the following letters: P, M, F, Z, R, S - */ -export declare class TextDynamics extends Note { - /** To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - protected sequence: string; - protected line: number; - protected glyphs: Glyph[]; - /** The glyph data for each dynamics letter. */ - static get GLYPHS(): Record; - /** - * Create the dynamics marking. - * - * A `TextDynamics` object inherits from `Note` so that it can be formatted - * within a `Voice`. - * - * @param noteStruct an object that contains a `duration` property and a - * `sequence` of letters that represents the letters to render. - */ - constructor(noteStruct: TextNoteStruct); - /** Set the Stave line on which the note should be placed. */ - setLine(line: number): this; - /** Preformat the dynamics text. */ - preFormat(): this; - /** Draw the dynamics text on the rendering context. */ - draw(): void; -} diff --git a/build/types/src/textformatter.d.ts b/build/types/src/textformatter.d.ts deleted file mode 100644 index 0ec73b1408..0000000000 --- a/build/types/src/textformatter.d.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { FontGlyph, FontInfo } from './font'; -export interface TextFormatterInfo extends Record { - family: string; - resolution?: number; - glyphs?: Record; - serifs: boolean; - monospaced: boolean; - italic: boolean; - bold: boolean; - maxSizeGlyph?: string; - superscriptOffset?: number; - subscriptOffset?: number; - description: string; -} -/** - * Y information, 0 is baseline, yMin is lowest point. - */ -export interface yExtent { - yMin: number; - yMax: number; - height: number; -} -export declare class TextFormatter { - /** To enable logging for this class. Set `Vex.Flow.TextFormatter.DEBUG` to `true`. */ - static DEBUG: boolean; - /** - * Return all registered font families. - */ - static getFontFamilies(): TextFormatterInfo[]; - /** - * Call `TextFormatter.registerInfo(info)` to register font information before using this method. - * - * This method creates a formatter for the font that most closely matches the requested font. - * We compare font family, bold, and italic attributes. - * This method will return a fallback formatter if there are no matches. - */ - static create(requestedFont?: FontInfo): TextFormatter; - /** - * @param fontFamily used as a key to the font registry. - * @returns the same info object that was passed in via `TextFormatter.registerInfo(info)` - */ - static getInfo(fontFamily: string): TextFormatterInfo | undefined; - /** - * Apps may register their own fonts and metrics, and those metrics - * will be available to the app for formatting. - * - * Metrics can be generated from a font file using fontgen_text.js in the tools/fonts directory. - * @param info - * @param overwrite - */ - static registerInfo(info: TextFormatterInfo, overwrite?: boolean): void; - /** Font family. */ - protected family: string; - /** Specified in `pt` units. */ - protected size: number; - /** Font metrics are extracted at 1000 upem (units per em). */ - protected resolution: number; - /** - * For text formatting, we do not require glyph outlines, but instead rely on glyph - * bounding box metrics such as: - * ``` - * { - * x_min: 48, - * x_max: 235, - * y_min: -17, - * y_max: 734, - * ha: 751, - * leftSideBearing: 48, - * advanceWidth: 286, - * } - * ``` - */ - protected glyphs: Record; - protected description?: string; - protected serifs: boolean; - protected monospaced: boolean; - protected italic: boolean; - protected bold: boolean; - protected superscriptOffset: number; - protected subscriptOffset: number; - protected maxSizeGlyph: string; - protected cacheKey: string; - /** - * Use `TextFormatter.create(...)` to build an instance from information previously - * registered via `TextFormatter.registerInfo(info)`. - */ - private constructor(); - get localHeightCache(): Record; - updateParams(params: TextFormatterInfo): void; - /** Create a hash with the current font data, so we can cache computed widths. */ - updateCacheKey(): void; - /** - * The glyphs table is indexed by the character (e.g., 'C', '@'). - * See: robotoslab_glyphs.ts & petalumascript_glyphs.ts. - */ - getGlyphMetrics(character: string): FontGlyph; - get maxHeight(): number; - /** - * Retrieve the character's advanceWidth as a fraction of an `em` unit. - * For the space character ' ' as defined in the: - * petalumascript_glyphs.ts: 250 advanceWidth in the 1000 unitsPerEm font returns 0.25. - * robotoslab_glyphs.ts: 509 advanceWidth in the 2048 unitsPerEm font returns 0.2485. - */ - getWidthForCharacterInEm(c: string): number; - /** - * Retrieve the character's y bounds (ymin, ymax) and height. - */ - getYForCharacterInPx(c: string): yExtent; - getYForStringInPx(str: string): yExtent; - /** - * Retrieve the total width of `text` in `em` units. - */ - getWidthForTextInEm(text: string): number; - /** The width of the text (in `em`) is scaled by the font size (in `px`). */ - getWidthForTextInPx(text: string): number; - /** - * @param size in pt. - */ - setFontSize(size: number): this; - /** `this.size` is specified in points. Convert to pixels. */ - get fontSizeInPixels(): number; - getResolution(): number; -} diff --git a/build/types/src/textnote.d.ts b/build/types/src/textnote.d.ts deleted file mode 100644 index e3eea99ae9..0000000000 --- a/build/types/src/textnote.d.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { FontInfo } from './font'; -import { Glyph } from './glyph'; -import { Note, NoteStruct } from './note'; -export declare enum TextJustification { - LEFT = 1, - CENTER = 2, - RIGHT = 3 -} -export interface TextNoteStruct extends NoteStruct { - text?: string; - glyph?: string; - ignore_ticks?: boolean; - smooth?: boolean; - font?: FontInfo; - subscript?: string; - superscript?: string; -} -/** - * `TextNote` is a notation element that is positioned in time. Generally - * meant for objects that sit above/below the staff and inline with each other. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - * Examples of this would be such as dynamics, lyrics, chord changes, etc. - */ -export declare class TextNote extends Note { - static get CATEGORY(): string; - static TEXT_FONT: Required; - static readonly Justification: typeof TextJustification; - /** Glyph data. */ - static get GLYPHS(): Record; - protected text: string; - protected glyph?: Glyph; - protected superscript?: string; - protected subscript?: string; - protected smooth: boolean; - protected justification: TextJustification; - protected line: number; - constructor(noteStruct: TextNoteStruct); - /** Set the horizontal justification of the TextNote. */ - setJustification(just: TextJustification): this; - /** Set the Stave line on which the note should be placed. */ - setLine(line: number): this; - /** Return the Stave line on which the TextNote is placed. */ - getLine(): number; - /** Return the unformatted text of this TextNote. */ - getText(): string; - /** Pre-render formatting. */ - preFormat(): void; - /** - * Renders the TextNote. - * `TextNote` has to be assigned to a `Stave` before rendering by means of `setStave`. - */ - draw(): void; -} diff --git a/build/types/src/tickable.d.ts b/build/types/src/tickable.d.ts deleted file mode 100644 index 5730ab27b2..0000000000 --- a/build/types/src/tickable.d.ts +++ /dev/null @@ -1,140 +0,0 @@ -import { Element } from './element'; -import { Fraction } from './fraction'; -import { Modifier } from './modifier'; -import { ModifierContext } from './modifiercontext'; -import { Stave } from './stave'; -import { TickContext } from './tickcontext'; -import { Tuplet } from './tuplet'; -import { Voice } from './voice'; -/** Formatter metrics interface */ -export interface FormatterMetrics { - duration: string; - freedom: { - left: number; - right: number; - }; - iterations: number; - space: { - used: number; - mean: number; - deviation: number; - }; -} -/** - * Tickable represents a element that sit on a score and - * has a duration, i.e., Tickables occupy space in the musical rendering dimension. - */ -export declare abstract class Tickable extends Element { - static get CATEGORY(): string; - protected ignore_ticks: boolean; - protected tupletStack: Tuplet[]; - protected tuplet?: Tuplet; - protected ticks: Fraction; - protected center_x_shift: number; - protected voice?: Voice; - protected width: number; - protected x_shift: number; - protected modifierContext?: ModifierContext; - protected tickContext?: TickContext; - protected modifiers: Modifier[]; - protected tickMultiplier: Fraction; - protected formatterMetrics: FormatterMetrics; - protected intrinsicTicks: number; - protected align_center: boolean; - private _preFormatted; - private _postFormatted; - constructor(); - /** Reset the Tickable, this function will be overloaded. */ - reset(): this; - /** Return the ticks. */ - getTicks(): Fraction; - /** Check if it ignores the ticks. */ - shouldIgnoreTicks(): boolean; - /** Ignore the ticks. */ - setIgnoreTicks(flag: boolean): this; - /** Set width of note. Used by the formatter for positioning. */ - setWidth(width: number): void; - /** Get width of note. Used by the formatter for positioning. */ - getWidth(): number; - /** Displace note by `x` pixels. Used by the formatter. */ - setXShift(x: number): this; - /** Get the `x` displaced pixels of the note. */ - getXShift(): number; - /** Get `x` position of this tick context. */ - getX(): number; - /** Return the formatterMetrics. */ - getFormatterMetrics(): FormatterMetrics; - /** Return the center `x` shift. */ - getCenterXShift(): number; - /** Set the center `x` shift. */ - setCenterXShift(centerXShift: number): this; - isCenterAligned(): boolean; - setCenterAlignment(align_center: boolean): this; - /** - * Return the associated voice. Every tickable must be associated with a voice. - * This allows formatters and preFormatter to associate them with the right modifierContexts. - */ - getVoice(): Voice; - /** Set the associated voice. */ - setVoice(voice: Voice): void; - /** Get the tuplet. */ - getTuplet(): Tuplet | undefined; - /** Return a list of Tuplets. */ - getTupletStack(): Tuplet[]; - /** - * Reset the specific Tuplet (if this is not provided, all tuplets are reset). - * Remove any prior tuplets from the tick calculation and - * reset the intrinsic tick value. - */ - resetTuplet(tuplet?: Tuplet): this; - /** Attach to new tuplet. */ - setTuplet(tuplet: Tuplet): this; - /** - * Add self to the provided ModifierContext `mc`. - * If this tickable has modifiers, set modifierContext. - * @returns this - */ - addToModifierContext(mc: ModifierContext): this; - /** - * Optional, if tickable has modifiers, associate a Modifier. - * @param mod the modifier - */ - addModifier(modifier: Modifier, index?: number): this; - /** Get the list of associated modifiers. */ - getModifiers(): Modifier[]; - /** Set the Tick Context. */ - setTickContext(tc: TickContext): void; - checkTickContext(message?: string): TickContext; - /** Preformat the Tickable. */ - preFormat(): void; - /** Set preformatted status. */ - set preFormatted(value: boolean); - get preFormatted(): boolean; - /** Postformat the Tickable. */ - postFormat(): this; - /** Set postformatted status. */ - set postFormatted(value: boolean); - get postFormatted(): boolean; - /** Return the intrinsic ticks. */ - getIntrinsicTicks(): number; - /** Set the intrinsic ticks. */ - setIntrinsicTicks(intrinsicTicks: number): void; - /** Get the tick multiplier. */ - getTickMultiplier(): Fraction; - /** Apply a tick multiplier. */ - applyTickMultiplier(numerator: number, denominator: number): void; - /** Set the duration. */ - setDuration(duration: Fraction): void; - getAbsoluteX(): number; - /** Attach this note to a modifier context. */ - setModifierContext(mc?: ModifierContext): this; - /** Get `ModifierContext`. */ - getModifierContext(): ModifierContext | undefined; - /** Check and get `ModifierContext`. */ - checkModifierContext(): ModifierContext; - /** Get the target stave. */ - abstract getStave(): Stave | undefined; - /** Set the target stave. */ - abstract setStave(stave: Stave): this; - abstract getMetrics(): any; -} diff --git a/build/types/src/tickcontext.d.ts b/build/types/src/tickcontext.d.ts deleted file mode 100644 index 20e5a92957..0000000000 --- a/build/types/src/tickcontext.d.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Fraction } from './fraction'; -import { NoteMetrics } from './note'; -import { Tickable } from './tickable'; -export interface TickContextMetrics extends NoteMetrics { - totalLeftPx: number; - totalRightPx: number; -} -export interface TickContextOptions { - tickID: number; -} -/** - * TickContext formats abstract tickable objects, such as notes, chords, tabs, etc. - */ -export declare class TickContext { - protected readonly tickID: number; - protected readonly tickables: Tickable[]; - protected readonly tickablesByVoice: Record; - protected currentTick: Fraction; - protected maxTicks: Fraction; - protected padding: number; - protected xBase: number; - protected x: number; - protected xOffset: number; - protected notePx: number; - protected glyphPx: number; - protected leftDisplacedHeadPx: number; - protected rightDisplacedHeadPx: number; - protected modLeftPx: number; - protected modRightPx: number; - protected totalLeftPx: number; - protected totalRightPx: number; - protected maxTickable?: Tickable; - protected minTicks?: Fraction; - protected minTickable?: Tickable; - tContexts: TickContext[]; - protected preFormatted: boolean; - protected postFormatted: boolean; - protected width: number; - protected formatterMetrics: { - freedom: { - left: number; - right: number; - }; - }; - static getNextContext(tContext: TickContext): TickContext | undefined; - constructor(options?: TickContextOptions); - getTickID(): number; - getX(): number; - setX(x: number): this; - getXBase(): number; - setXBase(xBase: number): void; - getXOffset(): number; - setXOffset(xOffset: number): void; - getWidth(): number; - setPadding(padding: number): this; - getMaxTicks(): Fraction; - getMinTicks(): Fraction | undefined; - getMaxTickable(): Tickable | undefined; - getMinTickable(): Tickable | undefined; - getTickables(): Tickable[]; - /** - * Introduced on 2020-04-17 as getTickablesForVoice(voiceIndex). - * https://github.com/0xfe/vexflow/blame/dc97b0cc5bb93171c0038638c34362dc958222ca/src/tickcontext.js#L63 - * Renamed on 2021-08-05 to getTickableForVoice(voiceIndex). Method renamed to singular, since it returns one Tickable. - */ - getTickableForVoice(voiceIndex: number): Tickable; - getTickablesByVoice(): Record; - getCenterAlignedTickables(): Tickable[]; - /** Gets widths context, note and left/right modifiers for formatting. */ - getMetrics(): TickContextMetrics; - getCurrentTick(): Fraction; - setCurrentTick(tick: Fraction): void; - addTickable(tickable: Tickable, voiceIndex?: number): this; - preFormat(): this; - postFormat(): this; - getFormatterMetrics(): { - freedom: { - left: number; - right: number; - }; - }; -} diff --git a/build/types/src/timesigglyph.d.ts b/build/types/src/timesigglyph.d.ts deleted file mode 100644 index 982fc6b06a..0000000000 --- a/build/types/src/timesigglyph.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Glyph, GlyphMetrics } from './glyph'; -import { TimeSignature } from './timesignature'; -export declare class TimeSignatureGlyph extends Glyph { - timeSignature: TimeSignature; - topStartX: number; - botStartX: number; - width: number; - xMin: number; - constructor(timeSignature: TimeSignature, topDigits: string, botDigits: string, code: string, point: number, options?: { - category: string; - }); - getMetrics(): GlyphMetrics; - renderToStave(x: number): void; -} diff --git a/build/types/src/timesignature.d.ts b/build/types/src/timesignature.d.ts deleted file mode 100644 index a7d0115702..0000000000 --- a/build/types/src/timesignature.d.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { Glyph } from './glyph'; -import { StaveModifier } from './stavemodifier'; -import { TimeSignatureGlyph } from './timesigglyph'; -export interface TimeSignatureInfo { - glyph: Glyph; - line: number; - num: boolean; -} -/** - * A TimeSignature is a StaveModifier that can make its appropriate Glyphs directly from - * a provided "timeSpec" such as "4/4", "C|" (cut time), or even something more advanced - * such as "3/4(6/8)" or "2/4+5/8". - */ -export declare class TimeSignature extends StaveModifier { - static get CATEGORY(): string; - static get glyphs(): Record; - point: number; - bottomLine: number; - topLine: number; - protected timeSpec: string; - protected line: number; - protected glyph: Glyph; - protected is_numeric: boolean; - protected validate_args: boolean; - constructor(timeSpec?: string, customPadding?: number, validate_args?: boolean); - /** - * Return TimeSignatureInfo given a string, consisting of line (number), - * num (boolean: same as TimeSignature.getIsNumeric()), and glyph (a Glyph or - * TimeSignatureGlyph object). - */ - parseTimeSpec(timeSpec: string): TimeSignatureInfo; - /** - * Returns a new TimeSignatureGlyph (a Glyph subclass that knows how to draw both - * top and bottom digits along with plus signs etc.) - */ - makeTimeSignatureGlyph(topDigits: string, botDigits: string): TimeSignatureGlyph; - /** - * Returns {line, num (=getIsNumeric), glyph} -- - * but these can also be accessed directly w/ getters and setters. - */ - getInfo(): TimeSignatureInfo; - /** - * Set a new time signature specification without changing customPadding, etc. - * - * The getter for this is `getTimeSpec` not `getTimeSig`. - */ - setTimeSig(timeSpec: string): this; - /** - * Return the timeSpec (such as '4/4' or 'C|' or even '2/4+3/8') of the TimeSignature - */ - getTimeSpec(): string; - /** - * Return the staff line that the TimeSignature sits on. Generally 0 for numerator/ - * denominator time signatures such as 3/4 and 2 for cut/common. - */ - getLine(): number; - /** - * Set the line number that the TimeSignature sits on. Half-values are acceptable - * for spaces, etc. Can be altered, for instance, for signatures that sit above the - * staff in large orchestral scores. - */ - setLine(line: number): void; - /** - * Get the Glyph object used to create the time signature. Numeric time signatures - * such as 3/8 have a composite Glyph stored as a single Glyph object. - */ - getGlyph(): Glyph; - /** - * Set the Glyph object used to draw the time signature, and update the width of the - * TimeSignature to match. The Glyph must define width in its metrics. - */ - setGlyph(glyph: Glyph): void; - /** - * Return a boolean on whether this TimeSignature is drawn with one or more numbers - * (such as 4/4) or not (as in cut time). - */ - getIsNumeric(): boolean; - /** - * Set whether this TimeSignature is drawn with one or more numbers. - */ - setIsNumeric(isNumeric: boolean): void; - /** - * Draw the time signature on a Stave using its RenderContext. Both setStave - * and setContext must already be run. - */ - draw(): void; -} diff --git a/build/types/src/timesignote.d.ts b/build/types/src/timesignote.d.ts deleted file mode 100644 index 56bdf2faeb..0000000000 --- a/build/types/src/timesignote.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ModifierContext } from './modifiercontext'; -import { Note } from './note'; -import { TimeSignature } from './timesignature'; -export declare class TimeSigNote extends Note { - static get CATEGORY(): string; - protected timeSig: TimeSignature; - constructor(timeSpec: string, customPadding?: number); - addToModifierContext(mc: ModifierContext): this; - preFormat(): this; - draw(): void; -} diff --git a/build/types/src/tremolo.d.ts b/build/types/src/tremolo.d.ts deleted file mode 100644 index 8a5f3db4f1..0000000000 --- a/build/types/src/tremolo.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Modifier } from './modifier'; -/** Tremolo implements tremolo notation. */ -export declare class Tremolo extends Modifier { - static get CATEGORY(): string; - protected readonly code: string; - protected readonly num: number; - /** Extra spacing required for big strokes. */ - y_spacing_scale: number; - /** Font scaling for big strokes. */ - extra_stroke_scale: number; - /** - * @param num number of bars - */ - constructor(num: number); - /** Draw the tremolo on the rendering context. */ - draw(): void; -} diff --git a/build/types/src/tuning.d.ts b/build/types/src/tuning.d.ts deleted file mode 100644 index c0195742e2..0000000000 --- a/build/types/src/tuning.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** `Tuning` implements varies types of tunings for tablature. */ -export declare class Tuning { - protected tuningValues: number[]; - static get names(): Record; - /** - * Constructor. - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - constructor(tuningString?: string); - /** Return the note number associated to the note string. */ - noteToInteger(noteString: string): number; - /** - * Set tuning identified by tuning name (eg. 'dagdad') - * @param tuningString tuning name (eg. 'dagdad') or comma separated note strings - */ - setTuning(tuningString: string): void; - /** Return the note number associated with a tablature string. */ - getValueForString(stringNum: string | number): number; - /** Return the note number associated with a tablature string and fret. */ - getValueForFret(fretNum: string | number, stringNum: string | number): number; - /** Return the note string associated with tablature string and fret. */ - getNoteForFret(fretNum: string | number, stringNum: string | number): string; -} diff --git a/build/types/src/tuplet.d.ts b/build/types/src/tuplet.d.ts deleted file mode 100644 index 912c91f04e..0000000000 --- a/build/types/src/tuplet.d.ts +++ /dev/null @@ -1,111 +0,0 @@ -/** - * ## Description - * - * Create a new tuplet from the specified notes. The notes must - * be part of the same voice. If they are of different rhythmic - * values, then options.num_notes must be set. - * - * @constructor - * @param {Array.} A set of notes: staveNotes, - * notes, etc... any class that inherits stemmableNote at some - * point in its prototype chain. - * @param options: object { - * - * num_notes: fit this many notes into... - * notes_occupied: ...the space of this many notes - * - * Together, these two properties make up the tuplet ratio - * in the form of num_notes : notes_occupied. - * num_notes defaults to the number of notes passed in, so - * it is important that if you omit this property, all of - * the notes passed should be of the same note value. - * notes_occupied defaults to 2 -- so you should almost - * certainly pass this parameter for anything other than - * a basic triplet. - * - * location: - * default 1, which is above the notes: ┌─── 3 ───┐ - * -1 is below the notes └─── 3 ───┘ - * - * bracketed: boolean, draw a bracket around the tuplet number - * when true: ┌─── 3 ───┐ when false: 3 - * defaults to true if notes are not beamed, false otherwise - * - * ratioed: boolean - * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐ - * defaults to true if the difference between num_notes and - * notes_occupied is greater than 1. - * - * y_offset: int, default 0 - * manually offset a tuplet, for instance to avoid collisions - * with articulations, etc... - * } - */ -import { Element } from './element'; -import { Glyph } from './glyph'; -import { Note } from './note'; -export interface TupletOptions { - beats_occupied?: number; - bracketed?: boolean; - location?: number; - notes_occupied?: number; - num_notes?: number; - ratioed?: boolean; - y_offset?: number; -} -export interface TupletMetrics { - noteHeadOffset: number; - stemOffset: number; - bottomLine: number; - topModifierOffset: number; -} -export declare const enum TupletLocation { - BOTTOM = -1, - TOP = 1 -} -export declare class Tuplet extends Element { - static get CATEGORY(): string; - notes: Note[]; - protected options: TupletOptions; - protected num_notes: number; - protected point: number; - protected bracketed: boolean; - protected y_pos: number; - protected x_pos: number; - protected width: number; - protected location: number; - protected notes_occupied: number; - protected ratioed: boolean; - protected numerator_glyphs: Glyph[]; - protected denom_glyphs: Glyph[]; - static get LOCATION_TOP(): number; - static get LOCATION_BOTTOM(): number; - static get NESTING_OFFSET(): number; - static get metrics(): TupletMetrics; - constructor(notes: Note[], options?: TupletOptions); - attach(): void; - detach(): void; - /** - * Set whether or not the bracket is drawn. - */ - setBracketed(bracketed: boolean): this; - /** - * Set whether or not the ratio is shown. - */ - setRatioed(ratioed: boolean): this; - /** - * Set the tuplet indicator to be displayed either on the top or bottom of the stave. - */ - setTupletLocation(location: number): this; - getNotes(): Note[]; - getNoteCount(): number; - beatsOccupiedDeprecationWarning(): void; - getBeatsOccupied(): number; - setBeatsOccupied(beats: number): void; - getNotesOccupied(): number; - setNotesOccupied(notes: number): void; - resolveGlyphs(): void; - getNestedTupletCount(): number; - getYPosition(): number; - draw(): void; -} diff --git a/build/types/src/typeguard.d.ts b/build/types/src/typeguard.d.ts deleted file mode 100644 index e1399a8862..0000000000 --- a/build/types/src/typeguard.d.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Accidental } from './accidental'; -import { Annotation } from './annotation'; -import { Dot } from './dot'; -import { GraceNote } from './gracenote'; -import { GraceNoteGroup } from './gracenotegroup'; -import { Note } from './note'; -import { RenderContext } from './rendercontext.js'; -import { Barline } from './stavebarline'; -import { StaveNote } from './stavenote'; -import { StemmableNote } from './stemmablenote'; -import { TabNote } from './tabnote'; -/** - * Use instead of `instanceof` as a more flexible type guard. - * @param obj check if this object's CATEGORY matches the provided category. - * @param category a string representing a category of VexFlow objects. - * @param checkAncestors defaults to `true`, so we walk up the prototype chain to look for a matching `CATEGORY`. - * If `false`, we do not check the superclass or other ancestors. - * @returns true if `obj` has a static `CATEGORY` property that matches `category`. - */ -export declare function isCategory(obj: any, category: string, checkAncestors?: boolean): obj is T; -export declare const isAccidental: (obj: unknown) => obj is Accidental; -export declare const isAnnotation: (obj: unknown) => obj is Annotation; -export declare const isBarline: (obj: unknown) => obj is Barline; -export declare const isDot: (obj: unknown) => obj is Dot; -export declare const isGraceNote: (obj: unknown) => obj is GraceNote; -export declare const isGraceNoteGroup: (obj: unknown) => obj is GraceNoteGroup; -export declare const isNote: (obj: unknown) => obj is Note; -export declare const isRenderContext: (obj: unknown) => obj is RenderContext; -export declare const isStaveNote: (obj: unknown) => obj is StaveNote; -export declare const isStemmableNote: (obj: unknown) => obj is StemmableNote; -export declare const isTabNote: (obj: unknown) => obj is TabNote; -export declare const enum Category { - Accidental = "Accidental", - Annotation = "Annotation", - Articulation = "Articulation", - Barline = "Barline", - BarNote = "BarNote", - Beam = "Beam", - Bend = "Bend", - ChordSymbol = "ChordSymbol", - Clef = "Clef", - ClefNote = "ClefNote", - Crescendo = "Crescendo", - Curve = "Curve", - Dot = "Dot", - Element = "Element", - Fraction = "Fraction", - FretHandFinger = "FretHandFinger", - GhostNote = "GhostNote", - Glyph = "Glyph", - GlyphNote = "GlyphNote", - GraceNote = "GraceNote", - GraceNoteGroup = "GraceNoteGroup", - GraceTabNote = "GraceTabNote", - KeySignature = "KeySignature", - KeySigNote = "KeySigNote", - Modifier = "Modifier", - MultiMeasureRest = "MultiMeasureRest", - Note = "Note", - NoteHead = "NoteHead", - NoteSubGroup = "NoteSubGroup", - Ornament = "Ornament", - Parenthesis = "Parenthesis", - PedalMarking = "PedalMarking", - RenderContext = "RenderContext", - RepeatNote = "RepeatNote", - Repetition = "Repetition", - Stave = "Stave", - StaveConnector = "StaveConnector", - StaveHairpin = "StaveHairpin", - StaveLine = "StaveLine", - StaveModifier = "StaveModifier", - StaveNote = "StaveNote", - StaveSection = "StaveSection", - StaveTempo = "StaveTempo", - StaveText = "StaveText", - StaveTie = "StaveTie", - Stem = "Stem", - StemmableNote = "StemmableNote", - StringNumber = "StringNumber", - Stroke = "Stroke", - System = "System", - TabNote = "TabNote", - TabSlide = "TabSlide", - TabStave = "TabStave", - TabTie = "TabTie", - TextBracket = "TextBracket", - TextDynamics = "TextDynamics", - TextNote = "TextNote", - Tickable = "Tickable", - TimeSignature = "TimeSignature", - TimeSigNote = "TimeSigNote", - Tremolo = "Tremolo", - Tuplet = "Tuplet", - Vibrato = "Vibrato", - VibratoBracket = "VibratoBracket", - Voice = "Voice", - Volta = "Volta" -} diff --git a/build/types/src/util.d.ts b/build/types/src/util.d.ts deleted file mode 100644 index 7a04e0e6d6..0000000000 --- a/build/types/src/util.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** `RuntimeError` will be thrown by VexFlow classes in case of error. */ -export declare class RuntimeError extends Error { - code: string; - constructor(code: string, message?: string); -} -/** VexFlow can be used outside of the browser (e.g., Node) where `window` may not be defined. */ -export declare function globalObject(): typeof globalThis & any; -/** - * Check that `x` is of type `T` and not `undefined`. - * If `x` is `undefined`, throw a RuntimeError with the optionally provided error code and message. - */ -export declare function defined(x?: T, code?: string, message?: string): T; -/** Default log function sends all arguments to console. */ -export declare function log(block: string, ...args: any[]): void; -/** Dump warning to console. */ -export declare function warn(...args: any[]): void; -/** Locate the mid point between stave lines. Returns a fractional line if a space. */ -export declare function midLine(a: number, b: number): number; -/** - * Used by various classes (e.g., SVGContext) to provide a - * unique prefix to element names (or other keys in shared namespaces). - */ -export declare function prefix(text: string): string; -/** - * Convert an arbitrary angle in radians to the equivalent one in the range [0, pi). - */ -export declare function normalizeAngle(a: number): number; -/** - * Return the sum of an array of numbers. - */ -export declare function sumArray(arr: number[]): number; diff --git a/build/types/src/version.d.ts b/build/types/src/version.d.ts deleted file mode 100644 index e5292457ed..0000000000 --- a/build/types/src/version.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export declare const VERSION: string; -export declare const ID: string; -export declare const DATE: string; diff --git a/build/types/src/vex.d.ts b/build/types/src/vex.d.ts deleted file mode 100644 index d05bfe36fe..0000000000 --- a/build/types/src/vex.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Flow } from './flow'; -import { RuntimeError } from './util'; -export declare class Vex { - static Flow: typeof Flow; - /** - * Take `arr` and return a new list consisting of the sorted, unique, - * contents of arr. Does not modify `arr`. - */ - static sortAndUnique(arr: any[], cmp: any, eq: any): any[]; - /** Check if array `arr` contains `obj`. */ - static contains(arr: any[], obj: any): boolean; - static getCanvasContext(canvasSelector: string): RenderingContext; - /** Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds. */ - static benchmark(s: any, f: any): void; - static stackTrace(): string | undefined; - static RERR: RuntimeError; - static RuntimeError: RuntimeError; -} diff --git a/build/types/src/vibrato.d.ts b/build/types/src/vibrato.d.ts deleted file mode 100644 index adfa194c07..0000000000 --- a/build/types/src/vibrato.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Modifier } from './modifier'; -import { ModifierContext, ModifierContextState } from './modifiercontext'; -import { RenderContext } from './rendercontext'; -export interface VibratoRenderOptions { - wave_height: number; - wave_girth: number; - vibrato_width: number; - harsh: boolean; - wave_width: number; -} -/** `Vibrato` implements diverse vibratos. */ -export declare class Vibrato extends Modifier { - static get CATEGORY(): string; - render_options: VibratoRenderOptions; - /** Arrange vibratos inside a `ModifierContext`. */ - static format(vibratos: Vibrato[], state: ModifierContextState, context: ModifierContext): boolean; - constructor(); - /** Set harsh vibrato. */ - setHarsh(harsh: boolean): this; - /** Set vibrato width in pixels. */ - setVibratoWidth(width: number): this; - /** Draw the vibrato on the rendering context. */ - draw(): void; - /** - * Static rendering method that can be called from - * other classes (e.g. VibratoBracket). - */ - static renderVibrato(ctx: RenderContext, x: number, y: number, opts: VibratoRenderOptions): void; -} diff --git a/build/types/src/vibratobracket.d.ts b/build/types/src/vibratobracket.d.ts deleted file mode 100644 index 3d823d14e1..0000000000 --- a/build/types/src/vibratobracket.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Element } from './element'; -import { Note } from './note'; -/** `VibratoBracket` renders vibrato effect between two notes. */ -export declare class VibratoBracket extends Element { - /** To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`. */ - static DEBUG: boolean; - static get CATEGORY(): string; - protected line: number; - protected start?: Note; - protected stop?: Note; - render_options: { - vibrato_width: number; - wave_height: number; - wave_girth: number; - harsh: boolean; - wave_width: number; - }; - /** - * Either the stop or start note must be set, or both of them. - * An undefined value for the start or stop note indicates that the vibrato - * is drawn from the beginning or until the end of the stave accordingly. - */ - constructor(bracket_data: { - stop?: Note | null; - start?: Note | null; - }); - /** Set line position of the vibrato bracket. */ - setLine(line: number): this; - /** Set harsh vibrato bracket. */ - setHarsh(harsh: boolean): this; - /** Draw the vibrato bracket on the rendering context. */ - draw(): void; -} diff --git a/build/types/src/voice.d.ts b/build/types/src/voice.d.ts deleted file mode 100644 index 6d3046d081..0000000000 --- a/build/types/src/voice.d.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { BoundingBox } from './boundingbox'; -import { Element } from './element'; -import { Fraction } from './fraction'; -import { RenderContext } from './rendercontext'; -import { Stave } from './stave'; -import { Tickable } from './tickable'; -export interface VoiceTime { - num_beats: number; - beat_value: number; - /** Defaults to `Flow.RESOLUTION` if not provided. */ - resolution?: number; -} -export declare enum VoiceMode { - STRICT = 1, - SOFT = 2, - FULL = 3 -} -/** - * `Voice` is mainly a container object to group `Tickables` for formatting. - */ -export declare class Voice extends Element { - static get CATEGORY(): string; - /** - * Modes allow the addition of ticks in three different ways: - * - STRICT: This is the default. Ticks must fill the voice. - * - SOFT: Ticks can be added without restrictions. - * - FULL: Ticks do not need to fill the voice, but can't exceed the maximum tick length. - */ - static get Mode(): typeof VoiceMode; - protected resolutionMultiplier: number; - protected smallestTickCount: Fraction; - protected stave?: Stave; - protected mode: VoiceMode; - protected expTicksUsed?: number; - protected preFormatted: boolean; - protected options: { - softmaxFactor: number; - }; - protected readonly totalTicks: Fraction; - protected readonly ticksUsed: Fraction; - protected readonly largestTickWidth: number; - protected readonly tickables: Tickable[]; - protected readonly time: Required; - constructor(time?: VoiceTime | string); - /** Get the total ticks in the voice. */ - getTotalTicks(): Fraction; - /** Get the total ticks used in the voice by all the tickables. */ - getTicksUsed(): Fraction; - /** Get the largest width of all the tickables. */ - getLargestTickWidth(): number; - /** Get the tick count for the shortest tickable */ - getSmallestTickCount(): Fraction; - /** Get the tickables in the voice. */ - getTickables(): Tickable[]; - /** Get the voice mode (Voice.Mode.SOFT, STRICT, or FULL) */ - getMode(): number; - /** - * Set the voice mode. - * @param mode value from `VoiceMode` or Voice.Mode - */ - setMode(mode: number): this; - /** Get the resolution multiplier for the voice. */ - getResolutionMultiplier(): number; - /** Get the actual tick resolution for the voice. */ - getActualResolution(): number; - /** Set the voice's stave. */ - setStave(stave: Stave): this; - getStave(): Stave | undefined; - /** Get the bounding box for the voice. */ - getBoundingBox(): BoundingBox | undefined; - /** Set the voice mode to strict or soft. */ - setStrict(strict: boolean): this; - /** Determine if the voice is complete according to the voice mode. */ - isComplete(): boolean; - /** - * We use softmax to layout the tickables proportional to the exponent of - * their duration. The softmax factor is used to determine the 'linearness' of - * the layout. - * - * The softmax of all the tickables in this voice should sum to 1. - */ - setSoftmaxFactor(factor: number): this; - /** - * Calculate the sum of the exponents of all the ticks in this voice to use - * as the denominator of softmax. (It is not the sum of the softmax(t) over all tickables) - * - * Note that the "exp" of "expTicksUsed" stands for "expontential" ticks used, - * not "expected" ticks used. - */ - protected reCalculateExpTicksUsed(): number; - /** Get the softmax-scaled value of a tick duration. 'tickValue' is a number. */ - softmax(tickValue: number): number; - /** Add a tickable to the voice. */ - addTickable(tickable: Tickable): this; - /** Add an array of tickables to the voice. */ - addTickables(tickables: Tickable[]): this; - /** Preformat the voice by applying the voice's stave to each note. */ - preFormat(): this; - checkStave(): Stave; - /** - * Render the voice onto the canvas `context` and an optional `stave`. - * If `stave` is omitted, it is expected that the notes have staves - * already set. - * - * This method also calculates the voice's boundingBox while drawing - * the notes. Note the similarities with this.getBoundingBox(). - */ - draw(context?: RenderContext, stave?: Stave): void; -} diff --git a/build/types/src/web.d.ts b/build/types/src/web.d.ts deleted file mode 100644 index e5bd19628f..0000000000 --- a/build/types/src/web.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function isHTMLCanvas(element: any): element is HTMLCanvasElement; -export declare function isHTMLDiv(element: any): element is HTMLDivElement;